diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index bf3241a2d9..0000000000 --- a/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# EditorConfig is awesome: http://EditorConfig.org - -root = true - -[*] -end_of_line = lf -insert_final_newline = true - -[*.{js,d.ts,json,html,md,sh}] -charset = utf-8 -indent_style = space -indent_size = 2 diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs deleted file mode 100644 index 17a489a8c3..0000000000 --- a/.git-blame-ignore-revs +++ /dev/null @@ -1,2 +0,0 @@ -# upgrade to prettier 3 -0355483c301dba5e215e2c3d113125a274444e38 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index 936cae52b0..0000000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,105 +0,0 @@ -# Have a question? - -Please ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/immutable.js) instead of opening a Github Issue. There are more people on Stack Overflow who -can answer questions, and good answers can be searchable and canonical. - -# Issues - -We use GitHub issues to track bugs. Please ensure your bug description is clear -and has sufficient instructions to be able to reproduce the issue. - -The absolute best way to report a bug is to submit a pull request including a -new failing test which describes the bug. When the bug is fixed, your pull -request can then be merged! - -The next best way to report a bug is to provide a reduced test case on jsFiddle -or jsBin or produce exact code inline in the issue which will reproduce the bug. - -# Code of Conduct - -Immutable.js is maintained within the [Contributor Covenant's Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/). - -# Pull Requests - -All active development of Immutable JS happens on GitHub. We actively welcome -your [pull requests](https://help.github.com/articles/creating-a-pull-request). - -1. Fork the repo and create your branch from `master`. -2. Install all dependencies. (`npm install`) -3. If you've added code, add tests. -4. If you've changed APIs, update the documentation. -5. Build generated JS, run tests and ensure your code passes lint. (`npm run test`) -6. If you haven't already, complete the Contributor License Agreement ("CLA"). - -## Documentation - -Documentation for Immutable.js (hosted at http://immutable-js.github.io/immutable-js) -is developed in `pages/`. Run `npm start` to get a local copy in your browser -while making edits. - -## Coding Style - -- 2 spaces for indentation (no tabs) -- 80 character line length strongly preferred. -- Prefer `'` over `"` -- ES6 Harmony when possible. -- Use semicolons; -- Trailing commas, -- Avd abbr wrds. - -# Functionality Testing - -Run the following command to build the library and test functionality: - -```bash -npm run test -``` - -## Performance Regression Testing - -Performance tests run against master and your feature branch. -Make sure to commit your changes in your local feature branch before proceeding. - -These commands assume you have a remote named `upstream` amd that you do not already have a local `master` branch: - -```bash -git fetch upstream -git checkout -b master upstream/master -``` - -These commands build `dist` and commit `dist/immutable.js` to `master` so that the regression tests can run. -```bash -npm run test -git add dist/immutable.js -f -git commit -m 'perf test prerequisite.' -``` - -Switch back to your feature branch, and run the following command to run regression tests: - -```bash -npm run test -npm run perf -``` - -Sample output: - -```bash -> immutable@4.0.0-rc.9 perf ~/github.com/immutable-js/immutable-js -> node ./resources/bench.js - -List > builds from array of 2 - Old: 678,974 683,071 687,218 ops/sec - New: 669,012 673,553 678,157 ops/sec - compare: 1 -1 - diff: -1.4% - rme: 0.64% -``` - -## TypeScript version support - -TypeScript version does support the same version as [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) versions. Immutable "may" work with older versions, but no support will be provided. - -## License - -By contributing to Immutable.js, you agree that your contributions will be -licensed under its MIT license. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 4cf7679033..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: [jdeniau, Methuselah96] diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 3387aa797e..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,42 +0,0 @@ - - -### What happened - - - -### How to reproduce - - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 29c1b4a5d3..0000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,139 +0,0 @@ -name: CI - -on: - push: - branches: - - main - - 5.x - - 6.x - pull_request: ~ - -jobs: - lint: - name: 'Lint' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '20' - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - run: npm ci - - run: npm run lint - - run: npm run check-git-clean - - type-check: - name: 'Type Check' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '20' - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - uses: actions/cache@v4 - with: - path: ~/.dts - key: ${{ runner.OS }}-dts-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-dts- - - run: npm ci - - run: npm run type-check - - run: npm run check-git-clean - - test: - name: 'Build & Unit Test & Type Test' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '20' - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - name: 'Install dependencies' - run: npm ci - - - name: 'Build JS files' - run: npm run build - - - name: 'Ensure all files are builded' - run: npm run check-build-output - - - name: 'Run unit tests' - run: npm run test:unit - - - name: 'Test types' - run: npm run test:types -- --target 4.5,5.0,current - - - run: npx size-limit - - run: npm run check-git-clean - - website: - name: 'Build Website' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: '20' - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - run: npm ci - - run: NODE_OPTIONS=--openssl-legacy-provider npm run website:build - - run: npm run check-git-clean - - publish: - name: 'Publish' - needs: [lint, type-check, test, website] - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: '20' - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - run: npm ci - - run: npm run build - - run: NODE_OPTIONS=--openssl-legacy-provider npm run website:build - - name: Push NPM Branch - if: github.ref == 'refs/heads/main' - uses: peaceiris/actions-gh-pages@v3 - with: - enable_jekyll: true - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./npm - publish_branch: npm - user_name: 'github-actions[bot]' - user_email: 'github-actions[bot]@users.noreply.github.com' - - name: Publish Docs - if: github.ref == 'refs/heads/main' - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./website/out - cname: immutable-js.com - user_name: 'github-actions[bot]' - user_email: 'github-actions[bot]@users.noreply.github.com' diff --git a/.github/workflows/output_diff.yml b/.github/workflows/output_diff.yml deleted file mode 100644 index 74690ee3cd..0000000000 --- a/.github/workflows/output_diff.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: CI - -on: - pull_request: - branches: - - main - - init-migrate-to-ts - # run only if there is ts files in the PR - paths: - - 'src/**/*.ts' - -jobs: - diff: - name: 'Output diff' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - path: 'pr' - - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.base.sha }} - path: 'main' - - - uses: actions/setup-node@v4 - with: - node-version: '20' - - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - - name: 'Install PR branch dependencies' - run: npm ci - working-directory: pr - - - name: 'Install main branch dependencies' - run: npm ci - working-directory: main - - - name: 'Build PR branch' - run: npm run build - working-directory: pr - - - name: 'Build main branch' - run: npm run build - working-directory: main - - - name: 'Execute prettier and remove ts-expect-error on PR dist' - run: npx terser dist/immutable.es.js --comments false | npx prettier --parser=babel > dist/immutable.es.prettier.js - - working-directory: pr - - - name: 'Execute prettier main dist' - run: npx terser dist/immutable.es.js --comments false | npx prettier --parser=babel > dist/immutable.es.prettier.js - working-directory: main - - - name: 'Output diff' - run: diff --unified --ignore-blank-lines --ignore-all-space main/dist/immutable.es.prettier.js pr/dist/immutable.es.prettier.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index ad6d4d72ad..0000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Release - -on: - workflow_dispatch: ~ - release: - types: [published] - -jobs: - build: - name: 'Build & Publish to NPM' - permissions: - contents: read - id-token: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '20' - registry-url: 'https://registry.npmjs.org' - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.OS }}-node- - - run: npm ci - - run: npm run build - - name: 'Determine NPM tag: latest or next depending if we are on a prerelease or not (version with hyphen should be a prerelease)' - id: npm_tag - run: | - VERSION=$(node -p "require('./package.json').version") - if [[ $VERSION == *-* ]]; then - echo "TAG=next" >> "$GITHUB_OUTPUT" - else - echo "TAG=latest" >> "$GITHUB_OUTPUT" - fi - - run: cd npm && npm publish --provenance --tag ${{ steps.npm_tag.outputs.TAG }} - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 972b88d8e1..0000000000 --- a/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -.*.haste_cache.* -node_modules -npm-debug.log -yarn-error.log -.DS_Store -*~ -*.swp -.idea -*.iml -TODO -/website/.next -/website/out -/website/public/sitemap*.xml -/website/public/robots.txt -/gh-pages -/npm -/dist -/coverage \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 3b56666703..0000000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -type-definitions/flow-tests/ diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 544138be45..0000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": true -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 9df8e0fce0..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,703 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -Dates are formatted as YYYY-MM-DD. - -## Unreleased - -## 5.1.2 - -- Revert previous assertion as it introduced a regression [#2102](https://github.com/immutable-js/immutable-js/pull/2102) by [@giggo1604](https://github.com/giggo1604) -- Merge should work with empty record [#2103](https://github.com/immutable-js/immutable-js/pull/2103) by [@jdeniau](https://github.com/jdeniau) - -## 5.1.1 - -- Fix type copying - -## 5.1.0 - -- Add shuffle to list [#2066](https://github.com/immutable-js/immutable-js/pull/2066) by [@mazerty](https://github.com/mazerty) -- TypeScript: Better getIn `RetrievePath` [#2070](https://github.com/immutable-js/immutable-js/pull/2070) by [@jdeniau](https://github.com/jdeniau) -- Fix #1915 "Converting a Seq to a list causes RangeError (max call size exceeded)" by @alexvictoor in [#2038](https://github.com/immutable-js/immutable-js/pull/2038) -- TypeScript: Fix proper typings for Seq.concat() [#2040](https://github.com/immutable-js/immutable-js/pull/2040) by [@alexvictoor](https://github.com/alexvictoor) -- Fix Uncaught "TypeError: keyPath.slice is not a function" for ArrayLike method [#2065](https://github.com/immutable-js/immutable-js/pull/2065) by [@jdeniau](https://github.com/jdeniau) - -### Internal - -- Upgrade typescript and typescript-eslint [#2046](https://github.com/immutable-js/immutable-js/pull/2046) by [@jdeniau](https://github.com/jdeniau) -- Upgrade to rollup 4 [#2049](https://github.com/immutable-js/immutable-js/pull/2049) by [@jdeniau](https://github.com/jdeniau) -- Start migrating codebase to TypeScript without any runtime change nor .d.ts change: - - allow TS files to be compiled in src dir [#2054](https://github.com/immutable-js/immutable-js/pull/2054) by [@jdeniau](https://github.com/jdeniau) -- add exception for code that should not happen in updateIn [#2074](https://github.com/immutable-js/immutable-js/pull/2074) by [@jdeniau](https://github.com/jdeniau) -- Reformat Range.toString for readability [#2075](https://github.com/immutable-js/immutable-js/pull/2075) by [@Ustin.Vaskin](https://github.com/ustinvaskin) - -## [5.0.3] - -- Fix List.VNode.removeAfter() / removeBefore() issue on some particular case [#2030](https://github.com/immutable-js/immutable-js/pull/2030) by [@alexvictoor](https://github.com/alexvictoor) - -## [5.0.2] - -- Fix wrong path for esm module after fix in 5.0.1 - -## [5.0.1] - -- Fix circular dependency issue with ESM build by @iambumblehead in [#2035](https://github.com/immutable-js/immutable-js/pull/2035) by [@iambumblehead](https://github.com/iambumblehead) - -## [5.0.0] - -### Breaking changes - -To sum up, the **big** change in 5.0 is a Typescript change related to `Map` that is typed closer to the JS object. This is a huge change for TS users, but do not impact the runtime behavior. (see [Improve TypeScript definition for `Map`](#typescript-break-improve-typescript-definition-for-map) for more details) - -Other breaking changes are: - -#### [BREAKING] Remove deprecated methods: - -_Released in 5.0.0-rc.1_ - -- `Map.of('k', 'v')`: use `Map([ [ 'k', 'v' ] ])` or `Map({ k: 'v' })` -- `Collection.isIterable`: use `isIterable` directly -- `Collection.isKeyed`: use `isKeyed` directly -- `Collection.isIndexed`: use `isIndexed` directly -- `Collection.isAssociative`: use `isAssociative` directly -- `Collection.isOrdered`: use `isOrdered` directly - -#### [BREAKING] `OrdererMap` and `OrderedSet` hashCode implementation has been fixed - -_Released in 5.0.0-rc.1_ - -Fix issue implementation of `hashCode` for `OrdererMap` and `OrderedSet` where equal objects might not return the same `hashCode`. - -Changed in [#2005](https://github.com/immutable-js/immutable-js/pull/2005) - -#### [BREAKING] Range function needs at least two defined parameters - -_Released in 5.0.0-beta.5_ - -Range with `undefined` would end in an infinite loop. Now, you need to define at least the start and end values. - -If you need an infinite range, you can use `Range(0, Infinity)`. - -Changed in [#1967](https://github.com/immutable-js/immutable-js/pull/1967) by [@jdeniau](https://github.com/jdeniau) - -#### [Minor BC break] Remove default export - -_Released in 5.0.0-beta.1_ - -Immutable does not export a default object containing all it's API anymore. -As a drawback, you can not `immport Immutable` directly: - -```diff -- import Immutable from 'immutable'; -+ import { List, Map } from 'immutable'; - -- const l = Immutable.List([Immutable.Map({ a: 'A' })]); -+ const l = List([Map({ a: 'A' })]); -``` - -If you want the non-recommanded, but shorter migration path, you can do this: - -```diff -- import Immutable from 'immutable'; -+ import * as Immutable from 'immutable'; - - const l = Immutable.List([Immutable.Map({ a: 'A' })]); -``` - -#### [TypeScript Break] Improve TypeScript definition for `Map` - -_Released in 5.0.0-beta.1_ - -> If you do use TypeScript, then this change does not impact you : no runtime change here. -> But if you use Map with TypeScript, this is a HUGE change ! -> Imagine the following code - -```ts -const m = Map({ length: 3, 1: 'one' }); -``` - -This was previously typed as `Map` - -and return type of `m.get('length')` or `m.get('inexistant')` was typed as `string | number | undefined`. - -This made `Map` really unusable with TypeScript. - -Now the Map is typed like this: - -```ts -MapOf<{ - length: number; - 1: string; -}>; -``` - -and the return type of `m.get('length')` is typed as `number`. - -The return of `m.get('inexistant')` throw the TypeScript error: - -> Argument of type '"inexistant"' is not assignable to parameter of type '1 | "length" - -##### If you want to keep the old definition - -**This is a minor BC for TS users**, so if you want to keep the old definition, you can declare you Map like this: - -```ts -const m = Map({ length: 3, 1: 'one' }); -``` - -##### If you need to type the Map with a larger definition - -You might want to declare a wider definition, you can type your Map like this: - -```ts -type MyMapType = { - length: number; - 1: string | null; - optionalProperty?: string; -}; -const m = Map({ length: 3, 1: 'one' }); -``` - -Keep in mind that the `MapOf` will try to be consistant with the simple TypeScript object, so you can not do this: - -```ts -Map({ a: 'a' }).set('b', 'b'); -Map({ a: 'a' }).delete('a'); -``` - -Like a simple object, it will only work if the type is forced: - -```ts -Map<{ a: string; b?: string }>({ a: 'a' }).set('b', 'b'); // b is forced in type and optional -Map<{ a?: string }>({ a: 'a' }).delete('a'); // you can only delete an optional key -``` - -##### Are all `Map` methods implemented ? - -For now, only `get`, `getIn`, `set`, `update`, `delete`, `remove`, `toJS`, `toJSON` methods are implemented. All other methods will fallback to the basic `Map` definition. Other method definition will be added later, but as some might be really complex, we prefer the progressive enhancement on the most used functions. - -### Fixes - -- Fix type inference for first() and last() [#2001](https://github.com/immutable-js/immutable-js/pull/2001) by [@butchler](https://github.com/butchler) -- Fix issue with empty list that is a singleton [#2004](https://github.com/immutable-js/immutable-js/pull/2004) by [@jdeniau](https://github.com/jdeniau) -- Map and Set sort and sortBy return type [#2013](https://github.com/immutable-js/immutable-js/pull/2013) by [@jdeniau](https://github.com/jdeniau) - -### Internal - -- [Internal] Migrating TS type tests from dtslint to [TSTyche](https://tstyche.org/) [#1988](https://github.com/immutable-js/immutable-js/pull/1988) and [#1991](https://github.com/immutable-js/immutable-js/pull/1991) by [@mrazauskas](https://github.com/mrazauskas). - Special thanks to [@arnfaldur](https://github.com/arnfaldur) that migrated every type tests to tsd just before that. -- [internal] Upgrade to rollup 3.x [#1965](https://github.com/immutable-js/immutable-js/pull/1965) by [@jdeniau](https://github.com/jdeniau) -- [internal] upgrade tooling (TS, eslint) and documentation packages: #1971, #1972, #1973, #1974, #1975, #1976, #1977, #1978, #1979, #1980, #1981 - -## [4.3.7] - 2024-07-22 - -- Fix issue with slice negative of filtered sequence [#2006](https://github.com/immutable-js/immutable-js/pull/2006) by [@jdeniau](https://github.com/jdeniau) - -## [4.3.6] - 2024-05-13 - -- Fix `Repeat().equals(undefined)` incorrectly returning true [#1994](https://github.com/immutable-js/immutable-js/pull/1994) by [@butchler](https://github.com/butchler) - -## [4.3.5] - 2024-01-16 - -- Upgrade to TS 5.1 [#1972](https://github.com/immutable-js/immutable-js/pull/1972) by [@jdeniau](https://github.com/jdeniau) -- Fix Set.fromKeys types with Map constructor in TS 5.0 [#1971](https://github.com/immutable-js/immutable-js/pull/1971) by [@jdeniau](https://github.com/jdeniau) -- Fix Read the Docs link on readme [#1970](https://github.com/immutable-js/immutable-js/pull/1970) by [@joshding](https://github.com/joshding) - -## [4.3.4] - 2023-08-25 - -- Rollback toJS type due to circular reference error [#1958](https://github.com/immutable-js/immutable-js/pull/1958) by [@jdeniau](https://github.com/jdeniau) - -## [4.3.3] - 2023-08-23 - -- [typescript] manage to handle toJS circular reference. [#1932](https://github.com/immutable-js/immutable-js/pull/1932) by [@jdeniau](https://github.com/jdeniau) -- [doc] Add install instructions for pnpm and Bun [#1952](https://github.com/immutable-js/immutable-js/pull/1952) by [@colinhacks](https://github.com/colinhacks) and [#1953](https://github.com/immutable-js/immutable-js/pull/1953) by [@menglingyu659](https://github.com/menglingyu659) - -## [4.3.2] - 2023-08-01 - -- [TypeScript] Fix isOrderedSet type [#1948](https://github.com/immutable-js/immutable-js/pull/1948) - -## [4.3.1] - 2023-07-11 - -- Faster and implementation of `some` [#1944](https://github.com/immutable-js/immutable-js/pull/1944) -- [internal] remove unused exports [#1928](https://github.com/immutable-js/immutable-js/pull/1928) - -## [4.3.0] - 2023-03-10 - -- Introduce Comparator and PairSorting [#1937](https://github.com/immutable-js/immutable-js/pull/1937) by [@https://github.com/giancosta86](https://github.com/giancosta86) -- [TypeScript] Fix fromJS declaration for greater compatibility [#1936](https://github.com/immutable-js/immutable-js/pull/1936) - -## [4.2.4] - 2023-02-06 - -- [TypeScript] Improve type infererence for from JS by [KSXGitHub](https://github.com/KSXGitHub) [#1927](https://github.com/immutable-js/immutable-js/pull/1927) - -## [4.2.3] - 2023-02-02 - -- [TypeScript] `groupBy` return either a `Map` or an `OrderedMap`: make the type more precise than base `Collection` [#1924](https://github.com/immutable-js/immutable-js/pull/1924) - -## [4.2.2] - 2023-01-02 - -- [Flow] Add type for `partition` method [#1920](https://github.com/immutable-js/immutable-js/pull/1920) by [Dagur](https://github.com/Dagur) - -## [4.2.1] - 2022-12-23 - -- [Typescript] rollback some of the change on `toJS` to avoir circular reference - -## [4.2.0] - 2022-12-22 - -- [TypeScript] Better type for toJS [#1917](https://github.com/immutable-js/immutable-js/pull/1917) by [jdeniau](https://github.com/jdeniau) - - [TS Minor Break] tests are ran with TS > 4.5 only. It was tested with TS > 2.1 previously, but we want to level up TS types with recent features. TS 4.5 has been released more than one year before this release. If it does break your implementation (it might not), you should probably consider upgrading to the latest TS version. -- Added a `partition` method to all containers [#1916](https://github.com/immutable-js/immutable-js/pull/1916) by [johnw42](https://github.com/johnw42) - -## [4.1.0] - 2022-05-23 - -- Accept Symbol as Map key. [#1859](https://github.com/immutable-js/immutable-js/pull/1859) by [jdeniau](https://github.com/jdeniau) -- Optimize contructors without arguments [#1887](https://github.com/immutable-js/immutable-js/pull/1887) by [marianoguerra](https://github.com/marianoguerra) -- Fix Flow removeIn types [#1902](https://github.com/immutable-js/immutable-js/pull/1902) by [nifgraup](https://github.com/nifgraup) -- Fix bug in Record.equals when comparing against Map [#1903](https://github.com/immutable-js/immutable-js/pull/1903) by [jmtoung](https://github.com/jmtoung) - -## [4.0.0] - 2021-09-30 - -This release brings new functionality and many fixes. - -1. [Key changes](#key-changes) -1. [Note for users of v4.0.0-rc.12](#note-for-users-of-v400-rc12) -1. [Breaking changes](#breaking) -1. [New](#new) -1. [Fixed](#fixed) - -### Key changes - -- New members have joined the team -- The project has been relicensed as MIT -- Better TypeScript and Flow type definitions -- A brand-new documentation lives at [immutable-js.com](https://immutable-js.com/) and can show multiple versions -- Behavior of `merge` and `mergeDeep` has changed -- `Iterable` is renamed to [Collection](https://immutable-js.com/docs/latest@main/Collection/) -- [Records](https://immutable-js.com/docs/latest@main/Record/) no longer extend from Collections -- All collection types now implement the [ES6 iterable protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol) -- New methods: - - [toJSON()]() - - [wasAltered()]() - - [Collection.Indexed.zipAll()]() - - [Map.deleteAll()]() - -
   Diff of changed API (click to expand) - -```diff -+ Collection.[Symbol.iterator] -+ Collection.toJSON -+ Collection.update -+ Collection.Indexed.[Symbol.iterator] -+ Collection.Indexed.toJSON -+ Collection.Indexed.update -+ Collection.Indexed.zipAll -+ Collection.Keyed.[Symbol.iterator] -+ Collection.Keyed.toJSON -+ Collection.Keyed.update -+ Collection.Set.[Symbol.iterator] -+ Collection.Set.toJSON -+ Collection.Set.update -- Collection.size -- Collection.Indexed.size -- Collection.Keyed.size -- Collection.Set.size - -+ List.[Symbol.iterator] -+ List.toJSON -+ List.wasAltered -+ List.zipAll -- List.mergeDeep -- List.mergeDeepWith -- List.mergeWith - -+ Map.[Symbol.iterator] -+ Map.deleteAll -+ Map.toJSON -+ Map.wasAltered - -+ OrderedMap.[Symbol.iterator] -+ OrderedMap.deleteAll -+ OrderedMap.toJSON -+ OrderedMap.wasAltered -+ OrderedSet.[Symbol.iterator] -+ OrderedSet.toJSON -+ OrderedSet.update -+ OrderedSet.wasAltered -+ OrderedSet.zip -+ OrderedSet.zipAll -+ OrderedSet.zipWith - -+ Record.[Symbol.iterator] -+ Record.asImmutable -+ Record.asMutable -+ Record.clear -+ Record.delete -+ Record.deleteIn -+ Record.merge -+ Record.mergeDeep -+ Record.mergeDeepIn -+ Record.mergeDeepWith -+ Record.mergeIn -+ Record.mergeWith -+ Record.set -+ Record.setIn -+ Record.toJSON -+ Record.update -+ Record.updateIn -+ Record.wasAltered -+ Record.withMutations -+ Record.Factory.displayName -- Record.butLast -- Record.concat -- Record.count -- Record.countBy -- Record.entries -- Record.entrySeq -- Record.every -- Record.filter -- Record.filterNot -- Record.find -- Record.findEntry -- Record.findKey -- Record.findLast -- Record.findLastEntry -- Record.findLastKey -- Record.first -- Record.flatMap -- Record.flatten -- Record.flip -- Record.forEach -- Record.groupBy -- Record.includes -- Record.isEmpty -- Record.isSubset -- Record.isSuperset -- Record.join -- Record.keyOf -- Record.keySeq -- Record.keys -- Record.last -- Record.lastKeyOf -- Record.map -- Record.mapEntries -- Record.mapKeys -- Record.max -- Record.maxBy -- Record.min -- Record.minBy -- Record.reduce -- Record.reduceRight -- Record.rest -- Record.reverse -- Record.skip -- Record.skipLast -- Record.skipUntil -- Record.skipWhile -- Record.slice -- Record.some -- Record.sort -- Record.sortBy -- Record.take -- Record.takeLast -- Record.takeUntil -- Record.takeWhile -- Record.toArray -- Record.toIndexedSeq -- Record.toKeyedSeq -- Record.toList -- Record.toMap -- Record.toOrderedMap -- Record.toOrderedSet -- Record.toSet -- Record.toSetSeq -- Record.toStack -- Record.valueSeq -- Record.values - -+ Seq.[Symbol.iterator] -+ Seq.toJSON -+ Seq.update -+ Seq.Indexed.[Symbol.iterator] -+ Seq.Indexed.toJSON -+ Seq.Indexed.update -+ Seq.Indexed.zipAll -+ Seq.Keyed.[Symbol.iterator] -+ Seq.Keyed.toJSON -+ Seq.Keyed.update -+ Seq.Set.[Symbol.iterator] -+ Seq.Set.toJSON -+ Seq.Set.update - -+ Set.[Symbol.iterator] -+ Set.toJSON -+ Set.update -+ Set.wasAltered - -+ Stack.[Symbol.iterator] -+ Stack.toJSON -+ Stack.update -+ Stack.wasAltered -+ Stack.zipAll - -+ ValueObject.equals -+ ValueObject.hashCode - -- Iterable.* -- Iterable.Indexed.* -- Iterable.Keyed.* -- Iterable.Set.* -``` - -
- -### Note for users of v4.0.0-rc.12 - -There were mostly bugfixes and improvements since RC 12. Upgrading should be painless for most users. -However, there is **one breaking change**: The behavior of `merge` and `mergeDeep` has changed. See below for details. - -### BREAKING - -#### [merge()]() - -- No longer use value-equality within `merge()` ([#1391](https://github.com/immutable-js/immutable-js/pull/1391)) - - > This rectifies an inconsistent behavior between `x.merge(y)` and `x.mergeDeep(y)` where merge would - > use `===` on leaf values to determine return-self optimizations, while mergeDeep would use `is()`. - > This improves consistency across the library and avoids a possible performance pitfall. - -- No longer deeply coerce argument to merge() ([#1339](https://github.com/immutable-js/immutable-js/pull/1339)) - > Previously, the argument provided to `merge()` was deeply converted to Immutable collections via `fromJS()`. - > This was the only function in the library which calls `fromJS()` indirectly, - > and it was surprising and made it difficult to understand what the result of `merge()` would be. - > Now, the value provided to `merge()` is only shallowly converted to an Immutable collection, similar to - > related methods in the library. This may change the behavior of your calls to `merge()`. - -#### [mergeDeep()]() - -- Replace incompatible collections when merging nested data ([#1840](https://github.com/immutable-js/immutable-js/pull/1840)) - - > It will no longer merge lists of tuples into maps. For more information see - > [#1840](https://github.com/immutable-js/immutable-js/pull/1840) and the updated `mergeDeep()` documentation. - -- Concat Lists when merging deeply ([#1344](https://github.com/immutable-js/immutable-js/pull/1344)) - > Previously, calling `map.mergeDeep()` with a value containing a `List` would replace the values in the - > original List. This has always been confusing, and does not properly treat `List` as a monoid. - > Now, `List.merge` is simply an alias for `List.concat`, and `map.mergeDeep()` will concatenate deeply-found lists - > instead of replacing them. - -#### [Seq](https://immutable-js.com/docs/latest@main/Seq/) - -- Remove IteratorSequence. Do not attempt to detect iterators in `Seq()`. ([#1589](https://github.com/immutable-js/immutable-js/pull/1589)) - - > Iterables can still be provided to `Seq()`, and _most_ Iterators are also - > Iterables, so this change should not affect the vast majority of uses. - > For more information, see PR #1589 - -- Remove `Seq.of()` (#1311, #1310) - > This method has been removed since it cannot be correctly typed. It's recommended to convert - > `Seq.of(1, 2, 3)` to `Seq([1, 2, 3])`. - -#### [isImmutable()]() - -- `isImmutable()` now returns true for collections currently within a `withMutations()` call. ([#1374](https://github.com/immutable-js/immutable-js/pull/1374)) - - > Previously, `isImmutable()` did double-duty of both determining if a value was a Collection or Record - > from this library as well as if it was outside a `withMutations()` call. - > This latter case caused confusion and was rarely used. - -#### [toArray()]() - -- KeyedCollection.toArray() returns array of tuples. ([#1340](https://github.com/immutable-js/immutable-js/pull/1340)) - - > Previously, calling `toArray()` on a keyed collection (incl `Map` and `OrderedMap`) would - > discard keys and return an Array of values. This has always been confusing, and differs from `Array.from()`. - > Now, calling `toArray()` on a keyed collection will return an Array of `[key, value]` tuples, matching - > the behavior of `Array.from()`. - -#### [concat()]() - -- `list.concat()` now has a slightly more efficient implementation and `map.concat()` is an alias for `map.merge()`. ([#1373](https://github.com/immutable-js/immutable-js/pull/1373)) - - > In rare cases, this may affect use of `map.concat()` which expected slightly different behavior from `map.merge()`. - -#### [Collection](https://immutable-js.com/docs/latest@main/Collection/), formerly `Iterable` - -- The `Iterable` class has been renamed to `Collection`, and `isIterable()` has been renamed to `isCollection()`. - Aliases with the existing names exist to make transitioning code easier. - -#### [Record](https://immutable-js.com/docs/latest@main/Record/) - -- Record is no longer an Immutable Collection type. - - Now `isCollection(myRecord)` returns `false` instead of `true`. - - The sequence API (such as `map`, `filter`, `forEach`) no longer exist on Records. - - `delete()` and `clear()` no longer exist on Records. - -#### Other breaking changes - -- **Potentially Breaking:** Improve hash speed and avoid collision for common values ([#1629](https://github.com/immutable-js/immutable-js/pull/1629)) - - > Causes some hash values to change, which could impact the order of iteration of values in some Maps - > (which are already advertised as unordered, but highlighting just to be safe) - -- Node buffers no longer considered value-equal ([#1437](https://github.com/immutable-js/immutable-js/pull/1437)) - -- Plain Objects and Arrays are no longer considered opaque values ([#1369](https://github.com/immutable-js/immutable-js/pull/1369)) - - > This changes the behavior of a few common methods with respect to plain Objects and Arrays where these were - > previously considered opaque to `merge()` and `setIn()`, they now are treated as collections and can be merged - > into and updated (persistently). This offers an exciting alternative to small Lists and Records. - -- The "predicate" functions, `isCollection`, `isKeyed`, `isIndexed`, `isAssociative` have been moved from `Iterable.` to the top level exports. - -- The `toJSON()` method performs a shallow conversion (previously it was an alias for `toJS()`, which remains a deep conversion). - -- Some minor implementation details have changed, which may require updates to libraries which deeply integrate with Immutable.js's private APIs. - -- The Cursor API is officially deprecated. Use [immutable-cursor](https://github.com/redbadger/immutable-cursor) instead. - -- **Potentially Breaking:** [TypeScript] Remove `Iterable` as tuple from Map constructor types ([#1626](https://github.com/immutable-js/immutable-js/pull/1626)) - > Typescript allowed constructing a Map with a list of List instances, assuming each was a key, value pair. - > While this runtime behavior still works, this type led to more issues than it solved, so it has been removed. - > (Note, this may break previous v4 rcs, but is not a change against v3) - -### New - -- Update TypeScript and Flow definitions: - - The Flowtype and TypeScript type definitions have been completely rewritten with much higher quality and accuracy, - taking advantage of the latest features from both tools. - - Simplified TypeScript definition files to support all UMD use cases ([#1854](https://github.com/immutable-js/immutable-js/pull/1854)) - - Support Typescript 3 ([#1593](https://github.com/immutable-js/immutable-js/pull/1593)) - - Support Typescript strictNullChecks ([#1168](https://github.com/immutable-js/immutable-js/pull/1168)) - - Flow types to be compatible with the latest version 0.160.0 - - Enable flow strict ([#1580](https://github.com/immutable-js/immutable-js/pull/1580)) - - - -- Add "sideEffects: false" to package.json ([#1661](https://github.com/immutable-js/immutable-js/pull/1661)) - -- Use ES standard for iterator method reuse ([#1867](https://github.com/immutable-js/immutable-js/pull/1867)) - -- Generalize `fromJS()` and `Seq()` to support Sets ([#1865](https://github.com/immutable-js/immutable-js/pull/1865)) - -- Top level predicate functions ([#1600](https://github.com/immutable-js/immutable-js/pull/1600)) - - > New functions are exported from the `immutable` module: - > `isSeq()`, `isList()`, `isMap()`, `isOrderedMap()`, `isStack()`, `isSet()`, `isOrderedSet()`, and `isRecord()`. - -- Improve performance of toJS ([#1581](https://github.com/immutable-js/immutable-js/pull/1581)) - - > Cursory test is >10% faster than both v3.8.2 and v4.0.0-rc.7, - > and corrects the regression since v4.0.0-rc.9. - -- Added optional `notSetValue` in `first()` and `last()` ([#1556](https://github.com/immutable-js/immutable-js/pull/1556)) - -- Make `isArrayLike` check more precise to avoid false positives ([#1520](https://github.com/immutable-js/immutable-js/pull/1520)) - -- `map()` for List, Map, and Set returns itself for no-ops ([#1455](https://github.com/immutable-js/immutable-js/pull/1455)) (5726bd1) - -- Hash functions as objects, allowing functions as values in collections ([#1485](https://github.com/immutable-js/immutable-js/pull/1485)) - -- Functional API for `get()`, `set()`, and more which support both Immutable.js collections and plain Objects and Arrays ([#1369](https://github.com/immutable-js/immutable-js/pull/1369)) - -- Relicensed as MIT ([#1320](https://github.com/immutable-js/immutable-js/pull/1320)) - -- Support for Transducers! ([ee9c68f1](https://github.com/immutable-js/immutable-js/commit/ee9c68f1d43da426498ee009ecea37aa2ef77cb8)) - -- Add new method, `zipAll()` ([#1195](https://github.com/immutable-js/immutable-js/pull/1195)) - -- Bundle and distribute an "es module" so Webpack and Rollup can use tree-shaking for smaller builds ([#1204](https://github.com/immutable-js/immutable-js/pull/1204)) - -- Warn instead of throw when `getIn()` has a bad path ([668f2236](https://github.com/immutable-js/immutable-js/commit/668f2236642c97bd4e7d8dfbf62311f497a6ac18)) - -- A new predicate function `isValueObject()` helps to detect objects which implement `equals()` and `hashCode()`, - and type definitions now define the interface `ValueObject` which you can implement in your own code to create objects which - behave as values and can be keys in Maps or entries in Sets. - -- Using `fromJS()` with a "reviver" function now provides access to the key path to each translated value. ([#1118](https://github.com/immutable-js/immutable-js/pull/1118)) - -### Fixed - -- Fix issue with IE11 and missing Symbol.iterator ([#1850](https://github.com/immutable-js/immutable-js/pull/1850)) - -- Fix ordered set with map ([#1663](https://github.com/immutable-js/immutable-js/pull/1663)) - -- Do not modify iter during List.map and Map.map ([#1649](https://github.com/immutable-js/immutable-js/pull/1649)) - -- Fix ordered map delete all ([#1777](https://github.com/immutable-js/immutable-js/pull/1777)) - -- Hash symbols as objects ([#1753](https://github.com/immutable-js/immutable-js/pull/1753)) - -- Fix returning a Record in merge() when Record is empty ([#1785](https://github.com/immutable-js/immutable-js/pull/1785)) - -- Fix for RC~12: Records from different factories aren't equal ([#1734](https://github.com/immutable-js/immutable-js/issues/1734)) - -- "too much recursion" error when creating a Record type from an instance of another Record ([#1690](https://github.com/immutable-js/immutable-js/pull/1690)) - -- Fix glob for npm format script on Windows ([#18](https://github.com/immutable-js-oss/immutable-js/pull/18)) - -- Remove deprecated cursor API ([#13](https://github.com/immutable-js-oss/immutable-js/issues/13)) - -- Add missing es exports ([#1740](https://github.com/immutable-js/immutable-js/pull/1740)) - -- Support nulls in genTypeDefData.js ([#185](https://github.com/immutable-js/immutable-js/pull/185)) - -- Support isPlainObj in IE11 and other esoteric parameters [f3a6d5ce](https://github.com/immutable-js/immutable-js/pull/1833/commits/f3a6d5ce75bb9d60b87074240838f5429e896b60) - -- `Set.map` produces valid underlying map ([#1606](https://github.com/immutable-js/immutable-js/pull/1606)) - -- Support isPlainObj with `constructor` key ([#1627](https://github.com/immutable-js/immutable-js/pull/1627)) - -- `groupBy` no longer returns a mutable Map instance ([#1602](https://github.com/immutable-js/immutable-js/pull/1602)) - -- Fix issue where refs can recursively collide, corrupting `.size` ([#1598](https://github.com/immutable-js/immutable-js/pull/1598)) - -- Throw error in `mergeWith()` method if missing the required `merger` function ([#1543](https://github.com/immutable-js/immutable-js/pull/1543)) - -- Update `isPlainObj()` to workaround Safari bug and allow cross-realm values ([#1557](https://github.com/immutable-js/immutable-js/pull/1557)) - -- Fix missing "& T" to some methods in RecordInstance ([#1464](https://github.com/immutable-js/immutable-js/pull/1464)) - -- Make notSetValue optional for typed Records ([#1461](https://github.com/immutable-js/immutable-js/pull/1461)) (a1029bb) - -- Export type of RecordInstance ([#1434](https://github.com/immutable-js/immutable-js/pull/1434)) - -- Fix Record `size` check in merge() ([#1521](https://github.com/immutable-js/immutable-js/pull/1521)) - -- Fix Map#concat being not defined ([#1402](https://github.com/immutable-js/immutable-js/pull/1402)) - - - - - -- `getIn()` no longer throws when encountering a missing path ([#1361](https://github.com/immutable-js/immutable-js/pull/1361)) - - - -- Do not throw when printing value that cannot be coerced to primitive ([#1334](https://github.com/immutable-js/immutable-js/pull/1334)) - - - - - -- Do not throw from hasIn ([#1319](https://github.com/immutable-js/immutable-js/pull/1319)) - -- Long hash codes no longer cause an infinite loop ([#1175](https://github.com/immutable-js/immutable-js/pull/1175)) - -- `slice()` which should return an empty set could return a full set or vice versa (#1245, #1287) - -- Ensure empty slices do not throw when iterated ([#1220](https://github.com/immutable-js/immutable-js/pull/1220)) - -- Error during equals check on Record with undefined or null ([#1208](https://github.com/immutable-js/immutable-js/pull/1208)) - -- Fix size of count() after filtering or flattening ([#1171](https://github.com/immutable-js/immutable-js/pull/1171)) - -## [3.8.2] - 2017-10-05 - -Released in 2017, still the most commonly used release. - -[unreleased]: https://github.com/immutable-js/immutable-js/compare/v4.0.0-rc.15...HEAD -[4.0.0]: https://github.com/immutable-js/immutable-js/compare/v3.8.2...v4.0.0-rc.15 -[3.8.2]: https://github.com/immutable-js/immutable-js/compare/3.7.6...v3.8.2 diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index a1fdc82e73..0000000000 --- a/SECURITY.md +++ /dev/null @@ -1,17 +0,0 @@ -# Security Policy - -## Supported Versions - -| Version | Supported | -| ------- | ------------------ | -| 5.1.x | :white_check_mark: | -| 5.0.x | :x: | -| 4.0.x | :white_check_mark: | -| < 4.0 | :x: | - -## Reporting a Vulnerability - -You can send an email to julien@deniau.me to report a security vulnerability. -Please be as specific as possible on how to reproduce and understand the issue. This way, we can fix the issue as fast as possible. - -I will try to reply to you in the following days (it might be sometime longer depending on my personal life). diff --git a/__tests__/ArraySeq.ts b/__tests__/ArraySeq.ts deleted file mode 100644 index 1068acb93e..0000000000 --- a/__tests__/ArraySeq.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Seq } from 'immutable'; - -describe('ArraySequence', () => { - it('every is true when predicate is true for all entries', () => { - expect(Seq([]).every(() => false)).toBe(true); - expect(Seq([1, 2, 3]).every((v) => v > 0)).toBe(true); - expect(Seq([1, 2, 3]).every((v) => v < 3)).toBe(false); - }); - - it('some is true when predicate is true for any entry', () => { - expect(Seq([]).some(() => true)).toBe(false); - expect(Seq([1, 2, 3]).some((v) => v > 0)).toBe(true); - expect(Seq([1, 2, 3]).some((v) => v < 3)).toBe(true); - expect(Seq([1, 2, 3]).some((v) => v > 1)).toBe(true); - expect(Seq([1, 2, 3]).some((v) => v < 0)).toBe(false); - }); - - it('maps', () => { - const i = Seq([1, 2, 3]); - const m = i.map((x) => x + x).toArray(); - expect(m).toEqual([2, 4, 6]); - }); - - it('reduces', () => { - const i = Seq([1, 2, 3]); - const r = i.reduce((acc, x) => acc + x); - expect(r).toEqual(6); - }); - - it('efficiently chains iteration methods', () => { - const i = Seq('abcdefghijklmnopqrstuvwxyz'.split('')); - function studly(letter, index) { - return index % 2 === 0 ? letter : letter.toUpperCase(); - } - const result = i - .reverse() - .take(10) - .reverse() - .take(5) - .map(studly) - .toArray() - .join(''); - expect(result).toBe('qRsTu'); - }); - - it('counts from the end of the sequence on negative index', () => { - const i = Seq([1, 2, 3, 4, 5, 6, 7]); - expect(i.get(-1)).toBe(7); - expect(i.get(-5)).toBe(3); - expect(i.get(-9)).toBe(undefined); - expect(i.get(-999, 1000)).toBe(1000); - }); - - it('handles trailing holes', () => { - const a = [1, 2, 3]; - a.length = 10; - const seq = Seq(a); - expect(seq.size).toBe(10); - expect(seq.toArray().length).toBe(10); - expect(seq.map((x) => x * x).size).toBe(10); - expect(seq.map((x) => x * x).toArray().length).toBe(10); - expect(seq.skip(2).toArray().length).toBe(8); - expect(seq.take(2).toArray().length).toBe(2); - expect(seq.take(5).toArray().length).toBe(5); - expect(seq.filter((x) => x % 2 === 1).toArray().length).toBe(2); - expect(seq.toKeyedSeq().flip().size).toBe(10); - expect(seq.toKeyedSeq().flip().flip().size).toBe(10); - expect(seq.toKeyedSeq().flip().flip().toArray().length).toBe(10); - }); - - it('can be iterated', () => { - const a = [1, 2, 3]; - const seq = Seq(a); - const entries = seq.entries(); - expect(entries.next()).toEqual({ value: [0, 1], done: false }); - expect(entries.next()).toEqual({ value: [1, 2], done: false }); - expect(entries.next()).toEqual({ value: [2, 3], done: false }); - expect(entries.next()).toEqual({ value: undefined, done: true }); - }); - - it('cannot be mutated after calling toArray', () => { - const seq = Seq(['A', 'B', 'C']); - - const firstReverse = Seq(seq.toArray().reverse()); - const secondReverse = Seq(seq.toArray().reverse()); - - expect(firstReverse.get(0)).toEqual('C'); - expect(secondReverse.get(0)).toEqual('C'); - }); -}); diff --git a/__tests__/Comparator.ts b/__tests__/Comparator.ts deleted file mode 100644 index 39ab3679fb..0000000000 --- a/__tests__/Comparator.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List, OrderedSet, Seq, type Comparator, PairSorting } from 'immutable'; - -const sourceNumbers: readonly number[] = [3, 4, 5, 6, 7, 9, 10, 12, 90, 92, 95]; - -const expectedSortedNumbers: readonly number[] = [ - 7, 95, 90, 92, 3, 5, 9, 4, 6, 10, 12, -]; - -const testComparator: Comparator = (left, right) => { - //The number 7 always goes first... - if (left === 7) { - return PairSorting.LeftThenRight; - } else if (right === 7) { - return PairSorting.RightThenLeft; - } - - //...followed by numbers >= 90, then by all the others. - if (left >= 90 && right < 90) { - return PairSorting.LeftThenRight; - } else if (left < 90 && right >= 90) { - return PairSorting.RightThenLeft; - } - - //Within each group, even numbers go first... - if (left % 2 && !(right % 2)) { - return PairSorting.LeftThenRight; - } else if (!(left % 2) && right % 2) { - return PairSorting.RightThenLeft; - } - - //...and, finally, sort the numbers of each subgroup in ascending order. - return left - right; -}; - -describe.each([ - ['List', List], - ['OrderedSet', OrderedSet], - ['Seq.Indexed', Seq.Indexed], -])('Comparator applied to %s', (_collectionName, testCollectionConstructor) => { - const sourceCollection = testCollectionConstructor(sourceNumbers); - - const expectedSortedCollection = testCollectionConstructor( - expectedSortedNumbers - ); - - describe('when sorting', () => { - it('should support the enum as well as numeric return values', () => { - const actualCollection = sourceCollection.sort(testComparator); - expect(actualCollection).toEqual(expectedSortedCollection); - }); - }); - - describe('when retrieving the max value', () => { - it('should support the enum as well as numeric return values', () => { - const actualMax = sourceCollection.max(testComparator); - expect(actualMax).toBe(12); - }); - }); - - describe('when retrieving the min value', () => { - it('should support the enum as well as numeric return values', () => { - const actualMin = sourceCollection.min(testComparator); - expect(actualMin).toBe(7); - }); - }); -}); diff --git a/__tests__/Conversion.ts b/__tests__/Conversion.ts deleted file mode 100644 index 5a008e7e55..0000000000 --- a/__tests__/Conversion.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { fromJS, is, List, Map, OrderedMap, Record } from 'immutable'; -import fc, { type JsonValue } from 'fast-check'; - -describe('Conversion', () => { - // Note: order of keys based on Map's hashing order - const js = { - deepList: [ - { - position: 'first', - }, - { - position: 'second', - }, - { - position: 'third', - }, - ], - deepMap: { - a: 'A', - b: 'B', - }, - emptyMap: Object.create(null), - point: { x: 10, y: 20 }, - string: 'Hello', - list: [1, 2, 3], - }; - - const Point = Record({ x: 0, y: 0 }, 'Point'); - - const immutableData = Map({ - deepList: List.of( - Map({ - position: 'first', - }), - Map({ - position: 'second', - }), - Map({ - position: 'third', - }) - ), - deepMap: Map({ - a: 'A', - b: 'B', - }), - emptyMap: Map(), - point: Map({ x: 10, y: 20 }), - string: 'Hello', - list: List.of(1, 2, 3), - }); - - const immutableOrderedData = OrderedMap({ - deepList: List.of( - OrderedMap({ - position: 'first', - }), - OrderedMap({ - position: 'second', - }), - OrderedMap({ - position: 'third', - }) - ), - deepMap: OrderedMap({ - a: 'A', - b: 'B', - }), - emptyMap: OrderedMap(), - point: new Point({ x: 10, y: 20 }), - string: 'Hello', - list: List.of(1, 2, 3), - }); - - const immutableOrderedDataString = - 'OrderedMap { ' + - '"deepList": List [ ' + - 'OrderedMap { ' + - '"position": "first"' + - ' }, ' + - 'OrderedMap { ' + - '"position": "second"' + - ' }, ' + - 'OrderedMap { ' + - '"position": "third"' + - ' }' + - ' ], ' + - '"deepMap": OrderedMap { ' + - '"a": "A", ' + - '"b": "B"' + - ' }, ' + - '"emptyMap": OrderedMap {}, ' + - '"point": Point { x: 10, y: 20 }, ' + - '"string": "Hello", ' + - '"list": List [ 1, 2, 3 ]' + - ' }'; - - const nonStringKeyMap = OrderedMap().set(1, true).set(false, 'foo'); - const nonStringKeyMapString = 'OrderedMap { 1: true, false: "foo" }'; - - it('Converts deep JS to deep immutable sequences', () => { - expect(fromJS(js)).toEqual(immutableData); - }); - - it('Throws when provided circular reference', () => { - type OType = { a: { b: { c: OType | null } } }; - - const o: OType = { a: { b: { c: null } } }; - o.a.b.c = o; - expect(() => fromJS(o)).toThrow( - 'Cannot convert circular structure to Immutable' - ); - }); - - it('Converts deep JSON with custom conversion', () => { - const seq = fromJS(js, function (key, sequence) { - if (key === 'point') { - // @ts-expect-error -- to convert to real typing - return new Point(sequence); - } - return Array.isArray(this[key]) - ? sequence.toList() - : sequence.toOrderedMap(); - }); - expect(seq).toEqual(immutableOrderedData); - expect(seq.toString()).toEqual(immutableOrderedDataString); - }); - - it('Converts deep JSON with custom conversion including keypath if requested', () => { - const paths: Array | undefined> = []; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const seq1 = fromJS(js, function (key, sequence, keypath) { - expect(arguments.length).toBe(3); - paths.push(keypath); - return Array.isArray(this[key]) - ? sequence.toList() - : sequence.toOrderedMap(); - }); - expect(paths).toEqual([ - [], - ['deepList'], - ['deepList', 0], - ['deepList', 1], - ['deepList', 2], - ['deepMap'], - ['emptyMap'], - ['point'], - ['list'], - ]); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const seq2 = fromJS(js, function (key, sequence) { - // eslint-disable-next-line prefer-rest-params - expect(arguments[2]).toBe(undefined); - }); - }); - - it('Prints keys as JS values', () => { - expect(nonStringKeyMap.toString()).toEqual(nonStringKeyMapString); - }); - - it('Converts deep sequences to JS', () => { - const js2 = immutableData.toJS(); - expect(is(js2, js)).toBe(false); // raw JS is not immutable. - expect(js2).toEqual(js); // but should be deep equal. - }); - - it('Converts shallowly to JS', () => { - const js2 = immutableData.toJSON(); - expect(js2).not.toEqual(js); - expect(js2.deepList).toBe(immutableData.get('deepList')); - }); - - it('JSON.stringify() works equivalently on immutable sequences', () => { - expect(JSON.stringify(js)).toBe(JSON.stringify(immutableData)); - }); - - it('JSON.stringify() respects toJSON methods on values', () => { - const Model = Record({}); - Model.prototype.toJSON = function () { - return 'model'; - }; - expect(Map({ a: new Model() }).toJS()).toEqual({ a: {} }); - expect(JSON.stringify(Map({ a: new Model() }))).toEqual('{"a":"model"}'); - }); - - it('is conservative with array-likes, only accepting true Arrays.', () => { - expect(fromJS({ 1: 2, length: 3 })).toEqual( - Map().set('1', 2).set('length', 3) - ); - expect(fromJS('string')).toEqual('string'); - }); - - it('toJS isomorphic value', () => { - fc.assert( - fc.property(fc.jsonValue(), (v: JsonValue) => { - const imm = fromJS(v); - expect( - // @ts-expect-error Property 'toJS' does not exist on type '{}'.ts(2339) - imm && imm.toJS ? imm.toJS() : imm - ).toEqual(v); - }), - { numRuns: 30 } - ); - }); - - it('Explicitly convert values to string using String constructor', () => { - expect(() => fromJS({ foo: Symbol('bar') }) + '').not.toThrow(); - expect(() => Map().set('foo', Symbol('bar')) + '').not.toThrow(); - expect(() => Map().set(Symbol('bar'), 'foo') + '').not.toThrow(); - }); - - it('Converts an immutable value of an entry correctly', () => { - const arr = [{ key: 'a' }]; - const result = fromJS(arr).entrySeq().toJS(); - expect(result).toEqual([[0, { key: 'a' }]]); - }); -}); diff --git a/__tests__/Equality.ts b/__tests__/Equality.ts deleted file mode 100644 index ae95ef4a12..0000000000 --- a/__tests__/Equality.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { is, List, Map, Seq, Set } from 'immutable'; -import fc from 'fast-check'; - -describe('Equality', () => { - function expectIs(left, right) { - const comparison = is(left, right); - expect(comparison).toBe(true); - const commutative = is(right, left); - expect(commutative).toBe(true); - } - - function expectIsNot(left, right) { - const comparison = is(left, right); - expect(comparison).toBe(false); - const commutative = is(right, left); - expect(commutative).toBe(false); - } - - it('uses Object.is semantics', () => { - expectIs(null, null); - expectIs(undefined, undefined); - expectIsNot(undefined, null); - - expectIs(true, true); - expectIs(false, false); - expectIsNot(true, false); - - expectIs(123, 123); - expectIsNot(123, -123); - expectIs(NaN, NaN); - expectIs(0, 0); - expectIs(-0, -0); - // Note: Unlike Object.is, is assumes 0 and -0 are the same value, - // matching the behavior of ES6 Map key equality. - expectIs(0, -0); - expectIs(NaN, 0 / 0); - - const str = 'hello'; - expectIs(str, str); - expectIs(str, 'hello'); - expectIsNot('hello', 'HELLO'); - expectIsNot('hello', 'goodbye'); - - const array = [1, 2, 3]; - expectIs(array, array); - expectIsNot(array, [1, 2, 3]); - - const object = { key: 'value' }; - expectIs(object, object); - expectIsNot(object, { key: 'value' }); - }); - - it('dereferences things', () => { - const ptrA = { foo: 1 }; - const ptrB = { foo: 2 }; - expectIsNot(ptrA, ptrB); - ptrA.valueOf = ptrB.valueOf = function () { - return 5; - }; - expectIs(ptrA, ptrB); - const object = { key: 'value' }; - ptrA.valueOf = ptrB.valueOf = function () { - return object; - }; - expectIs(ptrA, ptrB); - ptrA.valueOf = ptrB.valueOf = function () { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return null as any; - }; - expectIs(ptrA, ptrB); - ptrA.valueOf = ptrB.valueOf = function () { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return undefined as any; - }; - expectIs(ptrA, ptrB); - ptrA.valueOf = function () { - return 4; - }; - ptrB.valueOf = function () { - return 5; - }; - expectIsNot(ptrA, ptrB); - }); - - it('compares sequences', () => { - const arraySeq = Seq([1, 2, 3]); - const arraySeq2 = Seq([1, 2, 3]); - expectIs(arraySeq, arraySeq); - expectIs(arraySeq, Seq([1, 2, 3])); - expectIs(arraySeq2, arraySeq2); - expectIs(arraySeq2, Seq([1, 2, 3])); - expectIsNot(arraySeq, [1, 2, 3]); - expectIsNot(arraySeq2, [1, 2, 3]); - expectIs(arraySeq, arraySeq2); - expectIs( - arraySeq, - arraySeq.map((x) => x) - ); - expectIs( - arraySeq2, - arraySeq2.map((x) => x) - ); - }); - - it('compares lists', () => { - const list = List([1, 2, 3]); - expectIs(list, list); - expectIsNot(list, [1, 2, 3]); - - expectIs(list, Seq([1, 2, 3])); - expectIs(list, List([1, 2, 3])); - - const listLonger = list.push(4); - expectIsNot(list, listLonger); - const listShorter = listLonger.pop(); - expect(list === listShorter).toBe(false); - expectIs(list, listShorter); - }); - - const genSimpleVal = fc.oneof(fc.constant('A'), fc.constant(1)); - - const genVal = fc.oneof( - fc.array(genSimpleVal, { minLength: 0, maxLength: 4 }).map(List), - fc.array(genSimpleVal, { minLength: 0, maxLength: 4 }).map(Set), - fc - .array(fc.array(genSimpleVal, { minLength: 2, maxLength: 2 }), { - minLength: 0, - maxLength: 4, - }) - .map(Map) - ); - - it('has symmetric equality', () => { - fc.assert( - fc.property(genVal, genVal, (a, b) => { - expect(is(a, b)).toBe(is(b, a)); - }), - { numRuns: 1000 } - ); - }); - - it('has hash symmetry', () => { - fc.assert( - fc.property(genVal, genVal, (a, b) => { - if (is(a, b)) { - // eslint-disable-next-line jest/no-conditional-expect - expect(a.hashCode()).toBe(b.hashCode()); - } - }), - { numRuns: 1000 } - ); - }); - - describe('hash', () => { - it('differentiates decimals', () => { - expect(Seq([1.5]).hashCode()).not.toBe(Seq([1.6]).hashCode()); - }); - }); -}); diff --git a/__tests__/IndexedSeq.ts b/__tests__/IndexedSeq.ts deleted file mode 100644 index 9d33c234e0..0000000000 --- a/__tests__/IndexedSeq.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Seq } from 'immutable'; - -describe('IndexedSequence', () => { - it('maintains skipped offset', () => { - const seq = Seq(['A', 'B', 'C', 'D', 'E']); - - // This is what we expect for IndexedSequences - const operated = seq.skip(1); - expect(operated.entrySeq().toArray()).toEqual([ - [0, 'B'], - [1, 'C'], - [2, 'D'], - [3, 'E'], - ]); - - expect(operated.first()).toEqual('B'); - }); - - it('reverses correctly', () => { - const seq = Seq(['A', 'B', 'C', 'D', 'E']); - - // This is what we expect for IndexedSequences - const operated = seq.reverse(); - expect(operated.get(0)).toEqual('E'); - expect(operated.get(1)).toEqual('D'); - expect(operated.get(4)).toEqual('A'); - - expect(operated.first()).toEqual('E'); - expect(operated.last()).toEqual('A'); - }); - - it('negative indexes correctly', () => { - const seq = Seq(['A', 'B', 'C', 'D', 'E']); - - expect(seq.first()).toEqual('A'); - expect(seq.last()).toEqual('E'); - expect(seq.get(-0)).toEqual('A'); - expect(seq.get(2)).toEqual('C'); - expect(seq.get(-2)).toEqual('D'); - - const indexes = seq.keySeq(); - expect(indexes.first()).toEqual(0); - expect(indexes.last()).toEqual(4); - expect(indexes.get(-0)).toEqual(0); - expect(indexes.get(2)).toEqual(2); - expect(indexes.get(-2)).toEqual(3); - }); -}); diff --git a/__tests__/KeyedSeq.ts b/__tests__/KeyedSeq.ts deleted file mode 100644 index 528c28f523..0000000000 --- a/__tests__/KeyedSeq.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Range, Seq } from 'immutable'; -import fc from 'fast-check'; - -describe('KeyedSeq', () => { - it('iterates equivalently', () => { - fc.assert( - fc.property(fc.array(fc.integer()), (ints) => { - const seq = Seq(ints); - const keyed = seq.toKeyedSeq(); - - const seqEntries = seq.entries(); - const keyedEntries = keyed.entries(); - - let seqStep; - let keyedStep; - do { - seqStep = seqEntries.next(); - keyedStep = keyedEntries.next(); - expect(keyedStep).toEqual(seqStep); - } while (!seqStep.done); - }) - ); - }); - - it('maintains keys', () => { - const isEven = (x) => x % 2 === 0; - const seq = Range(0, 100); - - // This is what we expect for IndexedSequences - const operated = seq.filter(isEven).skip(10).take(5); - expect(operated.entrySeq().toArray()).toEqual([ - [0, 20], - [1, 22], - [2, 24], - [3, 26], - [4, 28], - ]); - const [indexed0, indexed1] = seq - .partition(isEven) - .map((part) => part.skip(10).take(5)); - expect(indexed0.entrySeq().toArray()).toEqual([ - [0, 21], - [1, 23], - [2, 25], - [3, 27], - [4, 29], - ]); - expect(indexed1.entrySeq().toArray()).toEqual([ - [0, 20], - [1, 22], - [2, 24], - [3, 26], - [4, 28], - ]); - - // Where Keyed Sequences maintain keys. - const keyed = seq.toKeyedSeq(); - const keyedOperated = keyed.filter(isEven).skip(10).take(5); - expect(keyedOperated.entrySeq().toArray()).toEqual([ - [20, 20], - [22, 22], - [24, 24], - [26, 26], - [28, 28], - ]); - const [keyed0, keyed1] = keyed - .partition(isEven) - .map((part) => part.skip(10).take(5)); - expect(keyed0.entrySeq().toArray()).toEqual([ - [21, 21], - [23, 23], - [25, 25], - [27, 27], - [29, 29], - ]); - expect(keyed1.entrySeq().toArray()).toEqual([ - [20, 20], - [22, 22], - [24, 24], - [26, 26], - [28, 28], - ]); - }); - - it('works with reverse', () => { - const seq = Range(0, 100); - - // This is what we expect for IndexedSequences - expect(seq.reverse().take(5).entrySeq().toArray()).toEqual([ - [0, 99], - [1, 98], - [2, 97], - [3, 96], - [4, 95], - ]); - - // Where Keyed Sequences maintain keys. - expect(seq.toKeyedSeq().reverse().take(5).entrySeq().toArray()).toEqual([ - [99, 99], - [98, 98], - [97, 97], - [96, 96], - [95, 95], - ]); - }); - - it('works with double reverse', () => { - const seq = Range(0, 100); - - // This is what we expect for IndexedSequences - expect( - seq.reverse().skip(10).take(5).reverse().entrySeq().toArray() - ).toEqual([ - [0, 85], - [1, 86], - [2, 87], - [3, 88], - [4, 89], - ]); - - // Where Keyed Sequences maintain keys. - expect( - seq.reverse().toKeyedSeq().skip(10).take(5).reverse().entrySeq().toArray() - ).toEqual([ - [14, 85], - [13, 86], - [12, 87], - [11, 88], - [10, 89], - ]); - }); -}); diff --git a/__tests__/List.ts b/__tests__/List.ts deleted file mode 100644 index da2e9d996b..0000000000 --- a/__tests__/List.ts +++ /dev/null @@ -1,1076 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { fromJS, List, Map, Range, Seq, Set } from 'immutable'; -import fc from 'fast-check'; -import { create as createSeed } from 'random-seed'; - -function arrayOfSize(s: number) { - const a = new Array(s); - for (let ii = 0; ii < s; ii++) { - a[ii] = ii; - } - return a; -} - -describe('List', () => { - it('determines assignment of unspecified value types', () => { - interface Test { - list: List; - } - - const t: Test = { - list: List(), - }; - - expect(t.list.size).toBe(0); - }); - - it('of provides initial values', () => { - const v = List.of('a', 'b', 'c'); - expect(v.get(0)).toBe('a'); - expect(v.get(1)).toBe('b'); - expect(v.get(2)).toBe('c'); - }); - - it('toArray provides a JS array', () => { - const v = List.of('a', 'b', 'c'); - expect(v.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('does not accept a scalar', () => { - expect(() => { - // @ts-expect-error -- test that runtime does throw - List(3); - }).toThrow('Expected Array or collection object of values: 3'); - }); - - it('accepts an array', () => { - const v = List(['a', 'b', 'c']); - expect(v.get(1)).toBe('b'); - expect(v.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts an array-like', () => { - const v = List({ length: 3, 2: 'c' }); - expect(v.get(2)).toBe('c'); - expect(v.toArray()).toEqual([undefined, undefined, 'c']); - }); - - it('accepts any array-like collection, including strings', () => { - const v = List('abc'); - expect(v.get(1)).toBe('b'); - expect(v.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts an indexed Seq', () => { - const seq = Seq(['a', 'b', 'c']); - const v = List(seq); - expect(v.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts a keyed Seq as a list of entries', () => { - const seq = Seq({ a: null, b: null, c: null }).flip(); - const v = List(seq); - expect(v.toArray()).toEqual([ - [null, 'a'], - [null, 'b'], - [null, 'c'], - ]); - // Explicitly getting the values sequence - const v2 = List(seq.valueSeq()); - expect(v2.toArray()).toEqual(['a', 'b', 'c']); - // toList() does this for you. - const v3 = seq.toList(); - expect(v3.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('can set and get a value', () => { - let v = List(); - expect(v.get(0)).toBe(undefined); - v = v.set(0, 'value'); - expect(v.get(0)).toBe('value'); - }); - - it('can setIn and getIn a deep value', () => { - let v = List([ - Map({ - aKey: List(['bad', 'good']), - }), - ]); - expect(v.getIn([0, 'aKey', 1])).toBe('good'); - v = v.setIn([0, 'aKey', 1], 'great'); - expect(v.getIn([0, 'aKey', 1])).toBe('great'); - }); - - it('can setIn on an inexistant index', () => { - const myMap = Map<{ a: Array; b: Array; c?: List }>( - { a: [], b: [] } - ); - const out = myMap.setIn(['a', 0], 'v').setIn(['c', 0], 'v'); - - expect(out.getIn(['a', 0])).toEqual('v'); - expect(out.getIn(['c', 0])).toEqual('v'); - expect(out.get('a')).toBeInstanceOf(Array); - expect(out.get('b')).toBeInstanceOf(Array); - expect(out.get('c')).toBeInstanceOf(Map); - expect(out.get('c')?.keySeq().first()).toBe(0); - }); - - it('throw when calling setIn on a non data structure', () => { - const avengers = [ - 'ironMan', // index [0] - [ - 'captainAmerica', // index [1][0] - [ - 'blackWidow', // index [1][1][0] - ['theHulk'], // index [1][1][1][0] - ], - ], - ]; - - const avengersList = fromJS(avengers) as List; - - // change theHulk to scarletWitch - const out1 = avengersList.setIn([1, 1, 1, 0], 'scarletWitch'); - expect(out1.getIn([1, 1, 1, 0])).toEqual('scarletWitch'); - - const out2 = avengersList.setIn([1, 1, 1, 3], 'scarletWitch'); - expect(out2.getIn([1, 1, 1, 3])).toEqual('scarletWitch'); - - expect(() => { - avengersList.setIn([0, 1], 'scarletWitch'); - }).toThrow( - 'Cannot update within non-data-structure value in path [0]: ironMan' - ); - }); - - it('can update a value', () => { - const l = List.of(5); - // @ts-expect-error -- Type definition limitation - expect(l.update(0, (v) => v * v).toArray()).toEqual([25]); - }); - - it('can updateIn a deep value', () => { - let l = List([ - Map({ - aKey: List(['bad', 'good']), - }), - ]); - // @ts-expect-error -- Type definition limitation - l = l.updateIn([0, 'aKey', 1], (v) => v + v); - expect(l.toJS()).toEqual([ - { - aKey: ['bad', 'goodgood'], - }, - ]); - }); - - it('returns undefined when getting a null value', () => { - const v = List([1, 2, 3]); - // @ts-expect-error -- test runtime - expect(v.get(null)).toBe(undefined); - - const o = List([{ a: 1 }, { b: 2 }, { c: 3 }]); - // @ts-expect-error -- test runtime - expect(o.get(null)).toBe(undefined); - }); - - it('counts from the end of the list on negative index', () => { - const i = List.of(1, 2, 3, 4, 5, 6, 7); - expect(i.get(-1)).toBe(7); - expect(i.get(-5)).toBe(3); - expect(i.get(-9)).toBe(undefined); - expect(i.get(-999, 1000)).toBe(1000); - }); - - it('coerces numeric-string keys', () => { - // Of course, TypeScript protects us from this, so cast to "any" to test. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const i: any = List.of(1, 2, 3, 4, 5, 6); - expect(i.get('1')).toBe(2); - expect(i.set('3', 10).get('3')).toBe(10); - // Like array, string negative numbers do not qualify - expect(i.get('-1')).toBe(undefined); - // Like array, string floating point numbers do not qualify - expect(i.get('1.0')).toBe(undefined); - }); - - it('uses not set value for string index', () => { - const list = List(); - // @ts-expect-error -- test runtime - expect(list.get('stringKey', 'NOT-SET')).toBe('NOT-SET'); - }); - - it('uses not set value for index {}', () => { - const list = List.of(1, 2, 3, 4, 5); - // @ts-expect-error -- test runtime - expect(list.get({}, 'NOT-SET')).toBe('NOT-SET'); - }); - - it('uses not set value for index void 0', () => { - const list = List.of(1, 2, 3, 4, 5); - // @ts-expect-error -- test runtime - - expect(list.get(void 0, 'NOT-SET')).toBe('NOT-SET'); - }); - - it('uses not set value for index undefined', () => { - const list = List.of(1, 2, 3, 4, 5); - // @ts-expect-error -- test runtime - expect(list.get(undefined, 'NOT-SET')).toBe('NOT-SET'); - }); - - it('doesnt coerce empty strings to index 0', () => { - const list = List.of(1, 2, 3); - // @ts-expect-error -- test runtime - expect(list.has('')).toBe(false); - }); - - it('doesnt contain elements at non-empty string keys', () => { - const list = List.of(1, 2, 3, 4, 5); - // @ts-expect-error -- test runtime - expect(list.has('str')).toBe(false); - }); - - it('hasIn doesnt contain elements at non-empty string keys', () => { - const list = List.of(1, 2, 3, 4, 5); - expect(list.hasIn(['str'])).toBe(false); - }); - - it('hasIn doesnt throw for bad key-path', () => { - const list = List.of(1, 2, 3, 4, 5); - expect(list.hasIn([1, 2, 3])).toBe(false); - - const list2 = List([{}]); - expect(list2.hasIn([0, 'bad'])).toBe(false); - }); - - it('setting creates a new instance', () => { - const v0 = List.of('a'); - const v1 = v0.set(0, 'A'); - expect(v0.get(0)).toBe('a'); - expect(v1.get(0)).toBe('A'); - }); - - it('size includes the highest index', () => { - const v0 = List(); - const v1 = v0.set(0, 'a'); - const v2 = v1.set(1, 'b'); - const v3 = v2.set(2, 'c'); - expect(v0.size).toBe(0); - expect(v1.size).toBe(1); - expect(v2.size).toBe(2); - expect(v3.size).toBe(3); - }); - - it('get helpers make for easier to read code', () => { - const v = List.of('a', 'b', 'c'); - expect(v.first()).toBe('a'); - expect(v.get(1)).toBe('b'); - expect(v.last()).toBe('c'); - }); - - it('slice helpers make for easier to read code', () => { - const v0 = List.of('a', 'b', 'c'); - const v1 = List.of('a', 'b'); - const v2 = List.of('a'); - const v3 = List(); - - expect(v0.rest().toArray()).toEqual(['b', 'c']); - expect(v0.butLast().toArray()).toEqual(['a', 'b']); - - expect(v1.rest().toArray()).toEqual(['b']); - expect(v1.butLast().toArray()).toEqual(['a']); - - expect(v2.rest().toArray()).toEqual([]); - expect(v2.butLast().toArray()).toEqual([]); - - expect(v3.rest().toArray()).toEqual([]); - expect(v3.butLast().toArray()).toEqual([]); - }); - - it('can set at arbitrary indices', () => { - const v0 = List.of('a', 'b', 'c'); - const v1 = v0.set(1, 'B'); // within existing tail - const v2 = v1.set(3, 'd'); // at last position - const v3 = v2.set(31, 'e'); // (testing internal guts) - const v4 = v3.set(32, 'f'); // (testing internal guts) - const v5 = v4.set(1023, 'g'); // (testing internal guts) - const v6 = v5.set(1024, 'h'); // (testing internal guts) - const v7 = v6.set(32, 'F'); // set within existing tree - expect(v7.size).toBe(1025); - const expectedArray = ['a', 'B', 'c', 'd']; - expectedArray[31] = 'e'; - expectedArray[32] = 'F'; - expectedArray[1023] = 'g'; - expectedArray[1024] = 'h'; - expect(v7.toArray()).toEqual(expectedArray); - }); - - it('can contain a large number of indices', () => { - const r = Range(0, 20000).toList(); - let iterations = 0; - r.forEach((v) => { - expect(v).toBe(iterations); - iterations++; - }); - }); - - it('describes a dense list', () => { - const v = List.of('a', 'b', 'c') - .push('d') - .set(14, 'o') - .set(6, undefined) - .remove(1); - expect(v.size).toBe(14); - // eslint-disable-next-line no-sparse-arrays - expect(v.toJS()).toEqual(['a', 'c', 'd', , , , , , , , , , , 'o']); - }); - - it('iterates a dense list', () => { - const v = List() - .setSize(11) - .set(1, 1) - .set(3, 3) - .set(5, 5) - .set(7, 7) - .set(9, 9); - expect(v.size).toBe(11); - - const forEachResults: Array<[number, undefined | number]> = []; - v.forEach((val, i) => forEachResults.push([i, val])); - expect(forEachResults).toEqual([ - [0, undefined], - [1, 1], - [2, undefined], - [3, 3], - [4, undefined], - [5, 5], - [6, undefined], - [7, 7], - [8, undefined], - [9, 9], - [10, undefined], - ]); - - const arrayResults = v.toArray(); - expect(arrayResults).toEqual([ - undefined, - 1, - undefined, - 3, - undefined, - 5, - undefined, - 7, - undefined, - 9, - undefined, - ]); - - const iteratorResults: Array<[number, undefined | number]> = []; - const iterator = v.entries(); - let step; - while (!(step = iterator.next()).done) { - iteratorResults.push(step.value); - } - expect(iteratorResults).toEqual([ - [0, undefined], - [1, 1], - [2, undefined], - [3, 3], - [4, undefined], - [5, 5], - [6, undefined], - [7, 7], - [8, undefined], - [9, 9], - [10, undefined], - ]); - }); - - it('has the same iterator function for values', () => { - const l = List(['a', 'b', 'c']); - expect(l[Symbol.iterator]).toBe(l.values); - }); - - it('push inserts at highest index', () => { - const v0 = List.of('a', 'b', 'c'); - const v1 = v0.push('d', 'e', 'f'); - expect(v0.size).toBe(3); - expect(v1.size).toBe(6); - expect(v1.toArray()).toEqual(['a', 'b', 'c', 'd', 'e', 'f']); - }); - - it('pushes multiple values to the end', () => { - fc.assert( - fc.property(fc.nat(100), fc.nat(100), (s1, s2) => { - const a1 = arrayOfSize(s1); - const a2 = arrayOfSize(s2); - - const v1 = List(a1); - const v3 = v1.push.apply(v1, a2); - - const a3 = a1.slice(); - a3.push.apply(a3, a2); - - expect(v3.size).toEqual(a3.length); - expect(v3.toArray()).toEqual(a3); - }) - ); - }); - - it('pop removes the highest index, decrementing size', () => { - let v = List.of('a', 'b', 'c').pop(); - expect(v.last()).toBe('b'); - expect(v.toArray()).toEqual(['a', 'b']); - v = v.set(1230, 'x'); - expect(v.size).toBe(1231); - expect(v.last()).toBe('x'); - v = v.pop(); - expect(v.size).toBe(1230); - expect(v.last()).toBe(undefined); - v = v.push('X'); - expect(v.size).toBe(1231); - expect(v.last()).toBe('X'); - }); - - it('pop removes the highest index, just like array', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const a = arrayOfSize(len); - let v = List(a); - - while (a.length) { - expect(v.size).toBe(a.length); - expect(v.toArray()).toEqual(a); - v = v.pop(); - a.pop(); - } - expect(v.size).toBe(a.length); - expect(v.toArray()).toEqual(a); - }) - ); - }); - - it('push adds the next highest index, just like array', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const a: Array = []; - let v = List(); - - for (let ii = 0; ii < len; ii++) { - expect(v.size).toBe(a.length); - expect(v.toArray()).toEqual(a); - v = v.push(ii); - a.push(ii); - } - expect(v.size).toBe(a.length); - expect(v.toArray()).toEqual(a); - }) - ); - }); - - it('allows popping an empty list', () => { - let v = List.of('a').pop(); - expect(v.size).toBe(0); - expect(v.toArray()).toEqual([]); - v = v.pop().pop().pop().pop().pop(); - expect(v.size).toBe(0); - expect(v.toArray()).toEqual([]); - }); - - it.each(['remove', 'delete'])('remove removes any index', (fn) => { - let v = List.of('a', 'b', 'c')[fn](2)[fn](0); - expect(v.size).toBe(1); - expect(v.get(0)).toBe('b'); - expect(v.get(1)).toBe(undefined); - expect(v.get(2)).toBe(undefined); - expect(v.toArray()).toEqual(['b']); - v = v.push('d'); - expect(v.size).toBe(2); - expect(v.get(1)).toBe('d'); - expect(v.toArray()).toEqual(['b', 'd']); - }); - - it('shifts values from the front', () => { - const v = List.of('a', 'b', 'c').shift(); - expect(v.first()).toBe('b'); - expect(v.size).toBe(2); - }); - - it('unshifts values to the front', () => { - const v = List.of('a', 'b', 'c').unshift('x', 'y', 'z'); - expect(v.first()).toBe('x'); - expect(v.size).toBe(6); - expect(v.toArray()).toEqual(['x', 'y', 'z', 'a', 'b', 'c']); - }); - - it('unshifts multiple values to the front', () => { - fc.assert( - fc.property(fc.nat(100), fc.nat(100), (s1, s2) => { - const a1 = arrayOfSize(s1); - const a2 = arrayOfSize(s2); - - const v1 = List(a1); - const v3 = v1.unshift.apply(v1, a2); - - const a3 = a1.slice(); - a3.unshift.apply(a3, a2); - - expect(v3.size).toEqual(a3.length); - expect(v3.toArray()).toEqual(a3); - }) - ); - }); - - it('finds values using indexOf', () => { - const v = List.of('a', 'b', 'c', 'b', 'a'); - expect(v.indexOf('b')).toBe(1); - expect(v.indexOf('c')).toBe(2); - expect(v.indexOf('d')).toBe(-1); - }); - - it('finds values using lastIndexOf', () => { - const v = List.of('a', 'b', 'c', 'b', 'a'); - expect(v.lastIndexOf('b')).toBe(3); - expect(v.lastIndexOf('c')).toBe(2); - expect(v.lastIndexOf('d')).toBe(-1); - }); - - it('finds values using findIndex', () => { - const v = List.of('a', 'b', 'c', 'B', 'a'); - expect(v.findIndex((value) => value.toUpperCase() === value)).toBe(3); - expect(v.findIndex((value) => value.length > 1)).toBe(-1); - }); - - it('finds values using findEntry', () => { - const v = List.of('a', 'b', 'c', 'B', 'a'); - expect(v.findEntry((value) => value.toUpperCase() === value)).toEqual([ - 3, - 'B', - ]); - expect(v.findEntry((value) => value.length > 1)).toBe(undefined); - }); - - it('maps values', () => { - const v = List.of('a', 'b', 'c'); - const r = v.map((value) => value.toUpperCase()); - expect(r.toArray()).toEqual(['A', 'B', 'C']); - }); - - it('map no-ops return the same reference', () => { - const v = List.of('a', 'b', 'c'); - const r = v.map((value) => value); - expect(r).toBe(v); - }); - - it('ensures iter is unmodified', () => { - const v = List.of(1, 2, 3); - const r = v.map((value, index, iter) => iter.get(index - 1)); - expect(r.toArray()).toEqual([3, 1, 2]); - }); - - it('filters values', () => { - const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); - const r = v.filter((value, index) => index % 2 === 1); - expect(r.toArray()).toEqual(['b', 'd', 'f']); - }); - - it('partitions values', () => { - const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); - const r = v - .partition((value, index) => index % 2 === 1) - .map((part) => part.toArray()); - expect(r).toEqual([ - ['a', 'c', 'e'], - ['b', 'd', 'f'], - ]); - }); - - it('filters values based on type', () => { - class A {} - class B extends A { - b(): void {} - } - class C extends A { - c(): void {} - } - const l1 = List([new B(), new C(), new B(), new C()]); - const l2: List = l1.filter((v): v is C => v instanceof C); - expect(l2.size).toEqual(2); - expect(l2.every((v) => v instanceof C)).toBe(true); - }); - - it('partitions values based on type', () => { - class A {} - class B extends A { - b(): void {} - } - class C extends A { - c(): void {} - } - const l1 = List([new B(), new C(), new B(), new C()]); - const [la, lc]: [List, List] = l1.partition( - (v): v is C => v instanceof C - ); - expect(la.size).toEqual(2); - expect(la.some((v) => v instanceof C)).toBe(false); - expect(lc.size).toEqual(2); - expect(lc.every((v) => v instanceof C)).toBe(true); - }); - - it('reduces values', () => { - const v = List.of(1, 10, 100); - const r = v.reduce((reduction, value) => reduction + value); - expect(r).toEqual(111); - const r2 = v.reduce((reduction, value) => reduction + value, 1000); - expect(r2).toEqual(1111); - }); - - it('reduces from the right', () => { - const v = List.of('a', 'b', 'c'); - const r = v.reduceRight((reduction, value) => reduction + value); - expect(r).toEqual('cba'); - const r2 = v.reduceRight((reduction, value) => reduction + value, 'x'); - expect(r2).toEqual('xcba'); - }); - - it('takes maximum number', () => { - const v = List.of('a', 'b', 'c'); - const r = v.take(Number.MAX_SAFE_INTEGER); - expect(r).toBe(v); - }); - - it('takes and skips values', () => { - const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); - const r = v.skip(2).take(2); - expect(r.toArray()).toEqual(['c', 'd']); - }); - - it('takes and skips no-ops return same reference', () => { - const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); - const r = v.skip(0).take(6); - expect(r).toBe(v); - }); - - it('takeLast and skipLast values', () => { - const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); - const r = v.skipLast(1).takeLast(2); - expect(r.toArray()).toEqual(['d', 'e']); - }); - - it('takeLast and skipLast no-ops return same reference', () => { - const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); - const r = v.skipLast(0).takeLast(6); - expect(r).toBe(v); - }); - - it('efficiently chains array methods', () => { - const v = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14); - - const r = v - .filter((x) => x % 2 === 0) - .skip(2) - .map((x) => x * x) - .take(3) - .reduce((a: number, b: number) => a + b, 0); - - expect(r).toEqual(200); - }); - - it('can convert to a map', () => { - const v = List.of('a', 'b', 'c'); - const m = v.toMap(); - expect(m.size).toBe(3); - expect(m.get(1)).toBe('b'); - }); - - it('reverses', () => { - const v = List.of('a', 'b', 'c'); - expect(v.reverse().toArray()).toEqual(['c', 'b', 'a']); - }); - - it('ensures equality', () => { - // Make a sufficiently long list. - const a = Array(100).join('abcdefghijklmnopqrstuvwxyz').split(''); - const v1 = List(a); - const v2 = List(a); - - // eslint-disable-next-line eqeqeq - expect(v1 == v2).not.toBe(true); - expect(v1 === v2).not.toBe(true); - expect(v1.equals(v2)).toBe(true); - }); - - it('works with insert', () => { - const v = List.of('a', 'b', 'c'); - const m = v.insert(1, 'd'); - expect(m.size).toBe(4); - expect(m.get(1)).toBe('d'); - - // Works when index is greater than size of array. - const n = v.insert(10, 'e'); - expect(n.size).toBe(4); - expect(n.get(3)).toBe('e'); - - // Works when index is negative. - const o = v.insert(-4, 'f'); - expect(o.size).toBe(4); - expect(o.get(0)).toBe('f'); - }); - - it('works with push, set and insert without phantom values', () => { - const v = List.of().set(287, 287).push(42).insert(33, 33); - expect(v.toJS().filter((item) => item === 287)).toHaveLength(1); - const v2 = List.of().push(0).unshift(-1).unshift(-2).pop().pop().set(2, 2); - expect(v2.toJS()).toEqual([-2, undefined, 2]); - const v3 = List.of().set(447, 447).push(0).insert(65, 65); - expect(v3.toJS().filter((item) => item === 447)).toHaveLength(1); - const v4 = List.of().set(-28, -28).push(0).shift().set(-30, -30); - expect(v4.toJS().filter((item) => item === -28)).toHaveLength(0); - const v5 = List.of().unshift(0).set(33, 33).shift().set(-35, -35); - expect(v5.toJS().filter((item) => item === 0)).toHaveLength(0); - - // execute the same test as `v` but for the 2000 first integers - const isOkV1 = (v) => - List.of() - .set(v, v) - .push('pushed-value') - .insert(33, 'inserted-value') - .filter((item) => item === v).size === 1; - - const arr = new Array(2000).fill(null).map((_, v) => v); - - const notOkArray = arr.filter((v) => !isOkV1(v)); - - expect(notOkArray).toHaveLength(0); - }); - - // TODO: assert that findIndex only calls the function as much as it needs to. - - it('forEach iterates in the correct order', () => { - let n = 0; - const a: Array = []; - const v = List.of(0, 1, 2, 3, 4); - v.forEach((x) => { - a.push(x); - n++; - }); - expect(n).toBe(5); - expect(a.length).toBe(5); - expect(a).toEqual([0, 1, 2, 3, 4]); - }); - - it('forEach iteration terminates when callback returns false', () => { - const a: Array = []; - function count(x) { - if (x > 2) { - return false; - } - a.push(x); - } - const v = List.of(0, 1, 2, 3, 4); - v.forEach(count); - expect(a).toEqual([0, 1, 2]); - }); - - it('concat works like Array.prototype.concat', () => { - const v1 = List([1, 2, 3]); - const v2 = v1.concat( - 4, - List([5, 6]), - [7, 8], - Seq([9, 10]), - Set.of(11, 12), - null - ); - expect(v1.toArray()).toEqual([1, 2, 3]); - expect(v2.toArray()).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, null]); - }); - - it('concat works like Array.prototype.concat even for IE11', () => { - const v1 = List([1, 2, 3]); - const a = [4]; - - // remove Symbol.iterator as IE11 does not handle it. - // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator#browser_compatibility - // @ts-expect-error -- simulate IE11 - a[Symbol.iterator] = undefined; - - const v2 = v1.concat(a); - expect(v1.toArray()).toEqual([1, 2, 3]); - expect(v2.toArray()).toEqual([1, 2, 3, 4]); - }); - - it('concat returns self when no changes', () => { - const v1 = List([1, 2, 3]); - expect(v1.concat([])).toBe(v1); - }); - - it('concat returns arg when concat to empty', () => { - const v1 = List([1, 2, 3]); - expect(List().concat(v1)).toBe(v1); - }); - - it('concats a single value', () => { - const v1 = List([1, 2, 3]); - expect(v1.concat(4)).toEqual(List([1, 2, 3, 4])); - }); - - it('concat returns List-coerced arg when concat to empty', () => { - expect(List().concat([1, 2, 3])).toEqual(List([1, 2, 3])); - }); - - it('concat does not spread in string characters', () => { - const v1 = List([1, 2, 3]); - expect(v1.concat('abcdef')).toEqual(List([1, 2, 3, 'abcdef'])); - }); - - it('allows chained mutations', () => { - const v1 = List(); - const v2 = v1.push(1); - const v3 = v2.withMutations((v) => v.push(2).push(3).push(4)); - const v4 = v3.push(5); - - expect(v1.toArray()).toEqual([]); - expect(v2.toArray()).toEqual([1]); - expect(v3.toArray()).toEqual([1, 2, 3, 4]); - expect(v4.toArray()).toEqual([1, 2, 3, 4, 5]); - }); - - it('allows chained mutations using alternative API', () => { - const v1 = List(); - const v2 = v1.push(1); - const v3 = v2.asMutable().push(2).push(3).push(4).asImmutable(); - const v4 = v3.push(5); - - expect(v1.toArray()).toEqual([]); - expect(v2.toArray()).toEqual([1]); - expect(v3.toArray()).toEqual([1, 2, 3, 4]); - expect(v4.toArray()).toEqual([1, 2, 3, 4, 5]); - }); - - it('chained mutations does not result in new empty list instance', () => { - const v1 = List(['x']); - const v2 = v1.withMutations((v) => v.push('y').pop().pop()); - expect(v2).toEqual(List()); - }); - - it('calling `clear` and `setSize` should set all items to undefined', () => { - const l = List(['a', 'b']); - const l2 = l.clear().setSize(3); - - expect(l2.get(0)).toBeUndefined(); - expect(l2.get(1)).toBeUndefined(); - expect(l2.get(2)).toBeUndefined(); - }); - - it('calling `clear` and `setSize` while mutating should set all items to undefined', () => { - const l = List(['a', 'b']); - const l2 = l.withMutations((innerList) => { - innerList.clear().setSize(3); - }); - expect(l2.get(0)).toBeUndefined(); - expect(l2.get(1)).toBeUndefined(); - expect(l2.get(2)).toBeUndefined(); - }); - - it('allows size to be set', () => { - const v1 = Range(0, 2000).toList(); - const v2 = v1.setSize(1000); - const v3 = v2.setSize(1500); - expect(v1.size).toBe(2000); - expect(v2.size).toBe(1000); - expect(v3.size).toBe(1500); - expect(v1.get(900)).toBe(900); - expect(v1.get(1300)).toBe(1300); - expect(v1.get(1800)).toBe(1800); - expect(v2.get(900)).toBe(900); - expect(v2.get(1300)).toBe(undefined); - expect(v2.get(1800)).toBe(undefined); - expect(v3.get(900)).toBe(900); - expect(v3.get(1300)).toBe(undefined); - expect(v3.get(1800)).toBe(undefined); - }); - - it('discards truncated elements when using slice', () => { - const list: Array = [1, 2, 3, 4, 5, 6]; - const v1 = fromJS(list) as List; - const v2 = v1.slice(0, 3); - const v3 = v2.setSize(6); - - expect(v2.toArray()).toEqual(list.slice(0, 3)); - expect(v3.toArray()).toEqual( - list.slice(0, 3).concat([undefined, undefined, undefined]) - ); - }); - - it('discards truncated elements when using setSize', () => { - const list: Array = [1, 2, 3, 4, 5, 6]; - const v1 = fromJS(list) as List; - const v2 = v1.setSize(3); - const v3 = v2.setSize(6); - - expect(v2.toArray()).toEqual(list.slice(0, 3)); - expect(v3.toArray()).toEqual( - list.slice(0, 3).concat([undefined, undefined, undefined]) - ); - }); - - it('can be efficiently sliced', () => { - const v1 = Range(0, 2000).toList(); - const v2 = v1.slice(100, -100).toList(); - const v3 = v2.slice(0, Infinity); - expect(v1.size).toBe(2000); - expect(v2.size).toBe(1800); - expect(v3.size).toBe(1800); - expect(v2.first()).toBe(100); - expect(v2.rest().size).toBe(1799); - expect(v2.last()).toBe(1899); - expect(v2.butLast().size).toBe(1799); - }); - - [NaN, Infinity, -Infinity].forEach((zeroishValue) => { - it(`treats ${zeroishValue} like zero when setting size`, () => { - const v1 = List.of('a', 'b', 'c'); - const v2 = v1.setSize(zeroishValue); - expect(v2.size).toBe(0); - }); - }); - - it('Does not infinite loop when sliced with NaN #459', () => { - const list = List([1, 2, 3, 4, 5]); - const newList = list.slice(0, NaN); - expect(newList.toJS()).toEqual([]); - }); - - it('Accepts NaN for slice and concat #602', () => { - const list = List().slice(0, NaN).concat(NaN); - // toEqual([ NaN ]) - expect(list.size).toBe(1); - expect(isNaNValue(list.get(0))).toBe(true); - }); - - it('return a new emptyList if the emptyList has been mutated #2003', () => { - const emptyList = List(); - - const nonEmptyList = emptyList.withMutations((l) => { - l.setSize(1); - l.set(0, 'a'); - }); - - expect(nonEmptyList.size).toBe(1); - expect(nonEmptyList).toEqual(List.of('a')); - expect(emptyList.size).toBe(0); - - const mutableList = emptyList.asMutable(); - - mutableList.setSize(1); - mutableList.set(0, 'b'); - - expect(mutableList.size).toBe(1); - expect(mutableList).toEqual(List.of('b')); - - expect(emptyList.size).toBe(0); - expect(List().size).toBe(0); - }); - - it('Mutating empty list with a JS API should not mutate new instances', () => { - Object.assign(List(), List([1, 2])); - - expect(List().size).toBe(0); - expect(List().toArray()).toEqual([]); - }); - - // Note: NaN is the only value not equal to itself. The isNaN() built-in - // function returns true for any non-numeric value, not just the NaN value. - function isNaNValue(value) { - return value !== value; - } - - describe('when slicing', () => { - [NaN, -Infinity].forEach((zeroishValue) => { - it(`considers a ${zeroishValue} begin argument to be zero`, () => { - const v1 = List.of('a', 'b', 'c'); - const v2 = v1.slice(zeroishValue, 3); - expect(v2.size).toBe(3); - }); - it(`considers a ${zeroishValue} end argument to be zero`, () => { - const v1 = List.of('a', 'b', 'c'); - const v2 = v1.slice(0, zeroishValue); - expect(v2.size).toBe(0); - }); - it(`considers ${zeroishValue} begin and end arguments to be zero`, () => { - const v1 = List.of('a', 'b', 'c'); - const v2 = v1.slice(zeroishValue, zeroishValue); - expect(v2.size).toBe(0); - }); - }); - }); - - describe('when shuffling', () => { - const list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - it('should work when empty', () => { - expect(List().shuffle()).toStrictEqual(List()); - }); - it('should work with Math.random', () => { - expect(list.shuffle().sort()).toStrictEqual(list); - }); - it('should work with a pseudo random number generator', () => { - const seed = createSeed('lorem ipsum'); - const random = () => seed.random(); - - expect(list.shuffle(random)).toStrictEqual( - List.of(5, 2, 4, 7, 6, 3, 10, 1, 9, 8) - ); - expect(list.shuffle(random)).toStrictEqual( - List.of(1, 6, 2, 3, 9, 7, 4, 10, 5, 8) - ); - expect(list.shuffle(random)).toStrictEqual( - List.of(6, 1, 8, 10, 9, 5, 4, 7, 3, 2) - ); - }); - }); - - describe('Iterator', () => { - const pInt = fc.nat(100); - - it('iterates through List', () => { - fc.assert( - fc.property(pInt, pInt, (start, len) => { - const l1 = Range(0, start + len).toList(); - const l2: List = l1.slice(start, start + len); - expect(l2.size).toBe(len); - const valueIter = l2.values(); - const keyIter = l2.keys(); - const entryIter = l2.entries(); - for (let ii = 0; ii < len; ii++) { - expect(valueIter.next().value).toBe(start + ii); - expect(keyIter.next().value).toBe(ii); - expect(entryIter.next().value).toEqual([ii, start + ii]); - } - }) - ); - }); - - it('iterates through List in reverse', () => { - fc.assert( - fc.property(pInt, pInt, (start, len) => { - const l1 = Range(0, start + len).toList(); - const l2: List = l1.slice(start, start + len); - const s = l2.toSeq().reverse(); // impl calls List.__iterator(REVERSE) - expect(s.size).toBe(len); - const valueIter = s.values(); - const keyIter = s.keys(); - const entryIter = s.entries(); - for (let ii = 0; ii < len; ii++) { - expect(valueIter.next().value).toBe(start + len - 1 - ii); - expect(keyIter.next().value).toBe(ii); - expect(entryIter.next().value).toEqual([ii, start + len - 1 - ii]); - } - }) - ); - }); - }); -}); diff --git a/__tests__/ListJS.js b/__tests__/ListJS.js deleted file mode 100644 index ae18d4881d..0000000000 --- a/__tests__/ListJS.js +++ /dev/null @@ -1,47 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List } from 'immutable'; - -const NON_NUMBERS = { - array: ['not', 'a', 'number'], - NaN: NaN, - object: { not: 'a number' }, - string: 'not a number', -}; - -describe('List', () => { - describe('setSize()', () => { - Object.keys(NON_NUMBERS).forEach((type) => { - const nonNumber = NON_NUMBERS[type]; - it(`considers a size argument of type '${type}' to be zero`, () => { - const v1 = List.of(1, 2, 3); - const v2 = v1.setSize(nonNumber); - expect(v2.size).toBe(0); - }); - }); - }); - describe('slice()', () => { - // Mimic the behavior of Array::slice() - // http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.slice - Object.keys(NON_NUMBERS).forEach((type) => { - const nonNumber = NON_NUMBERS[type]; - it(`considers a begin argument of type '${type}' to be zero`, () => { - const v1 = List.of('a', 'b', 'c'); - const v2 = v1.slice(nonNumber, 2); - expect(v2.size).toBe(2); - expect(v2.first()).toBe('a'); - expect(v2.rest().size).toBe(1); - expect(v2.last()).toBe('b'); - expect(v2.butLast().size).toBe(1); - }); - it(`considers an end argument of type '${type}' to be zero`, () => { - const v1 = List.of('a', 'b', 'c'); - const v2 = v1.slice(0, nonNumber); - expect(v2.size).toBe(0); - expect(v2.first()).toBe(undefined); - expect(v2.rest().size).toBe(0); - expect(v2.last()).toBe(undefined); - expect(v2.butLast().size).toBe(0); - }); - }); - }); -}); diff --git a/__tests__/Map.ts b/__tests__/Map.ts deleted file mode 100644 index d8ae8b16ca..0000000000 --- a/__tests__/Map.ts +++ /dev/null @@ -1,593 +0,0 @@ -import { describe, expect, it, jest } from '@jest/globals'; -import { fromJS, is, List, Map, Range, Record, Seq } from 'immutable'; -import fc from 'fast-check'; - -describe('Map', () => { - it('converts from object', () => { - const m = Map({ a: 'A', b: 'B', c: 'C' }); - expect(m.size).toBe(3); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - }); - - it('converts from JS (global) Map', () => { - const m = Map( - new global.Map([ - ['a', 'A'], - ['b', 'B'], - ['c', 'C'], - ]) - ); - expect(Map.isMap(m)).toBe(true); - expect(m.size).toBe(3); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - }); - - it('constructor provides initial values', () => { - const m = Map({ a: 'A', b: 'B', c: 'C' }); - expect(m.size).toBe(3); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - }); - - it('constructor provides initial values as array of entries', () => { - const m = Map([ - ['a', 'A'], - ['b', 'B'], - ['c', 'C'], - ]); - expect(m.size).toBe(3); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - }); - - it('constructor provides initial values as sequence', () => { - const s = Seq({ a: 'A', b: 'B', c: 'C' }); - const m = Map(s); - expect(m.size).toBe(3); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - }); - - it('constructor provides initial values as list of lists', () => { - const l = List([List(['a', 'A']), List(['b', 'B']), List(['c', 'C'])]); - const m = Map(l); - expect(m.size).toBe(3); - // @ts-expect-error -- Not supported by typescript since 4.0.0 https://github.com/immutable-js/immutable-js/pull/1626 - expect(m.get('a')).toBe('A'); - // @ts-expect-error -- Not supported by typescript since 4.0.0 https://github.com/immutable-js/immutable-js/pull/1626 - expect(m.get('b')).toBe('B'); - // @ts-expect-error -- Not supported by typescript since 4.0.0 https://github.com/immutable-js/immutable-js/pull/1626 - expect(m.get('c')).toBe('C'); - }); - - it('constructor is identity when provided map', () => { - const m1 = Map({ a: 'A', b: 'B', c: 'C' }); - const m2 = Map(m1); - expect(m2).toBe(m1); - }); - - it('does not accept a scalar', () => { - expect(() => { - // TODO: should expect error - Map(3); - }).toThrow( - 'Expected Array or collection object of [k, v] entries, or keyed object: 3' - ); - }); - - it('does not accept strings (collection, but scalar)', () => { - expect(() => { - // @ts-expect-error -- constructor does not accept strings, this is expected to throw - Map('abc'); - }).toThrow(); - }); - - it('does not accept non-entries array', () => { - expect(() => { - // @ts-expect-error -- not an array of entries, this is expected to throw - Map([1, 2, 3]); - }).toThrow('Expected [K, V] tuple: 1'); - }); - - it('accepts non-collection array-like objects as keyed collections', () => { - const m = Map({ length: 3, 1: 'one' }); - expect(m.get('length')).toBe(3); - // @ts-expect-error -- type error, but the API is tolerante - expect(m.get('1')).toBe('one'); - expect(m.toJS()).toEqual({ length: 3, 1: 'one' }); - }); - - it('converts back to JS object', () => { - const m = Map({ a: 'A', b: 'B', c: 'C' }); - expect(m.toObject()).toEqual({ a: 'A', b: 'B', c: 'C' }); - }); - - it('iterates values', () => { - const m = Map({ a: 'A', b: 'B', c: 'C' }); - const iterator = jest.fn(); - m.forEach(iterator); - expect(iterator.mock.calls).toEqual([ - ['A', 'a', m], - ['B', 'b', m], - ['C', 'c', m], - ]); - }); - - it('has the same iterator function for entries', () => { - const m = Map({ a: 'A', b: 'B', c: 'C' }); - expect(m[Symbol.iterator]).toBe(m.entries); - }); - - it('merges two maps', () => { - const m1 = Map({ a: 'A', b: 'B', c: 'C' }); - const m2 = Map({ wow: 'OO', d: 'DD', b: 'BB' }); - expect(m2.toObject()).toEqual({ wow: 'OO', d: 'DD', b: 'BB' }); - const m3 = m1.merge(m2); - expect(m3.toObject()).toEqual({ - a: 'A', - b: 'BB', - c: 'C', - wow: 'OO', - d: 'DD', - }); - }); - - it('concatenates two maps (alias for merge)', () => { - const m1 = Map({ a: 'A', b: 'B', c: 'C' }); - const m2 = Map({ wow: 'OO', d: 'DD', b: 'BB' }); - expect(m2.toObject()).toEqual({ wow: 'OO', d: 'DD', b: 'BB' }); - const m3 = m1.concat(m2); - expect(m3.toObject()).toEqual({ - a: 'A', - b: 'BB', - c: 'C', - wow: 'OO', - d: 'DD', - }); - }); - - it('accepts null as a key', () => { - const m1 = Map(); - const m2 = m1.set(null, 'null'); - const m3 = m2.remove(null); - expect(m1.size).toBe(0); - expect(m2.size).toBe(1); - expect(m3.size).toBe(0); - expect(m2.get(null)).toBe('null'); - }); - - it('is persistent to sets', () => { - const m1 = Map(); - const m2 = m1.set('a', 'Aardvark'); - const m3 = m2.set('b', 'Baboon'); - const m4 = m3.set('c', 'Canary'); - const m5 = m4.set('b', 'Bonobo'); - expect(m1.size).toBe(0); - expect(m2.size).toBe(1); - expect(m3.size).toBe(2); - expect(m4.size).toBe(3); - expect(m5.size).toBe(3); - expect(m3.get('b')).toBe('Baboon'); - expect(m5.get('b')).toBe('Bonobo'); - }); - - it('is persistent to deletes', () => { - const m1 = Map(); - const m2 = m1.set('a', 'Aardvark'); - const m3 = m2.set('b', 'Baboon'); - const m4 = m3.set('c', 'Canary'); - const m5 = m4.remove('b'); - expect(m1.size).toBe(0); - expect(m2.size).toBe(1); - expect(m3.size).toBe(2); - expect(m4.size).toBe(3); - expect(m5.size).toBe(2); - expect(m3.has('b')).toBe(true); - expect(m3.get('b')).toBe('Baboon'); - expect(m5.has('b')).toBe(false); - expect(m5.get('b')).toBe(undefined); - expect(m5.get('c')).toBe('Canary'); - }); - - it('deletes down to empty map', () => { - fc.assert( - fc.property(fc.nat(100), (size) => { - let m = Range(0, size).toMap(); - expect(m.size).toBe(size); - for (let ii = size - 1; ii >= 0; ii--) { - m = m.remove(ii); - expect(m.size).toBe(ii); - } - expect(m).toBe(Map()); - }) - ); - }); - - it('can map many items', () => { - let m = Map(); - for (let ii = 0; ii < 2000; ii++) { - m = m.set('thing:' + ii, ii); - } - expect(m.size).toBe(2000); - expect(m.get('thing:1234')).toBe(1234); - }); - - it('can use weird keys', () => { - const symbol = Symbol('A'); - const m = Map() - .set(NaN, 1) - .set(Infinity, 2) - .set(symbol, 'A') - .set(-Infinity, 3); - - expect(m.get(symbol)).toBe('A'); - expect(m.get(NaN)).toBe(1); - expect(m.get(Infinity)).toBe(2); - expect(m.get(-Infinity)).toBe(3); - }); - - it('can map items known to hash collide', () => { - // make a big map, so it hashmaps - let m: Map = Range(0, 32).toMap(); - m = m.set('AAA', 'letters').set(64545, 'numbers'); - expect(m.size).toBe(34); - expect(m.get('AAA')).toEqual('letters'); - expect(m.get(64545)).toEqual('numbers'); - }); - - it('can progressively add items known to collide', () => { - // make a big map, so it hashmaps - let map: Map = Range(0, 32).toMap(); - map = map.set('@', '@'); - map = map.set(64, 64); - map = map.set(96, 96); - expect(map.size).toBe(35); - expect(map.get('@')).toBe('@'); - expect(map.get(64)).toBe(64); - expect(map.get(96)).toBe(96); - }); - - it('maps values', () => { - const m = Map({ a: 'a', b: 'b', c: 'c' }); - const r = m.map((value) => value.toUpperCase()); - expect(r.toObject()).toEqual({ a: 'A', b: 'B', c: 'C' }); - }); - - it('maps keys', () => { - const m = Map({ a: 'a', b: 'b', c: 'c' }); - const r = m.mapKeys((key) => key.toUpperCase()); - expect(r.toObject()).toEqual({ A: 'a', B: 'b', C: 'c' }); - }); - - it('maps no-ops return the same reference', () => { - const m = Map({ a: 'a', b: 'b', c: 'c' }); - const r = m.map((value) => value); - expect(r).toBe(m); - }); - - it('provides unmodified original collection as 3rd iter argument', () => { - const m = Map({ a: 1, b: 1 }); - const r = m.map((value, key, iter) => { - expect(iter).toEqual(m); - return 2 * (iter.get(key) as number); - }); - expect(r.toObject()).toEqual({ a: 2, b: 2 }); - }); - - it('filters values', () => { - const m = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); - const r = m.filter((value) => value % 2 === 1); - expect(r.toObject()).toEqual({ a: 1, c: 3, e: 5 }); - }); - - it('filterNots values', () => { - const m = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); - const r = m.filterNot((value) => value % 2 === 1); - expect(r.toObject()).toEqual({ b: 2, d: 4, f: 6 }); - }); - - it('partitions values', () => { - const m = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); - const r = m - .partition((value) => value % 2 === 1) - .map((part) => part.toObject()); - expect(r).toEqual([ - { b: 2, d: 4, f: 6 }, - { a: 1, c: 3, e: 5 }, - ]); - }); - - it('derives keys', () => { - const v = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); - expect(v.keySeq().toArray()).toEqual(['a', 'b', 'c', 'd', 'e', 'f']); - }); - - it('flips keys and values', () => { - const v = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); - expect(v.flip().toObject()).toEqual({ - 1: 'a', - 2: 'b', - 3: 'c', - 4: 'd', - 5: 'e', - 6: 'f', - }); - }); - - it('can convert to a list', () => { - const m = Map({ a: 1, b: 2, c: 3 }); - const v = m.toList(); - const k = m.keySeq().toList(); - expect(v.size).toBe(3); - expect(k.size).toBe(3); - // Note: Map has undefined ordering, this List may not be the same - // order as the order you set into the Map. - expect(v.get(1)).toBe(2); - expect(k.get(1)).toBe('b'); - }); - - it('works like an object', () => { - fc.assert( - fc.property(fc.object({ maxKeys: 50 }), (obj) => { - let map = Map(obj); - Object.keys(obj).forEach((key) => { - expect(map.get(key)).toBe(obj[key]); - expect(map.has(key)).toBe(true); - }); - Object.keys(obj).forEach((key) => { - expect(map.get(key)).toBe(obj[key]); - expect(map.has(key)).toBe(true); - map = map.remove(key); - expect(map.get(key)).toBe(undefined); - expect(map.has(key)).toBe(false); - }); - }) - ); - }); - - it('sets', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - let map = Map(); - for (let ii = 0; ii < len; ii++) { - expect(map.size).toBe(ii); - map = map.set('' + ii, ii); - } - expect(map.size).toBe(len); - expect(is(map.toSet(), Range(0, len).toSet())).toBe(true); - }) - ); - }); - - it('has and get', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const map = Range(0, len) - .toKeyedSeq() - .mapKeys((x) => '' + x) - .toMap(); - for (let ii = 0; ii < len; ii++) { - expect(map.get('' + ii)).toBe(ii); - expect(map.has('' + ii)).toBe(true); - } - }) - ); - }); - - it('deletes', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - let map = Range(0, len).toMap(); - for (let ii = 0; ii < len; ii++) { - expect(map.size).toBe(len - ii); - map = map.remove(ii); - } - expect(map.size).toBe(0); - expect(map.toObject()).toEqual({}); - }) - ); - }); - - it('deletes from transient', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const map = Range(0, len).toMap().asMutable(); - for (let ii = 0; ii < len; ii++) { - expect(map.size).toBe(len - ii); - map.remove(ii); - } - expect(map.size).toBe(0); - expect(map.toObject()).toEqual({}); - }) - ); - }); - - it('iterates through all entries', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const v = Range(0, len).toMap(); - const a = v.toArray(); - const iter = v.entries(); - for (let ii = 0; ii < len; ii++) { - delete a[iter.next().value[0]]; - } - expect(a).toEqual(new Array(len)); - }) - ); - }); - - it('allows chained mutations', () => { - const m1 = Map(); - const m2 = m1.set('a', 1); - const m3 = m2.withMutations((m) => m.set('b', 2).set('c', 3)); - const m4 = m3.set('d', 4); - - expect(m1.toObject()).toEqual({}); - expect(m2.toObject()).toEqual({ a: 1 }); - expect(m3.toObject()).toEqual({ a: 1, b: 2, c: 3 }); - expect(m4.toObject()).toEqual({ a: 1, b: 2, c: 3, d: 4 }); - }); - - it('chained mutations does not result in new empty map instance', () => { - const v1 = Map<{ x?: number; y?: number }>({ x: 1 }); - const v2 = v1.withMutations((v) => v.set('y', 2).delete('x').delete('y')); - expect(v2).toBe(Map()); - }); - - it('expresses value equality with unordered sequences', () => { - const m1 = Map({ A: 1, B: 2, C: 3 }); - const m2 = Map({ C: 3, B: 2, A: 1 }); - expect(is(m1, m2)).toBe(true); - }); - - it('does not equal Record with same values', () => { - const m1 = Map({ A: 1, B: 2, C: 3 }); - const m2 = Record({ A: 1, B: 2, C: 3 }); - expect(is(m1, m2)).toBe(false); - }); - - it('deletes all the provided keys', () => { - const NOT_SET = undefined; - const m1 = Map({ A: 1, B: 2, C: 3 }); - const m2 = m1.deleteAll(['A', 'B']); - expect(m2.get('A')).toBe(NOT_SET); - expect(m2.get('B')).toBe(NOT_SET); - expect(m2.get('C')).toBe(3); - expect(m2.size).toBe(1); - }); - - it('remains unchanged when no keys are provided', () => { - const m1 = Map({ A: 1, B: 2, C: 3 }); - const m2 = m1.deleteAll([]); - expect(m1).toBe(m2); - }); - - it('uses toString on keys and values', () => { - class A extends Record({ x: null as number | null }) { - toString() { - return this.x; - } - } - - const r = new A({ x: 2 }); - const map = Map([[r, r]]); - expect(map.toString()).toEqual('Map { 2: 2 }'); - }); - - it('supports Symbols as tuple keys', () => { - const a = Symbol('a'); - const b = Symbol('b'); - const c = Symbol('c'); - const m = Map([ - [a, 'a'], - [b, 'b'], - [c, 'c'], - ]); - expect(m.size).toBe(3); - expect(m.get(a)).toBe('a'); - expect(m.get(b)).toBe('b'); - expect(m.get(c)).toBe('c'); - }); - - it('supports Symbols as object constructor keys', () => { - const a = Symbol.for('a'); - const b = Symbol('b'); - const c = Symbol('c'); - const m = Map({ - [a]: 'a', - [b]: 'b', - [c]: 'c', - }); - expect(m.size).toBe(3); - expect(m.get(a)).toBe('a'); - expect(m.get(b)).toBe('b'); - expect(m.get(c)).toBe('c'); - - const m2 = fromJS({ [a]: 'a' }) as Map; - expect(m2.size).toBe(1); - expect(m2.get(a)).toBe('a'); - }); - - it('Symbol keys are unique', () => { - const a = Symbol('FooBar'); - const b = Symbol('FooBar'); - const m = Map([ - [a, 'FizBuz'], - [b, 'FooBar'], - ]); - expect(m.size).toBe(2); - expect(m.get(a)).toBe('FizBuz'); - expect(m.get(b)).toBe('FooBar'); - }); - - it('mergeDeep with tuple Symbol keys', () => { - const a = Symbol('a'); - const b = Symbol('b'); - const c = Symbol('c'); - const d = Symbol('d'); - const e = Symbol('e'); - const f = Symbol('f'); - const g = Symbol('g'); - - // Note the use of nested Map constructors, Map() does not do a - // deep conversion! - const m1 = Map([ - [ - a, - Map([ - [ - b, - Map([ - [c, 1], - [d, 2], - ]), - ], - ]), - ], - ]); - const m2 = Map([ - [ - a, - Map([ - [ - b, - Map([ - [c, 10], - [e, 20], - [f, 30], - [g, 40], - ]), - ], - ]), - ], - ]); - const merged = m1.mergeDeep(m2); - - expect(merged).toEqual( - Map([ - [ - a, - Map([ - [ - b, - Map([ - [c, 10], - [d, 2], - [e, 20], - [f, 30], - [g, 40], - ]), - ], - ]), - ], - ]) - ); - }); -}); diff --git a/__tests__/MultiRequire.js b/__tests__/MultiRequire.js deleted file mode 100644 index 17c3de9472..0000000000 --- a/__tests__/MultiRequire.js +++ /dev/null @@ -1,92 +0,0 @@ -import { describe, expect, it, jest } from '@jest/globals'; -import * as Immutable1 from '../src/Immutable'; - -jest.resetModules(); - -const Immutable2 = jest.requireActual('../src/Immutable'); - -describe('MultiRequire', () => { - it('might require two different instances of Immutable', () => { - expect(Immutable1).not.toBe(Immutable2); - expect(Immutable1.Map({ a: 1 }).toJS()).toEqual({ a: 1 }); - expect(Immutable2.Map({ a: 1 }).toJS()).toEqual({ a: 1 }); - }); - - it('detects sequences', () => { - const x = Immutable1.Map({ a: 1 }); - const y = Immutable2.Map({ a: 1 }); - expect(Immutable1.isCollection(y)).toBe(true); - expect(Immutable2.isCollection(x)).toBe(true); - }); - - it('detects records', () => { - const R1 = Immutable1.Record({ a: 1 }); - const R2 = Immutable2.Record({ a: 1 }); - expect(Immutable1.Record.isRecord(R2())).toBe(true); - expect(Immutable2.Record.isRecord(R1())).toBe(true); - }); - - it('converts to JS when inter-nested', () => { - const deep = Immutable1.Map({ - a: 1, - b: 2, - c: Immutable2.Map({ - x: 3, - y: 4, - z: Immutable1.Map(), - }), - }); - - expect(deep.toJS()).toEqual({ - a: 1, - b: 2, - c: { - x: 3, - y: 4, - z: {}, - }, - }); - }); - - it('compares for equality', () => { - const x = Immutable1.Map({ a: 1 }); - const y = Immutable2.Map({ a: 1 }); - expect(Immutable1.is(x, y)).toBe(true); - expect(Immutable2.is(x, y)).toBe(true); - }); - - it('flattens nested values', () => { - const nested = Immutable1.List( - Immutable2.List(Immutable1.List(Immutable2.List.of(1, 2))) - ); - - expect(nested.flatten().toJS()).toEqual([1, 2]); - }); - - it('detects types', () => { - let c1 = Immutable1.Map(); - let c2 = Immutable2.Map(); - expect(Immutable1.Map.isMap(c2)).toBe(true); - expect(Immutable2.Map.isMap(c1)).toBe(true); - - c1 = Immutable1.OrderedMap(); - c2 = Immutable2.OrderedMap(); - expect(Immutable1.OrderedMap.isOrderedMap(c2)).toBe(true); - expect(Immutable2.OrderedMap.isOrderedMap(c1)).toBe(true); - - c1 = Immutable1.List(); - c2 = Immutable2.List(); - expect(Immutable1.List.isList(c2)).toBe(true); - expect(Immutable2.List.isList(c1)).toBe(true); - - c1 = Immutable1.Stack(); - c2 = Immutable2.Stack(); - expect(Immutable1.Stack.isStack(c2)).toBe(true); - expect(Immutable2.Stack.isStack(c1)).toBe(true); - - c1 = Immutable1.Set(); - c2 = Immutable2.Set(); - expect(Immutable1.Set.isSet(c2)).toBe(true); - expect(Immutable2.Set.isSet(c1)).toBe(true); - }); -}); diff --git a/__tests__/ObjectSeq.ts b/__tests__/ObjectSeq.ts deleted file mode 100644 index 2b10807cb5..0000000000 --- a/__tests__/ObjectSeq.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Seq } from 'immutable'; - -describe('ObjectSequence', () => { - it('maps', () => { - const i = Seq({ a: 'A', b: 'B', c: 'C' }); - const m = i.map((x) => x + x).toObject(); - expect(m).toEqual({ a: 'AA', b: 'BB', c: 'CC' }); - }); - - it('reduces', () => { - const i = Seq({ a: 'A', b: 'B', c: 'C' }); - const r = i.reduce((acc, x) => acc + x, ''); - expect(r).toEqual('ABC'); - }); - - it('extracts keys', () => { - const i = Seq({ a: 'A', b: 'B', c: 'C' }); - const k = i.keySeq().toArray(); - expect(k).toEqual(['a', 'b', 'c']); - }); - - it('is reversable', () => { - const i = Seq({ a: 'A', b: 'B', c: 'C' }); - const k = i.reverse().toArray(); - expect(k).toEqual([ - ['c', 'C'], - ['b', 'B'], - ['a', 'A'], - ]); - }); - - it('is double reversable', () => { - const i = Seq({ a: 'A', b: 'B', c: 'C' }); - const k = i.reverse().reverse().toArray(); - expect(k).toEqual([ - ['a', 'A'], - ['b', 'B'], - ['c', 'C'], - ]); - }); - - it('can be iterated', () => { - const obj = { a: 1, b: 2, c: 3 }; - const seq = Seq(obj); - const entries = seq.entries(); - expect(entries.next()).toEqual({ value: ['a', 1], done: false }); - expect(entries.next()).toEqual({ value: ['b', 2], done: false }); - expect(entries.next()).toEqual({ value: ['c', 3], done: false }); - expect(entries.next()).toEqual({ value: undefined, done: true }); - }); - - it('cannot be mutated after calling toObject', () => { - const seq = Seq({ a: 1, b: 2, c: 3 }); - - const obj = seq.toObject(); - obj.c = 10; - const seq2 = Seq(obj); - - expect(seq.get('c')).toEqual(3); - expect(seq2.get('c')).toEqual(10); - }); -}); diff --git a/__tests__/OrderedMap.ts b/__tests__/OrderedMap.ts deleted file mode 100644 index 9c06a6582e..0000000000 --- a/__tests__/OrderedMap.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { OrderedMap, Range, Seq } from 'immutable'; - -describe('OrderedMap', () => { - it('converts from object', () => { - const m = OrderedMap({ c: 'C', b: 'B', a: 'A' }); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - expect(m.toArray()).toEqual([ - ['c', 'C'], - ['b', 'B'], - ['a', 'A'], - ]); - }); - - it('constructor provides initial values', () => { - const m = OrderedMap({ a: 'A', b: 'B', c: 'C' }); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - expect(m.size).toBe(3); - expect(m.toArray()).toEqual([ - ['a', 'A'], - ['b', 'B'], - ['c', 'C'], - ]); - }); - - it('provides initial values in a mixed order', () => { - const m = OrderedMap({ c: 'C', b: 'B', a: 'A' }); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - expect(m.size).toBe(3); - expect(m.toArray()).toEqual([ - ['c', 'C'], - ['b', 'B'], - ['a', 'A'], - ]); - }); - - it('constructor accepts sequences', () => { - const s = Seq({ c: 'C', b: 'B', a: 'A' }); - const m = OrderedMap(s); - expect(m.get('a')).toBe('A'); - expect(m.get('b')).toBe('B'); - expect(m.get('c')).toBe('C'); - expect(m.size).toBe(3); - expect(m.toArray()).toEqual([ - ['c', 'C'], - ['b', 'B'], - ['a', 'A'], - ]); - }); - - it('maintains order when new keys are set', () => { - const m = OrderedMap() - .set('A', 'aardvark') - .set('Z', 'zebra') - .set('A', 'antelope'); - expect(m.size).toBe(2); - expect(m.toArray()).toEqual([ - ['A', 'antelope'], - ['Z', 'zebra'], - ]); - }); - - it('resets order when a keys is deleted', () => { - const m = OrderedMap() - .set('A', 'aardvark') - .set('Z', 'zebra') - .remove('A') - .set('A', 'antelope'); - expect(m.size).toBe(2); - expect(m.toArray()).toEqual([ - ['Z', 'zebra'], - ['A', 'antelope'], - ]); - }); - - it('removes correctly', () => { - const m = OrderedMap({ - A: 'aardvark', - Z: 'zebra', - }).remove('A'); - expect(m.size).toBe(1); - expect(m.get('A')).toBe(undefined); - expect(m.get('Z')).toBe('zebra'); - }); - - it('respects order for equality', () => { - const m1 = OrderedMap().set('A', 'aardvark').set('Z', 'zebra'); - const m2 = OrderedMap().set('Z', 'zebra').set('A', 'aardvark'); - expect(m1.equals(m2)).toBe(false); - expect(m1.equals(m2.reverse())).toBe(true); - }); - - it('respects order when merging', () => { - const m1 = OrderedMap({ A: 'apple', B: 'banana', C: 'coconut' }); - const m2 = OrderedMap({ C: 'chocolate', B: 'butter', D: 'donut' }); - expect(m1.merge(m2).entrySeq().toArray()).toEqual([ - ['A', 'apple'], - ['B', 'butter'], - ['C', 'chocolate'], - ['D', 'donut'], - ]); - expect(m2.merge(m1).entrySeq().toArray()).toEqual([ - ['C', 'coconut'], - ['B', 'banana'], - ['D', 'donut'], - ['A', 'apple'], - ]); - }); - - it('performs deleteAll correctly after resizing internal list', () => { - // See condition for resizing internal list here: - // https://github.com/immutable-js/immutable-js/blob/91c7c1e82ec616804768f968cc585565e855c8fd/src/OrderedMap.js#L138 - - // Create OrderedMap greater than or equal to SIZE (currently 32) - const SIZE = 32; - let map = OrderedMap(Range(0, SIZE).map((key) => [key, 0])); - - // Delete half of the keys so that internal list is twice the size of internal map - const keysToDelete = Range(0, SIZE / 2); - map = map.deleteAll(keysToDelete); - - // Delete one more key to trigger resizing - map = map.deleteAll([SIZE / 2]); - - expect(map.size).toBe(SIZE / 2 - 1); - }); - - it('hashCode should return the same value if the values are the same', () => { - const m1 = OrderedMap({ b: 'b' }); - const m2 = OrderedMap({ a: 'a', b: 'b' }).remove('a'); - const m3 = OrderedMap({ b: 'b' }).remove('b').set('b', 'b'); - - expect(m1.hashCode()).toEqual(m2.hashCode()); - expect(m1.hashCode()).toEqual(m3.hashCode()); - }); -}); diff --git a/__tests__/OrderedSet.ts b/__tests__/OrderedSet.ts deleted file mode 100644 index 12c958072d..0000000000 --- a/__tests__/OrderedSet.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { OrderedSet, Map } from 'immutable'; - -describe('OrderedSet', () => { - it('provides initial values in a mixed order', () => { - const s = OrderedSet.of('C', 'B', 'A'); - expect(s.has('A')).toBe(true); - expect(s.has('B')).toBe(true); - expect(s.has('C')).toBe(true); - expect(s.size).toBe(3); - expect(s.toArray()).toEqual(['C', 'B', 'A']); - }); - - it('maintains order when new values are added', () => { - const s = OrderedSet().add('A').add('Z').add('A'); - expect(s.size).toBe(2); - expect(s.toArray()).toEqual(['A', 'Z']); - }); - - it('resets order when a value is deleted', () => { - const s = OrderedSet().add('A').add('Z').remove('A').add('A'); - expect(s.size).toBe(2); - expect(s.toArray()).toEqual(['Z', 'A']); - }); - - it('removes correctly', () => { - const s = OrderedSet(['A', 'Z']).remove('A'); - expect(s.size).toBe(1); - expect(s.has('A')).toBe(false); - expect(s.has('Z')).toBe(true); - }); - - it('respects order for equality', () => { - const s1 = OrderedSet.of('A', 'Z'); - const s2 = OrderedSet.of('Z', 'A'); - expect(s1.equals(s2)).toBe(false); - expect(s1.equals(s2.reverse())).toBe(true); - }); - - it('respects order when unioning', () => { - const s1 = OrderedSet.of('A', 'B', 'C'); - const s2 = OrderedSet.of('C', 'B', 'D'); - expect(s1.union(s2).toArray()).toEqual(['A', 'B', 'C', 'D']); - expect(s2.union(s1).toArray()).toEqual(['C', 'B', 'D', 'A']); - }); - - it('can be zipped', () => { - const s1 = OrderedSet.of('A', 'B', 'C'); - const s2 = OrderedSet.of('C', 'B', 'D'); - expect(s1.zip(s2).toArray()).toEqual([ - ['A', 'C'], - ['B', 'B'], - ['C', 'D'], - ]); - expect(s1.zipWith((c1, c2) => c1 + c2, s2).toArray()).toEqual([ - 'AC', - 'BB', - 'CD', - ]); - }); - - /** - * @see https://github.com/immutable-js/immutable-js/issues/1716 - */ - it('handles `subtract` when Set contains >=32 elements', () => { - const fillArray = (nb) => - Array(nb) - .fill(1) - .map((el, i) => i + 1); - - const capacity = 32; - // items from keys 0 to 31 and values 1 to 32 - const defaultItems = fillArray(capacity); - - const allItems = OrderedSet(defaultItems); - - const partialCapacity = Math.ceil(capacity / 2) + 1; - const someOfThem = fillArray(partialCapacity); - expect(someOfThem.length).toBe(17); - - const existingItems = OrderedSet(someOfThem).intersect(allItems); - - expect(allItems.subtract(existingItems).size).toBe(15); - expect(allItems.subtract(existingItems).size + someOfThem.length).toBe(32); - }); - - /** - * @see https://github.com/immutable-js/immutable-js/issues/1603 - */ - it('handles consecutive `subtract` invocations', () => { - let a = OrderedSet(); - let b = OrderedSet(); - let c; - let d; - // Set a to 0-45 - for (let i = 0; i < 46; i++) { - a = a.add(i); - } - // Set b to 0-24 - for (let i = 0; i < 25; i++) { - b = b.add(i); - } - // Set c to 0-23 - // eslint-disable-next-line prefer-const - c = b.butLast(); - - // Set d to 0-22 - // eslint-disable-next-line prefer-const - d = c.butLast(); - - // Internal list resizing happens on the final `subtract` when subtracting d from a - const aNotB = a.subtract(b); - const aNotC = a.subtract(c); - const aNotD = a.subtract(d); - - expect(aNotB.size).toBe(21); - expect(aNotC.size).toBe(22); - expect(aNotD.size).toBe(23); - }); - - it('keeps the Set ordered when updating a value with .map()', () => { - const first = Map({ id: 1, valid: true }); - const second = Map({ id: 2, valid: true }); - const third = Map({ id: 3, valid: true }); - const initial = OrderedSet([first, second, third]); - - const out = initial.map((t) => { - if (t.get('id') === 2) { - return t.set('valid', false); - } - return t; - }); - - const expected = OrderedSet([ - Map({ id: 1, valid: true }), - Map({ id: 2, valid: false }), - Map({ id: 3, valid: true }), - ]); - - expect(out).toEqual(expected); - - expect(out.has(first)).toBe(true); - expect(out.has(second)).toBe(false); - expect(out.has(third)).toBe(true); - }); - - it('hashCode should return the same value if the values are the same', () => { - const set1 = OrderedSet(['hello']); - const set2 = OrderedSet(['goodbye', 'hello']).remove('goodbye'); - - expect(set1.hashCode()).toBe(set2.hashCode()); - }); -}); diff --git a/__tests__/Predicates.ts b/__tests__/Predicates.ts deleted file mode 100644 index 0ab282205b..0000000000 --- a/__tests__/Predicates.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { - is, - isImmutable, - isValueObject, - List, - Map, - Set, - Stack, -} from 'immutable'; - -describe('isImmutable', () => { - it('behaves as advertised', () => { - expect(isImmutable([])).toBe(false); - expect(isImmutable({})).toBe(false); - expect(isImmutable(Map())).toBe(true); - expect(isImmutable(List())).toBe(true); - expect(isImmutable(Set())).toBe(true); - expect(isImmutable(Stack())).toBe(true); - expect(isImmutable(Map().asMutable())).toBe(true); - }); -}); - -describe('isValueObject', () => { - it('behaves as advertised', () => { - expect(isValueObject(null)).toBe(false); - expect(isValueObject(123)).toBe(false); - expect(isValueObject('abc')).toBe(false); - expect(isValueObject([])).toBe(false); - expect(isValueObject({})).toBe(false); - expect(isValueObject(Map())).toBe(true); - expect(isValueObject(List())).toBe(true); - expect(isValueObject(Set())).toBe(true); - expect(isValueObject(Stack())).toBe(true); - expect(isValueObject(Map().asMutable())).toBe(true); - }); - - it('works on custom types', () => { - class MyValueType { - v: number; - - constructor(val: number) { - this.v = val; - } - - equals(other) { - return Boolean(other && this.v === other.v); - } - - hashCode() { - return this.v; - } - } - - expect(isValueObject(new MyValueType(123))).toBe(true); - expect(is(new MyValueType(123), new MyValueType(123))).toBe(true); - expect(Set().add(new MyValueType(123)).add(new MyValueType(123)).size).toBe( - 1 - ); - }); -}); diff --git a/__tests__/Range.ts b/__tests__/Range.ts deleted file mode 100644 index 94c096d1a8..0000000000 --- a/__tests__/Range.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Range } from 'immutable'; -import fc from 'fast-check'; - -describe('Range', () => { - it('fixed range', () => { - const v = Range(0, 3); - expect(v.size).toBe(3); - expect(v.first()).toBe(0); - expect(v.rest().toArray()).toEqual([1, 2]); - expect(v.last()).toBe(2); - expect(v.butLast().toArray()).toEqual([0, 1]); - expect(v.toArray()).toEqual([0, 1, 2]); - }); - - it('stepped range', () => { - const v = Range(1, 10, 3); - expect(v.size).toBe(3); - expect(v.first()).toBe(1); - expect(v.rest().toArray()).toEqual([4, 7]); - expect(v.last()).toBe(7); - expect(v.butLast().toArray()).toEqual([1, 4]); - expect(v.toArray()).toEqual([1, 4, 7]); - }); - - it('range should contain start and end values', () => { - // @ts-expect-error -- test that runtime error is thrown - expect(() => Range()).toThrow( - 'You must define a start value when using Range' - ); - // @ts-expect-error -- test that runtime error is thrown - expect(() => Range(1)).toThrow( - 'You must define an end value when using Range' - ); - }); - - it('open range', () => { - const v = Range(10, Infinity); - expect(v.size).toBe(Infinity); - expect(v.first()).toBe(10); - expect(v.rest().first()).toBe(11); - expect(v.last()).toBe(Infinity); - expect(v.butLast().first()).toBe(10); - expect(v.butLast().last()).toBe(Infinity); - expect(() => v.rest().toArray()).toThrow( - 'Cannot perform this action with an infinite size.' - ); - expect(() => v.butLast().toArray()).toThrow( - 'Cannot perform this action with an infinite size.' - ); - expect(() => v.toArray()).toThrow( - 'Cannot perform this action with an infinite size.' - ); - }); - - it('backwards range', () => { - const v = Range(10, 1, 3); - expect(v.size).toBe(3); - expect(v.first()).toBe(10); - expect(v.last()).toBe(4); - expect(v.toArray()).toEqual([10, 7, 4]); - }); - - it('empty range', () => { - const v = Range(10, 10); - expect(v.size).toBe(0); - expect(v.first()).toBe(undefined); - expect(v.rest().toArray()).toEqual([]); - expect(v.last()).toBe(undefined); - expect(v.butLast().toArray()).toEqual([]); - expect(v.toArray()).toEqual([]); - }); - - const shrinkInt = fc.integer({ min: -1000, max: 1000 }); - - it('includes first, excludes last', () => { - fc.assert( - fc.property(shrinkInt, shrinkInt, (from, to) => { - const isIncreasing = to >= from; - const size = isIncreasing ? to - from : from - to; - const r = Range(from, to); - const a = r.toArray(); - expect(r.size).toBe(size); - expect(a.length).toBe(size); - expect(r.get(0)).toBe(size ? from : undefined); - expect(a[0]).toBe(size ? from : undefined); - const last = to + (isIncreasing ? -1 : 1); - expect(r.last()).toBe(size ? last : undefined); - if (size) { - // eslint-disable-next-line jest/no-conditional-expect - expect(a[a.length - 1]).toBe(last); - } - }) - ); - }); - - it('slices the same as array slices', () => { - fc.assert( - fc.property( - shrinkInt, - shrinkInt, - shrinkInt, - shrinkInt, - (from, to, begin, end) => { - const r = Range(from, to); - const a = r.toArray(); - expect(r.slice(begin, end).toArray()).toEqual(a.slice(begin, end)); - } - ) - ); - }); - - it('slices range', () => { - const v = Range(1, 11, 2); - const s = v.slice(1, -2); - expect(s.size).toBe(2); - expect(s.toArray()).toEqual([3, 5]); - }); - - it('empty slice of range', () => { - const v = Range(1, 11, 2); - const s = v.slice(100, 200); - expect(s.size).toBe(0); - expect(s.toArray()).toEqual([]); - }); - - it('slices empty range', () => { - const v = Range(10, 10); - const s = v.slice(1, -2); - expect(s.size).toBe(0); - expect(s.toArray()).toEqual([]); - }); - - it('stepped range does not land on end', () => { - const v = Range(0, 7, 2); - expect(v.size).toBe(4); - expect(v.toArray()).toEqual([0, 2, 4, 6]); - }); - - it('can be float', () => { - const v = Range(0.5, 2.5, 0.5); - expect(v.size).toBe(4); - expect(v.toArray()).toEqual([0.5, 1, 1.5, 2]); - }); - - it('can be negative', () => { - const v = Range(10, -10, 5); - expect(v.size).toBe(4); - expect(v.toArray()).toEqual([10, 5, 0, -5]); - }); - - it('can get from any index in O(1)', () => { - const v = Range(0, Infinity, 8); - expect(v.get(111)).toBe(888); - }); - - it('can find an index in O(1)', () => { - const v = Range(0, Infinity, 8); - expect(v.indexOf(888)).toBe(111); - }); - - it('maps values', () => { - const r = Range(0, 4).map((v) => v * v); - expect(r.toArray()).toEqual([0, 1, 4, 9]); - }); - - it('filters values', () => { - const r = Range(0, 10).filter((v) => v % 2 === 0); - expect(r.toArray()).toEqual([0, 2, 4, 6, 8]); - }); - - it('partitions values', () => { - const r = Range(0, 10) - .partition((v) => v % 2 === 0) - .map((part) => part.toArray()); - expect(r).toEqual([ - [1, 3, 5, 7, 9], - [0, 2, 4, 6, 8], - ]); - }); - - it('reduces values', () => { - const v = Range(0, 10, 2); - const r = v.reduce((a, b) => a + b, 0); - expect(r).toEqual(20); - }); - - it('takes and skips values', () => { - const v = Range(0, 100, 3); - const r = v.skip(2).take(2); - expect(r.toArray()).toEqual([6, 9]); - }); - - it('can describe lazy operations', () => { - expect( - Range(1, Infinity) - .map((n) => -n) - .take(5) - .toArray() - ).toEqual([-1, -2, -3, -4, -5]); - }); - - it('efficiently chains array methods', () => { - const v = Range(1, Infinity); - const r = v - .filter((x) => x % 2 === 0) - .skip(2) - .map((x) => x * x) - .take(3) - .reduce((a, b) => a + b, 0); - - expect(r).toEqual(200); - }); - - it('sliced sequence works even on filtered sequence', () => { - expect(Range(0, 3).slice(-2).toArray()).toEqual([1, 2]); - - expect( - Range(0, 3) - .filter(() => true) - .slice(-2) - .toArray() - ).toEqual([1, 2]); - }); - - it('toString', () => { - expect(Range(0, 0).toString()).toBe('Range []'); - expect(Range(0, 3).toString()).toBe('Range [ 0...3 ]'); - expect(Range(0, 10, 2).toString()).toBe('Range [ 0...10 by 2 ]'); - expect(Range(10, 0, -2).toString()).toBe('Range [ 10...0 by -2 ]'); - }); -}); diff --git a/__tests__/Record.ts b/__tests__/Record.ts deleted file mode 100644 index 3839b6c46b..0000000000 --- a/__tests__/Record.ts +++ /dev/null @@ -1,319 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { isKeyed, List, Map, Record, Seq } from 'immutable'; - -describe('Record', () => { - it('defines a constructor', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - - const t1 = MyType(); - const t2 = t1.set('a', 10); - - expect(t1 instanceof Record).toBe(true); - expect(t1 instanceof MyType).toBe(true); - - expect(t2 instanceof Record).toBe(true); - expect(t2 instanceof MyType).toBe(true); - - expect(t1.get('a')).toBe(1); - expect(t2.get('a')).toBe(10); - }); - - it('allows for a descriptive name', () => { - const Person = Record({ name: null as string | null }, 'Person'); - - const me = Person({ name: 'My Name' }); - expect(me.toString()).toEqual('Person { name: "My Name" }'); - expect(Record.getDescriptiveName(me)).toEqual('Person'); - expect(Person.displayName).toBe('Person'); - }); - - it('passes through records of the same type', () => { - const P2 = Record({ x: 0, y: 0 }); - const P3 = Record({ x: 0, y: 0, z: 0 }); - const p2 = P2(); - const p3 = P3(); - expect(P3(p2) instanceof P3).toBe(true); - expect(P2(p3) instanceof P2).toBe(true); - expect(P2(p2)).toBe(p2); - expect(P3(p3)).toBe(p3); - }); - - it('setting an unknown key is a no-op', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - - const t1 = MyType({ a: 10, b: 20 }); - // @ts-expect-error -- try to force an unknown value - const t2 = t1.set('d', 4); - - expect(t2).toBe(t1); - }); - - it('falls back to default values when deleted or cleared', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - const t1 = MyType({ a: 10, b: 20 }); - const t2 = MyType({ b: 20 }); - const t3 = t1.delete('a'); - const t4 = t3.clear(); - - expect(t1.get('a')).toBe(10); - expect(t2.get('a')).toBe(1); - expect(t3.get('a')).toBe(1); - expect(t4.get('b')).toBe(2); - - expect(t2.equals(t3)).toBe(true); - expect(t2.equals(t4)).toBe(false); - expect(t4.equals(MyType())).toBe(true); - }); - - it('allows deletion of values deep within a tree', () => { - const AType = Record({ a: 1 }); - const BType = Record({ b: AType({ a: 2 }) }); - const t1 = BType(); - const t2 = t1.deleteIn(['b', 'a']); - - expect(t1.get('b').get('a')).toBe(2); - expect(t2.get('b').get('a')).toBe(1); - }); - - it('is a value type and equals other similar Records', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - const t1 = MyType({ a: 10 }); - const t2 = MyType({ a: 10, b: 2 }); - expect(t1.equals(t2)).toBe(true); - }); - - it('if compared against undefined or null should return false', () => { - const MyType = Record({ a: 1, b: 2 }); - const t1 = MyType(); - expect(t1.equals(undefined)).toBeFalsy(); - expect(t1.equals(null)).toBeFalsy(); - }); - - it('if compared against Map should return false', () => { - const MyType = Record({ a: 1, b: 2 }); - const t1 = MyType(); - expect(t1.equals(Map({ a: 1, b: 2 }))).toBeFalsy(); - }); - - it('merges in Objects and other Records', () => { - const Point2 = Record({ x: 0, y: 0 }); - const Point3 = Record({ x: 0, y: 0, z: 0 }); - - const p2 = Point2({ x: 20, y: 20 }); - const p3 = Point3({ x: 10, y: 10, z: 10 }); - - expect(p3.merge(p2).toObject()).toEqual({ x: 20, y: 20, z: 10 }); - - expect(p2.merge({ y: 30 }).toObject()).toEqual({ x: 20, y: 30 }); - expect(p3.merge({ y: 30, z: 30 }).toObject()).toEqual({ - x: 10, - y: 30, - z: 30, - }); - }); - - it('converts sequences to records', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - const seq = Seq({ a: 10, b: 20 }); - const t = MyType(seq); - expect(t.toObject()).toEqual({ a: 10, b: 20, c: 3 }); - }); - - it('allows for functional construction', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - const seq = Seq({ a: 10, b: 20 }); - const t = MyType(seq); - expect(t.toObject()).toEqual({ a: 10, b: 20, c: 3 }); - }); - - it('skips unknown keys', () => { - const MyType = Record({ a: 1, b: 2 }); - const seq = Seq({ b: 20, c: 30 }); - const t = MyType(seq); - - expect(t.get('a')).toEqual(1); - expect(t.get('b')).toEqual(20); - // @ts-expect-error -- unknown key should not return anything - expect(t.get('c')).toBeUndefined(); - }); - - it('returns itself when setting identical values', () => { - const MyType = Record({ a: 1, b: 2 }); - const t1 = MyType(); - const t2 = MyType({ a: 1 }); - const t3 = t1.set('a', 1); - const t4 = t2.set('a', 1); - expect(t3).toBe(t1); - expect(t4).toBe(t2); - }); - - it('returns record when setting values', () => { - const MyType = Record({ a: 1, b: 2 }); - const t1 = MyType(); - const t2 = MyType({ a: 1 }); - const t3 = t1.set('a', 3); - const t4 = t2.set('a', 3); - expect(t3).not.toBe(t1); - expect(t4).not.toBe(t2); - }); - - it('allows for readonly property access', () => { - const MyType = Record({ a: 1, b: 'foo' }); - const t1 = MyType(); - const a: number = t1.a; - const b: string = t1.b; - expect(a).toEqual(1); - expect(b).toEqual('foo'); - // @ts-expect-error -- test that runtime does throw - expect(() => (t1.a = 2)).toThrow('Cannot set on an immutable record.'); - }); - - it('allows for class extension', () => { - class ABClass extends Record({ a: 1, b: 2 }) { - setA(aVal: number) { - return this.set('a', aVal); - } - - setB(bVal: number) { - return this.set('b', bVal); - } - } - - // Note: `new` is only used because of `class` - const t1 = new ABClass({ a: 1 }); - const t2 = t1.setA(3); - const t3 = t2.setB(10); - - const a: number = t3.a; - expect(a).toEqual(3); - expect(t3.toObject()).toEqual({ a: 3, b: 10 }); - }); - - it('does not allow overwriting property names', () => { - const realWarn = console.warn; - - try { - const warnings: Array = []; - - console.warn = (w) => warnings.push(w); - - // size is a safe key to use - const MyType1 = Record({ size: 123 }); - const t1 = MyType1(); - expect(warnings.length).toBe(0); - expect(t1.size).toBe(123); - - // get() is not safe to use - const MyType2 = Record({ get: 0 }); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const t2 = MyType2(); - expect(warnings.length).toBe(1); - expect(warnings[0]).toBe( - 'Cannot define Record with property "get" since that property name is part of the Record API.' - ); - } finally { - console.warn = realWarn; - } - }); - - it('can be converted to a keyed sequence', () => { - const MyType = Record({ a: 0, b: 0 }); - const t1 = MyType({ a: 10, b: 20 }); - - const seq1 = t1.toSeq(); - expect(isKeyed(seq1)).toBe(true); - expect(seq1.toJS()).toEqual({ a: 10, b: 20 }); - - const seq2 = Seq(t1); - expect(isKeyed(seq2)).toBe(true); - expect(seq2.toJS()).toEqual({ a: 10, b: 20 }); - - const seq3 = Seq.Keyed(t1); - expect(isKeyed(seq3)).toBe(true); - expect(seq3.toJS()).toEqual({ a: 10, b: 20 }); - - const seq4 = Seq.Indexed(t1); - expect(isKeyed(seq4)).toBe(false); - expect(seq4.toJS()).toEqual([ - ['a', 10], - ['b', 20], - ]); - }); - - it('can be iterated over', () => { - const MyType = Record({ a: 0, b: 0 }); - const t1 = MyType({ a: 10, b: 20 }); - - const entries: Array<[string, number]> = []; - for (const entry of t1) { - entries.push(entry); - } - - expect(entries).toEqual([ - ['a', 10], - ['b', 20], - ]); - }); - - it('calling `equals` between two instance of factories with same properties and same value should return true', () => { - const factoryA = Record({ id: '' }); - const factoryB = Record({ id: '' }); - - expect(factoryA().equals(factoryA())).toBe(true); - expect(factoryA().equals(factoryB())).toBe(true); - }); - - /** - * @see https://github.com/immutable-js/immutable-js/issues/1565 - */ - it('check that reset does reset the record.', () => { - type UserType = { - name: string; - roles: List | Array; - }; - - const User = Record({ - name: 'default name', - roles: List(), - }); - - const user0 = new User({ - name: 'John', - roles: ['superuser', 'admin'], - }); - const user1 = user0.clear(); - - expect(user1.name).toBe('default name'); - expect(user1.roles).toEqual(List()); - - const user2 = user0.withMutations((mutable: Record) => { - mutable.clear(); - }); - - expect(user2.name).toBe('default name'); - expect(user2.roles).toEqual(List()); - }); - - it('does not accept a Record as constructor', () => { - const Foo = Record({ foo: 'bar' }); - const fooInstance = Foo(); - expect(() => { - Record(fooInstance); - }).toThrowErrorMatchingSnapshot(); - }); - - it('does not accept a non object as constructor', () => { - const defaultValues = null; - expect(() => { - // @ts-expect-error -- test that runtime does throw - Record(defaultValues); - }).toThrowErrorMatchingSnapshot(); - }); - - it('does not accept an immutable object that is not a Record as constructor', () => { - const defaultValues = Map({ foo: 'bar' }); - expect(() => { - Record(defaultValues); - }).toThrowErrorMatchingSnapshot(); - }); -}); diff --git a/__tests__/RecordJS.js b/__tests__/RecordJS.js deleted file mode 100644 index 3ae53fb878..0000000000 --- a/__tests__/RecordJS.js +++ /dev/null @@ -1,74 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Record } from 'immutable'; - -describe('Record', () => { - it('defines a record factory', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - - const t = MyType(); - const t2 = t.set('a', 10); - - expect(t.a).toBe(1); - expect(t2.a).toBe(10); - }); - - it('can have mutations apply', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - - const t = MyType(); - - expect(() => { - t.a = 10; - }).toThrow(); - - const t2 = t.withMutations((mt) => { - mt.a = 10; - mt.b = 20; - mt.c = 30; - }); - - expect(t.a).toBe(1); - expect(t2.a).toBe(10); - }); - - it('can be subclassed', () => { - class Alphabet extends Record({ a: 1, b: 2, c: 3 }) { - soup() { - return this.a + this.b + this.c; - } - } - - // Note: `new` is only used because of `class` - const t = new Alphabet(); - const t2 = t.set('b', 200); - - expect(t instanceof Record).toBe(true); - expect(t instanceof Alphabet).toBe(true); - expect(t.soup()).toBe(6); - expect(t2.soup()).toBe(204); - - // Uses class name as descriptive name - expect(Record.getDescriptiveName(t)).toBe('Alphabet'); - - // Uses display name over class name - class NotADisplayName extends Record({ x: 1 }, 'DisplayName') {} - const t3 = new NotADisplayName(); - expect(Record.getDescriptiveName(t3)).toBe('DisplayName'); - }); - - it('can be cleared', () => { - const MyType = Record({ a: 1, b: 2, c: 3 }); - let t = MyType({ c: 'cats' }); - - expect(t.c).toBe('cats'); - t = t.clear(); - expect(t.c).toBe(3); - - const MyType2 = Record({ d: 4, e: 5, f: 6 }); - let t2 = MyType2({ d: 'dogs' }); - - expect(t2.d).toBe('dogs'); - t2 = t2.clear(); - expect(t2.d).toBe(4); - }); -}); diff --git a/__tests__/Repeat.ts b/__tests__/Repeat.ts deleted file mode 100644 index 1553232ba5..0000000000 --- a/__tests__/Repeat.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Repeat } from 'immutable'; - -describe('Repeat', () => { - it('fixed repeat', () => { - const v = Repeat('wtf', 3); - expect(v.size).toBe(3); - expect(v.first()).toBe('wtf'); - expect(v.rest().toArray()).toEqual(['wtf', 'wtf']); - expect(v.last()).toBe('wtf'); - expect(v.butLast().toArray()).toEqual(['wtf', 'wtf']); - expect(v.toArray()).toEqual(['wtf', 'wtf', 'wtf']); - expect(v.join()).toEqual('wtf,wtf,wtf'); - }); - - it('does not claim to be equal to undefined', () => { - expect(Repeat(1).equals(undefined)).toEqual(false); - }); -}); diff --git a/__tests__/Seq.ts b/__tests__/Seq.ts deleted file mode 100644 index cbb048eb8b..0000000000 --- a/__tests__/Seq.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { isCollection, isIndexed, isKeyed, Seq } from 'immutable'; - -describe('Seq', () => { - it('returns undefined if empty and first is called without default argument', () => { - expect(Seq().first()).toBeUndefined(); - }); - - it('returns undefined if empty and last is called without default argument', () => { - expect(Seq().last()).toBeUndefined(); - }); - - it('returns default value if empty and first is called with default argument', () => { - expect(Seq().first({})).toEqual({}); - }); - - it('returns default value if empty and last is called with default argument', () => { - expect(Seq().last({})).toEqual({}); - }); - - it('can be empty', () => { - expect(Seq().size).toBe(0); - }); - - it('accepts an array', () => { - expect(Seq([1, 2, 3]).size).toBe(3); - }); - - it('accepts an object', () => { - expect(Seq({ a: 1, b: 2, c: 3 }).size).toBe(3); - }); - - it('accepts an object with a next property', () => { - expect(Seq({ a: 1, b: 2, next: (_) => _ }).size).toBe(3); - }); - - it('accepts a collection string', () => { - expect(Seq('foo').size).toBe(3); - }); - - it('accepts arbitrary objects', () => { - function Foo() { - this.bar = 'bar'; - this.baz = 'baz'; - } - expect(Seq(new Foo()).size).toBe(2); - }); - - it('accepts another sequence', () => { - const seq = Seq([1, 2, 3]); - expect(Seq(seq).size).toBe(3); - }); - - it('accepts a string', () => { - const seq = Seq('abc'); - expect(seq.size).toBe(3); - expect(seq.get(1)).toBe('b'); - expect(seq.join('')).toBe('abc'); - }); - - it('accepts an array-like', () => { - const seq = Seq({ length: 2, 0: 'a', 1: 'b' }); - expect(isIndexed(seq)).toBe(true); - expect(seq.size).toBe(2); - expect(seq.get(1)).toBe('b'); - - const map = Seq({ length: 1, foo: 'bar' }); - expect(isIndexed(map)).toBe(false); - expect(map.size).toBe(2); - expect(map.get('foo')).toBe('bar'); - - const empty = Seq({ length: 0 }); - expect(isIndexed(empty)).toBe(true); - expect(empty.size).toEqual(0); - }); - - it('accepts a JS (global) Map', () => { - const seq = Seq( - new global.Map([ - ['a', 'A'], - ['b', 'B'], - ['c', 'C'], - ]) - ); - expect(isKeyed(seq)).toBe(true); - expect(seq.size).toBe(3); - }); - - it('accepts a JS (global) Set', () => { - const seq = Seq(new global.Set(['a', 'b', 'c'])); - expect(isIndexed(seq)).toBe(false); - expect(isKeyed(seq)).toBe(false); - expect(seq.size).toBe(3); - }); - - it('does not accept a scalar', () => { - expect(() => { - // @ts-expect-error -- test that runtime does throw - Seq(3); - }).toThrow( - 'Expected Array or collection object of values, or keyed object: 3' - ); - }); - - it('detects sequences', () => { - const seq = Seq([1, 2, 3]); - expect(Seq.isSeq(seq)).toBe(true); - expect(isCollection(seq)).toBe(true); - }); - - it('Does not infinite loop when sliced with NaN', () => { - const list = Seq([1, 2, 3, 4, 5]); - expect(list.slice(0, NaN).toJS()).toEqual([]); - expect(list.slice(NaN).toJS()).toEqual([1, 2, 3, 4, 5]); - }); - - it('Does not infinite loop when spliced with negative number #559', () => { - const dog = Seq(['d', 'o', 'g']); - const dg = dog.filter((c) => c !== 'o'); - const dig = dg.splice(-1, 0, 'i'); - expect(dig.toJS()).toEqual(['d', 'i', 'g']); - }); - - it('Does not infinite loop when an undefined number is passed to take', () => { - const list = Seq([1, 2, 3, 4, 5]); - expect(list.take(NaN).toJS()).toEqual([]); - }); - - it('Converts deeply toJS after converting to entries', () => { - const list = Seq([Seq([1, 2]), Seq({ a: 'z' })]); - expect(list.entrySeq().toJS()).toEqual([ - [0, [1, 2]], - [1, { a: 'z' }], - ]); - - const map = Seq({ x: Seq([1, 2]), y: Seq({ a: 'z' }) }); - expect(map.entrySeq().toJS()).toEqual([ - ['x', [1, 2]], - ['y', { a: 'z' }], - ]); - }); -}); diff --git a/__tests__/Set.ts b/__tests__/Set.ts deleted file mode 100644 index 5e8f1fe5d7..0000000000 --- a/__tests__/Set.ts +++ /dev/null @@ -1,377 +0,0 @@ -import { describe, expect, it, jest } from '@jest/globals'; -import { fromJS, is, List, Map, OrderedSet, Seq, Set } from 'immutable'; - -describe('Set', () => { - it('accepts array of values', () => { - const s = Set([1, 2, 3]); - expect(s.has(1)).toBe(true); - expect(s.has(2)).toBe(true); - expect(s.has(3)).toBe(true); - expect(s.has(4)).toBe(false); - }); - - it('accepts array-like of values', () => { - const s = Set({ length: 3, 2: 3 }); - expect(s.size).toBe(2); - expect(s.has(undefined)).toBe(true); - expect(s.has(3)).toBe(true); - expect(s.has(2)).toBe(false); - }); - - it('accepts a JS (global) Set', () => { - const s = Set(new global.Set([1, 2, 3])); - expect(Set.isSet(s)).toBe(true); - expect(s.size).toBe(3); - expect(s.has(1)).toBe(true); - expect(s.has(2)).toBe(true); - expect(s.has(3)).toBe(true); - expect(s.has(4)).toBe(false); - }); - - it('accepts string, an array-like collection', () => { - const s = Set('abc'); - expect(s.size).toBe(3); - expect(s.has('a')).toBe(true); - expect(s.has('b')).toBe(true); - expect(s.has('c')).toBe(true); - expect(s.has('abc')).toBe(false); - }); - - it('accepts sequence of values', () => { - const seq = Seq([1, 2, 3]); - const s = Set(seq); - expect(s.has(1)).toBe(true); - expect(s.has(2)).toBe(true); - expect(s.has(3)).toBe(true); - expect(s.has(4)).toBe(false); - }); - - it('accepts a keyed Seq as a set of entries', () => { - const seq = Seq({ a: null, b: null, c: null }).flip(); - const s = Set(seq); - expect(s.toArray()).toEqual([ - [null, 'a'], - [null, 'b'], - [null, 'c'], - ]); - // Explicitly getting the values sequence - const s2 = Set(seq.valueSeq()); - expect(s2.toArray()).toEqual(['a', 'b', 'c']); - // toSet() does this for you. - const v3 = seq.toSet(); - expect(v3.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts object keys', () => { - const s = Set.fromKeys({ a: null, b: null, c: null }); - expect(s.has('a')).toBe(true); - expect(s.has('b')).toBe(true); - expect(s.has('c')).toBe(true); - expect(s.has('d')).toBe(false); - }); - - it('accepts sequence keys', () => { - const seq = Seq({ a: null, b: null, c: null }); - const s = Set.fromKeys(seq); - expect(s.has('a')).toBe(true); - expect(s.has('b')).toBe(true); - expect(s.has('c')).toBe(true); - expect(s.has('d')).toBe(false); - }); - - it('accepts explicit values', () => { - const s = Set([1, 2, 3]); - expect(s.has(1)).toBe(true); - expect(s.has(2)).toBe(true); - expect(s.has(3)).toBe(true); - expect(s.has(4)).toBe(false); - }); - - it('converts back to JS array', () => { - const s = Set([1, 2, 3]); - expect(s.toArray()).toEqual([1, 2, 3]); - }); - - it('converts back to JS object', () => { - const s = Set.of('a', 'b', 'c'); - expect(s.toObject()).toEqual({ a: 'a', b: 'b', c: 'c' }); - }); - - it('maps no-ops return the same reference', () => { - const s = Set([1, 2, 3]); - const r = s.map((value) => value); - expect(r).toBe(s); - }); - - it('maps should produce new set if values changed', () => { - const s = Set([1, 2, 3]); - expect(s.has(4)).toBe(false); - expect(s.size).toBe(3); - - const m = s.map((v) => v + 1); - expect(m.has(1)).toBe(false); - expect(m.has(2)).toBe(true); - expect(m.has(3)).toBe(true); - expect(m.has(4)).toBe(true); - expect(m.size).toBe(3); - }); - - it('unions an unknown collection of Sets', () => { - const abc = Set(['a', 'b', 'c']); - const cat = Set(['c', 'a', 't']); - expect(Set.union([abc, cat]).toArray()).toEqual(['c', 'a', 't', 'b']); - expect(Set.union([abc])).toBe(abc); - expect(Set.union([])).toBe(Set()); - }); - - it('intersects an unknown collection of Sets', () => { - const abc = Set(['a', 'b', 'c']); - const cat = Set(['c', 'a', 't']); - expect(Set.intersect([abc, cat]).toArray()).toEqual(['c', 'a']); - expect(Set.intersect([abc])).toBe(abc); - expect(Set.intersect([])).toBe(Set()); - }); - - it('concatenates strings using union', () => { - const s = Set(['one', 'two']); - expect(s.union('three').toArray()).toEqual(['one', 'two', 'three']); - }); - - it('iterates values', () => { - const s = Set([1, 2, 3]); - const iterator = jest.fn(); - s.forEach(iterator); - expect(iterator.mock.calls).toEqual([ - [1, 1, s], - [2, 2, s], - [3, 3, s], - ]); - }); - - it('has the same iterator function for keys and values', () => { - const s = Set([1, 2, 3]); - expect(s[Symbol.iterator]).toBe(s.keys); - expect(s[Symbol.iterator]).toBe(s.values); - }); - - it('unions two sets', () => { - const s1 = Set.of('a', 'b', 'c'); - const s2 = Set.of('d', 'b', 'wow'); - const s3 = s1.union(s2); - expect(s3.toArray()).toEqual(['a', 'b', 'c', 'd', 'wow']); - }); - - it('returns self when union results in no-op', () => { - const s1 = Set.of('a', 'b', 'c'); - const s2 = Set.of('c', 'a'); - const s3 = s1.union(s2); - expect(s3).toBe(s1); - }); - - it('returns arg when union results in no-op', () => { - const s1 = Set(); - const s2 = Set.of('a', 'b', 'c'); - const s3 = s1.union(s2); - expect(s3).toBe(s2); - }); - - it('unions a set and another collection and returns a set', () => { - const s1 = Set([1, 2, 3]); - const emptySet = Set(); - const l = List([1, 2, 3]); - const s2 = s1.union(l); - const s3 = emptySet.union(l); - const o = OrderedSet([1, 2, 3]); - const s4 = s1.union(o); - const s5 = emptySet.union(o); - expect(Set.isSet(s2)).toBe(true); - expect(Set.isSet(s3)).toBe(true); - expect(Set.isSet(s4) && !OrderedSet.isOrderedSet(s4)).toBe(true); - expect(Set.isSet(s5) && !OrderedSet.isOrderedSet(s5)).toBe(true); - }); - - it('is persistent to adds', () => { - const s1 = Set(); - const s2 = s1.add('a'); - const s3 = s2.add('b'); - const s4 = s3.add('c'); - const s5 = s4.add('b'); - expect(s1.size).toBe(0); - expect(s2.size).toBe(1); - expect(s3.size).toBe(2); - expect(s4.size).toBe(3); - expect(s5.size).toBe(3); - }); - - it('is persistent to deletes', () => { - const s1 = Set(); - const s2 = s1.add('a'); - const s3 = s2.add('b'); - const s4 = s3.add('c'); - const s5 = s4.remove('b'); - expect(s1.size).toBe(0); - expect(s2.size).toBe(1); - expect(s3.size).toBe(2); - expect(s4.size).toBe(3); - expect(s5.size).toBe(2); - expect(s3.has('b')).toBe(true); - expect(s5.has('b')).toBe(false); - }); - - it('deletes down to empty set', () => { - const s = Set.of('A').remove('A'); - expect(s).toBe(Set()); - }); - - it('unions multiple sets', () => { - const s = Set.of('A', 'B', 'C').union( - Set.of('C', 'D', 'E'), - Set.of('D', 'B', 'F') - ); - expect(s).toEqual(Set.of('A', 'B', 'C', 'D', 'E', 'F')); - }); - - it('intersects multiple sets', () => { - const s = Set.of('A', 'B', 'C').intersect( - Set.of('B', 'C', 'D'), - Set.of('A', 'C', 'E') - ); - expect(s).toEqual(Set.of('C')); - }); - - it('diffs multiple sets', () => { - const s = Set.of('A', 'B', 'C').subtract( - Set.of('C', 'D', 'E'), - Set.of('D', 'B', 'F') - ); - expect(s).toEqual(Set.of('A')); - }); - - it('expresses value equality with set sequences', () => { - const s1 = Set.of('A', 'B', 'C'); - expect(s1.equals(null)).toBe(false); - - const s2 = Set.of('C', 'B', 'A'); - expect(s1 === s2).toBe(false); - expect(is(s1, s2)).toBe(true); - expect(s1.equals(s2)).toBe(true); - - // Map and Set are not the same (keyed vs unkeyed) - const v1 = Map({ A: 'A', C: 'C', B: 'B' }); - expect(is(s1, v1)).toBe(false); - }); - - it('can use union in a withMutation', () => { - const js = Set() - .withMutations((set) => { - set.union(['a']); - set.add('b'); - }) - .toJS(); - expect(js).toEqual(['a', 'b']); - }); - - it('can determine if an array is a subset', () => { - const s = Set.of('A', 'B', 'C'); - expect(s.isSuperset(['B', 'C'])).toBe(true); - expect(s.isSuperset(['B', 'C', 'D'])).toBe(false); - }); - - describe('accepts Symbol as entry #579', () => { - it('operates on small number of symbols, preserving set uniqueness', () => { - const a = Symbol(); - - const b = Symbol(); - - const c = Symbol(); - - const symbolSet = Set([a, b, c, a, b, c, a, b, c, a, b, c]); - expect(symbolSet.size).toBe(3); - expect(symbolSet.has(b)).toBe(true); - expect(symbolSet.get(c)).toEqual(c); - }); - - it('operates on a large number of symbols, maintaining obj uniqueness', () => { - const manySymbols = [ - Symbol('a'), - Symbol('b'), - Symbol('c'), - Symbol('a'), - Symbol('b'), - Symbol('c'), - Symbol('a'), - Symbol('b'), - Symbol('c'), - Symbol('a'), - Symbol('b'), - Symbol('c'), - ]; - - const symbolSet = Set(manySymbols); - expect(symbolSet.size).toBe(12); - expect(symbolSet.has(manySymbols[10])).toBe(true); - expect(symbolSet.get(manySymbols[10])).toEqual(manySymbols[10]); - }); - }); - - it('can use intersect after add or union in a withMutation', () => { - const set = Set(['a', 'd']).withMutations((s) => { - s.add('b'); - s.union(['c']); - s.intersect(['b', 'c', 'd']); - }); - expect(set.toArray()).toEqual(['c', 'd', 'b']); - }); - - it('can count entries that satisfy a predicate', () => { - const set = Set([1, 2, 3, 4, 5]); - expect(set.size).toEqual(5); - expect(set.count()).toEqual(5); - expect(set.count((x) => x % 2 === 0)).toEqual(2); - expect(set.count(() => true)).toEqual(5); - }); - - describe('"size" should correctly reflect the number of elements in a Set', () => { - describe('deduplicating custom classes that invoke fromJS() as part of equality check', () => { - class Entity { - entityId: string; - - entityKey: string; - - constructor(entityId: string, entityKey: string) { - this.entityId = entityId; - this.entityKey = entityKey; - } - - asImmutable() { - return fromJS({ - entityId: this.entityId, - entityKey: this.entityKey, - }); - } - - valueOf() { - return this.asImmutable().toString(); - } - } - it('with mutations', () => { - const testSet = Set().withMutations((mutableSet) => { - mutableSet.add(new Entity('hello', 'world')); - mutableSet.add(new Entity('testing', 'immutable')); - mutableSet.add(new Entity('hello', 'world')); - }); - expect(testSet.size).toEqual(2); - }); - it('without mutations', () => { - const testSet0 = Set(); - const testSet1 = testSet0.add(new Entity('hello', 'world')); - const testSet2 = testSet1.add(new Entity('testing', 'immutable')); - const testSet3 = testSet2.add(new Entity('hello', 'world')); - expect(testSet0.size).toEqual(0); - expect(testSet1.size).toEqual(1); - expect(testSet2.size).toEqual(2); - expect(testSet3.size).toEqual(2); - }); - }); - }); -}); diff --git a/__tests__/Stack.ts b/__tests__/Stack.ts deleted file mode 100644 index f3fc3d9326..0000000000 --- a/__tests__/Stack.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Seq, Stack } from 'immutable'; -import fc from 'fast-check'; - -function arrayOfSize(s) { - const a = new Array(s); - for (let ii = 0; ii < s; ii++) { - a[ii] = ii; - } - return a; -} - -describe('Stack', () => { - it('constructor provides initial values', () => { - const s = Stack.of('a', 'b', 'c'); - expect(s.get(0)).toBe('a'); - expect(s.get(1)).toBe('b'); - expect(s.get(2)).toBe('c'); - }); - - it('toArray provides a JS array', () => { - const s = Stack.of('a', 'b', 'c'); - expect(s.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts a JS array', () => { - const s = Stack(['a', 'b', 'c']); - expect(s.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts a Seq', () => { - const seq = Seq(['a', 'b', 'c']); - const s = Stack(seq); - expect(s.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('accepts a keyed Seq', () => { - const seq = Seq({ a: null, b: null, c: null }).flip(); - const s = Stack(seq); - expect(s.toArray()).toEqual([ - [null, 'a'], - [null, 'b'], - [null, 'c'], - ]); - // Explicit values - const s2 = Stack(seq.valueSeq()); - expect(s2.toArray()).toEqual(['a', 'b', 'c']); - // toStack() does this for you. - const s3 = seq.toStack(); - expect(s3.toArray()).toEqual(['a', 'b', 'c']); - }); - - it('pushing creates a new instance', () => { - const s0 = Stack.of('a'); - const s1 = s0.push('A'); - expect(s0.get(0)).toBe('a'); - expect(s1.get(0)).toBe('A'); - }); - - it('get helpers make for easier to read code', () => { - const s = Stack.of('a', 'b', 'c'); - expect(s.first()).toBe('a'); - expect(s.last()).toBe('c'); - expect(s.peek()).toBe('a'); - }); - - it('slice helpers make for easier to read code', () => { - const s = Stack.of('a', 'b', 'c'); - expect(s.rest().toArray()).toEqual(['b', 'c']); - }); - - it('iterable in reverse order', () => { - const s = Stack.of('a', 'b', 'c'); - expect(s.size).toBe(3); - - const forEachResults: Array<[number, string, string | undefined]> = []; - s.forEach((val, i) => forEachResults.push([i, val, s.get(i)])); - expect(forEachResults).toEqual([ - [0, 'a', 'a'], - [1, 'b', 'b'], - [2, 'c', 'c'], - ]); - - // map will cause reverse iterate - expect(s.map((val) => val + val).toArray()).toEqual(['aa', 'bb', 'cc']); - - let iteratorResults: Array<[number, string]> = []; - let iterator = s.entries(); - let step: IteratorResult<[number, string]>; - while (!(step = iterator.next()).done) { - iteratorResults.push(step.value); - } - expect(iteratorResults).toEqual([ - [0, 'a'], - [1, 'b'], - [2, 'c'], - ]); - - iteratorResults = []; - iterator = s.toSeq().reverse().entries(); - while (!(step = iterator.next()).done) { - iteratorResults.push(step.value); - } - expect(iteratorResults).toEqual([ - [0, 'c'], - [1, 'b'], - [2, 'a'], - ]); - }); - - it('map is called in reverse order but with correct indices', () => { - const s = Stack(['a', 'b', 'c']); - const s2 = s.map((v, i, c) => v + i + c.get(i)); - expect(s2.toArray()).toEqual(['a0a', 'b1b', 'c2c']); - - const mappedSeq = s.toSeq().map((v, i, c) => v + i + c.get(i)); - const s3 = Stack(mappedSeq); - expect(s3.toArray()).toEqual(['a0a', 'b1b', 'c2c']); - }); - - it('push inserts at lowest index', () => { - const s0 = Stack.of('a', 'b', 'c'); - const s1 = s0.push('d', 'e', 'f'); - expect(s0.size).toBe(3); - expect(s1.size).toBe(6); - expect(s1.toArray()).toEqual(['d', 'e', 'f', 'a', 'b', 'c']); - }); - - it('pop removes the lowest index, decrementing size', () => { - const s = Stack.of('a', 'b', 'c').pop(); - expect(s.peek()).toBe('b'); - expect(s.toArray()).toEqual(['b', 'c']); - }); - - it('shift removes the lowest index, just like array', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const a = arrayOfSize(len); - let s = Stack(a); - - while (a.length) { - expect(s.size).toBe(a.length); - expect(s.toArray()).toEqual(a); - s = s.shift(); - a.shift(); - } - expect(s.size).toBe(a.length); - expect(s.toArray()).toEqual(a); - }) - ); - }); - - it('unshift adds the next lowest index, just like array', () => { - fc.assert( - fc.property(fc.nat(100), (len) => { - const a: Array = []; - let s = Stack(); - - for (let ii = 0; ii < len; ii++) { - expect(s.size).toBe(a.length); - expect(s.toArray()).toEqual(a); - s = s.unshift(ii); - a.unshift(ii); - } - expect(s.size).toBe(a.length); - expect(s.toArray()).toEqual(a); - }) - ); - }); - - it('unshifts multiple values to the front', () => { - fc.assert( - fc.property(fc.nat(100), fc.nat(100), (size1: number, size2: number) => { - const a1 = arrayOfSize(size1); - const a2 = arrayOfSize(size2); - - const s1 = Stack(a1); - const s3 = s1.unshift.apply(s1, a2); - - const a3 = a1.slice(); - a3.unshift.apply(a3, a2); - - expect(s3.size).toEqual(a3.length); - expect(s3.toArray()).toEqual(a3); - }) - ); - }); - - it('finds values using indexOf', () => { - const s = Stack.of('a', 'b', 'c', 'b', 'a'); - expect(s.indexOf('b')).toBe(1); - expect(s.indexOf('c')).toBe(2); - expect(s.indexOf('d')).toBe(-1); - }); - - it('pushes on all items in an iter', () => { - const abc = Stack(['a', 'b', 'c']); - const xyz = Stack(['x', 'y', 'z']); - const xyzSeq = Seq(['x', 'y', 'z']); - - // Push all to the front of the Stack so first item ends up first. - expect(abc.pushAll(xyz).toArray()).toEqual(['x', 'y', 'z', 'a', 'b', 'c']); - expect(abc.pushAll(xyzSeq).toArray()).toEqual([ - 'x', - 'y', - 'z', - 'a', - 'b', - 'c', - ]); - - // Pushes Seq contents into Stack - expect(Stack().pushAll(xyzSeq)).not.toBe(xyzSeq); - expect(Stack().pushAll(xyzSeq).toArray()).toEqual(['x', 'y', 'z']); - - // Pushing a Stack onto an empty Stack returns === Stack - expect(Stack().pushAll(xyz)).toBe(xyz); - - // Pushing an empty Stack onto a Stack return === Stack - expect(abc.pushAll(Stack())).toBe(abc); - }); -}); diff --git a/__tests__/__snapshots__/Record.ts.snap b/__tests__/__snapshots__/Record.ts.snap deleted file mode 100644 index 46daf60171..0000000000 --- a/__tests__/__snapshots__/Record.ts.snap +++ /dev/null @@ -1,7 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Record does not accept a Record as constructor 1`] = `"Can not call \`Record\` with an immutable Record as default values. Use a plain javascript object instead."`; - -exports[`Record does not accept a non object as constructor 1`] = `"Can not call \`Record\` with a non-object as default values. Use a plain javascript object instead."`; - -exports[`Record does not accept an immutable object that is not a Record as constructor 1`] = `"Can not call \`Record\` with an immutable Collection as default values. Use a plain javascript object instead."`; diff --git a/__tests__/concat.ts b/__tests__/concat.ts deleted file mode 100644 index 35710a7c49..0000000000 --- a/__tests__/concat.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List, Seq, Set } from 'immutable'; - -describe('concat', () => { - it('concats two sequences', () => { - const a = Seq([1, 2, 3]); - const b = Seq([4, 5, 6]); - expect(a.concat(b).size).toBe(6); - expect(a.concat(b).toArray()).toEqual([1, 2, 3, 4, 5, 6]); - }); - - it('concats two object sequences', () => { - const a = Seq({ a: 1, b: 2, c: 3 }); - const b = Seq({ d: 4, e: 5, f: 6 }); - expect(a.size).toBe(3); - expect(a.concat(b).size).toBe(6); - expect(a.concat(b).toObject()).toEqual({ - a: 1, - b: 2, - c: 3, - d: 4, - e: 5, - f: 6, - }); - }); - - it('concats objects to keyed seq', () => { - const a = Seq({ a: 1, b: 2, c: 3 }); - const b = { d: 4, e: 5, f: 6 }; - expect(a.concat(b).toObject()).toEqual({ - a: 1, - b: 2, - c: 3, - d: 4, - e: 5, - f: 6, - }); - }); - - it('doesnt concat raw arrays to keyed seq', () => { - const a = Seq({ a: 1, b: 2, c: 3 }); - const b = [4, 5, 6]; - expect(() => { - // @ts-expect-error -- test that runtime does throw - a.concat(b).toJS(); - }).toThrow('Expected [K, V] tuple: 4'); - }); - - it('concats arrays to indexed seq', () => { - const a = Seq([1, 2, 3]); - const b = [4, 5, 6]; - expect(a.concat(b).size).toBe(6); - expect(a.concat(b).toArray()).toEqual([1, 2, 3, 4, 5, 6]); - }); - - it('concats values', () => { - const a = Seq([1, 2, 3]); - expect(a.concat(4, 5, 6).size).toBe(6); - expect(a.concat(4, 5, 6).toArray()).toEqual([1, 2, 3, 4, 5, 6]); - }); - - it('doesnt concat objects to indexed seq', () => { - const a = Seq([0, 1, 2, 3]); - const b = { 4: 4 }; - const i = a.concat(b); - expect(i.size).toBe(5); - expect(i.get(4)).toBe(b); - expect(i.toArray()).toEqual([0, 1, 2, 3, { 4: 4 }]); - }); - - it('concats multiple arguments', () => { - const a = Seq([1, 2, 3]); - const b = [4, 5, 6]; - const c = [7, 8, 9]; - expect(a.concat(b, c).size).toBe(9); - expect(a.concat(b, c).toArray()).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9]); - }); - - it('can concat itself!', () => { - const a = Seq([1, 2, 3]); - expect(a.concat(a, a).size).toBe(9); - expect(a.concat(a, a).toArray()).toEqual([1, 2, 3, 1, 2, 3, 1, 2, 3]); - }); - - it('returns itself when concat does nothing', () => { - const a = Seq([1, 2, 3]); - const b = Seq(); - expect(a.concat()).toBe(a); - expect(a.concat(b)).toBe(a); - expect(b.concat(b)).toBe(b); - }); - - it('returns non-empty item when concat does nothing', () => { - const a = Seq([1, 2, 3]); - const b = Seq(); - expect(a.concat(b)).toBe(a); - expect(b.concat(a)).toBe(a); - expect(b.concat(b, b, b, a, b, b)).toBe(a); - }); - - it('always returns the same type', () => { - const a = Set([1, 2, 3]); - const b = List(); - expect(b.concat(a)).not.toBe(a); - expect(List.isList(b.concat(a))).toBe(true); - expect(b.concat(a)).toEqual(List([1, 2, 3])); - }); - - it('iterates repeated keys', () => { - const a = Seq({ a: 1, b: 2, c: 3 }); - expect(a.concat(a, a).toObject()).toEqual({ a: 1, b: 2, c: 3 }); - expect(a.concat(a, a).valueSeq().toArray()).toEqual([ - 1, 2, 3, 1, 2, 3, 1, 2, 3, - ]); - expect(a.concat(a, a).keySeq().toArray()).toEqual([ - 'a', - 'b', - 'c', - 'a', - 'b', - 'c', - 'a', - 'b', - 'c', - ]); - expect(a.concat(a, a).toArray()).toEqual([ - ['a', 1], - ['b', 2], - ['c', 3], - ['a', 1], - ['b', 2], - ['c', 3], - ['a', 1], - ['b', 2], - ['c', 3], - ]); - }); - - it('lazily reverses un-indexed sequences', () => { - const a = Seq({ a: 1, b: 2, c: 3 }); - const b = Seq({ d: 4, e: 5, f: 6 }); - expect(a.concat(b).reverse().keySeq().toArray()).toEqual([ - 'f', - 'e', - 'd', - 'c', - 'b', - 'a', - ]); - }); - - it('lazily reverses indexed sequences', () => { - const a = Seq([1, 2, 3]); - expect(a.concat(a, a).reverse().size).toBe(9); - expect(a.concat(a, a).reverse().toArray()).toEqual([ - 3, 2, 1, 3, 2, 1, 3, 2, 1, - ]); - }); - - it('lazily reverses indexed sequences with unknown size, maintaining indicies', () => { - const a = Seq([1, 2, 3]).filter(() => true); - expect(a.size).toBe(undefined); // Note: lazy filter does not know what size in O(1). - expect(a.concat(a, a).toKeyedSeq().reverse().size).toBe(undefined); - expect(a.concat(a, a).toKeyedSeq().reverse().toArray()).toEqual([ - [8, 3], - [7, 2], - [6, 1], - [5, 3], - [4, 2], - [3, 1], - [2, 3], - [1, 2], - [0, 1], - ]); - }); - - it('counts from the end of the indexed sequence on negative index', () => { - const i = List.of(9, 5, 3, 1).map((x) => -x); - expect(i.get(0)).toBe(-9); - expect(i.get(-1)).toBe(-1); - expect(i.get(-4)).toBe(-9); - expect(i.get(-5, 888)).toBe(888); - }); - - it('should iterate on many concatenated sequences', () => { - let meta = Seq(); - - for (let i = 0; i < 10000; ++i) { - meta = meta.concat(i) as Seq; // TODO fix typing - } - - expect(meta.toList().size).toBe(10000); - }); - - it('should handle iterator on many concatenated sequences', () => { - const nbLoops = 10000; - let meta = Seq(); - for (let i = 1; i < nbLoops; i++) { - meta = meta.concat(i) as Seq; // TODO fix typing - } - const it = meta[Symbol.iterator](); - let done = false; - let i = 0; - while (!done) { - const result = it.next(); - i++; - done = !!result.done; - } - expect(i).toBe(nbLoops); - }); - - it('should iterate on reverse order on concatenated sequences', () => { - let meta = Seq([1]); - meta = meta.concat(42); - const it = meta.reverse()[Symbol.iterator](); - const result = it.next(); - expect(result).toEqual({ - done: false, - value: 42, - }); - }); -}); diff --git a/__tests__/count.ts b/__tests__/count.ts deleted file mode 100644 index 488e8d8b5d..0000000000 --- a/__tests__/count.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Range, Seq } from 'immutable'; - -describe('count', () => { - it('counts sequences with known lengths', () => { - expect(Seq([1, 2, 3, 4, 5]).size).toBe(5); - expect(Seq([1, 2, 3, 4, 5]).count()).toBe(5); - }); - - it('counts sequences with unknown lengths, resulting in a cached size', () => { - const seq = Seq([1, 2, 3, 4, 5, 6]).filter((x) => x % 2 === 0); - expect(seq.size).toBe(undefined); - expect(seq.count()).toBe(3); - expect(seq.size).toBe(3); - }); - - it('counts sequences with a specific predicate', () => { - const seq = Seq([1, 2, 3, 4, 5, 6]); - expect(seq.size).toBe(6); - expect(seq.count((x) => x > 3)).toBe(3); - }); - - describe('countBy', () => { - it('counts by keyed sequence', () => { - const grouped = Seq({ a: 1, b: 2, c: 3, d: 4 }).countBy((x) => x % 2); - expect(grouped.toJS()).toEqual({ 1: 2, 0: 2 }); - expect(grouped.get(1)).toEqual(2); - }); - - it('counts by indexed sequence', () => { - expect( - Seq([1, 2, 3, 4, 5, 6]) - .countBy((x) => x % 2) - .toJS() - ).toEqual({ 1: 3, 0: 3 }); - }); - - it('counts by specific keys', () => { - expect( - Seq([1, 2, 3, 4, 5, 6]) - .countBy((x) => (x % 2 ? 'odd' : 'even')) - .toJS() - ).toEqual({ odd: 3, even: 3 }); - }); - }); - - describe('isEmpty', () => { - it('is O(1) on sequences with known lengths', () => { - expect(Seq([1, 2, 3, 4, 5]).size).toBe(5); - expect(Seq([1, 2, 3, 4, 5]).isEmpty()).toBe(false); - expect(Seq().size).toBe(0); - expect(Seq().isEmpty()).toBe(true); - }); - - it('lazily evaluates Seq with unknown length', () => { - let seq = Seq([1, 2, 3, 4, 5, 6]).filter((x) => x % 2 === 0); - expect(seq.size).toBe(undefined); - expect(seq.isEmpty()).toBe(false); - expect(seq.size).toBe(undefined); - - seq = Seq([1, 2, 3, 4, 5, 6]).filter((x) => x > 10); - expect(seq.size).toBe(undefined); - expect(seq.isEmpty()).toBe(true); - expect(seq.size).toBe(undefined); - }); - - it('with infinitely long sequences of known length', () => { - const seq = Range(0, Infinity); - expect(seq.size).toBe(Infinity); - expect(seq.isEmpty()).toBe(false); - }); - - it('with infinitely long sequences of unknown length', () => { - const seq = Range(0, Infinity).filter((x) => x % 2 === 0); - expect(seq.size).toBe(undefined); - expect(seq.isEmpty()).toBe(false); - expect(seq.size).toBe(undefined); - }); - }); -}); diff --git a/__tests__/find.ts b/__tests__/find.ts deleted file mode 100644 index 2f6f186690..0000000000 --- a/__tests__/find.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Seq } from 'immutable'; - -describe('find', () => { - it('find returns notSetValue when match is not found', () => { - expect(Seq([1, 2, 3, 4, 5, 6]).find(() => false, null, 9)).toEqual(9); - }); - - it('findEntry returns notSetValue when match is not found', () => { - expect( - Seq([1, 2, 3, 4, 5, 6]).findEntry( - () => false, - - null, - 9 - ) - ).toEqual(9); - }); - - it('findLastEntry returns notSetValue when match is not found', () => { - expect(Seq([1, 2, 3, 4, 5, 6]).findLastEntry(() => false, null, 9)).toEqual( - 9 - ); - }); -}); diff --git a/__tests__/flatten.ts b/__tests__/flatten.ts deleted file mode 100644 index 0d5cea91e8..0000000000 --- a/__tests__/flatten.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Collection, fromJS, List, Range, Seq } from 'immutable'; - -describe('flatten', () => { - it('flattens sequences one level deep', () => { - const nested = fromJS([ - [1, 2], - [3, 4], - [5, 6], - ]); - const flat = nested.flatten(); - expect(flat.toJS()).toEqual([1, 2, 3, 4, 5, 6]); - }); - - it('flattening a List returns a List', () => { - const nested = fromJS([[1], 2, 3, [4, 5, 6]]); - const flat = nested.flatten(); - expect(flat.toString()).toEqual('List [ 1, 2, 3, 4, 5, 6 ]'); - }); - - it('gives the correct iteration count', () => { - const nested = fromJS([ - [1, 2, 3], - [4, 5, 6], - ]); - const flat = nested.flatten(); - // @ts-expect-error -- `flatten` return type should be improved - expect(flat.forEach((x: number) => x < 4)).toEqual(4); - }); - - type SeqType = number | Array | Collection; - - it('flattens only Sequences (not sequenceables)', () => { - const nested = Seq([Range(1, 3), [3, 4], List([5, 6, 7]), 8]); - const flat = nested.flatten(); - expect(flat.toJS()).toEqual([1, 2, [3, 4], 5, 6, 7, 8]); - }); - - it('can be reversed', () => { - const nested = Seq([Range(1, 3), [3, 4], List([5, 6, 7]), 8]); - const flat = nested.flatten(); - const reversed = flat.reverse(); - expect(reversed.toJS()).toEqual([8, 7, 6, 5, [3, 4], 2, 1]); - }); - - it('can flatten at various levels of depth', () => { - const deeplyNested = fromJS([ - [ - [ - ['A', 'B'], - ['A', 'B'], - ], - [ - ['A', 'B'], - ['A', 'B'], - ], - ], - [ - [ - ['A', 'B'], - ['A', 'B'], - ], - [ - ['A', 'B'], - ['A', 'B'], - ], - ], - ]); - - // deeply flatten - expect(deeplyNested.flatten().toJS()).toEqual([ - 'A', - 'B', - 'A', - 'B', - 'A', - 'B', - 'A', - 'B', - 'A', - 'B', - 'A', - 'B', - 'A', - 'B', - 'A', - 'B', - ]); - - // shallow flatten - expect(deeplyNested.flatten(true).toJS()).toEqual([ - [ - ['A', 'B'], - ['A', 'B'], - ], - [ - ['A', 'B'], - ['A', 'B'], - ], - [ - ['A', 'B'], - ['A', 'B'], - ], - [ - ['A', 'B'], - ['A', 'B'], - ], - ]); - - // flatten two levels - expect(deeplyNested.flatten(2).toJS()).toEqual([ - ['A', 'B'], - ['A', 'B'], - ['A', 'B'], - ['A', 'B'], - ['A', 'B'], - ['A', 'B'], - ['A', 'B'], - ['A', 'B'], - ]); - }); - - describe('flatMap', () => { - it('first maps, then shallow flattens', () => { - const numbers = Range(97, 100); - const letters = numbers.flatMap((v) => - fromJS([String.fromCharCode(v), String.fromCharCode(v).toUpperCase()]) - ); - expect(letters.toJS()).toEqual(['a', 'A', 'b', 'B', 'c', 'C']); - }); - - it('maps to sequenceables, not only Sequences.', () => { - const numbers = Range(97, 100); - // the map function returns an Array, rather than a Collection. - // Array is iterable, so this works just fine. - const letters = numbers.flatMap((v) => [ - String.fromCharCode(v), - String.fromCharCode(v).toUpperCase(), - ]); - expect(letters.toJS()).toEqual(['a', 'A', 'b', 'B', 'c', 'C']); - }); - }); -}); diff --git a/__tests__/fromJS.ts b/__tests__/fromJS.ts deleted file mode 100644 index 90f70228e2..0000000000 --- a/__tests__/fromJS.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { runInNewContext } from 'vm'; -import { List, Map, Set, isCollection, fromJS } from 'immutable'; - -describe('fromJS', () => { - it('convert Array to Immutable.List', () => { - const list = fromJS([1, 2, 3]); - expect(List.isList(list)).toBe(true); - expect(list.count()).toBe(3); - }); - - it('convert plain Object to Immutable.Map', () => { - const map = fromJS({ a: 'A', b: 'B', c: 'C' }); - expect(Map.isMap(map)).toBe(true); - expect(map.count()).toBe(3); - }); - - it('convert JS (global) Set to Immutable.Set', () => { - const set = fromJS(new global.Set([1, 2, 3])); - expect(Set.isSet(set)).toBe(true); - expect(set.count()).toBe(3); - }); - - it('convert JS (global) Map to Immutable.Map', () => { - const map = fromJS( - new global.Map([ - ['a', 'A'], - ['b', 'B'], - ['c', 'C'], - ]) - ); - expect(Map.isMap(map)).toBe(true); - expect(map.count()).toBe(3); - }); - - it('convert iterable to Immutable collection', () => { - function* values() { - yield 1; - yield 2; - yield 3; - } - const result = fromJS(values()); - expect(List.isList(result)).toBe(true); - expect(result.count()).toBe(3); - }); - - it('does not convert existing Immutable collections', () => { - const orderedSet = Set(['a', 'b', 'c']); - expect(fromJS(orderedSet)).toBe(orderedSet); - }); - - it('does not convert strings', () => { - expect(fromJS('abc')).toBe('abc'); - }); - - it('does not convert non-plain Objects', () => { - class Test {} - const result = fromJS(new Test()); - expect(isCollection(result)).toBe(false); - expect(result instanceof Test).toBe(true); - }); - - it('is iterable outside of a vm', () => { - expect(isCollection(fromJS({}))).toBe(true); - }); - - // eslint-disable-next-line jest/expect-expect - it('is iterable inside of a vm', () => { - runInNewContext( - ` - expect(isCollection(fromJS({}))).toBe(true); - `, - { - expect, - isCollection, - fromJS, - }, - {} - ); - }); -}); diff --git a/__tests__/functional/get.ts b/__tests__/functional/get.ts deleted file mode 100644 index 901724f1c3..0000000000 --- a/__tests__/functional/get.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { get, Map, List, Range } from 'immutable'; - -describe('get', () => { - it('for immutable structure', () => { - expect(get(Range(0, 100), 20)).toBe(20); - expect(get(List(['dog', 'frog', 'cat']), 1)).toBe('frog'); - expect(get(List(['dog', 'frog', 'cat']), 20)).toBeUndefined(); - expect(get(List(['dog', 'frog', 'cat']), 20, 'ifNotSet')).toBe('ifNotSet'); - - expect(get(Map({ x: 123, y: 456 }), 'x')).toBe(123); - }); - - it('for Array', () => { - expect(get(['dog', 'frog', 'cat'], 1)).toBe('frog'); - expect(get(['dog', 'frog', 'cat'], 20)).toBeUndefined(); - expect(get(['dog', 'frog', 'cat'], 20, 'ifNotSet')).toBe('ifNotSet'); - }); - - it('for plain objects', () => { - expect(get({ x: 123, y: 456 }, 'x')).toBe(123); - expect(get({ x: 123, y: 456 }, 'z', 'ifNotSet')).toBe('ifNotSet'); - - expect( - get( - { - x: 'xx', - y: 'yy', - get: function (key: string) { - return `${this[key].toUpperCase()}`; - }, - }, - 'x' - ) - ).toBe('XX'); - }); -}); diff --git a/__tests__/functional/has.ts b/__tests__/functional/has.ts deleted file mode 100644 index 3d4f550dec..0000000000 --- a/__tests__/functional/has.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { has, Map, List, Range } from 'immutable'; - -describe('has', () => { - it('for immutable structure', () => { - expect(has(Range(0, 100), 20)).toBe(true); - expect(has(List(['dog', 'frog', 'cat']), 1)).toBe(true); - expect(has(List(['dog', 'frog', 'cat']), 20)).toBe(false); - - expect(has(Map({ x: 123, y: 456 }), 'x')).toBe(true); - }); - it('for Array', () => { - expect(has(['dog', 'frog', 'cat'], 1)).toBe(true); - expect(has(['dog', 'frog', 'cat'], 20)).toBe(false); - }); - - it('for plain objects', () => { - expect(has({ x: 123, y: 456 }, 'x')).toBe(true); - expect(has({ x: 123, y: 456 }, 'z')).toBe(false); - }); -}); diff --git a/__tests__/functional/remove.ts b/__tests__/functional/remove.ts deleted file mode 100644 index 10674c695b..0000000000 --- a/__tests__/functional/remove.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { remove, List, Map } from 'immutable'; - -describe('remove', () => { - it('for immutable structure', () => { - expect(remove(List(['dog', 'frog', 'cat']), 1)).toEqual( - List(['dog', 'cat']) - ); - expect(remove(Map({ x: 123, y: 456 }), 'x')).toEqual(Map({ y: 456 })); - }); - - it('for Array', () => { - expect(remove(['dog', 'frog', 'cat'], 1)).toEqual(['dog', 'cat']); - }); - - it('for plain objects', () => { - expect(remove({ x: 123, y: 456 }, 'x')).toEqual({ y: 456 }); - }); -}); diff --git a/__tests__/functional/set.ts b/__tests__/functional/set.ts deleted file mode 100644 index 154009880a..0000000000 --- a/__tests__/functional/set.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { set } from 'immutable'; - -describe('set', () => { - it('for immutable structure', () => { - const originalArray = ['dog', 'frog', 'cat']; - expect(set(originalArray, 1, 'cow')).toEqual(['dog', 'cow', 'cat']); - expect(set(originalArray, 4, 'cow')).toEqual([ - 'dog', - 'frog', - 'cat', - undefined, - 'cow', - ]); - expect(originalArray).toEqual(['dog', 'frog', 'cat']); - - const originalObject = { x: 123, y: 456 }; - expect(set(originalObject, 'x', 789)).toEqual({ x: 789, y: 456 }); - expect(set(originalObject, 'z', 789)).toEqual({ x: 123, y: 456, z: 789 }); - expect(originalObject).toEqual({ x: 123, y: 456 }); - }); - - it('for Array', () => { - const originalArray = ['dog', 'frog', 'cat']; - expect(set(originalArray, 1, 'cow')).toEqual(['dog', 'cow', 'cat']); - expect(set(originalArray, 4, 'cow')).toEqual([ - 'dog', - 'frog', - 'cat', - undefined, - 'cow', - ]); - expect(originalArray).toEqual(['dog', 'frog', 'cat']); - }); - - it('for plain objects', () => { - const originalObject = { x: 123, y: 456 }; - expect(set(originalObject, 'x', 789)).toEqual({ x: 789, y: 456 }); - expect(set(originalObject, 'z', 789)).toEqual({ x: 123, y: 456, z: 789 }); - expect(originalObject).toEqual({ x: 123, y: 456 }); - }); -}); diff --git a/__tests__/functional/update.ts b/__tests__/functional/update.ts deleted file mode 100644 index 0ed9042e85..0000000000 --- a/__tests__/functional/update.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { update } from 'immutable'; - -describe('update', () => { - it('for immutable structure', () => { - const originalArray = ['dog', 'frog', 'cat']; - expect(update(originalArray, 1, (val) => val?.toUpperCase())).toEqual([ - 'dog', - 'FROG', - 'cat', - ]); - expect(originalArray).toEqual(['dog', 'frog', 'cat']); - - const originalObject = { x: 123, y: 456 }; - expect(update(originalObject, 'x', (val) => val * 6)).toEqual({ - x: 738, - y: 456, - }); - expect(originalObject).toEqual({ x: 123, y: 456 }); - }); - - it('for Array', () => { - const originalArray = ['dog', 'frog', 'cat']; - expect(update(originalArray, 1, (val) => val?.toUpperCase())).toEqual([ - 'dog', - 'FROG', - 'cat', - ]); - expect(originalArray).toEqual(['dog', 'frog', 'cat']); - }); - - it('for plain objects', () => { - const originalObject = { x: 123, y: 456 }; - expect(update(originalObject, 'x', (val) => val * 6)).toEqual({ - x: 738, - y: 456, - }); - expect(originalObject).toEqual({ x: 123, y: 456 }); - }); -}); diff --git a/__tests__/get.ts b/__tests__/get.ts deleted file mode 100644 index 7853ad30ca..0000000000 --- a/__tests__/get.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Range } from 'immutable'; - -describe('get', () => { - it('gets any index', () => { - const seq = Range(0, 100); - expect(seq.get(20)).toBe(20); - }); - - it('gets first', () => { - const seq = Range(0, 100); - expect(seq.first()).toBe(0); - }); - - it('gets last', () => { - const seq = Range(0, 100); - expect(seq.last()).toBe(99); - }); - - it('gets any index after reversing', () => { - const seq = Range(0, 100).reverse(); - expect(seq.get(20)).toBe(79); - }); - - it('gets first after reversing', () => { - const seq = Range(0, 100).reverse(); - expect(seq.first()).toBe(99); - }); - - it('gets last after reversing', () => { - const seq = Range(0, 100).reverse(); - expect(seq.last()).toBe(0); - }); - - it('gets any index when size is unknown', () => { - const seq = Range(0, 100).filter((x) => x % 2 === 1); - expect(seq.get(20)).toBe(41); - }); - - it('gets first when size is unknown', () => { - const seq = Range(0, 100).filter((x) => x % 2 === 1); - expect(seq.first()).toBe(1); - }); - - it('gets last when size is unknown', () => { - const seq = Range(0, 100).filter((x) => x % 2 === 1); - expect(seq.last()).toBe(99); // Note: this is O(N) - }); -}); diff --git a/__tests__/getIn.ts b/__tests__/getIn.ts deleted file mode 100644 index 57074034c6..0000000000 --- a/__tests__/getIn.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { fromJS, getIn, List, Map } from 'immutable'; - -describe('getIn', () => { - it('deep get', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect(m.getIn(['a', 'b', 'c'])).toEqual(10); - expect(getIn(m, ['a', 'b', 'c'])).toEqual(10); - }); - - it('deep get with list as keyPath', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect(m.getIn(fromJS(['a', 'b', 'c']))).toEqual(10); - expect(getIn(m, fromJS(['a', 'b', 'c']))).toEqual(10); - }); - - it('deep get throws without list or array-like', () => { - // @ts-expect-error -- test that runtime does throw - expect(() => Map().getIn(undefined)).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: undefined' - ); - // @ts-expect-error -- test that runtime does throw - expect(() => Map().getIn({ a: 1, b: 2 })).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: [object Object]' - ); - // TODO: should expect error - expect(() => Map().getIn('abc')).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: abc' - ); - // TODO: should expect error - expect(() => getIn(Map(), 'abc')).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: abc' - ); - }); - - it('deep get returns not found if path does not match', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect(m.getIn(['a', 'b', 'z'])).toEqual(undefined); - expect(m.getIn(['a', 'b', 'z'], 123)).toEqual(123); - expect(m.getIn(['a', 'y', 'z'])).toEqual(undefined); - expect(m.getIn(['a', 'y', 'z'], 123)).toEqual(123); - expect(getIn(m, ['a', 'y', 'z'])).toEqual(undefined); - expect(getIn(m, ['a', 'y', 'z'], 123)).toEqual(123); - }); - - it('does not use notSetValue when path does exist but value is nullable', () => { - const m = fromJS({ a: { b: { c: null, d: undefined } } }); - expect(m.getIn(['a', 'b', 'c'])).toEqual(null); - expect(m.getIn(['a', 'b', 'd'])).toEqual(undefined); - expect(m.getIn(['a', 'b', 'c'], 123)).toEqual(null); - expect(m.getIn(['a', 'b', 'd'], 123)).toEqual(undefined); - expect(getIn(m, ['a', 'b', 'c'], 123)).toEqual(null); - expect(getIn(m, ['a', 'b', 'd'], 123)).toEqual(undefined); - }); - - it('deep get returns not found if path encounters non-data-structure', () => { - const m = fromJS({ a: { b: { c: null, d: undefined } } }); - expect(m.getIn(['a', 'b', 'c', 'x'])).toEqual(undefined); - expect(m.getIn(['a', 'b', 'c', 'x'], 123)).toEqual(123); - expect(m.getIn(['a', 'b', 'd', 'x'])).toEqual(undefined); - expect(m.getIn(['a', 'b', 'd', 'x'], 123)).toEqual(123); - expect(getIn(m, ['a', 'b', 'd', 'x'])).toEqual(undefined); - expect(getIn(m, ['a', 'b', 'd', 'x'], 123)).toEqual(123); - - expect(getIn('a', ['length'])).toEqual(undefined); - expect(getIn(new Date(), ['getDate'])).toEqual(undefined); - }); - - it('gets in nested plain Objects and Arrays', () => { - const m = List([{ key: ['item'] }]); - expect(m.getIn([0, 'key', 0])).toEqual('item'); - }); - - it('deep get returns not found if non-existing path in nested plain Object', () => { - const deep = Map({ - key: { regular: 'jsobj' }, - list: List([Map({ num: 10 })]), - }); - expect(deep.getIn(['key', 'foo', 'item'])).toBe(undefined); - expect(deep.getIn(['key', 'foo', 'item'], 'notSet')).toBe('notSet'); - expect(deep.getIn(['list', 0, 'num', 'badKey'])).toBe(undefined); - expect(deep.getIn(['list', 0, 'num', 'badKey'], 'notSet')).toBe('notSet'); - }); - - it('gets in plain Objects and Arrays', () => { - const m = [{ key: ['item'] }]; - expect(getIn(m, [0, 'key', 0])).toEqual('item'); - }); - - it('deep get returns not found if non-existing path in plain Object', () => { - const deep = { key: { regular: 'jsobj' }, list: [{ num: 10 }] }; - expect(getIn(deep, ['key', 'foo', 'item'])).toBe(undefined); - expect(getIn(deep, ['key', 'foo', 'item'], 'notSet')).toBe('notSet'); - expect(getIn(deep, ['list', 0, 'num', 'badKey'])).toBe(undefined); - expect(getIn(deep, ['list', 0, 'num', 'badKey'], 'notSet')).toBe('notSet'); - }); -}); diff --git a/__tests__/groupBy.ts b/__tests__/groupBy.ts deleted file mode 100644 index bfaba132df..0000000000 --- a/__tests__/groupBy.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { - Collection, - Map, - Seq, - isOrdered, - OrderedMap, - List, - OrderedSet, - Set, - Stack, -} from 'immutable'; - -describe('groupBy', () => { - it.each` - constructor | constructorIsOrdered | isObject - ${Collection} | ${true} | ${false} - ${List} | ${true} | ${false} - ${Seq} | ${true} | ${false} - ${Set} | ${false} | ${false} - ${Stack} | ${true} | ${false} - ${OrderedSet} | ${true} | ${false} - ${Map} | ${false} | ${true} - ${OrderedMap} | ${true} | ${true} - `( - 'groupBy returns ordered or unordered of the base type is ordered or not: $constructor.name', - ({ constructor, constructorIsOrdered, isObject }) => { - const iterableConstructor = ['a', 'b', 'a', 'c']; - const objectConstructor = { a: 1, b: 2, c: 3, d: 1 }; - - const col = constructor( - isObject ? objectConstructor : iterableConstructor - ); - - const grouped = col.groupBy((v) => v); - - // all groupBy should be instance of Map - expect(grouped).toBeInstanceOf(Map); - - // ordered objects should be instance of OrderedMap - expect(isOrdered(col)).toBe(constructorIsOrdered); - expect(isOrdered(grouped)).toBe(constructorIsOrdered); - if (constructorIsOrdered) { - // eslint-disable-next-line jest/no-conditional-expect - expect(grouped).toBeInstanceOf(OrderedMap); - } else { - // eslint-disable-next-line jest/no-conditional-expect - expect(grouped).not.toBeInstanceOf(OrderedMap); - } - } - ); - - it('groups keyed sequence', () => { - const grouped = Seq({ a: 1, b: 2, c: 3, d: 4 }).groupBy((x) => x % 2); - expect(grouped.toJS()).toEqual({ 1: { a: 1, c: 3 }, 0: { b: 2, d: 4 } }); - - // Each group should be a keyed sequence, not an indexed sequence - const firstGroup = grouped.get(1); - expect(firstGroup && firstGroup.toArray()).toEqual([ - ['a', 1], - ['c', 3], - ]); - }); - - it('groups indexed sequence', () => { - const group = Seq([1, 2, 3, 4, 5, 6]).groupBy((x) => x % 2); - - expect(group.toJS()).toEqual({ 1: [1, 3, 5], 0: [2, 4, 6] }); - }); - - it('groups to keys', () => { - const group = Seq([1, 2, 3, 4, 5, 6]).groupBy((x) => - x % 2 ? 'odd' : 'even' - ); - expect(group.toJS()).toEqual({ odd: [1, 3, 5], even: [2, 4, 6] }); - }); - - it('allows `undefined` as a key', () => { - const group = Seq([1, 2, 3, 4, 5, 6]).groupBy((x) => - x % 2 ? undefined : 'even' - ); - expect(group.toJS()).toEqual({ undefined: [1, 3, 5], even: [2, 4, 6] }); - }); - - it('groups indexed sequences, maintaining indicies when keyed sequences', () => { - const group = Seq([1, 2, 3, 4, 5, 6]).groupBy((x) => x % 2); - - expect(group.toJS()).toEqual({ 1: [1, 3, 5], 0: [2, 4, 6] }); - - const keyedGroup = Seq([1, 2, 3, 4, 5, 6]) - .toKeyedSeq() - .groupBy((x) => x % 2); - - expect(keyedGroup.toJS()).toEqual({ - 1: { 0: 1, 2: 3, 4: 5 }, - 0: { 1: 2, 3: 4, 5: 6 }, - }); - }); - - it('has groups that can be mapped', () => { - const mappedGroup = Seq([1, 2, 3, 4, 5, 6]) - .groupBy((x) => x % 2) - .map((group) => group.map((value) => value * 10)); - - expect(mappedGroup.toJS()).toEqual({ 1: [10, 30, 50], 0: [20, 40, 60] }); - }); -}); diff --git a/__tests__/hasIn.ts b/__tests__/hasIn.ts deleted file mode 100644 index da2baa0a89..0000000000 --- a/__tests__/hasIn.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { fromJS, hasIn, List, Map } from 'immutable'; - -describe('hasIn', () => { - it('deep has', () => { - const m = fromJS({ a: { b: { c: 10, d: undefined } } }); - expect(m.hasIn(['a', 'b', 'c'])).toEqual(true); - expect(m.hasIn(['a', 'b', 'd'])).toEqual(true); - expect(m.hasIn(['a', 'b', 'z'])).toEqual(false); - expect(m.hasIn(['a', 'y', 'z'])).toEqual(false); - expect(hasIn(m, ['a', 'b', 'c'])).toEqual(true); - expect(hasIn(m, ['a', 'b', 'z'])).toEqual(false); - }); - - it('deep has with list as keyPath', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect(m.hasIn(fromJS(['a', 'b', 'c']))).toEqual(true); - expect(m.hasIn(fromJS(['a', 'b', 'z']))).toEqual(false); - expect(m.hasIn(fromJS(['a', 'y', 'z']))).toEqual(false); - expect(hasIn(m, fromJS(['a', 'b', 'c']))).toEqual(true); - expect(hasIn(m, fromJS(['a', 'y', 'z']))).toEqual(false); - }); - - it('deep has throws without list or array-like', () => { - // @ts-expect-error -- test that runtime does throw - expect(() => Map().hasIn(undefined)).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: undefined' - ); - // @ts-expect-error -- test that runtime does throw - expect(() => Map().hasIn({ a: 1, b: 2 })).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: [object Object]' - ); - // TODO: should expect error - expect(() => Map().hasIn('abc')).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: abc' - ); - // TODO: should expect error - expect(() => hasIn(Map(), 'abc')).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: abc' - ); - }); - - it('deep has does not throw if non-readable path', () => { - const deep = Map({ - key: { regular: 'jsobj' }, - list: List([Map({ num: 10 })]), - }); - expect(deep.hasIn(['key', 'foo', 'item'])).toBe(false); - expect(deep.hasIn(['list', 0, 'num', 'badKey'])).toBe(false); - expect(hasIn(deep, ['key', 'foo', 'item'])).toBe(false); - expect(hasIn(deep, ['list', 0, 'num', 'badKey'])).toBe(false); - }); - - it('deep has in plain Object and Array', () => { - const m = { a: { b: { c: [10, undefined], d: undefined } } }; - expect(hasIn(m, ['a', 'b', 'c', 0])).toEqual(true); - expect(hasIn(m, ['a', 'b', 'c', 1])).toEqual(true); - expect(hasIn(m, ['a', 'b', 'c', 2])).toEqual(false); - expect(hasIn(m, ['a', 'b', 'd'])).toEqual(true); - expect(hasIn(m, ['a', 'b', 'z'])).toEqual(false); - expect(hasIn(m, ['a', 'b', 'z'])).toEqual(false); - }); -}); diff --git a/__tests__/hash.ts b/__tests__/hash.ts deleted file mode 100644 index 168ded87f1..0000000000 --- a/__tests__/hash.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { hash } from 'immutable'; -import fc from 'fast-check'; - -describe('hash', () => { - it('stable hash of well known values', () => { - expect(hash(true)).toBe(0x42108421); - expect(hash(false)).toBe(0x42108420); - expect(hash(0)).toBe(0); - expect(hash(null)).toBe(0x42108422); - expect(hash(undefined)).toBe(0x42108423); - expect(hash('a')).toBe(97); - expect(hash('immutable-js')).toBe(510203252); - expect(hash(123)).toBe(123); - }); - - it('generates different hashes for decimal values', () => { - expect(hash(123.456)).toBe(884763256); - expect(hash(123.4567)).toBe(887769707); - }); - - it('generates different hashes for different objects', () => { - const objA = {}; - const objB = {}; - expect(hash(objA)).toBe(hash(objA)); - expect(hash(objA)).not.toBe(hash(objB)); - }); - - it('generates different hashes for different symbols', () => { - const symA = Symbol(); - - const symB = Symbol(); - expect(hash(symA)).toBe(hash(symA)); - expect(hash(symA)).not.toBe(hash(symB)); - }); - - it('generates different hashes for different functions', () => { - const funA = () => {}; - const funB = () => {}; - expect(hash(funA)).toBe(hash(funA)); - expect(hash(funA)).not.toBe(hash(funB)); - }); - - const genValue = fc.oneof(fc.string(), fc.integer()); - - it('generates unsigned 31-bit integers', () => { - fc.assert( - fc.property(genValue, (value) => { - const hashVal = hash(value); - expect(Number.isInteger(hashVal)).toBe(true); - expect(hashVal).toBeGreaterThan(-(2 ** 31)); - expect(hashVal).toBeLessThan(2 ** 31); - }) - ); - }); -}); diff --git a/__tests__/interpose.ts b/__tests__/interpose.ts deleted file mode 100644 index a3698628af..0000000000 --- a/__tests__/interpose.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Range } from 'immutable'; - -describe('interpose', () => { - it('separates with a value', () => { - const range = Range(10, 15); - const interposed = range.interpose(0); - expect(interposed.toArray()).toEqual([10, 0, 11, 0, 12, 0, 13, 0, 14]); - }); - - it('can be iterated', () => { - const range = Range(10, 15); - const interposed = range.interpose(0); - const values = interposed.values(); - expect(values.next()).toEqual({ value: 10, done: false }); - expect(values.next()).toEqual({ value: 0, done: false }); - expect(values.next()).toEqual({ value: 11, done: false }); - expect(values.next()).toEqual({ value: 0, done: false }); - expect(values.next()).toEqual({ value: 12, done: false }); - expect(values.next()).toEqual({ value: 0, done: false }); - expect(values.next()).toEqual({ value: 13, done: false }); - expect(values.next()).toEqual({ value: 0, done: false }); - expect(values.next()).toEqual({ value: 14, done: false }); - expect(values.next()).toEqual({ value: undefined, done: true }); - }); -}); diff --git a/__tests__/issues.ts b/__tests__/issues.ts deleted file mode 100644 index e283378cfc..0000000000 --- a/__tests__/issues.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { - fromJS, - List, - Map, - OrderedMap, - OrderedSet, - Record, - Seq, - Set, -} from 'immutable'; - -describe('Issue #1175', () => { - it('invalid hashCode() response should not infinitly recurse', () => { - class BadHash { - equals() { - return false; - } - - hashCode() { - return 2 ** 32; - } - } - - const set = Set([new BadHash()]); - expect(set.size).toEqual(1); - }); -}); - -describe('Issue #1188', () => { - it('Removing items from OrderedSet should return OrderedSet', () => { - const orderedSet = OrderedSet(['one', 'two', 'three']); - const emptyOrderedSet = orderedSet.subtract(['two', 'three', 'one']); - expect(OrderedSet.isOrderedSet(emptyOrderedSet)).toBe(true); - }); -}); - -describe('Issue #1220 : Seq.rest() throws an exception when invoked on a single item sequence', () => { - it('should be iterable', () => { - // Helper for this test - const ITERATOR_SYMBOL = - (typeof Symbol === 'function' && Symbol.iterator) || '@@iterator'; - - const r = Seq([1]).rest(); - const i = r[ITERATOR_SYMBOL](); - expect(i.next()).toEqual({ value: undefined, done: true }); - }); -}); - -describe('Issue #1245', () => { - it('should return empty collection after takeLast(0)', () => { - const size = List(['a', 'b', 'c']).takeLast(0).size; - expect(size).toEqual(0); - }); -}); - -describe('Issue #1262', () => { - it('Set.subtract should accept an array', () => { - const MyType = Record({ val: 1 }); - const set1 = Set([ - MyType({ val: 1 }), - MyType({ val: 2 }), - MyType({ val: 3 }), - ]); - const set2 = set1.subtract([MyType({ val: 2 })]); - const set3 = set1.subtract(List([MyType({ val: 2 })])); - expect(set2).toEqual(set3); - }); -}); - -describe('Issue #1287', () => { - it('should skip all items in OrderedMap when skipping Infinity', () => { - const size = OrderedMap([['a', 1]]).skip(Infinity).size; - expect(size).toEqual(0); - }); -}); - -describe('Issue #1247', () => { - it('Records should not be considered altered after creation', () => { - const R = Record({ a: 1 }); - const r = new R(); - expect(r.wasAltered()).toBe(false); - }); -}); - -describe('Issue #1252', () => { - it('should be toString-able even if it contains a value which is not', () => { - const prototypelessObj = Object.create(null); - const list = List([prototypelessObj]); - expect(list.toString()).toBe('List [ {} ]'); - }); -}); - -describe('Issue #1293', () => { - it('merge() should not deeply coerce values', () => { - type StateObject = { foo: string | { qux: string }; biz?: string }; - const State = Record({ foo: 'bar', biz: 'baz' }); - const deepObject = { qux: 'quux' }; - - const firstState = State({ foo: deepObject }); - const secondState = State().merge({ foo: deepObject }); - - expect(secondState).toEqual(firstState); - }); -}); - -describe('Issue #1643', () => { - [ - ['a string', 'test'], - ['a number', 5], - ['null', null], - ['undefined', undefined], - ['a boolean', true], - ['an object', {}], - ['an array', []], - ['a function', () => null], - ].forEach(([label, value]) => { - class MyClass { - valueOf() { - return value; - } - } - - it(`Collection#hashCode() should handle objects that return ${label} for valueOf`, () => { - const set = Set().add(new MyClass()); - expect(() => set.hashCode()).not.toThrow(); - }); - }); -}); - -describe('Issue #1785', () => { - it('merge() should not return undefined', () => { - const emptyRecord = Record({})(); - - expect(emptyRecord.merge({ id: 1 })).toBe(emptyRecord); - }); -}); - -describe('Issue #1475', () => { - it('complex case should return first value on mergeDeep when types are incompatible', () => { - const a = fromJS({ - ch: [ - { - code: 8, - }, - ], - }) as Map; - const b = fromJS({ - ch: { - code: 8, - }, - }); - expect(a.mergeDeep(b).equals(b)).toBe(true); - }); - - it('simple case should return first value on mergeDeep when types are incompatible', () => { - const a = fromJS({ - ch: [], - }) as Map; - const b = fromJS({ - ch: { code: 8 }, - }); - expect(a.merge(b).equals(b)).toBe(true); - }); -}); - -describe('Issue #1719', () => { - it('mergeDeep() should overwrite when types conflict', () => { - const objWithObj = fromJS({ - items: { - '1': { - id: '1', - }, - }, - }) as Map; - const objWithArray = fromJS({ - items: [ - { - id: '1', - }, - ], - }); - expect(objWithObj.mergeDeep(objWithArray).equals(objWithArray)).toBe(true); - }); -}); diff --git a/__tests__/join.ts b/__tests__/join.ts deleted file mode 100644 index 4d6d472835..0000000000 --- a/__tests__/join.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { Seq } from 'immutable'; -import fc from 'fast-check'; - -describe('join', () => { - it('string-joins sequences with commas by default', () => { - expect(Seq([1, 2, 3, 4, 5]).join()).toBe('1,2,3,4,5'); - }); - - it('string-joins sequences with any string', () => { - expect(Seq([1, 2, 3, 4, 5]).join('foo')).toBe('1foo2foo3foo4foo5'); - }); - - it('string-joins sequences with empty string', () => { - expect(Seq([1, 2, 3, 4, 5]).join('')).toBe('12345'); - }); - - it('joins sparse-sequences like Array.join', () => { - const a = [ - 1, - undefined, - 2, - undefined, - 3, - undefined, - 4, - undefined, - 5, - undefined, - undefined, - ]; - expect(Seq(a).join()).toBe(a.join()); - }); - - const genPrimitive = fc.oneof( - fc.string(), - fc.integer(), - fc.boolean(), - fc.constant(null), - fc.constant(undefined), - fc.constant(NaN) - ); - - it('behaves the same as Array.join', () => { - fc.assert( - fc.property(fc.array(genPrimitive), genPrimitive, (array, joiner) => { - // @ts-expect-error unexpected values for typescript joiner, but valid at runtime despite the unexpected errors - expect(Seq(array).join(joiner)).toBe(array.join(joiner)); - }) - ); - }); -}); diff --git a/__tests__/merge.ts b/__tests__/merge.ts deleted file mode 100644 index 14e934b4c0..0000000000 --- a/__tests__/merge.ts +++ /dev/null @@ -1,349 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { - fromJS, - List, - Map, - merge, - mergeDeep, - mergeDeepWith, - Record, - Set, -} from 'immutable'; - -describe('merge', () => { - it('merges two maps', () => { - const m1 = Map({ a: 1, b: 2, c: 3 }); - const m2 = Map({ d: 10, b: 20, e: 30 }); - expect(m1.merge(m2)).toEqual(Map({ a: 1, b: 20, c: 3, d: 10, e: 30 })); - }); - - it('can merge in an explicitly undefined value', () => { - const m1 = Map({ a: 1, b: 2 }); - const m2 = Map({ a: undefined }); - expect(m1.merge(m2)).toEqual(Map({ a: undefined, b: 2 })); - }); - - it('merges two maps with a merge function', () => { - const m1 = Map({ a: 1, b: 2, c: 3 }); - const m2 = Map({ d: 10, b: 20, e: 30 }); - expect(m1.mergeWith((a: number, b: number) => a + b, m2)).toEqual( - Map({ a: 1, b: 22, c: 3, d: 10, e: 30 }) - ); - }); - - it('throws typeError without merge function', () => { - const m1 = Map({ a: 1, b: 2, c: 3 }); - const m2 = Map({ d: 10, b: 20, e: 30 }); - // @ts-expect-error -- test that runtime does throw - expect(() => m1.mergeWith(1, m2)).toThrow(TypeError); - }); - - it('provides key as the third argument of merge function', () => { - const m1 = Map({ id: 'temp', b: 2, c: 3 }); - const m2 = Map({ id: 10, b: 20, e: 30 }); - const add = (a: number, b: number) => a + b; - expect( - // @ts-expect-error -- it's difficult to type `a` not as `string | number` - m1.mergeWith((a, b, key) => (key !== 'id' ? add(a, b) : b), m2) - ).toEqual(Map({ id: 10, b: 22, c: 3, e: 30 })); - }); - - it('deep merges two maps', () => { - const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }); - const m2 = fromJS({ a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }); - expect(m1.mergeDeep(m2)).toEqual( - fromJS({ a: { b: { c: 10, d: 2, e: 20 }, f: 30 }, g: 40 }) - ); - }); - - it('merge uses === for return-self optimization', () => { - const date1 = new Date(1234567890000); - // Value equal, but different reference. - const date2 = new Date(1234567890000); - const m = Map().set('a', date1); - expect(m.merge({ a: date2 })).not.toBe(m); - expect(m.merge({ a: date1 })).toBe(m); - }); - - it('deep merge uses === for return-self optimization', () => { - const date1 = new Date(1234567890000); - // Value equal, but different reference. - const date2 = new Date(1234567890000); - const m = Map().setIn(['a', 'b', 'c'], date1); - expect(m.mergeDeep({ a: { b: { c: date2 } } })).not.toBe(m); - expect(m.mergeDeep({ a: { b: { c: date1 } } })).toBe(m); - }); - - it('deep merges raw JS', () => { - const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }); - const js = { a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }; - expect(m1.mergeDeep(js)).toEqual( - fromJS({ a: { b: { c: 10, d: 2, e: 20 }, f: 30 }, g: 40 }) - ); - }); - - it('deep merges raw JS with a merge function', () => { - const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }); - const js = { a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }; - // @ts-expect-error type of `mergeDeepWith` is too lazy for now - expect(m1.mergeDeepWith((a: number, b: number) => a + b, js)).toEqual( - fromJS({ a: { b: { c: 11, d: 2, e: 20 }, f: 30 }, g: 40 }) - ); - }); - - it('deep merges raw JS into raw JS with a merge function', () => { - const js1 = { a: { b: { c: 1, d: 2 } } }; - const js2 = { a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }; - // @ts-expect-error type of `mergeDeepWith` is too lazy for now - expect(mergeDeepWith((a: number, b: number) => a + b, js1, js2)).toEqual({ - a: { b: { c: 11, d: 2, e: 20 }, f: 30 }, - g: 40, - }); - }); - - it('deep merges collections into raw JS with a merge function', () => { - const js = { a: { b: { c: 1, d: 2 } } }; - const m = fromJS({ a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }); - // @ts-expect-error type of `mergeDeepWith` is too lazy for now - expect(mergeDeepWith((a: number, b: number) => a + b, js, m)).toEqual({ - a: { b: { c: 11, d: 2, e: 20 }, f: 30 }, - g: 40, - }); - }); - - it('returns self when a deep merges is a no-op', () => { - const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }); - expect(m1.mergeDeep({ a: { b: { c: 1 } } })).toBe(m1); - }); - - it('returns arg when a deep merges is a no-op', () => { - const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }); - expect(Map().mergeDeep(m1)).toBe(m1); - }); - - it('returns self when a deep merges is a no-op on raw JS', () => { - const m1 = { a: { b: { c: 1, d: 2 } } }; - expect(mergeDeep(m1, { a: { b: { c: 1 } } })).toBe(m1); - }); - - it('can overwrite existing maps', () => { - expect( - fromJS({ a: { x: 1, y: 1 }, b: { x: 2, y: 2 } }).merge({ - a: null, - b: Map({ x: 10 }), - }) - ).toEqual(fromJS({ a: null, b: { x: 10 } })); - expect( - fromJS({ a: { x: 1, y: 1 }, b: { x: 2, y: 2 } }).mergeDeep({ - a: null, - b: { x: 10 }, - }) - ).toEqual(fromJS({ a: null, b: { x: 10, y: 2 } })); - }); - - it('can overwrite existing maps with objects', () => { - const m1 = fromJS({ a: { x: 1, y: 1 } }); // deep conversion. - const m2 = Map({ a: { z: 10 } }); // shallow conversion to Map. - - // Raw object simply replaces map. - expect(m1.merge(m2).get('a')).toEqual({ z: 10 }); // raw object. - // However, mergeDeep will merge that value into the inner Map. - expect(m1.mergeDeep(m2).get('a')).toEqual(Map({ x: 1, y: 1, z: 10 })); - }); - - it('merges map entries with List and Set values', () => { - const initial = Map({ - a: Map({ x: 10, y: 20 }), - b: List([1, 2, 3]), - c: Set([1, 2, 3]), - }); - const additions = Map({ - a: Map({ y: 50, z: 100 }), - b: List([4, 5, 6]), - c: Set([4, 5, 6]), - }); - expect(initial.mergeDeep(additions)).toEqual( - Map({ - a: Map({ x: 10, y: 50, z: 100 }), - b: List([1, 2, 3, 4, 5, 6]), - c: Set([1, 2, 3, 4, 5, 6]), - }) - ); - }); - - it('merges map entries with new values', () => { - const initial = Map({ a: List([1]) }); - - // Note: merge and mergeDeep do not deeply coerce values, they only merge - // with what's there prior. - expect(initial.merge({ b: [2] })).toEqual(Map({ a: List([1]), b: [2] })); - expect(initial.mergeDeep({ b: [2] })).toEqual( - fromJS(Map({ a: List([1]), b: [2] })) - ); - }); - - it('maintains JS values inside immutable collections', () => { - const m1 = fromJS({ a: { b: { imm: 'map' } } }); - const m2 = m1.mergeDeep(Map({ a: Map({ b: { plain: 'obj' } }) })); - - expect(m1.getIn(['a', 'b'])).toEqual(Map([['imm', 'map']])); - // However mergeDeep will merge that value into the inner Map - expect(m2.getIn(['a', 'b'])).toEqual(Map({ imm: 'map', plain: 'obj' })); - }); - - it('merges plain Objects', () => { - expect(merge({ x: 1, y: 1 }, { y: 2, z: 2 }, Map({ z: 3, q: 3 }))).toEqual({ - x: 1, - y: 2, - z: 3, - q: 3, - }); - }); - - it('merges plain Arrays', () => { - expect(merge([1, 2], [3, 4], List([5, 6]))).toEqual([1, 2, 3, 4, 5, 6]); - }); - - it('merging plain Array returns self after no-op', () => { - const a = [1, 2, 3]; - expect(merge(a, [], [])).toBe(a); - }); - - it('merges records with a size property set to 0', () => { - const Sizable = Record({ size: 0 }); - expect(Sizable().merge({ size: 123 }).size).toBe(123); - }); - - it('mergeDeep merges partial conflicts', () => { - const a = fromJS({ - ch: [ - { - code: 8, - }, - ], - banana: 'good', - }) as Map; - const b = fromJS({ - ch: { - code: 8, - }, - apple: 'anti-doctor', - }); - expect( - a.mergeDeep(b).equals( - fromJS({ - ch: { - code: 8, - }, - apple: 'anti-doctor', - banana: 'good', - }) - ) - ).toBe(true); - }); - - const map = { type: 'Map', value: Map({ b: 5, c: 9 }) }; - const object = { type: 'object', value: { b: 7, d: 12 } }; - const RecordFactory = Record({ a: 1, b: 2 }); - const record = { type: 'Record', value: RecordFactory({ b: 3 }) }; - const list = { type: 'List', value: List(['5']) }; - const array = { type: 'array', value: ['9'] }; - const set = { type: 'Set', value: Set('3') }; - - const incompatibleTypes = [ - [map, list], - [map, array], - [map, set], - [object, list], - [object, array], - [object, set], - [record, list], - [record, array], - [record, set], - [list, set], - ]; - - for (const [ - { type: type1, value: value1 }, - { type: type2, value: value2 }, - ] of incompatibleTypes) { - it(`mergeDeep and Map#mergeDeep replaces ${type1} and ${type2} with each other`, () => { - const aObject = { a: value1 }; - const bObject = { a: value2 }; - expect(mergeDeep(aObject, bObject)).toEqual(bObject); - expect(mergeDeep(bObject, aObject)).toEqual(aObject); - - const aMap = Map({ a: value1 }); - const bMap = Map({ a: value2 }); - expect(aMap.mergeDeep(bMap).equals(bMap)).toBe(true); - expect(bMap.mergeDeep(aMap).equals(aMap)).toBe(true); - }); - } - - const compatibleTypesAndResult = [ - [map, object, Map({ b: 7, c: 9, d: 12 })], - [map, record, Map({ a: 1, b: 3, c: 9 })], - [object, map, { b: 5, c: 9, d: 12 }], - [object, record, { a: 1, b: 3, d: 12 }], - [record, map, RecordFactory({ b: 5 })], - [record, object, RecordFactory({ b: 7 })], - [list, array, List(['5', '9'])], - [array, list, ['9', '5']], - [map, { type: 'Map', value: Map({ b: 7 }) }, Map({ b: 7, c: 9 })], - [object, { type: 'object', value: { d: 3 } }, { b: 7, d: 3 }], - [ - record, - { type: 'Record', value: RecordFactory({ a: 3 }) }, - RecordFactory({ a: 3, b: 2 }), - ], - [list, { type: 'List', value: List(['12']) }, List(['5', '12'])], - [array, { type: 'array', value: ['3'] }, ['9', '3']], - [set, { type: 'Set', value: Set(['3', '5']) }, Set(['3', '5'])], - ] as const; - - for (const [ - { type: type1, value: value1 }, - { type: type2, value: value2 }, - result, - ] of compatibleTypesAndResult) { - it(`mergeDeep and Map#mergeDeep merges ${type1} and ${type2}`, () => { - const aObject = { a: value1 }; - const bObject = { a: value2 }; - expect(mergeDeep(aObject, bObject)).toEqual({ a: result }); - - const aMap = Map({ a: value1 }); - const bMap = Map({ a: value2 }); - expect(aMap.mergeDeep(bMap)).toEqual(Map({ a: result })); - }); - } - - it('Map#mergeDeep replaces nested List with Map and Map with List', () => { - const a = Map({ a: List([Map({ x: 1 })]) }); - const b = Map({ a: Map([[0, Map({ y: 2 })]]) }); - expect(a.mergeDeep(b).equals(b)).toBe(true); - expect(b.mergeDeep(a).equals(a)).toBe(true); - }); - - it('functional mergeDeep replaces nested array with Map', () => { - const a = { a: [{ x: 1 }] }; - const b = Map({ a: Map([[0, Map({ y: 2 })]]) }); - expect(mergeDeep(a, b)).toEqual({ a: Map([[0, Map({ y: 2 })]]) }); - }); - - it('works with an empty Record', () => { - class MyRecord extends Record({ a: 1 }) {} - - const myRecord = new MyRecord(); - expect(merge(myRecord, { a: 4 })).toEqual( - new MyRecord({ - a: 4, - }) - ); - - class MyEmptyRecord extends Record({}) {} - - const myEmptyRecord = new MyEmptyRecord(); - // merging with an empty record should return the same empty record instance - expect(merge(myEmptyRecord, { a: 4 })).toBe(myEmptyRecord); - }); -}); diff --git a/__tests__/minmax.ts b/__tests__/minmax.ts deleted file mode 100644 index 9a4c7a3c59..0000000000 --- a/__tests__/minmax.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { is, Seq } from 'immutable'; -import fc from 'fast-check'; - -const genHeterogeneousishArray = fc.oneof( - fc.sparseArray(fc.string()), - fc.array(fc.oneof(fc.integer(), fc.constant(NaN))) -); - -describe('max', () => { - it('returns max in a sequence', () => { - expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).max()).toBe(9); - }); - - it('accepts a comparator', () => { - expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).max((a, b) => b - a)).toBe(1); - }); - - it('by a mapper', () => { - const family = Seq([ - { name: 'Oakley', age: 7 }, - { name: 'Dakota', age: 7 }, - { name: 'Casey', age: 34 }, - { name: 'Avery', age: 34 }, - ]); - expect(family.maxBy((p) => p.age)).toBe(family.get(2)); - }); - - it('by a mapper and a comparator', () => { - const family = Seq([ - { name: 'Oakley', age: 7 }, - { name: 'Dakota', age: 7 }, - { name: 'Casey', age: 34 }, - { name: 'Avery', age: 34 }, - ]); - expect( - family.maxBy( - (p) => p.age, - (a, b) => b - a - ) - ).toBe(family.get(0)); - }); - - it('surfaces NaN, null, and undefined', () => { - expect(is(NaN, Seq([1, 2, 3, 4, 5, NaN]).max())).toBe(true); - expect(is(NaN, Seq([NaN, 1, 2, 3, 4, 5]).max())).toBe(true); - expect(is(null, Seq(['A', 'B', 'C', 'D', null]).max())).toBe(true); - expect(is(null, Seq([null, 'A', 'B', 'C', 'D']).max())).toBe(true); - }); - - it('null treated as 0 in default iterator', () => { - expect(is(2, Seq([-1, -2, null, 1, 2]).max())).toBe(true); - }); - - it('is not dependent on order', () => { - fc.assert( - fc.property(genHeterogeneousishArray, (vals) => { - expect( - is( - Seq(shuffle(vals.slice())).max(), - Seq(vals).max() - ) - ).toEqual(true); - }) - ); - }); -}); - -describe('min', () => { - it('returns min in a sequence', () => { - expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).min()).toBe(1); - }); - - it('accepts a comparator', () => { - expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).min((a, b) => b - a)).toBe(9); - }); - - it('by a mapper', () => { - const family = Seq([ - { name: 'Oakley', age: 7 }, - { name: 'Dakota', age: 7 }, - { name: 'Casey', age: 34 }, - { name: 'Avery', age: 34 }, - ]); - expect(family.minBy((p) => p.age)).toBe(family.get(0)); - }); - - it('by a mapper and a comparator', () => { - const family = Seq([ - { name: 'Oakley', age: 7 }, - { name: 'Dakota', age: 7 }, - { name: 'Casey', age: 34 }, - { name: 'Avery', age: 34 }, - ]); - expect( - family.minBy( - (p) => p.age, - (a, b) => b - a - ) - ).toBe(family.get(2)); - }); - - it('is not dependent on order', () => { - fc.assert( - fc.property(genHeterogeneousishArray, (vals) => { - expect( - is( - Seq(shuffle(vals.slice())).min(), - Seq(vals).min() - ) - ).toEqual(true); - }) - ); - }); -}); - -function shuffle>(array: A): A { - let m = array.length; - let t; - let i; - - // While there remain elements to shuffle… - while (m) { - // Pick a remaining element… - i = Math.floor(Math.random() * m--); - - // And swap it with the current element. - t = array[m]; - array[m] = array[i]; - array[i] = t; - } - - return array; -} diff --git a/__tests__/partition.ts b/__tests__/partition.ts deleted file mode 100644 index 0a59b3d8ec..0000000000 --- a/__tests__/partition.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { beforeEach, describe, expect, it, jest } from '@jest/globals'; -import { - isAssociative, - isIndexed, - isKeyed, - isList, - isMap, - isSeq, - isSet, - List, - Map as IMap, - Seq, - Set as ISet, -} from 'immutable'; - -describe('partition', () => { - let isOdd: jest.Mock<(x: number) => number>; - - beforeEach(() => { - isOdd = jest.fn((x) => x % 2); - }); - - it('partitions keyed sequence', () => { - const parts = Seq({ a: 1, b: 2, c: 3, d: 4 }).partition(isOdd); - expect(isKeyed(parts[0])).toBe(true); - expect(isSeq(parts[0])).toBe(true); - expect(parts.map((part) => part.toJS())).toEqual([ - { b: 2, d: 4 }, - { a: 1, c: 3 }, - ]); - expect(isOdd.mock.calls.length).toBe(4); - - // Each group should be a keyed sequence, not an indexed sequence - const trueGroup = parts[1]; - expect(trueGroup && trueGroup.toArray()).toEqual([ - ['a', 1], - ['c', 3], - ]); - }); - - it('partitions indexed sequence', () => { - const parts = Seq([1, 2, 3, 4, 5, 6]).partition(isOdd); - expect(isIndexed(parts[0])).toBe(true); - expect(isSeq(parts[0])).toBe(true); - expect(parts.map((part) => part.toJS())).toEqual([ - [2, 4, 6], - [1, 3, 5], - ]); - expect(isOdd.mock.calls.length).toBe(6); - }); - - it('partitions set sequence', () => { - const parts = Seq.Set([1, 2, 3, 4, 5, 6]).partition(isOdd); - expect(isAssociative(parts[0])).toBe(false); - expect(isSeq(parts[0])).toBe(true); - expect(parts.map((part) => part.toJS())).toEqual([ - [2, 4, 6], - [1, 3, 5], - ]); - expect(isOdd.mock.calls.length).toBe(6); - }); - - it('partitions keyed collection', () => { - const parts = IMap({ a: 1, b: 2, c: 3, d: 4 }).partition(isOdd); - expect(isMap(parts[0])).toBe(true); - expect(isSeq(parts[0])).toBe(false); - expect(parts.map((part) => part.toJS())).toEqual([ - { b: 2, d: 4 }, - { a: 1, c: 3 }, - ]); - expect(isOdd.mock.calls.length).toBe(4); - - // Each group should be a keyed collection, not an indexed collection - const trueGroup = parts[1]; - expect(trueGroup && trueGroup.toArray()).toEqual([ - ['a', 1], - ['c', 3], - ]); - }); - - it('partitions indexed collection', () => { - const parts = List([1, 2, 3, 4, 5, 6]).partition(isOdd); - expect(isList(parts[0])).toBe(true); - expect(isSeq(parts[0])).toBe(false); - expect(parts.map((part) => part.toJS())).toEqual([ - [2, 4, 6], - [1, 3, 5], - ]); - expect(isOdd.mock.calls.length).toBe(6); - }); - - it('partitions set collection', () => { - const parts = ISet([1, 2, 3, 4, 5, 6]).partition(isOdd); - expect(isSet(parts[0])).toBe(true); - expect(isSeq(parts[0])).toBe(false); - expect(parts.map((part) => part.toJS().sort())).toEqual([ - [2, 4, 6], - [1, 3, 5], - ]); - expect(isOdd.mock.calls.length).toBe(6); - }); -}); diff --git a/__tests__/slice.ts b/__tests__/slice.ts deleted file mode 100644 index 07b763ff58..0000000000 --- a/__tests__/slice.ts +++ /dev/null @@ -1,299 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List, Range, Seq } from 'immutable'; -import fc from 'fast-check'; - -describe('slice', () => { - it('slices a sequence', () => { - expect(Seq([1, 2, 3, 4, 5, 6]).slice(2).toArray()).toEqual([3, 4, 5, 6]); - expect(Seq([1, 2, 3, 4, 5, 6]).slice(2, 4).toArray()).toEqual([3, 4]); - expect(Seq([1, 2, 3, 4, 5, 6]).slice(-3, -1).toArray()).toEqual([4, 5]); - expect(Seq([1, 2, 3, 4, 5, 6]).slice(-1).toArray()).toEqual([6]); - expect(Seq([1, 2, 3, 4, 5, 6]).slice(0, -1).toArray()).toEqual([ - 1, 2, 3, 4, 5, - ]); - }); - - it('creates an immutable stable sequence', () => { - const seq = Seq([1, 2, 3, 4, 5, 6]); - const sliced = seq.slice(2, -2); - expect(sliced.toArray()).toEqual([3, 4]); - expect(sliced.toArray()).toEqual([3, 4]); - expect(sliced.toArray()).toEqual([3, 4]); - }); - - it('slices a sparse indexed sequence', () => { - expect( - Seq([ - 1, - undefined, - 2, - undefined, - 3, - undefined, - 4, - undefined, - 5, - undefined, - 6, - ]) - .slice(1) - .toArray() - ).toEqual([ - undefined, - 2, - undefined, - 3, - undefined, - 4, - undefined, - 5, - undefined, - 6, - ]); - expect( - Seq([ - 1, - undefined, - 2, - undefined, - 3, - undefined, - 4, - undefined, - 5, - undefined, - 6, - ]) - .slice(2) - .toArray() - ).toEqual([2, undefined, 3, undefined, 4, undefined, 5, undefined, 6]); - expect( - Seq([ - 1, - undefined, - 2, - undefined, - 3, - undefined, - 4, - undefined, - 5, - undefined, - 6, - ]) - .slice(3, -3) - .toArray() - ).toEqual([undefined, 3, undefined, 4, undefined]); // one trailing hole. - }); - - it('can maintain indices for an keyed indexed sequence', () => { - expect( - Seq([1, 2, 3, 4, 5, 6]).toKeyedSeq().slice(2).entrySeq().toArray() - ).toEqual([ - [2, 3], - [3, 4], - [4, 5], - [5, 6], - ]); - expect( - Seq([1, 2, 3, 4, 5, 6]).toKeyedSeq().slice(2, 4).entrySeq().toArray() - ).toEqual([ - [2, 3], - [3, 4], - ]); - }); - - it('slices an unindexed sequence', () => { - expect(Seq({ a: 1, b: 2, c: 3 }).slice(1).toObject()).toEqual({ - b: 2, - c: 3, - }); - expect(Seq({ a: 1, b: 2, c: 3 }).slice(1, 2).toObject()).toEqual({ b: 2 }); - expect(Seq({ a: 1, b: 2, c: 3 }).slice(0, 2).toObject()).toEqual({ - a: 1, - b: 2, - }); - expect(Seq({ a: 1, b: 2, c: 3 }).slice(-1).toObject()).toEqual({ c: 3 }); - expect(Seq({ a: 1, b: 2, c: 3 }).slice(1, -1).toObject()).toEqual({ b: 2 }); - }); - - it('is reversable', () => { - expect(Seq([1, 2, 3, 4, 5, 6]).slice(2).reverse().toArray()).toEqual([ - 6, 5, 4, 3, - ]); - expect(Seq([1, 2, 3, 4, 5, 6]).slice(2, 4).reverse().toArray()).toEqual([ - 4, 3, - ]); - expect( - Seq([1, 2, 3, 4, 5, 6]) - .toKeyedSeq() - .slice(2) - .reverse() - .entrySeq() - .toArray() - ).toEqual([ - [5, 6], - [4, 5], - [3, 4], - [2, 3], - ]); - expect( - Seq([1, 2, 3, 4, 5, 6]) - .toKeyedSeq() - .slice(2, 4) - .reverse() - .entrySeq() - .toArray() - ).toEqual([ - [3, 4], - [2, 3], - ]); - }); - - it('slices a list', () => { - expect(List([1, 2, 3, 4, 5, 6]).slice(2).toArray()).toEqual([3, 4, 5, 6]); - expect(List([1, 2, 3, 4, 5, 6]).slice(2, 4).toArray()).toEqual([3, 4]); - }); - - it('returns self for whole slices', () => { - const s = Seq([1, 2, 3]); - expect(s.slice(0)).toBe(s); - expect(s.slice(0, 3)).toBe(s); - expect(s.slice(-4, 4)).toBe(s); - - const v = List([1, 2, 3]); - expect(v.slice(-4, 4)).toBe(v); - expect(v.slice(-3)).toBe(v); - expect(v.slice(-4, 4).toList()).toBe(v); - }); - - it('creates a sliced list in O(log32(n))', () => { - expect(List([1, 2, 3, 4, 5]).slice(-3, -1).toList().toArray()).toEqual([ - 3, 4, - ]); - }); - - it('has the same behavior as array slice in known edge cases', () => { - const a = Range(0, 33).toArray(); - const v = List(a); - expect(v.slice(31).toList().toArray()).toEqual(a.slice(31)); - }); - - it('does not slice by floating-point numbers', () => { - const seq = Seq([0, 1, 2, 3, 4, 5]); - const sliced = seq.slice(0, 2.6); - expect(sliced.size).toEqual(2); - expect(sliced.toArray()).toEqual([0, 1]); - }); - - it('can create an iterator', () => { - const seq = Seq([0, 1, 2, 3, 4, 5]); - const iterFront = seq.slice(0, 2).values(); - expect(iterFront.next()).toEqual({ value: 0, done: false }); - expect(iterFront.next()).toEqual({ value: 1, done: false }); - expect(iterFront.next()).toEqual({ value: undefined, done: true }); - - const iterMiddle = seq.slice(2, 4).values(); - expect(iterMiddle.next()).toEqual({ value: 2, done: false }); - expect(iterMiddle.next()).toEqual({ value: 3, done: false }); - expect(iterMiddle.next()).toEqual({ value: undefined, done: true }); - - const iterTail = seq.slice(4, 123456).values(); - expect(iterTail.next()).toEqual({ value: 4, done: false }); - expect(iterTail.next()).toEqual({ value: 5, done: false }); - expect(iterTail.next()).toEqual({ value: undefined, done: true }); - }); - - it('stops the entries iterator when the sequence has an undefined end', () => { - let seq = Seq([0, 1, 2, 3, 4, 5]); - // flatMap is lazy and thus the resulting sequence has no size. - seq = seq.flatMap((a) => [a]); - expect(seq.size).toEqual(undefined); - - const iterFront = seq.slice(0, 2).entries(); - expect(iterFront.next()).toEqual({ value: [0, 0], done: false }); - expect(iterFront.next()).toEqual({ value: [1, 1], done: false }); - expect(iterFront.next()).toEqual({ value: undefined, done: true }); - - const iterMiddle = seq.slice(2, 4).entries(); - expect(iterMiddle.next()).toEqual({ value: [0, 2], done: false }); - expect(iterMiddle.next()).toEqual({ value: [1, 3], done: false }); - expect(iterMiddle.next()).toEqual({ value: undefined, done: true }); - - const iterTail = seq.slice(4, 123456).entries(); - expect(iterTail.next()).toEqual({ value: [0, 4], done: false }); - expect(iterTail.next()).toEqual({ value: [1, 5], done: false }); - expect(iterTail.next()).toEqual({ value: undefined, done: true }); - }); - - it('works like Array.prototype.slice', () => { - fc.assert( - fc.property( - fc.integer({ min: -1000, max: 1000 }), - fc.sparseArray(fc.integer({ min: -1000, max: 1000 }), { maxLength: 3 }), - (valuesLen, args) => { - const a = Range(0, valuesLen).toArray(); - const v = List(a); - const slicedV = v.slice.apply(v, args); - const slicedA = a.slice.apply(a, args); - expect(slicedV.toArray()).toEqual(slicedA); - } - ) - ); - }); - - it('works like Array.prototype.slice on sparse array input', () => { - fc.assert( - fc.property( - fc.array(fc.tuple(fc.nat(1000), fc.integer({ min: -1000, max: 1000 }))), - fc.sparseArray(fc.integer({ min: -1000, max: 1000 }), { maxLength: 3 }), - (entries, args) => { - const a: Array = []; - entries.forEach((entry) => (a[entry[0]] = entry[1])); - const s = Seq(a); - const slicedS = s.slice.apply(s, args); - const slicedA = a.slice.apply(a, args); - expect(slicedS.toArray()).toEqual(slicedA); - } - ) - ); - }); - - describe('take', () => { - it('takes the first n from a list', () => { - fc.assert( - fc.property( - fc.integer({ min: -1000, max: 1000 }), - fc.nat(1000), - (len, num) => { - const a = Range(0, len).toArray(); - const v = List(a); - expect(v.take(num).toArray()).toEqual(a.slice(0, num)); - } - ) - ); - }); - - it('creates an immutable stable sequence', () => { - const seq = Seq([1, 2, 3, 4, 5, 6]); - const sliced = seq.take(3); - expect(sliced.toArray()).toEqual([1, 2, 3]); - expect(sliced.toArray()).toEqual([1, 2, 3]); - expect(sliced.toArray()).toEqual([1, 2, 3]); - }); - - it('converts to array with correct length', () => { - const seq = Seq([1, 2, 3, 4, 5, 6]); - const s1 = seq.take(3); - const s2 = seq.take(10); - const sn = seq.take(Infinity); - const s3 = seq.filter((v) => v < 4).take(10); - const s4 = seq.filter((v) => v < 4).take(2); - expect(s1.toArray().length).toEqual(3); - expect(s2.toArray().length).toEqual(6); - expect(sn.toArray().length).toEqual(6); - expect(s3.toArray().length).toEqual(3); - expect(s4.toArray().length).toEqual(2); - }); - }); -}); diff --git a/__tests__/sort.ts b/__tests__/sort.ts deleted file mode 100644 index 0a5afbf9ad..0000000000 --- a/__tests__/sort.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List, OrderedMap, Range, Seq } from 'immutable'; - -describe('sort', () => { - it('sorts a sequence', () => { - expect(Seq([4, 5, 6, 3, 2, 1]).sort().toArray()).toEqual([ - 1, 2, 3, 4, 5, 6, - ]); - }); - - it('sorts a list', () => { - expect(List([4, 5, 6, 3, 2, 1]).sort().toArray()).toEqual([ - 1, 2, 3, 4, 5, 6, - ]); - }); - - it('sorts undefined values last', () => { - expect( - List([4, undefined, 5, 6, 3, undefined, 2, 1]).sort().toArray() - ).toEqual([1, 2, 3, 4, 5, 6, undefined, undefined]); - }); - - it('sorts a keyed sequence', () => { - expect( - Seq({ z: 1, y: 2, x: 3, c: 3, b: 2, a: 1 }).sort().entrySeq().toArray() - ).toEqual([ - ['z', 1], - ['a', 1], - ['y', 2], - ['b', 2], - ['x', 3], - ['c', 3], - ]); - }); - - it('sorts an OrderedMap', () => { - expect( - OrderedMap({ z: 1, y: 2, x: 3, c: 3, b: 2, a: 1 }) - .sort() - .entrySeq() - .toArray() - ).toEqual([ - ['z', 1], - ['a', 1], - ['y', 2], - ['b', 2], - ['x', 3], - ['c', 3], - ]); - }); - - it('accepts a sort function', () => { - expect( - Seq([4, 5, 6, 3, 2, 1]) - .sort((a, b) => b - a) - .toArray() - ).toEqual([6, 5, 4, 3, 2, 1]); - }); - - it('sorts by using a mapper', () => { - expect( - Range(1, 10) - .sortBy((v) => v % 3) - .toArray() - ).toEqual([3, 6, 9, 1, 4, 7, 2, 5, 8]); - }); - - it('sorts by using a mapper and a sort function', () => { - expect( - Range(1, 10) - .sortBy( - (v) => v % 3, - (a: number, b: number) => b - a - ) - .toArray() - ).toEqual([2, 5, 8, 1, 4, 7, 3, 6, 9]); - }); -}); diff --git a/__tests__/splice.ts b/__tests__/splice.ts deleted file mode 100644 index cb90281016..0000000000 --- a/__tests__/splice.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List, Range, Seq } from 'immutable'; -import fc from 'fast-check'; - -describe('splice', () => { - it('splices a sequence only removing elements', () => { - expect(Seq([1, 2, 3]).splice(0, 1).toArray()).toEqual([2, 3]); - expect(Seq([1, 2, 3]).splice(1, 1).toArray()).toEqual([1, 3]); - expect(Seq([1, 2, 3]).splice(2, 1).toArray()).toEqual([1, 2]); - expect(Seq([1, 2, 3]).splice(3, 1).toArray()).toEqual([1, 2, 3]); - }); - - it('splices a list only removing elements', () => { - expect(List([1, 2, 3]).splice(0, 1).toArray()).toEqual([2, 3]); - expect(List([1, 2, 3]).splice(1, 1).toArray()).toEqual([1, 3]); - expect(List([1, 2, 3]).splice(2, 1).toArray()).toEqual([1, 2]); - expect(List([1, 2, 3]).splice(3, 1).toArray()).toEqual([1, 2, 3]); - }); - - it('splicing by infinity', () => { - const l = List(['a', 'b', 'c', 'd']); - expect(l.splice(2, Infinity, 'x').toArray()).toEqual(['a', 'b', 'x']); - expect(l.splice(Infinity, 2, 'x').toArray()).toEqual([ - 'a', - 'b', - 'c', - 'd', - 'x', - ]); - - const s = List(['a', 'b', 'c', 'd']); - expect(s.splice(2, Infinity, 'x').toArray()).toEqual(['a', 'b', 'x']); - expect(s.splice(Infinity, 2, 'x').toArray()).toEqual([ - 'a', - 'b', - 'c', - 'd', - 'x', - ]); - }); - - it('has the same behavior as array splice in known edge cases', () => { - // arbitrary numbers that sum to 31 - const a = Range(0, 49).toArray(); - const v = List(a); - a.splice(-18, 0, 0); - expect(v.splice(-18, 0, 0).toList().toArray()).toEqual(a); - }); - - it('has the same behavior as array splice', () => { - fc.assert( - fc.property( - fc.array(fc.integer()), - fc.array(fc.sparseArray(fc.integer())), - (values, args) => { - const v = List(values); - const a = values.slice(); // clone - const splicedV = v.splice.apply(v, args); // persistent - a.splice.apply(a, args); // mutative - expect(splicedV.toArray()).toEqual(a); - } - ) - ); - }); -}); diff --git a/__tests__/transformerProtocol.ts b/__tests__/transformerProtocol.ts deleted file mode 100644 index c3cedb3577..0000000000 --- a/__tests__/transformerProtocol.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import * as t from 'transducers-js'; -import { List, Map, Set, Stack } from 'immutable'; - -describe('Transformer Protocol', () => { - it('transduces Stack without initial values', () => { - const s = Stack.of(1, 2, 3, 4); - const xform = t.comp( - t.filter((x) => x % 2 === 0), - t.map((x) => x + 1) - ); - const s2 = t.transduce(xform, Stack(), s); - expect(s.toArray()).toEqual([1, 2, 3, 4]); - expect(s2.toArray()).toEqual([5, 3]); - }); - - it('transduces Stack with initial values', () => { - const v1 = Stack.of(1, 2, 3); - const v2 = Stack.of(4, 5, 6, 7); - const xform = t.comp( - t.filter((x) => x % 2 === 0), - t.map((x) => x + 1) - ); - const r = t.transduce(xform, Stack(), v1, v2); - expect(v1.toArray()).toEqual([1, 2, 3]); - expect(v2.toArray()).toEqual([4, 5, 6, 7]); - expect(r.toArray()).toEqual([7, 5, 1, 2, 3]); - }); - - it('transduces List without initial values', () => { - const v = List.of(1, 2, 3, 4); - const xform = t.comp( - t.filter((x) => x % 2 === 0), - t.map((x) => x + 1) - ); - const r = t.transduce(xform, List(), v); - expect(v.toArray()).toEqual([1, 2, 3, 4]); - expect(r.toArray()).toEqual([3, 5]); - }); - - it('transduces List with initial values', () => { - const v1 = List.of(1, 2, 3); - const v2 = List.of(4, 5, 6, 7); - const xform = t.comp( - t.filter((x) => x % 2 === 0), - t.map((x) => x + 1) - ); - const r = t.transduce(xform, List(), v1, v2); - expect(v1.toArray()).toEqual([1, 2, 3]); - expect(v2.toArray()).toEqual([4, 5, 6, 7]); - expect(r.toArray()).toEqual([1, 2, 3, 5, 7]); - }); - - it('transduces Map without initial values', () => { - const m1 = Map({ a: 1, b: 2, c: 3, d: 4 }); - const xform = t.comp( - t.filter(([_k, v]) => v % 2 === 0), - t.map(([k, v]) => [k, v * 2]) - ); - const m2 = t.transduce(xform, Map(), m1); - expect(m1.toObject()).toEqual({ a: 1, b: 2, c: 3, d: 4 }); - expect(m2.toObject()).toEqual({ b: 4, d: 8 }); - }); - - it('transduces Map with initial values', () => { - const m1 = Map({ a: 1, b: 2, c: 3 }); - const m2 = Map({ a: 4, b: 5 }); - const xform = t.comp( - t.filter(([_k, v]) => v % 2 === 0), - t.map(([k, v]) => [k, v * 2]) - ); - const m3 = t.transduce(xform, Map(), m1, m2); - expect(m1.toObject()).toEqual({ a: 1, b: 2, c: 3 }); - expect(m2.toObject()).toEqual({ a: 4, b: 5 }); - expect(m3.toObject()).toEqual({ a: 8, b: 2, c: 3 }); - }); - - it('transduces Set without initial values', () => { - const s1 = Set.of(1, 2, 3, 4); - const xform = t.comp( - t.filter((x) => x % 2 === 0), - t.map((x) => x + 1) - ); - const s2 = t.transduce(xform, Set(), s1); - expect(s1.toArray()).toEqual([1, 2, 3, 4]); - expect(s2.toArray()).toEqual([3, 5]); - }); - - it('transduces Set with initial values', () => { - const s1 = Set.of(1, 2, 3, 4); - const s2 = Set.of(2, 3, 4, 5, 6); - const xform = t.comp( - t.filter((x) => x % 2 === 0), - t.map((x) => x + 1) - ); - const s3 = t.transduce(xform, Set(), s1, s2); - expect(s1.toArray()).toEqual([1, 2, 3, 4]); - expect(s2.toArray()).toEqual([2, 3, 4, 5, 6]); - expect(s3.toArray()).toEqual([1, 2, 3, 4, 5, 7]); - }); -}); diff --git a/__tests__/ts-utils.ts b/__tests__/ts-utils.ts deleted file mode 100644 index d4cc759e68..0000000000 --- a/__tests__/ts-utils.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { expect } from '@jest/globals'; - -export function expectToBeDefined( - arg: T -): asserts arg is Exclude { - expect(arg).toBeDefined(); -} diff --git a/__tests__/tsconfig.json b/__tests__/tsconfig.json deleted file mode 100644 index 78742cd9bd..0000000000 --- a/__tests__/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "noEmit": true, - // TODO: add additional strictness - "strictNullChecks": true, - "strictFunctionTypes": true, - "target": "esnext", - "moduleResolution": "node", - "skipLibCheck": true, - "paths": { - "immutable": ["../type-definitions/immutable.d.ts"] - } - } -} diff --git a/__tests__/updateIn.ts b/__tests__/updateIn.ts deleted file mode 100644 index 1ca054f979..0000000000 --- a/__tests__/updateIn.ts +++ /dev/null @@ -1,457 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { - fromJS, - List, - Map, - MapOf, - removeIn, - Seq, - Set, - setIn, - updateIn, -} from 'immutable'; - -describe('updateIn', () => { - it('deep edit', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect( - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - m.updateIn(['a', 'b', 'c'], (value: number) => value * 2).toJS() - ).toEqual({ - a: { b: { c: 20 } }, - }); - }); - - it('deep edit with list as keyPath', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect( - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - m.updateIn(fromJS(['a', 'b', 'c']), (value: number) => value * 2).toJS() - ).toEqual({ a: { b: { c: 20 } } }); - }); - - it('deep edit in raw JS', () => { - const m = { a: { b: { c: [10] } } }; - expect( - updateIn(m, ['a', 'b', 'c', 0], (value: number) => value * 2) - ).toEqual({ - a: { b: { c: [20] } }, - }); - }); - - it('deep edit throws without list or array-like', () => { - // @ts-expect-error -- test that runtime does throw - expect(() => Map().updateIn(undefined, (x) => x)).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: undefined' - ); - // @ts-expect-error -- test that runtime does th - expect(() => Map().updateIn({ a: 1, b: 2 }, (x) => x)).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: [object Object]' - ); - expect(() => Map().updateIn('abc', (x) => x)).toThrow( - 'Invalid keyPath: expected Ordered Collection or Array: abc' - ); - }); - - it('deep edit throws if non-editable path', () => { - const deep = Map({ key: Set([List(['item'])]) }); - expect(() => deep.updateIn(['key', 'foo', 'item'], () => 'newval')).toThrow( - 'Cannot update immutable value without .set() method: Set { List [ "item" ] }' - ); - - const deepSeq = Map({ key: Seq([List(['item'])]) }); - expect(() => - deepSeq.updateIn(['key', 'foo', 'item'], () => 'newval') - ).toThrow( - 'Cannot update immutable value without .set() method: Seq [ List [ "item" ] ]' - ); - - const nonObj = Map({ key: 123 }); - expect(() => nonObj.updateIn(['key', 'foo'], () => 'newval')).toThrow( - 'Cannot update within non-data-structure value in path ["key"]: 123' - ); - }); - - it('handle ArrayLike objects that are nor Array not immutable Collection', () => { - class CustomArrayLike implements ArrayLike { - readonly length: number; - [n: number]: T; - - constructor(...values: Array) { - this.length = values.length; - - for (let i = 0; i < values.length; i++) { - this[i] = values[i]; - } - } - - // Define other methods if needed, but do not include the `slice` method - // For example, you can define a method to set values - set(index: number, value: T): void { - if (index < 0 || index >= this.length) { - throw new RangeError('Index out of bounds'); - } - - this[index] = value; - } - - // Define a method to get values - get(index: number): T { - if (index < 0 || index >= this.length) { - throw new RangeError('Index out of bounds'); - } - - return this[index]; - } - } - - // create an ArrayLike - const customArray = new CustomArrayLike(10, 20); - - // code that works perfectly - expect( - updateIn({ 10: { 20: 'a' } }, customArray, (v) => - // @ts-expect-error -- `updateIn` keypath type should be `OrderedCollection | ArrayLike; - typeof v === 'string' ? v.toUpperCase() : v - ) - ).toEqual({ 10: { 20: 'A' } }); - - expect(() => - updateIn({ 10: 'a' }, customArray, (v) => - // @ts-expect-error -- `updateIn` keypath type should be `OrderedCollection | ArrayLike; - typeof v === 'string' ? v.toUpperCase() : v - ) - ).toThrow('Cannot update within non-data-structure value in path [10]: a'); - }); - - it('identity with notSetValue is still identity', () => { - const m = Map({ a: { b: { c: 10 } } }); - expect(m.updateIn(['x'], 100, (id) => id)).toEqual(m); - }); - - it('shallow remove', () => { - const m = Map({ a: 123 }); - expect(m.updateIn([], () => undefined)).toEqual(undefined); - }); - - it('deep remove', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect( - m - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - .updateIn(['a', 'b'], (map: MapOf<{ c: number }>) => map.remove('c')) - .toJS() - ).toEqual({ - a: { b: {} }, - }); - }); - - it('deep set', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect( - m - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - .updateIn(['a', 'b'], (map: MapOf<{ c: number }>) => map.set('d', 20)) - .toJS() - ).toEqual({ - a: { b: { c: 10, d: 20 } }, - }); - }); - - it('deep push', () => { - const m = fromJS({ a: { b: [1, 2, 3] } }); - expect( - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - m.updateIn(['a', 'b'], (list: List) => list.push(4)).toJS() - ).toEqual({ - a: { b: [1, 2, 3, 4] }, - }); - }); - - it('deep map', () => { - const m = fromJS({ a: { b: [1, 2, 3] } }); - expect( - m - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - .updateIn(['a', 'b'], (list: List) => - list.map((value) => value * 10) - ) - .toJS() - ).toEqual({ a: { b: [10, 20, 30] } }); - }); - - it('creates new maps if path contains gaps', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect( - m - .updateIn( - ['a', 'q', 'z'], - Map(), - // @ts-expect-error -- updateIn should handle the `notSetValue` parameter - (map: Map) => map.set('d', 20) - ) - .toJS() - ).toEqual({ a: { b: { c: 10 }, q: { z: { d: 20 } } } }); - }); - - it('creates new objects if path contains gaps within raw JS', () => { - const m = { a: { b: { c: 10 } } }; - expect( - updateIn( - m, - ['a', 'b', 'z'], - Map(), - (map: Map) => map.set('d', 20) - ) - ).toEqual({ a: { b: { c: 10, z: Map({ d: 20 }) } } }); - }); - - it('throws if path cannot be set', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - expect(() => { - m.updateIn(['a', 'b', 'c', 'd'], () => 20).toJS(); - }).toThrow( - 'Cannot update within non-data-structure value in path ["a","b","c"]: 10' - ); - }); - - it('update with notSetValue when non-existing key', () => { - const m = Map({ a: { b: { c: 10 } } }); - // @ts-expect-error -- updateIn should handle the `notSetValue` parameter - expect(m.updateIn(['x'], 100, (map: number) => map + 1).toJS()).toEqual({ - a: { b: { c: 10 } }, - x: 101, - }); - }); - - it('update with notSetValue when non-existing key in raw JS', () => { - const m = { a: { b: { c: 10 } } }; - expect(updateIn(m, ['x'], 100, (map: number) => map + 1)).toEqual({ - a: { b: { c: 10 } }, - x: 101, - }); - }); - - it('updates self for empty path', () => { - const m = fromJS({ a: 1, b: 2, c: 3 }); - // @ts-expect-error -- type of fromJS may return a MapOf in the future, to help `updateIn` to work, `updateIn` should copy the comportment of `getIn` - expect(m.updateIn([], (map: typeof m) => map.set('b', 20)).toJS()).toEqual({ - a: 1, - b: 20, - c: 3, - }); - }); - - it('does not perform edit when new value is the same as old value', () => { - const m = fromJS({ a: { b: { c: 10 } } }); - const m2 = m.updateIn(['a', 'b', 'c'], (id) => id); - expect(m2).toBe(m); - }); - - it('does not perform edit when new value is the same as old value in raw JS', () => { - const m = { a: { b: { c: 10 } } }; - const m2 = updateIn(m, ['a', 'b', 'c'], (id) => id); - expect(m2).toBe(m); - }); - - it('does not perform edit when notSetValue is what you return from updater', () => { - const m = Map(); - let spiedOnID; - const m2 = m.updateIn(['a', 'b', 'c'], Set(), (id) => (spiedOnID = id)); - expect(m2).toBe(m); - expect(spiedOnID).toBe(Set()); - }); - - it('provides default notSetValue of undefined', () => { - const m = Map(); - let spiedOnID; - const m2 = m.updateIn(['a', 'b', 'c'], (id) => (spiedOnID = id)); - expect(m2).toBe(m); - expect(spiedOnID).toBe(undefined); - }); - - describe('setIn', () => { - it('provides shorthand for updateIn to set a single value', () => { - const m = Map().setIn(['a', 'b', 'c'], 'X'); - expect(m).toEqual(fromJS({ a: { b: { c: 'X' } } })); - }); - - it('accepts a list as a keyPath', () => { - const m = Map().setIn(fromJS(['a', 'b', 'c']), 'X'); - expect(m).toEqual(fromJS({ a: { b: { c: 'X' } } })); - }); - - it('returns value when setting empty path', () => { - const m = Map(); - expect(m.setIn([], 'X')).toBe('X'); - }); - - it('can setIn undefined', () => { - const m = Map().setIn(['a', 'b', 'c'], undefined); - expect(m).toEqual(Map({ a: Map({ b: Map({ c: undefined }) }) })); - }); - - it('returns self for a no-op', () => { - const m = fromJS({ a: { b: { c: 123 } } }); - expect(m.setIn(['a', 'b', 'c'], 123)).toBe(m); - }); - - it('provides shorthand for updateIn to set a single value in raw JS', () => { - const m = setIn({}, ['a', 'b', 'c'], 'X'); - expect(m).toEqual({ a: { b: { c: 'X' } } }); - }); - - it('accepts a list as a keyPath in raw JS', () => { - const m = setIn({}, fromJS(['a', 'b', 'c']), 'X'); - expect(m).toEqual({ a: { b: { c: 'X' } } }); - }); - - it('returns value when setting empty path in raw JS', () => { - expect(setIn({}, [], 'X')).toBe('X'); - }); - - it('can setIn undefined in raw JS', () => { - const m = setIn({}, ['a', 'b', 'c'], undefined); - expect(m).toEqual({ a: { b: { c: undefined } } }); - }); - - it('returns self for a no-op in raw JS', () => { - const m = { a: { b: { c: 123 } } }; - expect(setIn(m, ['a', 'b', 'c'], 123)).toBe(m); - }); - }); - - describe('removeIn', () => { - it('provides shorthand for updateIn to remove a single value', () => { - const m = fromJS({ a: { b: { c: 'X', d: 'Y' } } }) as Map< - string, - unknown - >; - expect(m.removeIn(['a', 'b', 'c']).toJS()).toEqual({ - a: { b: { d: 'Y' } }, - }); - }); - - it('accepts a list as a keyPath', () => { - const m = fromJS({ a: { b: { c: 'X', d: 'Y' } } }) as Map< - string, - unknown - >; - expect(m.removeIn(fromJS(['a', 'b', 'c'])).toJS()).toEqual({ - a: { b: { d: 'Y' } }, - }); - }); - - it('does not create empty maps for an unset path', () => { - const m = Map(); - expect(m.removeIn(['a', 'b', 'c']).toJS()).toEqual({}); - }); - - it('removes itself when removing empty path', () => { - const m = Map(); - expect(m.removeIn([])).toBe(undefined); - }); - - it('removes values from a Set', () => { - const m = Map({ set: Set([1, 2, 3]) }); - const m2 = m.removeIn(['set', 2]); - expect(m2.toJS()).toEqual({ set: [1, 3] }); - }); - - it('returns undefined when removing an empty path in raw JS', () => { - expect(removeIn({}, [])).toBe(undefined); - }); - - it('can removeIn in raw JS', () => { - const m = removeIn({ a: { b: { c: 123 } } }, ['a', 'b', 'c']); - expect(m).toEqual({ a: { b: { c: undefined } } }); - }); - - it('returns self for a no-op in raw JS', () => { - const m = { a: { b: { c: 123 } } }; - expect(removeIn(m, ['a', 'b', 'd'])).toBe(m); - }); - }); - - describe('mergeIn', () => { - it('provides shorthand for updateIn to merge a nested value', () => { - const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }); - const m2 = fromJS({ d: 10, b: 20, e: 30 }); - expect(m1.mergeIn(['x'], m2).toJS()).toEqual({ - x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, - }); - }); - - it('accepts a list as a keyPath', () => { - const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }); - const m2 = fromJS({ d: 10, b: 20, e: 30 }); - expect(m1.mergeIn(fromJS(['x']), m2).toJS()).toEqual({ - x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, - }); - }); - - it('does not create empty maps for a no-op merge', () => { - const m = Map(); - expect(m.mergeIn(['a', 'b', 'c'], Map()).toJS()).toEqual({}); - }); - - it('merges into itself for empty path', () => { - const m = Map({ a: 1, b: 2, c: 3 }); - expect(m.mergeIn([], Map({ d: 10, b: 20, e: 30 })).toJS()).toEqual({ - a: 1, - b: 20, - c: 3, - d: 10, - e: 30, - }); - }); - - it('merges into plain JS Object and Array', () => { - const m = Map({ a: { x: [1, 2, 3] } }); - expect(m.mergeIn(['a', 'x'], [4, 5, 6])).toEqual( - Map({ a: { x: [1, 2, 3, 4, 5, 6] } }) - ); - }); - }); - - describe('mergeDeepIn', () => { - it('provides shorthand for updateIn to merge a nested value', () => { - const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }); - const m2 = fromJS({ d: 10, b: 20, e: 30 }); - expect(m1.mergeDeepIn(['x'], m2).toJS()).toEqual({ - x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, - }); - }); - - it('accepts a list as a keyPath', () => { - const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }); - const m2 = fromJS({ d: 10, b: 20, e: 30 }); - expect(m1.mergeDeepIn(fromJS(['x']), m2).toJS()).toEqual({ - x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, - }); - }); - - it('does not create empty maps for a no-op merge', () => { - const m = Map(); - expect(m.mergeDeepIn(['a', 'b', 'c'], Map()).toJS()).toEqual({}); - }); - - it('merges into itself for empty path', () => { - const m = Map({ a: 1, b: 2, c: 3 }); - expect(m.mergeDeepIn([], Map({ d: 10, b: 20, e: 30 })).toJS()).toEqual({ - a: 1, - b: 20, - c: 3, - d: 10, - e: 30, - }); - }); - - it('merges deep into plain JS Object and Array', () => { - const m = Map({ a: { x: [1, 2, 3] } }); - expect(m.mergeDeepIn(['a'], { x: [4, 5, 6] })).toEqual( - Map({ a: { x: [1, 2, 3, 4, 5, 6] } }) - ); - }); - }); -}); diff --git a/__tests__/utils.js b/__tests__/utils.js deleted file mode 100644 index 1d1c6b0e44..0000000000 --- a/__tests__/utils.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @jest-environment jsdom - */ - -import { List, isPlainObject } from 'immutable'; - -describe('Utils', () => { - describe('isPlainObj()', function testFunc() { - const nonPlainCases = [ - ['Host object', document.createElement('div')], - ['bool primitive false', false], - ['bool primitive true', true], - ['falsy undefined', undefined], - ['falsy null', null], - ['Simple function', function () {}], - [ - 'Instance of other object', - (function () { - function Foo() {} - return new Foo(); - })(), - ], - ['Number primitive ', 5], - ['String primitive ', 'P'], - ['Number Object', Number(6)], - ['Immutable.List', new List()], - ['simple array', ['one']], - ['Error', Error], - ['Internal namespaces', Math], - ['Arguments', arguments], - ]; - const plainCases = [ - ['literal Object', {}], - // eslint-disable-next-line no-object-constructor - ['new Object', new Object()], - ['Object.create(null)', Object.create(null)], - ['nested object', { one: { prop: 'two' } }], - ['constructor prop', { constructor: 'prop' }], // shadows an object's constructor - ['constructor.name', { constructor: { name: 'two' } }], // shadows an object's constructor.name - [ - 'Fake toString', - { - toString: function () { - return '[object Object]'; - }, - }, - ], - ]; - - nonPlainCases.forEach(([name, value]) => { - it(`${name} returns false`, () => { - expect(isPlainObject(value)).toBe(false); - }); - }); - - plainCases.forEach(([name, value]) => { - it(`${name} returns true`, () => { - expect(isPlainObject(value)).toBe(true); - }); - }); - }); -}); diff --git a/__tests__/zip.ts b/__tests__/zip.ts deleted file mode 100644 index 4487fa1b95..0000000000 --- a/__tests__/zip.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { List, Range, Seq } from 'immutable'; -import fc from 'fast-check'; -import { expectToBeDefined } from './ts-utils'; - -describe('zip', () => { - it('zips lists into a list of tuples', () => { - expect( - Seq([1, 2, 3]) - .zip(Seq([4, 5, 6])) - .toArray() - ).toEqual([ - [1, 4], - [2, 5], - [3, 6], - ]); - }); - - it('zip results can be converted to JS', () => { - const l1 = List([List([1]), List([2]), List([3])]); - const l2 = List([List([4]), List([5]), List([6])]); - const zipped = l1.zip(l2); - expect(zipped).toEqual( - List([ - [List([1]), List([4])], - [List([2]), List([5])], - [List([3]), List([6])], - ]) - ); - expect(zipped.toJS()).toEqual([ - [[1], [4]], - [[2], [5]], - [[3], [6]], - ]); - }); - - it('zips with infinite lists', () => { - expect( - Range(0, Infinity) - .zip(Seq(['A', 'B', 'C'])) - .toArray() - ).toEqual([ - [0, 'A'], - [1, 'B'], - [2, 'C'], - ]); - }); - - it('has unknown size when zipped with unknown size', () => { - const seq = Range(0, 10); - const zipped = seq.zip(seq.filter((n) => n % 2 === 0)); - expect(zipped.size).toBe(undefined); - expect(zipped.count()).toBe(5); - }); - - it('is always the size of the smaller sequence', () => { - fc.assert( - fc.property(fc.array(fc.nat(), { minLength: 1 }), (lengths) => { - const ranges = lengths.map((l) => Range(0, l)); - const first = ranges.shift(); - expectToBeDefined(first); - const zipped = first.zip.apply(first, ranges); - const shortestLength = Math.min.apply(Math, lengths); - expect(zipped.size).toBe(shortestLength); - }) - ); - }); - - describe('zipWith', () => { - it('zips with a custom function', () => { - expect( - Seq([1, 2, 3]) - .zipWith((a, b) => a + b, Seq([4, 5, 6])) - .toArray() - ).toEqual([5, 7, 9]); - }); - - it('can zip to create immutable collections', () => { - expect( - Seq([1, 2, 3]) - .zipWith( - function () { - // eslint-disable-next-line prefer-rest-params - return List(arguments); - }, - Seq([4, 5, 6]), - Seq([7, 8, 9]) - ) - .toJS() - ).toEqual([ - [1, 4, 7], - [2, 5, 8], - [3, 6, 9], - ]); - }); - }); - - describe('zipAll', () => { - it('fills in the empty zipped values with undefined', () => { - expect( - Seq([1, 2, 3]) - .zipAll(Seq([4])) - .toArray() - ).toEqual([ - [1, 4], - [2, undefined], - [3, undefined], - ]); - }); - - it('is always the size of the longest sequence', () => { - fc.assert( - fc.property(fc.array(fc.nat(), { minLength: 1 }), (lengths) => { - const ranges = lengths.map((l) => Range(0, l)); - const first = ranges.shift(); - expectToBeDefined(first); - const zipped = first.zipAll.apply(first, ranges); - const longestLength = Math.max.apply(Math, lengths); - expect(zipped.size).toBe(longestLength); - }) - ); - }); - }); - - describe('interleave', () => { - it('interleaves multiple collections', () => { - expect( - Seq([1, 2, 3]) - .interleave(Seq([4, 5, 6]), Seq([7, 8, 9])) - .toArray() - ).toEqual([1, 4, 7, 2, 5, 8, 3, 6, 9]); - }); - - it('stops at the shortest collection', () => { - const i = Seq([1, 2, 3]).interleave(Seq([4, 5]), Seq([7, 8, 9])); - expect(i.size).toBe(6); - expect(i.toArray()).toEqual([1, 4, 7, 2, 5, 8]); - }); - - it('with infinite lists', () => { - const r: Seq.Indexed = Range(0, Infinity); - const i = r.interleave(Seq(['A', 'B', 'C'])); - expect(i.size).toBe(6); - expect(i.toArray()).toEqual([0, 'A', 1, 'B', 2, 'C']); - }); - }); -}); diff --git a/bower.json b/bower.json new file mode 100644 index 0000000000..c7f90ff5ff --- /dev/null +++ b/bower.json @@ -0,0 +1,38 @@ +{ + "name": "immutable", + "version": "5.1.2", + "description": "Immutable Data Collections", + "license": "MIT", + "homepage": "https://immutable-js.com", + "author": { + "name": "Lee Byron", + "url": "https://github.com/leebyron" + }, + "repository": { + "type": "git", + "url": "git://github.com/immutable-js/immutable-js.git" + }, + "bugs": { + "url": "https://github.com/immutable-js/immutable-js/issues" + }, + "main": "dist/immutable.js", + "module": "dist/immutable.es.js", + "types": "dist/immutable.d.ts", + "files": [ + "dist", + "README.md", + "LICENSE" + ], + "keywords": [ + "immutable", + "persistent", + "lazy", + "data", + "datastructure", + "functional", + "collection", + "stateless", + "sequence", + "iteration" + ] +} \ No newline at end of file diff --git a/type-definitions/immutable.d.ts b/dist/immutable.d.ts similarity index 100% rename from type-definitions/immutable.d.ts rename to dist/immutable.d.ts diff --git a/dist/immutable.es.js b/dist/immutable.es.js new file mode 100644 index 0000000000..13e407417e --- /dev/null +++ b/dist/immutable.es.js @@ -0,0 +1,6226 @@ +/** + * @license + * MIT License + * + * Copyright (c) 2014-present, Lee Byron and other contributors. + * + * 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. + */ +// Used for setting prototype methods that IE8 chokes on. +var DELETE = 'delete'; +// Constants describing the size of trie nodes. +var SHIFT = 5; // Resulted in best performance after ______? +var SIZE = 1 << SHIFT; +var MASK = SIZE - 1; +// A consistent shared value representing "not set" which equals nothing other +// than itself, and nothing that could be provided externally. +var NOT_SET = {}; +// Boolean references, Rough equivalent of `bool &`. +function MakeRef() { + return { value: false }; +} +function SetRef(ref) { + if (ref) { + ref.value = true; + } +} +// A function which returns a value representing an "owner" for transient writes +// to tries. The return value will only ever equal itself, and will not equal +// the return of any subsequent call of this function. +function OwnerID() { } +function ensureSize(iter) { + // @ts-expect-error size should exists on Collection + if (iter.size === undefined) { + // @ts-expect-error size should exists on Collection, __iterate does exist on Collection + iter.size = iter.__iterate(returnTrue); + } + // @ts-expect-error size should exists on Collection + return iter.size; +} +function wrapIndex(iter, index) { + // This implements "is array index" which the ECMAString spec defines as: + // + // A String property name P is an array index if and only if + // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal + // to 2^32−1. + // + // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects + if (typeof index !== 'number') { + var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32 + if ('' + uint32Index !== index || uint32Index === 4294967295) { + return NaN; + } + index = uint32Index; + } + return index < 0 ? ensureSize(iter) + index : index; +} +function returnTrue() { + return true; +} +function wholeSlice(begin, end, size) { + return (((begin === 0 && !isNeg(begin)) || + (size !== undefined && begin <= -size)) && + (end === undefined || (size !== undefined && end >= size))); +} +function resolveBegin(begin, size) { + return resolveIndex(begin, size, 0); +} +function resolveEnd(end, size) { + return resolveIndex(end, size, size); +} +function resolveIndex(index, size, defaultIndex) { + // Sanitize indices using this shorthand for ToInt32(argument) + // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 + return index === undefined + ? defaultIndex + : isNeg(index) + ? size === Infinity + ? size + : Math.max(0, size + index) | 0 + : size === undefined || size === index + ? index + : Math.min(size, index) | 0; +} +function isNeg(value) { + // Account for -0 which is negative, but not less than 0. + return value < 0 || (value === 0 && 1 / value === -Infinity); +} + +// Note: value is unchanged to not break immutable-devtools. +var IS_COLLECTION_SYMBOL = '@@__IMMUTABLE_ITERABLE__@@'; +/** + * True if `maybeCollection` is a Collection, or any of its subclasses. + * + * ```js + * import { isCollection, Map, List, Stack } from 'immutable'; + * + * isCollection([]); // false + * isCollection({}); // false + * isCollection(Map()); // true + * isCollection(List()); // true + * isCollection(Stack()); // true + * ``` + */ +function isCollection(maybeCollection) { + return Boolean(maybeCollection && + // @ts-expect-error: maybeCollection is typed as `{}`, need to change in 6.0 to `maybeCollection && typeof maybeCollection === 'object' && IS_COLLECTION_SYMBOL in maybeCollection` + maybeCollection[IS_COLLECTION_SYMBOL]); +} + +var IS_KEYED_SYMBOL = '@@__IMMUTABLE_KEYED__@@'; +/** + * True if `maybeKeyed` is a Collection.Keyed, or any of its subclasses. + * + * ```js + * import { isKeyed, Map, List, Stack } from 'immutable'; + * + * isKeyed([]); // false + * isKeyed({}); // false + * isKeyed(Map()); // true + * isKeyed(List()); // false + * isKeyed(Stack()); // false + * ``` + */ +function isKeyed(maybeKeyed) { + return Boolean(maybeKeyed && + // @ts-expect-error: maybeKeyed is typed as `{}`, need to change in 6.0 to `maybeKeyed && typeof maybeKeyed === 'object' && IS_KEYED_SYMBOL in maybeKeyed` + maybeKeyed[IS_KEYED_SYMBOL]); +} + +var IS_INDEXED_SYMBOL = '@@__IMMUTABLE_INDEXED__@@'; +/** + * True if `maybeIndexed` is a Collection.Indexed, or any of its subclasses. + * + * ```js + * import { isIndexed, Map, List, Stack, Set } from 'immutable'; + * + * isIndexed([]); // false + * isIndexed({}); // false + * isIndexed(Map()); // false + * isIndexed(List()); // true + * isIndexed(Stack()); // true + * isIndexed(Set()); // false + * ``` + */ +function isIndexed(maybeIndexed) { + return Boolean(maybeIndexed && + // @ts-expect-error: maybeIndexed is typed as `{}`, need to change in 6.0 to `maybeIndexed && typeof maybeIndexed === 'object' && IS_INDEXED_SYMBOL in maybeIndexed` + maybeIndexed[IS_INDEXED_SYMBOL]); +} + +/** + * True if `maybeAssociative` is either a Keyed or Indexed Collection. + * + * ```js + * import { isAssociative, Map, List, Stack, Set } from 'immutable'; + * + * isAssociative([]); // false + * isAssociative({}); // false + * isAssociative(Map()); // true + * isAssociative(List()); // true + * isAssociative(Stack()); // true + * isAssociative(Set()); // false + * ``` + */ +function isAssociative(maybeAssociative) { + return isKeyed(maybeAssociative) || isIndexed(maybeAssociative); +} + +var Collection = function Collection(value) { + // eslint-disable-next-line no-constructor-return + return isCollection(value) ? value : Seq(value); +}; + +var KeyedCollection = /*@__PURE__*/(function (Collection) { + function KeyedCollection(value) { + // eslint-disable-next-line no-constructor-return + return isKeyed(value) ? value : KeyedSeq(value); + } + + if ( Collection ) KeyedCollection.__proto__ = Collection; + KeyedCollection.prototype = Object.create( Collection && Collection.prototype ); + KeyedCollection.prototype.constructor = KeyedCollection; + + return KeyedCollection; +}(Collection)); + +var IndexedCollection = /*@__PURE__*/(function (Collection) { + function IndexedCollection(value) { + // eslint-disable-next-line no-constructor-return + return isIndexed(value) ? value : IndexedSeq(value); + } + + if ( Collection ) IndexedCollection.__proto__ = Collection; + IndexedCollection.prototype = Object.create( Collection && Collection.prototype ); + IndexedCollection.prototype.constructor = IndexedCollection; + + return IndexedCollection; +}(Collection)); + +var SetCollection = /*@__PURE__*/(function (Collection) { + function SetCollection(value) { + // eslint-disable-next-line no-constructor-return + return isCollection(value) && !isAssociative(value) ? value : SetSeq(value); + } + + if ( Collection ) SetCollection.__proto__ = Collection; + SetCollection.prototype = Object.create( Collection && Collection.prototype ); + SetCollection.prototype.constructor = SetCollection; + + return SetCollection; +}(Collection)); + +Collection.Keyed = KeyedCollection; +Collection.Indexed = IndexedCollection; +Collection.Set = SetCollection; + +var IS_SEQ_SYMBOL = '@@__IMMUTABLE_SEQ__@@'; +/** + * True if `maybeSeq` is a Seq. + */ +function isSeq(maybeSeq) { + return Boolean(maybeSeq && + // @ts-expect-error: maybeSeq is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSeq === 'object' && MAYBE_SEQ_SYMBOL in maybeSeq` + maybeSeq[IS_SEQ_SYMBOL]); +} + +var IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@'; +/** + * True if `maybeRecord` is a Record. + */ +function isRecord(maybeRecord) { + return Boolean(maybeRecord && + // @ts-expect-error: maybeRecord is typed as `{}`, need to change in 6.0 to `maybeRecord && typeof maybeRecord === 'object' && IS_RECORD_SYMBOL in maybeRecord` + maybeRecord[IS_RECORD_SYMBOL]); +} + +/** + * True if `maybeImmutable` is an Immutable Collection or Record. + * + * Note: Still returns true even if the collections is within a `withMutations()`. + * + * ```js + * import { isImmutable, Map, List, Stack } from 'immutable'; + * isImmutable([]); // false + * isImmutable({}); // false + * isImmutable(Map()); // true + * isImmutable(List()); // true + * isImmutable(Stack()); // true + * isImmutable(Map().asMutable()); // true + * ``` + */ +function isImmutable(maybeImmutable) { + return isCollection(maybeImmutable) || isRecord(maybeImmutable); +} + +var IS_ORDERED_SYMBOL = '@@__IMMUTABLE_ORDERED__@@'; +function isOrdered(maybeOrdered) { + return Boolean(maybeOrdered && + // @ts-expect-error: maybeOrdered is typed as `{}`, need to change in 6.0 to `maybeOrdered && typeof maybeOrdered === 'object' && IS_ORDERED_SYMBOL in maybeOrdered` + maybeOrdered[IS_ORDERED_SYMBOL]); +} + +var ITERATE_KEYS = 0; +var ITERATE_VALUES = 1; +var ITERATE_ENTRIES = 2; + +var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; + +var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL; + +var Iterator = function Iterator(next) { + this.next = next; +}; + +Iterator.prototype.toString = function toString () { + return '[Iterator]'; +}; + +Iterator.KEYS = ITERATE_KEYS; +Iterator.VALUES = ITERATE_VALUES; +Iterator.ENTRIES = ITERATE_ENTRIES; + +Iterator.prototype.inspect = Iterator.prototype.toSource = function () { + return this.toString(); +}; +Iterator.prototype[ITERATOR_SYMBOL] = function () { + return this; +}; + +function iteratorValue(type, k, v, iteratorResult) { + var value = + type === ITERATE_KEYS ? k : type === ITERATE_VALUES ? v : [k, v]; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + iteratorResult + ? (iteratorResult.value = value) + : (iteratorResult = { + value: value, + done: false, + }); + return iteratorResult; +} + +function iteratorDone() { + return { value: undefined, done: true }; +} + +function hasIterator(maybeIterable) { + if (Array.isArray(maybeIterable)) { + // IE11 trick as it does not support `Symbol.iterator` + return true; + } + + return !!getIteratorFn(maybeIterable); +} + +function isIterator(maybeIterator) { + return maybeIterator && typeof maybeIterator.next === 'function'; +} + +function getIterator(iterable) { + var iteratorFn = getIteratorFn(iterable); + return iteratorFn && iteratorFn.call(iterable); +} + +function getIteratorFn(iterable) { + var iteratorFn = + iterable && + ((REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) || + iterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } +} + +function isEntriesIterable(maybeIterable) { + var iteratorFn = getIteratorFn(maybeIterable); + return iteratorFn && iteratorFn === maybeIterable.entries; +} + +function isKeysIterable(maybeIterable) { + var iteratorFn = getIteratorFn(maybeIterable); + return iteratorFn && iteratorFn === maybeIterable.keys; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function isArrayLike(value) { + if (Array.isArray(value) || typeof value === 'string') { + return true; + } + // @ts-expect-error "Type 'unknown' is not assignable to type 'boolean'" : convert to Boolean + return (value && + typeof value === 'object' && + // @ts-expect-error check that `'length' in value &&` + Number.isInteger(value.length) && + // @ts-expect-error check that `'length' in value &&` + value.length >= 0 && + // @ts-expect-error check that `'length' in value &&` + (value.length === 0 + ? // Only {length: 0} is considered Array-like. + Object.keys(value).length === 1 + : // An object is only Array-like if it has a property where the last value + // in the array-like may be found (which could be undefined). + // @ts-expect-error check that `'length' in value &&` + value.hasOwnProperty(value.length - 1))); +} + +var Seq = /*@__PURE__*/(function (Collection) { + function Seq(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySequence() + : isImmutable(value) + ? value.toSeq() + : seqFromValue(value); + } + + if ( Collection ) Seq.__proto__ = Collection; + Seq.prototype = Object.create( Collection && Collection.prototype ); + Seq.prototype.constructor = Seq; + + Seq.prototype.toSeq = function toSeq () { + return this; + }; + + Seq.prototype.toString = function toString () { + return this.__toString('Seq {', '}'); + }; + + Seq.prototype.cacheResult = function cacheResult () { + if (!this._cache && this.__iterateUncached) { + this._cache = this.entrySeq().toArray(); + this.size = this._cache.length; + } + return this; + }; + + // abstract __iterateUncached(fn, reverse) + + Seq.prototype.__iterate = function __iterate (fn, reverse) { + var cache = this._cache; + if (cache) { + var size = cache.length; + var i = 0; + while (i !== size) { + var entry = cache[reverse ? size - ++i : i++]; + if (fn(entry[1], entry[0], this) === false) { + break; + } + } + return i; + } + return this.__iterateUncached(fn, reverse); + }; + + // abstract __iteratorUncached(type, reverse) + + Seq.prototype.__iterator = function __iterator (type, reverse) { + var cache = this._cache; + if (cache) { + var size = cache.length; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var entry = cache[reverse ? size - ++i : i++]; + return iteratorValue(type, entry[0], entry[1]); + }); + } + return this.__iteratorUncached(type, reverse); + }; + + return Seq; +}(Collection)); + +var KeyedSeq = /*@__PURE__*/(function (Seq) { + function KeyedSeq(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySequence().toKeyedSeq() + : isCollection(value) + ? isKeyed(value) + ? value.toSeq() + : value.fromEntrySeq() + : isRecord(value) + ? value.toSeq() + : keyedSeqFromValue(value); + } + + if ( Seq ) KeyedSeq.__proto__ = Seq; + KeyedSeq.prototype = Object.create( Seq && Seq.prototype ); + KeyedSeq.prototype.constructor = KeyedSeq; + + KeyedSeq.prototype.toKeyedSeq = function toKeyedSeq () { + return this; + }; + + return KeyedSeq; +}(Seq)); + +var IndexedSeq = /*@__PURE__*/(function (Seq) { + function IndexedSeq(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySequence() + : isCollection(value) + ? isKeyed(value) + ? value.entrySeq() + : value.toIndexedSeq() + : isRecord(value) + ? value.toSeq().entrySeq() + : indexedSeqFromValue(value); + } + + if ( Seq ) IndexedSeq.__proto__ = Seq; + IndexedSeq.prototype = Object.create( Seq && Seq.prototype ); + IndexedSeq.prototype.constructor = IndexedSeq; + + IndexedSeq.of = function of (/*...values*/) { + return IndexedSeq(arguments); + }; + + IndexedSeq.prototype.toIndexedSeq = function toIndexedSeq () { + return this; + }; + + IndexedSeq.prototype.toString = function toString () { + return this.__toString('Seq [', ']'); + }; + + return IndexedSeq; +}(Seq)); + +var SetSeq = /*@__PURE__*/(function (Seq) { + function SetSeq(value) { + // eslint-disable-next-line no-constructor-return + return ( + isCollection(value) && !isAssociative(value) ? value : IndexedSeq(value) + ).toSetSeq(); + } + + if ( Seq ) SetSeq.__proto__ = Seq; + SetSeq.prototype = Object.create( Seq && Seq.prototype ); + SetSeq.prototype.constructor = SetSeq; + + SetSeq.of = function of (/*...values*/) { + return SetSeq(arguments); + }; + + SetSeq.prototype.toSetSeq = function toSetSeq () { + return this; + }; + + return SetSeq; +}(Seq)); + +Seq.isSeq = isSeq; +Seq.Keyed = KeyedSeq; +Seq.Set = SetSeq; +Seq.Indexed = IndexedSeq; + +Seq.prototype[IS_SEQ_SYMBOL] = true; + +// #pragma Root Sequences + +var ArraySeq = /*@__PURE__*/(function (IndexedSeq) { + function ArraySeq(array) { + this._array = array; + this.size = array.length; + } + + if ( IndexedSeq ) ArraySeq.__proto__ = IndexedSeq; + ArraySeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + ArraySeq.prototype.constructor = ArraySeq; + + ArraySeq.prototype.get = function get (index, notSetValue) { + return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue; + }; + + ArraySeq.prototype.__iterate = function __iterate (fn, reverse) { + var array = this._array; + var size = array.length; + var i = 0; + while (i !== size) { + var ii = reverse ? size - ++i : i++; + if (fn(array[ii], ii, this) === false) { + break; + } + } + return i; + }; + + ArraySeq.prototype.__iterator = function __iterator (type, reverse) { + var array = this._array; + var size = array.length; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var ii = reverse ? size - ++i : i++; + return iteratorValue(type, ii, array[ii]); + }); + }; + + return ArraySeq; +}(IndexedSeq)); + +var ObjectSeq = /*@__PURE__*/(function (KeyedSeq) { + function ObjectSeq(object) { + var keys = Object.keys(object).concat( + Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : [] + ); + this._object = object; + this._keys = keys; + this.size = keys.length; + } + + if ( KeyedSeq ) ObjectSeq.__proto__ = KeyedSeq; + ObjectSeq.prototype = Object.create( KeyedSeq && KeyedSeq.prototype ); + ObjectSeq.prototype.constructor = ObjectSeq; + + ObjectSeq.prototype.get = function get (key, notSetValue) { + if (notSetValue !== undefined && !this.has(key)) { + return notSetValue; + } + return this._object[key]; + }; + + ObjectSeq.prototype.has = function has (key) { + return hasOwnProperty.call(this._object, key); + }; + + ObjectSeq.prototype.__iterate = function __iterate (fn, reverse) { + var object = this._object; + var keys = this._keys; + var size = keys.length; + var i = 0; + while (i !== size) { + var key = keys[reverse ? size - ++i : i++]; + if (fn(object[key], key, this) === false) { + break; + } + } + return i; + }; + + ObjectSeq.prototype.__iterator = function __iterator (type, reverse) { + var object = this._object; + var keys = this._keys; + var size = keys.length; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var key = keys[reverse ? size - ++i : i++]; + return iteratorValue(type, key, object[key]); + }); + }; + + return ObjectSeq; +}(KeyedSeq)); +ObjectSeq.prototype[IS_ORDERED_SYMBOL] = true; + +var CollectionSeq = /*@__PURE__*/(function (IndexedSeq) { + function CollectionSeq(collection) { + this._collection = collection; + this.size = collection.length || collection.size; + } + + if ( IndexedSeq ) CollectionSeq.__proto__ = IndexedSeq; + CollectionSeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + CollectionSeq.prototype.constructor = CollectionSeq; + + CollectionSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) { + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var collection = this._collection; + var iterator = getIterator(collection); + var iterations = 0; + if (isIterator(iterator)) { + var step; + while (!(step = iterator.next()).done) { + if (fn(step.value, iterations++, this) === false) { + break; + } + } + } + return iterations; + }; + + CollectionSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) { + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var collection = this._collection; + var iterator = getIterator(collection); + if (!isIterator(iterator)) { + return new Iterator(iteratorDone); + } + var iterations = 0; + return new Iterator(function () { + var step = iterator.next(); + return step.done ? step : iteratorValue(type, iterations++, step.value); + }); + }; + + return CollectionSeq; +}(IndexedSeq)); + +// # pragma Helper functions + +var EMPTY_SEQ; + +function emptySequence() { + return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([])); +} + +function keyedSeqFromValue(value) { + var seq = maybeIndexedSeqFromValue(value); + if (seq) { + return seq.fromEntrySeq(); + } + if (typeof value === 'object') { + return new ObjectSeq(value); + } + throw new TypeError( + 'Expected Array or collection object of [k, v] entries, or keyed object: ' + + value + ); +} + +function indexedSeqFromValue(value) { + var seq = maybeIndexedSeqFromValue(value); + if (seq) { + return seq; + } + throw new TypeError( + 'Expected Array or collection object of values: ' + value + ); +} + +function seqFromValue(value) { + var seq = maybeIndexedSeqFromValue(value); + if (seq) { + return isEntriesIterable(value) + ? seq.fromEntrySeq() + : isKeysIterable(value) + ? seq.toSetSeq() + : seq; + } + if (typeof value === 'object') { + return new ObjectSeq(value); + } + throw new TypeError( + 'Expected Array or collection object of values, or keyed object: ' + value + ); +} + +function maybeIndexedSeqFromValue(value) { + return isArrayLike(value) + ? new ArraySeq(value) + : hasIterator(value) + ? new CollectionSeq(value) + : undefined; +} + +var IS_MAP_SYMBOL = '@@__IMMUTABLE_MAP__@@'; +/** + * True if `maybeMap` is a Map. + * + * Also true for OrderedMaps. + */ +function isMap(maybeMap) { + return Boolean(maybeMap && + // @ts-expect-error: maybeMap is typed as `{}`, need to change in 6.0 to `maybeMap && typeof maybeMap === 'object' && IS_MAP_SYMBOL in maybeMap` + maybeMap[IS_MAP_SYMBOL]); +} + +/** + * True if `maybeOrderedMap` is an OrderedMap. + */ +function isOrderedMap(maybeOrderedMap) { + return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap); +} + +/** + * True if `maybeValue` is a JavaScript Object which has *both* `equals()` + * and `hashCode()` methods. + * + * Any two instances of *value objects* can be compared for value equality with + * `Immutable.is()` and can be used as keys in a `Map` or members in a `Set`. + */ +function isValueObject(maybeValue) { + return Boolean(maybeValue && + // @ts-expect-error: maybeValue is typed as `{}` + typeof maybeValue.equals === 'function' && + // @ts-expect-error: maybeValue is typed as `{}` + typeof maybeValue.hashCode === 'function'); +} + +/** + * An extension of the "same-value" algorithm as [described for use by ES6 Map + * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality) + * + * NaN is considered the same as NaN, however -0 and 0 are considered the same + * value, which is different from the algorithm described by + * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + * + * This is extended further to allow Objects to describe the values they + * represent, by way of `valueOf` or `equals` (and `hashCode`). + * + * Note: because of this extension, the key equality of Immutable.Map and the + * value equality of Immutable.Set will differ from ES6 Map and Set. + * + * ### Defining custom values + * + * The easiest way to describe the value an object represents is by implementing + * `valueOf`. For example, `Date` represents a value by returning a unix + * timestamp for `valueOf`: + * + * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ... + * var date2 = new Date(1234567890000); + * date1.valueOf(); // 1234567890000 + * assert( date1 !== date2 ); + * assert( Immutable.is( date1, date2 ) ); + * + * Note: overriding `valueOf` may have other implications if you use this object + * where JavaScript expects a primitive, such as implicit string coercion. + * + * For more complex types, especially collections, implementing `valueOf` may + * not be performant. An alternative is to implement `equals` and `hashCode`. + * + * `equals` takes another object, presumably of similar type, and returns true + * if it is equal. Equality is symmetrical, so the same result should be + * returned if this and the argument are flipped. + * + * assert( a.equals(b) === b.equals(a) ); + * + * `hashCode` returns a 32bit integer number representing the object which will + * be used to determine how to store the value object in a Map or Set. You must + * provide both or neither methods, one must not exist without the other. + * + * Also, an important relationship between these methods must be upheld: if two + * values are equal, they *must* return the same hashCode. If the values are not + * equal, they might have the same hashCode; this is called a hash collision, + * and while undesirable for performance reasons, it is acceptable. + * + * if (a.equals(b)) { + * assert( a.hashCode() === b.hashCode() ); + * } + * + * All Immutable collections are Value Objects: they implement `equals()` + * and `hashCode()`. + */ +function is(valueA, valueB) { + if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { + return true; + } + if (!valueA || !valueB) { + return false; + } + if (typeof valueA.valueOf === 'function' && + typeof valueB.valueOf === 'function') { + valueA = valueA.valueOf(); + valueB = valueB.valueOf(); + if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { + return true; + } + if (!valueA || !valueB) { + return false; + } + } + return !!(isValueObject(valueA) && + isValueObject(valueB) && + valueA.equals(valueB)); +} + +var imul = + typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 + ? Math.imul + : function imul(a, b) { + a |= 0; // int + b |= 0; // int + var c = a & 0xffff; + var d = b & 0xffff; + // Shift by 0 fixes the sign on the high part. + return (c * d + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0)) | 0; // int + }; + +// v8 has an optimization for storing 31-bit signed numbers. +// Values which have either 00 or 11 as the high order bits qualify. +// This function drops the highest order bit in a signed number, maintaining +// the sign bit. +function smi(i32) { + return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff); +} + +var defaultValueOf = Object.prototype.valueOf; + +function hash(o) { + // eslint-disable-next-line eqeqeq + if (o == null) { + return hashNullish(o); + } + + if (typeof o.hashCode === 'function') { + // Drop any high bits from accidentally long hash codes. + return smi(o.hashCode(o)); + } + + var v = valueOf(o); + + // eslint-disable-next-line eqeqeq + if (v == null) { + return hashNullish(v); + } + + switch (typeof v) { + case 'boolean': + // The hash values for built-in constants are a 1 value for each 5-byte + // shift region expect for the first, which encodes the value. This + // reduces the odds of a hash collision for these common values. + return v ? 0x42108421 : 0x42108420; + case 'number': + return hashNumber(v); + case 'string': + return v.length > STRING_HASH_CACHE_MIN_STRLEN + ? cachedHashString(v) + : hashString(v); + case 'object': + case 'function': + return hashJSObj(v); + case 'symbol': + return hashSymbol(v); + default: + if (typeof v.toString === 'function') { + return hashString(v.toString()); + } + throw new Error('Value type ' + typeof v + ' cannot be hashed.'); + } +} + +function hashNullish(nullish) { + return nullish === null ? 0x42108422 : /* undefined */ 0x42108423; +} + +// Compress arbitrarily large numbers into smi hashes. +function hashNumber(n) { + if (n !== n || n === Infinity) { + return 0; + } + var hash = n | 0; + if (hash !== n) { + hash ^= n * 0xffffffff; + } + while (n > 0xffffffff) { + n /= 0xffffffff; + hash ^= n; + } + return smi(hash); +} + +function cachedHashString(string) { + var hashed = stringHashCache[string]; + if (hashed === undefined) { + hashed = hashString(string); + if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) { + STRING_HASH_CACHE_SIZE = 0; + stringHashCache = {}; + } + STRING_HASH_CACHE_SIZE++; + stringHashCache[string] = hashed; + } + return hashed; +} + +// http://jsperf.com/hashing-strings +function hashString(string) { + // This is the hash from JVM + // The hash code for a string is computed as + // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1], + // where s[i] is the ith character of the string and n is the length of + // the string. We "mod" the result to make it between 0 (inclusive) and 2^31 + // (exclusive) by dropping high bits. + var hashed = 0; + for (var ii = 0; ii < string.length; ii++) { + hashed = (31 * hashed + string.charCodeAt(ii)) | 0; + } + return smi(hashed); +} + +function hashSymbol(sym) { + var hashed = symbolMap[sym]; + if (hashed !== undefined) { + return hashed; + } + + hashed = nextHash(); + + symbolMap[sym] = hashed; + + return hashed; +} + +function hashJSObj(obj) { + var hashed; + if (usingWeakMap) { + hashed = weakMap.get(obj); + if (hashed !== undefined) { + return hashed; + } + } + + hashed = obj[UID_HASH_KEY]; + if (hashed !== undefined) { + return hashed; + } + + if (!canDefineProperty) { + hashed = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY]; + if (hashed !== undefined) { + return hashed; + } + + hashed = getIENodeHash(obj); + if (hashed !== undefined) { + return hashed; + } + } + + hashed = nextHash(); + + if (usingWeakMap) { + weakMap.set(obj, hashed); + } else if (isExtensible !== undefined && isExtensible(obj) === false) { + throw new Error('Non-extensible objects are not allowed as keys.'); + } else if (canDefineProperty) { + Object.defineProperty(obj, UID_HASH_KEY, { + enumerable: false, + configurable: false, + writable: false, + value: hashed, + }); + } else if ( + obj.propertyIsEnumerable !== undefined && + obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable + ) { + // Since we can't define a non-enumerable property on the object + // we'll hijack one of the less-used non-enumerable properties to + // save our hash on it. Since this is a function it will not show up in + // `JSON.stringify` which is what we want. + obj.propertyIsEnumerable = function () { + return this.constructor.prototype.propertyIsEnumerable.apply( + this, + arguments + ); + }; + obj.propertyIsEnumerable[UID_HASH_KEY] = hashed; + } else if (obj.nodeType !== undefined) { + // At this point we couldn't get the IE `uniqueID` to use as a hash + // and we couldn't use a non-enumerable property to exploit the + // dontEnum bug so we simply add the `UID_HASH_KEY` on the node + // itself. + obj[UID_HASH_KEY] = hashed; + } else { + throw new Error('Unable to set a non-enumerable property on object.'); + } + + return hashed; +} + +// Get references to ES5 object methods. +var isExtensible = Object.isExtensible; + +// True if Object.defineProperty works as expected. IE8 fails this test. +var canDefineProperty = (function () { + try { + Object.defineProperty({}, '@', {}); + return true; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (e) { + return false; + } +})(); + +// IE has a `uniqueID` property on DOM nodes. We can construct the hash from it +// and avoid memory leaks from the IE cloneNode bug. +function getIENodeHash(node) { + if (node && node.nodeType > 0) { + switch (node.nodeType) { + case 1: // Element + return node.uniqueID; + case 9: // Document + return node.documentElement && node.documentElement.uniqueID; + } + } +} + +function valueOf(obj) { + return obj.valueOf !== defaultValueOf && typeof obj.valueOf === 'function' + ? obj.valueOf(obj) + : obj; +} + +function nextHash() { + var nextHash = ++_objHashUID; + if (_objHashUID & 0x40000000) { + _objHashUID = 0; + } + return nextHash; +} + +// If possible, use a WeakMap. +var usingWeakMap = typeof WeakMap === 'function'; +var weakMap; +if (usingWeakMap) { + weakMap = new WeakMap(); +} + +var symbolMap = Object.create(null); + +var _objHashUID = 0; + +var UID_HASH_KEY = '__immutablehash__'; +if (typeof Symbol === 'function') { + UID_HASH_KEY = Symbol(UID_HASH_KEY); +} + +var STRING_HASH_CACHE_MIN_STRLEN = 16; +var STRING_HASH_CACHE_MAX_SIZE = 255; +var STRING_HASH_CACHE_SIZE = 0; +var stringHashCache = {}; + +var ToKeyedSequence = /*@__PURE__*/(function (KeyedSeq) { + function ToKeyedSequence(indexed, useKeys) { + this._iter = indexed; + this._useKeys = useKeys; + this.size = indexed.size; + } + + if ( KeyedSeq ) ToKeyedSequence.__proto__ = KeyedSeq; + ToKeyedSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype ); + ToKeyedSequence.prototype.constructor = ToKeyedSequence; + + ToKeyedSequence.prototype.get = function get (key, notSetValue) { + return this._iter.get(key, notSetValue); + }; + + ToKeyedSequence.prototype.has = function has (key) { + return this._iter.has(key); + }; + + ToKeyedSequence.prototype.valueSeq = function valueSeq () { + return this._iter.valueSeq(); + }; + + ToKeyedSequence.prototype.reverse = function reverse () { + var this$1$1 = this; + + var reversedSequence = reverseFactory(this, true); + if (!this._useKeys) { + reversedSequence.valueSeq = function () { return this$1$1._iter.toSeq().reverse(); }; + } + return reversedSequence; + }; + + ToKeyedSequence.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + var mappedSequence = mapFactory(this, mapper, context); + if (!this._useKeys) { + mappedSequence.valueSeq = function () { return this$1$1._iter.toSeq().map(mapper, context); }; + } + return mappedSequence; + }; + + ToKeyedSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._iter.__iterate(function (v, k) { return fn(v, k, this$1$1); }, reverse); + }; + + ToKeyedSequence.prototype.__iterator = function __iterator (type, reverse) { + return this._iter.__iterator(type, reverse); + }; + + return ToKeyedSequence; +}(KeyedSeq)); +ToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true; + +var ToIndexedSequence = /*@__PURE__*/(function (IndexedSeq) { + function ToIndexedSequence(iter) { + this._iter = iter; + this.size = iter.size; + } + + if ( IndexedSeq ) ToIndexedSequence.__proto__ = IndexedSeq; + ToIndexedSequence.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + ToIndexedSequence.prototype.constructor = ToIndexedSequence; + + ToIndexedSequence.prototype.includes = function includes (value) { + return this._iter.includes(value); + }; + + ToIndexedSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(this); + return this._iter.__iterate( + function (v) { return fn(v, reverse ? this$1$1.size - ++i : i++, this$1$1); }, + reverse + ); + }; + + ToIndexedSequence.prototype.__iterator = function __iterator (type, reverse) { + var this$1$1 = this; + + var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(this); + return new Iterator(function () { + var step = iterator.next(); + return step.done + ? step + : iteratorValue( + type, + reverse ? this$1$1.size - ++i : i++, + step.value, + step + ); + }); + }; + + return ToIndexedSequence; +}(IndexedSeq)); + +var ToSetSequence = /*@__PURE__*/(function (SetSeq) { + function ToSetSequence(iter) { + this._iter = iter; + this.size = iter.size; + } + + if ( SetSeq ) ToSetSequence.__proto__ = SetSeq; + ToSetSequence.prototype = Object.create( SetSeq && SetSeq.prototype ); + ToSetSequence.prototype.constructor = ToSetSequence; + + ToSetSequence.prototype.has = function has (key) { + return this._iter.includes(key); + }; + + ToSetSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._iter.__iterate(function (v) { return fn(v, v, this$1$1); }, reverse); + }; + + ToSetSequence.prototype.__iterator = function __iterator (type, reverse) { + var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); + return new Iterator(function () { + var step = iterator.next(); + return step.done + ? step + : iteratorValue(type, step.value, step.value, step); + }); + }; + + return ToSetSequence; +}(SetSeq)); + +var FromEntriesSequence = /*@__PURE__*/(function (KeyedSeq) { + function FromEntriesSequence(entries) { + this._iter = entries; + this.size = entries.size; + } + + if ( KeyedSeq ) FromEntriesSequence.__proto__ = KeyedSeq; + FromEntriesSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype ); + FromEntriesSequence.prototype.constructor = FromEntriesSequence; + + FromEntriesSequence.prototype.entrySeq = function entrySeq () { + return this._iter.toSeq(); + }; + + FromEntriesSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._iter.__iterate(function (entry) { + // Check if entry exists first so array access doesn't throw for holes + // in the parent iteration. + if (entry) { + validateEntry(entry); + var indexedCollection = isCollection(entry); + return fn( + indexedCollection ? entry.get(1) : entry[1], + indexedCollection ? entry.get(0) : entry[0], + this$1$1 + ); + } + }, reverse); + }; + + FromEntriesSequence.prototype.__iterator = function __iterator (type, reverse) { + var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); + return new Iterator(function () { + while (true) { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + // Check if entry exists first so array access doesn't throw for holes + // in the parent iteration. + if (entry) { + validateEntry(entry); + var indexedCollection = isCollection(entry); + return iteratorValue( + type, + indexedCollection ? entry.get(0) : entry[0], + indexedCollection ? entry.get(1) : entry[1], + step + ); + } + } + }); + }; + + return FromEntriesSequence; +}(KeyedSeq)); + +ToIndexedSequence.prototype.cacheResult = + ToKeyedSequence.prototype.cacheResult = + ToSetSequence.prototype.cacheResult = + FromEntriesSequence.prototype.cacheResult = + cacheResultThrough; + +function flipFactory(collection) { + var flipSequence = makeSequence(collection); + flipSequence._iter = collection; + flipSequence.size = collection.size; + flipSequence.flip = function () { return collection; }; + flipSequence.reverse = function () { + var reversedSequence = collection.reverse.apply(this); // super.reverse() + reversedSequence.flip = function () { return collection.reverse(); }; + return reversedSequence; + }; + flipSequence.has = function (key) { return collection.includes(key); }; + flipSequence.includes = function (key) { return collection.has(key); }; + flipSequence.cacheResult = cacheResultThrough; + flipSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + return collection.__iterate(function (v, k) { return fn(k, v, this$1$1) !== false; }, reverse); + }; + flipSequence.__iteratorUncached = function (type, reverse) { + if (type === ITERATE_ENTRIES) { + var iterator = collection.__iterator(type, reverse); + return new Iterator(function () { + var step = iterator.next(); + if (!step.done) { + var k = step.value[0]; + step.value[0] = step.value[1]; + step.value[1] = k; + } + return step; + }); + } + return collection.__iterator( + type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES, + reverse + ); + }; + return flipSequence; +} + +function mapFactory(collection, mapper, context) { + var mappedSequence = makeSequence(collection); + mappedSequence.size = collection.size; + mappedSequence.has = function (key) { return collection.has(key); }; + mappedSequence.get = function (key, notSetValue) { + var v = collection.get(key, NOT_SET); + return v === NOT_SET + ? notSetValue + : mapper.call(context, v, key, collection); + }; + mappedSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + return collection.__iterate( + function (v, k, c) { return fn(mapper.call(context, v, k, c), k, this$1$1) !== false; }, + reverse + ); + }; + mappedSequence.__iteratorUncached = function (type, reverse) { + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + return new Iterator(function () { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + var key = entry[0]; + return iteratorValue( + type, + key, + mapper.call(context, entry[1], key, collection), + step + ); + }); + }; + return mappedSequence; +} + +function reverseFactory(collection, useKeys) { + var this$1$1 = this; + + var reversedSequence = makeSequence(collection); + reversedSequence._iter = collection; + reversedSequence.size = collection.size; + reversedSequence.reverse = function () { return collection; }; + if (collection.flip) { + reversedSequence.flip = function () { + var flipSequence = flipFactory(collection); + flipSequence.reverse = function () { return collection.flip(); }; + return flipSequence; + }; + } + reversedSequence.get = function (key, notSetValue) { return collection.get(useKeys ? key : -1 - key, notSetValue); }; + reversedSequence.has = function (key) { return collection.has(useKeys ? key : -1 - key); }; + reversedSequence.includes = function (value) { return collection.includes(value); }; + reversedSequence.cacheResult = cacheResultThrough; + reversedSequence.__iterate = function (fn, reverse) { + var this$1$1 = this; + + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(collection); + return collection.__iterate( + function (v, k) { return fn(v, useKeys ? k : reverse ? this$1$1.size - ++i : i++, this$1$1); }, + !reverse + ); + }; + reversedSequence.__iterator = function (type, reverse) { + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(collection); + var iterator = collection.__iterator(ITERATE_ENTRIES, !reverse); + return new Iterator(function () { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + return iteratorValue( + type, + useKeys ? entry[0] : reverse ? this$1$1.size - ++i : i++, + entry[1], + step + ); + }); + }; + return reversedSequence; +} + +function filterFactory(collection, predicate, context, useKeys) { + var filterSequence = makeSequence(collection); + if (useKeys) { + filterSequence.has = function (key) { + var v = collection.get(key, NOT_SET); + return v !== NOT_SET && !!predicate.call(context, v, key, collection); + }; + filterSequence.get = function (key, notSetValue) { + var v = collection.get(key, NOT_SET); + return v !== NOT_SET && predicate.call(context, v, key, collection) + ? v + : notSetValue; + }; + } + filterSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + var iterations = 0; + collection.__iterate(function (v, k, c) { + if (predicate.call(context, v, k, c)) { + iterations++; + return fn(v, useKeys ? k : iterations - 1, this$1$1); + } + }, reverse); + return iterations; + }; + filterSequence.__iteratorUncached = function (type, reverse) { + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + var iterations = 0; + return new Iterator(function () { + while (true) { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + var key = entry[0]; + var value = entry[1]; + if (predicate.call(context, value, key, collection)) { + return iteratorValue(type, useKeys ? key : iterations++, value, step); + } + } + }); + }; + return filterSequence; +} + +function countByFactory(collection, grouper, context) { + var groups = Map().asMutable(); + collection.__iterate(function (v, k) { + groups.update(grouper.call(context, v, k, collection), 0, function (a) { return a + 1; }); + }); + return groups.asImmutable(); +} + +function groupByFactory(collection, grouper, context) { + var isKeyedIter = isKeyed(collection); + var groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable(); + collection.__iterate(function (v, k) { + groups.update( + grouper.call(context, v, k, collection), + function (a) { return ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a); } + ); + }); + var coerce = collectionClass(collection); + return groups.map(function (arr) { return reify(collection, coerce(arr)); }).asImmutable(); +} + +function partitionFactory(collection, predicate, context) { + var isKeyedIter = isKeyed(collection); + var groups = [[], []]; + collection.__iterate(function (v, k) { + groups[predicate.call(context, v, k, collection) ? 1 : 0].push( + isKeyedIter ? [k, v] : v + ); + }); + var coerce = collectionClass(collection); + return groups.map(function (arr) { return reify(collection, coerce(arr)); }); +} + +function sliceFactory(collection, begin, end, useKeys) { + var originalSize = collection.size; + + if (wholeSlice(begin, end, originalSize)) { + return collection; + } + + // begin or end can not be resolved if they were provided as negative numbers and + // this collection's size is unknown. In that case, cache first so there is + // a known size and these do not resolve to NaN. + if (typeof originalSize === 'undefined' && (begin < 0 || end < 0)) { + return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys); + } + + var resolvedBegin = resolveBegin(begin, originalSize); + var resolvedEnd = resolveEnd(end, originalSize); + + // Note: resolvedEnd is undefined when the original sequence's length is + // unknown and this slice did not supply an end and should contain all + // elements after resolvedBegin. + // In that case, resolvedSize will be NaN and sliceSize will remain undefined. + var resolvedSize = resolvedEnd - resolvedBegin; + var sliceSize; + if (resolvedSize === resolvedSize) { + sliceSize = resolvedSize < 0 ? 0 : resolvedSize; + } + + var sliceSeq = makeSequence(collection); + + // If collection.size is undefined, the size of the realized sliceSeq is + // unknown at this point unless the number of items to slice is 0 + sliceSeq.size = + sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined; + + if (!useKeys && isSeq(collection) && sliceSize >= 0) { + sliceSeq.get = function (index, notSetValue) { + index = wrapIndex(this, index); + return index >= 0 && index < sliceSize + ? collection.get(index + resolvedBegin, notSetValue) + : notSetValue; + }; + } + + sliceSeq.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + if (sliceSize === 0) { + return 0; + } + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var skipped = 0; + var isSkipping = true; + var iterations = 0; + collection.__iterate(function (v, k) { + if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) { + iterations++; + return ( + fn(v, useKeys ? k : iterations - 1, this$1$1) !== false && + iterations !== sliceSize + ); + } + }); + return iterations; + }; + + sliceSeq.__iteratorUncached = function (type, reverse) { + if (sliceSize !== 0 && reverse) { + return this.cacheResult().__iterator(type, reverse); + } + // Don't bother instantiating parent iterator if taking 0. + if (sliceSize === 0) { + return new Iterator(iteratorDone); + } + var iterator = collection.__iterator(type, reverse); + var skipped = 0; + var iterations = 0; + return new Iterator(function () { + while (skipped++ < resolvedBegin) { + iterator.next(); + } + if (++iterations > sliceSize) { + return iteratorDone(); + } + var step = iterator.next(); + if (useKeys || type === ITERATE_VALUES || step.done) { + return step; + } + if (type === ITERATE_KEYS) { + return iteratorValue(type, iterations - 1, undefined, step); + } + return iteratorValue(type, iterations - 1, step.value[1], step); + }); + }; + + return sliceSeq; +} + +function takeWhileFactory(collection, predicate, context) { + var takeSequence = makeSequence(collection); + takeSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var iterations = 0; + collection.__iterate( + function (v, k, c) { return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$1$1); } + ); + return iterations; + }; + takeSequence.__iteratorUncached = function (type, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + var iterating = true; + return new Iterator(function () { + if (!iterating) { + return iteratorDone(); + } + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + var k = entry[0]; + var v = entry[1]; + if (!predicate.call(context, v, k, this$1$1)) { + iterating = false; + return iteratorDone(); + } + return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); + }); + }; + return takeSequence; +} + +function skipWhileFactory(collection, predicate, context, useKeys) { + var skipSequence = makeSequence(collection); + skipSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var isSkipping = true; + var iterations = 0; + collection.__iterate(function (v, k, c) { + if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) { + iterations++; + return fn(v, useKeys ? k : iterations - 1, this$1$1); + } + }); + return iterations; + }; + skipSequence.__iteratorUncached = function (type, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + var skipping = true; + var iterations = 0; + return new Iterator(function () { + var step; + var k; + var v; + do { + step = iterator.next(); + if (step.done) { + if (useKeys || type === ITERATE_VALUES) { + return step; + } + if (type === ITERATE_KEYS) { + return iteratorValue(type, iterations++, undefined, step); + } + return iteratorValue(type, iterations++, step.value[1], step); + } + var entry = step.value; + k = entry[0]; + v = entry[1]; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + skipping && (skipping = predicate.call(context, v, k, this$1$1)); + } while (skipping); + return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); + }); + }; + return skipSequence; +} + +var ConcatSeq = /*@__PURE__*/(function (Seq) { + function ConcatSeq(iterables) { + this._wrappedIterables = iterables.flatMap(function (iterable) { + if (iterable._wrappedIterables) { + return iterable._wrappedIterables; + } + return [iterable]; + }); + this.size = this._wrappedIterables.reduce(function (sum, iterable) { + if (sum !== undefined) { + var size = iterable.size; + if (size !== undefined) { + return sum + size; + } + } + }, 0); + this[IS_KEYED_SYMBOL] = this._wrappedIterables[0][IS_KEYED_SYMBOL]; + this[IS_INDEXED_SYMBOL] = this._wrappedIterables[0][IS_INDEXED_SYMBOL]; + this[IS_ORDERED_SYMBOL] = this._wrappedIterables[0][IS_ORDERED_SYMBOL]; + } + + if ( Seq ) ConcatSeq.__proto__ = Seq; + ConcatSeq.prototype = Object.create( Seq && Seq.prototype ); + ConcatSeq.prototype.constructor = ConcatSeq; + + ConcatSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) { + if (this._wrappedIterables.length === 0) { + return; + } + + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + + var iterableIndex = 0; + var useKeys = isKeyed(this); + var iteratorType = useKeys ? ITERATE_ENTRIES : ITERATE_VALUES; + var currentIterator = this._wrappedIterables[iterableIndex].__iterator( + iteratorType, + reverse + ); + + var keepGoing = true; + var index = 0; + while (keepGoing) { + var next = currentIterator.next(); + while (next.done) { + iterableIndex++; + if (iterableIndex === this._wrappedIterables.length) { + return index; + } + currentIterator = this._wrappedIterables[iterableIndex].__iterator( + iteratorType, + reverse + ); + next = currentIterator.next(); + } + var fnResult = useKeys + ? fn(next.value[1], next.value[0], this) + : fn(next.value, index, this); + keepGoing = fnResult !== false; + index++; + } + return index; + }; + + ConcatSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) { + var this$1$1 = this; + + if (this._wrappedIterables.length === 0) { + return new Iterator(iteratorDone); + } + + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + + var iterableIndex = 0; + var currentIterator = this._wrappedIterables[iterableIndex].__iterator( + type, + reverse + ); + return new Iterator(function () { + var next = currentIterator.next(); + while (next.done) { + iterableIndex++; + if (iterableIndex === this$1$1._wrappedIterables.length) { + return next; + } + currentIterator = this$1$1._wrappedIterables[iterableIndex].__iterator( + type, + reverse + ); + next = currentIterator.next(); + } + return next; + }); + }; + + return ConcatSeq; +}(Seq)); + +function concatFactory(collection, values) { + var isKeyedCollection = isKeyed(collection); + var iters = [collection] + .concat(values) + .map(function (v) { + if (!isCollection(v)) { + v = isKeyedCollection + ? keyedSeqFromValue(v) + : indexedSeqFromValue(Array.isArray(v) ? v : [v]); + } else if (isKeyedCollection) { + v = KeyedCollection(v); + } + return v; + }) + .filter(function (v) { return v.size !== 0; }); + + if (iters.length === 0) { + return collection; + } + + if (iters.length === 1) { + var singleton = iters[0]; + if ( + singleton === collection || + (isKeyedCollection && isKeyed(singleton)) || + (isIndexed(collection) && isIndexed(singleton)) + ) { + return singleton; + } + } + + return new ConcatSeq(iters); +} + +function flattenFactory(collection, depth, useKeys) { + var flatSequence = makeSequence(collection); + flatSequence.__iterateUncached = function (fn, reverse) { + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var iterations = 0; + var stopped = false; + function flatDeep(iter, currentDepth) { + iter.__iterate(function (v, k) { + if ((!depth || currentDepth < depth) && isCollection(v)) { + flatDeep(v, currentDepth + 1); + } else { + iterations++; + if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) { + stopped = true; + } + } + return !stopped; + }, reverse); + } + flatDeep(collection, 0); + return iterations; + }; + flatSequence.__iteratorUncached = function (type, reverse) { + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var iterator = collection.__iterator(type, reverse); + var stack = []; + var iterations = 0; + return new Iterator(function () { + while (iterator) { + var step = iterator.next(); + if (step.done !== false) { + iterator = stack.pop(); + continue; + } + var v = step.value; + if (type === ITERATE_ENTRIES) { + v = v[1]; + } + if ((!depth || stack.length < depth) && isCollection(v)) { + stack.push(iterator); + iterator = v.__iterator(type, reverse); + } else { + return useKeys ? step : iteratorValue(type, iterations++, v, step); + } + } + return iteratorDone(); + }); + }; + return flatSequence; +} + +function flatMapFactory(collection, mapper, context) { + var coerce = collectionClass(collection); + return collection + .toSeq() + .map(function (v, k) { return coerce(mapper.call(context, v, k, collection)); }) + .flatten(true); +} + +function interposeFactory(collection, separator) { + var interposedSequence = makeSequence(collection); + interposedSequence.size = collection.size && collection.size * 2 - 1; + interposedSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + var iterations = 0; + collection.__iterate( + function (v) { return (!iterations || fn(separator, iterations++, this$1$1) !== false) && + fn(v, iterations++, this$1$1) !== false; }, + reverse + ); + return iterations; + }; + interposedSequence.__iteratorUncached = function (type, reverse) { + var iterator = collection.__iterator(ITERATE_VALUES, reverse); + var iterations = 0; + var step; + return new Iterator(function () { + if (!step || iterations % 2) { + step = iterator.next(); + if (step.done) { + return step; + } + } + return iterations % 2 + ? iteratorValue(type, iterations++, separator) + : iteratorValue(type, iterations++, step.value, step); + }); + }; + return interposedSequence; +} + +function sortFactory(collection, comparator, mapper) { + if (!comparator) { + comparator = defaultComparator; + } + var isKeyedCollection = isKeyed(collection); + var index = 0; + var entries = collection + .toSeq() + .map(function (v, k) { return [k, v, index++, mapper ? mapper(v, k, collection) : v]; }) + .valueSeq() + .toArray(); + entries + .sort(function (a, b) { return comparator(a[3], b[3]) || a[2] - b[2]; }) + .forEach( + isKeyedCollection + ? function (v, i) { + entries[i].length = 2; + } + : function (v, i) { + entries[i] = v[1]; + } + ); + return isKeyedCollection + ? KeyedSeq(entries) + : isIndexed(collection) + ? IndexedSeq(entries) + : SetSeq(entries); +} + +function maxFactory(collection, comparator, mapper) { + if (!comparator) { + comparator = defaultComparator; + } + if (mapper) { + var entry = collection + .toSeq() + .map(function (v, k) { return [v, mapper(v, k, collection)]; }) + .reduce(function (a, b) { return (maxCompare(comparator, a[1], b[1]) ? b : a); }); + return entry && entry[0]; + } + return collection.reduce(function (a, b) { return (maxCompare(comparator, a, b) ? b : a); }); +} + +function maxCompare(comparator, a, b) { + var comp = comparator(b, a); + // b is considered the new max if the comparator declares them equal, but + // they are not equal and b is in fact a nullish value. + return ( + (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || + comp > 0 + ); +} + +function zipWithFactory(keyIter, zipper, iters, zipAll) { + var zipSequence = makeSequence(keyIter); + var sizes = new ArraySeq(iters).map(function (i) { return i.size; }); + zipSequence.size = zipAll ? sizes.max() : sizes.min(); + // Note: this a generic base implementation of __iterate in terms of + // __iterator which may be more generically useful in the future. + zipSequence.__iterate = function (fn, reverse) { + /* generic: + var iterator = this.__iterator(ITERATE_ENTRIES, reverse); + var step; + var iterations = 0; + while (!(step = iterator.next()).done) { + iterations++; + if (fn(step.value[1], step.value[0], this) === false) { + break; + } + } + return iterations; + */ + // indexed: + var iterator = this.__iterator(ITERATE_VALUES, reverse); + var step; + var iterations = 0; + while (!(step = iterator.next()).done) { + if (fn(step.value, iterations++, this) === false) { + break; + } + } + return iterations; + }; + zipSequence.__iteratorUncached = function (type, reverse) { + var iterators = iters.map( + function (i) { return ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)); } + ); + var iterations = 0; + var isDone = false; + return new Iterator(function () { + var steps; + if (!isDone) { + steps = iterators.map(function (i) { return i.next(); }); + isDone = zipAll + ? steps.every(function (s) { return s.done; }) + : steps.some(function (s) { return s.done; }); + } + if (isDone) { + return iteratorDone(); + } + return iteratorValue( + type, + iterations++, + zipper.apply( + null, + steps.map(function (s) { return s.value; }) + ) + ); + }); + }; + return zipSequence; +} + +// #pragma Helper Functions + +function reify(iter, seq) { + return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq); +} + +function validateEntry(entry) { + if (entry !== Object(entry)) { + throw new TypeError('Expected [K, V] tuple: ' + entry); + } +} + +function collectionClass(collection) { + return isKeyed(collection) + ? KeyedCollection + : isIndexed(collection) + ? IndexedCollection + : SetCollection; +} + +function makeSequence(collection) { + return Object.create( + (isKeyed(collection) + ? KeyedSeq + : isIndexed(collection) + ? IndexedSeq + : SetSeq + ).prototype + ); +} + +function cacheResultThrough() { + if (this._iter.cacheResult) { + this._iter.cacheResult(); + this.size = this._iter.size; + return this; + } + return Seq.prototype.cacheResult.call(this); +} + +function defaultComparator(a, b) { + if (a === undefined && b === undefined) { + return 0; + } + + if (a === undefined) { + return 1; + } + + if (b === undefined) { + return -1; + } + + return a > b ? 1 : a < b ? -1 : 0; +} + +// http://jsperf.com/copy-array-inline +function arrCopy(arr, offset) { + offset = offset || 0; + var len = Math.max(0, arr.length - offset); + var newArr = new Array(len); + for (var ii = 0; ii < len; ii++) { + // @ts-expect-error We may want to guard for undefined values with `if (arr[ii + offset] !== undefined`, but ths should not happen by design + newArr[ii] = arr[ii + offset]; + } + return newArr; +} + +function invariant(condition, error) { + if (!condition) + { throw new Error(error); } +} + +function assertNotInfinite(size) { + invariant(size !== Infinity, 'Cannot perform this action with an infinite size.'); +} + +function coerceKeyPath(keyPath) { + if (isArrayLike(keyPath) && typeof keyPath !== 'string') { + return keyPath; + } + if (isOrdered(keyPath)) { + return keyPath.toArray(); + } + throw new TypeError('Invalid keyPath: expected Ordered Collection or Array: ' + keyPath); +} + +var toString = Object.prototype.toString; +function isPlainObject(value) { + // The base prototype's toString deals with Argument objects and native namespaces like Math + if (!value || + typeof value !== 'object' || + toString.call(value) !== '[object Object]') { + return false; + } + var proto = Object.getPrototypeOf(value); + if (proto === null) { + return true; + } + // Iteratively going up the prototype chain is needed for cross-realm environments (differing contexts, iframes, etc) + var parentProto = proto; + var nextProto = Object.getPrototypeOf(proto); + while (nextProto !== null) { + parentProto = nextProto; + nextProto = Object.getPrototypeOf(parentProto); + } + return parentProto === proto; +} + +/** + * Returns true if the value is a potentially-persistent data structure, either + * provided by Immutable.js or a plain Array or Object. + */ +function isDataStructure(value) { + return (typeof value === 'object' && + (isImmutable(value) || Array.isArray(value) || isPlainObject(value))); +} + +/** + * Converts a value to a string, adding quotes if a string was provided. + */ +function quoteString(value) { + try { + return typeof value === 'string' ? JSON.stringify(value) : String(value); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } + catch (_ignoreError) { + return JSON.stringify(value); + } +} + +/** + * Returns true if the key is defined in the provided collection. + * + * A functional alternative to `collection.has(key)` which will also work with + * plain Objects and Arrays as an alternative for + * `collection.hasOwnProperty(key)`. + * + * + * ```js + * import { has } from 'immutable'; + * + * has([ 'dog', 'frog', 'cat' ], 2) // true + * has([ 'dog', 'frog', 'cat' ], 5) // false + * has({ x: 123, y: 456 }, 'x') // true + * has({ x: 123, y: 456 }, 'z') // false + * ``` + */ +function has(collection, key) { + return isImmutable(collection) + ? // @ts-expect-error key might be a number or symbol, which is not handled be Record key type + collection.has(key) + : // @ts-expect-error key might be anything else than PropertyKey, and will return false in that case but runtime is OK + isDataStructure(collection) && hasOwnProperty.call(collection, key); +} + +function get(collection, key, notSetValue) { + return isImmutable(collection) + ? collection.get(key, notSetValue) + : !has(collection, key) + ? notSetValue + : // @ts-expect-error weird "get" here, + typeof collection.get === 'function' + ? // @ts-expect-error weird "get" here, + collection.get(key) + : // @ts-expect-error key is unknown here, + collection[key]; +} + +function shallowCopy(from) { + if (Array.isArray(from)) { + return arrCopy(from); + } + var to = {}; + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + return to; +} + +function remove(collection, key) { + if (!isDataStructure(collection)) { + throw new TypeError('Cannot update non-data-structure value: ' + collection); + } + if (isImmutable(collection)) { + // @ts-expect-error weird "remove" here, + if (!collection.remove) { + throw new TypeError('Cannot update immutable value without .remove() method: ' + collection); + } + // @ts-expect-error weird "remove" here, + return collection.remove(key); + } + // @ts-expect-error assert that key is a string, a number or a symbol here + if (!hasOwnProperty.call(collection, key)) { + return collection; + } + var collectionCopy = shallowCopy(collection); + if (Array.isArray(collectionCopy)) { + // @ts-expect-error assert that key is a number here + collectionCopy.splice(key, 1); + } + else { + // @ts-expect-error assert that key is a string, a number or a symbol here + delete collectionCopy[key]; + } + return collectionCopy; +} + +function set(collection, key, value) { + if (!isDataStructure(collection)) { + throw new TypeError('Cannot update non-data-structure value: ' + collection); + } + if (isImmutable(collection)) { + // @ts-expect-error weird "set" here, + if (!collection.set) { + throw new TypeError('Cannot update immutable value without .set() method: ' + collection); + } + // @ts-expect-error weird "set" here, + return collection.set(key, value); + } + // @ts-expect-error mix of key and string here. Probably need a more fine type here + if (hasOwnProperty.call(collection, key) && value === collection[key]) { + return collection; + } + var collectionCopy = shallowCopy(collection); + // @ts-expect-error mix of key and string here. Probably need a more fine type here + collectionCopy[key] = value; + return collectionCopy; +} + +function updateIn$1(collection, keyPath, notSetValue, updater) { + if (!updater) { + // handle the fact that `notSetValue` is optional here, in that case `updater` is the updater function + // @ts-expect-error updater is a function here + updater = notSetValue; + notSetValue = undefined; + } + var updatedValue = updateInDeeply(isImmutable(collection), + // @ts-expect-error type issues with Record and mixed types + collection, coerceKeyPath(keyPath), 0, notSetValue, updater); + // @ts-expect-error mixed return type + return updatedValue === NOT_SET ? notSetValue : updatedValue; +} +function updateInDeeply(inImmutable, existing, keyPath, i, notSetValue, updater) { + var wasNotSet = existing === NOT_SET; + if (i === keyPath.length) { + var existingValue = wasNotSet ? notSetValue : existing; + // @ts-expect-error mixed type with optional value + var newValue = updater(existingValue); + // @ts-expect-error mixed type + return newValue === existingValue ? existing : newValue; + } + if (!wasNotSet && !isDataStructure(existing)) { + throw new TypeError('Cannot update within non-data-structure value in path [' + + Array.from(keyPath).slice(0, i).map(quoteString) + + ']: ' + + existing); + } + var key = keyPath[i]; + var nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET); + var nextUpdated = updateInDeeply(nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting), + // @ts-expect-error mixed type + nextExisting, keyPath, i + 1, notSetValue, updater); + return nextUpdated === nextExisting + ? existing + : nextUpdated === NOT_SET + ? remove(existing, key) + : set(wasNotSet ? (inImmutable ? emptyMap() : {}) : existing, key, nextUpdated); +} + +/** + * Returns a copy of the collection with the value at the key path set to the + * provided value. + * + * A functional alternative to `collection.setIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { setIn } from 'immutable'; + * + * const original = { x: { y: { z: 123 }}} + * setIn(original, ['x', 'y', 'z'], 456) // { x: { y: { z: 456 }}} + * console.log(original) // { x: { y: { z: 123 }}} + * ``` + */ +function setIn$1(collection, keyPath, value) { + return updateIn$1(collection, keyPath, NOT_SET, function () { return value; }); +} + +function setIn(keyPath, v) { + return setIn$1(this, keyPath, v); +} + +/** + * Returns a copy of the collection with the value at the key path removed. + * + * A functional alternative to `collection.removeIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { removeIn } from 'immutable'; + * + * const original = { x: { y: { z: 123 }}} + * removeIn(original, ['x', 'y', 'z']) // { x: { y: {}}} + * console.log(original) // { x: { y: { z: 123 }}} + * ``` + */ +function removeIn(collection, keyPath) { + return updateIn$1(collection, keyPath, function () { return NOT_SET; }); +} + +function deleteIn(keyPath) { + return removeIn(this, keyPath); +} + +function update$1(collection, key, notSetValue, updater) { + return updateIn$1( + // @ts-expect-error Index signature for type string is missing in type V[] + collection, [key], notSetValue, updater); +} + +function update(key, notSetValue, updater) { + return arguments.length === 1 + ? key(this) + : update$1(this, key, notSetValue, updater); +} + +function updateIn(keyPath, notSetValue, updater) { + return updateIn$1(this, keyPath, notSetValue, updater); +} + +function merge$1() { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + return mergeIntoKeyedWith(this, iters); +} + +function mergeWith$1(merger) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + if (typeof merger !== 'function') { + throw new TypeError('Invalid merger function: ' + merger); + } + return mergeIntoKeyedWith(this, iters, merger); +} + +function mergeIntoKeyedWith(collection, collections, merger) { + var iters = []; + for (var ii = 0; ii < collections.length; ii++) { + var collection$1 = KeyedCollection(collections[ii]); + if (collection$1.size !== 0) { + iters.push(collection$1); + } + } + if (iters.length === 0) { + return collection; + } + if ( + collection.toSeq().size === 0 && + !collection.__ownerID && + iters.length === 1 + ) { + return isRecord(collection) + ? collection // Record is empty and will not be updated: return the same instance + : collection.constructor(iters[0]); + } + return collection.withMutations(function (collection) { + var mergeIntoCollection = merger + ? function (value, key) { + update$1(collection, key, NOT_SET, function (oldVal) { return oldVal === NOT_SET ? value : merger(oldVal, value, key); } + ); + } + : function (value, key) { + collection.set(key, value); + }; + for (var ii = 0; ii < iters.length; ii++) { + iters[ii].forEach(mergeIntoCollection); + } + }); +} + +function merge(collection) { + var sources = [], len = arguments.length - 1; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; + + return mergeWithSources(collection, sources); +} + +function mergeWith(merger, collection) { + var sources = [], len = arguments.length - 2; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ]; + + return mergeWithSources(collection, sources, merger); +} + +function mergeDeep$1(collection) { + var sources = [], len = arguments.length - 1; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; + + return mergeDeepWithSources(collection, sources); +} + +function mergeDeepWith$1(merger, collection) { + var sources = [], len = arguments.length - 2; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ]; + + return mergeDeepWithSources(collection, sources, merger); +} + +function mergeDeepWithSources(collection, sources, merger) { + return mergeWithSources(collection, sources, deepMergerWith(merger)); +} + +function mergeWithSources(collection, sources, merger) { + if (!isDataStructure(collection)) { + throw new TypeError( + 'Cannot merge into non-data-structure value: ' + collection + ); + } + if (isImmutable(collection)) { + return typeof merger === 'function' && collection.mergeWith + ? collection.mergeWith.apply(collection, [ merger ].concat( sources )) + : collection.merge + ? collection.merge.apply(collection, sources) + : collection.concat.apply(collection, sources); + } + var isArray = Array.isArray(collection); + var merged = collection; + var Collection = isArray ? IndexedCollection : KeyedCollection; + var mergeItem = isArray + ? function (value) { + // Copy on write + if (merged === collection) { + merged = shallowCopy(merged); + } + merged.push(value); + } + : function (value, key) { + var hasVal = hasOwnProperty.call(merged, key); + var nextVal = + hasVal && merger ? merger(merged[key], value, key) : value; + if (!hasVal || nextVal !== merged[key]) { + // Copy on write + if (merged === collection) { + merged = shallowCopy(merged); + } + merged[key] = nextVal; + } + }; + for (var i = 0; i < sources.length; i++) { + Collection(sources[i]).forEach(mergeItem); + } + return merged; +} + +function deepMergerWith(merger) { + function deepMerger(oldValue, newValue, key) { + return isDataStructure(oldValue) && + isDataStructure(newValue) && + areMergeable(oldValue, newValue) + ? mergeWithSources(oldValue, [newValue], deepMerger) + : merger + ? merger(oldValue, newValue, key) + : newValue; + } + return deepMerger; +} + +/** + * It's unclear what the desired behavior is for merging two collections that + * fall into separate categories between keyed, indexed, or set-like, so we only + * consider them mergeable if they fall into the same category. + */ +function areMergeable(oldDataStructure, newDataStructure) { + var oldSeq = Seq(oldDataStructure); + var newSeq = Seq(newDataStructure); + // This logic assumes that a sequence can only fall into one of the three + // categories mentioned above (since there's no `isSetLike()` method). + return ( + isIndexed(oldSeq) === isIndexed(newSeq) && + isKeyed(oldSeq) === isKeyed(newSeq) + ); +} + +function mergeDeep() { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + return mergeDeepWithSources(this, iters); +} + +function mergeDeepWith(merger) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + return mergeDeepWithSources(this, iters, merger); +} + +function mergeIn(keyPath) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + return updateIn$1(this, keyPath, emptyMap(), function (m) { return mergeWithSources(m, iters); }); +} + +function mergeDeepIn(keyPath) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + return updateIn$1(this, keyPath, emptyMap(), function (m) { return mergeDeepWithSources(m, iters); } + ); +} + +function withMutations(fn) { + var mutable = this.asMutable(); + fn(mutable); + return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this; +} + +function asMutable() { + return this.__ownerID ? this : this.__ensureOwner(new OwnerID()); +} + +function asImmutable() { + return this.__ensureOwner(); +} + +function wasAltered() { + return this.__altered; +} + +var Map = /*@__PURE__*/(function (KeyedCollection) { + function Map(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyMap() + : isMap(value) && !isOrdered(value) + ? value + : emptyMap().withMutations(function (map) { + var iter = KeyedCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v, k) { return map.set(k, v); }); + }); + } + + if ( KeyedCollection ) Map.__proto__ = KeyedCollection; + Map.prototype = Object.create( KeyedCollection && KeyedCollection.prototype ); + Map.prototype.constructor = Map; + + Map.prototype.toString = function toString () { + return this.__toString('Map {', '}'); + }; + + // @pragma Access + + Map.prototype.get = function get (k, notSetValue) { + return this._root + ? this._root.get(0, undefined, k, notSetValue) + : notSetValue; + }; + + // @pragma Modification + + Map.prototype.set = function set (k, v) { + return updateMap(this, k, v); + }; + + Map.prototype.remove = function remove (k) { + return updateMap(this, k, NOT_SET); + }; + + Map.prototype.deleteAll = function deleteAll (keys) { + var collection = Collection(keys); + + if (collection.size === 0) { + return this; + } + + return this.withMutations(function (map) { + collection.forEach(function (key) { return map.remove(key); }); + }); + }; + + Map.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = 0; + this._root = null; + this.__hash = undefined; + this.__altered = true; + return this; + } + return emptyMap(); + }; + + // @pragma Composition + + Map.prototype.sort = function sort (comparator) { + // Late binding + return OrderedMap(sortFactory(this, comparator)); + }; + + Map.prototype.sortBy = function sortBy (mapper, comparator) { + // Late binding + return OrderedMap(sortFactory(this, comparator, mapper)); + }; + + Map.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + return this.withMutations(function (map) { + map.forEach(function (value, key) { + map.set(key, mapper.call(context, value, key, this$1$1)); + }); + }); + }; + + // @pragma Mutability + + Map.prototype.__iterator = function __iterator (type, reverse) { + return new MapIterator(this, type, reverse); + }; + + Map.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + var iterations = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + this._root && + this._root.iterate(function (entry) { + iterations++; + return fn(entry[1], entry[0], this$1$1); + }, reverse); + return iterations; + }; + + Map.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + if (!ownerID) { + if (this.size === 0) { + return emptyMap(); + } + this.__ownerID = ownerID; + this.__altered = false; + return this; + } + return makeMap(this.size, this._root, ownerID, this.__hash); + }; + + return Map; +}(KeyedCollection)); + +Map.isMap = isMap; + +var MapPrototype = Map.prototype; +MapPrototype[IS_MAP_SYMBOL] = true; +MapPrototype[DELETE] = MapPrototype.remove; +MapPrototype.removeAll = MapPrototype.deleteAll; +MapPrototype.setIn = setIn; +MapPrototype.removeIn = MapPrototype.deleteIn = deleteIn; +MapPrototype.update = update; +MapPrototype.updateIn = updateIn; +MapPrototype.merge = MapPrototype.concat = merge$1; +MapPrototype.mergeWith = mergeWith$1; +MapPrototype.mergeDeep = mergeDeep; +MapPrototype.mergeDeepWith = mergeDeepWith; +MapPrototype.mergeIn = mergeIn; +MapPrototype.mergeDeepIn = mergeDeepIn; +MapPrototype.withMutations = withMutations; +MapPrototype.wasAltered = wasAltered; +MapPrototype.asImmutable = asImmutable; +MapPrototype['@@transducer/init'] = MapPrototype.asMutable = asMutable; +MapPrototype['@@transducer/step'] = function (result, arr) { + return result.set(arr[0], arr[1]); +}; +MapPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); +}; + +// #pragma Trie Nodes + +var ArrayMapNode = function ArrayMapNode(ownerID, entries) { + this.ownerID = ownerID; + this.entries = entries; +}; + +ArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + var entries = this.entries; + for (var ii = 0, len = entries.length; ii < len; ii++) { + if (is(key, entries[ii][0])) { + return entries[ii][1]; + } + } + return notSetValue; +}; + +ArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + var removed = value === NOT_SET; + + var entries = this.entries; + var idx = 0; + var len = entries.length; + for (; idx < len; idx++) { + if (is(key, entries[idx][0])) { + break; + } + } + var exists = idx < len; + + if (exists ? entries[idx][1] === value : removed) { + return this; + } + + SetRef(didAlter); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + (removed || !exists) && SetRef(didChangeSize); + + if (removed && entries.length === 1) { + return; // undefined + } + + if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) { + return createNodes(ownerID, entries, key, value); + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newEntries = isEditable ? entries : arrCopy(entries); + + if (exists) { + if (removed) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + idx === len - 1 + ? newEntries.pop() + : (newEntries[idx] = newEntries.pop()); + } else { + newEntries[idx] = [key, value]; + } + } else { + newEntries.push([key, value]); + } + + if (isEditable) { + this.entries = newEntries; + return this; + } + + return new ArrayMapNode(ownerID, newEntries); +}; + +var BitmapIndexedNode = function BitmapIndexedNode(ownerID, bitmap, nodes) { + this.ownerID = ownerID; + this.bitmap = bitmap; + this.nodes = nodes; +}; + +BitmapIndexedNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK); + var bitmap = this.bitmap; + return (bitmap & bit) === 0 + ? notSetValue + : this.nodes[popCount(bitmap & (bit - 1))].get( + shift + SHIFT, + keyHash, + key, + notSetValue + ); +}; + +BitmapIndexedNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + var bit = 1 << keyHashFrag; + var bitmap = this.bitmap; + var exists = (bitmap & bit) !== 0; + + if (!exists && value === NOT_SET) { + return this; + } + + var idx = popCount(bitmap & (bit - 1)); + var nodes = this.nodes; + var node = exists ? nodes[idx] : undefined; + var newNode = updateNode( + node, + ownerID, + shift + SHIFT, + keyHash, + key, + value, + didChangeSize, + didAlter + ); + + if (newNode === node) { + return this; + } + + if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) { + return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode); + } + + if ( + exists && + !newNode && + nodes.length === 2 && + isLeafNode(nodes[idx ^ 1]) + ) { + return nodes[idx ^ 1]; + } + + if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) { + return newNode; + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newBitmap = exists ? (newNode ? bitmap : bitmap ^ bit) : bitmap | bit; + var newNodes = exists + ? newNode + ? setAt(nodes, idx, newNode, isEditable) + : spliceOut(nodes, idx, isEditable) + : spliceIn(nodes, idx, newNode, isEditable); + + if (isEditable) { + this.bitmap = newBitmap; + this.nodes = newNodes; + return this; + } + + return new BitmapIndexedNode(ownerID, newBitmap, newNodes); +}; + +var HashArrayMapNode = function HashArrayMapNode(ownerID, count, nodes) { + this.ownerID = ownerID; + this.count = count; + this.nodes = nodes; +}; + +HashArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + var node = this.nodes[idx]; + return node + ? node.get(shift + SHIFT, keyHash, key, notSetValue) + : notSetValue; +}; + +HashArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + var removed = value === NOT_SET; + var nodes = this.nodes; + var node = nodes[idx]; + + if (removed && !node) { + return this; + } + + var newNode = updateNode( + node, + ownerID, + shift + SHIFT, + keyHash, + key, + value, + didChangeSize, + didAlter + ); + if (newNode === node) { + return this; + } + + var newCount = this.count; + if (!node) { + newCount++; + } else if (!newNode) { + newCount--; + if (newCount < MIN_HASH_ARRAY_MAP_SIZE) { + return packNodes(ownerID, nodes, newCount, idx); + } + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newNodes = setAt(nodes, idx, newNode, isEditable); + + if (isEditable) { + this.count = newCount; + this.nodes = newNodes; + return this; + } + + return new HashArrayMapNode(ownerID, newCount, newNodes); +}; + +var HashCollisionNode = function HashCollisionNode(ownerID, keyHash, entries) { + this.ownerID = ownerID; + this.keyHash = keyHash; + this.entries = entries; +}; + +HashCollisionNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + var entries = this.entries; + for (var ii = 0, len = entries.length; ii < len; ii++) { + if (is(key, entries[ii][0])) { + return entries[ii][1]; + } + } + return notSetValue; +}; + +HashCollisionNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + if (keyHash === undefined) { + keyHash = hash(key); + } + + var removed = value === NOT_SET; + + if (keyHash !== this.keyHash) { + if (removed) { + return this; + } + SetRef(didAlter); + SetRef(didChangeSize); + return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]); + } + + var entries = this.entries; + var idx = 0; + var len = entries.length; + for (; idx < len; idx++) { + if (is(key, entries[idx][0])) { + break; + } + } + var exists = idx < len; + + if (exists ? entries[idx][1] === value : removed) { + return this; + } + + SetRef(didAlter); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + (removed || !exists) && SetRef(didChangeSize); + + if (removed && len === 2) { + return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]); + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newEntries = isEditable ? entries : arrCopy(entries); + + if (exists) { + if (removed) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + idx === len - 1 + ? newEntries.pop() + : (newEntries[idx] = newEntries.pop()); + } else { + newEntries[idx] = [key, value]; + } + } else { + newEntries.push([key, value]); + } + + if (isEditable) { + this.entries = newEntries; + return this; + } + + return new HashCollisionNode(ownerID, this.keyHash, newEntries); +}; + +var ValueNode = function ValueNode(ownerID, keyHash, entry) { + this.ownerID = ownerID; + this.keyHash = keyHash; + this.entry = entry; +}; + +ValueNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + return is(key, this.entry[0]) ? this.entry[1] : notSetValue; +}; + +ValueNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + var removed = value === NOT_SET; + var keyMatch = is(key, this.entry[0]); + if (keyMatch ? value === this.entry[1] : removed) { + return this; + } + + SetRef(didAlter); + + if (removed) { + SetRef(didChangeSize); + return; // undefined + } + + if (keyMatch) { + if (ownerID && ownerID === this.ownerID) { + this.entry[1] = value; + return this; + } + return new ValueNode(ownerID, this.keyHash, [key, value]); + } + + SetRef(didChangeSize); + return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]); +}; + +// #pragma Iterators + +ArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = + function (fn, reverse) { + var entries = this.entries; + for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) { + if (fn(entries[reverse ? maxIndex - ii : ii]) === false) { + return false; + } + } + }; + +BitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = + function (fn, reverse) { + var nodes = this.nodes; + for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) { + var node = nodes[reverse ? maxIndex - ii : ii]; + if (node && node.iterate(fn, reverse) === false) { + return false; + } + } + }; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +ValueNode.prototype.iterate = function (fn, reverse) { + return fn(this.entry); +}; + +var MapIterator = /*@__PURE__*/(function (Iterator) { + function MapIterator(map, type, reverse) { + this._type = type; + this._reverse = reverse; + this._stack = map._root && mapIteratorFrame(map._root); + } + + if ( Iterator ) MapIterator.__proto__ = Iterator; + MapIterator.prototype = Object.create( Iterator && Iterator.prototype ); + MapIterator.prototype.constructor = MapIterator; + + MapIterator.prototype.next = function next () { + var type = this._type; + var stack = this._stack; + while (stack) { + var node = stack.node; + var index = stack.index++; + var maxIndex = (void 0); + if (node.entry) { + if (index === 0) { + return mapIteratorValue(type, node.entry); + } + } else if (node.entries) { + maxIndex = node.entries.length - 1; + if (index <= maxIndex) { + return mapIteratorValue( + type, + node.entries[this._reverse ? maxIndex - index : index] + ); + } + } else { + maxIndex = node.nodes.length - 1; + if (index <= maxIndex) { + var subNode = node.nodes[this._reverse ? maxIndex - index : index]; + if (subNode) { + if (subNode.entry) { + return mapIteratorValue(type, subNode.entry); + } + stack = this._stack = mapIteratorFrame(subNode, stack); + } + continue; + } + } + stack = this._stack = this._stack.__prev; + } + return iteratorDone(); + }; + + return MapIterator; +}(Iterator)); + +function mapIteratorValue(type, entry) { + return iteratorValue(type, entry[0], entry[1]); +} + +function mapIteratorFrame(node, prev) { + return { + node: node, + index: 0, + __prev: prev, + }; +} + +function makeMap(size, root, ownerID, hash) { + var map = Object.create(MapPrototype); + map.size = size; + map._root = root; + map.__ownerID = ownerID; + map.__hash = hash; + map.__altered = false; + return map; +} + +var EMPTY_MAP; +function emptyMap() { + return EMPTY_MAP || (EMPTY_MAP = makeMap(0)); +} + +function updateMap(map, k, v) { + var newRoot; + var newSize; + if (!map._root) { + if (v === NOT_SET) { + return map; + } + newSize = 1; + newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]); + } else { + var didChangeSize = MakeRef(); + var didAlter = MakeRef(); + newRoot = updateNode( + map._root, + map.__ownerID, + 0, + undefined, + k, + v, + didChangeSize, + didAlter + ); + if (!didAlter.value) { + return map; + } + newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0); + } + if (map.__ownerID) { + map.size = newSize; + map._root = newRoot; + map.__hash = undefined; + map.__altered = true; + return map; + } + return newRoot ? makeMap(newSize, newRoot) : emptyMap(); +} + +function updateNode( + node, + ownerID, + shift, + keyHash, + key, + value, + didChangeSize, + didAlter +) { + if (!node) { + if (value === NOT_SET) { + return node; + } + SetRef(didAlter); + SetRef(didChangeSize); + return new ValueNode(ownerID, keyHash, [key, value]); + } + return node.update( + ownerID, + shift, + keyHash, + key, + value, + didChangeSize, + didAlter + ); +} + +function isLeafNode(node) { + return ( + node.constructor === ValueNode || node.constructor === HashCollisionNode + ); +} + +function mergeIntoNode(node, ownerID, shift, keyHash, entry) { + if (node.keyHash === keyHash) { + return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]); + } + + var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK; + var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + + var newNode; + var nodes = + idx1 === idx2 + ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] + : ((newNode = new ValueNode(ownerID, keyHash, entry)), + idx1 < idx2 ? [node, newNode] : [newNode, node]); + + return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes); +} + +function createNodes(ownerID, entries, key, value) { + if (!ownerID) { + ownerID = new OwnerID(); + } + var node = new ValueNode(ownerID, hash(key), [key, value]); + for (var ii = 0; ii < entries.length; ii++) { + var entry = entries[ii]; + node = node.update(ownerID, 0, undefined, entry[0], entry[1]); + } + return node; +} + +function packNodes(ownerID, nodes, count, excluding) { + var bitmap = 0; + var packedII = 0; + var packedNodes = new Array(count); + for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) { + var node = nodes[ii]; + if (node !== undefined && ii !== excluding) { + bitmap |= bit; + packedNodes[packedII++] = node; + } + } + return new BitmapIndexedNode(ownerID, bitmap, packedNodes); +} + +function expandNodes(ownerID, nodes, bitmap, including, node) { + var count = 0; + var expandedNodes = new Array(SIZE); + for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) { + expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined; + } + expandedNodes[including] = node; + return new HashArrayMapNode(ownerID, count + 1, expandedNodes); +} + +function popCount(x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return x & 0x7f; +} + +function setAt(array, idx, val, canEdit) { + var newArray = canEdit ? array : arrCopy(array); + newArray[idx] = val; + return newArray; +} + +function spliceIn(array, idx, val, canEdit) { + var newLen = array.length + 1; + if (canEdit && idx + 1 === newLen) { + array[idx] = val; + return array; + } + var newArray = new Array(newLen); + var after = 0; + for (var ii = 0; ii < newLen; ii++) { + if (ii === idx) { + newArray[ii] = val; + after = -1; + } else { + newArray[ii] = array[ii + after]; + } + } + return newArray; +} + +function spliceOut(array, idx, canEdit) { + var newLen = array.length - 1; + if (canEdit && idx === newLen) { + array.pop(); + return array; + } + var newArray = new Array(newLen); + var after = 0; + for (var ii = 0; ii < newLen; ii++) { + if (ii === idx) { + after = 1; + } + newArray[ii] = array[ii + after]; + } + return newArray; +} + +var MAX_ARRAY_MAP_SIZE = SIZE / 4; +var MAX_BITMAP_INDEXED_SIZE = SIZE / 2; +var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4; + +var IS_LIST_SYMBOL = '@@__IMMUTABLE_LIST__@@'; +/** + * True if `maybeList` is a List. + */ +function isList(maybeList) { + return Boolean(maybeList && + // @ts-expect-error: maybeList is typed as `{}`, need to change in 6.0 to `maybeList && typeof maybeList === 'object' && IS_LIST_SYMBOL in maybeList` + maybeList[IS_LIST_SYMBOL]); +} + +var List = /*@__PURE__*/(function (IndexedCollection) { + function List(value) { + var empty = emptyList(); + if (value === undefined || value === null) { + // eslint-disable-next-line no-constructor-return + return empty; + } + if (isList(value)) { + // eslint-disable-next-line no-constructor-return + return value; + } + var iter = IndexedCollection(value); + var size = iter.size; + if (size === 0) { + // eslint-disable-next-line no-constructor-return + return empty; + } + assertNotInfinite(size); + if (size > 0 && size < SIZE) { + // eslint-disable-next-line no-constructor-return + return makeList(0, size, SHIFT, null, new VNode(iter.toArray())); + } + // eslint-disable-next-line no-constructor-return + return empty.withMutations(function (list) { + list.setSize(size); + iter.forEach(function (v, i) { return list.set(i, v); }); + }); + } + + if ( IndexedCollection ) List.__proto__ = IndexedCollection; + List.prototype = Object.create( IndexedCollection && IndexedCollection.prototype ); + List.prototype.constructor = List; + + List.of = function of (/*...values*/) { + return this(arguments); + }; + + List.prototype.toString = function toString () { + return this.__toString('List [', ']'); + }; + + // @pragma Access + + List.prototype.get = function get (index, notSetValue) { + index = wrapIndex(this, index); + if (index >= 0 && index < this.size) { + index += this._origin; + var node = listNodeFor(this, index); + return node && node.array[index & MASK]; + } + return notSetValue; + }; + + // @pragma Modification + + List.prototype.set = function set (index, value) { + return updateList(this, index, value); + }; + + List.prototype.remove = function remove (index) { + return !this.has(index) + ? this + : index === 0 + ? this.shift() + : index === this.size - 1 + ? this.pop() + : this.splice(index, 1); + }; + + List.prototype.insert = function insert (index, value) { + return this.splice(index, 0, value); + }; + + List.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = this._origin = this._capacity = 0; + this._level = SHIFT; + this._root = this._tail = this.__hash = undefined; + this.__altered = true; + return this; + } + return emptyList(); + }; + + List.prototype.push = function push (/*...values*/) { + var values = arguments; + var oldSize = this.size; + return this.withMutations(function (list) { + setListBounds(list, 0, oldSize + values.length); + for (var ii = 0; ii < values.length; ii++) { + list.set(oldSize + ii, values[ii]); + } + }); + }; + + List.prototype.pop = function pop () { + return setListBounds(this, 0, -1); + }; + + List.prototype.unshift = function unshift (/*...values*/) { + var values = arguments; + return this.withMutations(function (list) { + setListBounds(list, -values.length); + for (var ii = 0; ii < values.length; ii++) { + list.set(ii, values[ii]); + } + }); + }; + + List.prototype.shift = function shift () { + return setListBounds(this, 1); + }; + + List.prototype.shuffle = function shuffle (random) { + if ( random === void 0 ) random = Math.random; + + return this.withMutations(function (mutable) { + // implementation of the Fisher-Yates shuffle: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle + var current = mutable.size; + var destination; + var tmp; + + while (current) { + destination = Math.floor(random() * current--); + + tmp = mutable.get(destination); + mutable.set(destination, mutable.get(current)); + mutable.set(current, tmp); + } + }); + }; + + // @pragma Composition + + List.prototype.concat = function concat (/*...collections*/) { + var arguments$1 = arguments; + + var seqs = []; + for (var i = 0; i < arguments.length; i++) { + var argument = arguments$1[i]; + var seq = IndexedCollection( + typeof argument !== 'string' && hasIterator(argument) + ? argument + : [argument] + ); + if (seq.size !== 0) { + seqs.push(seq); + } + } + if (seqs.length === 0) { + return this; + } + if (this.size === 0 && !this.__ownerID && seqs.length === 1) { + return this.constructor(seqs[0]); + } + return this.withMutations(function (list) { + seqs.forEach(function (seq) { return seq.forEach(function (value) { return list.push(value); }); }); + }); + }; + + List.prototype.setSize = function setSize (size) { + return setListBounds(this, 0, size); + }; + + List.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + return this.withMutations(function (list) { + for (var i = 0; i < this$1$1.size; i++) { + list.set(i, mapper.call(context, list.get(i), i, this$1$1)); + } + }); + }; + + // @pragma Iteration + + List.prototype.slice = function slice (begin, end) { + var size = this.size; + if (wholeSlice(begin, end, size)) { + return this; + } + return setListBounds( + this, + resolveBegin(begin, size), + resolveEnd(end, size) + ); + }; + + List.prototype.__iterator = function __iterator (type, reverse) { + var index = reverse ? this.size : 0; + var values = iterateList(this, reverse); + return new Iterator(function () { + var value = values(); + return value === DONE + ? iteratorDone() + : iteratorValue(type, reverse ? --index : index++, value); + }); + }; + + List.prototype.__iterate = function __iterate (fn, reverse) { + var index = reverse ? this.size : 0; + var values = iterateList(this, reverse); + var value; + while ((value = values()) !== DONE) { + if (fn(value, reverse ? --index : index++, this) === false) { + break; + } + } + return index; + }; + + List.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + if (!ownerID) { + if (this.size === 0) { + return emptyList(); + } + this.__ownerID = ownerID; + this.__altered = false; + return this; + } + return makeList( + this._origin, + this._capacity, + this._level, + this._root, + this._tail, + ownerID, + this.__hash + ); + }; + + return List; +}(IndexedCollection)); + +List.isList = isList; + +var ListPrototype = List.prototype; +ListPrototype[IS_LIST_SYMBOL] = true; +ListPrototype[DELETE] = ListPrototype.remove; +ListPrototype.merge = ListPrototype.concat; +ListPrototype.setIn = setIn; +ListPrototype.deleteIn = ListPrototype.removeIn = deleteIn; +ListPrototype.update = update; +ListPrototype.updateIn = updateIn; +ListPrototype.mergeIn = mergeIn; +ListPrototype.mergeDeepIn = mergeDeepIn; +ListPrototype.withMutations = withMutations; +ListPrototype.wasAltered = wasAltered; +ListPrototype.asImmutable = asImmutable; +ListPrototype['@@transducer/init'] = ListPrototype.asMutable = asMutable; +ListPrototype['@@transducer/step'] = function (result, arr) { + return result.push(arr); +}; +ListPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); +}; + +var VNode = function VNode(array, ownerID) { + this.array = array; + this.ownerID = ownerID; +}; + +// TODO: seems like these methods are very similar + +VNode.prototype.removeBefore = function removeBefore (ownerID, level, index) { + if ( + (index & ((1 << (level + SHIFT)) - 1)) === 0 || + this.array.length === 0 + ) { + return this; + } + var originIndex = (index >>> level) & MASK; + if (originIndex >= this.array.length) { + return new VNode([], ownerID); + } + var removingFirst = originIndex === 0; + var newChild; + if (level > 0) { + var oldChild = this.array[originIndex]; + newChild = + oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index); + if (newChild === oldChild && removingFirst) { + return this; + } + } + if (removingFirst && !newChild) { + return this; + } + var editable = editableVNode(this, ownerID); + if (!removingFirst) { + for (var ii = 0; ii < originIndex; ii++) { + editable.array[ii] = undefined; + } + } + if (newChild) { + editable.array[originIndex] = newChild; + } + return editable; +}; + +VNode.prototype.removeAfter = function removeAfter (ownerID, level, index) { + if ( + index === (level ? 1 << (level + SHIFT) : SIZE) || + this.array.length === 0 + ) { + return this; + } + var sizeIndex = ((index - 1) >>> level) & MASK; + if (sizeIndex >= this.array.length) { + return this; + } + + var newChild; + if (level > 0) { + var oldChild = this.array[sizeIndex]; + newChild = + oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index); + if (newChild === oldChild && sizeIndex === this.array.length - 1) { + return this; + } + } + + var editable = editableVNode(this, ownerID); + editable.array.splice(sizeIndex + 1); + if (newChild) { + editable.array[sizeIndex] = newChild; + } + return editable; +}; + +var DONE = {}; + +function iterateList(list, reverse) { + var left = list._origin; + var right = list._capacity; + var tailPos = getTailOffset(right); + var tail = list._tail; + + return iterateNodeOrLeaf(list._root, list._level, 0); + + function iterateNodeOrLeaf(node, level, offset) { + return level === 0 + ? iterateLeaf(node, offset) + : iterateNode(node, level, offset); + } + + function iterateLeaf(node, offset) { + var array = offset === tailPos ? tail && tail.array : node && node.array; + var from = offset > left ? 0 : left - offset; + var to = right - offset; + if (to > SIZE) { + to = SIZE; + } + return function () { + if (from === to) { + return DONE; + } + var idx = reverse ? --to : from++; + return array && array[idx]; + }; + } + + function iterateNode(node, level, offset) { + var values; + var array = node && node.array; + var from = offset > left ? 0 : (left - offset) >> level; + var to = ((right - offset) >> level) + 1; + if (to > SIZE) { + to = SIZE; + } + return function () { + while (true) { + if (values) { + var value = values(); + if (value !== DONE) { + return value; + } + values = null; + } + if (from === to) { + return DONE; + } + var idx = reverse ? --to : from++; + values = iterateNodeOrLeaf( + array && array[idx], + level - SHIFT, + offset + (idx << level) + ); + } + }; + } +} + +function makeList(origin, capacity, level, root, tail, ownerID, hash) { + var list = Object.create(ListPrototype); + list.size = capacity - origin; + list._origin = origin; + list._capacity = capacity; + list._level = level; + list._root = root; + list._tail = tail; + list.__ownerID = ownerID; + list.__hash = hash; + list.__altered = false; + return list; +} + +function emptyList() { + return makeList(0, 0, SHIFT); +} + +function updateList(list, index, value) { + index = wrapIndex(list, index); + + if (index !== index) { + return list; + } + + if (index >= list.size || index < 0) { + return list.withMutations(function (list) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + index < 0 + ? setListBounds(list, index).set(0, value) + : setListBounds(list, 0, index + 1).set(index, value); + }); + } + + index += list._origin; + + var newTail = list._tail; + var newRoot = list._root; + var didAlter = MakeRef(); + if (index >= getTailOffset(list._capacity)) { + newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter); + } else { + newRoot = updateVNode( + newRoot, + list.__ownerID, + list._level, + index, + value, + didAlter + ); + } + + if (!didAlter.value) { + return list; + } + + if (list.__ownerID) { + list._root = newRoot; + list._tail = newTail; + list.__hash = undefined; + list.__altered = true; + return list; + } + return makeList(list._origin, list._capacity, list._level, newRoot, newTail); +} + +function updateVNode(node, ownerID, level, index, value, didAlter) { + var idx = (index >>> level) & MASK; + var nodeHas = node && idx < node.array.length; + if (!nodeHas && value === undefined) { + return node; + } + + var newNode; + + if (level > 0) { + var lowerNode = node && node.array[idx]; + var newLowerNode = updateVNode( + lowerNode, + ownerID, + level - SHIFT, + index, + value, + didAlter + ); + if (newLowerNode === lowerNode) { + return node; + } + newNode = editableVNode(node, ownerID); + newNode.array[idx] = newLowerNode; + return newNode; + } + + if (nodeHas && node.array[idx] === value) { + return node; + } + + if (didAlter) { + SetRef(didAlter); + } + + newNode = editableVNode(node, ownerID); + if (value === undefined && idx === newNode.array.length - 1) { + newNode.array.pop(); + } else { + newNode.array[idx] = value; + } + return newNode; +} + +function editableVNode(node, ownerID) { + if (ownerID && node && ownerID === node.ownerID) { + return node; + } + return new VNode(node ? node.array.slice() : [], ownerID); +} + +function listNodeFor(list, rawIndex) { + if (rawIndex >= getTailOffset(list._capacity)) { + return list._tail; + } + if (rawIndex < 1 << (list._level + SHIFT)) { + var node = list._root; + var level = list._level; + while (node && level > 0) { + node = node.array[(rawIndex >>> level) & MASK]; + level -= SHIFT; + } + return node; + } +} + +function setListBounds(list, begin, end) { + // Sanitize begin & end using this shorthand for ToInt32(argument) + // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 + if (begin !== undefined) { + begin |= 0; + } + if (end !== undefined) { + end |= 0; + } + var owner = list.__ownerID || new OwnerID(); + var oldOrigin = list._origin; + var oldCapacity = list._capacity; + var newOrigin = oldOrigin + begin; + var newCapacity = + end === undefined + ? oldCapacity + : end < 0 + ? oldCapacity + end + : oldOrigin + end; + if (newOrigin === oldOrigin && newCapacity === oldCapacity) { + return list; + } + + // If it's going to end after it starts, it's empty. + if (newOrigin >= newCapacity) { + return list.clear(); + } + + var newLevel = list._level; + var newRoot = list._root; + + // New origin might need creating a higher root. + var offsetShift = 0; + while (newOrigin + offsetShift < 0) { + newRoot = new VNode( + newRoot && newRoot.array.length ? [undefined, newRoot] : [], + owner + ); + newLevel += SHIFT; + offsetShift += 1 << newLevel; + } + if (offsetShift) { + newOrigin += offsetShift; + oldOrigin += offsetShift; + newCapacity += offsetShift; + oldCapacity += offsetShift; + } + + var oldTailOffset = getTailOffset(oldCapacity); + var newTailOffset = getTailOffset(newCapacity); + + // New size might need creating a higher root. + while (newTailOffset >= 1 << (newLevel + SHIFT)) { + newRoot = new VNode( + newRoot && newRoot.array.length ? [newRoot] : [], + owner + ); + newLevel += SHIFT; + } + + // Locate or create the new tail. + var oldTail = list._tail; + var newTail = + newTailOffset < oldTailOffset + ? listNodeFor(list, newCapacity - 1) + : newTailOffset > oldTailOffset + ? new VNode([], owner) + : oldTail; + + // Merge Tail into tree. + if ( + oldTail && + newTailOffset > oldTailOffset && + newOrigin < oldCapacity && + oldTail.array.length + ) { + newRoot = editableVNode(newRoot, owner); + var node = newRoot; + for (var level = newLevel; level > SHIFT; level -= SHIFT) { + var idx = (oldTailOffset >>> level) & MASK; + node = node.array[idx] = editableVNode(node.array[idx], owner); + } + node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail; + } + + // If the size has been reduced, there's a chance the tail needs to be trimmed. + if (newCapacity < oldCapacity) { + newTail = newTail && newTail.removeAfter(owner, 0, newCapacity); + } + + // If the new origin is within the tail, then we do not need a root. + if (newOrigin >= newTailOffset) { + newOrigin -= newTailOffset; + newCapacity -= newTailOffset; + newLevel = SHIFT; + newRoot = null; + newTail = newTail && newTail.removeBefore(owner, 0, newOrigin); + + // Otherwise, if the root has been trimmed, garbage collect. + } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) { + offsetShift = 0; + + // Identify the new top root node of the subtree of the old root. + while (newRoot) { + var beginIndex = (newOrigin >>> newLevel) & MASK; + if ((beginIndex !== newTailOffset >>> newLevel) & MASK) { + break; + } + if (beginIndex) { + offsetShift += (1 << newLevel) * beginIndex; + } + newLevel -= SHIFT; + newRoot = newRoot.array[beginIndex]; + } + + // Trim the new sides of the new root. + if (newRoot && newOrigin > oldOrigin) { + newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift); + } + if (newRoot && newTailOffset < oldTailOffset) { + newRoot = newRoot.removeAfter( + owner, + newLevel, + newTailOffset - offsetShift + ); + } + if (offsetShift) { + newOrigin -= offsetShift; + newCapacity -= offsetShift; + } + } + + if (list.__ownerID) { + list.size = newCapacity - newOrigin; + list._origin = newOrigin; + list._capacity = newCapacity; + list._level = newLevel; + list._root = newRoot; + list._tail = newTail; + list.__hash = undefined; + list.__altered = true; + return list; + } + return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail); +} + +function getTailOffset(size) { + return size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT; +} + +var OrderedMap = /*@__PURE__*/(function (Map) { + function OrderedMap(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyOrderedMap() + : isOrderedMap(value) + ? value + : emptyOrderedMap().withMutations(function (map) { + var iter = KeyedCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v, k) { return map.set(k, v); }); + }); + } + + if ( Map ) OrderedMap.__proto__ = Map; + OrderedMap.prototype = Object.create( Map && Map.prototype ); + OrderedMap.prototype.constructor = OrderedMap; + + OrderedMap.of = function of (/*...values*/) { + return this(arguments); + }; + + OrderedMap.prototype.toString = function toString () { + return this.__toString('OrderedMap {', '}'); + }; + + // @pragma Access + + OrderedMap.prototype.get = function get (k, notSetValue) { + var index = this._map.get(k); + return index !== undefined ? this._list.get(index)[1] : notSetValue; + }; + + // @pragma Modification + + OrderedMap.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = 0; + this._map.clear(); + this._list.clear(); + this.__altered = true; + return this; + } + return emptyOrderedMap(); + }; + + OrderedMap.prototype.set = function set (k, v) { + return updateOrderedMap(this, k, v); + }; + + OrderedMap.prototype.remove = function remove (k) { + return updateOrderedMap(this, k, NOT_SET); + }; + + OrderedMap.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._list.__iterate( + function (entry) { return entry && fn(entry[1], entry[0], this$1$1); }, + reverse + ); + }; + + OrderedMap.prototype.__iterator = function __iterator (type, reverse) { + return this._list.fromEntrySeq().__iterator(type, reverse); + }; + + OrderedMap.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + var newMap = this._map.__ensureOwner(ownerID); + var newList = this._list.__ensureOwner(ownerID); + if (!ownerID) { + if (this.size === 0) { + return emptyOrderedMap(); + } + this.__ownerID = ownerID; + this.__altered = false; + this._map = newMap; + this._list = newList; + return this; + } + return makeOrderedMap(newMap, newList, ownerID, this.__hash); + }; + + return OrderedMap; +}(Map)); + +OrderedMap.isOrderedMap = isOrderedMap; + +OrderedMap.prototype[IS_ORDERED_SYMBOL] = true; +OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove; + +function makeOrderedMap(map, list, ownerID, hash) { + var omap = Object.create(OrderedMap.prototype); + omap.size = map ? map.size : 0; + omap._map = map; + omap._list = list; + omap.__ownerID = ownerID; + omap.__hash = hash; + omap.__altered = false; + return omap; +} + +var EMPTY_ORDERED_MAP; +function emptyOrderedMap() { + return ( + EMPTY_ORDERED_MAP || + (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList())) + ); +} + +function updateOrderedMap(omap, k, v) { + var map = omap._map; + var list = omap._list; + var i = map.get(k); + var has = i !== undefined; + var newMap; + var newList; + if (v === NOT_SET) { + // removed + if (!has) { + return omap; + } + if (list.size >= SIZE && list.size >= map.size * 2) { + newList = list.filter(function (entry, idx) { return entry !== undefined && i !== idx; }); + newMap = newList + .toKeyedSeq() + .map(function (entry) { return entry[0]; }) + .flip() + .toMap(); + if (omap.__ownerID) { + newMap.__ownerID = newList.__ownerID = omap.__ownerID; + } + } else { + newMap = map.remove(k); + newList = i === list.size - 1 ? list.pop() : list.set(i, undefined); + } + } else if (has) { + if (v === list.get(i)[1]) { + return omap; + } + newMap = map; + newList = list.set(i, [k, v]); + } else { + newMap = map.set(k, list.size); + newList = list.set(list.size, [k, v]); + } + if (omap.__ownerID) { + omap.size = newMap.size; + omap._map = newMap; + omap._list = newList; + omap.__hash = undefined; + omap.__altered = true; + return omap; + } + return makeOrderedMap(newMap, newList); +} + +var IS_STACK_SYMBOL = '@@__IMMUTABLE_STACK__@@'; +/** + * True if `maybeStack` is a Stack. + */ +function isStack(maybeStack) { + return Boolean(maybeStack && + // @ts-expect-error: maybeStack is typed as `{}`, need to change in 6.0 to `maybeStack && typeof maybeStack === 'object' && MAYBE_STACK_SYMBOL in maybeStack` + maybeStack[IS_STACK_SYMBOL]); +} + +var Stack = /*@__PURE__*/(function (IndexedCollection) { + function Stack(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyStack() + : isStack(value) + ? value + : emptyStack().pushAll(value); + } + + if ( IndexedCollection ) Stack.__proto__ = IndexedCollection; + Stack.prototype = Object.create( IndexedCollection && IndexedCollection.prototype ); + Stack.prototype.constructor = Stack; + + Stack.of = function of (/*...values*/) { + return this(arguments); + }; + + Stack.prototype.toString = function toString () { + return this.__toString('Stack [', ']'); + }; + + // @pragma Access + + Stack.prototype.get = function get (index, notSetValue) { + var head = this._head; + index = wrapIndex(this, index); + while (head && index--) { + head = head.next; + } + return head ? head.value : notSetValue; + }; + + Stack.prototype.peek = function peek () { + return this._head && this._head.value; + }; + + // @pragma Modification + + Stack.prototype.push = function push (/*...values*/) { + var arguments$1 = arguments; + + if (arguments.length === 0) { + return this; + } + var newSize = this.size + arguments.length; + var head = this._head; + for (var ii = arguments.length - 1; ii >= 0; ii--) { + head = { + value: arguments$1[ii], + next: head, + }; + } + if (this.__ownerID) { + this.size = newSize; + this._head = head; + this.__hash = undefined; + this.__altered = true; + return this; + } + return makeStack(newSize, head); + }; + + Stack.prototype.pushAll = function pushAll (iter) { + iter = IndexedCollection(iter); + if (iter.size === 0) { + return this; + } + if (this.size === 0 && isStack(iter)) { + return iter; + } + assertNotInfinite(iter.size); + var newSize = this.size; + var head = this._head; + iter.__iterate(function (value) { + newSize++; + head = { + value: value, + next: head, + }; + }, /* reverse */ true); + if (this.__ownerID) { + this.size = newSize; + this._head = head; + this.__hash = undefined; + this.__altered = true; + return this; + } + return makeStack(newSize, head); + }; + + Stack.prototype.pop = function pop () { + return this.slice(1); + }; + + Stack.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = 0; + this._head = undefined; + this.__hash = undefined; + this.__altered = true; + return this; + } + return emptyStack(); + }; + + Stack.prototype.slice = function slice (begin, end) { + if (wholeSlice(begin, end, this.size)) { + return this; + } + var resolvedBegin = resolveBegin(begin, this.size); + var resolvedEnd = resolveEnd(end, this.size); + if (resolvedEnd !== this.size) { + // super.slice(begin, end); + return IndexedCollection.prototype.slice.call(this, begin, end); + } + var newSize = this.size - resolvedBegin; + var head = this._head; + while (resolvedBegin--) { + head = head.next; + } + if (this.__ownerID) { + this.size = newSize; + this._head = head; + this.__hash = undefined; + this.__altered = true; + return this; + } + return makeStack(newSize, head); + }; + + // @pragma Mutability + + Stack.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + if (!ownerID) { + if (this.size === 0) { + return emptyStack(); + } + this.__ownerID = ownerID; + this.__altered = false; + return this; + } + return makeStack(this.size, this._head, ownerID, this.__hash); + }; + + // @pragma Iteration + + Stack.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + if (reverse) { + return new ArraySeq(this.toArray()).__iterate( + function (v, k) { return fn(v, k, this$1$1); }, + reverse + ); + } + var iterations = 0; + var node = this._head; + while (node) { + if (fn(node.value, iterations++, this) === false) { + break; + } + node = node.next; + } + return iterations; + }; + + Stack.prototype.__iterator = function __iterator (type, reverse) { + if (reverse) { + return new ArraySeq(this.toArray()).__iterator(type, reverse); + } + var iterations = 0; + var node = this._head; + return new Iterator(function () { + if (node) { + var value = node.value; + node = node.next; + return iteratorValue(type, iterations++, value); + } + return iteratorDone(); + }); + }; + + return Stack; +}(IndexedCollection)); + +Stack.isStack = isStack; + +var StackPrototype = Stack.prototype; +StackPrototype[IS_STACK_SYMBOL] = true; +StackPrototype.shift = StackPrototype.pop; +StackPrototype.unshift = StackPrototype.push; +StackPrototype.unshiftAll = StackPrototype.pushAll; +StackPrototype.withMutations = withMutations; +StackPrototype.wasAltered = wasAltered; +StackPrototype.asImmutable = asImmutable; +StackPrototype['@@transducer/init'] = StackPrototype.asMutable = asMutable; +StackPrototype['@@transducer/step'] = function (result, arr) { + return result.unshift(arr); +}; +StackPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); +}; + +function makeStack(size, head, ownerID, hash) { + var map = Object.create(StackPrototype); + map.size = size; + map._head = head; + map.__ownerID = ownerID; + map.__hash = hash; + map.__altered = false; + return map; +} + +var EMPTY_STACK; +function emptyStack() { + return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); +} + +var IS_SET_SYMBOL = '@@__IMMUTABLE_SET__@@'; +/** + * True if `maybeSet` is a Set. + * + * Also true for OrderedSets. + */ +function isSet(maybeSet) { + return Boolean(maybeSet && + // @ts-expect-error: maybeSet is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSet === 'object' && MAYBE_SET_SYMBOL in maybeSet` + maybeSet[IS_SET_SYMBOL]); +} + +/** + * True if `maybeOrderedSet` is an OrderedSet. + */ +function isOrderedSet(maybeOrderedSet) { + return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet); +} + +function deepEqual(a, b) { + if (a === b) { + return true; + } + if (!isCollection(b) || + // @ts-expect-error size should exists on Collection + (a.size !== undefined && b.size !== undefined && a.size !== b.size) || + // @ts-expect-error __hash exists on Collection + (a.__hash !== undefined && + // @ts-expect-error __hash exists on Collection + b.__hash !== undefined && + // @ts-expect-error __hash exists on Collection + a.__hash !== b.__hash) || + isKeyed(a) !== isKeyed(b) || + isIndexed(a) !== isIndexed(b) || + // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid + isOrdered(a) !== isOrdered(b)) { + return false; + } + // @ts-expect-error size should exists on Collection + if (a.size === 0 && b.size === 0) { + return true; + } + var notAssociative = !isAssociative(a); + // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid + if (isOrdered(a)) { + var entries = a.entries(); + // @ts-expect-error need to cast as boolean + return (b.every(function (v, k) { + var entry = entries.next().value; + return entry && is(entry[1], v) && (notAssociative || is(entry[0], k)); + }) && entries.next().done); + } + var flipped = false; + if (a.size === undefined) { + // @ts-expect-error size should exists on Collection + if (b.size === undefined) { + if (typeof a.cacheResult === 'function') { + a.cacheResult(); + } + } + else { + flipped = true; + var _ = a; + a = b; + b = _; + } + } + var allEqual = true; + var bSize = + // @ts-expect-error b is Range | Repeat | Collection as it may have been flipped, and __iterate is valid + b.__iterate(function (v, k) { + if (notAssociative + ? // @ts-expect-error has exists on Collection + !a.has(v) + : flipped + ? // @ts-expect-error type of `get` does not "catch" the version with `notSetValue` + !is(v, a.get(k, NOT_SET)) + : // @ts-expect-error type of `get` does not "catch" the version with `notSetValue` + !is(a.get(k, NOT_SET), v)) { + allEqual = false; + return false; + } + }); + return (allEqual && + // @ts-expect-error size should exists on Collection + a.size === bSize); +} + +/** + * Contributes additional methods to a constructor + */ +function mixin(ctor, +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type +methods) { + var keyCopier = function (key) { + // @ts-expect-error how to handle symbol ? + ctor.prototype[key] = methods[key]; + }; + Object.keys(methods).forEach(keyCopier); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + Object.getOwnPropertySymbols && + Object.getOwnPropertySymbols(methods).forEach(keyCopier); + return ctor; +} + +function toJS(value) { + if (!value || typeof value !== 'object') { + return value; + } + if (!isCollection(value)) { + if (!isDataStructure(value)) { + return value; + } + value = Seq(value); + } + if (isKeyed(value)) { + var result$1 = {}; + value.__iterate(function (v, k) { + result$1[k] = toJS(v); + }); + return result$1; + } + var result = []; + value.__iterate(function (v) { + result.push(toJS(v)); + }); + return result; +} + +var Set = /*@__PURE__*/(function (SetCollection) { + function Set(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySet() + : isSet(value) && !isOrdered(value) + ? value + : emptySet().withMutations(function (set) { + var iter = SetCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v) { return set.add(v); }); + }); + } + + if ( SetCollection ) Set.__proto__ = SetCollection; + Set.prototype = Object.create( SetCollection && SetCollection.prototype ); + Set.prototype.constructor = Set; + + Set.of = function of (/*...values*/) { + return this(arguments); + }; + + Set.fromKeys = function fromKeys (value) { + return this(KeyedCollection(value).keySeq()); + }; + + Set.intersect = function intersect (sets) { + sets = Collection(sets).toArray(); + return sets.length + ? SetPrototype.intersect.apply(Set(sets.pop()), sets) + : emptySet(); + }; + + Set.union = function union (sets) { + sets = Collection(sets).toArray(); + return sets.length + ? SetPrototype.union.apply(Set(sets.pop()), sets) + : emptySet(); + }; + + Set.prototype.toString = function toString () { + return this.__toString('Set {', '}'); + }; + + // @pragma Access + + Set.prototype.has = function has (value) { + return this._map.has(value); + }; + + // @pragma Modification + + Set.prototype.add = function add (value) { + return updateSet(this, this._map.set(value, value)); + }; + + Set.prototype.remove = function remove (value) { + return updateSet(this, this._map.remove(value)); + }; + + Set.prototype.clear = function clear () { + return updateSet(this, this._map.clear()); + }; + + // @pragma Composition + + Set.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + // keep track if the set is altered by the map function + var didChanges = false; + + var newMap = updateSet( + this, + this._map.mapEntries(function (ref) { + var v = ref[1]; + + var mapped = mapper.call(context, v, v, this$1$1); + + if (mapped !== v) { + didChanges = true; + } + + return [mapped, mapped]; + }, context) + ); + + return didChanges ? newMap : this; + }; + + Set.prototype.union = function union () { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + iters = iters.filter(function (x) { return x.size !== 0; }); + if (iters.length === 0) { + return this; + } + if (this.size === 0 && !this.__ownerID && iters.length === 1) { + return this.constructor(iters[0]); + } + return this.withMutations(function (set) { + for (var ii = 0; ii < iters.length; ii++) { + if (typeof iters[ii] === 'string') { + set.add(iters[ii]); + } else { + SetCollection(iters[ii]).forEach(function (value) { return set.add(value); }); + } + } + }); + }; + + Set.prototype.intersect = function intersect () { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + if (iters.length === 0) { + return this; + } + iters = iters.map(function (iter) { return SetCollection(iter); }); + var toRemove = []; + this.forEach(function (value) { + if (!iters.every(function (iter) { return iter.includes(value); })) { + toRemove.push(value); + } + }); + return this.withMutations(function (set) { + toRemove.forEach(function (value) { + set.remove(value); + }); + }); + }; + + Set.prototype.subtract = function subtract () { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + if (iters.length === 0) { + return this; + } + iters = iters.map(function (iter) { return SetCollection(iter); }); + var toRemove = []; + this.forEach(function (value) { + if (iters.some(function (iter) { return iter.includes(value); })) { + toRemove.push(value); + } + }); + return this.withMutations(function (set) { + toRemove.forEach(function (value) { + set.remove(value); + }); + }); + }; + + Set.prototype.sort = function sort (comparator) { + // Late binding + return OrderedSet(sortFactory(this, comparator)); + }; + + Set.prototype.sortBy = function sortBy (mapper, comparator) { + // Late binding + return OrderedSet(sortFactory(this, comparator, mapper)); + }; + + Set.prototype.wasAltered = function wasAltered () { + return this._map.wasAltered(); + }; + + Set.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._map.__iterate(function (k) { return fn(k, k, this$1$1); }, reverse); + }; + + Set.prototype.__iterator = function __iterator (type, reverse) { + return this._map.__iterator(type, reverse); + }; + + Set.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + var newMap = this._map.__ensureOwner(ownerID); + if (!ownerID) { + if (this.size === 0) { + return this.__empty(); + } + this.__ownerID = ownerID; + this._map = newMap; + return this; + } + return this.__make(newMap, ownerID); + }; + + return Set; +}(SetCollection)); + +Set.isSet = isSet; + +var SetPrototype = Set.prototype; +SetPrototype[IS_SET_SYMBOL] = true; +SetPrototype[DELETE] = SetPrototype.remove; +SetPrototype.merge = SetPrototype.concat = SetPrototype.union; +SetPrototype.withMutations = withMutations; +SetPrototype.asImmutable = asImmutable; +SetPrototype['@@transducer/init'] = SetPrototype.asMutable = asMutable; +SetPrototype['@@transducer/step'] = function (result, arr) { + return result.add(arr); +}; +SetPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); +}; + +SetPrototype.__empty = emptySet; +SetPrototype.__make = makeSet; + +function updateSet(set, newMap) { + if (set.__ownerID) { + set.size = newMap.size; + set._map = newMap; + return set; + } + return newMap === set._map + ? set + : newMap.size === 0 + ? set.__empty() + : set.__make(newMap); +} + +function makeSet(map, ownerID) { + var set = Object.create(SetPrototype); + set.size = map ? map.size : 0; + set._map = map; + set.__ownerID = ownerID; + return set; +} + +var EMPTY_SET; +function emptySet() { + return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap())); +} + +/** + * Returns a lazy seq of nums from start (inclusive) to end + * (exclusive), by step, where start defaults to 0, step to 1, and end to + * infinity. When start is equal to end, returns empty list. + */ +var Range = /*@__PURE__*/(function (IndexedSeq) { + function Range(start, end, step) { + if ( step === void 0 ) step = 1; + + if (!(this instanceof Range)) { + // eslint-disable-next-line no-constructor-return + return new Range(start, end, step); + } + invariant(step !== 0, 'Cannot step a Range by 0'); + invariant( + start !== undefined, + 'You must define a start value when using Range' + ); + invariant( + end !== undefined, + 'You must define an end value when using Range' + ); + + step = Math.abs(step); + if (end < start) { + step = -step; + } + this._start = start; + this._end = end; + this._step = step; + this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1); + if (this.size === 0) { + if (EMPTY_RANGE) { + // eslint-disable-next-line no-constructor-return + return EMPTY_RANGE; + } + // eslint-disable-next-line @typescript-eslint/no-this-alias + EMPTY_RANGE = this; + } + } + + if ( IndexedSeq ) Range.__proto__ = IndexedSeq; + Range.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + Range.prototype.constructor = Range; + + Range.prototype.toString = function toString () { + return this.size === 0 + ? 'Range []' + : ("Range [ " + (this._start) + "..." + (this._end) + (this._step !== 1 ? ' by ' + this._step : '') + " ]"); + }; + + Range.prototype.get = function get (index, notSetValue) { + return this.has(index) + ? this._start + wrapIndex(this, index) * this._step + : notSetValue; + }; + + Range.prototype.includes = function includes (searchValue) { + var possibleIndex = (searchValue - this._start) / this._step; + return ( + possibleIndex >= 0 && + possibleIndex < this.size && + possibleIndex === Math.floor(possibleIndex) + ); + }; + + Range.prototype.slice = function slice (begin, end) { + if (wholeSlice(begin, end, this.size)) { + return this; + } + begin = resolveBegin(begin, this.size); + end = resolveEnd(end, this.size); + if (end <= begin) { + return new Range(0, 0); + } + return new Range( + this.get(begin, this._end), + this.get(end, this._end), + this._step + ); + }; + + Range.prototype.indexOf = function indexOf (searchValue) { + var offsetValue = searchValue - this._start; + if (offsetValue % this._step === 0) { + var index = offsetValue / this._step; + if (index >= 0 && index < this.size) { + return index; + } + } + return -1; + }; + + Range.prototype.lastIndexOf = function lastIndexOf (searchValue) { + return this.indexOf(searchValue); + }; + + Range.prototype.__iterate = function __iterate (fn, reverse) { + var size = this.size; + var step = this._step; + var value = reverse ? this._start + (size - 1) * step : this._start; + var i = 0; + while (i !== size) { + if (fn(value, reverse ? size - ++i : i++, this) === false) { + break; + } + value += reverse ? -step : step; + } + return i; + }; + + Range.prototype.__iterator = function __iterator (type, reverse) { + var size = this.size; + var step = this._step; + var value = reverse ? this._start + (size - 1) * step : this._start; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var v = value; + value += reverse ? -step : step; + return iteratorValue(type, reverse ? size - ++i : i++, v); + }); + }; + + Range.prototype.equals = function equals (other) { + return other instanceof Range + ? this._start === other._start && + this._end === other._end && + this._step === other._step + : deepEqual(this, other); + }; + + return Range; +}(IndexedSeq)); + +var EMPTY_RANGE; + +/** + * Returns the value at the provided key path starting at the provided + * collection, or notSetValue if the key path is not defined. + * + * A functional alternative to `collection.getIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { getIn } from 'immutable'; + * + * getIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // 123 + * getIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p'], 'ifNotSet') // 'ifNotSet' + * ``` + */ +function getIn$1(collection, searchKeyPath, notSetValue) { + var keyPath = coerceKeyPath(searchKeyPath); + var i = 0; + while (i !== keyPath.length) { + // @ts-expect-error keyPath[i++] can not be undefined by design + collection = get(collection, keyPath[i++], NOT_SET); + if (collection === NOT_SET) { + return notSetValue; + } + } + return collection; +} + +function getIn(searchKeyPath, notSetValue) { + return getIn$1(this, searchKeyPath, notSetValue); +} + +/** + * Returns true if the key path is defined in the provided collection. + * + * A functional alternative to `collection.hasIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { hasIn } from 'immutable'; + * + * hasIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // true + * hasIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p']) // false + * ``` + */ +function hasIn$1(collection, keyPath) { + return getIn$1(collection, keyPath, NOT_SET) !== NOT_SET; +} + +function hasIn(searchKeyPath) { + return hasIn$1(this, searchKeyPath); +} + +function toObject() { + assertNotInfinite(this.size); + var object = {}; + this.__iterate(function (v, k) { + object[k] = v; + }); + return object; +} + +Collection.Iterator = Iterator; + +mixin(Collection, { + // ### Conversion to other types + + toArray: function toArray() { + assertNotInfinite(this.size); + var array = new Array(this.size || 0); + var useTuples = isKeyed(this); + var i = 0; + this.__iterate(function (v, k) { + // Keyed collections produce an array of tuples. + array[i++] = useTuples ? [k, v] : v; + }); + return array; + }, + + toIndexedSeq: function toIndexedSeq() { + return new ToIndexedSequence(this); + }, + + toJS: function toJS$1() { + return toJS(this); + }, + + toKeyedSeq: function toKeyedSeq() { + return new ToKeyedSequence(this, true); + }, + + toMap: function toMap() { + // Use Late Binding here to solve the circular dependency. + return Map(this.toKeyedSeq()); + }, + + toObject: toObject, + + toOrderedMap: function toOrderedMap() { + // Use Late Binding here to solve the circular dependency. + return OrderedMap(this.toKeyedSeq()); + }, + + toOrderedSet: function toOrderedSet() { + // Use Late Binding here to solve the circular dependency. + return OrderedSet(isKeyed(this) ? this.valueSeq() : this); + }, + + toSet: function toSet() { + // Use Late Binding here to solve the circular dependency. + return Set(isKeyed(this) ? this.valueSeq() : this); + }, + + toSetSeq: function toSetSeq() { + return new ToSetSequence(this); + }, + + toSeq: function toSeq() { + return isIndexed(this) + ? this.toIndexedSeq() + : isKeyed(this) + ? this.toKeyedSeq() + : this.toSetSeq(); + }, + + toStack: function toStack() { + // Use Late Binding here to solve the circular dependency. + return Stack(isKeyed(this) ? this.valueSeq() : this); + }, + + toList: function toList() { + // Use Late Binding here to solve the circular dependency. + return List(isKeyed(this) ? this.valueSeq() : this); + }, + + // ### Common JavaScript methods and properties + + toString: function toString() { + return '[Collection]'; + }, + + __toString: function __toString(head, tail) { + if (this.size === 0) { + return head + tail; + } + return ( + head + + ' ' + + this.toSeq().map(this.__toStringMapper).join(', ') + + ' ' + + tail + ); + }, + + // ### ES6 Collection methods (ES6 Array and Map) + + concat: function concat() { + var values = [], len = arguments.length; + while ( len-- ) values[ len ] = arguments[ len ]; + + return reify(this, concatFactory(this, values)); + }, + + includes: function includes(searchValue) { + return this.some(function (value) { return is(value, searchValue); }); + }, + + entries: function entries() { + return this.__iterator(ITERATE_ENTRIES); + }, + + every: function every(predicate, context) { + assertNotInfinite(this.size); + var returnValue = true; + this.__iterate(function (v, k, c) { + if (!predicate.call(context, v, k, c)) { + returnValue = false; + return false; + } + }); + return returnValue; + }, + + filter: function filter(predicate, context) { + return reify(this, filterFactory(this, predicate, context, true)); + }, + + partition: function partition(predicate, context) { + return partitionFactory(this, predicate, context); + }, + + find: function find(predicate, context, notSetValue) { + var entry = this.findEntry(predicate, context); + return entry ? entry[1] : notSetValue; + }, + + forEach: function forEach(sideEffect, context) { + assertNotInfinite(this.size); + return this.__iterate(context ? sideEffect.bind(context) : sideEffect); + }, + + join: function join(separator) { + assertNotInfinite(this.size); + separator = separator !== undefined ? '' + separator : ','; + var joined = ''; + var isFirst = true; + this.__iterate(function (v) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + isFirst ? (isFirst = false) : (joined += separator); + joined += v !== null && v !== undefined ? v.toString() : ''; + }); + return joined; + }, + + keys: function keys() { + return this.__iterator(ITERATE_KEYS); + }, + + map: function map(mapper, context) { + return reify(this, mapFactory(this, mapper, context)); + }, + + reduce: function reduce$1(reducer, initialReduction, context) { + return reduce( + this, + reducer, + initialReduction, + context, + arguments.length < 2, + false + ); + }, + + reduceRight: function reduceRight(reducer, initialReduction, context) { + return reduce( + this, + reducer, + initialReduction, + context, + arguments.length < 2, + true + ); + }, + + reverse: function reverse() { + return reify(this, reverseFactory(this, true)); + }, + + slice: function slice(begin, end) { + return reify(this, sliceFactory(this, begin, end, true)); + }, + + some: function some(predicate, context) { + assertNotInfinite(this.size); + var returnValue = false; + this.__iterate(function (v, k, c) { + if (predicate.call(context, v, k, c)) { + returnValue = true; + return false; + } + }); + return returnValue; + }, + + sort: function sort(comparator) { + return reify(this, sortFactory(this, comparator)); + }, + + values: function values() { + return this.__iterator(ITERATE_VALUES); + }, + + // ### More sequential methods + + butLast: function butLast() { + return this.slice(0, -1); + }, + + isEmpty: function isEmpty() { + return this.size !== undefined ? this.size === 0 : !this.some(function () { return true; }); + }, + + count: function count(predicate, context) { + return ensureSize( + predicate ? this.toSeq().filter(predicate, context) : this + ); + }, + + countBy: function countBy(grouper, context) { + return countByFactory(this, grouper, context); + }, + + equals: function equals(other) { + return deepEqual(this, other); + }, + + entrySeq: function entrySeq() { + // eslint-disable-next-line @typescript-eslint/no-this-alias + var collection = this; + if (collection._cache) { + // We cache as an entries array, so we can just return the cache! + return new ArraySeq(collection._cache); + } + var entriesSequence = collection.toSeq().map(entryMapper).toIndexedSeq(); + entriesSequence.fromEntrySeq = function () { return collection.toSeq(); }; + return entriesSequence; + }, + + filterNot: function filterNot(predicate, context) { + return this.filter(not(predicate), context); + }, + + findEntry: function findEntry(predicate, context, notSetValue) { + var found = notSetValue; + this.__iterate(function (v, k, c) { + if (predicate.call(context, v, k, c)) { + found = [k, v]; + return false; + } + }); + return found; + }, + + findKey: function findKey(predicate, context) { + var entry = this.findEntry(predicate, context); + return entry && entry[0]; + }, + + findLast: function findLast(predicate, context, notSetValue) { + return this.toKeyedSeq().reverse().find(predicate, context, notSetValue); + }, + + findLastEntry: function findLastEntry(predicate, context, notSetValue) { + return this.toKeyedSeq() + .reverse() + .findEntry(predicate, context, notSetValue); + }, + + findLastKey: function findLastKey(predicate, context) { + return this.toKeyedSeq().reverse().findKey(predicate, context); + }, + + first: function first(notSetValue) { + return this.find(returnTrue, null, notSetValue); + }, + + flatMap: function flatMap(mapper, context) { + return reify(this, flatMapFactory(this, mapper, context)); + }, + + flatten: function flatten(depth) { + return reify(this, flattenFactory(this, depth, true)); + }, + + fromEntrySeq: function fromEntrySeq() { + return new FromEntriesSequence(this); + }, + + get: function get(searchKey, notSetValue) { + return this.find(function (_, key) { return is(key, searchKey); }, undefined, notSetValue); + }, + + getIn: getIn, + + groupBy: function groupBy(grouper, context) { + return groupByFactory(this, grouper, context); + }, + + has: function has(searchKey) { + return this.get(searchKey, NOT_SET) !== NOT_SET; + }, + + hasIn: hasIn, + + isSubset: function isSubset(iter) { + iter = typeof iter.includes === 'function' ? iter : Collection(iter); + return this.every(function (value) { return iter.includes(value); }); + }, + + isSuperset: function isSuperset(iter) { + iter = typeof iter.isSubset === 'function' ? iter : Collection(iter); + return iter.isSubset(this); + }, + + keyOf: function keyOf(searchValue) { + return this.findKey(function (value) { return is(value, searchValue); }); + }, + + keySeq: function keySeq() { + return this.toSeq().map(keyMapper).toIndexedSeq(); + }, + + last: function last(notSetValue) { + return this.toSeq().reverse().first(notSetValue); + }, + + lastKeyOf: function lastKeyOf(searchValue) { + return this.toKeyedSeq().reverse().keyOf(searchValue); + }, + + max: function max(comparator) { + return maxFactory(this, comparator); + }, + + maxBy: function maxBy(mapper, comparator) { + return maxFactory(this, comparator, mapper); + }, + + min: function min(comparator) { + return maxFactory( + this, + comparator ? neg(comparator) : defaultNegComparator + ); + }, + + minBy: function minBy(mapper, comparator) { + return maxFactory( + this, + comparator ? neg(comparator) : defaultNegComparator, + mapper + ); + }, + + rest: function rest() { + return this.slice(1); + }, + + skip: function skip(amount) { + return amount === 0 ? this : this.slice(Math.max(0, amount)); + }, + + skipLast: function skipLast(amount) { + return amount === 0 ? this : this.slice(0, -Math.max(0, amount)); + }, + + skipWhile: function skipWhile(predicate, context) { + return reify(this, skipWhileFactory(this, predicate, context, true)); + }, + + skipUntil: function skipUntil(predicate, context) { + return this.skipWhile(not(predicate), context); + }, + + sortBy: function sortBy(mapper, comparator) { + return reify(this, sortFactory(this, comparator, mapper)); + }, + + take: function take(amount) { + return this.slice(0, Math.max(0, amount)); + }, + + takeLast: function takeLast(amount) { + return this.slice(-Math.max(0, amount)); + }, + + takeWhile: function takeWhile(predicate, context) { + return reify(this, takeWhileFactory(this, predicate, context)); + }, + + takeUntil: function takeUntil(predicate, context) { + return this.takeWhile(not(predicate), context); + }, + + update: function update(fn) { + return fn(this); + }, + + valueSeq: function valueSeq() { + return this.toIndexedSeq(); + }, + + // ### Hashable Object + + hashCode: function hashCode() { + return this.__hash || (this.__hash = hashCollection(this)); + }, + + // ### Internal + + // abstract __iterate(fn, reverse) + + // abstract __iterator(type, reverse) +}); + +var CollectionPrototype = Collection.prototype; +CollectionPrototype[IS_COLLECTION_SYMBOL] = true; +CollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.values; +CollectionPrototype.toJSON = CollectionPrototype.toArray; +CollectionPrototype.__toStringMapper = quoteString; +CollectionPrototype.inspect = CollectionPrototype.toSource = function () { + return this.toString(); +}; +CollectionPrototype.chain = CollectionPrototype.flatMap; +CollectionPrototype.contains = CollectionPrototype.includes; + +mixin(KeyedCollection, { + // ### More sequential methods + + flip: function flip() { + return reify(this, flipFactory(this)); + }, + + mapEntries: function mapEntries(mapper, context) { + var this$1$1 = this; + + var iterations = 0; + return reify( + this, + this.toSeq() + .map(function (v, k) { return mapper.call(context, [k, v], iterations++, this$1$1); }) + .fromEntrySeq() + ); + }, + + mapKeys: function mapKeys(mapper, context) { + var this$1$1 = this; + + return reify( + this, + this.toSeq() + .flip() + .map(function (k, v) { return mapper.call(context, k, v, this$1$1); }) + .flip() + ); + }, +}); + +var KeyedCollectionPrototype = KeyedCollection.prototype; +KeyedCollectionPrototype[IS_KEYED_SYMBOL] = true; +KeyedCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.entries; +KeyedCollectionPrototype.toJSON = toObject; +KeyedCollectionPrototype.__toStringMapper = function (v, k) { return quoteString(k) + ': ' + quoteString(v); }; + +mixin(IndexedCollection, { + // ### Conversion to other types + + toKeyedSeq: function toKeyedSeq() { + return new ToKeyedSequence(this, false); + }, + + // ### ES6 Collection methods (ES6 Array and Map) + + filter: function filter(predicate, context) { + return reify(this, filterFactory(this, predicate, context, false)); + }, + + findIndex: function findIndex(predicate, context) { + var entry = this.findEntry(predicate, context); + return entry ? entry[0] : -1; + }, + + indexOf: function indexOf(searchValue) { + var key = this.keyOf(searchValue); + return key === undefined ? -1 : key; + }, + + lastIndexOf: function lastIndexOf(searchValue) { + var key = this.lastKeyOf(searchValue); + return key === undefined ? -1 : key; + }, + + reverse: function reverse() { + return reify(this, reverseFactory(this, false)); + }, + + slice: function slice(begin, end) { + return reify(this, sliceFactory(this, begin, end, false)); + }, + + splice: function splice(index, removeNum /*, ...values*/) { + var numArgs = arguments.length; + removeNum = Math.max(removeNum || 0, 0); + if (numArgs === 0 || (numArgs === 2 && !removeNum)) { + return this; + } + // If index is negative, it should resolve relative to the size of the + // collection. However size may be expensive to compute if not cached, so + // only call count() if the number is in fact negative. + index = resolveBegin(index, index < 0 ? this.count() : this.size); + var spliced = this.slice(0, index); + return reify( + this, + numArgs === 1 + ? spliced + : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum)) + ); + }, + + // ### More collection methods + + findLastIndex: function findLastIndex(predicate, context) { + var entry = this.findLastEntry(predicate, context); + return entry ? entry[0] : -1; + }, + + first: function first(notSetValue) { + return this.get(0, notSetValue); + }, + + flatten: function flatten(depth) { + return reify(this, flattenFactory(this, depth, false)); + }, + + get: function get(index, notSetValue) { + index = wrapIndex(this, index); + return index < 0 || + this.size === Infinity || + (this.size !== undefined && index > this.size) + ? notSetValue + : this.find(function (_, key) { return key === index; }, undefined, notSetValue); + }, + + has: function has(index) { + index = wrapIndex(this, index); + return ( + index >= 0 && + (this.size !== undefined + ? this.size === Infinity || index < this.size + : this.indexOf(index) !== -1) + ); + }, + + interpose: function interpose(separator) { + return reify(this, interposeFactory(this, separator)); + }, + + interleave: function interleave(/*...collections*/) { + var collections = [this].concat(arrCopy(arguments)); + var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, collections); + var interleaved = zipped.flatten(true); + if (zipped.size) { + interleaved.size = zipped.size * collections.length; + } + return reify(this, interleaved); + }, + + keySeq: function keySeq() { + return Range(0, this.size); + }, + + last: function last(notSetValue) { + return this.get(-1, notSetValue); + }, + + skipWhile: function skipWhile(predicate, context) { + return reify(this, skipWhileFactory(this, predicate, context, false)); + }, + + zip: function zip(/*, ...collections */) { + var collections = [this].concat(arrCopy(arguments)); + return reify(this, zipWithFactory(this, defaultZipper, collections)); + }, + + zipAll: function zipAll(/*, ...collections */) { + var collections = [this].concat(arrCopy(arguments)); + return reify(this, zipWithFactory(this, defaultZipper, collections, true)); + }, + + zipWith: function zipWith(zipper /*, ...collections */) { + var collections = arrCopy(arguments); + collections[0] = this; + return reify(this, zipWithFactory(this, zipper, collections)); + }, +}); + +var IndexedCollectionPrototype = IndexedCollection.prototype; +IndexedCollectionPrototype[IS_INDEXED_SYMBOL] = true; +IndexedCollectionPrototype[IS_ORDERED_SYMBOL] = true; + +mixin(SetCollection, { + // ### ES6 Collection methods (ES6 Array and Map) + + get: function get(value, notSetValue) { + return this.has(value) ? value : notSetValue; + }, + + includes: function includes(value) { + return this.has(value); + }, + + // ### More sequential methods + + keySeq: function keySeq() { + return this.valueSeq(); + }, +}); + +var SetCollectionPrototype = SetCollection.prototype; +SetCollectionPrototype.has = CollectionPrototype.includes; +SetCollectionPrototype.contains = SetCollectionPrototype.includes; +SetCollectionPrototype.keys = SetCollectionPrototype.values; + +// Mixin subclasses + +mixin(KeyedSeq, KeyedCollectionPrototype); +mixin(IndexedSeq, IndexedCollectionPrototype); +mixin(SetSeq, SetCollectionPrototype); + +// #pragma Helper functions + +function reduce(collection, reducer, reduction, context, useFirst, reverse) { + assertNotInfinite(collection.size); + collection.__iterate(function (v, k, c) { + if (useFirst) { + useFirst = false; + reduction = v; + } else { + reduction = reducer.call(context, reduction, v, k, c); + } + }, reverse); + return reduction; +} + +function keyMapper(v, k) { + return k; +} + +function entryMapper(v, k) { + return [k, v]; +} + +function not(predicate) { + return function () { + return !predicate.apply(this, arguments); + }; +} + +function neg(predicate) { + return function () { + return -predicate.apply(this, arguments); + }; +} + +function defaultZipper() { + return arrCopy(arguments); +} + +function defaultNegComparator(a, b) { + return a < b ? 1 : a > b ? -1 : 0; +} + +function hashCollection(collection) { + if (collection.size === Infinity) { + return 0; + } + var ordered = isOrdered(collection); + var keyed = isKeyed(collection); + var h = ordered ? 1 : 0; + + collection.__iterate( + keyed + ? ordered + ? function (v, k) { + h = (31 * h + hashMerge(hash(v), hash(k))) | 0; + } + : function (v, k) { + h = (h + hashMerge(hash(v), hash(k))) | 0; + } + : ordered + ? function (v) { + h = (31 * h + hash(v)) | 0; + } + : function (v) { + h = (h + hash(v)) | 0; + } + ); + + return murmurHashOfSize(collection.size, h); +} + +function murmurHashOfSize(size, h) { + h = imul(h, 0xcc9e2d51); + h = imul((h << 15) | (h >>> -15), 0x1b873593); + h = imul((h << 13) | (h >>> -13), 5); + h = ((h + 0xe6546b64) | 0) ^ size; + h = imul(h ^ (h >>> 16), 0x85ebca6b); + h = imul(h ^ (h >>> 13), 0xc2b2ae35); + h = smi(h ^ (h >>> 16)); + return h; +} + +function hashMerge(a, b) { + return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; // int +} + +var OrderedSet = /*@__PURE__*/(function (Set) { + function OrderedSet(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyOrderedSet() + : isOrderedSet(value) + ? value + : emptyOrderedSet().withMutations(function (set) { + var iter = SetCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v) { return set.add(v); }); + }); + } + + if ( Set ) OrderedSet.__proto__ = Set; + OrderedSet.prototype = Object.create( Set && Set.prototype ); + OrderedSet.prototype.constructor = OrderedSet; + + OrderedSet.of = function of (/*...values*/) { + return this(arguments); + }; + + OrderedSet.fromKeys = function fromKeys (value) { + return this(KeyedCollection(value).keySeq()); + }; + + OrderedSet.prototype.toString = function toString () { + return this.__toString('OrderedSet {', '}'); + }; + + return OrderedSet; +}(Set)); + +OrderedSet.isOrderedSet = isOrderedSet; + +var OrderedSetPrototype = OrderedSet.prototype; +OrderedSetPrototype[IS_ORDERED_SYMBOL] = true; +OrderedSetPrototype.zip = IndexedCollectionPrototype.zip; +OrderedSetPrototype.zipWith = IndexedCollectionPrototype.zipWith; +OrderedSetPrototype.zipAll = IndexedCollectionPrototype.zipAll; + +OrderedSetPrototype.__empty = emptyOrderedSet; +OrderedSetPrototype.__make = makeOrderedSet; + +function makeOrderedSet(map, ownerID) { + var set = Object.create(OrderedSetPrototype); + set.size = map ? map.size : 0; + set._map = map; + set.__ownerID = ownerID; + return set; +} + +var EMPTY_ORDERED_SET; +function emptyOrderedSet() { + return ( + EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap())) + ); +} + +var PairSorting = { + LeftThenRight: -1, + RightThenLeft: 1, +}; + +function throwOnInvalidDefaultValues(defaultValues) { + if (isRecord(defaultValues)) { + throw new Error( + 'Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.' + ); + } + + if (isImmutable(defaultValues)) { + throw new Error( + 'Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.' + ); + } + + if (defaultValues === null || typeof defaultValues !== 'object') { + throw new Error( + 'Can not call `Record` with a non-object as default values. Use a plain javascript object instead.' + ); + } +} + +var Record = function Record(defaultValues, name) { + var hasInitialized; + + throwOnInvalidDefaultValues(defaultValues); + + var RecordType = function Record(values) { + var this$1$1 = this; + + if (values instanceof RecordType) { + return values; + } + if (!(this instanceof RecordType)) { + return new RecordType(values); + } + if (!hasInitialized) { + hasInitialized = true; + var keys = Object.keys(defaultValues); + var indices = (RecordTypePrototype._indices = {}); + // Deprecated: left to attempt not to break any external code which + // relies on a ._name property existing on record instances. + // Use Record.getDescriptiveName() instead + RecordTypePrototype._name = name; + RecordTypePrototype._keys = keys; + RecordTypePrototype._defaultValues = defaultValues; + for (var i = 0; i < keys.length; i++) { + var propName = keys[i]; + indices[propName] = i; + if (RecordTypePrototype[propName]) { + /* eslint-disable no-console */ + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + typeof console === 'object' && + console.warn && + console.warn( + 'Cannot define ' + + recordName(this) + + ' with property "' + + propName + + '" since that property name is part of the Record API.' + ); + /* eslint-enable no-console */ + } else { + setProp(RecordTypePrototype, propName); + } + } + } + this.__ownerID = undefined; + this._values = List().withMutations(function (l) { + l.setSize(this$1$1._keys.length); + KeyedCollection(values).forEach(function (v, k) { + l.set(this$1$1._indices[k], v === this$1$1._defaultValues[k] ? undefined : v); + }); + }); + return this; + }; + + var RecordTypePrototype = (RecordType.prototype = + Object.create(RecordPrototype)); + RecordTypePrototype.constructor = RecordType; + + if (name) { + RecordType.displayName = name; + } + + // eslint-disable-next-line no-constructor-return + return RecordType; +}; + +Record.prototype.toString = function toString () { + var str = recordName(this) + ' { '; + var keys = this._keys; + var k; + for (var i = 0, l = keys.length; i !== l; i++) { + k = keys[i]; + str += (i ? ', ' : '') + k + ': ' + quoteString(this.get(k)); + } + return str + ' }'; +}; + +Record.prototype.equals = function equals (other) { + return ( + this === other || + (isRecord(other) && recordSeq(this).equals(recordSeq(other))) + ); +}; + +Record.prototype.hashCode = function hashCode () { + return recordSeq(this).hashCode(); +}; + +// @pragma Access + +Record.prototype.has = function has (k) { + return this._indices.hasOwnProperty(k); +}; + +Record.prototype.get = function get (k, notSetValue) { + if (!this.has(k)) { + return notSetValue; + } + var index = this._indices[k]; + var value = this._values.get(index); + return value === undefined ? this._defaultValues[k] : value; +}; + +// @pragma Modification + +Record.prototype.set = function set (k, v) { + if (this.has(k)) { + var newValues = this._values.set( + this._indices[k], + v === this._defaultValues[k] ? undefined : v + ); + if (newValues !== this._values && !this.__ownerID) { + return makeRecord(this, newValues); + } + } + return this; +}; + +Record.prototype.remove = function remove (k) { + return this.set(k); +}; + +Record.prototype.clear = function clear () { + var newValues = this._values.clear().setSize(this._keys.length); + + return this.__ownerID ? this : makeRecord(this, newValues); +}; + +Record.prototype.wasAltered = function wasAltered () { + return this._values.wasAltered(); +}; + +Record.prototype.toSeq = function toSeq () { + return recordSeq(this); +}; + +Record.prototype.toJS = function toJS$1 () { + return toJS(this); +}; + +Record.prototype.entries = function entries () { + return this.__iterator(ITERATE_ENTRIES); +}; + +Record.prototype.__iterator = function __iterator (type, reverse) { + return recordSeq(this).__iterator(type, reverse); +}; + +Record.prototype.__iterate = function __iterate (fn, reverse) { + return recordSeq(this).__iterate(fn, reverse); +}; + +Record.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + var newValues = this._values.__ensureOwner(ownerID); + if (!ownerID) { + this.__ownerID = ownerID; + this._values = newValues; + return this; + } + return makeRecord(this, newValues, ownerID); +}; + +Record.isRecord = isRecord; +Record.getDescriptiveName = recordName; +var RecordPrototype = Record.prototype; +RecordPrototype[IS_RECORD_SYMBOL] = true; +RecordPrototype[DELETE] = RecordPrototype.remove; +RecordPrototype.deleteIn = RecordPrototype.removeIn = deleteIn; +RecordPrototype.getIn = getIn; +RecordPrototype.hasIn = CollectionPrototype.hasIn; +RecordPrototype.merge = merge$1; +RecordPrototype.mergeWith = mergeWith$1; +RecordPrototype.mergeIn = mergeIn; +RecordPrototype.mergeDeep = mergeDeep; +RecordPrototype.mergeDeepWith = mergeDeepWith; +RecordPrototype.mergeDeepIn = mergeDeepIn; +RecordPrototype.setIn = setIn; +RecordPrototype.update = update; +RecordPrototype.updateIn = updateIn; +RecordPrototype.withMutations = withMutations; +RecordPrototype.asMutable = asMutable; +RecordPrototype.asImmutable = asImmutable; +RecordPrototype[ITERATOR_SYMBOL] = RecordPrototype.entries; +RecordPrototype.toJSON = RecordPrototype.toObject = + CollectionPrototype.toObject; +RecordPrototype.inspect = RecordPrototype.toSource = function () { + return this.toString(); +}; + +function makeRecord(likeRecord, values, ownerID) { + var record = Object.create(Object.getPrototypeOf(likeRecord)); + record._values = values; + record.__ownerID = ownerID; + return record; +} + +function recordName(record) { + return record.constructor.displayName || record.constructor.name || 'Record'; +} + +function recordSeq(record) { + return keyedSeqFromValue(record._keys.map(function (k) { return [k, record.get(k)]; })); +} + +function setProp(prototype, name) { + try { + Object.defineProperty(prototype, name, { + get: function () { + return this.get(name); + }, + set: function (value) { + invariant(this.__ownerID, 'Cannot set on an immutable record.'); + this.set(name, value); + }, + }); + // eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO enable eslint here + } catch (error) { + // Object.defineProperty failed. Probably IE8. + } +} + +/** + * Returns a lazy Seq of `value` repeated `times` times. When `times` is + * undefined, returns an infinite sequence of `value`. + */ +var Repeat = /*@__PURE__*/(function (IndexedSeq) { + function Repeat(value, times) { + if (!(this instanceof Repeat)) { + // eslint-disable-next-line no-constructor-return + return new Repeat(value, times); + } + this._value = value; + this.size = times === undefined ? Infinity : Math.max(0, times); + if (this.size === 0) { + if (EMPTY_REPEAT) { + // eslint-disable-next-line no-constructor-return + return EMPTY_REPEAT; + } + // eslint-disable-next-line @typescript-eslint/no-this-alias + EMPTY_REPEAT = this; + } + } + + if ( IndexedSeq ) Repeat.__proto__ = IndexedSeq; + Repeat.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + Repeat.prototype.constructor = Repeat; + + Repeat.prototype.toString = function toString () { + if (this.size === 0) { + return 'Repeat []'; + } + return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]'; + }; + + Repeat.prototype.get = function get (index, notSetValue) { + return this.has(index) ? this._value : notSetValue; + }; + + Repeat.prototype.includes = function includes (searchValue) { + return is(this._value, searchValue); + }; + + Repeat.prototype.slice = function slice (begin, end) { + var size = this.size; + return wholeSlice(begin, end, size) + ? this + : new Repeat( + this._value, + resolveEnd(end, size) - resolveBegin(begin, size) + ); + }; + + Repeat.prototype.reverse = function reverse () { + return this; + }; + + Repeat.prototype.indexOf = function indexOf (searchValue) { + if (is(this._value, searchValue)) { + return 0; + } + return -1; + }; + + Repeat.prototype.lastIndexOf = function lastIndexOf (searchValue) { + if (is(this._value, searchValue)) { + return this.size; + } + return -1; + }; + + Repeat.prototype.__iterate = function __iterate (fn, reverse) { + var size = this.size; + var i = 0; + while (i !== size) { + if (fn(this._value, reverse ? size - ++i : i++, this) === false) { + break; + } + } + return i; + }; + + Repeat.prototype.__iterator = function __iterator (type, reverse) { + var this$1$1 = this; + + var size = this.size; + var i = 0; + return new Iterator(function () { return i === size + ? iteratorDone() + : iteratorValue(type, reverse ? size - ++i : i++, this$1$1._value); } + ); + }; + + Repeat.prototype.equals = function equals (other) { + return other instanceof Repeat + ? is(this._value, other._value) + : deepEqual(this, other); + }; + + return Repeat; +}(IndexedSeq)); + +var EMPTY_REPEAT; + +function fromJS(value, converter) { + return fromJSWith( + [], + converter || defaultConverter, + value, + '', + converter && converter.length > 2 ? [] : undefined, + { '': value } + ); +} + +function fromJSWith(stack, converter, value, key, keyPath, parentValue) { + if ( + typeof value !== 'string' && + !isImmutable(value) && + (isArrayLike(value) || hasIterator(value) || isPlainObject(value)) + ) { + if (~stack.indexOf(value)) { + throw new TypeError('Cannot convert circular structure to Immutable'); + } + stack.push(value); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + keyPath && key !== '' && keyPath.push(key); + var converted = converter.call( + parentValue, + key, + Seq(value).map(function (v, k) { return fromJSWith(stack, converter, v, k, keyPath, value); } + ), + keyPath && keyPath.slice() + ); + stack.pop(); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + keyPath && keyPath.pop(); + return converted; + } + return value; +} + +function defaultConverter(k, v) { + // Effectively the opposite of "Collection.toSeq()" + return isIndexed(v) ? v.toList() : isKeyed(v) ? v.toMap() : v.toSet(); +} + +var version = "5.1.2"; + +// Note: Iterable is deprecated +var Iterable = Collection; + +export { Collection, Iterable, List, Map, OrderedMap, OrderedSet, PairSorting, Range, Record, Repeat, Seq, Set, Stack, fromJS, get, getIn$1 as getIn, has, hasIn$1 as hasIn, hash, is, isAssociative, isCollection, isImmutable, isIndexed, isKeyed, isList, isMap, isOrdered, isOrderedMap, isOrderedSet, isPlainObject, isRecord, isSeq, isSet, isStack, isValueObject, merge, mergeDeep$1 as mergeDeep, mergeDeepWith$1 as mergeDeepWith, mergeWith, remove, removeIn, set, setIn$1 as setIn, update$1 as update, updateIn$1 as updateIn, version }; diff --git a/dist/immutable.js b/dist/immutable.js new file mode 100644 index 0000000000..ca162e4bce --- /dev/null +++ b/dist/immutable.js @@ -0,0 +1,6280 @@ +/** + * @license + * MIT License + * + * Copyright (c) 2014-present, Lee Byron and other contributors. + * + * 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. + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Immutable = {})); +})(this, (function (exports) { 'use strict'; + + // Used for setting prototype methods that IE8 chokes on. + var DELETE = 'delete'; + // Constants describing the size of trie nodes. + var SHIFT = 5; // Resulted in best performance after ______? + var SIZE = 1 << SHIFT; + var MASK = SIZE - 1; + // A consistent shared value representing "not set" which equals nothing other + // than itself, and nothing that could be provided externally. + var NOT_SET = {}; + // Boolean references, Rough equivalent of `bool &`. + function MakeRef() { + return { value: false }; + } + function SetRef(ref) { + if (ref) { + ref.value = true; + } + } + // A function which returns a value representing an "owner" for transient writes + // to tries. The return value will only ever equal itself, and will not equal + // the return of any subsequent call of this function. + function OwnerID() { } + function ensureSize(iter) { + // @ts-expect-error size should exists on Collection + if (iter.size === undefined) { + // @ts-expect-error size should exists on Collection, __iterate does exist on Collection + iter.size = iter.__iterate(returnTrue); + } + // @ts-expect-error size should exists on Collection + return iter.size; + } + function wrapIndex(iter, index) { + // This implements "is array index" which the ECMAString spec defines as: + // + // A String property name P is an array index if and only if + // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal + // to 2^32−1. + // + // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects + if (typeof index !== 'number') { + var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32 + if ('' + uint32Index !== index || uint32Index === 4294967295) { + return NaN; + } + index = uint32Index; + } + return index < 0 ? ensureSize(iter) + index : index; + } + function returnTrue() { + return true; + } + function wholeSlice(begin, end, size) { + return (((begin === 0 && !isNeg(begin)) || + (size !== undefined && begin <= -size)) && + (end === undefined || (size !== undefined && end >= size))); + } + function resolveBegin(begin, size) { + return resolveIndex(begin, size, 0); + } + function resolveEnd(end, size) { + return resolveIndex(end, size, size); + } + function resolveIndex(index, size, defaultIndex) { + // Sanitize indices using this shorthand for ToInt32(argument) + // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 + return index === undefined + ? defaultIndex + : isNeg(index) + ? size === Infinity + ? size + : Math.max(0, size + index) | 0 + : size === undefined || size === index + ? index + : Math.min(size, index) | 0; + } + function isNeg(value) { + // Account for -0 which is negative, but not less than 0. + return value < 0 || (value === 0 && 1 / value === -Infinity); + } + + // Note: value is unchanged to not break immutable-devtools. + var IS_COLLECTION_SYMBOL = '@@__IMMUTABLE_ITERABLE__@@'; + /** + * True if `maybeCollection` is a Collection, or any of its subclasses. + * + * ```js + * import { isCollection, Map, List, Stack } from 'immutable'; + * + * isCollection([]); // false + * isCollection({}); // false + * isCollection(Map()); // true + * isCollection(List()); // true + * isCollection(Stack()); // true + * ``` + */ + function isCollection(maybeCollection) { + return Boolean(maybeCollection && + // @ts-expect-error: maybeCollection is typed as `{}`, need to change in 6.0 to `maybeCollection && typeof maybeCollection === 'object' && IS_COLLECTION_SYMBOL in maybeCollection` + maybeCollection[IS_COLLECTION_SYMBOL]); + } + + var IS_KEYED_SYMBOL = '@@__IMMUTABLE_KEYED__@@'; + /** + * True if `maybeKeyed` is a Collection.Keyed, or any of its subclasses. + * + * ```js + * import { isKeyed, Map, List, Stack } from 'immutable'; + * + * isKeyed([]); // false + * isKeyed({}); // false + * isKeyed(Map()); // true + * isKeyed(List()); // false + * isKeyed(Stack()); // false + * ``` + */ + function isKeyed(maybeKeyed) { + return Boolean(maybeKeyed && + // @ts-expect-error: maybeKeyed is typed as `{}`, need to change in 6.0 to `maybeKeyed && typeof maybeKeyed === 'object' && IS_KEYED_SYMBOL in maybeKeyed` + maybeKeyed[IS_KEYED_SYMBOL]); + } + + var IS_INDEXED_SYMBOL = '@@__IMMUTABLE_INDEXED__@@'; + /** + * True if `maybeIndexed` is a Collection.Indexed, or any of its subclasses. + * + * ```js + * import { isIndexed, Map, List, Stack, Set } from 'immutable'; + * + * isIndexed([]); // false + * isIndexed({}); // false + * isIndexed(Map()); // false + * isIndexed(List()); // true + * isIndexed(Stack()); // true + * isIndexed(Set()); // false + * ``` + */ + function isIndexed(maybeIndexed) { + return Boolean(maybeIndexed && + // @ts-expect-error: maybeIndexed is typed as `{}`, need to change in 6.0 to `maybeIndexed && typeof maybeIndexed === 'object' && IS_INDEXED_SYMBOL in maybeIndexed` + maybeIndexed[IS_INDEXED_SYMBOL]); + } + + /** + * True if `maybeAssociative` is either a Keyed or Indexed Collection. + * + * ```js + * import { isAssociative, Map, List, Stack, Set } from 'immutable'; + * + * isAssociative([]); // false + * isAssociative({}); // false + * isAssociative(Map()); // true + * isAssociative(List()); // true + * isAssociative(Stack()); // true + * isAssociative(Set()); // false + * ``` + */ + function isAssociative(maybeAssociative) { + return isKeyed(maybeAssociative) || isIndexed(maybeAssociative); + } + + var Collection = function Collection(value) { + // eslint-disable-next-line no-constructor-return + return isCollection(value) ? value : Seq(value); + }; + + var KeyedCollection = /*@__PURE__*/(function (Collection) { + function KeyedCollection(value) { + // eslint-disable-next-line no-constructor-return + return isKeyed(value) ? value : KeyedSeq(value); + } + + if ( Collection ) KeyedCollection.__proto__ = Collection; + KeyedCollection.prototype = Object.create( Collection && Collection.prototype ); + KeyedCollection.prototype.constructor = KeyedCollection; + + return KeyedCollection; + }(Collection)); + + var IndexedCollection = /*@__PURE__*/(function (Collection) { + function IndexedCollection(value) { + // eslint-disable-next-line no-constructor-return + return isIndexed(value) ? value : IndexedSeq(value); + } + + if ( Collection ) IndexedCollection.__proto__ = Collection; + IndexedCollection.prototype = Object.create( Collection && Collection.prototype ); + IndexedCollection.prototype.constructor = IndexedCollection; + + return IndexedCollection; + }(Collection)); + + var SetCollection = /*@__PURE__*/(function (Collection) { + function SetCollection(value) { + // eslint-disable-next-line no-constructor-return + return isCollection(value) && !isAssociative(value) ? value : SetSeq(value); + } + + if ( Collection ) SetCollection.__proto__ = Collection; + SetCollection.prototype = Object.create( Collection && Collection.prototype ); + SetCollection.prototype.constructor = SetCollection; + + return SetCollection; + }(Collection)); + + Collection.Keyed = KeyedCollection; + Collection.Indexed = IndexedCollection; + Collection.Set = SetCollection; + + var IS_SEQ_SYMBOL = '@@__IMMUTABLE_SEQ__@@'; + /** + * True if `maybeSeq` is a Seq. + */ + function isSeq(maybeSeq) { + return Boolean(maybeSeq && + // @ts-expect-error: maybeSeq is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSeq === 'object' && MAYBE_SEQ_SYMBOL in maybeSeq` + maybeSeq[IS_SEQ_SYMBOL]); + } + + var IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@'; + /** + * True if `maybeRecord` is a Record. + */ + function isRecord(maybeRecord) { + return Boolean(maybeRecord && + // @ts-expect-error: maybeRecord is typed as `{}`, need to change in 6.0 to `maybeRecord && typeof maybeRecord === 'object' && IS_RECORD_SYMBOL in maybeRecord` + maybeRecord[IS_RECORD_SYMBOL]); + } + + /** + * True if `maybeImmutable` is an Immutable Collection or Record. + * + * Note: Still returns true even if the collections is within a `withMutations()`. + * + * ```js + * import { isImmutable, Map, List, Stack } from 'immutable'; + * isImmutable([]); // false + * isImmutable({}); // false + * isImmutable(Map()); // true + * isImmutable(List()); // true + * isImmutable(Stack()); // true + * isImmutable(Map().asMutable()); // true + * ``` + */ + function isImmutable(maybeImmutable) { + return isCollection(maybeImmutable) || isRecord(maybeImmutable); + } + + var IS_ORDERED_SYMBOL = '@@__IMMUTABLE_ORDERED__@@'; + function isOrdered(maybeOrdered) { + return Boolean(maybeOrdered && + // @ts-expect-error: maybeOrdered is typed as `{}`, need to change in 6.0 to `maybeOrdered && typeof maybeOrdered === 'object' && IS_ORDERED_SYMBOL in maybeOrdered` + maybeOrdered[IS_ORDERED_SYMBOL]); + } + + var ITERATE_KEYS = 0; + var ITERATE_VALUES = 1; + var ITERATE_ENTRIES = 2; + + var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; + + var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL; + + var Iterator = function Iterator(next) { + this.next = next; + }; + + Iterator.prototype.toString = function toString () { + return '[Iterator]'; + }; + + Iterator.KEYS = ITERATE_KEYS; + Iterator.VALUES = ITERATE_VALUES; + Iterator.ENTRIES = ITERATE_ENTRIES; + + Iterator.prototype.inspect = Iterator.prototype.toSource = function () { + return this.toString(); + }; + Iterator.prototype[ITERATOR_SYMBOL] = function () { + return this; + }; + + function iteratorValue(type, k, v, iteratorResult) { + var value = + type === ITERATE_KEYS ? k : type === ITERATE_VALUES ? v : [k, v]; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + iteratorResult + ? (iteratorResult.value = value) + : (iteratorResult = { + value: value, + done: false, + }); + return iteratorResult; + } + + function iteratorDone() { + return { value: undefined, done: true }; + } + + function hasIterator(maybeIterable) { + if (Array.isArray(maybeIterable)) { + // IE11 trick as it does not support `Symbol.iterator` + return true; + } + + return !!getIteratorFn(maybeIterable); + } + + function isIterator(maybeIterator) { + return maybeIterator && typeof maybeIterator.next === 'function'; + } + + function getIterator(iterable) { + var iteratorFn = getIteratorFn(iterable); + return iteratorFn && iteratorFn.call(iterable); + } + + function getIteratorFn(iterable) { + var iteratorFn = + iterable && + ((REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) || + iterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + function isEntriesIterable(maybeIterable) { + var iteratorFn = getIteratorFn(maybeIterable); + return iteratorFn && iteratorFn === maybeIterable.entries; + } + + function isKeysIterable(maybeIterable) { + var iteratorFn = getIteratorFn(maybeIterable); + return iteratorFn && iteratorFn === maybeIterable.keys; + } + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + function isArrayLike(value) { + if (Array.isArray(value) || typeof value === 'string') { + return true; + } + // @ts-expect-error "Type 'unknown' is not assignable to type 'boolean'" : convert to Boolean + return (value && + typeof value === 'object' && + // @ts-expect-error check that `'length' in value &&` + Number.isInteger(value.length) && + // @ts-expect-error check that `'length' in value &&` + value.length >= 0 && + // @ts-expect-error check that `'length' in value &&` + (value.length === 0 + ? // Only {length: 0} is considered Array-like. + Object.keys(value).length === 1 + : // An object is only Array-like if it has a property where the last value + // in the array-like may be found (which could be undefined). + // @ts-expect-error check that `'length' in value &&` + value.hasOwnProperty(value.length - 1))); + } + + var Seq = /*@__PURE__*/(function (Collection) { + function Seq(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySequence() + : isImmutable(value) + ? value.toSeq() + : seqFromValue(value); + } + + if ( Collection ) Seq.__proto__ = Collection; + Seq.prototype = Object.create( Collection && Collection.prototype ); + Seq.prototype.constructor = Seq; + + Seq.prototype.toSeq = function toSeq () { + return this; + }; + + Seq.prototype.toString = function toString () { + return this.__toString('Seq {', '}'); + }; + + Seq.prototype.cacheResult = function cacheResult () { + if (!this._cache && this.__iterateUncached) { + this._cache = this.entrySeq().toArray(); + this.size = this._cache.length; + } + return this; + }; + + // abstract __iterateUncached(fn, reverse) + + Seq.prototype.__iterate = function __iterate (fn, reverse) { + var cache = this._cache; + if (cache) { + var size = cache.length; + var i = 0; + while (i !== size) { + var entry = cache[reverse ? size - ++i : i++]; + if (fn(entry[1], entry[0], this) === false) { + break; + } + } + return i; + } + return this.__iterateUncached(fn, reverse); + }; + + // abstract __iteratorUncached(type, reverse) + + Seq.prototype.__iterator = function __iterator (type, reverse) { + var cache = this._cache; + if (cache) { + var size = cache.length; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var entry = cache[reverse ? size - ++i : i++]; + return iteratorValue(type, entry[0], entry[1]); + }); + } + return this.__iteratorUncached(type, reverse); + }; + + return Seq; + }(Collection)); + + var KeyedSeq = /*@__PURE__*/(function (Seq) { + function KeyedSeq(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySequence().toKeyedSeq() + : isCollection(value) + ? isKeyed(value) + ? value.toSeq() + : value.fromEntrySeq() + : isRecord(value) + ? value.toSeq() + : keyedSeqFromValue(value); + } + + if ( Seq ) KeyedSeq.__proto__ = Seq; + KeyedSeq.prototype = Object.create( Seq && Seq.prototype ); + KeyedSeq.prototype.constructor = KeyedSeq; + + KeyedSeq.prototype.toKeyedSeq = function toKeyedSeq () { + return this; + }; + + return KeyedSeq; + }(Seq)); + + var IndexedSeq = /*@__PURE__*/(function (Seq) { + function IndexedSeq(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySequence() + : isCollection(value) + ? isKeyed(value) + ? value.entrySeq() + : value.toIndexedSeq() + : isRecord(value) + ? value.toSeq().entrySeq() + : indexedSeqFromValue(value); + } + + if ( Seq ) IndexedSeq.__proto__ = Seq; + IndexedSeq.prototype = Object.create( Seq && Seq.prototype ); + IndexedSeq.prototype.constructor = IndexedSeq; + + IndexedSeq.of = function of (/*...values*/) { + return IndexedSeq(arguments); + }; + + IndexedSeq.prototype.toIndexedSeq = function toIndexedSeq () { + return this; + }; + + IndexedSeq.prototype.toString = function toString () { + return this.__toString('Seq [', ']'); + }; + + return IndexedSeq; + }(Seq)); + + var SetSeq = /*@__PURE__*/(function (Seq) { + function SetSeq(value) { + // eslint-disable-next-line no-constructor-return + return ( + isCollection(value) && !isAssociative(value) ? value : IndexedSeq(value) + ).toSetSeq(); + } + + if ( Seq ) SetSeq.__proto__ = Seq; + SetSeq.prototype = Object.create( Seq && Seq.prototype ); + SetSeq.prototype.constructor = SetSeq; + + SetSeq.of = function of (/*...values*/) { + return SetSeq(arguments); + }; + + SetSeq.prototype.toSetSeq = function toSetSeq () { + return this; + }; + + return SetSeq; + }(Seq)); + + Seq.isSeq = isSeq; + Seq.Keyed = KeyedSeq; + Seq.Set = SetSeq; + Seq.Indexed = IndexedSeq; + + Seq.prototype[IS_SEQ_SYMBOL] = true; + + // #pragma Root Sequences + + var ArraySeq = /*@__PURE__*/(function (IndexedSeq) { + function ArraySeq(array) { + this._array = array; + this.size = array.length; + } + + if ( IndexedSeq ) ArraySeq.__proto__ = IndexedSeq; + ArraySeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + ArraySeq.prototype.constructor = ArraySeq; + + ArraySeq.prototype.get = function get (index, notSetValue) { + return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue; + }; + + ArraySeq.prototype.__iterate = function __iterate (fn, reverse) { + var array = this._array; + var size = array.length; + var i = 0; + while (i !== size) { + var ii = reverse ? size - ++i : i++; + if (fn(array[ii], ii, this) === false) { + break; + } + } + return i; + }; + + ArraySeq.prototype.__iterator = function __iterator (type, reverse) { + var array = this._array; + var size = array.length; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var ii = reverse ? size - ++i : i++; + return iteratorValue(type, ii, array[ii]); + }); + }; + + return ArraySeq; + }(IndexedSeq)); + + var ObjectSeq = /*@__PURE__*/(function (KeyedSeq) { + function ObjectSeq(object) { + var keys = Object.keys(object).concat( + Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : [] + ); + this._object = object; + this._keys = keys; + this.size = keys.length; + } + + if ( KeyedSeq ) ObjectSeq.__proto__ = KeyedSeq; + ObjectSeq.prototype = Object.create( KeyedSeq && KeyedSeq.prototype ); + ObjectSeq.prototype.constructor = ObjectSeq; + + ObjectSeq.prototype.get = function get (key, notSetValue) { + if (notSetValue !== undefined && !this.has(key)) { + return notSetValue; + } + return this._object[key]; + }; + + ObjectSeq.prototype.has = function has (key) { + return hasOwnProperty.call(this._object, key); + }; + + ObjectSeq.prototype.__iterate = function __iterate (fn, reverse) { + var object = this._object; + var keys = this._keys; + var size = keys.length; + var i = 0; + while (i !== size) { + var key = keys[reverse ? size - ++i : i++]; + if (fn(object[key], key, this) === false) { + break; + } + } + return i; + }; + + ObjectSeq.prototype.__iterator = function __iterator (type, reverse) { + var object = this._object; + var keys = this._keys; + var size = keys.length; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var key = keys[reverse ? size - ++i : i++]; + return iteratorValue(type, key, object[key]); + }); + }; + + return ObjectSeq; + }(KeyedSeq)); + ObjectSeq.prototype[IS_ORDERED_SYMBOL] = true; + + var CollectionSeq = /*@__PURE__*/(function (IndexedSeq) { + function CollectionSeq(collection) { + this._collection = collection; + this.size = collection.length || collection.size; + } + + if ( IndexedSeq ) CollectionSeq.__proto__ = IndexedSeq; + CollectionSeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + CollectionSeq.prototype.constructor = CollectionSeq; + + CollectionSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) { + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var collection = this._collection; + var iterator = getIterator(collection); + var iterations = 0; + if (isIterator(iterator)) { + var step; + while (!(step = iterator.next()).done) { + if (fn(step.value, iterations++, this) === false) { + break; + } + } + } + return iterations; + }; + + CollectionSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) { + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var collection = this._collection; + var iterator = getIterator(collection); + if (!isIterator(iterator)) { + return new Iterator(iteratorDone); + } + var iterations = 0; + return new Iterator(function () { + var step = iterator.next(); + return step.done ? step : iteratorValue(type, iterations++, step.value); + }); + }; + + return CollectionSeq; + }(IndexedSeq)); + + // # pragma Helper functions + + var EMPTY_SEQ; + + function emptySequence() { + return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([])); + } + + function keyedSeqFromValue(value) { + var seq = maybeIndexedSeqFromValue(value); + if (seq) { + return seq.fromEntrySeq(); + } + if (typeof value === 'object') { + return new ObjectSeq(value); + } + throw new TypeError( + 'Expected Array or collection object of [k, v] entries, or keyed object: ' + + value + ); + } + + function indexedSeqFromValue(value) { + var seq = maybeIndexedSeqFromValue(value); + if (seq) { + return seq; + } + throw new TypeError( + 'Expected Array or collection object of values: ' + value + ); + } + + function seqFromValue(value) { + var seq = maybeIndexedSeqFromValue(value); + if (seq) { + return isEntriesIterable(value) + ? seq.fromEntrySeq() + : isKeysIterable(value) + ? seq.toSetSeq() + : seq; + } + if (typeof value === 'object') { + return new ObjectSeq(value); + } + throw new TypeError( + 'Expected Array or collection object of values, or keyed object: ' + value + ); + } + + function maybeIndexedSeqFromValue(value) { + return isArrayLike(value) + ? new ArraySeq(value) + : hasIterator(value) + ? new CollectionSeq(value) + : undefined; + } + + var IS_MAP_SYMBOL = '@@__IMMUTABLE_MAP__@@'; + /** + * True if `maybeMap` is a Map. + * + * Also true for OrderedMaps. + */ + function isMap(maybeMap) { + return Boolean(maybeMap && + // @ts-expect-error: maybeMap is typed as `{}`, need to change in 6.0 to `maybeMap && typeof maybeMap === 'object' && IS_MAP_SYMBOL in maybeMap` + maybeMap[IS_MAP_SYMBOL]); + } + + /** + * True if `maybeOrderedMap` is an OrderedMap. + */ + function isOrderedMap(maybeOrderedMap) { + return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap); + } + + /** + * True if `maybeValue` is a JavaScript Object which has *both* `equals()` + * and `hashCode()` methods. + * + * Any two instances of *value objects* can be compared for value equality with + * `Immutable.is()` and can be used as keys in a `Map` or members in a `Set`. + */ + function isValueObject(maybeValue) { + return Boolean(maybeValue && + // @ts-expect-error: maybeValue is typed as `{}` + typeof maybeValue.equals === 'function' && + // @ts-expect-error: maybeValue is typed as `{}` + typeof maybeValue.hashCode === 'function'); + } + + /** + * An extension of the "same-value" algorithm as [described for use by ES6 Map + * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality) + * + * NaN is considered the same as NaN, however -0 and 0 are considered the same + * value, which is different from the algorithm described by + * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + * + * This is extended further to allow Objects to describe the values they + * represent, by way of `valueOf` or `equals` (and `hashCode`). + * + * Note: because of this extension, the key equality of Immutable.Map and the + * value equality of Immutable.Set will differ from ES6 Map and Set. + * + * ### Defining custom values + * + * The easiest way to describe the value an object represents is by implementing + * `valueOf`. For example, `Date` represents a value by returning a unix + * timestamp for `valueOf`: + * + * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ... + * var date2 = new Date(1234567890000); + * date1.valueOf(); // 1234567890000 + * assert( date1 !== date2 ); + * assert( Immutable.is( date1, date2 ) ); + * + * Note: overriding `valueOf` may have other implications if you use this object + * where JavaScript expects a primitive, such as implicit string coercion. + * + * For more complex types, especially collections, implementing `valueOf` may + * not be performant. An alternative is to implement `equals` and `hashCode`. + * + * `equals` takes another object, presumably of similar type, and returns true + * if it is equal. Equality is symmetrical, so the same result should be + * returned if this and the argument are flipped. + * + * assert( a.equals(b) === b.equals(a) ); + * + * `hashCode` returns a 32bit integer number representing the object which will + * be used to determine how to store the value object in a Map or Set. You must + * provide both or neither methods, one must not exist without the other. + * + * Also, an important relationship between these methods must be upheld: if two + * values are equal, they *must* return the same hashCode. If the values are not + * equal, they might have the same hashCode; this is called a hash collision, + * and while undesirable for performance reasons, it is acceptable. + * + * if (a.equals(b)) { + * assert( a.hashCode() === b.hashCode() ); + * } + * + * All Immutable collections are Value Objects: they implement `equals()` + * and `hashCode()`. + */ + function is(valueA, valueB) { + if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { + return true; + } + if (!valueA || !valueB) { + return false; + } + if (typeof valueA.valueOf === 'function' && + typeof valueB.valueOf === 'function') { + valueA = valueA.valueOf(); + valueB = valueB.valueOf(); + if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { + return true; + } + if (!valueA || !valueB) { + return false; + } + } + return !!(isValueObject(valueA) && + isValueObject(valueB) && + valueA.equals(valueB)); + } + + var imul = + typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 + ? Math.imul + : function imul(a, b) { + a |= 0; // int + b |= 0; // int + var c = a & 0xffff; + var d = b & 0xffff; + // Shift by 0 fixes the sign on the high part. + return (c * d + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0)) | 0; // int + }; + + // v8 has an optimization for storing 31-bit signed numbers. + // Values which have either 00 or 11 as the high order bits qualify. + // This function drops the highest order bit in a signed number, maintaining + // the sign bit. + function smi(i32) { + return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff); + } + + var defaultValueOf = Object.prototype.valueOf; + + function hash(o) { + // eslint-disable-next-line eqeqeq + if (o == null) { + return hashNullish(o); + } + + if (typeof o.hashCode === 'function') { + // Drop any high bits from accidentally long hash codes. + return smi(o.hashCode(o)); + } + + var v = valueOf(o); + + // eslint-disable-next-line eqeqeq + if (v == null) { + return hashNullish(v); + } + + switch (typeof v) { + case 'boolean': + // The hash values for built-in constants are a 1 value for each 5-byte + // shift region expect for the first, which encodes the value. This + // reduces the odds of a hash collision for these common values. + return v ? 0x42108421 : 0x42108420; + case 'number': + return hashNumber(v); + case 'string': + return v.length > STRING_HASH_CACHE_MIN_STRLEN + ? cachedHashString(v) + : hashString(v); + case 'object': + case 'function': + return hashJSObj(v); + case 'symbol': + return hashSymbol(v); + default: + if (typeof v.toString === 'function') { + return hashString(v.toString()); + } + throw new Error('Value type ' + typeof v + ' cannot be hashed.'); + } + } + + function hashNullish(nullish) { + return nullish === null ? 0x42108422 : /* undefined */ 0x42108423; + } + + // Compress arbitrarily large numbers into smi hashes. + function hashNumber(n) { + if (n !== n || n === Infinity) { + return 0; + } + var hash = n | 0; + if (hash !== n) { + hash ^= n * 0xffffffff; + } + while (n > 0xffffffff) { + n /= 0xffffffff; + hash ^= n; + } + return smi(hash); + } + + function cachedHashString(string) { + var hashed = stringHashCache[string]; + if (hashed === undefined) { + hashed = hashString(string); + if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) { + STRING_HASH_CACHE_SIZE = 0; + stringHashCache = {}; + } + STRING_HASH_CACHE_SIZE++; + stringHashCache[string] = hashed; + } + return hashed; + } + + // http://jsperf.com/hashing-strings + function hashString(string) { + // This is the hash from JVM + // The hash code for a string is computed as + // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1], + // where s[i] is the ith character of the string and n is the length of + // the string. We "mod" the result to make it between 0 (inclusive) and 2^31 + // (exclusive) by dropping high bits. + var hashed = 0; + for (var ii = 0; ii < string.length; ii++) { + hashed = (31 * hashed + string.charCodeAt(ii)) | 0; + } + return smi(hashed); + } + + function hashSymbol(sym) { + var hashed = symbolMap[sym]; + if (hashed !== undefined) { + return hashed; + } + + hashed = nextHash(); + + symbolMap[sym] = hashed; + + return hashed; + } + + function hashJSObj(obj) { + var hashed; + if (usingWeakMap) { + hashed = weakMap.get(obj); + if (hashed !== undefined) { + return hashed; + } + } + + hashed = obj[UID_HASH_KEY]; + if (hashed !== undefined) { + return hashed; + } + + if (!canDefineProperty) { + hashed = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY]; + if (hashed !== undefined) { + return hashed; + } + + hashed = getIENodeHash(obj); + if (hashed !== undefined) { + return hashed; + } + } + + hashed = nextHash(); + + if (usingWeakMap) { + weakMap.set(obj, hashed); + } else if (isExtensible !== undefined && isExtensible(obj) === false) { + throw new Error('Non-extensible objects are not allowed as keys.'); + } else if (canDefineProperty) { + Object.defineProperty(obj, UID_HASH_KEY, { + enumerable: false, + configurable: false, + writable: false, + value: hashed, + }); + } else if ( + obj.propertyIsEnumerable !== undefined && + obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable + ) { + // Since we can't define a non-enumerable property on the object + // we'll hijack one of the less-used non-enumerable properties to + // save our hash on it. Since this is a function it will not show up in + // `JSON.stringify` which is what we want. + obj.propertyIsEnumerable = function () { + return this.constructor.prototype.propertyIsEnumerable.apply( + this, + arguments + ); + }; + obj.propertyIsEnumerable[UID_HASH_KEY] = hashed; + } else if (obj.nodeType !== undefined) { + // At this point we couldn't get the IE `uniqueID` to use as a hash + // and we couldn't use a non-enumerable property to exploit the + // dontEnum bug so we simply add the `UID_HASH_KEY` on the node + // itself. + obj[UID_HASH_KEY] = hashed; + } else { + throw new Error('Unable to set a non-enumerable property on object.'); + } + + return hashed; + } + + // Get references to ES5 object methods. + var isExtensible = Object.isExtensible; + + // True if Object.defineProperty works as expected. IE8 fails this test. + var canDefineProperty = (function () { + try { + Object.defineProperty({}, '@', {}); + return true; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (e) { + return false; + } + })(); + + // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it + // and avoid memory leaks from the IE cloneNode bug. + function getIENodeHash(node) { + if (node && node.nodeType > 0) { + switch (node.nodeType) { + case 1: // Element + return node.uniqueID; + case 9: // Document + return node.documentElement && node.documentElement.uniqueID; + } + } + } + + function valueOf(obj) { + return obj.valueOf !== defaultValueOf && typeof obj.valueOf === 'function' + ? obj.valueOf(obj) + : obj; + } + + function nextHash() { + var nextHash = ++_objHashUID; + if (_objHashUID & 0x40000000) { + _objHashUID = 0; + } + return nextHash; + } + + // If possible, use a WeakMap. + var usingWeakMap = typeof WeakMap === 'function'; + var weakMap; + if (usingWeakMap) { + weakMap = new WeakMap(); + } + + var symbolMap = Object.create(null); + + var _objHashUID = 0; + + var UID_HASH_KEY = '__immutablehash__'; + if (typeof Symbol === 'function') { + UID_HASH_KEY = Symbol(UID_HASH_KEY); + } + + var STRING_HASH_CACHE_MIN_STRLEN = 16; + var STRING_HASH_CACHE_MAX_SIZE = 255; + var STRING_HASH_CACHE_SIZE = 0; + var stringHashCache = {}; + + var ToKeyedSequence = /*@__PURE__*/(function (KeyedSeq) { + function ToKeyedSequence(indexed, useKeys) { + this._iter = indexed; + this._useKeys = useKeys; + this.size = indexed.size; + } + + if ( KeyedSeq ) ToKeyedSequence.__proto__ = KeyedSeq; + ToKeyedSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype ); + ToKeyedSequence.prototype.constructor = ToKeyedSequence; + + ToKeyedSequence.prototype.get = function get (key, notSetValue) { + return this._iter.get(key, notSetValue); + }; + + ToKeyedSequence.prototype.has = function has (key) { + return this._iter.has(key); + }; + + ToKeyedSequence.prototype.valueSeq = function valueSeq () { + return this._iter.valueSeq(); + }; + + ToKeyedSequence.prototype.reverse = function reverse () { + var this$1$1 = this; + + var reversedSequence = reverseFactory(this, true); + if (!this._useKeys) { + reversedSequence.valueSeq = function () { return this$1$1._iter.toSeq().reverse(); }; + } + return reversedSequence; + }; + + ToKeyedSequence.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + var mappedSequence = mapFactory(this, mapper, context); + if (!this._useKeys) { + mappedSequence.valueSeq = function () { return this$1$1._iter.toSeq().map(mapper, context); }; + } + return mappedSequence; + }; + + ToKeyedSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._iter.__iterate(function (v, k) { return fn(v, k, this$1$1); }, reverse); + }; + + ToKeyedSequence.prototype.__iterator = function __iterator (type, reverse) { + return this._iter.__iterator(type, reverse); + }; + + return ToKeyedSequence; + }(KeyedSeq)); + ToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true; + + var ToIndexedSequence = /*@__PURE__*/(function (IndexedSeq) { + function ToIndexedSequence(iter) { + this._iter = iter; + this.size = iter.size; + } + + if ( IndexedSeq ) ToIndexedSequence.__proto__ = IndexedSeq; + ToIndexedSequence.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + ToIndexedSequence.prototype.constructor = ToIndexedSequence; + + ToIndexedSequence.prototype.includes = function includes (value) { + return this._iter.includes(value); + }; + + ToIndexedSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(this); + return this._iter.__iterate( + function (v) { return fn(v, reverse ? this$1$1.size - ++i : i++, this$1$1); }, + reverse + ); + }; + + ToIndexedSequence.prototype.__iterator = function __iterator (type, reverse) { + var this$1$1 = this; + + var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(this); + return new Iterator(function () { + var step = iterator.next(); + return step.done + ? step + : iteratorValue( + type, + reverse ? this$1$1.size - ++i : i++, + step.value, + step + ); + }); + }; + + return ToIndexedSequence; + }(IndexedSeq)); + + var ToSetSequence = /*@__PURE__*/(function (SetSeq) { + function ToSetSequence(iter) { + this._iter = iter; + this.size = iter.size; + } + + if ( SetSeq ) ToSetSequence.__proto__ = SetSeq; + ToSetSequence.prototype = Object.create( SetSeq && SetSeq.prototype ); + ToSetSequence.prototype.constructor = ToSetSequence; + + ToSetSequence.prototype.has = function has (key) { + return this._iter.includes(key); + }; + + ToSetSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._iter.__iterate(function (v) { return fn(v, v, this$1$1); }, reverse); + }; + + ToSetSequence.prototype.__iterator = function __iterator (type, reverse) { + var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); + return new Iterator(function () { + var step = iterator.next(); + return step.done + ? step + : iteratorValue(type, step.value, step.value, step); + }); + }; + + return ToSetSequence; + }(SetSeq)); + + var FromEntriesSequence = /*@__PURE__*/(function (KeyedSeq) { + function FromEntriesSequence(entries) { + this._iter = entries; + this.size = entries.size; + } + + if ( KeyedSeq ) FromEntriesSequence.__proto__ = KeyedSeq; + FromEntriesSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype ); + FromEntriesSequence.prototype.constructor = FromEntriesSequence; + + FromEntriesSequence.prototype.entrySeq = function entrySeq () { + return this._iter.toSeq(); + }; + + FromEntriesSequence.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._iter.__iterate(function (entry) { + // Check if entry exists first so array access doesn't throw for holes + // in the parent iteration. + if (entry) { + validateEntry(entry); + var indexedCollection = isCollection(entry); + return fn( + indexedCollection ? entry.get(1) : entry[1], + indexedCollection ? entry.get(0) : entry[0], + this$1$1 + ); + } + }, reverse); + }; + + FromEntriesSequence.prototype.__iterator = function __iterator (type, reverse) { + var iterator = this._iter.__iterator(ITERATE_VALUES, reverse); + return new Iterator(function () { + while (true) { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + // Check if entry exists first so array access doesn't throw for holes + // in the parent iteration. + if (entry) { + validateEntry(entry); + var indexedCollection = isCollection(entry); + return iteratorValue( + type, + indexedCollection ? entry.get(0) : entry[0], + indexedCollection ? entry.get(1) : entry[1], + step + ); + } + } + }); + }; + + return FromEntriesSequence; + }(KeyedSeq)); + + ToIndexedSequence.prototype.cacheResult = + ToKeyedSequence.prototype.cacheResult = + ToSetSequence.prototype.cacheResult = + FromEntriesSequence.prototype.cacheResult = + cacheResultThrough; + + function flipFactory(collection) { + var flipSequence = makeSequence(collection); + flipSequence._iter = collection; + flipSequence.size = collection.size; + flipSequence.flip = function () { return collection; }; + flipSequence.reverse = function () { + var reversedSequence = collection.reverse.apply(this); // super.reverse() + reversedSequence.flip = function () { return collection.reverse(); }; + return reversedSequence; + }; + flipSequence.has = function (key) { return collection.includes(key); }; + flipSequence.includes = function (key) { return collection.has(key); }; + flipSequence.cacheResult = cacheResultThrough; + flipSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + return collection.__iterate(function (v, k) { return fn(k, v, this$1$1) !== false; }, reverse); + }; + flipSequence.__iteratorUncached = function (type, reverse) { + if (type === ITERATE_ENTRIES) { + var iterator = collection.__iterator(type, reverse); + return new Iterator(function () { + var step = iterator.next(); + if (!step.done) { + var k = step.value[0]; + step.value[0] = step.value[1]; + step.value[1] = k; + } + return step; + }); + } + return collection.__iterator( + type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES, + reverse + ); + }; + return flipSequence; + } + + function mapFactory(collection, mapper, context) { + var mappedSequence = makeSequence(collection); + mappedSequence.size = collection.size; + mappedSequence.has = function (key) { return collection.has(key); }; + mappedSequence.get = function (key, notSetValue) { + var v = collection.get(key, NOT_SET); + return v === NOT_SET + ? notSetValue + : mapper.call(context, v, key, collection); + }; + mappedSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + return collection.__iterate( + function (v, k, c) { return fn(mapper.call(context, v, k, c), k, this$1$1) !== false; }, + reverse + ); + }; + mappedSequence.__iteratorUncached = function (type, reverse) { + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + return new Iterator(function () { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + var key = entry[0]; + return iteratorValue( + type, + key, + mapper.call(context, entry[1], key, collection), + step + ); + }); + }; + return mappedSequence; + } + + function reverseFactory(collection, useKeys) { + var this$1$1 = this; + + var reversedSequence = makeSequence(collection); + reversedSequence._iter = collection; + reversedSequence.size = collection.size; + reversedSequence.reverse = function () { return collection; }; + if (collection.flip) { + reversedSequence.flip = function () { + var flipSequence = flipFactory(collection); + flipSequence.reverse = function () { return collection.flip(); }; + return flipSequence; + }; + } + reversedSequence.get = function (key, notSetValue) { return collection.get(useKeys ? key : -1 - key, notSetValue); }; + reversedSequence.has = function (key) { return collection.has(useKeys ? key : -1 - key); }; + reversedSequence.includes = function (value) { return collection.includes(value); }; + reversedSequence.cacheResult = cacheResultThrough; + reversedSequence.__iterate = function (fn, reverse) { + var this$1$1 = this; + + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(collection); + return collection.__iterate( + function (v, k) { return fn(v, useKeys ? k : reverse ? this$1$1.size - ++i : i++, this$1$1); }, + !reverse + ); + }; + reversedSequence.__iterator = function (type, reverse) { + var i = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + reverse && ensureSize(collection); + var iterator = collection.__iterator(ITERATE_ENTRIES, !reverse); + return new Iterator(function () { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + return iteratorValue( + type, + useKeys ? entry[0] : reverse ? this$1$1.size - ++i : i++, + entry[1], + step + ); + }); + }; + return reversedSequence; + } + + function filterFactory(collection, predicate, context, useKeys) { + var filterSequence = makeSequence(collection); + if (useKeys) { + filterSequence.has = function (key) { + var v = collection.get(key, NOT_SET); + return v !== NOT_SET && !!predicate.call(context, v, key, collection); + }; + filterSequence.get = function (key, notSetValue) { + var v = collection.get(key, NOT_SET); + return v !== NOT_SET && predicate.call(context, v, key, collection) + ? v + : notSetValue; + }; + } + filterSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + var iterations = 0; + collection.__iterate(function (v, k, c) { + if (predicate.call(context, v, k, c)) { + iterations++; + return fn(v, useKeys ? k : iterations - 1, this$1$1); + } + }, reverse); + return iterations; + }; + filterSequence.__iteratorUncached = function (type, reverse) { + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + var iterations = 0; + return new Iterator(function () { + while (true) { + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + var key = entry[0]; + var value = entry[1]; + if (predicate.call(context, value, key, collection)) { + return iteratorValue(type, useKeys ? key : iterations++, value, step); + } + } + }); + }; + return filterSequence; + } + + function countByFactory(collection, grouper, context) { + var groups = Map().asMutable(); + collection.__iterate(function (v, k) { + groups.update(grouper.call(context, v, k, collection), 0, function (a) { return a + 1; }); + }); + return groups.asImmutable(); + } + + function groupByFactory(collection, grouper, context) { + var isKeyedIter = isKeyed(collection); + var groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable(); + collection.__iterate(function (v, k) { + groups.update( + grouper.call(context, v, k, collection), + function (a) { return ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a); } + ); + }); + var coerce = collectionClass(collection); + return groups.map(function (arr) { return reify(collection, coerce(arr)); }).asImmutable(); + } + + function partitionFactory(collection, predicate, context) { + var isKeyedIter = isKeyed(collection); + var groups = [[], []]; + collection.__iterate(function (v, k) { + groups[predicate.call(context, v, k, collection) ? 1 : 0].push( + isKeyedIter ? [k, v] : v + ); + }); + var coerce = collectionClass(collection); + return groups.map(function (arr) { return reify(collection, coerce(arr)); }); + } + + function sliceFactory(collection, begin, end, useKeys) { + var originalSize = collection.size; + + if (wholeSlice(begin, end, originalSize)) { + return collection; + } + + // begin or end can not be resolved if they were provided as negative numbers and + // this collection's size is unknown. In that case, cache first so there is + // a known size and these do not resolve to NaN. + if (typeof originalSize === 'undefined' && (begin < 0 || end < 0)) { + return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys); + } + + var resolvedBegin = resolveBegin(begin, originalSize); + var resolvedEnd = resolveEnd(end, originalSize); + + // Note: resolvedEnd is undefined when the original sequence's length is + // unknown and this slice did not supply an end and should contain all + // elements after resolvedBegin. + // In that case, resolvedSize will be NaN and sliceSize will remain undefined. + var resolvedSize = resolvedEnd - resolvedBegin; + var sliceSize; + if (resolvedSize === resolvedSize) { + sliceSize = resolvedSize < 0 ? 0 : resolvedSize; + } + + var sliceSeq = makeSequence(collection); + + // If collection.size is undefined, the size of the realized sliceSeq is + // unknown at this point unless the number of items to slice is 0 + sliceSeq.size = + sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined; + + if (!useKeys && isSeq(collection) && sliceSize >= 0) { + sliceSeq.get = function (index, notSetValue) { + index = wrapIndex(this, index); + return index >= 0 && index < sliceSize + ? collection.get(index + resolvedBegin, notSetValue) + : notSetValue; + }; + } + + sliceSeq.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + if (sliceSize === 0) { + return 0; + } + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var skipped = 0; + var isSkipping = true; + var iterations = 0; + collection.__iterate(function (v, k) { + if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) { + iterations++; + return ( + fn(v, useKeys ? k : iterations - 1, this$1$1) !== false && + iterations !== sliceSize + ); + } + }); + return iterations; + }; + + sliceSeq.__iteratorUncached = function (type, reverse) { + if (sliceSize !== 0 && reverse) { + return this.cacheResult().__iterator(type, reverse); + } + // Don't bother instantiating parent iterator if taking 0. + if (sliceSize === 0) { + return new Iterator(iteratorDone); + } + var iterator = collection.__iterator(type, reverse); + var skipped = 0; + var iterations = 0; + return new Iterator(function () { + while (skipped++ < resolvedBegin) { + iterator.next(); + } + if (++iterations > sliceSize) { + return iteratorDone(); + } + var step = iterator.next(); + if (useKeys || type === ITERATE_VALUES || step.done) { + return step; + } + if (type === ITERATE_KEYS) { + return iteratorValue(type, iterations - 1, undefined, step); + } + return iteratorValue(type, iterations - 1, step.value[1], step); + }); + }; + + return sliceSeq; + } + + function takeWhileFactory(collection, predicate, context) { + var takeSequence = makeSequence(collection); + takeSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var iterations = 0; + collection.__iterate( + function (v, k, c) { return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$1$1); } + ); + return iterations; + }; + takeSequence.__iteratorUncached = function (type, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + var iterating = true; + return new Iterator(function () { + if (!iterating) { + return iteratorDone(); + } + var step = iterator.next(); + if (step.done) { + return step; + } + var entry = step.value; + var k = entry[0]; + var v = entry[1]; + if (!predicate.call(context, v, k, this$1$1)) { + iterating = false; + return iteratorDone(); + } + return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); + }); + }; + return takeSequence; + } + + function skipWhileFactory(collection, predicate, context, useKeys) { + var skipSequence = makeSequence(collection); + skipSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var isSkipping = true; + var iterations = 0; + collection.__iterate(function (v, k, c) { + if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) { + iterations++; + return fn(v, useKeys ? k : iterations - 1, this$1$1); + } + }); + return iterations; + }; + skipSequence.__iteratorUncached = function (type, reverse) { + var this$1$1 = this; + + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var iterator = collection.__iterator(ITERATE_ENTRIES, reverse); + var skipping = true; + var iterations = 0; + return new Iterator(function () { + var step; + var k; + var v; + do { + step = iterator.next(); + if (step.done) { + if (useKeys || type === ITERATE_VALUES) { + return step; + } + if (type === ITERATE_KEYS) { + return iteratorValue(type, iterations++, undefined, step); + } + return iteratorValue(type, iterations++, step.value[1], step); + } + var entry = step.value; + k = entry[0]; + v = entry[1]; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + skipping && (skipping = predicate.call(context, v, k, this$1$1)); + } while (skipping); + return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); + }); + }; + return skipSequence; + } + + var ConcatSeq = /*@__PURE__*/(function (Seq) { + function ConcatSeq(iterables) { + this._wrappedIterables = iterables.flatMap(function (iterable) { + if (iterable._wrappedIterables) { + return iterable._wrappedIterables; + } + return [iterable]; + }); + this.size = this._wrappedIterables.reduce(function (sum, iterable) { + if (sum !== undefined) { + var size = iterable.size; + if (size !== undefined) { + return sum + size; + } + } + }, 0); + this[IS_KEYED_SYMBOL] = this._wrappedIterables[0][IS_KEYED_SYMBOL]; + this[IS_INDEXED_SYMBOL] = this._wrappedIterables[0][IS_INDEXED_SYMBOL]; + this[IS_ORDERED_SYMBOL] = this._wrappedIterables[0][IS_ORDERED_SYMBOL]; + } + + if ( Seq ) ConcatSeq.__proto__ = Seq; + ConcatSeq.prototype = Object.create( Seq && Seq.prototype ); + ConcatSeq.prototype.constructor = ConcatSeq; + + ConcatSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) { + if (this._wrappedIterables.length === 0) { + return; + } + + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + + var iterableIndex = 0; + var useKeys = isKeyed(this); + var iteratorType = useKeys ? ITERATE_ENTRIES : ITERATE_VALUES; + var currentIterator = this._wrappedIterables[iterableIndex].__iterator( + iteratorType, + reverse + ); + + var keepGoing = true; + var index = 0; + while (keepGoing) { + var next = currentIterator.next(); + while (next.done) { + iterableIndex++; + if (iterableIndex === this._wrappedIterables.length) { + return index; + } + currentIterator = this._wrappedIterables[iterableIndex].__iterator( + iteratorType, + reverse + ); + next = currentIterator.next(); + } + var fnResult = useKeys + ? fn(next.value[1], next.value[0], this) + : fn(next.value, index, this); + keepGoing = fnResult !== false; + index++; + } + return index; + }; + + ConcatSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) { + var this$1$1 = this; + + if (this._wrappedIterables.length === 0) { + return new Iterator(iteratorDone); + } + + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + + var iterableIndex = 0; + var currentIterator = this._wrappedIterables[iterableIndex].__iterator( + type, + reverse + ); + return new Iterator(function () { + var next = currentIterator.next(); + while (next.done) { + iterableIndex++; + if (iterableIndex === this$1$1._wrappedIterables.length) { + return next; + } + currentIterator = this$1$1._wrappedIterables[iterableIndex].__iterator( + type, + reverse + ); + next = currentIterator.next(); + } + return next; + }); + }; + + return ConcatSeq; + }(Seq)); + + function concatFactory(collection, values) { + var isKeyedCollection = isKeyed(collection); + var iters = [collection] + .concat(values) + .map(function (v) { + if (!isCollection(v)) { + v = isKeyedCollection + ? keyedSeqFromValue(v) + : indexedSeqFromValue(Array.isArray(v) ? v : [v]); + } else if (isKeyedCollection) { + v = KeyedCollection(v); + } + return v; + }) + .filter(function (v) { return v.size !== 0; }); + + if (iters.length === 0) { + return collection; + } + + if (iters.length === 1) { + var singleton = iters[0]; + if ( + singleton === collection || + (isKeyedCollection && isKeyed(singleton)) || + (isIndexed(collection) && isIndexed(singleton)) + ) { + return singleton; + } + } + + return new ConcatSeq(iters); + } + + function flattenFactory(collection, depth, useKeys) { + var flatSequence = makeSequence(collection); + flatSequence.__iterateUncached = function (fn, reverse) { + if (reverse) { + return this.cacheResult().__iterate(fn, reverse); + } + var iterations = 0; + var stopped = false; + function flatDeep(iter, currentDepth) { + iter.__iterate(function (v, k) { + if ((!depth || currentDepth < depth) && isCollection(v)) { + flatDeep(v, currentDepth + 1); + } else { + iterations++; + if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) { + stopped = true; + } + } + return !stopped; + }, reverse); + } + flatDeep(collection, 0); + return iterations; + }; + flatSequence.__iteratorUncached = function (type, reverse) { + if (reverse) { + return this.cacheResult().__iterator(type, reverse); + } + var iterator = collection.__iterator(type, reverse); + var stack = []; + var iterations = 0; + return new Iterator(function () { + while (iterator) { + var step = iterator.next(); + if (step.done !== false) { + iterator = stack.pop(); + continue; + } + var v = step.value; + if (type === ITERATE_ENTRIES) { + v = v[1]; + } + if ((!depth || stack.length < depth) && isCollection(v)) { + stack.push(iterator); + iterator = v.__iterator(type, reverse); + } else { + return useKeys ? step : iteratorValue(type, iterations++, v, step); + } + } + return iteratorDone(); + }); + }; + return flatSequence; + } + + function flatMapFactory(collection, mapper, context) { + var coerce = collectionClass(collection); + return collection + .toSeq() + .map(function (v, k) { return coerce(mapper.call(context, v, k, collection)); }) + .flatten(true); + } + + function interposeFactory(collection, separator) { + var interposedSequence = makeSequence(collection); + interposedSequence.size = collection.size && collection.size * 2 - 1; + interposedSequence.__iterateUncached = function (fn, reverse) { + var this$1$1 = this; + + var iterations = 0; + collection.__iterate( + function (v) { return (!iterations || fn(separator, iterations++, this$1$1) !== false) && + fn(v, iterations++, this$1$1) !== false; }, + reverse + ); + return iterations; + }; + interposedSequence.__iteratorUncached = function (type, reverse) { + var iterator = collection.__iterator(ITERATE_VALUES, reverse); + var iterations = 0; + var step; + return new Iterator(function () { + if (!step || iterations % 2) { + step = iterator.next(); + if (step.done) { + return step; + } + } + return iterations % 2 + ? iteratorValue(type, iterations++, separator) + : iteratorValue(type, iterations++, step.value, step); + }); + }; + return interposedSequence; + } + + function sortFactory(collection, comparator, mapper) { + if (!comparator) { + comparator = defaultComparator; + } + var isKeyedCollection = isKeyed(collection); + var index = 0; + var entries = collection + .toSeq() + .map(function (v, k) { return [k, v, index++, mapper ? mapper(v, k, collection) : v]; }) + .valueSeq() + .toArray(); + entries + .sort(function (a, b) { return comparator(a[3], b[3]) || a[2] - b[2]; }) + .forEach( + isKeyedCollection + ? function (v, i) { + entries[i].length = 2; + } + : function (v, i) { + entries[i] = v[1]; + } + ); + return isKeyedCollection + ? KeyedSeq(entries) + : isIndexed(collection) + ? IndexedSeq(entries) + : SetSeq(entries); + } + + function maxFactory(collection, comparator, mapper) { + if (!comparator) { + comparator = defaultComparator; + } + if (mapper) { + var entry = collection + .toSeq() + .map(function (v, k) { return [v, mapper(v, k, collection)]; }) + .reduce(function (a, b) { return (maxCompare(comparator, a[1], b[1]) ? b : a); }); + return entry && entry[0]; + } + return collection.reduce(function (a, b) { return (maxCompare(comparator, a, b) ? b : a); }); + } + + function maxCompare(comparator, a, b) { + var comp = comparator(b, a); + // b is considered the new max if the comparator declares them equal, but + // they are not equal and b is in fact a nullish value. + return ( + (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || + comp > 0 + ); + } + + function zipWithFactory(keyIter, zipper, iters, zipAll) { + var zipSequence = makeSequence(keyIter); + var sizes = new ArraySeq(iters).map(function (i) { return i.size; }); + zipSequence.size = zipAll ? sizes.max() : sizes.min(); + // Note: this a generic base implementation of __iterate in terms of + // __iterator which may be more generically useful in the future. + zipSequence.__iterate = function (fn, reverse) { + /* generic: + var iterator = this.__iterator(ITERATE_ENTRIES, reverse); + var step; + var iterations = 0; + while (!(step = iterator.next()).done) { + iterations++; + if (fn(step.value[1], step.value[0], this) === false) { + break; + } + } + return iterations; + */ + // indexed: + var iterator = this.__iterator(ITERATE_VALUES, reverse); + var step; + var iterations = 0; + while (!(step = iterator.next()).done) { + if (fn(step.value, iterations++, this) === false) { + break; + } + } + return iterations; + }; + zipSequence.__iteratorUncached = function (type, reverse) { + var iterators = iters.map( + function (i) { return ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)); } + ); + var iterations = 0; + var isDone = false; + return new Iterator(function () { + var steps; + if (!isDone) { + steps = iterators.map(function (i) { return i.next(); }); + isDone = zipAll + ? steps.every(function (s) { return s.done; }) + : steps.some(function (s) { return s.done; }); + } + if (isDone) { + return iteratorDone(); + } + return iteratorValue( + type, + iterations++, + zipper.apply( + null, + steps.map(function (s) { return s.value; }) + ) + ); + }); + }; + return zipSequence; + } + + // #pragma Helper Functions + + function reify(iter, seq) { + return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq); + } + + function validateEntry(entry) { + if (entry !== Object(entry)) { + throw new TypeError('Expected [K, V] tuple: ' + entry); + } + } + + function collectionClass(collection) { + return isKeyed(collection) + ? KeyedCollection + : isIndexed(collection) + ? IndexedCollection + : SetCollection; + } + + function makeSequence(collection) { + return Object.create( + (isKeyed(collection) + ? KeyedSeq + : isIndexed(collection) + ? IndexedSeq + : SetSeq + ).prototype + ); + } + + function cacheResultThrough() { + if (this._iter.cacheResult) { + this._iter.cacheResult(); + this.size = this._iter.size; + return this; + } + return Seq.prototype.cacheResult.call(this); + } + + function defaultComparator(a, b) { + if (a === undefined && b === undefined) { + return 0; + } + + if (a === undefined) { + return 1; + } + + if (b === undefined) { + return -1; + } + + return a > b ? 1 : a < b ? -1 : 0; + } + + // http://jsperf.com/copy-array-inline + function arrCopy(arr, offset) { + offset = offset || 0; + var len = Math.max(0, arr.length - offset); + var newArr = new Array(len); + for (var ii = 0; ii < len; ii++) { + // @ts-expect-error We may want to guard for undefined values with `if (arr[ii + offset] !== undefined`, but ths should not happen by design + newArr[ii] = arr[ii + offset]; + } + return newArr; + } + + function invariant(condition, error) { + if (!condition) + { throw new Error(error); } + } + + function assertNotInfinite(size) { + invariant(size !== Infinity, 'Cannot perform this action with an infinite size.'); + } + + function coerceKeyPath(keyPath) { + if (isArrayLike(keyPath) && typeof keyPath !== 'string') { + return keyPath; + } + if (isOrdered(keyPath)) { + return keyPath.toArray(); + } + throw new TypeError('Invalid keyPath: expected Ordered Collection or Array: ' + keyPath); + } + + var toString = Object.prototype.toString; + function isPlainObject(value) { + // The base prototype's toString deals with Argument objects and native namespaces like Math + if (!value || + typeof value !== 'object' || + toString.call(value) !== '[object Object]') { + return false; + } + var proto = Object.getPrototypeOf(value); + if (proto === null) { + return true; + } + // Iteratively going up the prototype chain is needed for cross-realm environments (differing contexts, iframes, etc) + var parentProto = proto; + var nextProto = Object.getPrototypeOf(proto); + while (nextProto !== null) { + parentProto = nextProto; + nextProto = Object.getPrototypeOf(parentProto); + } + return parentProto === proto; + } + + /** + * Returns true if the value is a potentially-persistent data structure, either + * provided by Immutable.js or a plain Array or Object. + */ + function isDataStructure(value) { + return (typeof value === 'object' && + (isImmutable(value) || Array.isArray(value) || isPlainObject(value))); + } + + /** + * Converts a value to a string, adding quotes if a string was provided. + */ + function quoteString(value) { + try { + return typeof value === 'string' ? JSON.stringify(value) : String(value); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } + catch (_ignoreError) { + return JSON.stringify(value); + } + } + + /** + * Returns true if the key is defined in the provided collection. + * + * A functional alternative to `collection.has(key)` which will also work with + * plain Objects and Arrays as an alternative for + * `collection.hasOwnProperty(key)`. + * + * + * ```js + * import { has } from 'immutable'; + * + * has([ 'dog', 'frog', 'cat' ], 2) // true + * has([ 'dog', 'frog', 'cat' ], 5) // false + * has({ x: 123, y: 456 }, 'x') // true + * has({ x: 123, y: 456 }, 'z') // false + * ``` + */ + function has(collection, key) { + return isImmutable(collection) + ? // @ts-expect-error key might be a number or symbol, which is not handled be Record key type + collection.has(key) + : // @ts-expect-error key might be anything else than PropertyKey, and will return false in that case but runtime is OK + isDataStructure(collection) && hasOwnProperty.call(collection, key); + } + + function get(collection, key, notSetValue) { + return isImmutable(collection) + ? collection.get(key, notSetValue) + : !has(collection, key) + ? notSetValue + : // @ts-expect-error weird "get" here, + typeof collection.get === 'function' + ? // @ts-expect-error weird "get" here, + collection.get(key) + : // @ts-expect-error key is unknown here, + collection[key]; + } + + function shallowCopy(from) { + if (Array.isArray(from)) { + return arrCopy(from); + } + var to = {}; + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + return to; + } + + function remove(collection, key) { + if (!isDataStructure(collection)) { + throw new TypeError('Cannot update non-data-structure value: ' + collection); + } + if (isImmutable(collection)) { + // @ts-expect-error weird "remove" here, + if (!collection.remove) { + throw new TypeError('Cannot update immutable value without .remove() method: ' + collection); + } + // @ts-expect-error weird "remove" here, + return collection.remove(key); + } + // @ts-expect-error assert that key is a string, a number or a symbol here + if (!hasOwnProperty.call(collection, key)) { + return collection; + } + var collectionCopy = shallowCopy(collection); + if (Array.isArray(collectionCopy)) { + // @ts-expect-error assert that key is a number here + collectionCopy.splice(key, 1); + } + else { + // @ts-expect-error assert that key is a string, a number or a symbol here + delete collectionCopy[key]; + } + return collectionCopy; + } + + function set(collection, key, value) { + if (!isDataStructure(collection)) { + throw new TypeError('Cannot update non-data-structure value: ' + collection); + } + if (isImmutable(collection)) { + // @ts-expect-error weird "set" here, + if (!collection.set) { + throw new TypeError('Cannot update immutable value without .set() method: ' + collection); + } + // @ts-expect-error weird "set" here, + return collection.set(key, value); + } + // @ts-expect-error mix of key and string here. Probably need a more fine type here + if (hasOwnProperty.call(collection, key) && value === collection[key]) { + return collection; + } + var collectionCopy = shallowCopy(collection); + // @ts-expect-error mix of key and string here. Probably need a more fine type here + collectionCopy[key] = value; + return collectionCopy; + } + + function updateIn$1(collection, keyPath, notSetValue, updater) { + if (!updater) { + // handle the fact that `notSetValue` is optional here, in that case `updater` is the updater function + // @ts-expect-error updater is a function here + updater = notSetValue; + notSetValue = undefined; + } + var updatedValue = updateInDeeply(isImmutable(collection), + // @ts-expect-error type issues with Record and mixed types + collection, coerceKeyPath(keyPath), 0, notSetValue, updater); + // @ts-expect-error mixed return type + return updatedValue === NOT_SET ? notSetValue : updatedValue; + } + function updateInDeeply(inImmutable, existing, keyPath, i, notSetValue, updater) { + var wasNotSet = existing === NOT_SET; + if (i === keyPath.length) { + var existingValue = wasNotSet ? notSetValue : existing; + // @ts-expect-error mixed type with optional value + var newValue = updater(existingValue); + // @ts-expect-error mixed type + return newValue === existingValue ? existing : newValue; + } + if (!wasNotSet && !isDataStructure(existing)) { + throw new TypeError('Cannot update within non-data-structure value in path [' + + Array.from(keyPath).slice(0, i).map(quoteString) + + ']: ' + + existing); + } + var key = keyPath[i]; + var nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET); + var nextUpdated = updateInDeeply(nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting), + // @ts-expect-error mixed type + nextExisting, keyPath, i + 1, notSetValue, updater); + return nextUpdated === nextExisting + ? existing + : nextUpdated === NOT_SET + ? remove(existing, key) + : set(wasNotSet ? (inImmutable ? emptyMap() : {}) : existing, key, nextUpdated); + } + + /** + * Returns a copy of the collection with the value at the key path set to the + * provided value. + * + * A functional alternative to `collection.setIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { setIn } from 'immutable'; + * + * const original = { x: { y: { z: 123 }}} + * setIn(original, ['x', 'y', 'z'], 456) // { x: { y: { z: 456 }}} + * console.log(original) // { x: { y: { z: 123 }}} + * ``` + */ + function setIn$1(collection, keyPath, value) { + return updateIn$1(collection, keyPath, NOT_SET, function () { return value; }); + } + + function setIn(keyPath, v) { + return setIn$1(this, keyPath, v); + } + + /** + * Returns a copy of the collection with the value at the key path removed. + * + * A functional alternative to `collection.removeIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { removeIn } from 'immutable'; + * + * const original = { x: { y: { z: 123 }}} + * removeIn(original, ['x', 'y', 'z']) // { x: { y: {}}} + * console.log(original) // { x: { y: { z: 123 }}} + * ``` + */ + function removeIn(collection, keyPath) { + return updateIn$1(collection, keyPath, function () { return NOT_SET; }); + } + + function deleteIn(keyPath) { + return removeIn(this, keyPath); + } + + function update$1(collection, key, notSetValue, updater) { + return updateIn$1( + // @ts-expect-error Index signature for type string is missing in type V[] + collection, [key], notSetValue, updater); + } + + function update(key, notSetValue, updater) { + return arguments.length === 1 + ? key(this) + : update$1(this, key, notSetValue, updater); + } + + function updateIn(keyPath, notSetValue, updater) { + return updateIn$1(this, keyPath, notSetValue, updater); + } + + function merge$1() { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + return mergeIntoKeyedWith(this, iters); + } + + function mergeWith$1(merger) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + if (typeof merger !== 'function') { + throw new TypeError('Invalid merger function: ' + merger); + } + return mergeIntoKeyedWith(this, iters, merger); + } + + function mergeIntoKeyedWith(collection, collections, merger) { + var iters = []; + for (var ii = 0; ii < collections.length; ii++) { + var collection$1 = KeyedCollection(collections[ii]); + if (collection$1.size !== 0) { + iters.push(collection$1); + } + } + if (iters.length === 0) { + return collection; + } + if ( + collection.toSeq().size === 0 && + !collection.__ownerID && + iters.length === 1 + ) { + return isRecord(collection) + ? collection // Record is empty and will not be updated: return the same instance + : collection.constructor(iters[0]); + } + return collection.withMutations(function (collection) { + var mergeIntoCollection = merger + ? function (value, key) { + update$1(collection, key, NOT_SET, function (oldVal) { return oldVal === NOT_SET ? value : merger(oldVal, value, key); } + ); + } + : function (value, key) { + collection.set(key, value); + }; + for (var ii = 0; ii < iters.length; ii++) { + iters[ii].forEach(mergeIntoCollection); + } + }); + } + + function merge(collection) { + var sources = [], len = arguments.length - 1; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; + + return mergeWithSources(collection, sources); + } + + function mergeWith(merger, collection) { + var sources = [], len = arguments.length - 2; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ]; + + return mergeWithSources(collection, sources, merger); + } + + function mergeDeep$1(collection) { + var sources = [], len = arguments.length - 1; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; + + return mergeDeepWithSources(collection, sources); + } + + function mergeDeepWith$1(merger, collection) { + var sources = [], len = arguments.length - 2; + while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ]; + + return mergeDeepWithSources(collection, sources, merger); + } + + function mergeDeepWithSources(collection, sources, merger) { + return mergeWithSources(collection, sources, deepMergerWith(merger)); + } + + function mergeWithSources(collection, sources, merger) { + if (!isDataStructure(collection)) { + throw new TypeError( + 'Cannot merge into non-data-structure value: ' + collection + ); + } + if (isImmutable(collection)) { + return typeof merger === 'function' && collection.mergeWith + ? collection.mergeWith.apply(collection, [ merger ].concat( sources )) + : collection.merge + ? collection.merge.apply(collection, sources) + : collection.concat.apply(collection, sources); + } + var isArray = Array.isArray(collection); + var merged = collection; + var Collection = isArray ? IndexedCollection : KeyedCollection; + var mergeItem = isArray + ? function (value) { + // Copy on write + if (merged === collection) { + merged = shallowCopy(merged); + } + merged.push(value); + } + : function (value, key) { + var hasVal = hasOwnProperty.call(merged, key); + var nextVal = + hasVal && merger ? merger(merged[key], value, key) : value; + if (!hasVal || nextVal !== merged[key]) { + // Copy on write + if (merged === collection) { + merged = shallowCopy(merged); + } + merged[key] = nextVal; + } + }; + for (var i = 0; i < sources.length; i++) { + Collection(sources[i]).forEach(mergeItem); + } + return merged; + } + + function deepMergerWith(merger) { + function deepMerger(oldValue, newValue, key) { + return isDataStructure(oldValue) && + isDataStructure(newValue) && + areMergeable(oldValue, newValue) + ? mergeWithSources(oldValue, [newValue], deepMerger) + : merger + ? merger(oldValue, newValue, key) + : newValue; + } + return deepMerger; + } + + /** + * It's unclear what the desired behavior is for merging two collections that + * fall into separate categories between keyed, indexed, or set-like, so we only + * consider them mergeable if they fall into the same category. + */ + function areMergeable(oldDataStructure, newDataStructure) { + var oldSeq = Seq(oldDataStructure); + var newSeq = Seq(newDataStructure); + // This logic assumes that a sequence can only fall into one of the three + // categories mentioned above (since there's no `isSetLike()` method). + return ( + isIndexed(oldSeq) === isIndexed(newSeq) && + isKeyed(oldSeq) === isKeyed(newSeq) + ); + } + + function mergeDeep() { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + return mergeDeepWithSources(this, iters); + } + + function mergeDeepWith(merger) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + return mergeDeepWithSources(this, iters, merger); + } + + function mergeIn(keyPath) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + return updateIn$1(this, keyPath, emptyMap(), function (m) { return mergeWithSources(m, iters); }); + } + + function mergeDeepIn(keyPath) { + var iters = [], len = arguments.length - 1; + while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ]; + + return updateIn$1(this, keyPath, emptyMap(), function (m) { return mergeDeepWithSources(m, iters); } + ); + } + + function withMutations(fn) { + var mutable = this.asMutable(); + fn(mutable); + return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this; + } + + function asMutable() { + return this.__ownerID ? this : this.__ensureOwner(new OwnerID()); + } + + function asImmutable() { + return this.__ensureOwner(); + } + + function wasAltered() { + return this.__altered; + } + + var Map = /*@__PURE__*/(function (KeyedCollection) { + function Map(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyMap() + : isMap(value) && !isOrdered(value) + ? value + : emptyMap().withMutations(function (map) { + var iter = KeyedCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v, k) { return map.set(k, v); }); + }); + } + + if ( KeyedCollection ) Map.__proto__ = KeyedCollection; + Map.prototype = Object.create( KeyedCollection && KeyedCollection.prototype ); + Map.prototype.constructor = Map; + + Map.prototype.toString = function toString () { + return this.__toString('Map {', '}'); + }; + + // @pragma Access + + Map.prototype.get = function get (k, notSetValue) { + return this._root + ? this._root.get(0, undefined, k, notSetValue) + : notSetValue; + }; + + // @pragma Modification + + Map.prototype.set = function set (k, v) { + return updateMap(this, k, v); + }; + + Map.prototype.remove = function remove (k) { + return updateMap(this, k, NOT_SET); + }; + + Map.prototype.deleteAll = function deleteAll (keys) { + var collection = Collection(keys); + + if (collection.size === 0) { + return this; + } + + return this.withMutations(function (map) { + collection.forEach(function (key) { return map.remove(key); }); + }); + }; + + Map.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = 0; + this._root = null; + this.__hash = undefined; + this.__altered = true; + return this; + } + return emptyMap(); + }; + + // @pragma Composition + + Map.prototype.sort = function sort (comparator) { + // Late binding + return OrderedMap(sortFactory(this, comparator)); + }; + + Map.prototype.sortBy = function sortBy (mapper, comparator) { + // Late binding + return OrderedMap(sortFactory(this, comparator, mapper)); + }; + + Map.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + return this.withMutations(function (map) { + map.forEach(function (value, key) { + map.set(key, mapper.call(context, value, key, this$1$1)); + }); + }); + }; + + // @pragma Mutability + + Map.prototype.__iterator = function __iterator (type, reverse) { + return new MapIterator(this, type, reverse); + }; + + Map.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + var iterations = 0; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + this._root && + this._root.iterate(function (entry) { + iterations++; + return fn(entry[1], entry[0], this$1$1); + }, reverse); + return iterations; + }; + + Map.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + if (!ownerID) { + if (this.size === 0) { + return emptyMap(); + } + this.__ownerID = ownerID; + this.__altered = false; + return this; + } + return makeMap(this.size, this._root, ownerID, this.__hash); + }; + + return Map; + }(KeyedCollection)); + + Map.isMap = isMap; + + var MapPrototype = Map.prototype; + MapPrototype[IS_MAP_SYMBOL] = true; + MapPrototype[DELETE] = MapPrototype.remove; + MapPrototype.removeAll = MapPrototype.deleteAll; + MapPrototype.setIn = setIn; + MapPrototype.removeIn = MapPrototype.deleteIn = deleteIn; + MapPrototype.update = update; + MapPrototype.updateIn = updateIn; + MapPrototype.merge = MapPrototype.concat = merge$1; + MapPrototype.mergeWith = mergeWith$1; + MapPrototype.mergeDeep = mergeDeep; + MapPrototype.mergeDeepWith = mergeDeepWith; + MapPrototype.mergeIn = mergeIn; + MapPrototype.mergeDeepIn = mergeDeepIn; + MapPrototype.withMutations = withMutations; + MapPrototype.wasAltered = wasAltered; + MapPrototype.asImmutable = asImmutable; + MapPrototype['@@transducer/init'] = MapPrototype.asMutable = asMutable; + MapPrototype['@@transducer/step'] = function (result, arr) { + return result.set(arr[0], arr[1]); + }; + MapPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); + }; + + // #pragma Trie Nodes + + var ArrayMapNode = function ArrayMapNode(ownerID, entries) { + this.ownerID = ownerID; + this.entries = entries; + }; + + ArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + var entries = this.entries; + for (var ii = 0, len = entries.length; ii < len; ii++) { + if (is(key, entries[ii][0])) { + return entries[ii][1]; + } + } + return notSetValue; + }; + + ArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + var removed = value === NOT_SET; + + var entries = this.entries; + var idx = 0; + var len = entries.length; + for (; idx < len; idx++) { + if (is(key, entries[idx][0])) { + break; + } + } + var exists = idx < len; + + if (exists ? entries[idx][1] === value : removed) { + return this; + } + + SetRef(didAlter); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + (removed || !exists) && SetRef(didChangeSize); + + if (removed && entries.length === 1) { + return; // undefined + } + + if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) { + return createNodes(ownerID, entries, key, value); + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newEntries = isEditable ? entries : arrCopy(entries); + + if (exists) { + if (removed) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + idx === len - 1 + ? newEntries.pop() + : (newEntries[idx] = newEntries.pop()); + } else { + newEntries[idx] = [key, value]; + } + } else { + newEntries.push([key, value]); + } + + if (isEditable) { + this.entries = newEntries; + return this; + } + + return new ArrayMapNode(ownerID, newEntries); + }; + + var BitmapIndexedNode = function BitmapIndexedNode(ownerID, bitmap, nodes) { + this.ownerID = ownerID; + this.bitmap = bitmap; + this.nodes = nodes; + }; + + BitmapIndexedNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK); + var bitmap = this.bitmap; + return (bitmap & bit) === 0 + ? notSetValue + : this.nodes[popCount(bitmap & (bit - 1))].get( + shift + SHIFT, + keyHash, + key, + notSetValue + ); + }; + + BitmapIndexedNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + var bit = 1 << keyHashFrag; + var bitmap = this.bitmap; + var exists = (bitmap & bit) !== 0; + + if (!exists && value === NOT_SET) { + return this; + } + + var idx = popCount(bitmap & (bit - 1)); + var nodes = this.nodes; + var node = exists ? nodes[idx] : undefined; + var newNode = updateNode( + node, + ownerID, + shift + SHIFT, + keyHash, + key, + value, + didChangeSize, + didAlter + ); + + if (newNode === node) { + return this; + } + + if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) { + return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode); + } + + if ( + exists && + !newNode && + nodes.length === 2 && + isLeafNode(nodes[idx ^ 1]) + ) { + return nodes[idx ^ 1]; + } + + if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) { + return newNode; + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newBitmap = exists ? (newNode ? bitmap : bitmap ^ bit) : bitmap | bit; + var newNodes = exists + ? newNode + ? setAt(nodes, idx, newNode, isEditable) + : spliceOut(nodes, idx, isEditable) + : spliceIn(nodes, idx, newNode, isEditable); + + if (isEditable) { + this.bitmap = newBitmap; + this.nodes = newNodes; + return this; + } + + return new BitmapIndexedNode(ownerID, newBitmap, newNodes); + }; + + var HashArrayMapNode = function HashArrayMapNode(ownerID, count, nodes) { + this.ownerID = ownerID; + this.count = count; + this.nodes = nodes; + }; + + HashArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + var node = this.nodes[idx]; + return node + ? node.get(shift + SHIFT, keyHash, key, notSetValue) + : notSetValue; + }; + + HashArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + if (keyHash === undefined) { + keyHash = hash(key); + } + var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + var removed = value === NOT_SET; + var nodes = this.nodes; + var node = nodes[idx]; + + if (removed && !node) { + return this; + } + + var newNode = updateNode( + node, + ownerID, + shift + SHIFT, + keyHash, + key, + value, + didChangeSize, + didAlter + ); + if (newNode === node) { + return this; + } + + var newCount = this.count; + if (!node) { + newCount++; + } else if (!newNode) { + newCount--; + if (newCount < MIN_HASH_ARRAY_MAP_SIZE) { + return packNodes(ownerID, nodes, newCount, idx); + } + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newNodes = setAt(nodes, idx, newNode, isEditable); + + if (isEditable) { + this.count = newCount; + this.nodes = newNodes; + return this; + } + + return new HashArrayMapNode(ownerID, newCount, newNodes); + }; + + var HashCollisionNode = function HashCollisionNode(ownerID, keyHash, entries) { + this.ownerID = ownerID; + this.keyHash = keyHash; + this.entries = entries; + }; + + HashCollisionNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + var entries = this.entries; + for (var ii = 0, len = entries.length; ii < len; ii++) { + if (is(key, entries[ii][0])) { + return entries[ii][1]; + } + } + return notSetValue; + }; + + HashCollisionNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + if (keyHash === undefined) { + keyHash = hash(key); + } + + var removed = value === NOT_SET; + + if (keyHash !== this.keyHash) { + if (removed) { + return this; + } + SetRef(didAlter); + SetRef(didChangeSize); + return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]); + } + + var entries = this.entries; + var idx = 0; + var len = entries.length; + for (; idx < len; idx++) { + if (is(key, entries[idx][0])) { + break; + } + } + var exists = idx < len; + + if (exists ? entries[idx][1] === value : removed) { + return this; + } + + SetRef(didAlter); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + (removed || !exists) && SetRef(didChangeSize); + + if (removed && len === 2) { + return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]); + } + + var isEditable = ownerID && ownerID === this.ownerID; + var newEntries = isEditable ? entries : arrCopy(entries); + + if (exists) { + if (removed) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + idx === len - 1 + ? newEntries.pop() + : (newEntries[idx] = newEntries.pop()); + } else { + newEntries[idx] = [key, value]; + } + } else { + newEntries.push([key, value]); + } + + if (isEditable) { + this.entries = newEntries; + return this; + } + + return new HashCollisionNode(ownerID, this.keyHash, newEntries); + }; + + var ValueNode = function ValueNode(ownerID, keyHash, entry) { + this.ownerID = ownerID; + this.keyHash = keyHash; + this.entry = entry; + }; + + ValueNode.prototype.get = function get (shift, keyHash, key, notSetValue) { + return is(key, this.entry[0]) ? this.entry[1] : notSetValue; + }; + + ValueNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { + var removed = value === NOT_SET; + var keyMatch = is(key, this.entry[0]); + if (keyMatch ? value === this.entry[1] : removed) { + return this; + } + + SetRef(didAlter); + + if (removed) { + SetRef(didChangeSize); + return; // undefined + } + + if (keyMatch) { + if (ownerID && ownerID === this.ownerID) { + this.entry[1] = value; + return this; + } + return new ValueNode(ownerID, this.keyHash, [key, value]); + } + + SetRef(didChangeSize); + return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]); + }; + + // #pragma Iterators + + ArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = + function (fn, reverse) { + var entries = this.entries; + for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) { + if (fn(entries[reverse ? maxIndex - ii : ii]) === false) { + return false; + } + } + }; + + BitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = + function (fn, reverse) { + var nodes = this.nodes; + for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) { + var node = nodes[reverse ? maxIndex - ii : ii]; + if (node && node.iterate(fn, reverse) === false) { + return false; + } + } + }; + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + ValueNode.prototype.iterate = function (fn, reverse) { + return fn(this.entry); + }; + + var MapIterator = /*@__PURE__*/(function (Iterator) { + function MapIterator(map, type, reverse) { + this._type = type; + this._reverse = reverse; + this._stack = map._root && mapIteratorFrame(map._root); + } + + if ( Iterator ) MapIterator.__proto__ = Iterator; + MapIterator.prototype = Object.create( Iterator && Iterator.prototype ); + MapIterator.prototype.constructor = MapIterator; + + MapIterator.prototype.next = function next () { + var type = this._type; + var stack = this._stack; + while (stack) { + var node = stack.node; + var index = stack.index++; + var maxIndex = (void 0); + if (node.entry) { + if (index === 0) { + return mapIteratorValue(type, node.entry); + } + } else if (node.entries) { + maxIndex = node.entries.length - 1; + if (index <= maxIndex) { + return mapIteratorValue( + type, + node.entries[this._reverse ? maxIndex - index : index] + ); + } + } else { + maxIndex = node.nodes.length - 1; + if (index <= maxIndex) { + var subNode = node.nodes[this._reverse ? maxIndex - index : index]; + if (subNode) { + if (subNode.entry) { + return mapIteratorValue(type, subNode.entry); + } + stack = this._stack = mapIteratorFrame(subNode, stack); + } + continue; + } + } + stack = this._stack = this._stack.__prev; + } + return iteratorDone(); + }; + + return MapIterator; + }(Iterator)); + + function mapIteratorValue(type, entry) { + return iteratorValue(type, entry[0], entry[1]); + } + + function mapIteratorFrame(node, prev) { + return { + node: node, + index: 0, + __prev: prev, + }; + } + + function makeMap(size, root, ownerID, hash) { + var map = Object.create(MapPrototype); + map.size = size; + map._root = root; + map.__ownerID = ownerID; + map.__hash = hash; + map.__altered = false; + return map; + } + + var EMPTY_MAP; + function emptyMap() { + return EMPTY_MAP || (EMPTY_MAP = makeMap(0)); + } + + function updateMap(map, k, v) { + var newRoot; + var newSize; + if (!map._root) { + if (v === NOT_SET) { + return map; + } + newSize = 1; + newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]); + } else { + var didChangeSize = MakeRef(); + var didAlter = MakeRef(); + newRoot = updateNode( + map._root, + map.__ownerID, + 0, + undefined, + k, + v, + didChangeSize, + didAlter + ); + if (!didAlter.value) { + return map; + } + newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0); + } + if (map.__ownerID) { + map.size = newSize; + map._root = newRoot; + map.__hash = undefined; + map.__altered = true; + return map; + } + return newRoot ? makeMap(newSize, newRoot) : emptyMap(); + } + + function updateNode( + node, + ownerID, + shift, + keyHash, + key, + value, + didChangeSize, + didAlter + ) { + if (!node) { + if (value === NOT_SET) { + return node; + } + SetRef(didAlter); + SetRef(didChangeSize); + return new ValueNode(ownerID, keyHash, [key, value]); + } + return node.update( + ownerID, + shift, + keyHash, + key, + value, + didChangeSize, + didAlter + ); + } + + function isLeafNode(node) { + return ( + node.constructor === ValueNode || node.constructor === HashCollisionNode + ); + } + + function mergeIntoNode(node, ownerID, shift, keyHash, entry) { + if (node.keyHash === keyHash) { + return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]); + } + + var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK; + var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; + + var newNode; + var nodes = + idx1 === idx2 + ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] + : ((newNode = new ValueNode(ownerID, keyHash, entry)), + idx1 < idx2 ? [node, newNode] : [newNode, node]); + + return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes); + } + + function createNodes(ownerID, entries, key, value) { + if (!ownerID) { + ownerID = new OwnerID(); + } + var node = new ValueNode(ownerID, hash(key), [key, value]); + for (var ii = 0; ii < entries.length; ii++) { + var entry = entries[ii]; + node = node.update(ownerID, 0, undefined, entry[0], entry[1]); + } + return node; + } + + function packNodes(ownerID, nodes, count, excluding) { + var bitmap = 0; + var packedII = 0; + var packedNodes = new Array(count); + for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) { + var node = nodes[ii]; + if (node !== undefined && ii !== excluding) { + bitmap |= bit; + packedNodes[packedII++] = node; + } + } + return new BitmapIndexedNode(ownerID, bitmap, packedNodes); + } + + function expandNodes(ownerID, nodes, bitmap, including, node) { + var count = 0; + var expandedNodes = new Array(SIZE); + for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) { + expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined; + } + expandedNodes[including] = node; + return new HashArrayMapNode(ownerID, count + 1, expandedNodes); + } + + function popCount(x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return x & 0x7f; + } + + function setAt(array, idx, val, canEdit) { + var newArray = canEdit ? array : arrCopy(array); + newArray[idx] = val; + return newArray; + } + + function spliceIn(array, idx, val, canEdit) { + var newLen = array.length + 1; + if (canEdit && idx + 1 === newLen) { + array[idx] = val; + return array; + } + var newArray = new Array(newLen); + var after = 0; + for (var ii = 0; ii < newLen; ii++) { + if (ii === idx) { + newArray[ii] = val; + after = -1; + } else { + newArray[ii] = array[ii + after]; + } + } + return newArray; + } + + function spliceOut(array, idx, canEdit) { + var newLen = array.length - 1; + if (canEdit && idx === newLen) { + array.pop(); + return array; + } + var newArray = new Array(newLen); + var after = 0; + for (var ii = 0; ii < newLen; ii++) { + if (ii === idx) { + after = 1; + } + newArray[ii] = array[ii + after]; + } + return newArray; + } + + var MAX_ARRAY_MAP_SIZE = SIZE / 4; + var MAX_BITMAP_INDEXED_SIZE = SIZE / 2; + var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4; + + var IS_LIST_SYMBOL = '@@__IMMUTABLE_LIST__@@'; + /** + * True if `maybeList` is a List. + */ + function isList(maybeList) { + return Boolean(maybeList && + // @ts-expect-error: maybeList is typed as `{}`, need to change in 6.0 to `maybeList && typeof maybeList === 'object' && IS_LIST_SYMBOL in maybeList` + maybeList[IS_LIST_SYMBOL]); + } + + var List = /*@__PURE__*/(function (IndexedCollection) { + function List(value) { + var empty = emptyList(); + if (value === undefined || value === null) { + // eslint-disable-next-line no-constructor-return + return empty; + } + if (isList(value)) { + // eslint-disable-next-line no-constructor-return + return value; + } + var iter = IndexedCollection(value); + var size = iter.size; + if (size === 0) { + // eslint-disable-next-line no-constructor-return + return empty; + } + assertNotInfinite(size); + if (size > 0 && size < SIZE) { + // eslint-disable-next-line no-constructor-return + return makeList(0, size, SHIFT, null, new VNode(iter.toArray())); + } + // eslint-disable-next-line no-constructor-return + return empty.withMutations(function (list) { + list.setSize(size); + iter.forEach(function (v, i) { return list.set(i, v); }); + }); + } + + if ( IndexedCollection ) List.__proto__ = IndexedCollection; + List.prototype = Object.create( IndexedCollection && IndexedCollection.prototype ); + List.prototype.constructor = List; + + List.of = function of (/*...values*/) { + return this(arguments); + }; + + List.prototype.toString = function toString () { + return this.__toString('List [', ']'); + }; + + // @pragma Access + + List.prototype.get = function get (index, notSetValue) { + index = wrapIndex(this, index); + if (index >= 0 && index < this.size) { + index += this._origin; + var node = listNodeFor(this, index); + return node && node.array[index & MASK]; + } + return notSetValue; + }; + + // @pragma Modification + + List.prototype.set = function set (index, value) { + return updateList(this, index, value); + }; + + List.prototype.remove = function remove (index) { + return !this.has(index) + ? this + : index === 0 + ? this.shift() + : index === this.size - 1 + ? this.pop() + : this.splice(index, 1); + }; + + List.prototype.insert = function insert (index, value) { + return this.splice(index, 0, value); + }; + + List.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = this._origin = this._capacity = 0; + this._level = SHIFT; + this._root = this._tail = this.__hash = undefined; + this.__altered = true; + return this; + } + return emptyList(); + }; + + List.prototype.push = function push (/*...values*/) { + var values = arguments; + var oldSize = this.size; + return this.withMutations(function (list) { + setListBounds(list, 0, oldSize + values.length); + for (var ii = 0; ii < values.length; ii++) { + list.set(oldSize + ii, values[ii]); + } + }); + }; + + List.prototype.pop = function pop () { + return setListBounds(this, 0, -1); + }; + + List.prototype.unshift = function unshift (/*...values*/) { + var values = arguments; + return this.withMutations(function (list) { + setListBounds(list, -values.length); + for (var ii = 0; ii < values.length; ii++) { + list.set(ii, values[ii]); + } + }); + }; + + List.prototype.shift = function shift () { + return setListBounds(this, 1); + }; + + List.prototype.shuffle = function shuffle (random) { + if ( random === void 0 ) random = Math.random; + + return this.withMutations(function (mutable) { + // implementation of the Fisher-Yates shuffle: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle + var current = mutable.size; + var destination; + var tmp; + + while (current) { + destination = Math.floor(random() * current--); + + tmp = mutable.get(destination); + mutable.set(destination, mutable.get(current)); + mutable.set(current, tmp); + } + }); + }; + + // @pragma Composition + + List.prototype.concat = function concat (/*...collections*/) { + var arguments$1 = arguments; + + var seqs = []; + for (var i = 0; i < arguments.length; i++) { + var argument = arguments$1[i]; + var seq = IndexedCollection( + typeof argument !== 'string' && hasIterator(argument) + ? argument + : [argument] + ); + if (seq.size !== 0) { + seqs.push(seq); + } + } + if (seqs.length === 0) { + return this; + } + if (this.size === 0 && !this.__ownerID && seqs.length === 1) { + return this.constructor(seqs[0]); + } + return this.withMutations(function (list) { + seqs.forEach(function (seq) { return seq.forEach(function (value) { return list.push(value); }); }); + }); + }; + + List.prototype.setSize = function setSize (size) { + return setListBounds(this, 0, size); + }; + + List.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + return this.withMutations(function (list) { + for (var i = 0; i < this$1$1.size; i++) { + list.set(i, mapper.call(context, list.get(i), i, this$1$1)); + } + }); + }; + + // @pragma Iteration + + List.prototype.slice = function slice (begin, end) { + var size = this.size; + if (wholeSlice(begin, end, size)) { + return this; + } + return setListBounds( + this, + resolveBegin(begin, size), + resolveEnd(end, size) + ); + }; + + List.prototype.__iterator = function __iterator (type, reverse) { + var index = reverse ? this.size : 0; + var values = iterateList(this, reverse); + return new Iterator(function () { + var value = values(); + return value === DONE + ? iteratorDone() + : iteratorValue(type, reverse ? --index : index++, value); + }); + }; + + List.prototype.__iterate = function __iterate (fn, reverse) { + var index = reverse ? this.size : 0; + var values = iterateList(this, reverse); + var value; + while ((value = values()) !== DONE) { + if (fn(value, reverse ? --index : index++, this) === false) { + break; + } + } + return index; + }; + + List.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + if (!ownerID) { + if (this.size === 0) { + return emptyList(); + } + this.__ownerID = ownerID; + this.__altered = false; + return this; + } + return makeList( + this._origin, + this._capacity, + this._level, + this._root, + this._tail, + ownerID, + this.__hash + ); + }; + + return List; + }(IndexedCollection)); + + List.isList = isList; + + var ListPrototype = List.prototype; + ListPrototype[IS_LIST_SYMBOL] = true; + ListPrototype[DELETE] = ListPrototype.remove; + ListPrototype.merge = ListPrototype.concat; + ListPrototype.setIn = setIn; + ListPrototype.deleteIn = ListPrototype.removeIn = deleteIn; + ListPrototype.update = update; + ListPrototype.updateIn = updateIn; + ListPrototype.mergeIn = mergeIn; + ListPrototype.mergeDeepIn = mergeDeepIn; + ListPrototype.withMutations = withMutations; + ListPrototype.wasAltered = wasAltered; + ListPrototype.asImmutable = asImmutable; + ListPrototype['@@transducer/init'] = ListPrototype.asMutable = asMutable; + ListPrototype['@@transducer/step'] = function (result, arr) { + return result.push(arr); + }; + ListPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); + }; + + var VNode = function VNode(array, ownerID) { + this.array = array; + this.ownerID = ownerID; + }; + + // TODO: seems like these methods are very similar + + VNode.prototype.removeBefore = function removeBefore (ownerID, level, index) { + if ( + (index & ((1 << (level + SHIFT)) - 1)) === 0 || + this.array.length === 0 + ) { + return this; + } + var originIndex = (index >>> level) & MASK; + if (originIndex >= this.array.length) { + return new VNode([], ownerID); + } + var removingFirst = originIndex === 0; + var newChild; + if (level > 0) { + var oldChild = this.array[originIndex]; + newChild = + oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index); + if (newChild === oldChild && removingFirst) { + return this; + } + } + if (removingFirst && !newChild) { + return this; + } + var editable = editableVNode(this, ownerID); + if (!removingFirst) { + for (var ii = 0; ii < originIndex; ii++) { + editable.array[ii] = undefined; + } + } + if (newChild) { + editable.array[originIndex] = newChild; + } + return editable; + }; + + VNode.prototype.removeAfter = function removeAfter (ownerID, level, index) { + if ( + index === (level ? 1 << (level + SHIFT) : SIZE) || + this.array.length === 0 + ) { + return this; + } + var sizeIndex = ((index - 1) >>> level) & MASK; + if (sizeIndex >= this.array.length) { + return this; + } + + var newChild; + if (level > 0) { + var oldChild = this.array[sizeIndex]; + newChild = + oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index); + if (newChild === oldChild && sizeIndex === this.array.length - 1) { + return this; + } + } + + var editable = editableVNode(this, ownerID); + editable.array.splice(sizeIndex + 1); + if (newChild) { + editable.array[sizeIndex] = newChild; + } + return editable; + }; + + var DONE = {}; + + function iterateList(list, reverse) { + var left = list._origin; + var right = list._capacity; + var tailPos = getTailOffset(right); + var tail = list._tail; + + return iterateNodeOrLeaf(list._root, list._level, 0); + + function iterateNodeOrLeaf(node, level, offset) { + return level === 0 + ? iterateLeaf(node, offset) + : iterateNode(node, level, offset); + } + + function iterateLeaf(node, offset) { + var array = offset === tailPos ? tail && tail.array : node && node.array; + var from = offset > left ? 0 : left - offset; + var to = right - offset; + if (to > SIZE) { + to = SIZE; + } + return function () { + if (from === to) { + return DONE; + } + var idx = reverse ? --to : from++; + return array && array[idx]; + }; + } + + function iterateNode(node, level, offset) { + var values; + var array = node && node.array; + var from = offset > left ? 0 : (left - offset) >> level; + var to = ((right - offset) >> level) + 1; + if (to > SIZE) { + to = SIZE; + } + return function () { + while (true) { + if (values) { + var value = values(); + if (value !== DONE) { + return value; + } + values = null; + } + if (from === to) { + return DONE; + } + var idx = reverse ? --to : from++; + values = iterateNodeOrLeaf( + array && array[idx], + level - SHIFT, + offset + (idx << level) + ); + } + }; + } + } + + function makeList(origin, capacity, level, root, tail, ownerID, hash) { + var list = Object.create(ListPrototype); + list.size = capacity - origin; + list._origin = origin; + list._capacity = capacity; + list._level = level; + list._root = root; + list._tail = tail; + list.__ownerID = ownerID; + list.__hash = hash; + list.__altered = false; + return list; + } + + function emptyList() { + return makeList(0, 0, SHIFT); + } + + function updateList(list, index, value) { + index = wrapIndex(list, index); + + if (index !== index) { + return list; + } + + if (index >= list.size || index < 0) { + return list.withMutations(function (list) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + index < 0 + ? setListBounds(list, index).set(0, value) + : setListBounds(list, 0, index + 1).set(index, value); + }); + } + + index += list._origin; + + var newTail = list._tail; + var newRoot = list._root; + var didAlter = MakeRef(); + if (index >= getTailOffset(list._capacity)) { + newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter); + } else { + newRoot = updateVNode( + newRoot, + list.__ownerID, + list._level, + index, + value, + didAlter + ); + } + + if (!didAlter.value) { + return list; + } + + if (list.__ownerID) { + list._root = newRoot; + list._tail = newTail; + list.__hash = undefined; + list.__altered = true; + return list; + } + return makeList(list._origin, list._capacity, list._level, newRoot, newTail); + } + + function updateVNode(node, ownerID, level, index, value, didAlter) { + var idx = (index >>> level) & MASK; + var nodeHas = node && idx < node.array.length; + if (!nodeHas && value === undefined) { + return node; + } + + var newNode; + + if (level > 0) { + var lowerNode = node && node.array[idx]; + var newLowerNode = updateVNode( + lowerNode, + ownerID, + level - SHIFT, + index, + value, + didAlter + ); + if (newLowerNode === lowerNode) { + return node; + } + newNode = editableVNode(node, ownerID); + newNode.array[idx] = newLowerNode; + return newNode; + } + + if (nodeHas && node.array[idx] === value) { + return node; + } + + if (didAlter) { + SetRef(didAlter); + } + + newNode = editableVNode(node, ownerID); + if (value === undefined && idx === newNode.array.length - 1) { + newNode.array.pop(); + } else { + newNode.array[idx] = value; + } + return newNode; + } + + function editableVNode(node, ownerID) { + if (ownerID && node && ownerID === node.ownerID) { + return node; + } + return new VNode(node ? node.array.slice() : [], ownerID); + } + + function listNodeFor(list, rawIndex) { + if (rawIndex >= getTailOffset(list._capacity)) { + return list._tail; + } + if (rawIndex < 1 << (list._level + SHIFT)) { + var node = list._root; + var level = list._level; + while (node && level > 0) { + node = node.array[(rawIndex >>> level) & MASK]; + level -= SHIFT; + } + return node; + } + } + + function setListBounds(list, begin, end) { + // Sanitize begin & end using this shorthand for ToInt32(argument) + // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 + if (begin !== undefined) { + begin |= 0; + } + if (end !== undefined) { + end |= 0; + } + var owner = list.__ownerID || new OwnerID(); + var oldOrigin = list._origin; + var oldCapacity = list._capacity; + var newOrigin = oldOrigin + begin; + var newCapacity = + end === undefined + ? oldCapacity + : end < 0 + ? oldCapacity + end + : oldOrigin + end; + if (newOrigin === oldOrigin && newCapacity === oldCapacity) { + return list; + } + + // If it's going to end after it starts, it's empty. + if (newOrigin >= newCapacity) { + return list.clear(); + } + + var newLevel = list._level; + var newRoot = list._root; + + // New origin might need creating a higher root. + var offsetShift = 0; + while (newOrigin + offsetShift < 0) { + newRoot = new VNode( + newRoot && newRoot.array.length ? [undefined, newRoot] : [], + owner + ); + newLevel += SHIFT; + offsetShift += 1 << newLevel; + } + if (offsetShift) { + newOrigin += offsetShift; + oldOrigin += offsetShift; + newCapacity += offsetShift; + oldCapacity += offsetShift; + } + + var oldTailOffset = getTailOffset(oldCapacity); + var newTailOffset = getTailOffset(newCapacity); + + // New size might need creating a higher root. + while (newTailOffset >= 1 << (newLevel + SHIFT)) { + newRoot = new VNode( + newRoot && newRoot.array.length ? [newRoot] : [], + owner + ); + newLevel += SHIFT; + } + + // Locate or create the new tail. + var oldTail = list._tail; + var newTail = + newTailOffset < oldTailOffset + ? listNodeFor(list, newCapacity - 1) + : newTailOffset > oldTailOffset + ? new VNode([], owner) + : oldTail; + + // Merge Tail into tree. + if ( + oldTail && + newTailOffset > oldTailOffset && + newOrigin < oldCapacity && + oldTail.array.length + ) { + newRoot = editableVNode(newRoot, owner); + var node = newRoot; + for (var level = newLevel; level > SHIFT; level -= SHIFT) { + var idx = (oldTailOffset >>> level) & MASK; + node = node.array[idx] = editableVNode(node.array[idx], owner); + } + node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail; + } + + // If the size has been reduced, there's a chance the tail needs to be trimmed. + if (newCapacity < oldCapacity) { + newTail = newTail && newTail.removeAfter(owner, 0, newCapacity); + } + + // If the new origin is within the tail, then we do not need a root. + if (newOrigin >= newTailOffset) { + newOrigin -= newTailOffset; + newCapacity -= newTailOffset; + newLevel = SHIFT; + newRoot = null; + newTail = newTail && newTail.removeBefore(owner, 0, newOrigin); + + // Otherwise, if the root has been trimmed, garbage collect. + } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) { + offsetShift = 0; + + // Identify the new top root node of the subtree of the old root. + while (newRoot) { + var beginIndex = (newOrigin >>> newLevel) & MASK; + if ((beginIndex !== newTailOffset >>> newLevel) & MASK) { + break; + } + if (beginIndex) { + offsetShift += (1 << newLevel) * beginIndex; + } + newLevel -= SHIFT; + newRoot = newRoot.array[beginIndex]; + } + + // Trim the new sides of the new root. + if (newRoot && newOrigin > oldOrigin) { + newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift); + } + if (newRoot && newTailOffset < oldTailOffset) { + newRoot = newRoot.removeAfter( + owner, + newLevel, + newTailOffset - offsetShift + ); + } + if (offsetShift) { + newOrigin -= offsetShift; + newCapacity -= offsetShift; + } + } + + if (list.__ownerID) { + list.size = newCapacity - newOrigin; + list._origin = newOrigin; + list._capacity = newCapacity; + list._level = newLevel; + list._root = newRoot; + list._tail = newTail; + list.__hash = undefined; + list.__altered = true; + return list; + } + return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail); + } + + function getTailOffset(size) { + return size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT; + } + + var OrderedMap = /*@__PURE__*/(function (Map) { + function OrderedMap(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyOrderedMap() + : isOrderedMap(value) + ? value + : emptyOrderedMap().withMutations(function (map) { + var iter = KeyedCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v, k) { return map.set(k, v); }); + }); + } + + if ( Map ) OrderedMap.__proto__ = Map; + OrderedMap.prototype = Object.create( Map && Map.prototype ); + OrderedMap.prototype.constructor = OrderedMap; + + OrderedMap.of = function of (/*...values*/) { + return this(arguments); + }; + + OrderedMap.prototype.toString = function toString () { + return this.__toString('OrderedMap {', '}'); + }; + + // @pragma Access + + OrderedMap.prototype.get = function get (k, notSetValue) { + var index = this._map.get(k); + return index !== undefined ? this._list.get(index)[1] : notSetValue; + }; + + // @pragma Modification + + OrderedMap.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = 0; + this._map.clear(); + this._list.clear(); + this.__altered = true; + return this; + } + return emptyOrderedMap(); + }; + + OrderedMap.prototype.set = function set (k, v) { + return updateOrderedMap(this, k, v); + }; + + OrderedMap.prototype.remove = function remove (k) { + return updateOrderedMap(this, k, NOT_SET); + }; + + OrderedMap.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._list.__iterate( + function (entry) { return entry && fn(entry[1], entry[0], this$1$1); }, + reverse + ); + }; + + OrderedMap.prototype.__iterator = function __iterator (type, reverse) { + return this._list.fromEntrySeq().__iterator(type, reverse); + }; + + OrderedMap.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + var newMap = this._map.__ensureOwner(ownerID); + var newList = this._list.__ensureOwner(ownerID); + if (!ownerID) { + if (this.size === 0) { + return emptyOrderedMap(); + } + this.__ownerID = ownerID; + this.__altered = false; + this._map = newMap; + this._list = newList; + return this; + } + return makeOrderedMap(newMap, newList, ownerID, this.__hash); + }; + + return OrderedMap; + }(Map)); + + OrderedMap.isOrderedMap = isOrderedMap; + + OrderedMap.prototype[IS_ORDERED_SYMBOL] = true; + OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove; + + function makeOrderedMap(map, list, ownerID, hash) { + var omap = Object.create(OrderedMap.prototype); + omap.size = map ? map.size : 0; + omap._map = map; + omap._list = list; + omap.__ownerID = ownerID; + omap.__hash = hash; + omap.__altered = false; + return omap; + } + + var EMPTY_ORDERED_MAP; + function emptyOrderedMap() { + return ( + EMPTY_ORDERED_MAP || + (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList())) + ); + } + + function updateOrderedMap(omap, k, v) { + var map = omap._map; + var list = omap._list; + var i = map.get(k); + var has = i !== undefined; + var newMap; + var newList; + if (v === NOT_SET) { + // removed + if (!has) { + return omap; + } + if (list.size >= SIZE && list.size >= map.size * 2) { + newList = list.filter(function (entry, idx) { return entry !== undefined && i !== idx; }); + newMap = newList + .toKeyedSeq() + .map(function (entry) { return entry[0]; }) + .flip() + .toMap(); + if (omap.__ownerID) { + newMap.__ownerID = newList.__ownerID = omap.__ownerID; + } + } else { + newMap = map.remove(k); + newList = i === list.size - 1 ? list.pop() : list.set(i, undefined); + } + } else if (has) { + if (v === list.get(i)[1]) { + return omap; + } + newMap = map; + newList = list.set(i, [k, v]); + } else { + newMap = map.set(k, list.size); + newList = list.set(list.size, [k, v]); + } + if (omap.__ownerID) { + omap.size = newMap.size; + omap._map = newMap; + omap._list = newList; + omap.__hash = undefined; + omap.__altered = true; + return omap; + } + return makeOrderedMap(newMap, newList); + } + + var IS_STACK_SYMBOL = '@@__IMMUTABLE_STACK__@@'; + /** + * True if `maybeStack` is a Stack. + */ + function isStack(maybeStack) { + return Boolean(maybeStack && + // @ts-expect-error: maybeStack is typed as `{}`, need to change in 6.0 to `maybeStack && typeof maybeStack === 'object' && MAYBE_STACK_SYMBOL in maybeStack` + maybeStack[IS_STACK_SYMBOL]); + } + + var Stack = /*@__PURE__*/(function (IndexedCollection) { + function Stack(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyStack() + : isStack(value) + ? value + : emptyStack().pushAll(value); + } + + if ( IndexedCollection ) Stack.__proto__ = IndexedCollection; + Stack.prototype = Object.create( IndexedCollection && IndexedCollection.prototype ); + Stack.prototype.constructor = Stack; + + Stack.of = function of (/*...values*/) { + return this(arguments); + }; + + Stack.prototype.toString = function toString () { + return this.__toString('Stack [', ']'); + }; + + // @pragma Access + + Stack.prototype.get = function get (index, notSetValue) { + var head = this._head; + index = wrapIndex(this, index); + while (head && index--) { + head = head.next; + } + return head ? head.value : notSetValue; + }; + + Stack.prototype.peek = function peek () { + return this._head && this._head.value; + }; + + // @pragma Modification + + Stack.prototype.push = function push (/*...values*/) { + var arguments$1 = arguments; + + if (arguments.length === 0) { + return this; + } + var newSize = this.size + arguments.length; + var head = this._head; + for (var ii = arguments.length - 1; ii >= 0; ii--) { + head = { + value: arguments$1[ii], + next: head, + }; + } + if (this.__ownerID) { + this.size = newSize; + this._head = head; + this.__hash = undefined; + this.__altered = true; + return this; + } + return makeStack(newSize, head); + }; + + Stack.prototype.pushAll = function pushAll (iter) { + iter = IndexedCollection(iter); + if (iter.size === 0) { + return this; + } + if (this.size === 0 && isStack(iter)) { + return iter; + } + assertNotInfinite(iter.size); + var newSize = this.size; + var head = this._head; + iter.__iterate(function (value) { + newSize++; + head = { + value: value, + next: head, + }; + }, /* reverse */ true); + if (this.__ownerID) { + this.size = newSize; + this._head = head; + this.__hash = undefined; + this.__altered = true; + return this; + } + return makeStack(newSize, head); + }; + + Stack.prototype.pop = function pop () { + return this.slice(1); + }; + + Stack.prototype.clear = function clear () { + if (this.size === 0) { + return this; + } + if (this.__ownerID) { + this.size = 0; + this._head = undefined; + this.__hash = undefined; + this.__altered = true; + return this; + } + return emptyStack(); + }; + + Stack.prototype.slice = function slice (begin, end) { + if (wholeSlice(begin, end, this.size)) { + return this; + } + var resolvedBegin = resolveBegin(begin, this.size); + var resolvedEnd = resolveEnd(end, this.size); + if (resolvedEnd !== this.size) { + // super.slice(begin, end); + return IndexedCollection.prototype.slice.call(this, begin, end); + } + var newSize = this.size - resolvedBegin; + var head = this._head; + while (resolvedBegin--) { + head = head.next; + } + if (this.__ownerID) { + this.size = newSize; + this._head = head; + this.__hash = undefined; + this.__altered = true; + return this; + } + return makeStack(newSize, head); + }; + + // @pragma Mutability + + Stack.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + if (!ownerID) { + if (this.size === 0) { + return emptyStack(); + } + this.__ownerID = ownerID; + this.__altered = false; + return this; + } + return makeStack(this.size, this._head, ownerID, this.__hash); + }; + + // @pragma Iteration + + Stack.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + if (reverse) { + return new ArraySeq(this.toArray()).__iterate( + function (v, k) { return fn(v, k, this$1$1); }, + reverse + ); + } + var iterations = 0; + var node = this._head; + while (node) { + if (fn(node.value, iterations++, this) === false) { + break; + } + node = node.next; + } + return iterations; + }; + + Stack.prototype.__iterator = function __iterator (type, reverse) { + if (reverse) { + return new ArraySeq(this.toArray()).__iterator(type, reverse); + } + var iterations = 0; + var node = this._head; + return new Iterator(function () { + if (node) { + var value = node.value; + node = node.next; + return iteratorValue(type, iterations++, value); + } + return iteratorDone(); + }); + }; + + return Stack; + }(IndexedCollection)); + + Stack.isStack = isStack; + + var StackPrototype = Stack.prototype; + StackPrototype[IS_STACK_SYMBOL] = true; + StackPrototype.shift = StackPrototype.pop; + StackPrototype.unshift = StackPrototype.push; + StackPrototype.unshiftAll = StackPrototype.pushAll; + StackPrototype.withMutations = withMutations; + StackPrototype.wasAltered = wasAltered; + StackPrototype.asImmutable = asImmutable; + StackPrototype['@@transducer/init'] = StackPrototype.asMutable = asMutable; + StackPrototype['@@transducer/step'] = function (result, arr) { + return result.unshift(arr); + }; + StackPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); + }; + + function makeStack(size, head, ownerID, hash) { + var map = Object.create(StackPrototype); + map.size = size; + map._head = head; + map.__ownerID = ownerID; + map.__hash = hash; + map.__altered = false; + return map; + } + + var EMPTY_STACK; + function emptyStack() { + return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); + } + + var IS_SET_SYMBOL = '@@__IMMUTABLE_SET__@@'; + /** + * True if `maybeSet` is a Set. + * + * Also true for OrderedSets. + */ + function isSet(maybeSet) { + return Boolean(maybeSet && + // @ts-expect-error: maybeSet is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSet === 'object' && MAYBE_SET_SYMBOL in maybeSet` + maybeSet[IS_SET_SYMBOL]); + } + + /** + * True if `maybeOrderedSet` is an OrderedSet. + */ + function isOrderedSet(maybeOrderedSet) { + return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet); + } + + function deepEqual(a, b) { + if (a === b) { + return true; + } + if (!isCollection(b) || + // @ts-expect-error size should exists on Collection + (a.size !== undefined && b.size !== undefined && a.size !== b.size) || + // @ts-expect-error __hash exists on Collection + (a.__hash !== undefined && + // @ts-expect-error __hash exists on Collection + b.__hash !== undefined && + // @ts-expect-error __hash exists on Collection + a.__hash !== b.__hash) || + isKeyed(a) !== isKeyed(b) || + isIndexed(a) !== isIndexed(b) || + // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid + isOrdered(a) !== isOrdered(b)) { + return false; + } + // @ts-expect-error size should exists on Collection + if (a.size === 0 && b.size === 0) { + return true; + } + var notAssociative = !isAssociative(a); + // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid + if (isOrdered(a)) { + var entries = a.entries(); + // @ts-expect-error need to cast as boolean + return (b.every(function (v, k) { + var entry = entries.next().value; + return entry && is(entry[1], v) && (notAssociative || is(entry[0], k)); + }) && entries.next().done); + } + var flipped = false; + if (a.size === undefined) { + // @ts-expect-error size should exists on Collection + if (b.size === undefined) { + if (typeof a.cacheResult === 'function') { + a.cacheResult(); + } + } + else { + flipped = true; + var _ = a; + a = b; + b = _; + } + } + var allEqual = true; + var bSize = + // @ts-expect-error b is Range | Repeat | Collection as it may have been flipped, and __iterate is valid + b.__iterate(function (v, k) { + if (notAssociative + ? // @ts-expect-error has exists on Collection + !a.has(v) + : flipped + ? // @ts-expect-error type of `get` does not "catch" the version with `notSetValue` + !is(v, a.get(k, NOT_SET)) + : // @ts-expect-error type of `get` does not "catch" the version with `notSetValue` + !is(a.get(k, NOT_SET), v)) { + allEqual = false; + return false; + } + }); + return (allEqual && + // @ts-expect-error size should exists on Collection + a.size === bSize); + } + + /** + * Contributes additional methods to a constructor + */ + function mixin(ctor, + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type + methods) { + var keyCopier = function (key) { + // @ts-expect-error how to handle symbol ? + ctor.prototype[key] = methods[key]; + }; + Object.keys(methods).forEach(keyCopier); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + Object.getOwnPropertySymbols && + Object.getOwnPropertySymbols(methods).forEach(keyCopier); + return ctor; + } + + function toJS(value) { + if (!value || typeof value !== 'object') { + return value; + } + if (!isCollection(value)) { + if (!isDataStructure(value)) { + return value; + } + value = Seq(value); + } + if (isKeyed(value)) { + var result$1 = {}; + value.__iterate(function (v, k) { + result$1[k] = toJS(v); + }); + return result$1; + } + var result = []; + value.__iterate(function (v) { + result.push(toJS(v)); + }); + return result; + } + + var Set = /*@__PURE__*/(function (SetCollection) { + function Set(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptySet() + : isSet(value) && !isOrdered(value) + ? value + : emptySet().withMutations(function (set) { + var iter = SetCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v) { return set.add(v); }); + }); + } + + if ( SetCollection ) Set.__proto__ = SetCollection; + Set.prototype = Object.create( SetCollection && SetCollection.prototype ); + Set.prototype.constructor = Set; + + Set.of = function of (/*...values*/) { + return this(arguments); + }; + + Set.fromKeys = function fromKeys (value) { + return this(KeyedCollection(value).keySeq()); + }; + + Set.intersect = function intersect (sets) { + sets = Collection(sets).toArray(); + return sets.length + ? SetPrototype.intersect.apply(Set(sets.pop()), sets) + : emptySet(); + }; + + Set.union = function union (sets) { + sets = Collection(sets).toArray(); + return sets.length + ? SetPrototype.union.apply(Set(sets.pop()), sets) + : emptySet(); + }; + + Set.prototype.toString = function toString () { + return this.__toString('Set {', '}'); + }; + + // @pragma Access + + Set.prototype.has = function has (value) { + return this._map.has(value); + }; + + // @pragma Modification + + Set.prototype.add = function add (value) { + return updateSet(this, this._map.set(value, value)); + }; + + Set.prototype.remove = function remove (value) { + return updateSet(this, this._map.remove(value)); + }; + + Set.prototype.clear = function clear () { + return updateSet(this, this._map.clear()); + }; + + // @pragma Composition + + Set.prototype.map = function map (mapper, context) { + var this$1$1 = this; + + // keep track if the set is altered by the map function + var didChanges = false; + + var newMap = updateSet( + this, + this._map.mapEntries(function (ref) { + var v = ref[1]; + + var mapped = mapper.call(context, v, v, this$1$1); + + if (mapped !== v) { + didChanges = true; + } + + return [mapped, mapped]; + }, context) + ); + + return didChanges ? newMap : this; + }; + + Set.prototype.union = function union () { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + iters = iters.filter(function (x) { return x.size !== 0; }); + if (iters.length === 0) { + return this; + } + if (this.size === 0 && !this.__ownerID && iters.length === 1) { + return this.constructor(iters[0]); + } + return this.withMutations(function (set) { + for (var ii = 0; ii < iters.length; ii++) { + if (typeof iters[ii] === 'string') { + set.add(iters[ii]); + } else { + SetCollection(iters[ii]).forEach(function (value) { return set.add(value); }); + } + } + }); + }; + + Set.prototype.intersect = function intersect () { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + if (iters.length === 0) { + return this; + } + iters = iters.map(function (iter) { return SetCollection(iter); }); + var toRemove = []; + this.forEach(function (value) { + if (!iters.every(function (iter) { return iter.includes(value); })) { + toRemove.push(value); + } + }); + return this.withMutations(function (set) { + toRemove.forEach(function (value) { + set.remove(value); + }); + }); + }; + + Set.prototype.subtract = function subtract () { + var iters = [], len = arguments.length; + while ( len-- ) iters[ len ] = arguments[ len ]; + + if (iters.length === 0) { + return this; + } + iters = iters.map(function (iter) { return SetCollection(iter); }); + var toRemove = []; + this.forEach(function (value) { + if (iters.some(function (iter) { return iter.includes(value); })) { + toRemove.push(value); + } + }); + return this.withMutations(function (set) { + toRemove.forEach(function (value) { + set.remove(value); + }); + }); + }; + + Set.prototype.sort = function sort (comparator) { + // Late binding + return OrderedSet(sortFactory(this, comparator)); + }; + + Set.prototype.sortBy = function sortBy (mapper, comparator) { + // Late binding + return OrderedSet(sortFactory(this, comparator, mapper)); + }; + + Set.prototype.wasAltered = function wasAltered () { + return this._map.wasAltered(); + }; + + Set.prototype.__iterate = function __iterate (fn, reverse) { + var this$1$1 = this; + + return this._map.__iterate(function (k) { return fn(k, k, this$1$1); }, reverse); + }; + + Set.prototype.__iterator = function __iterator (type, reverse) { + return this._map.__iterator(type, reverse); + }; + + Set.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + var newMap = this._map.__ensureOwner(ownerID); + if (!ownerID) { + if (this.size === 0) { + return this.__empty(); + } + this.__ownerID = ownerID; + this._map = newMap; + return this; + } + return this.__make(newMap, ownerID); + }; + + return Set; + }(SetCollection)); + + Set.isSet = isSet; + + var SetPrototype = Set.prototype; + SetPrototype[IS_SET_SYMBOL] = true; + SetPrototype[DELETE] = SetPrototype.remove; + SetPrototype.merge = SetPrototype.concat = SetPrototype.union; + SetPrototype.withMutations = withMutations; + SetPrototype.asImmutable = asImmutable; + SetPrototype['@@transducer/init'] = SetPrototype.asMutable = asMutable; + SetPrototype['@@transducer/step'] = function (result, arr) { + return result.add(arr); + }; + SetPrototype['@@transducer/result'] = function (obj) { + return obj.asImmutable(); + }; + + SetPrototype.__empty = emptySet; + SetPrototype.__make = makeSet; + + function updateSet(set, newMap) { + if (set.__ownerID) { + set.size = newMap.size; + set._map = newMap; + return set; + } + return newMap === set._map + ? set + : newMap.size === 0 + ? set.__empty() + : set.__make(newMap); + } + + function makeSet(map, ownerID) { + var set = Object.create(SetPrototype); + set.size = map ? map.size : 0; + set._map = map; + set.__ownerID = ownerID; + return set; + } + + var EMPTY_SET; + function emptySet() { + return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap())); + } + + /** + * Returns a lazy seq of nums from start (inclusive) to end + * (exclusive), by step, where start defaults to 0, step to 1, and end to + * infinity. When start is equal to end, returns empty list. + */ + var Range = /*@__PURE__*/(function (IndexedSeq) { + function Range(start, end, step) { + if ( step === void 0 ) step = 1; + + if (!(this instanceof Range)) { + // eslint-disable-next-line no-constructor-return + return new Range(start, end, step); + } + invariant(step !== 0, 'Cannot step a Range by 0'); + invariant( + start !== undefined, + 'You must define a start value when using Range' + ); + invariant( + end !== undefined, + 'You must define an end value when using Range' + ); + + step = Math.abs(step); + if (end < start) { + step = -step; + } + this._start = start; + this._end = end; + this._step = step; + this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1); + if (this.size === 0) { + if (EMPTY_RANGE) { + // eslint-disable-next-line no-constructor-return + return EMPTY_RANGE; + } + // eslint-disable-next-line @typescript-eslint/no-this-alias + EMPTY_RANGE = this; + } + } + + if ( IndexedSeq ) Range.__proto__ = IndexedSeq; + Range.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + Range.prototype.constructor = Range; + + Range.prototype.toString = function toString () { + return this.size === 0 + ? 'Range []' + : ("Range [ " + (this._start) + "..." + (this._end) + (this._step !== 1 ? ' by ' + this._step : '') + " ]"); + }; + + Range.prototype.get = function get (index, notSetValue) { + return this.has(index) + ? this._start + wrapIndex(this, index) * this._step + : notSetValue; + }; + + Range.prototype.includes = function includes (searchValue) { + var possibleIndex = (searchValue - this._start) / this._step; + return ( + possibleIndex >= 0 && + possibleIndex < this.size && + possibleIndex === Math.floor(possibleIndex) + ); + }; + + Range.prototype.slice = function slice (begin, end) { + if (wholeSlice(begin, end, this.size)) { + return this; + } + begin = resolveBegin(begin, this.size); + end = resolveEnd(end, this.size); + if (end <= begin) { + return new Range(0, 0); + } + return new Range( + this.get(begin, this._end), + this.get(end, this._end), + this._step + ); + }; + + Range.prototype.indexOf = function indexOf (searchValue) { + var offsetValue = searchValue - this._start; + if (offsetValue % this._step === 0) { + var index = offsetValue / this._step; + if (index >= 0 && index < this.size) { + return index; + } + } + return -1; + }; + + Range.prototype.lastIndexOf = function lastIndexOf (searchValue) { + return this.indexOf(searchValue); + }; + + Range.prototype.__iterate = function __iterate (fn, reverse) { + var size = this.size; + var step = this._step; + var value = reverse ? this._start + (size - 1) * step : this._start; + var i = 0; + while (i !== size) { + if (fn(value, reverse ? size - ++i : i++, this) === false) { + break; + } + value += reverse ? -step : step; + } + return i; + }; + + Range.prototype.__iterator = function __iterator (type, reverse) { + var size = this.size; + var step = this._step; + var value = reverse ? this._start + (size - 1) * step : this._start; + var i = 0; + return new Iterator(function () { + if (i === size) { + return iteratorDone(); + } + var v = value; + value += reverse ? -step : step; + return iteratorValue(type, reverse ? size - ++i : i++, v); + }); + }; + + Range.prototype.equals = function equals (other) { + return other instanceof Range + ? this._start === other._start && + this._end === other._end && + this._step === other._step + : deepEqual(this, other); + }; + + return Range; + }(IndexedSeq)); + + var EMPTY_RANGE; + + /** + * Returns the value at the provided key path starting at the provided + * collection, or notSetValue if the key path is not defined. + * + * A functional alternative to `collection.getIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { getIn } from 'immutable'; + * + * getIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // 123 + * getIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p'], 'ifNotSet') // 'ifNotSet' + * ``` + */ + function getIn$1(collection, searchKeyPath, notSetValue) { + var keyPath = coerceKeyPath(searchKeyPath); + var i = 0; + while (i !== keyPath.length) { + // @ts-expect-error keyPath[i++] can not be undefined by design + collection = get(collection, keyPath[i++], NOT_SET); + if (collection === NOT_SET) { + return notSetValue; + } + } + return collection; + } + + function getIn(searchKeyPath, notSetValue) { + return getIn$1(this, searchKeyPath, notSetValue); + } + + /** + * Returns true if the key path is defined in the provided collection. + * + * A functional alternative to `collection.hasIn(keypath)` which will also + * work with plain Objects and Arrays. + * + * + * ```js + * import { hasIn } from 'immutable'; + * + * hasIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // true + * hasIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p']) // false + * ``` + */ + function hasIn$1(collection, keyPath) { + return getIn$1(collection, keyPath, NOT_SET) !== NOT_SET; + } + + function hasIn(searchKeyPath) { + return hasIn$1(this, searchKeyPath); + } + + function toObject() { + assertNotInfinite(this.size); + var object = {}; + this.__iterate(function (v, k) { + object[k] = v; + }); + return object; + } + + Collection.Iterator = Iterator; + + mixin(Collection, { + // ### Conversion to other types + + toArray: function toArray() { + assertNotInfinite(this.size); + var array = new Array(this.size || 0); + var useTuples = isKeyed(this); + var i = 0; + this.__iterate(function (v, k) { + // Keyed collections produce an array of tuples. + array[i++] = useTuples ? [k, v] : v; + }); + return array; + }, + + toIndexedSeq: function toIndexedSeq() { + return new ToIndexedSequence(this); + }, + + toJS: function toJS$1() { + return toJS(this); + }, + + toKeyedSeq: function toKeyedSeq() { + return new ToKeyedSequence(this, true); + }, + + toMap: function toMap() { + // Use Late Binding here to solve the circular dependency. + return Map(this.toKeyedSeq()); + }, + + toObject: toObject, + + toOrderedMap: function toOrderedMap() { + // Use Late Binding here to solve the circular dependency. + return OrderedMap(this.toKeyedSeq()); + }, + + toOrderedSet: function toOrderedSet() { + // Use Late Binding here to solve the circular dependency. + return OrderedSet(isKeyed(this) ? this.valueSeq() : this); + }, + + toSet: function toSet() { + // Use Late Binding here to solve the circular dependency. + return Set(isKeyed(this) ? this.valueSeq() : this); + }, + + toSetSeq: function toSetSeq() { + return new ToSetSequence(this); + }, + + toSeq: function toSeq() { + return isIndexed(this) + ? this.toIndexedSeq() + : isKeyed(this) + ? this.toKeyedSeq() + : this.toSetSeq(); + }, + + toStack: function toStack() { + // Use Late Binding here to solve the circular dependency. + return Stack(isKeyed(this) ? this.valueSeq() : this); + }, + + toList: function toList() { + // Use Late Binding here to solve the circular dependency. + return List(isKeyed(this) ? this.valueSeq() : this); + }, + + // ### Common JavaScript methods and properties + + toString: function toString() { + return '[Collection]'; + }, + + __toString: function __toString(head, tail) { + if (this.size === 0) { + return head + tail; + } + return ( + head + + ' ' + + this.toSeq().map(this.__toStringMapper).join(', ') + + ' ' + + tail + ); + }, + + // ### ES6 Collection methods (ES6 Array and Map) + + concat: function concat() { + var values = [], len = arguments.length; + while ( len-- ) values[ len ] = arguments[ len ]; + + return reify(this, concatFactory(this, values)); + }, + + includes: function includes(searchValue) { + return this.some(function (value) { return is(value, searchValue); }); + }, + + entries: function entries() { + return this.__iterator(ITERATE_ENTRIES); + }, + + every: function every(predicate, context) { + assertNotInfinite(this.size); + var returnValue = true; + this.__iterate(function (v, k, c) { + if (!predicate.call(context, v, k, c)) { + returnValue = false; + return false; + } + }); + return returnValue; + }, + + filter: function filter(predicate, context) { + return reify(this, filterFactory(this, predicate, context, true)); + }, + + partition: function partition(predicate, context) { + return partitionFactory(this, predicate, context); + }, + + find: function find(predicate, context, notSetValue) { + var entry = this.findEntry(predicate, context); + return entry ? entry[1] : notSetValue; + }, + + forEach: function forEach(sideEffect, context) { + assertNotInfinite(this.size); + return this.__iterate(context ? sideEffect.bind(context) : sideEffect); + }, + + join: function join(separator) { + assertNotInfinite(this.size); + separator = separator !== undefined ? '' + separator : ','; + var joined = ''; + var isFirst = true; + this.__iterate(function (v) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + isFirst ? (isFirst = false) : (joined += separator); + joined += v !== null && v !== undefined ? v.toString() : ''; + }); + return joined; + }, + + keys: function keys() { + return this.__iterator(ITERATE_KEYS); + }, + + map: function map(mapper, context) { + return reify(this, mapFactory(this, mapper, context)); + }, + + reduce: function reduce$1(reducer, initialReduction, context) { + return reduce( + this, + reducer, + initialReduction, + context, + arguments.length < 2, + false + ); + }, + + reduceRight: function reduceRight(reducer, initialReduction, context) { + return reduce( + this, + reducer, + initialReduction, + context, + arguments.length < 2, + true + ); + }, + + reverse: function reverse() { + return reify(this, reverseFactory(this, true)); + }, + + slice: function slice(begin, end) { + return reify(this, sliceFactory(this, begin, end, true)); + }, + + some: function some(predicate, context) { + assertNotInfinite(this.size); + var returnValue = false; + this.__iterate(function (v, k, c) { + if (predicate.call(context, v, k, c)) { + returnValue = true; + return false; + } + }); + return returnValue; + }, + + sort: function sort(comparator) { + return reify(this, sortFactory(this, comparator)); + }, + + values: function values() { + return this.__iterator(ITERATE_VALUES); + }, + + // ### More sequential methods + + butLast: function butLast() { + return this.slice(0, -1); + }, + + isEmpty: function isEmpty() { + return this.size !== undefined ? this.size === 0 : !this.some(function () { return true; }); + }, + + count: function count(predicate, context) { + return ensureSize( + predicate ? this.toSeq().filter(predicate, context) : this + ); + }, + + countBy: function countBy(grouper, context) { + return countByFactory(this, grouper, context); + }, + + equals: function equals(other) { + return deepEqual(this, other); + }, + + entrySeq: function entrySeq() { + // eslint-disable-next-line @typescript-eslint/no-this-alias + var collection = this; + if (collection._cache) { + // We cache as an entries array, so we can just return the cache! + return new ArraySeq(collection._cache); + } + var entriesSequence = collection.toSeq().map(entryMapper).toIndexedSeq(); + entriesSequence.fromEntrySeq = function () { return collection.toSeq(); }; + return entriesSequence; + }, + + filterNot: function filterNot(predicate, context) { + return this.filter(not(predicate), context); + }, + + findEntry: function findEntry(predicate, context, notSetValue) { + var found = notSetValue; + this.__iterate(function (v, k, c) { + if (predicate.call(context, v, k, c)) { + found = [k, v]; + return false; + } + }); + return found; + }, + + findKey: function findKey(predicate, context) { + var entry = this.findEntry(predicate, context); + return entry && entry[0]; + }, + + findLast: function findLast(predicate, context, notSetValue) { + return this.toKeyedSeq().reverse().find(predicate, context, notSetValue); + }, + + findLastEntry: function findLastEntry(predicate, context, notSetValue) { + return this.toKeyedSeq() + .reverse() + .findEntry(predicate, context, notSetValue); + }, + + findLastKey: function findLastKey(predicate, context) { + return this.toKeyedSeq().reverse().findKey(predicate, context); + }, + + first: function first(notSetValue) { + return this.find(returnTrue, null, notSetValue); + }, + + flatMap: function flatMap(mapper, context) { + return reify(this, flatMapFactory(this, mapper, context)); + }, + + flatten: function flatten(depth) { + return reify(this, flattenFactory(this, depth, true)); + }, + + fromEntrySeq: function fromEntrySeq() { + return new FromEntriesSequence(this); + }, + + get: function get(searchKey, notSetValue) { + return this.find(function (_, key) { return is(key, searchKey); }, undefined, notSetValue); + }, + + getIn: getIn, + + groupBy: function groupBy(grouper, context) { + return groupByFactory(this, grouper, context); + }, + + has: function has(searchKey) { + return this.get(searchKey, NOT_SET) !== NOT_SET; + }, + + hasIn: hasIn, + + isSubset: function isSubset(iter) { + iter = typeof iter.includes === 'function' ? iter : Collection(iter); + return this.every(function (value) { return iter.includes(value); }); + }, + + isSuperset: function isSuperset(iter) { + iter = typeof iter.isSubset === 'function' ? iter : Collection(iter); + return iter.isSubset(this); + }, + + keyOf: function keyOf(searchValue) { + return this.findKey(function (value) { return is(value, searchValue); }); + }, + + keySeq: function keySeq() { + return this.toSeq().map(keyMapper).toIndexedSeq(); + }, + + last: function last(notSetValue) { + return this.toSeq().reverse().first(notSetValue); + }, + + lastKeyOf: function lastKeyOf(searchValue) { + return this.toKeyedSeq().reverse().keyOf(searchValue); + }, + + max: function max(comparator) { + return maxFactory(this, comparator); + }, + + maxBy: function maxBy(mapper, comparator) { + return maxFactory(this, comparator, mapper); + }, + + min: function min(comparator) { + return maxFactory( + this, + comparator ? neg(comparator) : defaultNegComparator + ); + }, + + minBy: function minBy(mapper, comparator) { + return maxFactory( + this, + comparator ? neg(comparator) : defaultNegComparator, + mapper + ); + }, + + rest: function rest() { + return this.slice(1); + }, + + skip: function skip(amount) { + return amount === 0 ? this : this.slice(Math.max(0, amount)); + }, + + skipLast: function skipLast(amount) { + return amount === 0 ? this : this.slice(0, -Math.max(0, amount)); + }, + + skipWhile: function skipWhile(predicate, context) { + return reify(this, skipWhileFactory(this, predicate, context, true)); + }, + + skipUntil: function skipUntil(predicate, context) { + return this.skipWhile(not(predicate), context); + }, + + sortBy: function sortBy(mapper, comparator) { + return reify(this, sortFactory(this, comparator, mapper)); + }, + + take: function take(amount) { + return this.slice(0, Math.max(0, amount)); + }, + + takeLast: function takeLast(amount) { + return this.slice(-Math.max(0, amount)); + }, + + takeWhile: function takeWhile(predicate, context) { + return reify(this, takeWhileFactory(this, predicate, context)); + }, + + takeUntil: function takeUntil(predicate, context) { + return this.takeWhile(not(predicate), context); + }, + + update: function update(fn) { + return fn(this); + }, + + valueSeq: function valueSeq() { + return this.toIndexedSeq(); + }, + + // ### Hashable Object + + hashCode: function hashCode() { + return this.__hash || (this.__hash = hashCollection(this)); + }, + + // ### Internal + + // abstract __iterate(fn, reverse) + + // abstract __iterator(type, reverse) + }); + + var CollectionPrototype = Collection.prototype; + CollectionPrototype[IS_COLLECTION_SYMBOL] = true; + CollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.values; + CollectionPrototype.toJSON = CollectionPrototype.toArray; + CollectionPrototype.__toStringMapper = quoteString; + CollectionPrototype.inspect = CollectionPrototype.toSource = function () { + return this.toString(); + }; + CollectionPrototype.chain = CollectionPrototype.flatMap; + CollectionPrototype.contains = CollectionPrototype.includes; + + mixin(KeyedCollection, { + // ### More sequential methods + + flip: function flip() { + return reify(this, flipFactory(this)); + }, + + mapEntries: function mapEntries(mapper, context) { + var this$1$1 = this; + + var iterations = 0; + return reify( + this, + this.toSeq() + .map(function (v, k) { return mapper.call(context, [k, v], iterations++, this$1$1); }) + .fromEntrySeq() + ); + }, + + mapKeys: function mapKeys(mapper, context) { + var this$1$1 = this; + + return reify( + this, + this.toSeq() + .flip() + .map(function (k, v) { return mapper.call(context, k, v, this$1$1); }) + .flip() + ); + }, + }); + + var KeyedCollectionPrototype = KeyedCollection.prototype; + KeyedCollectionPrototype[IS_KEYED_SYMBOL] = true; + KeyedCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.entries; + KeyedCollectionPrototype.toJSON = toObject; + KeyedCollectionPrototype.__toStringMapper = function (v, k) { return quoteString(k) + ': ' + quoteString(v); }; + + mixin(IndexedCollection, { + // ### Conversion to other types + + toKeyedSeq: function toKeyedSeq() { + return new ToKeyedSequence(this, false); + }, + + // ### ES6 Collection methods (ES6 Array and Map) + + filter: function filter(predicate, context) { + return reify(this, filterFactory(this, predicate, context, false)); + }, + + findIndex: function findIndex(predicate, context) { + var entry = this.findEntry(predicate, context); + return entry ? entry[0] : -1; + }, + + indexOf: function indexOf(searchValue) { + var key = this.keyOf(searchValue); + return key === undefined ? -1 : key; + }, + + lastIndexOf: function lastIndexOf(searchValue) { + var key = this.lastKeyOf(searchValue); + return key === undefined ? -1 : key; + }, + + reverse: function reverse() { + return reify(this, reverseFactory(this, false)); + }, + + slice: function slice(begin, end) { + return reify(this, sliceFactory(this, begin, end, false)); + }, + + splice: function splice(index, removeNum /*, ...values*/) { + var numArgs = arguments.length; + removeNum = Math.max(removeNum || 0, 0); + if (numArgs === 0 || (numArgs === 2 && !removeNum)) { + return this; + } + // If index is negative, it should resolve relative to the size of the + // collection. However size may be expensive to compute if not cached, so + // only call count() if the number is in fact negative. + index = resolveBegin(index, index < 0 ? this.count() : this.size); + var spliced = this.slice(0, index); + return reify( + this, + numArgs === 1 + ? spliced + : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum)) + ); + }, + + // ### More collection methods + + findLastIndex: function findLastIndex(predicate, context) { + var entry = this.findLastEntry(predicate, context); + return entry ? entry[0] : -1; + }, + + first: function first(notSetValue) { + return this.get(0, notSetValue); + }, + + flatten: function flatten(depth) { + return reify(this, flattenFactory(this, depth, false)); + }, + + get: function get(index, notSetValue) { + index = wrapIndex(this, index); + return index < 0 || + this.size === Infinity || + (this.size !== undefined && index > this.size) + ? notSetValue + : this.find(function (_, key) { return key === index; }, undefined, notSetValue); + }, + + has: function has(index) { + index = wrapIndex(this, index); + return ( + index >= 0 && + (this.size !== undefined + ? this.size === Infinity || index < this.size + : this.indexOf(index) !== -1) + ); + }, + + interpose: function interpose(separator) { + return reify(this, interposeFactory(this, separator)); + }, + + interleave: function interleave(/*...collections*/) { + var collections = [this].concat(arrCopy(arguments)); + var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, collections); + var interleaved = zipped.flatten(true); + if (zipped.size) { + interleaved.size = zipped.size * collections.length; + } + return reify(this, interleaved); + }, + + keySeq: function keySeq() { + return Range(0, this.size); + }, + + last: function last(notSetValue) { + return this.get(-1, notSetValue); + }, + + skipWhile: function skipWhile(predicate, context) { + return reify(this, skipWhileFactory(this, predicate, context, false)); + }, + + zip: function zip(/*, ...collections */) { + var collections = [this].concat(arrCopy(arguments)); + return reify(this, zipWithFactory(this, defaultZipper, collections)); + }, + + zipAll: function zipAll(/*, ...collections */) { + var collections = [this].concat(arrCopy(arguments)); + return reify(this, zipWithFactory(this, defaultZipper, collections, true)); + }, + + zipWith: function zipWith(zipper /*, ...collections */) { + var collections = arrCopy(arguments); + collections[0] = this; + return reify(this, zipWithFactory(this, zipper, collections)); + }, + }); + + var IndexedCollectionPrototype = IndexedCollection.prototype; + IndexedCollectionPrototype[IS_INDEXED_SYMBOL] = true; + IndexedCollectionPrototype[IS_ORDERED_SYMBOL] = true; + + mixin(SetCollection, { + // ### ES6 Collection methods (ES6 Array and Map) + + get: function get(value, notSetValue) { + return this.has(value) ? value : notSetValue; + }, + + includes: function includes(value) { + return this.has(value); + }, + + // ### More sequential methods + + keySeq: function keySeq() { + return this.valueSeq(); + }, + }); + + var SetCollectionPrototype = SetCollection.prototype; + SetCollectionPrototype.has = CollectionPrototype.includes; + SetCollectionPrototype.contains = SetCollectionPrototype.includes; + SetCollectionPrototype.keys = SetCollectionPrototype.values; + + // Mixin subclasses + + mixin(KeyedSeq, KeyedCollectionPrototype); + mixin(IndexedSeq, IndexedCollectionPrototype); + mixin(SetSeq, SetCollectionPrototype); + + // #pragma Helper functions + + function reduce(collection, reducer, reduction, context, useFirst, reverse) { + assertNotInfinite(collection.size); + collection.__iterate(function (v, k, c) { + if (useFirst) { + useFirst = false; + reduction = v; + } else { + reduction = reducer.call(context, reduction, v, k, c); + } + }, reverse); + return reduction; + } + + function keyMapper(v, k) { + return k; + } + + function entryMapper(v, k) { + return [k, v]; + } + + function not(predicate) { + return function () { + return !predicate.apply(this, arguments); + }; + } + + function neg(predicate) { + return function () { + return -predicate.apply(this, arguments); + }; + } + + function defaultZipper() { + return arrCopy(arguments); + } + + function defaultNegComparator(a, b) { + return a < b ? 1 : a > b ? -1 : 0; + } + + function hashCollection(collection) { + if (collection.size === Infinity) { + return 0; + } + var ordered = isOrdered(collection); + var keyed = isKeyed(collection); + var h = ordered ? 1 : 0; + + collection.__iterate( + keyed + ? ordered + ? function (v, k) { + h = (31 * h + hashMerge(hash(v), hash(k))) | 0; + } + : function (v, k) { + h = (h + hashMerge(hash(v), hash(k))) | 0; + } + : ordered + ? function (v) { + h = (31 * h + hash(v)) | 0; + } + : function (v) { + h = (h + hash(v)) | 0; + } + ); + + return murmurHashOfSize(collection.size, h); + } + + function murmurHashOfSize(size, h) { + h = imul(h, 0xcc9e2d51); + h = imul((h << 15) | (h >>> -15), 0x1b873593); + h = imul((h << 13) | (h >>> -13), 5); + h = ((h + 0xe6546b64) | 0) ^ size; + h = imul(h ^ (h >>> 16), 0x85ebca6b); + h = imul(h ^ (h >>> 13), 0xc2b2ae35); + h = smi(h ^ (h >>> 16)); + return h; + } + + function hashMerge(a, b) { + return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; // int + } + + var OrderedSet = /*@__PURE__*/(function (Set) { + function OrderedSet(value) { + // eslint-disable-next-line no-constructor-return + return value === undefined || value === null + ? emptyOrderedSet() + : isOrderedSet(value) + ? value + : emptyOrderedSet().withMutations(function (set) { + var iter = SetCollection(value); + assertNotInfinite(iter.size); + iter.forEach(function (v) { return set.add(v); }); + }); + } + + if ( Set ) OrderedSet.__proto__ = Set; + OrderedSet.prototype = Object.create( Set && Set.prototype ); + OrderedSet.prototype.constructor = OrderedSet; + + OrderedSet.of = function of (/*...values*/) { + return this(arguments); + }; + + OrderedSet.fromKeys = function fromKeys (value) { + return this(KeyedCollection(value).keySeq()); + }; + + OrderedSet.prototype.toString = function toString () { + return this.__toString('OrderedSet {', '}'); + }; + + return OrderedSet; + }(Set)); + + OrderedSet.isOrderedSet = isOrderedSet; + + var OrderedSetPrototype = OrderedSet.prototype; + OrderedSetPrototype[IS_ORDERED_SYMBOL] = true; + OrderedSetPrototype.zip = IndexedCollectionPrototype.zip; + OrderedSetPrototype.zipWith = IndexedCollectionPrototype.zipWith; + OrderedSetPrototype.zipAll = IndexedCollectionPrototype.zipAll; + + OrderedSetPrototype.__empty = emptyOrderedSet; + OrderedSetPrototype.__make = makeOrderedSet; + + function makeOrderedSet(map, ownerID) { + var set = Object.create(OrderedSetPrototype); + set.size = map ? map.size : 0; + set._map = map; + set.__ownerID = ownerID; + return set; + } + + var EMPTY_ORDERED_SET; + function emptyOrderedSet() { + return ( + EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap())) + ); + } + + var PairSorting = { + LeftThenRight: -1, + RightThenLeft: 1, + }; + + function throwOnInvalidDefaultValues(defaultValues) { + if (isRecord(defaultValues)) { + throw new Error( + 'Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.' + ); + } + + if (isImmutable(defaultValues)) { + throw new Error( + 'Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.' + ); + } + + if (defaultValues === null || typeof defaultValues !== 'object') { + throw new Error( + 'Can not call `Record` with a non-object as default values. Use a plain javascript object instead.' + ); + } + } + + var Record = function Record(defaultValues, name) { + var hasInitialized; + + throwOnInvalidDefaultValues(defaultValues); + + var RecordType = function Record(values) { + var this$1$1 = this; + + if (values instanceof RecordType) { + return values; + } + if (!(this instanceof RecordType)) { + return new RecordType(values); + } + if (!hasInitialized) { + hasInitialized = true; + var keys = Object.keys(defaultValues); + var indices = (RecordTypePrototype._indices = {}); + // Deprecated: left to attempt not to break any external code which + // relies on a ._name property existing on record instances. + // Use Record.getDescriptiveName() instead + RecordTypePrototype._name = name; + RecordTypePrototype._keys = keys; + RecordTypePrototype._defaultValues = defaultValues; + for (var i = 0; i < keys.length; i++) { + var propName = keys[i]; + indices[propName] = i; + if (RecordTypePrototype[propName]) { + /* eslint-disable no-console */ + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + typeof console === 'object' && + console.warn && + console.warn( + 'Cannot define ' + + recordName(this) + + ' with property "' + + propName + + '" since that property name is part of the Record API.' + ); + /* eslint-enable no-console */ + } else { + setProp(RecordTypePrototype, propName); + } + } + } + this.__ownerID = undefined; + this._values = List().withMutations(function (l) { + l.setSize(this$1$1._keys.length); + KeyedCollection(values).forEach(function (v, k) { + l.set(this$1$1._indices[k], v === this$1$1._defaultValues[k] ? undefined : v); + }); + }); + return this; + }; + + var RecordTypePrototype = (RecordType.prototype = + Object.create(RecordPrototype)); + RecordTypePrototype.constructor = RecordType; + + if (name) { + RecordType.displayName = name; + } + + // eslint-disable-next-line no-constructor-return + return RecordType; + }; + + Record.prototype.toString = function toString () { + var str = recordName(this) + ' { '; + var keys = this._keys; + var k; + for (var i = 0, l = keys.length; i !== l; i++) { + k = keys[i]; + str += (i ? ', ' : '') + k + ': ' + quoteString(this.get(k)); + } + return str + ' }'; + }; + + Record.prototype.equals = function equals (other) { + return ( + this === other || + (isRecord(other) && recordSeq(this).equals(recordSeq(other))) + ); + }; + + Record.prototype.hashCode = function hashCode () { + return recordSeq(this).hashCode(); + }; + + // @pragma Access + + Record.prototype.has = function has (k) { + return this._indices.hasOwnProperty(k); + }; + + Record.prototype.get = function get (k, notSetValue) { + if (!this.has(k)) { + return notSetValue; + } + var index = this._indices[k]; + var value = this._values.get(index); + return value === undefined ? this._defaultValues[k] : value; + }; + + // @pragma Modification + + Record.prototype.set = function set (k, v) { + if (this.has(k)) { + var newValues = this._values.set( + this._indices[k], + v === this._defaultValues[k] ? undefined : v + ); + if (newValues !== this._values && !this.__ownerID) { + return makeRecord(this, newValues); + } + } + return this; + }; + + Record.prototype.remove = function remove (k) { + return this.set(k); + }; + + Record.prototype.clear = function clear () { + var newValues = this._values.clear().setSize(this._keys.length); + + return this.__ownerID ? this : makeRecord(this, newValues); + }; + + Record.prototype.wasAltered = function wasAltered () { + return this._values.wasAltered(); + }; + + Record.prototype.toSeq = function toSeq () { + return recordSeq(this); + }; + + Record.prototype.toJS = function toJS$1 () { + return toJS(this); + }; + + Record.prototype.entries = function entries () { + return this.__iterator(ITERATE_ENTRIES); + }; + + Record.prototype.__iterator = function __iterator (type, reverse) { + return recordSeq(this).__iterator(type, reverse); + }; + + Record.prototype.__iterate = function __iterate (fn, reverse) { + return recordSeq(this).__iterate(fn, reverse); + }; + + Record.prototype.__ensureOwner = function __ensureOwner (ownerID) { + if (ownerID === this.__ownerID) { + return this; + } + var newValues = this._values.__ensureOwner(ownerID); + if (!ownerID) { + this.__ownerID = ownerID; + this._values = newValues; + return this; + } + return makeRecord(this, newValues, ownerID); + }; + + Record.isRecord = isRecord; + Record.getDescriptiveName = recordName; + var RecordPrototype = Record.prototype; + RecordPrototype[IS_RECORD_SYMBOL] = true; + RecordPrototype[DELETE] = RecordPrototype.remove; + RecordPrototype.deleteIn = RecordPrototype.removeIn = deleteIn; + RecordPrototype.getIn = getIn; + RecordPrototype.hasIn = CollectionPrototype.hasIn; + RecordPrototype.merge = merge$1; + RecordPrototype.mergeWith = mergeWith$1; + RecordPrototype.mergeIn = mergeIn; + RecordPrototype.mergeDeep = mergeDeep; + RecordPrototype.mergeDeepWith = mergeDeepWith; + RecordPrototype.mergeDeepIn = mergeDeepIn; + RecordPrototype.setIn = setIn; + RecordPrototype.update = update; + RecordPrototype.updateIn = updateIn; + RecordPrototype.withMutations = withMutations; + RecordPrototype.asMutable = asMutable; + RecordPrototype.asImmutable = asImmutable; + RecordPrototype[ITERATOR_SYMBOL] = RecordPrototype.entries; + RecordPrototype.toJSON = RecordPrototype.toObject = + CollectionPrototype.toObject; + RecordPrototype.inspect = RecordPrototype.toSource = function () { + return this.toString(); + }; + + function makeRecord(likeRecord, values, ownerID) { + var record = Object.create(Object.getPrototypeOf(likeRecord)); + record._values = values; + record.__ownerID = ownerID; + return record; + } + + function recordName(record) { + return record.constructor.displayName || record.constructor.name || 'Record'; + } + + function recordSeq(record) { + return keyedSeqFromValue(record._keys.map(function (k) { return [k, record.get(k)]; })); + } + + function setProp(prototype, name) { + try { + Object.defineProperty(prototype, name, { + get: function () { + return this.get(name); + }, + set: function (value) { + invariant(this.__ownerID, 'Cannot set on an immutable record.'); + this.set(name, value); + }, + }); + // eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO enable eslint here + } catch (error) { + // Object.defineProperty failed. Probably IE8. + } + } + + /** + * Returns a lazy Seq of `value` repeated `times` times. When `times` is + * undefined, returns an infinite sequence of `value`. + */ + var Repeat = /*@__PURE__*/(function (IndexedSeq) { + function Repeat(value, times) { + if (!(this instanceof Repeat)) { + // eslint-disable-next-line no-constructor-return + return new Repeat(value, times); + } + this._value = value; + this.size = times === undefined ? Infinity : Math.max(0, times); + if (this.size === 0) { + if (EMPTY_REPEAT) { + // eslint-disable-next-line no-constructor-return + return EMPTY_REPEAT; + } + // eslint-disable-next-line @typescript-eslint/no-this-alias + EMPTY_REPEAT = this; + } + } + + if ( IndexedSeq ) Repeat.__proto__ = IndexedSeq; + Repeat.prototype = Object.create( IndexedSeq && IndexedSeq.prototype ); + Repeat.prototype.constructor = Repeat; + + Repeat.prototype.toString = function toString () { + if (this.size === 0) { + return 'Repeat []'; + } + return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]'; + }; + + Repeat.prototype.get = function get (index, notSetValue) { + return this.has(index) ? this._value : notSetValue; + }; + + Repeat.prototype.includes = function includes (searchValue) { + return is(this._value, searchValue); + }; + + Repeat.prototype.slice = function slice (begin, end) { + var size = this.size; + return wholeSlice(begin, end, size) + ? this + : new Repeat( + this._value, + resolveEnd(end, size) - resolveBegin(begin, size) + ); + }; + + Repeat.prototype.reverse = function reverse () { + return this; + }; + + Repeat.prototype.indexOf = function indexOf (searchValue) { + if (is(this._value, searchValue)) { + return 0; + } + return -1; + }; + + Repeat.prototype.lastIndexOf = function lastIndexOf (searchValue) { + if (is(this._value, searchValue)) { + return this.size; + } + return -1; + }; + + Repeat.prototype.__iterate = function __iterate (fn, reverse) { + var size = this.size; + var i = 0; + while (i !== size) { + if (fn(this._value, reverse ? size - ++i : i++, this) === false) { + break; + } + } + return i; + }; + + Repeat.prototype.__iterator = function __iterator (type, reverse) { + var this$1$1 = this; + + var size = this.size; + var i = 0; + return new Iterator(function () { return i === size + ? iteratorDone() + : iteratorValue(type, reverse ? size - ++i : i++, this$1$1._value); } + ); + }; + + Repeat.prototype.equals = function equals (other) { + return other instanceof Repeat + ? is(this._value, other._value) + : deepEqual(this, other); + }; + + return Repeat; + }(IndexedSeq)); + + var EMPTY_REPEAT; + + function fromJS(value, converter) { + return fromJSWith( + [], + converter || defaultConverter, + value, + '', + converter && converter.length > 2 ? [] : undefined, + { '': value } + ); + } + + function fromJSWith(stack, converter, value, key, keyPath, parentValue) { + if ( + typeof value !== 'string' && + !isImmutable(value) && + (isArrayLike(value) || hasIterator(value) || isPlainObject(value)) + ) { + if (~stack.indexOf(value)) { + throw new TypeError('Cannot convert circular structure to Immutable'); + } + stack.push(value); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + keyPath && key !== '' && keyPath.push(key); + var converted = converter.call( + parentValue, + key, + Seq(value).map(function (v, k) { return fromJSWith(stack, converter, v, k, keyPath, value); } + ), + keyPath && keyPath.slice() + ); + stack.pop(); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here + keyPath && keyPath.pop(); + return converted; + } + return value; + } + + function defaultConverter(k, v) { + // Effectively the opposite of "Collection.toSeq()" + return isIndexed(v) ? v.toList() : isKeyed(v) ? v.toMap() : v.toSet(); + } + + var version = "5.1.2"; + + // Note: Iterable is deprecated + var Iterable = Collection; + + exports.Collection = Collection; + exports.Iterable = Iterable; + exports.List = List; + exports.Map = Map; + exports.OrderedMap = OrderedMap; + exports.OrderedSet = OrderedSet; + exports.PairSorting = PairSorting; + exports.Range = Range; + exports.Record = Record; + exports.Repeat = Repeat; + exports.Seq = Seq; + exports.Set = Set; + exports.Stack = Stack; + exports.fromJS = fromJS; + exports.get = get; + exports.getIn = getIn$1; + exports.has = has; + exports.hasIn = hasIn$1; + exports.hash = hash; + exports.is = is; + exports.isAssociative = isAssociative; + exports.isCollection = isCollection; + exports.isImmutable = isImmutable; + exports.isIndexed = isIndexed; + exports.isKeyed = isKeyed; + exports.isList = isList; + exports.isMap = isMap; + exports.isOrdered = isOrdered; + exports.isOrderedMap = isOrderedMap; + exports.isOrderedSet = isOrderedSet; + exports.isPlainObject = isPlainObject; + exports.isRecord = isRecord; + exports.isSeq = isSeq; + exports.isSet = isSet; + exports.isStack = isStack; + exports.isValueObject = isValueObject; + exports.merge = merge; + exports.mergeDeep = mergeDeep$1; + exports.mergeDeepWith = mergeDeepWith$1; + exports.mergeWith = mergeWith; + exports.remove = remove; + exports.removeIn = removeIn; + exports.set = set; + exports.setIn = setIn$1; + exports.update = update$1; + exports.updateIn = updateIn$1; + exports.version = version; + +})); diff --git a/type-definitions/immutable.js.flow b/dist/immutable.js.flow similarity index 100% rename from type-definitions/immutable.js.flow rename to dist/immutable.js.flow diff --git a/dist/immutable.min.js b/dist/immutable.min.js new file mode 100644 index 0000000000..d0db132cfc --- /dev/null +++ b/dist/immutable.min.js @@ -0,0 +1,25 @@ +/** + * @license + * MIT License + * + * Copyright (c) 2014-present, Lee Byron and other contributors. + * + * 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. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Immutable={})}(this,(function(t){"use strict";var e="delete",r=5,n=1<>>0;if(""+r!==e||4294967295===r)return NaN;e=r}return e<0?a(t)+e:e}function f(){return!0}function h(t,e,r){return(0===t&&!v(t)||void 0!==r&&t<=-r)&&(void 0===e||void 0!==r&&e>=r)}function p(t,e){return l(t,e,0)}function _(t,e){return l(t,e,e)}function l(t,e,r){return void 0===t?r:v(t)?e===1/0?e:0|Math.max(0,e+t):void 0===e||e===t?t:0|Math.min(e,t)}function v(t){return t<0||0===t&&1/t==-1/0}var y="@@__IMMUTABLE_ITERABLE__@@";function d(t){return Boolean(t&&t[y])}var g="@@__IMMUTABLE_KEYED__@@";function w(t){return Boolean(t&&t[g])}var m="@@__IMMUTABLE_INDEXED__@@";function b(t){return Boolean(t&&t[m])}function z(t){return w(t)||b(t)}var S=function(t){return d(t)?t:X(t)},I=function(t){function e(t){return w(t)?t:F(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(S),O=function(t){function e(t){return b(t)?t:G(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(S),E=function(t){function e(t){return d(t)&&!z(t)?t:Z(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(S);S.Keyed=I,S.Indexed=O,S.Set=E;var j="@@__IMMUTABLE_SEQ__@@";function q(t){return Boolean(t&&t[j])}var M="@@__IMMUTABLE_RECORD__@@";function D(t){return Boolean(t&&t[M])}function x(t){return d(t)||D(t)}var A="@@__IMMUTABLE_ORDERED__@@";function k(t){return Boolean(t&&t[A])}var R=0,U=1,T=2,B="function"==typeof Symbol&&Symbol.iterator,K="@@iterator",L=B||K,C=function(t){this.next=t};function P(t,e,r,n){var i=t===R?e:t===U?r:[e,r];return n?n.value=i:n={value:i,done:!1},n}function W(){return{value:void 0,done:!0}}function N(t){return!!Array.isArray(t)||!!V(t)}function H(t){return t&&"function"==typeof t.next}function J(t){var e=V(t);return e&&e.call(t)}function V(t){var e=t&&(B&&t[B]||t[K]);if("function"==typeof e)return e}C.prototype.toString=function(){return"[Iterator]"},C.KEYS=R,C.VALUES=U,C.ENTRIES=T,C.prototype.inspect=C.prototype.toSource=function(){return this.toString()},C.prototype[L]=function(){return this};var Y=Object.prototype.hasOwnProperty;function Q(t){return!(!Array.isArray(t)&&"string"!=typeof t)||t&&"object"==typeof t&&Number.isInteger(t.length)&&t.length>=0&&(0===t.length?1===Object.keys(t).length:t.hasOwnProperty(t.length-1))}var X=function(t){function e(t){return null==t?nt():x(t)?t.toSeq():function(t){var e=ut(t);if(e)return(n=V(r=t))&&n===r.entries?e.fromEntrySeq():function(t){var e=V(t);return e&&e===t.keys}(t)?e.toSetSeq():e;var r,n;if("object"==typeof t)return new tt(t);throw new TypeError("Expected Array or collection object of values, or keyed object: "+t)}(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toSeq=function(){return this},e.prototype.toString=function(){return this.__toString("Seq {","}")},e.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},e.prototype.__iterate=function(t,e){var r=this._cache;if(r){for(var n=r.length,i=0;i!==n;){var o=r[e?n-++i:i++];if(!1===t(o[1],o[0],this))break}return i}return this.__iterateUncached(t,e)},e.prototype.__iterator=function(t,e){var r=this._cache;if(r){var n=r.length,i=0;return new C((function(){if(i===n)return{value:void 0,done:!0};var o=r[e?n-++i:i++];return P(t,o[0],o[1])}))}return this.__iteratorUncached(t,e)},e}(S),F=function(t){function e(t){return null==t?nt().toKeyedSeq():d(t)?w(t)?t.toSeq():t.fromEntrySeq():D(t)?t.toSeq():it(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toKeyedSeq=function(){return this},e}(X),G=function(t){function e(t){return null==t?nt():d(t)?w(t)?t.entrySeq():t.toIndexedSeq():D(t)?t.toSeq().entrySeq():ot(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.of=function(){return e(arguments)},e.prototype.toIndexedSeq=function(){return this},e.prototype.toString=function(){return this.__toString("Seq [","]")},e}(X),Z=function(t){function e(t){return(d(t)&&!z(t)?t:G(t)).toSetSeq()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.of=function(){return e(arguments)},e.prototype.toSetSeq=function(){return this},e}(X);X.isSeq=q,X.Keyed=F,X.Set=Z,X.Indexed=G,X.prototype[j]=!0;var $=function(t){function e(t){this._array=t,this.size=t.length}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t,e){return this.has(t)?this._array[c(this,t)]:e},e.prototype.__iterate=function(t,e){for(var r=this._array,n=r.length,i=0;i!==n;){var o=e?n-++i:i++;if(!1===t(r[o],o,this))break}return i},e.prototype.__iterator=function(t,e){var r=this._array,n=r.length,i=0;return new C((function(){if(i===n)return{value:void 0,done:!0};var o=e?n-++i:i++;return P(t,o,r[o])}))},e}(G),tt=function(t){function e(t){var e=Object.keys(t).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t):[]);this._object=t,this._keys=e,this.size=e.length}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},e.prototype.has=function(t){return Y.call(this._object,t)},e.prototype.__iterate=function(t,e){for(var r=this._object,n=this._keys,i=n.length,o=0;o!==i;){var u=n[e?i-++o:o++];if(!1===t(r[u],u,this))break}return o},e.prototype.__iterator=function(t,e){var r=this._object,n=this._keys,i=n.length,o=0;return new C((function(){if(o===i)return{value:void 0,done:!0};var u=n[e?i-++o:o++];return P(t,u,r[u])}))},e}(F);tt.prototype[A]=!0;var et,rt=function(t){function e(t){this._collection=t,this.size=t.length||t.size}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var r=J(this._collection),n=0;if(H(r))for(var i;!(i=r.next()).done&&!1!==t(i.value,n++,this););return n},e.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=J(this._collection);if(!H(r))return new C(W);var n=0;return new C((function(){var e=r.next();return e.done?e:P(t,n++,e.value)}))},e}(G);function nt(){return et||(et=new $([]))}function it(t){var e=ut(t);if(e)return e.fromEntrySeq();if("object"==typeof t)return new tt(t);throw new TypeError("Expected Array or collection object of [k, v] entries, or keyed object: "+t)}function ot(t){var e=ut(t);if(e)return e;throw new TypeError("Expected Array or collection object of values: "+t)}function ut(t){return Q(t)?new $(t):N(t)?new rt(t):void 0}var st="@@__IMMUTABLE_MAP__@@";function at(t){return Boolean(t&&t[st])}function ct(t){return at(t)&&k(t)}function ft(t){return Boolean(t&&"function"==typeof t.equals&&"function"==typeof t.hashCode)}function ht(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if((t=t.valueOf())===(e=e.valueOf())||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!!(ft(t)&&ft(e)&&t.equals(e))}var pt="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var r=65535&(t|=0),n=65535&(e|=0);return r*n+((t>>>16)*n+r*(e>>>16)<<16>>>0)|0};function _t(t){return t>>>1&1073741824|3221225471&t}var lt=Object.prototype.valueOf;function vt(t){if(null==t)return yt(t);if("function"==typeof t.hashCode)return _t(t.hashCode(t));var e,r=(e=t).valueOf!==lt&&"function"==typeof e.valueOf?e.valueOf(e):e;if(null==r)return yt(r);switch(typeof r){case"boolean":return r?1108378657:1108378656;case"number":return function(t){if(t!=t||t===1/0)return 0;var e=0|t;e!==t&&(e^=4294967295*t);for(;t>4294967295;)e^=t/=4294967295;return _t(e)}(r);case"string":return r.length>Et?function(t){var e=Mt[t];void 0===e&&(e=dt(t),qt===jt&&(qt=0,Mt={}),qt++,Mt[t]=e);return e}(r):dt(r);case"object":case"function":return function(t){var e;if(zt&&void 0!==(e=bt.get(t)))return e;if(e=t[Ot],void 0!==e)return e;if(!wt){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[Ot]))return e;if(void 0!==(e=function(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}(t)))return e}if(e=mt(),zt)bt.set(t,e);else{if(void 0!==gt&&!1===gt(t))throw new Error("Non-extensible objects are not allowed as keys.");if(wt)Object.defineProperty(t,Ot,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[Ot]=e;else{if(void 0===t.nodeType)throw new Error("Unable to set a non-enumerable property on object.");t[Ot]=e}}return e}(r);case"symbol":return function(t){var e=St[t];if(void 0!==e)return e;return e=mt(),St[t]=e,e}(r);default:if("function"==typeof r.toString)return dt(r.toString());throw new Error("Value type "+typeof r+" cannot be hashed.")}}function yt(t){return null===t?1108378658:1108378659}function dt(t){for(var e=0,r=0;r=0&&(a.get=function(e,r){return(e=c(this,e))>=0&&eo)return{value:void 0,done:!0};var t=i.next();return n||e===U||t.done?t:P(e,a-1,e===R?void 0:t.value[1],t)}))},a}function Lt(t,e,r,n){var i=Xt(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,a=0;return t.__iterate((function(t,o,c){if(!s||!(s=e.call(r,t,o,c)))return a++,i(t,n?o:a-1,u)})),a},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(T,o),a=!0,c=0;return new C((function(){var t,o,f;do{if((t=s.next()).done)return n||i===U?t:P(i,c++,i===R?void 0:t.value[1],t);var h=t.value;o=h[0],f=h[1],a&&(a=e.call(r,f,o,u))}while(a);return i===T?t:P(i,o,f,t)}))},i}xt.prototype.cacheResult=Dt.prototype.cacheResult=At.prototype.cacheResult=kt.prototype.cacheResult=Ft;var Ct=function(t){function e(t){this._wrappedIterables=t.flatMap((function(t){return t._wrappedIterables?t._wrappedIterables:[t]})),this.size=this._wrappedIterables.reduce((function(t,e){if(void 0!==t){var r=e.size;if(void 0!==r)return t+r}}),0),this[g]=this._wrappedIterables[0][g],this[m]=this._wrappedIterables[0][m],this[A]=this._wrappedIterables[0][A]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.__iterateUncached=function(t,e){if(0!==this._wrappedIterables.length){if(e)return this.cacheResult().__iterate(t,e);for(var r=0,n=w(this),i=n?T:U,o=this._wrappedIterables[r].__iterator(i,e),u=!0,s=0;u;){for(var a=o.next();a.done;){if(++r===this._wrappedIterables.length)return s;a=(o=this._wrappedIterables[r].__iterator(i,e)).next()}u=!1!==(n?t(a.value[1],a.value[0],this):t(a.value,s,this)),s++}return s}},e.prototype.__iteratorUncached=function(t,e){var r=this;if(0===this._wrappedIterables.length)return new C(W);if(e)return this.cacheResult().__iterator(t,e);var n=0,i=this._wrappedIterables[n].__iterator(t,e);return new C((function(){for(var o=i.next();o.done;){if(++n===r._wrappedIterables.length)return o;o=(i=r._wrappedIterables[n].__iterator(t,e)).next()}return o}))},e}(X);function Pt(t,e,r){var n=Xt(t);return n.__iterateUncached=function(i,o){if(o)return this.cacheResult().__iterate(i,o);var u=0,s=!1;return function t(a,c){a.__iterate((function(o,a){return(!e||c0}function Jt(t,e,r,n){var i=Xt(t),o=new $(r).map((function(t){return t.size}));return i.size=n?o.max():o.min(),i.__iterate=function(t,e){for(var r,n=this.__iterator(U,e),i=0;!(r=n.next()).done&&!1!==t(r.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=r.map((function(t){return t=S(t),J(i?t.reverse():t)})),u=0,s=!1;return new C((function(){var r;return s||(r=o.map((function(t){return t.next()})),s=n?r.every((function(t){return t.done})):r.some((function(t){return t.done}))),s?{value:void 0,done:!0}:P(t,u++,e.apply(null,r.map((function(t){return t.value}))))}))},i}function Vt(t,e){return t===e?t:q(t)?e:t.constructor(e)}function Yt(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Qt(t){return w(t)?I:b(t)?O:E}function Xt(t){return Object.create((w(t)?F:b(t)?G:Z).prototype)}function Ft(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):X.prototype.cacheResult.call(this)}function Gt(t,e){return void 0===t&&void 0===e?0:void 0===t?1:void 0===e?-1:t>e?1:t0;)e[r]=arguments[r+1];if("function"!=typeof t)throw new TypeError("Invalid merger function: "+t);return ze(this,e,t)}function ze(t,e,r){for(var n=[],i=0;i0;)e[r]=arguments[r+1];return Se(this,e,t)}function je(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return he(this,t,Je(),(function(t){return Ie(t,e)}))}function qe(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return he(this,t,Je(),(function(t){return Se(t,e)}))}function Me(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this}function De(){return this.__ownerID?this:this.__ensureOwner(new s)}function xe(){return this.__ensureOwner()}function Ae(){return this.__altered}var ke=function(t){function e(e){return null==e?Je():at(e)&&!k(e)?e:Je().withMutations((function(r){var n=t(e);te(n.size),n.forEach((function(t,e){return r.set(e,t)}))}))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.__toString("Map {","}")},e.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},e.prototype.set=function(t,e){return Ve(this,t,e)},e.prototype.remove=function(t){return Ve(this,t,o)},e.prototype.deleteAll=function(t){var e=S(t);return 0===e.size?this:this.withMutations((function(t){e.forEach((function(e){return t.remove(e)}))}))},e.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Je()},e.prototype.sort=function(t){return yr(Wt(this,t))},e.prototype.sortBy=function(t,e){return yr(Wt(this,e,t))},e.prototype.map=function(t,e){var r=this;return this.withMutations((function(n){n.forEach((function(i,o){n.set(o,t.call(e,i,o,r))}))}))},e.prototype.__iterator=function(t,e){return new Pe(this,t,e)},e.prototype.__iterate=function(t,e){var r=this,n=0;return this._root&&this._root.iterate((function(e){return n++,t(e[1],e[0],r)}),e),n},e.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?He(this.size,this._root,t,this.__hash):0===this.size?Je():(this.__ownerID=t,this.__altered=!1,this)},e}(I);ke.isMap=at;var Re=ke.prototype;Re[st]=!0,Re[e]=Re.remove,Re.removeAll=Re.deleteAll,Re.setIn=le,Re.removeIn=Re.deleteIn=ye,Re.update=ge,Re.updateIn=we,Re.merge=Re.concat=me,Re.mergeWith=be,Re.mergeDeep=Oe,Re.mergeDeepWith=Ee,Re.mergeIn=je,Re.mergeDeepIn=qe,Re.withMutations=Me,Re.wasAltered=Ae,Re.asImmutable=xe,Re["@@transducer/init"]=Re.asMutable=De,Re["@@transducer/step"]=function(t,e){return t.set(e[0],e[1])},Re["@@transducer/result"]=function(t){return t.asImmutable()};var Ue=function(t,e){this.ownerID=t,this.entries=e};Ue.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;o=Ze)return function(t,e,r,n){t||(t=new s);for(var i=new Le(t,vt(r),[r,n]),o=0;o>>t)&i),s=this.bitmap;return 0==(s&u)?o:this.nodes[Fe(s&u-1)].get(t+r,e,n,o)},Te.prototype.update=function(t,e,u,s,a,c,f){void 0===u&&(u=vt(s));var h=(0===e?u:u>>>e)&i,p=1<=$e)return function(t,e,r,i,o){for(var u=0,s=new Array(n),a=0;0!==r;a++,r>>>=1)s[a]=1&r?e[u++]:void 0;return s[i]=o,new Be(t,u+1,s)}(t,y,_,h,g);if(l&&!g&&2===y.length&&Qe(y[1^v]))return y[1^v];if(l&&g&&1===y.length&&Qe(g))return g;var w=t&&t===this.ownerID,m=l?g?_:_^p:_|p,b=l?g?Ge(y,v,g,w):function(t,e,r){var n=t.length-1;if(r&&e===n)return t.pop(),t;for(var i=new Array(n),o=0,u=0;u>>t)&i,s=this.nodes[u];return s?s.get(t+r,e,n,o):o},Be.prototype.update=function(t,e,n,u,s,a,c){void 0===n&&(n=vt(u));var f=(0===e?n:n>>>e)&i,h=s===o,p=this.nodes,_=p[f];if(h&&!_)return this;var l=Ye(_,t,e+r,n,u,s,a,c);if(l===_)return this;var v=this.count;if(_){if(!l&&--v>>n)&i,c=(0===n?o:o>>>n)&i,f=a===c?[Xe(t,e,n+r,o,u)]:(s=new Le(e,o,u),a>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,t+=t>>8,127&(t+=t>>16)}function Ge(t,e,r,n){var i=n?t:Zt(t);return i[e]=r,i}var Ze=n/4,$e=n/2,tr=n/4,er="@@__IMMUTABLE_LIST__@@";function rr(t){return Boolean(t&&t[er])}var nr=function(t){function e(e){var i=cr();if(null==e)return i;if(rr(e))return e;var o=t(e),u=o.size;return 0===u?i:(te(u),u>0&&u=0&&t=t.size||e<0)return t.withMutations((function(t){e<0?_r(t,e).set(0,r):_r(t,0,e+1).set(e,r)}));e+=t._origin;var n=t._tail,i=t._root,o={value:!1};e>=lr(t._capacity)?n=fr(n,t.__ownerID,0,e,r,o):i=fr(i,t.__ownerID,t._level,e,r,o);if(!o.value)return t;if(t.__ownerID)return t._root=i,t._tail=n,t.__hash=void 0,t.__altered=!0,t;return ar(t._origin,t._capacity,t._level,i,n)}(this,t,e)},e.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},e.prototype.insert=function(t,e){return this.splice(t,0,e)},e.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=r,this._root=this._tail=this.__hash=void 0,this.__altered=!0,this):cr()},e.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations((function(r){_r(r,0,e+t.length);for(var n=0;n>>e&i;if(o>=this.array.length)return new or([],t);var u,s=0===o;if(e>0){var a=this.array[o];if((u=a&&a.removeBefore(t,e-r,n))===a&&s)return this}if(s&&!u)return this;var c=hr(this,t);if(!s)for(var f=0;f>>e&i;if(s>=this.array.length)return this;if(e>0){var a=this.array[s];if((u=a&&a.removeAfter(t,e-r,o))===a&&s===this.array.length-1)return this}var c=hr(this,t);return c.array.splice(s+1),u&&(c.array[s]=u),c};var ur={};function sr(t,e){var i=t._origin,o=t._capacity,u=lr(o),s=t._tail;return a(t._root,t._level,0);function a(t,c,f){return 0===c?function(t,r){var a=r===u?s&&s.array:t&&t.array,c=r>i?0:i-r,f=o-r;f>n&&(f=n);return function(){if(c===f)return ur;var t=e?--f:c++;return a&&a[t]}}(t,f):function(t,u,s){var c,f=t&&t.array,h=s>i?0:i-s>>u,p=1+(o-s>>u);p>n&&(p=n);return function(){for(;;){if(c){var t=c();if(t!==ur)return t;c=null}if(h===p)return ur;var n=e?--p:h++;c=a(f&&f[n],u-r,s+(n<>>n&i,h=t&&f0){var p=t&&t.array[f],_=fr(p,e,n-r,o,s,a);return _===p?t:((c=hr(t,e)).array[f]=_,c)}return h&&t.array[f]===s?t:(a&&u(a),c=hr(t,e),void 0===s&&f===c.array.length-1?c.array.pop():c.array[f]=s,c)}function hr(t,e){return e&&t&&e===t.ownerID?t:new or(t?t.array.slice():[],e)}function pr(t,e){if(e>=lr(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>o&i],o-=r;return n}}function _r(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var o=t.__ownerID||new s,u=t._origin,a=t._capacity,c=u+e,f=void 0===n?a:n<0?a+n:u+n;if(c===u&&f===a)return t;if(c>=f)return t.clear();for(var h=t._level,p=t._root,_=0;c+_<0;)p=new or(p&&p.array.length?[void 0,p]:[],o),_+=1<<(h+=r);_&&(c+=_,u+=_,f+=_,a+=_);for(var l=lr(a),v=lr(f);v>=1<l?new or([],o):y;if(y&&v>l&&cr;w-=r){var m=l>>>w&i;g=g.array[m]=hr(g.array[m],o)}g.array[l>>>r&i]=y}if(f=v)c-=v,f-=v,h=r,p=null,d=d&&d.removeBefore(o,0,c);else if(c>u||v>>h&i;if(b!==v>>>h&i)break;b&&(_+=(1<u&&(p=p.removeBefore(o,h,c-_)),p&&v>>r<=n&&a.size>=2*s.size?(i=(u=a.filter((function(t,e){return void 0!==t&&c!==e}))).toKeyedSeq().map((function(t){return t[0]})).flip().toMap(),t.__ownerID&&(i.__ownerID=u.__ownerID=t.__ownerID)):(i=s.remove(e),u=c===a.size-1?a.pop():a.set(c,void 0))}else if(f){if(r===a.get(c)[1])return t;i=s,u=a.set(c,[e,r])}else i=s.set(e,a.size),u=a.set(a.size,[e,r]);return t.__ownerID?(t.size=i.size,t._map=i,t._list=u,t.__hash=void 0,t.__altered=!0,t):dr(i,u)}yr.isOrderedMap=ct,yr.prototype[A]=!0,yr.prototype[e]=yr.prototype.remove;var mr="@@__IMMUTABLE_STACK__@@";function br(t){return Boolean(t&&t[mr])}var zr=function(t){function e(t){return null==t?Er():br(t)?t:Er().pushAll(t)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.of=function(){return this(arguments)},e.prototype.toString=function(){return this.__toString("Stack [","]")},e.prototype.get=function(t,e){var r=this._head;for(t=c(this,t);r&&t--;)r=r.next;return r?r.value:e},e.prototype.peek=function(){return this._head&&this._head.value},e.prototype.push=function(){var t=arguments;if(0===arguments.length)return this;for(var e=this.size+arguments.length,r=this._head,n=arguments.length-1;n>=0;n--)r={value:t[n],next:r};return this.__ownerID?(this.size=e,this._head=r,this.__hash=void 0,this.__altered=!0,this):Or(e,r)},e.prototype.pushAll=function(e){if(0===(e=t(e)).size)return this;if(0===this.size&&br(e))return e;te(e.size);var r=this.size,n=this._head;return e.__iterate((function(t){r++,n={value:t,next:n}}),!0),this.__ownerID?(this.size=r,this._head=n,this.__hash=void 0,this.__altered=!0,this):Or(r,n)},e.prototype.pop=function(){return this.slice(1)},e.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Er()},e.prototype.slice=function(e,r){if(h(e,r,this.size))return this;var n=p(e,this.size);if(_(r,this.size)!==this.size)return t.prototype.slice.call(this,e,r);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):Or(i,o)},e.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Or(this.size,this._head,t,this.__hash):0===this.size?Er():(this.__ownerID=t,this.__altered=!1,this)},e.prototype.__iterate=function(t,e){var r=this;if(e)return new $(this.toArray()).__iterate((function(e,n){return t(e,n,r)}),e);for(var n=0,i=this._head;i&&!1!==t(i.value,n++,this);)i=i.next;return n},e.prototype.__iterator=function(t,e){if(e)return new $(this.toArray()).__iterator(t,e);var r=0,n=this._head;return new C((function(){if(n){var e=n.value;return n=n.next,P(t,r++,e)}return{value:void 0,done:!0}}))},e}(O);zr.isStack=br;var Sr,Ir=zr.prototype;function Or(t,e,r,n){var i=Object.create(Ir);return i.size=t,i._head=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function Er(){return Sr||(Sr=Or(0))}Ir[mr]=!0,Ir.shift=Ir.pop,Ir.unshift=Ir.push,Ir.unshiftAll=Ir.pushAll,Ir.withMutations=Me,Ir.wasAltered=Ae,Ir.asImmutable=xe,Ir["@@transducer/init"]=Ir.asMutable=De,Ir["@@transducer/step"]=function(t,e){return t.unshift(e)},Ir["@@transducer/result"]=function(t){return t.asImmutable()};var jr="@@__IMMUTABLE_SET__@@";function qr(t){return Boolean(t&&t[jr])}function Mr(t){return qr(t)&&k(t)}function Dr(t,e){if(t===e)return!0;if(!d(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||w(t)!==w(e)||b(t)!==b(e)||k(t)!==k(e))return!1;if(0===t.size&&0===e.size)return!0;var r=!z(t);if(k(t)){var n=t.entries();return e.every((function(t,e){var i=n.next().value;return i&&ht(i[1],t)&&(r||ht(i[0],e))}))&&n.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var u=t;t=e,e=u}var s=!0,a=e.__iterate((function(e,n){if(r?!t.has(e):i?!ht(e,t.get(n,o)):!ht(t.get(n,o),e))return s=!1,!1}));return s&&t.size===a}function xr(t,e){var r=function(r){t.prototype[r]=e[r]};return Object.keys(e).forEach(r),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(r),t}function Ar(t){if(!t||"object"!=typeof t)return t;if(!d(t)){if(!ie(t))return t;t=X(t)}if(w(t)){var e={};return t.__iterate((function(t,r){e[r]=Ar(t)})),e}var r=[];return t.__iterate((function(t){r.push(Ar(t))})),r}var kr=function(t){function e(e){return null==e?Kr():qr(e)&&!k(e)?e:Kr().withMutations((function(r){var n=t(e);te(n.size),n.forEach((function(t){return r.add(t)}))}))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.of=function(){return this(arguments)},e.fromKeys=function(t){return this(I(t).keySeq())},e.intersect=function(t){return(t=S(t).toArray()).length?Ur.intersect.apply(e(t.pop()),t):Kr()},e.union=function(t){return(t=S(t).toArray()).length?Ur.union.apply(e(t.pop()),t):Kr()},e.prototype.toString=function(){return this.__toString("Set {","}")},e.prototype.has=function(t){return this._map.has(t)},e.prototype.add=function(t){return Tr(this,this._map.set(t,t))},e.prototype.remove=function(t){return Tr(this,this._map.remove(t))},e.prototype.clear=function(){return Tr(this,this._map.clear())},e.prototype.map=function(t,e){var r=this,n=!1,i=Tr(this,this._map.mapEntries((function(i){var o=i[1],u=t.call(e,o,o,r);return u!==o&&(n=!0),[u,u]}),e));return n?i:this},e.prototype.union=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return 0===(e=e.filter((function(t){return 0!==t.size}))).length?this:0!==this.size||this.__ownerID||1!==e.length?this.withMutations((function(r){for(var n=0;n=0&&e=0&&r>>-15,461845907),e=pt(e<<13|e>>>-13,5),e=pt((e=(e+3864292196|0)^t)^e>>>16,2246822507),e=_t((e=pt(e^e>>>13,3266489909))^e>>>16)}(t.size,n)}(this))}});var Jr=S.prototype;Jr[y]=!0,Jr[L]=Jr.values,Jr.toJSON=Jr.toArray,Jr.__toStringMapper=oe,Jr.inspect=Jr.toSource=function(){return this.toString()},Jr.chain=Jr.flatMap,Jr.contains=Jr.includes,xr(I,{flip:function(){return Vt(this,Rt(this))},mapEntries:function(t,e){var r=this,n=0;return Vt(this,this.toSeq().map((function(i,o){return t.call(e,[o,i],n++,r)})).fromEntrySeq())},mapKeys:function(t,e){var r=this;return Vt(this,this.toSeq().flip().map((function(n,i){return t.call(e,n,i,r)})).flip())}});var Vr=I.prototype;Vr[g]=!0,Vr[L]=Jr.entries,Vr.toJSON=Hr,Vr.__toStringMapper=function(t,e){return oe(e)+": "+oe(t)},xr(O,{toKeyedSeq:function(){return new Dt(this,!1)},filter:function(t,e){return Vt(this,Bt(this,t,e,!1))},findIndex:function(t,e){var r=this.findEntry(t,e);return r?r[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return Vt(this,Tt(this,!1))},slice:function(t,e){return Vt(this,Kt(this,t,e,!1))},splice:function(t,e){var r=arguments.length;if(e=Math.max(e||0,0),0===r||2===r&&!e)return this;t=p(t,t<0?this.count():this.size);var n=this.slice(0,t);return Vt(this,1===r?n:n.concat(Zt(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var r=this.findLastEntry(t,e);return r?r[0]:-1},first:function(t){return this.get(0,t)},flatten:function(t){return Vt(this,Pt(this,t,!1))},get:function(t,e){return(t=c(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find((function(e,r){return r===t}),void 0,e)},has:function(t){return(t=c(this,t))>=0&&(void 0!==this.size?this.size===1/0||te?-1:0}function rn(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}Qr.has=Jr.includes,Qr.contains=Qr.includes,Qr.keys=Qr.values,xr(F,Vr),xr(G,Yr),xr(Z,Qr);var nn=function(t){function e(t){return null==t?an():Mr(t)?t:an().withMutations((function(e){var r=E(t);te(r.size),r.forEach((function(t){return e.add(t)}))}))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.of=function(){return this(arguments)},e.fromKeys=function(t){return this(I(t).keySeq())},e.prototype.toString=function(){return this.__toString("OrderedSet {","}")},e}(kr);nn.isOrderedSet=Mr;var on,un=nn.prototype;function sn(t,e){var r=Object.create(un);return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r}function an(){return on||(on=sn(gr()))}un[A]=!0,un.zip=Yr.zip,un.zipWith=Yr.zipWith,un.zipAll=Yr.zipAll,un.__empty=an,un.__make=sn;var cn=function(t,e){var r;!function(t){if(D(t))throw new Error("Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.");if(x(t))throw new Error("Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.");if(null===t||"object"!=typeof t)throw new Error("Can not call `Record` with a non-object as default values. Use a plain javascript object instead.")}(t);var n=function(o){var u=this;if(o instanceof n)return o;if(!(this instanceof n))return new n(o);if(!r){r=!0;var s=Object.keys(t),a=i._indices={};i._name=e,i._keys=s,i._defaultValues=t;for(var c=0;c2?[]:void 0,{"":t})},t.get=se,t.getIn=Pr,t.has=ue,t.hasIn=Nr,t.hash=vt,t.is=ht,t.isAssociative=z,t.isCollection=d,t.isImmutable=x,t.isIndexed=b,t.isKeyed=w,t.isList=rr,t.isMap=at,t.isOrdered=k,t.isOrderedMap=ct,t.isOrderedSet=Mr,t.isPlainObject=ne,t.isRecord=D,t.isSeq=q,t.isSet=qr,t.isStack=br,t.isValueObject=ft,t.merge=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return Ie(t,e)},t.mergeDeep=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return Se(t,e)},t.mergeDeepWith=function(t,e){for(var r=[],n=arguments.length-2;n-- >0;)r[n]=arguments[n+2];return Se(e,r,t)},t.mergeWith=function(t,e){for(var r=[],n=arguments.length-2;n-- >0;)r[n]=arguments[n+2];return Ie(e,r,t)},t.remove=ce,t.removeIn=ve,t.set=fe,t.setIn=_e,t.update=de,t.updateIn=he,t.version="5.1.2"})); diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index f75f25580e..0000000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,160 +0,0 @@ -import pluginJs from '@eslint/js'; -import globals from 'globals'; -import pluginJest from 'eslint-plugin-jest'; -import importPlugin from 'eslint-plugin-import'; -import pluginReact from 'eslint-plugin-react'; -// eslint-disable-next-line import/no-unresolved -import tseslint from 'typescript-eslint'; - -/** @type {import('eslint').Linter.Config[]} */ -export default tseslint.config( - { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] }, - { - ignores: [ - 'npm/', - 'dist/', - 'type-definitions/flow-tests', - 'website/out/', - 'website/.next/', - ], - }, - { - languageOptions: { - globals: globals.browser, - - // parserOptions: { - // projectService: true, - // tsconfigRootDir: import.meta.dirname, - // }, - }, - }, - pluginJs.configs.recommended, - importPlugin.flatConfigs.recommended, - importPlugin.flatConfigs.typescript, - ...tseslint.configs.recommended, - - { - rules: { - eqeqeq: 'error', - 'constructor-super': 'off', - 'no-constructor-return': 'error', - 'no-else-return': 'error', - 'no-lonely-if': 'error', - 'no-object-constructor': 'error', - 'no-prototype-builtins': 'off', - 'no-this-before-super': 'off', - 'no-useless-concat': 'error', - 'no-var': 'error', - 'operator-assignment': 'error', - 'prefer-arrow-callback': 'error', - 'prefer-spread': 'off', - - '@typescript-eslint/no-unused-vars': [ - 'error', - { - argsIgnorePattern: '^_', - }, - ], - }, - }, - - { - files: ['src/*'], - rules: { - 'no-console': 'error', - }, - }, - - { - files: ['website/'], - ...pluginReact.configs.flat.recommended, - ...pluginReact.configs.flat['jsx-runtime'], - - rules: { - 'react/destructuring-assignment': 'off', - 'react/jsx-boolean-value': 'off', - 'react/jsx-curly-brace-presence': 'off', - 'react/jsx-filename-extension': 'off', - 'react/no-array-index-key': 'off', - 'react/no-danger': 'off', - 'react/no-multi-comp': 'off', - 'react/prefer-es6-class': 'off', - 'react/prefer-stateless-function': 'off', - 'react/prop-types': 'off', - 'react/self-closing-comp': 'error', - 'react/sort-comp': 'off', - 'react/jsx-props-no-spreading': 'off', - - 'react/require-default-props': [ - 'error', - { - functions: 'ignore', - }, - ], - - 'jsx-a11y/no-static-element-interactions': 'off', - }, - }, - - { - files: ['type-definitions/ts-tests/*'], - - rules: { - '@typescript-eslint/no-unused-vars': 'off', - - 'import/no-unresolved': [ - 'error', - { - ignore: ['immutable'], - }, - ], - }, - }, - - { - files: ['__tests__/**/*', 'website/**/*.test.ts', 'perf/*'], - languageOptions: { - globals: pluginJest.environments.globals.globals, - }, - ...pluginJest.configs['flat/recommended'], - ...pluginJest.configs['flat/style'], - plugins: { jest: pluginJest }, - rules: { - ...pluginJest.configs['flat/recommended'].rules, - // TODO activate style rules later - // ...pluginJest.configs['jest/style'].rules, - 'jest/expect-expect': [ - 'error', - { - assertFunctionNames: ['expect', 'expectIs', 'expectIsNot'], - additionalTestBlockFunctions: [], - }, - ], - 'import/no-unresolved': [ - 'error', - { - ignore: ['immutable'], - }, - ], - }, - }, - { - files: ['perf/*'], - rules: { - 'jest/expect-expect': 'off', - 'no-redeclare': 'off', - 'no-var': 'off', - 'prefer-arrow-callback': 'off', - }, - }, - { - files: ['resources/*'], - rules: { - 'no-undef': 'off', - 'no-redeclare': 'off', - 'no-var': 'off', - 'prefer-arrow-callback': 'off', - '@typescript-eslint/no-require-imports': 'off', - }, - } -); diff --git a/jest.config.mjs b/jest.config.mjs deleted file mode 100644 index 4bbd44198b..0000000000 --- a/jest.config.mjs +++ /dev/null @@ -1,12 +0,0 @@ -/** @type {import('jest').Config} */ -const config = { - moduleFileExtensions: ['js', 'ts'], - resolver: '/resources/jestResolver.js', - transform: { - '^.+\\.(js|ts)$': '/resources/jestPreprocessor.js', - }, - testRegex: ['/__tests__/.*\\.(ts|js)$', '/website/.*\\.test\\.(ts|js)$'], - testPathIgnorePatterns: ['/__tests__/ts-utils.ts'], -}; - -export default config; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 8e728752a6..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,19705 +0,0 @@ -{ - "name": "immutable", - "version": "5.1.2", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "immutable", - "version": "5.1.2", - "license": "MIT", - "devDependencies": { - "@codemirror/commands": "^6.8.1", - "@codemirror/lang-javascript": "^6.2.3", - "@codemirror/state": "^6.5.2", - "@codemirror/theme-one-dark": "^6.1.2", - "@codemirror/view": "^6.36.5", - "@eslint/js": "^9.20.0", - "@jdeniau/immutable-devtools": "^0.2.0", - "@jest/globals": "^29.7.0", - "@rollup/plugin-buble": "1.0.3", - "@rollup/plugin-commonjs": "28.0.2", - "@rollup/plugin-json": "6.1.0", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^12.1.2", - "@size-limit/esbuild-why": "^11.2.0", - "@size-limit/preset-small-lib": "^11.2.0", - "@types/prismjs": "^1.26.3", - "@types/random-seed": "0.3.5", - "@types/react": "19.1.0", - "benchmark": "2.1.4", - "codemirror": "^6.0.1", - "colors": "1.4.0", - "cpy-cli": "^5.0.0", - "eslint": "^9.20.1", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-react": "^7.37.4", - "fast-check": "^4.0.0", - "flow-bin": "0.160.0", - "globals": "^15.15.0", - "jest": "^29.0.0", - "jest-environment-jsdom": "^29.6.4", - "jsonml-html": "^1.2.0", - "make-synchronous": "0.1.1", - "marked": "^11.2.0", - "marked-highlight": "^2.1.0", - "microtime": "3.1.1", - "next": "15.2.4", - "next-sitemap": "4.2.3", - "npm-run-all": "4.1.5", - "prettier": "^3.5.0", - "prismjs": "^1.29.0", - "random-seed": "0.3.0", - "react": "19.1.0", - "react-dom": "19.1.0", - "rimraf": "2.7.1", - "rollup": "4.34.8", - "size-limit": "^11.2.0", - "transducers-js": "0.4.174", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "tstyche": "^3.5", - "typescript": "5.7", - "typescript-eslint": "^8.24.0" - }, - "engines": { - "npm": ">=7.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz", - "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/traverse": "^7.26.8", - "@babel/types": "^7.26.8", - "@types/gensync": "^1.0.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/generator": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz", - "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.10" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", - "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/types": "^7.26.8", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@codemirror/autocomplete": { - "version": "6.18.6", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", - "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@codemirror/commands": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz", - "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.4.0", - "@codemirror/view": "^6.27.0", - "@lezer/common": "^1.1.0" - } - }, - "node_modules/@codemirror/lang-javascript": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.3.tgz", - "integrity": "sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.6.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0", - "@lezer/javascript": "^1.0.0" - } - }, - "node_modules/@codemirror/language": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz", - "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/lint": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz", - "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.35.0", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/search": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.10.tgz", - "integrity": "sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/state": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", - "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@marijn/find-cluster-break": "^1.0.0" - } - }, - "node_modules/@codemirror/theme-one-dark": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", - "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/highlight": "^1.0.0" - } - }, - "node_modules/@codemirror/view": { - "version": "6.36.5", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.5.tgz", - "integrity": "sha512-cd+FZEUlu3GQCYnguYm3EkhJ8KJVisqqUsCOKedBoAt/d9c76JUUap6U0UrpElln5k6VyrEOYliMuDAKIeDQLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.5.0", - "style-mod": "^4.1.0", - "w3c-keyname": "^2.2.4" - } - }, - "node_modules/@corex/deepmerge": { - "version": "4.0.43", - "resolved": "https://registry.npmjs.org/@corex/deepmerge/-/deepmerge-4.0.43.tgz", - "integrity": "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", - "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/config-array/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/core": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", - "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/js": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", - "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", - "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.10.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", - "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jdeniau/immutable-devtools": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@jdeniau/immutable-devtools/-/immutable-devtools-0.2.0.tgz", - "integrity": "sha512-kncZLhyszWkGz0wAr8eoHFvhczuZz5Ud71OiLIhe5PFQ05nnLgsFdr520Qy+eHhMSL6roJYFrZ73ZJTv48/fUg==", - "dev": true, - "license": "BSD" - }, - "node_modules/@jest/console": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", - "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", - "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/reporters": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-resolve-dependencies": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.4", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", - "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", - "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", - "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.4", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@lezer/javascript": { - "version": "1.4.21", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.21.tgz", - "integrity": "sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.1.3", - "@lezer/lr": "^1.3.0" - } - }, - "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@marijn/find-cluster-break": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@next/env": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz", - "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz", - "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz", - "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz", - "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz", - "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz", - "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz", - "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz", - "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz", - "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@rollup/plugin-buble": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-buble/-/plugin-buble-1.0.3.tgz", - "integrity": "sha512-QYD9BKkJoof0FdCFeSYYhF6/Y8e0Mnf+098xGgmWOFJ4UPHlWujjqOYeVwEm2hJPOmlR5k7HPUdAjqtOWhN64Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/buble": "^0.19.2", - "buble": "^0.20.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-buble/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/buble": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.20.0.tgz", - "integrity": "sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==", - "dev": true, - "dependencies": { - "acorn": "^6.4.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.2.0", - "chalk": "^2.4.2", - "magic-string": "^0.25.7", - "minimist": "^1.2.5", - "regexpu-core": "4.5.4" - }, - "bin": { - "buble": "bin/buble" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@rollup/plugin-buble/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@rollup/plugin-buble/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz", - "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "fdir": "^6.2.0", - "is-reference": "1.2.1", - "magic-string": "^0.30.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=16.0.0 || 14 >= 14.17" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-terser": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", - "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-typescript": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", - "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.14.0||^3.0.0||^4.0.0", - "tslib": "*", - "typescript": ">=3.7.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - }, - "tslib": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@size-limit/esbuild-why": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/esbuild-why/-/esbuild-why-11.2.0.tgz", - "integrity": "sha512-VtoQbbkvFbF314LWEaEp1+IjG0DH+9w6nP//D6Gd48SEAPLoBgqk287mjYTF9WYxg9N5lo8KjpXxEFk4gOXNpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild-visualizer": "^0.7.0", - "open": "^10.1.0" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "size-limit": "11.2.0" - } - }, - "node_modules/@size-limit/preset-small-lib": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-11.2.0.tgz", - "integrity": "sha512-RFbbIVfv8/QDgTPyXzjo5NKO6CYyK5Uq5xtNLHLbw5RgSKrgo8WpiB/fNivZuNd/5Wk0s91PtaJ9ThNcnFuI3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@size-limit/esbuild": "11.2.0", - "@size-limit/file": "11.2.0", - "size-limit": "11.2.0" - }, - "peerDependencies": { - "size-limit": "11.2.0" - } - }, - "node_modules/@size-limit/preset-small-lib/node_modules/@size-limit/esbuild": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/esbuild/-/esbuild-11.2.0.tgz", - "integrity": "sha512-vSg9H0WxGQPRzDnBzeDyD9XT0Zdq0L+AI3+77/JhxznbSCMJMMr8ndaWVQRhOsixl97N0oD4pRFw2+R1Lcvi6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "nanoid": "^5.1.0" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "size-limit": "11.2.0" - } - }, - "node_modules/@size-limit/preset-small-lib/node_modules/@size-limit/file": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-11.2.0.tgz", - "integrity": "sha512-OZHE3putEkQ/fgzz3Tp/0hSmfVo3wyTpOJSRNm6AmcwX4Nm9YtTfbQQ/hZRwbBFR23S7x2Sd9EbqYzngKwbRoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "size-limit": "11.2.0" - } - }, - "node_modules/@size-limit/preset-small-lib/node_modules/nanoid": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.4.tgz", - "integrity": "sha512-GTFcMIDgR7tqji/LpSY8rtg464VnJl/j6ypoehYnuGb+Y8qZUdtKB8WVCXon0UEZgFDbuUxpIl//6FHLHgXSNA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/buble": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@types/buble/-/buble-0.19.2.tgz", - "integrity": "sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==", - "dev": true, - "dependencies": { - "magic-string": "^0.25.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/gensync": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", - "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "14.17.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", - "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==", - "dev": true - }, - "node_modules/@types/prismjs": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz", - "integrity": "sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==", - "dev": true - }, - "node_modules/@types/random-seed": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@types/random-seed/-/random-seed-0.3.5.tgz", - "integrity": "sha512-CftxcDPAHgs0SLHU2dt+ZlDPJfGqLW3sZlC/ATr5vJDSe5tRLeOne7HMvCOJnFyF8e1U41wqzs3h6AMC613xtA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", - "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", - "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/type-utils": "8.24.0", - "@typescript-eslint/utils": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", - "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/typescript-estree": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", - "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", - "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.24.0", - "@typescript-eslint/utils": "8.24.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/types": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", - "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", - "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", - "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/typescript-estree": "8.24.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", - "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.24.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", - "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.4", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "dependencies": { - "lodash": "^4.17.4", - "platform": "^1.3.3" - } - }, - "node_modules/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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/commands": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/search": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/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 - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cp-file": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", - "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.10", - "nested-error-stacks": "^2.1.1", - "p-event": "^5.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-10.1.0.tgz", - "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^3.0.0", - "cp-file": "^10.0.0", - "globby": "^13.1.4", - "junk": "^4.0.1", - "micromatch": "^4.0.5", - "nested-error-stacks": "^2.1.1", - "p-filter": "^3.0.0", - "p-map": "^6.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-5.0.0.tgz", - "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cpy": "^10.1.0", - "meow": "^12.0.1" - }, - "bin": { - "cpy": "cli.js" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "dev": true - }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.97", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz", - "integrity": "sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" - } - }, - "node_modules/esbuild-visualizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/esbuild-visualizer/-/esbuild-visualizer-0.7.0.tgz", - "integrity": "sha512-Vz22k+G2WT7GuCo7rbhaQwGbZ26lEhwzsctkEdQlu2SVrshoM4hzQeRpu/3DP596a9+9K2JyYsinuC6AC896Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "open": "^8.4.0", - "picomatch": "^4.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "esbuild-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-visualizer/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/esbuild-visualizer/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esbuild-visualizer/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/esbuild-visualizer/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esbuild-visualizer/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint": { - "version": "9.20.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz", - "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.11.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.20.0", - "@eslint/plugin-kit": "^0.2.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", - "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3", - "stable-hash": "^0.0.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jest": { - "version": "28.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz", - "integrity": "sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "engines": { - "node": "^16.10.0 || ^18.12.0 || >=20.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", - "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.0.0.tgz", - "integrity": "sha512-aXLyLemZ7qhLNn2oq+YpjT2Xed21+i29WGAYuyrGbU4r8oinB3i4XR4e62O3NY6qmm5qHEDoc/7d+gMsri3AfA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT", - "dependencies": { - "pure-rand": "^7.0.0" - }, - "engines": { - "node": ">=12.17.0" - } - }, - "node_modules/fast-check/node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true, - "license": "ISC" - }, - "node_modules/flow-bin": { - "version": "0.160.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.160.0.tgz", - "integrity": "sha512-hqb/1z7U9Jv+2hDdslAgdab6D4AUDrYIcF2zH/CKx9YgQtCeHfnzCcypzCNU7xmBm2+Mi9+1hqeB4OQX2adh0A==", - "dev": true, - "bin": { - "flow": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", - "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.4", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.6.4" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", - "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", - "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", - "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.4", - "@jest/types": "^29.6.3", - "babel-jest": "^29.6.4", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.4", - "jest-environment-node": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.4.tgz", - "integrity": "sha512-K6wfgUJ16DoMs02JYFid9lOsqfpoVtyJxpRlnTxUHzvZWBnnh2VNGRB9EC1Cro96TQdq5TtSjb3qUjNaJP9IyA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", - "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", - "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", - "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.4" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", - "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/environment": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.4", - "jest-worker": "^29.6.4", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", - "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/globals": "^29.6.4", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", - "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonml-html": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsonml-html/-/jsonml-html-1.2.0.tgz", - "integrity": "sha512-vg30gQFD5X+1nY3do43BW9Iiq4F5BZcysXc+ydPNu7O5AxaqxnaI9ikjTjlE9y9KaAvgTwTP6nOpifDqDoYmjg==", - "dev": true, - "license": "ISC" - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/junk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-synchronous": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/make-synchronous/-/make-synchronous-0.1.1.tgz", - "integrity": "sha512-Y4SxxqhaoyMDokJQ0AZz0E+bLhRkOSR7Z/IQoTKPdS6HYi3aobal2kMHoHHoqBadPWjf07P4K1FQLXOx3wf9Yw==", - "dev": true, - "dependencies": { - "subsume": "^3.0.0", - "type-fest": "^0.16.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-synchronous/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marked": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", - "integrity": "sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/marked-highlight": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/marked-highlight/-/marked-highlight-2.1.0.tgz", - "integrity": "sha512-peBvgGZZqUw074Vy/N8Y7/6JQhSnR54/T0Ozq2/fAIBzcYfVfExFdQJptIhQxreR1elpwvJRrqhp6S/Prk8prA==", - "dev": true, - "peerDependencies": { - "marked": ">=4 <12" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/microtime": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.1.1.tgz", - "integrity": "sha512-to1r7o24cDsud9IhN6/8wGmMx5R2kT0w2Xwm5okbYI3d1dk6Xv0m+Z+jg2vS9pt+ocgQHTCtgs/YuyJhySzxNg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.4.0" - }, - "engines": { - "node": ">= 14.13.0" - } - }, - "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dev": true, - "dependencies": { - "mime-db": "1.49.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/nanoid": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.10.tgz", - "integrity": "sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanospinner": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz", - "integrity": "sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.1.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz", - "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/env": "15.2.4", - "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.2.4", - "@next/swc-darwin-x64": "15.2.4", - "@next/swc-linux-arm64-gnu": "15.2.4", - "@next/swc-linux-arm64-musl": "15.2.4", - "@next/swc-linux-x64-gnu": "15.2.4", - "@next/swc-linux-x64-musl": "15.2.4", - "@next/swc-win32-arm64-msvc": "15.2.4", - "@next/swc-win32-x64-msvc": "15.2.4", - "sharp": "^0.33.5" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-sitemap": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.2.3.tgz", - "integrity": "sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==", - "dev": true, - "funding": [ - { - "url": "https://github.com/iamvishnusankar/next-sitemap.git" - } - ], - "dependencies": { - "@corex/deepmerge": "^4.0.43", - "@next/env": "^13.4.3", - "fast-glob": "^3.2.12", - "minimist": "^1.2.8" - }, - "bin": { - "next-sitemap": "bin/next-sitemap.mjs", - "next-sitemap-cjs": "bin/next-sitemap.cjs" - }, - "engines": { - "node": ">=14.18" - }, - "peerDependencies": { - "next": "*" - } - }, - "node_modules/next-sitemap/node_modules/@next/env": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.8.tgz", - "integrity": "sha512-YmiG58BqyZ2FjrF2+5uZExL2BrLr8RTQzLXNDJ8pJr0O+rPlOeDPXp1p1/4OrR3avDidzZo3D8QO2cuDv1KCkw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm-run-all/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/npm-run-all/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/npm-run-all/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^5.1.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-filter/node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", - "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "dev": true - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz", - "integrity": "sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/random-seed": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/random-seed/-/random-seed-0.3.0.tgz", - "integrity": "sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-stringify-safe": "^5.0.1" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/size-limit": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-11.2.0.tgz", - "integrity": "sha512-2kpQq2DD/pRpx3Tal/qRW1SYwcIeQ0iq8li5CJHQgOC+FtPn2BVmuDtzUCgNnpCrbgtfEHqh+iWzxK+Tq6C+RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes-iec": "^3.1.1", - "chokidar": "^4.0.3", - "jiti": "^2.4.2", - "lilconfig": "^3.1.3", - "nanospinner": "^1.2.2", - "picocolors": "^1.1.1", - "tinyglobby": "^0.2.11" - }, - "bin": { - "size-limit": "bin.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smob": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz", - "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-mod": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", - "dev": true, - "license": "MIT" - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/subsume": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/subsume/-/subsume-3.0.0.tgz", - "integrity": "sha512-6n/UfV8UWKwJNO8OAOiKntwEMihuBeeoJfzpL542C+OuvT4iWG9SwjrXkOmsxjb4SteHUsos9SvrdqZ9+ICwTQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/subsume/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/transducers-js": { - "version": "0.4.174", - "resolved": "https://registry.npmjs.org/transducers-js/-/transducers-js-0.4.174.tgz", - "integrity": "sha1-1YYsEO/0vj0zIqv2u3QuMPG7b8Q=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tstyche": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/tstyche/-/tstyche-3.5.0.tgz", - "integrity": "sha512-N4SUp/ZWaMGEcglpVFIzKez0GQEiBdfFDgcnqwv9O1mePZgos8N1cZCzNgGtPGo/w0ym04MjJcDnsw1sorEzgA==", - "dev": true, - "license": "MIT", - "bin": { - "tstyche": "build/bin.js" - }, - "engines": { - "node": ">=18.19" - }, - "funding": { - "url": "https://github.com/tstyche/tstyche?sponsor=1" - }, - "peerDependencies": { - "typescript": "4.x || 5.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.0.tgz", - "integrity": "sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.24.0", - "@typescript-eslint/parser": "8.24.0", - "@typescript-eslint/utils": "8.24.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - } - }, - "@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", - "dev": true - }, - "@babel/core": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz", - "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/traverse": "^7.26.8", - "@babel/types": "^7.26.8", - "@types/gensync": "^1.0.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz", - "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==", - "dev": true, - "requires": { - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", - "dev": true, - "requires": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" - } - }, - "@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", - "dev": true, - "requires": { - "@babel/types": "^7.26.10" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" - } - }, - "@babel/traverse": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", - "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/types": "^7.26.8", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@codemirror/autocomplete": { - "version": "6.18.6", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", - "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", - "dev": true, - "requires": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0" - } - }, - "@codemirror/commands": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz", - "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", - "dev": true, - "requires": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.4.0", - "@codemirror/view": "^6.27.0", - "@lezer/common": "^1.1.0" - } - }, - "@codemirror/lang-javascript": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.3.tgz", - "integrity": "sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==", - "dev": true, - "requires": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.6.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0", - "@lezer/javascript": "^1.0.0" - } - }, - "@codemirror/language": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz", - "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", - "dev": true, - "requires": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "@codemirror/lint": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz", - "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", - "dev": true, - "requires": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.35.0", - "crelt": "^1.0.5" - } - }, - "@codemirror/search": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.10.tgz", - "integrity": "sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==", - "dev": true, - "requires": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "crelt": "^1.0.5" - } - }, - "@codemirror/state": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", - "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", - "dev": true, - "requires": { - "@marijn/find-cluster-break": "^1.0.0" - } - }, - "@codemirror/theme-one-dark": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", - "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", - "dev": true, - "requires": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/highlight": "^1.0.0" - } - }, - "@codemirror/view": { - "version": "6.36.5", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.5.tgz", - "integrity": "sha512-cd+FZEUlu3GQCYnguYm3EkhJ8KJVisqqUsCOKedBoAt/d9c76JUUap6U0UrpElln5k6VyrEOYliMuDAKIeDQLg==", - "dev": true, - "requires": { - "@codemirror/state": "^6.5.0", - "style-mod": "^4.1.0", - "w3c-keyname": "^2.2.4" - } - }, - "@corex/deepmerge": { - "version": "4.0.43", - "resolved": "https://registry.npmjs.org/@corex/deepmerge/-/deepmerge-4.0.43.tgz", - "integrity": "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@emnapi/runtime": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", - "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", - "dev": true, - "optional": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.4.3" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - } - } - }, - "@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true - }, - "@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", - "dev": true, - "requires": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "@eslint/core": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", - "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.15" - } - }, - "@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "@eslint/js": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", - "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", - "dev": true - }, - "@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true - }, - "@eslint/plugin-kit": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", - "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", - "dev": true, - "requires": { - "@eslint/core": "^0.10.0", - "levn": "^0.4.1" - }, - "dependencies": { - "@eslint/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", - "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.15" - } - } - } - }, - "@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true - }, - "@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "requires": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "dependencies": { - "@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true - } - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", - "dev": true - }, - "@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "dev": true, - "optional": true - }, - "@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "dev": true, - "optional": true - }, - "@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "dev": true, - "optional": true, - "requires": { - "@emnapi/runtime": "^1.2.0" - } - }, - "@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "dev": true, - "optional": true - }, - "@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "dev": true, - "optional": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jdeniau/immutable-devtools": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@jdeniau/immutable-devtools/-/immutable-devtools-0.2.0.tgz", - "integrity": "sha512-kncZLhyszWkGz0wAr8eoHFvhczuZz5Ud71OiLIhe5PFQ05nnLgsFdr520Qy+eHhMSL6roJYFrZ73ZJTv48/fUg==", - "dev": true - }, - "@jest/console": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", - "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", - "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", - "dev": true, - "requires": { - "@jest/console": "^29.6.4", - "@jest/reporters": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-resolve-dependencies": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.4", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - } - }, - "@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "requires": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - } - }, - "@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", - "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "requires": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - } - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", - "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", - "dev": true, - "requires": { - "@jest/console": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", - "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.4", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", - "dev": true - }, - "@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", - "dev": true, - "requires": { - "@lezer/common": "^1.0.0" - } - }, - "@lezer/javascript": { - "version": "1.4.21", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.21.tgz", - "integrity": "sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==", - "dev": true, - "requires": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.1.3", - "@lezer/lr": "^1.3.0" - } - }, - "@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", - "dev": true, - "requires": { - "@lezer/common": "^1.0.0" - } - }, - "@marijn/find-cluster-break": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", - "dev": true - }, - "@next/env": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz", - "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==", - "dev": true - }, - "@next/swc-darwin-arm64": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz", - "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==", - "dev": true, - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz", - "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==", - "dev": true, - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz", - "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==", - "dev": true, - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz", - "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==", - "dev": true, - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz", - "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==", - "dev": true, - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz", - "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==", - "dev": true, - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz", - "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==", - "dev": true, - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz", - "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==", - "dev": true, - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true - }, - "@rollup/plugin-buble": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-buble/-/plugin-buble-1.0.3.tgz", - "integrity": "sha512-QYD9BKkJoof0FdCFeSYYhF6/Y8e0Mnf+098xGgmWOFJ4UPHlWujjqOYeVwEm2hJPOmlR5k7HPUdAjqtOWhN64Q==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/buble": "^0.19.2", - "buble": "^0.20.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "buble": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.20.0.tgz", - "integrity": "sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==", - "dev": true, - "requires": { - "acorn": "^6.4.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.2.0", - "chalk": "^2.4.2", - "magic-string": "^0.25.7", - "minimist": "^1.2.5", - "regexpu-core": "4.5.4" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@rollup/plugin-commonjs": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz", - "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "fdir": "^6.2.0", - "is-reference": "1.2.1", - "magic-string": "^0.30.3", - "picomatch": "^4.0.2" - }, - "dependencies": { - "fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "dev": true, - "requires": {} - }, - "magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true - } - } - }, - "@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.1.0" - } - }, - "@rollup/plugin-terser": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", - "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", - "dev": true, - "requires": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" - } - }, - "@rollup/plugin-typescript": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", - "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.1.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "dependencies": { - "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true - } - } - }, - "@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", - "dev": true, - "optional": true - }, - "@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", - "dev": true, - "optional": true - }, - "@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", - "dev": true, - "optional": true - }, - "@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@size-limit/esbuild-why": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/esbuild-why/-/esbuild-why-11.2.0.tgz", - "integrity": "sha512-VtoQbbkvFbF314LWEaEp1+IjG0DH+9w6nP//D6Gd48SEAPLoBgqk287mjYTF9WYxg9N5lo8KjpXxEFk4gOXNpw==", - "dev": true, - "requires": { - "esbuild-visualizer": "^0.7.0", - "open": "^10.1.0" - } - }, - "@size-limit/preset-small-lib": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-11.2.0.tgz", - "integrity": "sha512-RFbbIVfv8/QDgTPyXzjo5NKO6CYyK5Uq5xtNLHLbw5RgSKrgo8WpiB/fNivZuNd/5Wk0s91PtaJ9ThNcnFuI3g==", - "dev": true, - "requires": { - "@size-limit/esbuild": "11.2.0", - "@size-limit/file": "11.2.0", - "size-limit": "11.2.0" - }, - "dependencies": { - "@size-limit/esbuild": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/esbuild/-/esbuild-11.2.0.tgz", - "integrity": "sha512-vSg9H0WxGQPRzDnBzeDyD9XT0Zdq0L+AI3+77/JhxznbSCMJMMr8ndaWVQRhOsixl97N0oD4pRFw2+R1Lcvi6A==", - "dev": true, - "requires": { - "esbuild": "^0.25.0", - "nanoid": "^5.1.0" - } - }, - "@size-limit/file": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-11.2.0.tgz", - "integrity": "sha512-OZHE3putEkQ/fgzz3Tp/0hSmfVo3wyTpOJSRNm6AmcwX4Nm9YtTfbQQ/hZRwbBFR23S7x2Sd9EbqYzngKwbRoA==", - "dev": true, - "requires": {} - }, - "nanoid": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.4.tgz", - "integrity": "sha512-GTFcMIDgR7tqji/LpSY8rtg464VnJl/j6ypoehYnuGb+Y8qZUdtKB8WVCXon0UEZgFDbuUxpIl//6FHLHgXSNA==", - "dev": true - } - } - }, - "@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true - }, - "@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "dev": true, - "requires": { - "tslib": "^2.8.0" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/buble": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@types/buble/-/buble-0.19.2.tgz", - "integrity": "sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==", - "dev": true, - "requires": { - "magic-string": "^0.25.0" - } - }, - "@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "@types/gensync": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", - "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "14.17.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", - "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==", - "dev": true - }, - "@types/prismjs": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz", - "integrity": "sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==", - "dev": true - }, - "@types/random-seed": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@types/random-seed/-/random-seed-0.3.5.tgz", - "integrity": "sha512-CftxcDPAHgs0SLHU2dt+ZlDPJfGqLW3sZlC/ATr5vJDSe5tRLeOne7HMvCOJnFyF8e1U41wqzs3h6AMC613xtA==", - "dev": true - }, - "@types/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", - "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", - "dev": true, - "requires": { - "csstype": "^3.0.2" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", - "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/type-utils": "8.24.0", - "@typescript-eslint/utils": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" - } - }, - "@typescript-eslint/parser": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", - "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/typescript-estree": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", - "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", - "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "8.24.0", - "@typescript-eslint/utils": "8.24.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", - "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", - "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", - "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/typescript-estree": "8.24.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", - "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.24.0", - "eslint-visitor-keys": "^4.2.0" - } - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true, - "requires": {} - }, - "acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "requires": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - }, - "dependencies": { - "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - } - }, - "array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - } - }, - "array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - } - }, - "arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true - }, - "async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, - "babel-jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", - "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", - "dev": true, - "requires": { - "@jest/transform": "^29.6.4", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "requires": { - "lodash": "^4.17.4", - "platform": "^1.3.3" - } - }, - "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" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "requires": { - "run-applescript": "^7.0.0" - } - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "dev": true - }, - "call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "requires": { - "readdirp": "^4.0.1" - } - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "requires": { - "escape-string-regexp": "5.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - } - } - }, - "client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", - "dev": true, - "requires": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/commands": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/search": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0" - } - }, - "collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "optional": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "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 - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cp-file": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", - "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.10", - "nested-error-stacks": "^2.1.1", - "p-event": "^5.0.1" - } - }, - "cpy": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-10.1.0.tgz", - "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", - "dev": true, - "requires": { - "arrify": "^3.0.0", - "cp-file": "^10.0.0", - "globby": "^13.1.4", - "junk": "^4.0.1", - "micromatch": "^4.0.5", - "nested-error-stacks": "^2.1.1", - "p-filter": "^3.0.0", - "p-map": "^6.0.0" - }, - "dependencies": { - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } - } - }, - "cpy-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-5.0.0.tgz", - "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", - "dev": true, - "requires": { - "cpy": "^10.1.0", - "meow": "^12.0.1" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "dev": true - }, - "data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - } - }, - "data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - } - }, - "data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - } - }, - "data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "requires": {} - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "requires": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - } - }, - "default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "optional": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "requires": { - "webidl-conversions": "^7.0.0" - } - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "electron-to-chromium": { - "version": "1.5.97", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz", - "integrity": "sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - } - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true - }, - "es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - } - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "requires": { - "hasown": "^2.0.2" - } - }, - "es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "requires": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - } - }, - "esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" - } - }, - "esbuild-visualizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/esbuild-visualizer/-/esbuild-visualizer-0.7.0.tgz", - "integrity": "sha512-Vz22k+G2WT7GuCo7rbhaQwGbZ26lEhwzsctkEdQlu2SVrshoM4hzQeRpu/3DP596a9+9K2JyYsinuC6AC896Og==", - "dev": true, - "requires": { - "open": "^8.4.0", - "picomatch": "^4.0.0", - "yargs": "^17.6.2" - }, - "dependencies": { - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true - } - } - }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - }, - "eslint": { - "version": "9.20.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz", - "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.11.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.20.0", - "@eslint/plugin-kit": "^0.2.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-import-resolver-typescript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", - "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", - "dev": true, - "requires": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3", - "stable-hash": "^0.0.4" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "requires": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-plugin-jest": { - "version": "28.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz", - "integrity": "sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.37.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", - "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "dependencies": { - "resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true - }, - "espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "requires": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "dependencies": { - "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "fast-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.0.0.tgz", - "integrity": "sha512-aXLyLemZ7qhLNn2oq+YpjT2Xed21+i29WGAYuyrGbU4r8oinB3i4XR4e62O3NY6qmm5qHEDoc/7d+gMsri3AfA==", - "dev": true, - "requires": { - "pure-rand": "^7.0.0" - }, - "dependencies": { - "pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "requires": { - "flat-cache": "^4.0.0" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - } - }, - "flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true - }, - "flow-bin": { - "version": "0.160.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.160.0.tgz", - "integrity": "sha512-hqb/1z7U9Jv+2hDdslAgdab6D4AUDrYIcF2zH/CKx9YgQtCeHfnzCcypzCNU7xmBm2+Mi9+1hqeB4OQX2adh0A==", - "dev": true - }, - "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" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - } - }, - "get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, - "requires": { - "resolve-pkg-maps": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true - }, - "globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "requires": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "requires": { - "dunder-proto": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "requires": { - "function-bind": "^1.1.2" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "requires": { - "whatwg-encoding": "^2.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true - }, - "import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "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 - }, - "internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - } - }, - "is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "requires": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - } - }, - "is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "requires": { - "has-bigints": "^1.0.2" - } - }, - "is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "requires": { - "semver": "^7.6.3" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "requires": { - "hasown": "^2.0.2" - } - }, - "is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - } - }, - "is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - } - }, - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "requires": { - "is-docker": "^3.0.0" - } - }, - "is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - } - }, - "is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.16" - } - }, - "is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true - }, - "is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - } - }, - "is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "requires": { - "is-inside-container": "^1.0.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - } - }, - "jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", - "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", - "dev": true, - "requires": { - "@jest/core": "^29.6.4", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.6.4" - } - }, - "jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", - "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", - "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", - "dev": true, - "requires": { - "@jest/core": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", - "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.4", - "@jest/types": "^29.6.3", - "babel-jest": "^29.6.4", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.4", - "jest-environment-node": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" - } - }, - "jest-environment-jsdom": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.4.tgz", - "integrity": "sha512-K6wfgUJ16DoMs02JYFid9lOsqfpoVtyJxpRlnTxUHzvZWBnnh2VNGRB9EC1Cro96TQdq5TtSjb3qUjNaJP9IyA==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3", - "jsdom": "^20.0.0" - } - }, - "jest-environment-node": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", - "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - } - }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - }, - "jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - } - }, - "jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true - }, - "jest-resolve": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", - "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", - "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", - "dev": true, - "requires": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.4" - } - }, - "jest-runner": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", - "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", - "dev": true, - "requires": { - "@jest/console": "^29.6.4", - "@jest/environment": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.4", - "jest-worker": "^29.6.4", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "jest-runtime": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", - "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/globals": "^29.6.4", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.3" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", - "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.3", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonml-html": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsonml-html/-/jsonml-html-1.2.0.tgz", - "integrity": "sha512-vg30gQFD5X+1nY3do43BW9Iiq4F5BZcysXc+ydPNu7O5AxaqxnaI9ikjTjlE9y9KaAvgTwTP6nOpifDqDoYmjg==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - } - }, - "junk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", - "dev": true - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-synchronous": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/make-synchronous/-/make-synchronous-0.1.1.tgz", - "integrity": "sha512-Y4SxxqhaoyMDokJQ0AZz0E+bLhRkOSR7Z/IQoTKPdS6HYi3aobal2kMHoHHoqBadPWjf07P4K1FQLXOx3wf9Yw==", - "dev": true, - "requires": { - "subsume": "^3.0.0", - "type-fest": "^0.16.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "marked": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", - "integrity": "sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==", - "dev": true - }, - "marked-highlight": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/marked-highlight/-/marked-highlight-2.1.0.tgz", - "integrity": "sha512-peBvgGZZqUw074Vy/N8Y7/6JQhSnR54/T0Ozq2/fAIBzcYfVfExFdQJptIhQxreR1elpwvJRrqhp6S/Prk8prA==", - "dev": true, - "requires": {} - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "microtime": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.1.1.tgz", - "integrity": "sha512-to1r7o24cDsud9IhN6/8wGmMx5R2kT0w2Xwm5okbYI3d1dk6Xv0m+Z+jg2vS9pt+ocgQHTCtgs/YuyJhySzxNg==", - "dev": true, - "requires": { - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.4.0" - } - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dev": true, - "requires": { - "mime-db": "1.49.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "nanoid": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.10.tgz", - "integrity": "sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==", - "dev": true - }, - "nanospinner": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz", - "integrity": "sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==", - "dev": true, - "requires": { - "picocolors": "^1.1.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true - }, - "next": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz", - "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==", - "dev": true, - "requires": { - "@next/env": "15.2.4", - "@next/swc-darwin-arm64": "15.2.4", - "@next/swc-darwin-x64": "15.2.4", - "@next/swc-linux-arm64-gnu": "15.2.4", - "@next/swc-linux-arm64-musl": "15.2.4", - "@next/swc-linux-x64-gnu": "15.2.4", - "@next/swc-linux-x64-musl": "15.2.4", - "@next/swc-win32-arm64-msvc": "15.2.4", - "@next/swc-win32-x64-msvc": "15.2.4", - "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "sharp": "^0.33.5", - "styled-jsx": "5.1.6" - } - }, - "next-sitemap": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.2.3.tgz", - "integrity": "sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==", - "dev": true, - "requires": { - "@corex/deepmerge": "^4.0.43", - "@next/env": "^13.4.3", - "fast-glob": "^3.2.12", - "minimist": "^1.2.8" - }, - "dependencies": { - "@next/env": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.8.tgz", - "integrity": "sha512-YmiG58BqyZ2FjrF2+5uZExL2BrLr8RTQzLXNDJ8pJr0O+rPlOeDPXp1p1/4OrR3avDidzZo3D8QO2cuDv1KCkw==", - "dev": true - } - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true - }, - "node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, - "object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - } - }, - "object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, - "requires": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - } - }, - "optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - } - }, - "own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - } - }, - "p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dev": true, - "requires": { - "p-timeout": "^5.0.2" - } - }, - "p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", - "dev": true, - "requires": { - "p-map": "^5.1.0" - }, - "dependencies": { - "p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "requires": { - "aggregate-error": "^4.0.0" - } - } - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", - "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", - "dev": true - }, - "p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "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-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true - }, - "platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "dev": true - }, - "possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz", - "integrity": "sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==", - "dev": true - }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - } - } - }, - "prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true - }, - "pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "random-seed": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/random-seed/-/random-seed-0.3.0.tgz", - "integrity": "sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==", - "dev": true, - "requires": { - "json-stringify-safe": "^5.0.1" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "dev": true - }, - "react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "dev": true, - "requires": { - "scheduler": "^0.26.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } - } - }, - "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true - }, - "reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "requires": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", - "dev": true, - "requires": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", - "@types/estree": "1.0.6", - "fsevents": "~2.3.2" - } - }, - "run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "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 - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "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 - } - } - }, - "safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "dev": true - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, - "set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - } - }, - "set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "requires": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - } - }, - "sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "dev": true, - "optional": true, - "requires": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5", - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "optional": true - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "dev": true - }, - "side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - } - }, - "side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - } - }, - "side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - } - }, - "side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "optional": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "optional": true - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "size-limit": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-11.2.0.tgz", - "integrity": "sha512-2kpQq2DD/pRpx3Tal/qRW1SYwcIeQ0iq8li5CJHQgOC+FtPn2BVmuDtzUCgNnpCrbgtfEHqh+iWzxK+Tq6C+RQ==", - "dev": true, - "requires": { - "bytes-iec": "^3.1.1", - "chokidar": "^4.0.3", - "jiti": "^2.4.2", - "lilconfig": "^3.1.3", - "nanospinner": "^1.2.2", - "picocolors": "^1.1.1", - "tinyglobby": "^0.2.11" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smob": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz", - "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - } - }, - "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "style-mod": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", - "dev": true - }, - "styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "dev": true, - "requires": { - "client-only": "0.0.1" - } - }, - "subsume": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/subsume/-/subsume-3.0.0.tgz", - "integrity": "sha512-6n/UfV8UWKwJNO8OAOiKntwEMihuBeeoJfzpL542C+OuvT4iWG9SwjrXkOmsxjb4SteHUsos9SvrdqZ9+ICwTQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", - "dev": true, - "requires": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" - }, - "dependencies": { - "fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "dev": true, - "requires": {} - }, - "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true - } - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "transducers-js": { - "version": "0.4.174", - "resolved": "https://registry.npmjs.org/transducers-js/-/transducers-js-0.4.174.tgz", - "integrity": "sha1-1YYsEO/0vj0zIqv2u3QuMPG7b8Q=", - "dev": true - }, - "ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", - "dev": true, - "requires": {} - }, - "ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "tstyche": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/tstyche/-/tstyche-3.5.0.tgz", - "integrity": "sha512-N4SUp/ZWaMGEcglpVFIzKez0GQEiBdfFDgcnqwv9O1mePZgos8N1cZCzNgGtPGo/w0ym04MjJcDnsw1sorEzgA==", - "dev": true, - "requires": {} - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - } - }, - "typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "requires": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - } - }, - "typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - } - }, - "typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - } - }, - "typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true - }, - "typescript-eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.0.tgz", - "integrity": "sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "8.24.0", - "@typescript-eslint/parser": "8.24.0", - "@typescript-eslint/utils": "8.24.0" - } - }, - "unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "dev": true, - "requires": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "dev": true - }, - "w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "requires": { - "xml-name-validator": "^4.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true - }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "requires": { - "iconv-lite": "0.6.3" - } - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "requires": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - } - }, - "which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "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 - } - } - }, - "which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "requires": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - } - }, - "which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index e773736d96..c7f90ff5ff 100644 --- a/package.json +++ b/package.json @@ -34,128 +34,5 @@ "stateless", "sequence", "iteration" - ], - "publishKeys": [ - "name", - "version", - "description", - "license", - "homepage", - "author", - "repository", - "bugs", - "main", - "module", - "sideEffects", - "types", - "files", - "keywords" - ], - "engines": { - "npm": ">=7.0.0" - }, - "scripts": { - "test": "run-s format lint type-check build test:*", - "test:unit": "jest", - "test:types": "tstyche", - "format": "npm run lint:format -- --write", - "lint": "run-s lint:*", - "lint:format": "prettier --check \"{__tests__,src,type-definitions,website/src,perf,resources}/**/*{.js,.mjs,.ts,.tsx,.flow,.css}\"", - "lint:js": "eslint", - "type-check": "run-s type-check:*", - "type-check:ts": "tsc --project tsconfig.src.json && tsc --project type-definitions/tsconfig.json && tsc --project __tests__/tsconfig.json", - "type-check:flow": "flow check type-definitions/flow-tests --include-warnings", - "build": "run-s build:*", - "build:clean": "rimraf dist", - "build:dist": "rollup -c ./resources/rollup-config.mjs", - "build:types": "cpy \"./type-definitions/immutable.*\" dist", - "build:prepare": "./resources/prepare-dist.sh", - "build:stats": "node ./resources/dist-stats.mjs", - "website:build": "cd website && next build && next-sitemap", - "website:dev": "cd website && next dev --turbopack", - "check-build-output": "node ./resources/check-build-output.mjs", - "check-git-clean": "./resources/check-git-clean.sh", - "benchmark": "node ./resources/benchmark.js", - "publish": "echo 'ONLY PUBLISH VIA CI'; exit 1;" - }, - "prettier": { - "singleQuote": true, - "trailingComma": "es5" - }, - "devDependencies": { - "@codemirror/commands": "^6.8.1", - "@codemirror/lang-javascript": "^6.2.3", - "@codemirror/state": "^6.5.2", - "@codemirror/theme-one-dark": "^6.1.2", - "@codemirror/view": "^6.36.5", - "@eslint/js": "^9.20.0", - "@jdeniau/immutable-devtools": "^0.2.0", - "@jest/globals": "^29.7.0", - "@rollup/plugin-buble": "1.0.3", - "@rollup/plugin-commonjs": "28.0.2", - "@rollup/plugin-json": "6.1.0", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^12.1.2", - "@size-limit/esbuild-why": "^11.2.0", - "@size-limit/preset-small-lib": "^11.2.0", - "@types/prismjs": "^1.26.3", - "@types/random-seed": "0.3.5", - "@types/react": "19.1.0", - "benchmark": "2.1.4", - "codemirror": "^6.0.1", - "colors": "1.4.0", - "cpy-cli": "^5.0.0", - "eslint": "^9.20.1", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-react": "^7.37.4", - "fast-check": "^4.0.0", - "flow-bin": "0.160.0", - "globals": "^15.15.0", - "jest": "^29.0.0", - "jest-environment-jsdom": "^29.6.4", - "jsonml-html": "^1.2.0", - "make-synchronous": "0.1.1", - "marked": "^11.2.0", - "marked-highlight": "^2.1.0", - "microtime": "3.1.1", - "next": "15.2.4", - "next-sitemap": "4.2.3", - "npm-run-all": "4.1.5", - "prettier": "^3.5.0", - "prismjs": "^1.29.0", - "random-seed": "0.3.0", - "react": "19.1.0", - "react-dom": "19.1.0", - "rimraf": "2.7.1", - "rollup": "4.34.8", - "size-limit": "^11.2.0", - "transducers-js": "0.4.174", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "tstyche": "^3.5", - "typescript": "5.7", - "typescript-eslint": "^8.24.0" - }, - "size-limit": [ - { - "name": "all", - "path": "dist/immutable.es.js", - "import": "*", - "limit": "20 kB" - }, - { - "name": "List", - "path": "dist/immutable.es.js", - "import": "{ List }", - "limit": "20 kB" - }, - { - "name": "Seq", - "path": "dist/immutable.es.js", - "import": "{ Seq }", - "limit": "20 kB" - } ] -} +} \ No newline at end of file diff --git a/perf/List.js b/perf/List.js deleted file mode 100644 index 375155e46d..0000000000 --- a/perf/List.js +++ /dev/null @@ -1,114 +0,0 @@ -/* global Immutable */ -describe('List', function () { - describe('builds from array', function () { - var array2 = []; - for (var ii = 0; ii < 2; ii++) { - array2[ii] = ii; - } - - it('of 2', function () { - Immutable.List(array2); - }); - - var array8 = []; - for (var ii = 0; ii < 8; ii++) { - array8[ii] = ii; - } - - it('of 8', function () { - Immutable.List(array8); - }); - - var array32 = []; - for (var ii = 0; ii < 32; ii++) { - array32[ii] = ii; - } - - it('of 32', function () { - Immutable.List(array32); - }); - - var array1024 = []; - for (var ii = 0; ii < 1024; ii++) { - array1024[ii] = ii; - } - - it('of 1024', function () { - Immutable.List(array1024); - }); - }); - - describe('pushes into', function () { - it('2 times', function () { - var list = Immutable.List(); - for (var ii = 0; ii < 2; ii++) { - list = list.push(ii); - } - }); - - it('8 times', function () { - var list = Immutable.List(); - for (var ii = 0; ii < 8; ii++) { - list = list.push(ii); - } - }); - - it('32 times', function () { - var list = Immutable.List(); - for (var ii = 0; ii < 32; ii++) { - list = list.push(ii); - } - }); - - it('1024 times', function () { - var list = Immutable.List(); - for (var ii = 0; ii < 1024; ii++) { - list = list.push(ii); - } - }); - }); - - describe('pushes into transient', function () { - it('2 times', function () { - var list = Immutable.List().asMutable(); - for (var ii = 0; ii < 2; ii++) { - list = list.push(ii); - } - list = list.asImmutable(); - }); - - it('8 times', function () { - var list = Immutable.List().asMutable(); - for (var ii = 0; ii < 8; ii++) { - list = list.push(ii); - } - list = list.asImmutable(); - }); - - it('32 times', function () { - var list = Immutable.List().asMutable(); - for (var ii = 0; ii < 32; ii++) { - list = list.push(ii); - } - list = list.asImmutable(); - }); - - it('1024 times', function () { - var list = Immutable.List().asMutable(); - for (var ii = 0; ii < 1024; ii++) { - list = list.push(ii); - } - list = list.asImmutable(); - }); - }); - - describe('some', function () { - it('100 000 items', () => { - const list = Immutable.List(); - for (let i = 0; i < 100000; i++) { - list.push(i); - } - list.some((item) => item === 50000); - }); - }); -}); diff --git a/perf/Map.js b/perf/Map.js deleted file mode 100644 index b5758c7074..0000000000 --- a/perf/Map.js +++ /dev/null @@ -1,138 +0,0 @@ -/* global Immutable */ -describe('Map', function () { - describe('builds from an object', function () { - var obj2 = {}; - for (var ii = 0; ii < 2; ii++) { - obj2['x' + ii] = ii; - } - - it('of 2', function () { - Immutable.Map(obj2); - }); - - var obj8 = {}; - for (var ii = 0; ii < 8; ii++) { - obj8['x' + ii] = ii; - } - - it('of 8', function () { - Immutable.Map(obj8); - }); - - var obj32 = {}; - for (var ii = 0; ii < 32; ii++) { - obj32['x' + ii] = ii; - } - - it('of 32', function () { - Immutable.Map(obj32); - }); - - var obj1024 = {}; - for (var ii = 0; ii < 1024; ii++) { - obj1024['x' + ii] = ii; - } - - it('of 1024', function () { - Immutable.Map(obj1024); - }); - }); - - describe('builds from an array', function () { - var array2 = []; - for (var ii = 0; ii < 2; ii++) { - array2[ii] = ['x' + ii, ii]; - } - - it('of 2', function () { - Immutable.Map(array2); - }); - - var array8 = []; - for (var ii = 0; ii < 8; ii++) { - array8[ii] = ['x' + ii, ii]; - } - - it('of 8', function () { - Immutable.Map(array8); - }); - - var array32 = []; - for (var ii = 0; ii < 32; ii++) { - array32[ii] = ['x' + ii, ii]; - } - - it('of 32', function () { - Immutable.Map(array32); - }); - - var array1024 = []; - for (var ii = 0; ii < 1024; ii++) { - array1024[ii] = ['x' + ii, ii]; - } - - it('of 1024', function () { - Immutable.Map(array1024); - }); - }); - - describe('builds from a List', function () { - var list2 = Immutable.List().asMutable(); - for (var ii = 0; ii < 2; ii++) { - list2 = list2.push(Immutable.List(['x' + ii, ii])); - } - list2 = list2.asImmutable(); - - it('of 2', function () { - Immutable.Map(list2); - }); - - var list8 = Immutable.List().asMutable(); - for (var ii = 0; ii < 8; ii++) { - list8 = list8.push(Immutable.List(['x' + ii, ii])); - } - list8 = list8.asImmutable(); - - it('of 8', function () { - Immutable.Map(list8); - }); - - var list32 = Immutable.List().asMutable(); - for (var ii = 0; ii < 32; ii++) { - list32 = list32.push(Immutable.List(['x' + ii, ii])); - } - list32 = list32.asImmutable(); - - it('of 32', function () { - Immutable.Map(list32); - }); - - var list1024 = Immutable.List().asMutable(); - for (var ii = 0; ii < 1024; ii++) { - list1024 = list1024.push(Immutable.List(['x' + ii, ii])); - } - list1024 = list1024.asImmutable(); - - it('of 1024', function () { - Immutable.Map(list1024); - }); - }); - - describe('merge a map', () => { - [2, 8, 32, 1024].forEach((size) => { - const obj1 = {}; - const obj2 = {}; - for (let ii = 0; ii < size; ii++) { - obj1['k' + ii] = '1_' + ii; - obj2['k' + ii] = '2_' + ii; - } - - const map1 = Immutable.Map(obj1); - const map2 = Immutable.Map(obj2); - - it('of ' + size, () => { - map1.merge(map2); - }); - }); - }); -}); diff --git a/perf/Record.js b/perf/Record.js deleted file mode 100644 index 712c077a58..0000000000 --- a/perf/Record.js +++ /dev/null @@ -1,80 +0,0 @@ -/* global Immutable */ -describe('Record', () => { - describe('builds from an object', () => { - [2, 5, 10, 100, 1000].forEach((size) => { - var defaults = {}; - var values = {}; - for (var ii = 0; ii < size; ii++) { - defaults['x' + ii] = null; - values['x' + ii] = ii; - } - - var Rec = Immutable.Record(defaults); - - it('of ' + size, () => { - Rec(values); - }); - }); - }); - - describe('update random using set()', () => { - [2, 5, 10, 100, 1000].forEach((size) => { - var defaults = {}; - var values = {}; - for (var ii = 0; ii < size; ii++) { - defaults['x' + ii] = null; - values['x' + ii] = ii; - } - - var Rec = Immutable.Record(defaults); - var rec = Rec(values); - - var key = 'x' + Math.floor(size / 2); - - it('of ' + size, () => { - rec.set(key, 999); - }); - }); - }); - - describe('access random using get()', () => { - [2, 5, 10, 100, 1000].forEach((size) => { - var defaults = {}; - var values = {}; - for (var ii = 0; ii < size; ii++) { - defaults['x' + ii] = null; - values['x' + ii] = ii; - } - - var Rec = Immutable.Record(defaults); - var rec = Rec(values); - - var key = 'x' + Math.floor(size / 2); - - it('of ' + size, () => { - rec.get(key); - }); - }); - }); - - describe('access random using property', () => { - [2, 5, 10, 100, 1000].forEach((size) => { - var defaults = {}; - var values = {}; - for (var ii = 0; ii < size; ii++) { - defaults['x' + ii] = null; - values['x' + ii] = ii; - } - - var Rec = Immutable.Record(defaults); - var rec = Rec(values); - - var key = 'x' + Math.floor(size / 2); - - it('of ' + size, () => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - rec[key]; - }); - }); - }); -}); diff --git a/perf/toJS.js b/perf/toJS.js deleted file mode 100644 index d924d332d8..0000000000 --- a/perf/toJS.js +++ /dev/null @@ -1,22 +0,0 @@ -/* global Immutable */ -describe('toJS', () => { - const array32 = []; - for (let ii = 0; ii < 32; ii++) { - array32[ii] = ii; - } - const list = Immutable.List(array32); - - it('List of 32', () => { - Immutable.toJS(list); - }); - - const obj32 = {}; - for (let ii = 0; ii < 32; ii++) { - obj32[ii] = ii; - } - const map = Immutable.Map(obj32); - - it('Map of 32', () => { - Immutable.toJS(map); - }); -}); diff --git a/resources/benchmark.js b/resources/benchmark.js deleted file mode 100644 index a2e77aa399..0000000000 --- a/resources/benchmark.js +++ /dev/null @@ -1,283 +0,0 @@ -var Benchmark = require('benchmark'); -var child_process = require('child_process'); -var fs = require('fs'); -var path = require('path'); -var vm = require('vm'); - -function promisify(fn) { - return function () { - return new Promise((resolve, reject) => - fn.apply( - this, - Array.prototype.slice - .call(arguments) - .concat((err, out) => (err ? reject(err) : resolve(out))) - ) - ); - }; -} - -var exec = promisify(child_process.exec); -var readdir = promisify(fs.readdir); -var readFile = promisify(fs.readFile); - -var perfDir = path.resolve(__dirname, '../perf/'); - -Promise.all([ - readFile(path.resolve(__dirname, '../dist/immutable.js'), { - encoding: 'utf8', - }), - exec('git show main:dist/immutable.js'), -]) - .then(function (args) { - var newSrc = args[0]; - var oldSrc = args[1].toString({ encoding: 'utf8' }).slice(0, -1); // wtf, comma? - return newSrc === oldSrc ? [newSrc] : [newSrc, oldSrc]; - }) - .then(function (sources) { - return sources.map(function (source) { - var sourceExports = {}; - var sourceModule = { exports: sourceExports }; - vm.runInNewContext( - source, - { - require: require, - module: sourceModule, - exports: sourceExports, - }, - 'immutable.js' - ); - return sourceModule.exports; - }); - }) - .then(function (modules) { - return readdir(perfDir) - .then(function (filepaths) { - return Promise.all( - filepaths.map(function (filepath) { - return readFile(path.resolve(perfDir, filepath)).then( - function (source) { - return { - path: filepath, - source: source, - }; - } - ); - }) - ); - }) - .then(function (sources) { - var tests = {}; - - modules.forEach(function (Immutable, version) { - sources.forEach(function (source) { - var description = []; - var beforeStack = []; - var beforeFn; - var prevBeforeFn; - - function describe(name, fn) { - description.push(name); - beforeStack.push(prevBeforeFn); - prevBeforeFn = beforeFn; - fn(); - beforeFn = prevBeforeFn; - prevBeforeFn = beforeStack.pop(); - description.pop(); - } - - function beforeEach(fn) { - beforeFn = !prevBeforeFn - ? fn - : (function (prevBeforeFn) { - return function () { - prevBeforeFn(); - fn(); - }; - })(prevBeforeFn); - } - - function it(name, test) { - var fullName = description.join(' > ') + ' ' + name; - ( - tests[fullName] || - (tests[fullName] = { - description: fullName, - tests: [], - }) - ).tests[version] = { - before: beforeFn, - test: test, - }; - } - - vm.runInNewContext( - source.source, - { - describe: describe, - it: it, - beforeEach: beforeEach, - console: console, - Immutable: Immutable, - }, - source.path - ); - }); - }); - - // Array<{ - // description: String, - // tests: Array<{ - // before: Function, - // test: Function - // }> // one per module, [new,old] or just [new] - // }> - return Object.keys(tests).map(function (key) { - return tests[key]; - }); - }); - }) - .then(function (tests) { - var suites = []; - - tests.forEach(function (test) { - var suite = new Benchmark.Suite(test.description, { - onStart: function (event) { - console.log(event.currentTarget.name.bold); - process.stdout.write(' ...running... '.gray); - }, - onComplete: function (event) { - process.stdout.write('\r\x1B[K'); - var stats = Array.prototype.map.call( - event.currentTarget, - function (target) { - return target.stats; - } - ); - - function pad(n, s) { - return Array(Math.max(0, 1 + n - s.length)).join(' ') + s; - } - - function fmt(b) { - return Math.floor(b) - .toString() - .replace(/\B(?=(\d{3})+(?!\d))/g, ','); - } - - function pct(p) { - return Math.floor(p * 10000) / 100 + '%'; - } - - var dualRuns = stats.length === 2; - - if (dualRuns) { - var prevMean = 1 / stats[1].mean; - // var prevLow = 1 / (stats[1].mean + stats[1].deviation * 2); - // var prevHigh = 1 / (stats[1].mean - stats[1].deviation * 2); - - // console.log( - // (dualRuns ? ' Old: '.bold.gray : ' ') + - // ( - // pad(9, fmt(prevLow)) + ' ' + - // pad(9, fmt(prevMean)) + ' ' + - // pad(9, fmt(prevHigh)) + ' ops/sec' - // ) - // ); - - var prevLowmoe = 1 / (stats[1].mean + stats[1].moe); - var prevHighmoe = 1 / (stats[1].mean - stats[1].moe); - - console.log( - (dualRuns ? ' Old: '.bold.gray : ' ') + - (pad(9, fmt(prevLowmoe)) + - ' ' + - pad(9, fmt(prevMean)) + - ' ' + - pad(9, fmt(prevHighmoe)) + - ' ops/sec') - ); - } - - var mean = 1 / stats[0].mean; - // var low = 1 / (stats[0].mean + stats[0].deviation * 2); - // var high = 1 / (stats[0].mean - stats[0].deviation * 2); - - // console.log( - // (dualRuns ? ' New: '.bold.gray : ' ') + - // ( - // pad(9, fmt(low)) + ' ' + - // pad(9, fmt(mean)) + ' ' + - // pad(9, fmt(high)) + ' ops/sec' - // ) - // ); - - var lowmoe = 1 / (stats[0].mean + stats[0].moe); - var highmoe = 1 / (stats[0].mean - stats[0].moe); - - console.log( - (dualRuns ? ' New: '.bold.gray : ' ') + - (pad(9, fmt(lowmoe)) + - ' ' + - pad(9, fmt(mean)) + - ' ' + - pad(9, fmt(highmoe)) + - ' ops/sec') - ); - - if (dualRuns) { - var diffMean = (mean - prevMean) / prevMean; - - var comparison = event.currentTarget[1].compare( - event.currentTarget[0] - ); - var comparison2 = event.currentTarget[0].compare( - event.currentTarget[1] - ); - console.log(' compare: ' + comparison + ' ' + comparison2); - - console.log(' diff: ' + pct(diffMean)); - - function sq(p) { - return p * p; - } - - var rme = Math.sqrt( - (sq(stats[0].rme / 100) + sq(stats[1].rme / 100)) / 2 - ); - // console.log('rmeN: ' + stats[0].rme); - // console.log('rmeO: ' + stats[1].rme); - console.log(' rme: ' + pct(rme)); - } - - // console.log(stats); - }, - }); - - test.tests.forEach(function (run) { - suite.add({ - fn: run.test, - onStart: run.before, - onCycle: run.before, - }); - }); - - suites.push(suite); - }); - - var onBenchComplete; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - var promise = new Promise(function (_resolve) { - onBenchComplete = _resolve; - }); - - Benchmark.invoke(suites, 'run', { onComplete: onBenchComplete }); - - return onBenchComplete; - }) - .then(function () { - console.log('all done'); - }) - .catch(function (error) { - console.log('ugh', error.stack); - }); diff --git a/resources/check-build-output.mjs b/resources/check-build-output.mjs deleted file mode 100644 index 1cfffc5b84..0000000000 --- a/resources/check-build-output.mjs +++ /dev/null @@ -1,45 +0,0 @@ -import fs from 'node:fs'; -import path from 'node:path'; - -const packageJsonContent = JSON.parse(fs.readFileSync('package.json', 'utf8')); - -// remove "dist/" prefix from the file names -const distPrefix = 'dist'; -const removeDistPrefix = (file) => path.basename(file); - -const expectedFiles = [ - removeDistPrefix(packageJsonContent.main), - removeDistPrefix(packageJsonContent.module), - removeDistPrefix(packageJsonContent.types), - - // extra files that are not in package.json - 'immutable.min.js', - 'immutable.js.flow', -]; - -console.log('expected files: ', expectedFiles); - -const filesInDistDir = fs - .readdirSync(distPrefix) - .filter((file) => !file.startsWith('.')); - -// There should be no extra files in the dist directory and all expected files should be present -const extraFiles = filesInDistDir.filter( - (file) => !expectedFiles.includes(file) -); -if (extraFiles.length > 0) { - console.error('Extra files found in dist directory:', extraFiles); -} - -const missingFiles = expectedFiles.filter( - (file) => !filesInDistDir.includes(file) -); -if (missingFiles.length > 0) { - console.error('Missing files in dist directory:', missingFiles); -} - -if (extraFiles.length > 0 || missingFiles.length > 0) { - process.exit(1); -} - -console.log('All expected files are present in the dist directory.'); diff --git a/resources/check-git-clean.sh b/resources/check-git-clean.sh deleted file mode 100755 index 3ea73552f8..0000000000 --- a/resources/check-git-clean.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -e - -if ! git diff --quiet; then echo " - -$(tput setf 4)The CI build resulted in additional changed files. -Typically this is due to not running $(tput smul)npm test$(tput rmul) locally before -submitting a pull request. - -The following changes were found:$(tput sgr0) -"; - - git diff --exit-code; -fi; diff --git a/resources/copyright.mjs b/resources/copyright.mjs deleted file mode 100644 index 7323639f46..0000000000 --- a/resources/copyright.mjs +++ /dev/null @@ -1,8 +0,0 @@ -import fs from 'fs'; - -const copyright = fs.readFileSync('./LICENSE', 'utf-8'); -const lines = copyright.trim().split('\n'); - -export default `/**\n * @license\n${lines - .map((line) => ` * ${line}`) - .join('\n')}\n */`; diff --git a/resources/dist-stats.mjs b/resources/dist-stats.mjs deleted file mode 100644 index 7c6079db38..0000000000 --- a/resources/dist-stats.mjs +++ /dev/null @@ -1,92 +0,0 @@ -import fs from 'node:fs/promises'; -import { deflate } from 'zlib'; -import 'colors'; - -const VERIFY_AGAINST_VERSION = '4'; - -const deflateContent = (content) => - new Promise((resolve, reject) => - deflate(content, (error, out) => (error ? reject(error) : resolve(out))) - ); - -const space = (n, s) => - new Array(Math.max(0, 10 + n - (s || '').length)).join(' ') + (s || ''); - -const bytes = (b) => - `${b.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')} bytes`; - -const diff = (n, o) => { - const d = n - o; - return d === 0 ? '' : d < 0 ? ` ${bytes(d)}`.green : ` +${bytes(d)}`.red; -}; - -const percentage = (s, b) => ` ${Math.floor(10000 * (1 - s / b)) / 100}%`.grey; - -let bundlephobaInfoCache; - -async function bundlephobaInfo(key) { - if (!bundlephobaInfoCache) { - try { - const res = await fetch( - `https://bundlephobia.com/api/size?package=immutable@${VERIFY_AGAINST_VERSION}` - ); - - if (res.status !== 200) { - throw new Error( - `Unable to fetch bundlephobia in dist-stats.mjs. Status code is "${res.status}"` - ); - } - - bundlephobaInfoCache = await res.json(); - } catch (err) { - console.error(err.message); - - throw err; - } - } - - return bundlephobaInfoCache[key]; -} - -/** - * - * @param {PromiseFulfilledResult} promise - */ -function promiseNumberValue(promise) { - if (!promise || !promise.value) { - return null; - } - - const value = promise.value; - - return value === null || typeof value === 'number' - ? value - : Number(Buffer.byteLength(value, 'utf8')); -} - -Promise.allSettled([ - fs.readFile('dist/immutable.js'), - fs.readFile('dist/immutable.min.js'), - bundlephobaInfo('size'), - fs.readFile('dist/immutable.min.js').then(deflateContent), - bundlephobaInfo('gzip'), -]).then(([rawNew, minNew, minOld, zipNew, zipOld]) => { - console.log(` Raw: ${space(14, bytes(promiseNumberValue(rawNew)).cyan)}`); - if (minOld.status === 'fulfilled') { - console.log( - ` Min: ${space(14, bytes(promiseNumberValue(minNew)).cyan)}${percentage( - minNew.value, - rawNew.value - )}${space(15, diff(promiseNumberValue(minNew), promiseNumberValue(minOld)))}` - ); - } - - if (zipOld.status === 'fulfilled') { - console.log( - ` Zip: ${space(14, bytes(promiseNumberValue(zipNew)).cyan)}${percentage( - promiseNumberValue(zipNew), - promiseNumberValue(rawNew) - )}${space(15, diff(promiseNumberValue(zipNew), promiseNumberValue(zipOld)))}` - ); - } -}); diff --git a/resources/identity.ai b/resources/identity.ai deleted file mode 100644 index 44a1d29661..0000000000 --- a/resources/identity.ai +++ /dev/null @@ -1,2208 +0,0 @@ -%PDF-1.5 %âãÏÓ -1 0 obj <>/OCGs[5 0 R 6 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - identity - - - Adobe Illustrator CC 2014 (Macintosh) - 2014-10-30T16:19:54-07:00 - 2014-10-30T16:19:54-07:00 - 2014-10-30T16:19:54-07:00 - - - - 256 - 108 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAbAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7vhYuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KpJrfnXytoV2lpq2oR2ly8YlSNw5JQkqG+EHupwgFICm3n7ycl9BY PqkK3dwImhjbkOQnUPEakU+JWBG+NJ4Smup6np+l2Mt9qE621pCAZZnNFFTQfeTTAgBJT+Y3kkWC X51aIWbytAk1HoZEVXZfs12V1OGinh93zCeafqFlqNlDe2My3FpOvOGZDVWGBBFJF/ysjyOZZ4hq 8Je2DGYDmQAhoxqFoae2Giy4Cr2fnryle2F5qFrqUctnYBTeTAPSMPULWq13p2xpHChB+Z/kIwmb 9Mw+mGCFqSfaIJA+z7Y0V4dr2+YWr+af5fswUa1CSTQDjJ3/ANjjwleH3fMJlrPnLyxot5FZ6rqE VpczKHjiflUqWKhtgQBVT1xooAtGavrOmaPYtfancLbWiFVaV6kAsaAbAnrgUC0ntPzK8iXUoih1 u25nYCRjGCT7yBRhorXu+aM1zzl5Y0KaKHVtQjtJZl9SJXDHktaV+EHviAnhRN15g0a10VdbuLpY 9KaOOVbohuPCYqI2oBX4uY7Y0ikmj/NHyBLIsaazCzuQqikm5JoP2caKRH3fMMpwMXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXz7/wA5BD/ncrX/ALZkX/UTNl2Pl8WEuvu/SxbzmUGqoWFR +jdLFabj/Qodxgj0ckkVK/L7yreaPzC1zX9G0zTL9h6WnL+9etTczCoSR6/yx0+kk99pRj3NRlW5 /t/Z1WXlF8kWgAFBrt5QU2oLe27ZEf71tmAMkh/tn61TQvzC13R/LN/oVm/G3vt4p6nlbcv74J/r r08Oo3wmO+7UDtt/Z3/sSbSmU/XKDiv1GYDx+1398JH3s4kHly4D97MPJ4A/LrzxTb9xYfjXIdR7 /wBLKYA/0v8AvAhfJ/lfSNZ8u+Zbi9nlgk0uNLmzWFlUNIIJSA/JWqKqOlMkL5sMsgJcPK5foCh+ WXljSfMutS2mr3M8EEFsbhGhdVJkWVVAbmsgpRvDJEHoGuWSogyP4soHz15gXX/Neo6iG5W88pit W8IIv3cbb9OVORyMRQZ2OR67ft/033PQ/MXmL9O/kXFcyNW6t5YLS7rufVhcLU17svFj88jEVJEj 6SfxzeS3JtxzXifUV5vUJdWXiR+6CIByUqQamvh9JjyHwb8+05A8rl3edUPJlPnhzJpXlEvcLdH9 DN+9B5D4WkATfvHTifcYjr7x97EAGv6sv9w9L83/APkgoP8Atm6X/wATt8Y/W4x+l4/ocnlyPUOO qxXskv1pfq/1SeGONV5inJHjkJ38CMRfD8HKyishF/x7cq57bW+r8qaHYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXhf56aHrN/wCbbaWxsZ7qL9HRxmSKNnUMJ5WIJA60OX4gSGucwLsjcd47 2OeZ/LOvT65bD9GXMkDWWmRyMsT8R6dpCsgJA2oQQcYwLbLNAWCRvXUd6/V/ywv7Gy1OaJXvPTkR NLhiq7mNmDO7KvdR8P3nwy84yHBjqozoX069PJTuvLvmF/Jdqg0u69UaxdzND6T8wjwW/FiKdCVI ykQPLyc2eeJkZWN53zCK0n8rrq7j0i4nD2sMqt+lrd6rIDG7cOKn+daD265fHETTgz1UY2B5e4/2 FLfKvknX7u9ntbmyuLOOWznQTyxsqB+JZKkjoWoMqMCT8XJGeMYncfTXMd6GTT/PGm2uoaQlnexw X4ijvYYrf1klEBqnGUBqU/yDv3wGBB5MxljIXZ5Dly5V8NnoPkXydfWXkjzHJfq8d/qEDm3s1oWH CGQRqaV+Ji/TCRKPLqGk5IZJ2T9Mr/HyYZ5X0jzPptrrDrpN6LqawNtahYXqZJZkBPT9mPkfmMdw eXNncJAbi4+Y57/rUtL/AC+80XlpK6Wj2qsPRkiuJPRZ1Uq9eJjOxYA9euIxz/H9qZ6nANjfL+cP +JNfNVstL83p5X1rSjo16LS8a3uIy0MhAnhcKwBAAq6vU7fsjIiJBHe2TyRkJEHb3jnte6DbQ/Nc 9ulgmj3Bi+stcoZLf025uAtDMx2T22/oxhKqr8fJOXPi4zMG9yase/8AnH7r6Jv5p8k67Yaf5dtE tZrxo7Gb6y9sjSqkk8sj8BTb4eYB3wGMiTt1CMebGKs7VLu6iupCIml/M+88pXeiXllevpMVnBHa xPZCL+5uIBGFdV5NRFPfBEerzTk4eHY7VzND/fFJdO07zfYzlrXSJmMswkpPYJKQSezyK5H0ZIRk BVfj5Lky4pSMhLnK+YHP3T/Q+osx0OxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpDr0cjX iFVJHpj/AIk2Z2lIEfi6rXRJmPchryGQ3KfCePCOv/ACuWY5Cvm1ZoHiHuH3KbWtFcjc7cB9OSE2 Bxc17Qy/o9BxNfWY0/2K4OIcfwZGB8Mf1v0BatrXgTt/OMJmxGLk61t5CzhgVBRt8ZyC4sZ39y1B eRxyRorem9PUoKg06b4TwkglA4wCByKNsLRTZzmQkOBVVHiAaZTln6hTk4MXoNoW1hlCyngxfj8A HjUDLJyGzRigaO26mltMVPRa7EHJGYYDHJWiS5FlPGY29NipBptyB/pkZGPEDbZES4CK2UPTnKBO GwNa5OxdtfDKqpEXltIkFqq/HRCSR0qWJpleOYJLbmxkRiPJUL6k9k8UqH0AihPhp0Zab/LI1ASs c2d5TAgj01+pCwrcIwATuDuK5bIgtEBIdGWZqnfOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KpbqUbtOpVSRxHT5nMnCRTh6iJMvgpTwyGZfhJHFK/8CMlGQprnA38mntSquR8X8gxE1OKrcYp fqqjia8yafQMeIcS8J4Pi2trXgTt/OMTNRi5LYIJCzAqQCp3wykEQgVoW5RXQK3FvtUFQae+G4nd FSFhFWtuRby8vtEVA+g5VOe4b8WP0lQgimUSURuRWi0HeuTkRs1QiRey1LaYg7UrsQcJmGIxyXIk 4t5EKHi1CDTuDgJFgsgJcJFLPTnKhOG1a9MlY5sOGVVSpcW8ixwqByopqR7muRjIWWzJjIAXVvGt 2jdT6YUBdvAimD03afWY0eSlGs6EAJ37iuSJBa4iQ6J1mG7J2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxVQnVi4oCdsnEtcwbaZGLDY0oP1YQUEG22gIDEb/y4iSmC3g/pgUNa/wAMb3RRpcsF eJO38wxMkiC1I2JIIIqOuJKBEtcZRVaGh64bC0VWONljavUjpkSd2cY0FNFdQ3wmpFBhJDAAhywy EHt88TIKIlwV+DLxO+NhQDTXCQjjx2rXDYWiueNgFAFaDemAFJiXfvShUg0ptt747LvTSiQdF/DC aQAUTlTc7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWTf7hv+Xf8A4TAyd/uG/wCXf/hMVd/uG/5d/wDhMVd/ uG/5d/8AhMVd/uG/5d/+ExV3+4b/AJd/+ExV3+4b/l3/AOExV3+4b/l3/wCExV3+4b/l3/4TFXf7 hv8Al3/4TFXf7hv+Xf8A4TFXf7hv+Xf/AITFXf7hv+Xf/hMVd/uG/wCXf/hMVd/uG/5d/wDhMVd/ uG/5d/8AhMVd/uG/5d/+ExV3+4b/AJd/+ExV3+4b/l3/AOExV3+4b/l3/wCExV3+4b/l3/4TFXf7 hv8Al3/4TFXf7hv+Xf8A4TFXf7hv+Xf/AITFXf7hv+Xf/hMVd/uG/wCXf/hMVd/uG/5d/wDhMVd/ uG/5d/8AhMVd/uG/5d/+ExV3+4b/AJd/+ExV3+4b/l3/AOExV3+4b/l3/wCExV//2Q== - - - - proof:pdf - uuid:65E6390686CF11DBA6E2D887CEACB407 - xmp.did:5962c3f6-6a0f-4199-90f1-c6dea6f71387 - uuid:15bcb097-31e4-8d46-bdb6-d8c19fdf6524 - - uuid:1abccb90-0c26-4942-b156-fd2eb962e3e1 - xmp.did:58fdc1b8-1448-3a44-9e20-282d8ec1cf95 - uuid:65E6390686CF11DBA6E2D887CEACB407 - proof:pdf - - - - - saved - xmp.iid:5962c3f6-6a0f-4199-90f1-c6dea6f71387 - 2014-10-30T16:19:52-07:00 - Adobe Illustrator CC 2014 (Macintosh) - / - - - - Web - Document - 1 - True - False - - 960.000000 - 560.000000 - Pixels - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 0 - 0 - 0 - - - RGB Red - RGB - PROCESS - 255 - 0 - 0 - - - RGB Yellow - RGB - PROCESS - 255 - 255 - 0 - - - RGB Green - RGB - PROCESS - 0 - 255 - 0 - - - RGB Cyan - RGB - PROCESS - 0 - 255 - 255 - - - RGB Blue - RGB - PROCESS - 0 - 0 - 255 - - - RGB Magenta - RGB - PROCESS - 255 - 0 - 255 - - - R=193 G=39 B=45 - RGB - PROCESS - 193 - 39 - 45 - - - R=237 G=28 B=36 - RGB - PROCESS - 237 - 28 - 36 - - - R=241 G=90 B=36 - RGB - PROCESS - 241 - 90 - 36 - - - R=247 G=147 B=30 - RGB - PROCESS - 247 - 147 - 30 - - - R=251 G=176 B=59 - RGB - PROCESS - 251 - 176 - 59 - - - R=252 G=238 B=33 - RGB - PROCESS - 252 - 238 - 33 - - - R=217 G=224 B=33 - RGB - PROCESS - 217 - 224 - 33 - - - R=140 G=198 B=63 - RGB - PROCESS - 140 - 198 - 63 - - - R=57 G=181 B=74 - RGB - PROCESS - 57 - 181 - 74 - - - R=0 G=146 B=69 - RGB - PROCESS - 0 - 146 - 69 - - - R=0 G=104 B=55 - RGB - PROCESS - 0 - 104 - 55 - - - R=34 G=181 B=115 - RGB - PROCESS - 34 - 181 - 115 - - - R=0 G=169 B=157 - RGB - PROCESS - 0 - 169 - 157 - - - R=41 G=171 B=226 - RGB - PROCESS - 41 - 171 - 226 - - - R=0 G=113 B=188 - RGB - PROCESS - 0 - 113 - 188 - - - R=46 G=49 B=146 - RGB - PROCESS - 46 - 49 - 146 - - - R=27 G=20 B=100 - RGB - PROCESS - 27 - 20 - 100 - - - R=102 G=45 B=145 - RGB - PROCESS - 102 - 45 - 145 - - - R=147 G=39 B=143 - RGB - PROCESS - 147 - 39 - 143 - - - R=158 G=0 B=93 - RGB - PROCESS - 158 - 0 - 93 - - - R=212 G=20 B=90 - RGB - PROCESS - 212 - 20 - 90 - - - R=237 G=30 B=121 - RGB - PROCESS - 237 - 30 - 121 - - - R=199 G=178 B=153 - RGB - PROCESS - 199 - 178 - 153 - - - R=153 G=134 B=117 - RGB - PROCESS - 153 - 134 - 117 - - - R=115 G=99 B=87 - RGB - PROCESS - 115 - 99 - 87 - - - R=83 G=71 B=65 - RGB - PROCESS - 83 - 71 - 65 - - - R=198 G=156 B=109 - RGB - PROCESS - 198 - 156 - 109 - - - R=166 G=124 B=82 - RGB - PROCESS - 166 - 124 - 82 - - - R=140 G=98 B=57 - RGB - PROCESS - 140 - 98 - 57 - - - R=117 G=76 B=36 - RGB - PROCESS - 117 - 76 - 36 - - - R=96 G=56 B=19 - RGB - PROCESS - 96 - 56 - 19 - - - R=66 G=33 B=11 - RGB - PROCESS - 66 - 33 - 11 - - - - - - Grays - 1 - - - - R=0 G=0 B=0 - RGB - PROCESS - 0 - 0 - 0 - - - R=26 G=26 B=26 - RGB - PROCESS - 26 - 26 - 26 - - - R=51 G=51 B=51 - RGB - PROCESS - 51 - 51 - 51 - - - R=77 G=77 B=77 - RGB - PROCESS - 77 - 77 - 77 - - - R=102 G=102 B=102 - RGB - PROCESS - 102 - 102 - 102 - - - R=128 G=128 B=128 - RGB - PROCESS - 128 - 128 - 128 - - - R=153 G=153 B=153 - RGB - PROCESS - 153 - 153 - 153 - - - R=179 G=179 B=179 - RGB - PROCESS - 179 - 179 - 179 - - - R=204 G=204 B=204 - RGB - PROCESS - 204 - 204 - 204 - - - R=230 G=230 B=230 - RGB - PROCESS - 230 - 230 - 230 - - - R=242 G=242 B=242 - RGB - PROCESS - 242 - 242 - 242 - - - - - - Web Color Group - 1 - - - - R=63 G=169 B=245 - RGB - PROCESS - 63 - 169 - 245 - - - R=122 G=201 B=67 - RGB - PROCESS - 122 - 201 - 67 - - - R=255 G=147 B=30 - RGB - PROCESS - 255 - 147 - 30 - - - R=255 G=29 B=37 - RGB - PROCESS - 255 - 29 - 37 - - - R=255 G=123 B=172 - RGB - PROCESS - 255 - 123 - 172 - - - R=189 G=204 B=212 - RGB - PROCESS - 189 - 204 - 212 - - - - - - - Adobe PDF library 11.00 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/Thumb 20 0 R/TrimBox[0.0 0.0 960.0 560.0]/Type/Page>> endobj 9 0 obj <>stream -H‰ìWËŽG¼÷WäTN¾WlŸc±‡ý€Æ®u˜‘±«ÿAfÖ£[¬dRAÓdUV&“ ’Á§ßžÍÓûgg~z÷l.OÏÿtæúÉ8ÛRäßœåo7æÓõãåéW¼þýÓ¥†lKÊ&ô€ß`ü±)vJ´¾eó¿_þsùù=wÔý½îª·½k³»úhs1KrÖýè¿Æ‡Þ„Öm)ÞÏÅÞ\_/|õzñŽŸ9ór Þ,>ÛX Goc“§ §¤4Àòn}¹Sy›06‹UelmÛ«¡ÎÝ&~€ÑÿØ™c¶ÕÕǰrq¦ãÿB!ø—ù¸¿M¯Ög—p­j³ïÛm–`s0ÜÒÂ|iFl #À×ËÒlkÆ[XŠ‹Ãœ ¡†IñçB¬aüM¶òÉoŠ­I}ÓM³UÖë«á 5lƒ]zYÜv,„ßÁÜ—Ëy÷£Æ­vZ²Ç@I‚ÄRá9‹ˆq÷ȃQTßx4æ½m¼¶þ^/xH‹Æåsõa#œÐæû£wFqÑÎ^<„ËŽšÜsUÄCœ¾Á{ä¤zÞ¬êMúx8™ÎïÓù•®aYcµàØjþ»ÞÀ=…hC¦biÖð¾Ô‰l•ˆâ?7 -×À̰ @žf§x›i© 4u¤B̰8±YMU¤/ðŠìûf f!U°QRVš 3ñxn§EX–½à܆;¸ÝÒ%„çwöö“|61Õ£½x48“ÎÌn‘‰d•ÎÐqaa|œþ÷6%U^†¢×0-Áþ~„ª/BŽ#ètý;¨6· ØŠøJú­j‘ÈCàæšÊÍ¡`8q¯—¦! -}¸*øº‰ ÈÂD¹^ºu€&4@~E÷ pvef¾¨¶ ®YÑØgl¯DvE3¶gFÅ‚p·ƒ™ŽàF;*b4³4áCöÝ6]'Z#Ä x^±òxlØ$9sÔ|ÊšbE^…0èåøHöCÌüìkÌQ*šªAO -T¢­*'­:iÕI«¾ŠVÝ·ÏoH«îûÁiU´ÊiUò_@«ÆâG!(ƒV=˜Õ+­ª'­:iÕ´*¹ïG«úƒÑªvÒª“V´êkhÕgÚç·£U÷‡ýà´*Z”V¡,6ÖðÐâ/ð`>]?nl+~ ÛŠÅ[&Ûz,«W¶ÕO¶u²­·ØVønl+ùÇb[Élëd['Ûú*¶uß>¿!Ûº;ìÇd[RøTâ߈PV…Ù#Eš§´`d_Vµ¾wpÀøúe< Œ tý¹°zÉ1_sÒ @+ ²–]r¼RM\Ùf£PI œ+¦¦[±k5ñÁ|®·:j[½Ç›ÌleTiÝ©3A$MT^~ÔšÝd¹±võ„òuu‘òuõöáU¥ìÓჳhìãtˆà.´[Àî> endobj 20 0 obj <>stream -8;Z\u5n8N$$j;VR-9:UhT)'<$0@%\#iB&n#M&p=M`b5lXt>9a/<+@KdI>\';9_Ob?VVFp#qBr -6`>t+Opn?\"-,&u;UKhmW#jb?),s)kWS;mu=QT4(Es1c*Hs+$IogkoB7r@q*WQF\3 -W#eMkTStuRhFE':++9f0-UJ(^KFgHU\Km4:!!e-hiW~> endstream endobj 22 0 obj [/Indexed/DeviceRGB 255 23 0 R] endobj 23 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 17 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.427 0.737 0.859 scn -/GS0 gs -271.996 378.559 13.56 -40.02 re -f -q 1 0 0 1 289.6611 378.5591 cm -0 0 m -10.56 0 l -21 -15.36 l -31.38 0 l -41.94 0 l -41.94 -40.02 l -29.16 -40.02 l -29.16 -25.62 l -21 -37.62 l -12.78 -25.62 l -12.78 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 335.707 378.5591 cm -0 0 m -10.56 0 l -21 -15.36 l -31.38 0 l -41.94 0 l -41.94 -40.02 l -29.16 -40.02 l -29.16 -25.62 l -21 -37.62 l -12.78 -25.62 l -12.78 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 397.1504 337.519 cm -0 0 m --2.52 0 -4.8 0.321 -6.84 0.96 c --8.88 1.6 -10.62 2.56 -12.06 3.84 c --13.5 5.12 -14.61 6.74 -15.39 8.7 c --16.17 10.659 -16.56 12.96 -16.56 15.6 c --16.56 41.04 l --3.78 41.04 l --3.78 16.14 l --3.78 14.739 -3.49 13.67 -2.91 12.93 c --2.331 12.189 -1.36 11.82 0 11.82 c -1.359 11.82 2.33 12.189 2.91 12.93 c -3.489 13.67 3.78 14.739 3.78 16.14 c -3.78 41.04 l -16.62 41.04 l -16.62 15.6 l -16.62 12.96 16.23 10.659 15.45 8.7 c -14.67 6.74 13.55 5.12 12.09 3.84 c -10.629 2.56 8.88 1.6 6.84 0.96 c -4.8 0.321 2.52 0 0 0 c -f -Q -q 1 0 0 1 423.2202 368.0591 cm -0 0 m --7.38 0 l --7.38 10.5 l -20.58 10.5 l -20.58 0 l -13.2 0 l -13.2 -29.52 l -0 -29.52 l -h -f -Q -q 1 0 0 1 460.8916 350.959 cm -0 0 m --2.7 7.02 l --5.4 0 l -h --7.5 27.6 m -2.1 27.6 l -17.28 -12.42 l -4.68 -12.42 l -3.36 -8.82 l --8.76 -8.82 l --10.08 -12.42 l --22.68 -12.42 l -h -f -Q -q 1 0 0 1 493.0215 347.959 cm -0 0 m -3.039 0 4.56 1.16 4.56 3.48 c -4.56 5.799 3.039 6.96 0 6.96 c --1.44 6.96 l --1.44 0 l -h -3 18.42 m -3 20.259 1.999 21.18 0 21.18 c --1.44 21.18 l --1.44 15.66 l -0 15.66 l -1.999 15.66 3 16.58 3 18.42 c --13.801 30.6 m -1.859 30.6 l -3.859 30.6 5.689 30.37 7.35 29.91 c -9.009 29.45 10.43 28.77 11.609 27.87 c -12.789 26.97 13.71 25.85 14.369 24.51 c -15.029 23.169 15.359 21.6 15.359 19.8 c -15.359 18.52 15.199 17.43 14.88 16.53 c -14.559 15.63 14.22 14.88 13.859 14.28 c -13.419 13.56 12.919 12.96 12.359 12.48 c -13.239 11.919 14.04 11.199 14.76 10.32 c -15.359 9.56 15.909 8.6 16.409 7.44 c -16.909 6.279 17.159 4.86 17.159 3.18 c -17.159 1.26 16.819 -0.48 16.14 -2.04 c -15.459 -3.6 14.489 -4.93 13.229 -6.03 c -11.97 -7.13 10.43 -7.971 8.609 -8.55 c -6.789 -9.13 4.76 -9.42 2.52 -9.42 c --13.801 -9.42 l -h -f -Q -q 1 0 0 1 513.6592 378.5591 cm -0 0 m -13.32 0 l -13.32 -29.52 l -24.36 -29.52 l -24.36 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 539.9697 378.5591 cm -0 0 m -23.58 0 l -23.58 -10.5 l -12.78 -10.5 l -12.78 -14.94 l -23.4 -14.94 l -23.4 -24.9 l -12.78 -24.9 l -12.78 -29.52 l -24 -29.52 l -24 -40.02 l -0 -40.02 l -h -f -Q - endstream endobj 18 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.427 0.737 0.859 scn -/GS0 gs -271.996 398.559 13.56 -40.02 re -f -q 1 0 0 1 289.6611 398.5591 cm -0 0 m -10.56 0 l -21 -15.36 l -31.38 0 l -41.94 0 l -41.94 -40.02 l -29.16 -40.02 l -29.16 -25.62 l -21 -37.62 l -12.78 -25.62 l -12.78 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 335.707 398.5591 cm -0 0 m -10.56 0 l -21 -15.36 l -31.38 0 l -41.94 0 l -41.94 -40.02 l -29.16 -40.02 l -29.16 -25.62 l -21 -37.62 l -12.78 -25.62 l -12.78 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 397.1504 357.519 cm -0 0 m --2.52 0 -4.8 0.321 -6.84 0.96 c --8.88 1.6 -10.62 2.56 -12.06 3.84 c --13.5 5.12 -14.61 6.74 -15.39 8.7 c --16.17 10.659 -16.56 12.96 -16.56 15.6 c --16.56 41.04 l --3.78 41.04 l --3.78 16.14 l --3.78 14.739 -3.49 13.67 -2.91 12.93 c --2.331 12.189 -1.36 11.82 0 11.82 c -1.359 11.82 2.33 12.189 2.91 12.93 c -3.489 13.67 3.78 14.739 3.78 16.14 c -3.78 41.04 l -16.62 41.04 l -16.62 15.6 l -16.62 12.96 16.23 10.659 15.45 8.7 c -14.67 6.74 13.55 5.12 12.09 3.84 c -10.629 2.56 8.88 1.6 6.84 0.96 c -4.8 0.321 2.52 0 0 0 c -f -Q -q 1 0 0 1 423.2202 388.0591 cm -0 0 m --7.38 0 l --7.38 10.5 l -20.58 10.5 l -20.58 0 l -13.2 0 l -13.2 -29.52 l -0 -29.52 l -h -f -Q -q 1 0 0 1 460.8916 370.959 cm -0 0 m --2.7 7.02 l --5.4 0 l -h --7.5 27.6 m -2.1 27.6 l -17.28 -12.42 l -4.68 -12.42 l -3.36 -8.82 l --8.76 -8.82 l --10.08 -12.42 l --22.68 -12.42 l -h -f -Q -q 1 0 0 1 493.0215 367.959 cm -0 0 m -3.039 0 4.56 1.16 4.56 3.48 c -4.56 5.799 3.039 6.96 0 6.96 c --1.44 6.96 l --1.44 0 l -h -3 18.42 m -3 20.259 1.999 21.18 0 21.18 c --1.44 21.18 l --1.44 15.66 l -0 15.66 l -1.999 15.66 3 16.58 3 18.42 c --13.801 30.6 m -1.859 30.6 l -3.859 30.6 5.689 30.37 7.35 29.91 c -9.009 29.45 10.43 28.77 11.609 27.87 c -12.789 26.97 13.71 25.85 14.369 24.51 c -15.029 23.169 15.359 21.6 15.359 19.8 c -15.359 18.52 15.199 17.43 14.88 16.53 c -14.559 15.63 14.22 14.88 13.859 14.28 c -13.419 13.56 12.919 12.96 12.359 12.48 c -13.239 11.919 14.04 11.199 14.76 10.32 c -15.359 9.56 15.909 8.6 16.409 7.44 c -16.909 6.279 17.159 4.86 17.159 3.18 c -17.159 1.26 16.819 -0.48 16.14 -2.04 c -15.459 -3.6 14.489 -4.93 13.229 -6.03 c -11.97 -7.13 10.43 -7.971 8.609 -8.55 c -6.789 -9.13 4.76 -9.42 2.52 -9.42 c --13.801 -9.42 l -h -f -Q -q 1 0 0 1 513.6592 398.5591 cm -0 0 m -13.32 0 l -13.32 -29.52 l -24.36 -29.52 l -24.36 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 539.9697 398.5591 cm -0 0 m -23.58 0 l -23.58 -10.5 l -12.78 -10.5 l -12.78 -14.94 l -23.4 -14.94 l -23.4 -24.9 l -12.78 -24.9 l -12.78 -29.52 l -24 -29.52 l -24 -40.02 l -0 -40.02 l -h -f -Q - endstream endobj 19 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.427 0.737 0.859 scn -/GS0 gs -271.996 418.559 13.56 -40.02 re -f -q 1 0 0 1 289.6611 418.5591 cm -0 0 m -10.56 0 l -21 -15.36 l -31.38 0 l -41.94 0 l -41.94 -40.02 l -29.16 -40.02 l -29.16 -25.62 l -21 -37.62 l -12.78 -25.62 l -12.78 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 335.707 418.5591 cm -0 0 m -10.56 0 l -21 -15.36 l -31.38 0 l -41.94 0 l -41.94 -40.02 l -29.16 -40.02 l -29.16 -25.62 l -21 -37.62 l -12.78 -25.62 l -12.78 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 397.1504 377.519 cm -0 0 m --2.52 0 -4.8 0.321 -6.84 0.96 c --8.88 1.6 -10.62 2.56 -12.06 3.84 c --13.5 5.12 -14.61 6.74 -15.39 8.7 c --16.17 10.659 -16.56 12.96 -16.56 15.6 c --16.56 41.04 l --3.78 41.04 l --3.78 16.14 l --3.78 14.739 -3.49 13.67 -2.91 12.93 c --2.331 12.189 -1.36 11.82 0 11.82 c -1.359 11.82 2.33 12.189 2.91 12.93 c -3.489 13.67 3.78 14.739 3.78 16.14 c -3.78 41.04 l -16.62 41.04 l -16.62 15.6 l -16.62 12.96 16.23 10.659 15.45 8.7 c -14.67 6.74 13.55 5.12 12.09 3.84 c -10.629 2.56 8.88 1.6 6.84 0.96 c -4.8 0.321 2.52 0 0 0 c -f -Q -q 1 0 0 1 423.2202 408.0591 cm -0 0 m --7.38 0 l --7.38 10.5 l -20.58 10.5 l -20.58 0 l -13.2 0 l -13.2 -29.52 l -0 -29.52 l -h -f -Q -q 1 0 0 1 460.8916 390.959 cm -0 0 m --2.7 7.02 l --5.4 0 l -h --7.5 27.6 m -2.1 27.6 l -17.28 -12.42 l -4.68 -12.42 l -3.36 -8.82 l --8.76 -8.82 l --10.08 -12.42 l --22.68 -12.42 l -h -f -Q -q 1 0 0 1 493.0215 387.959 cm -0 0 m -3.039 0 4.56 1.16 4.56 3.48 c -4.56 5.799 3.039 6.96 0 6.96 c --1.44 6.96 l --1.44 0 l -h -3 18.42 m -3 20.259 1.999 21.18 0 21.18 c --1.44 21.18 l --1.44 15.66 l -0 15.66 l -1.999 15.66 3 16.58 3 18.42 c --13.801 30.6 m -1.859 30.6 l -3.859 30.6 5.689 30.37 7.35 29.91 c -9.009 29.45 10.43 28.77 11.609 27.87 c -12.789 26.97 13.71 25.85 14.369 24.51 c -15.029 23.169 15.359 21.6 15.359 19.8 c -15.359 18.52 15.199 17.43 14.88 16.53 c -14.559 15.63 14.22 14.88 13.859 14.28 c -13.419 13.56 12.919 12.96 12.359 12.48 c -13.239 11.919 14.04 11.199 14.76 10.32 c -15.359 9.56 15.909 8.6 16.409 7.44 c -16.909 6.279 17.159 4.86 17.159 3.18 c -17.159 1.26 16.819 -0.48 16.14 -2.04 c -15.459 -3.6 14.489 -4.93 13.229 -6.03 c -11.97 -7.13 10.43 -7.971 8.609 -8.55 c -6.789 -9.13 4.76 -9.42 2.52 -9.42 c --13.801 -9.42 l -h -f -Q -q 1 0 0 1 513.6592 418.5591 cm -0 0 m -13.32 0 l -13.32 -29.52 l -24.36 -29.52 l -24.36 -40.02 l -0 -40.02 l -h -f -Q -q 1 0 0 1 539.9697 418.5591 cm -0 0 m -23.58 0 l -23.58 -10.5 l -12.78 -10.5 l -12.78 -14.94 l -23.4 -14.94 l -23.4 -24.9 l -12.78 -24.9 l -12.78 -29.52 l -24 -29.52 l -24 -40.02 l -0 -40.02 l -h -f -Q - endstream endobj 26 0 obj <> endobj 13 0 obj <> endobj 12 0 obj [/ICCBased 27 0 R] endobj 27 0 obj <>stream -H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  - 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ -V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= -€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(ЇR¡,¨*T2B-Ð -¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 -N'çÎ)Î].ÂuæJ¸rî -î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö -n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ -¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 25 0 obj <> endobj 24 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj 30 0 obj [/View/Design] endobj 31 0 obj <>>> endobj 28 0 obj [/View/Design] endobj 29 0 obj <>>> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 11 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 18.0.0 %%For: (Lee Byron) () %%Title: (Untitled-1) %%CreationDate: 10/30/14 4:19 PM %%Canvassize: 16383 %%BoundingBox: 83 -268 726 -4 %%HiResBoundingBox: 83.2057291666688 -267.358072916666 725.64453125 -4.17317708333303 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 18 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -560 960 0 %AI3_TemplateBox: 480.5 -280.5 480.5 -280.5 %AI3_TileBox: 102 -568 836 8 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: 57.5 -4.5 2 1192 711 18 0 0 121 293 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 73 %%PageOrigin:80 -580 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 34 0 obj <>stream -%%BoundingBox: 83 -268 726 -4 %%HiResBoundingBox: 83.2057291666688 -267.358072916666 725.64453125 -4.17317708333303 %AI7_Thumbnail: 128 52 8 %%BeginData: 12290 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFFD81A8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFFD81A8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFFD81A8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFFD81A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFFD81A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8AFA8CAA8FFA8A8A8FFA8A9A8FFA8CBA8FF %A8A8A8FFA8A8A8FFA8CAA8FFA8A8A8FFA8A8A8FFA8CBA8FFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FF7D5252A877527DFFA8FF52527D7D4C7DA8FFA87D527D765252CB76 %52767D5277525252FF7D5252FFA8A85277527D7DFFA2524CA8AFA8527752 %5276FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFFD26A87D0027525221277DFF5227007D522700A1AE7D0027275200 %4CA852004C272727280027A85221277DFF7DFD05277DA1002752FFA82821 %270028A8AFFD1EA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF5928277D524C2753A1284B4C595327 %5228A828522752524C4CCB524C4C7D522E27537DA82752277DFFA8275252 %5227537D4C277DFFA9284C2E7D7DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A87D272777522728 %27282728277D5227274C272827284C522752A8522752FF7D00277DFF5227 %272827A87D282752272753A8272753FFA8282752527DA8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %FF5928277D5252274C272E274C53532728275227282752524C4CFF524C28 %AF5928277D8452272E27287DA8274C275227597D4C277DFFAF284C27274C %FFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFFD26A87D00275352272827280528277D5228272727282727275227287D %52272860592727535A2727282E27527D2827592E27277D272752CA7E5227 %2E527DFD20A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FF5928277D524C5253277D284C597D275252 %285352275352282752272828FF7D28277E524C4B4C4B52277D284C4C5227 %527D524B52277D2852275252FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA87D0027775200525A5959 %27217D4C272784528427272884FD05277EA87D0027524C27525353272727 %4C274B27287DA1004B27274C52274B214CA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF845A59A8 %7E5A59858484597E848459848485607E59848485597D598484A97E7E597E %7D7E5A85847E7DA8597E597E5AAFA87E59847DA8597E595A7DFFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFFD26A8A9 %6085848560845A845A855AA9848560845A84608584845A85A8855A848484 %6085848560855A845A85A8855A8584845AA9608584FFA8845A858484FD20 %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FF848560AF848584858485608584856085848584856085 %84858485608584FF848560A984858485608584A9848584856085A8856085 %60858485848584FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8A95A8484855A84848584845AA984 %845A8584845A8584A85A855A845AA9A8A85A8584845A8584845A8584845A %85608484A960845A8584845A855A84A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8FF848584A984A9 %848584A9848584A9848584A9848584A9848584AF848584AF848584A9A885 %84A9848584AF848584A984A9A8A984A9A8FF848584A984FFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFFD27A87E8484 %847EFD0684A8FD04847EFD0484A8FD0784A8848484A8FD0684A88484A884 %8484A87E8484A8A8FD0484FD21A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA88584A984A984A984 %AF8485A8AF84A984A9A8A984AFA88584A9848584FFA88584AF848584A984 %8584AF848584A984A9A8A9848584AF848584A984FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A884 %85A8A884A9A8A884A984A8848584A884A9848484A98484848584A8A8A984 %8484A984A884A9848484A9848484A9A8A884A9848484A9848484A9A8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8AF %A8AFA8AFA8FFA8AFA8A9A8AFA8A9A8AFA8AFA8AFA8A9A8AFA8A9A8AFA8AF %A8AFA8A9A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFFD27A884A8A8A884A884A8A8A884A8A8A884A884A884A8A8 %A884A8A8A884A8A8A884A8A8A884A8A8A884A8A8A884A8A8A884A884A884 %A8A8A884FD23A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A9A8FFA8A9A8FFA8AFA8AFA8AFA8AF %A8AFA8AFA8AFA8AFA8A9A8AFA8FFA8AFA8AFA8AFA8AFA8AFA8AFA8AFA8A9 %A8AFA8AFA8AFA8AFA8AFA8A9A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8A9A8A8A8A9A8A8A8 %AFA8A884A9A8A8A8AFA8A8A8A9A8A8A8A9A8A8A8AFA8A884A9A8A884A9A8 %A8A8A9A8A884A9A8A8A8A9A8A8A8A9A8A884A9A8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8AFA8FFA8FFA8FFA8FFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %FD81A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFFD81A8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFFD81A8FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FD81FFFF %%EndData endstream endobj 35 0 obj <>stream -%AI12_CompressedDataxœì½ëŽe¹u&øûÎü0 5ZǼ“[Ó N\ÜrK– ÉÝB:+,e;+³•eæéçûÖ"÷…Ü'"ê^=® ª2⇛›—ÅuýÖßü¿ûÃ/n>}ÿ/¿ðgsšþæon?<¾úøþÃ/OòééWoß~ùÅÇüèg¿ÿùÉæ³A£›_•OjÃÿþøá‹7ïßýòdËÙHå¿ý³_?>ž.ýðþÝÏO?û9>ýã›oñù?¾ûÈß>ý…ýy{¾~÷ê#*­ù[oþÖ†Sø¥O¿û ¼z÷ﯾøâÍÿËêä‹Çg—÷_¾ûôÍ»?]Þÿ?¿<ú…Kå”]:ý" ö¿¾ùýã]“³31»Ù&ü”Â/ä³Å´ÏðíxN!Do]D7g›½ÍÙÃgÞ½ýågï>þîÃû×_|qûþíû_üòtû×WïN¿yõ'Ô¼:ýßoß¾ÿËéòöÕë›0Gñ“‡7o1Ÿ½úx²ž“só+ë>¹|ùæí§ÿðågÿòøÓÆOý'Òã?~®Ð+çÇù“_}†Oþðøñ#^Ïãüþþï.ÛQàC)?ûçß?þé¬&ôþ¼vûáý矽úðoüîé1™ÓŒÿŒVþññ³Ïßbæe–B1g¼»“¶Ô¶xigcGÓšNuðëì<þû›Ç¿üòôïß=êÜ|øø]½ŒÑÿkÍï¿|ûøáß½ùˆ±%~4ë$üæý§oÑ~ùþÃÛWòîRìúmðÇWþôøkþþí—e'–öÌñ¯_ýõ‘ åô¿ýüñÝßÿwcÌgYëxr'kgwÊÖb9´gOnöË3íúíš±›Öæ&ùÖê·ÞüéÍ»_Îv1ºˆ÷áͧëfw*ú?y‹3†ËÁÌn~é'³üädc±Á½äÌæÇïêc;Þþf³¿Ìù7À›Ü¿ûôöýg\Ò/xà°±ÞaϽ}ÿ'­[~—|ýËÏuZäïO°ú¿ûðæûœþAjÊ'¿{û%ªþîÃû/?ÿÕ»}?ýLéË| "‚ òéé·ÿò¿ðÈ…ìùÓ?¼zð÷ÒæüêÍç?²;¼Ü‡Ç“Vâ›ògû÷ùoß=þ+ëúuýôþÝ¿?¾}ÿù¦[m÷|¿{ûêÝ«'ù|éî×oþ5¯0=k‡løøñŸ^Ð#6Ûç˜éCšt½?Ñ`Sõüƒþðš»äÃéòáË/þ|úãû÷o—Gì«–w¨˧lÿãxÆï^}ü3(òã»O¿X:×?×^¹"úÙ‹úÃÞýöv<޼6èG2¦ßùjcÿÞžµ|çè9¨üßå·¯Þ¾}ó§¯>ÿó›×G9¨_ž·­û*Ûø¯ŸýËû·o¾ølݽ›O~÷êÃÇ7¯ß>þá¯_||| ͨkzÿé½+‡üÉ6øË«¯ÿüë7ÿòävæ¼þë›wŸâýáË7×zÿÙçäžNøó«Ïå ZË?,ÆOp léü/~ñÄ`ÓéònSÿw^}úw ØÁ¿{ÿöÓÇw§ß“ÒO»¿p;æÓåÓéŸ'S‹•NóÉåÃô_&ÓÿØ®¸Mñµ„Z¢ü×JâþÙ–¼”bæ]¹Ù” Êm-w›ro&óÐÊn`Û·)~S®D-“ü“mBÉòoÙ”yWnìe)·K¹Ø;”ö×Ý„?îå£;û°-Û©“Áµ¿)aS¢K,“þãò¦Ž¥þÿfS.Z¦ÿëh-¯­¦ß­gج꺶(Ó²¼a³ÈºªÛÕ-(ü—«Zvë;oVÿŸêR·Å¾,ˬÿr•ï·«ÿë9\k7íÚc]ù/W–kœ¤YåÜ­ðM-ûµÅZòŸ{)wÝ*¶‡zYÃuÍXt‘Ú’Íu±°@S]#®Õm-wRîky`i'‹/³]K+«êęЋ’™'/Ÿäõfy•;±­#L²e0„IžËç8HcÁ'Ÿ!Îþ‚rç°Ú6øá-äPÂnÂ%Ü…ûð€‰tÑÇSÌqŽ7ñoã}|˜0 ‹]R¤<˜æt“.é6Ý¥ì‹i9æ”Kžó%ßæ»ü€}b‹+¡Ä’J.s¹)—rWîËö‹›f?‡ýÌä¸/óí|??`ÓØnâMº)7óÍÍÍåöæîæ^v’à „K¼äK¹Ì¨º\n/÷—ì.;ÉlûÛpo1€Ûùöæör{{{wû€ÍfeÂ]¼KwÜ]¹›ï.w·w÷w÷ëâïÃ}ºÏ÷å~¾Ç³îoïï¦ûûûîˆLØC|À›>`ì7(xä¾ùÐý`- Vsùû~Sî6åvS.›r³+s+þW6%oJÚ•¸)aSü¦`N®–= [‰¯Ùý~ûs·+·Z&ùç²)7›2oJÙ•¼)iSât—vÅoŠÛ»)f-mʧúËvôÛŸÛM¹h‘“¹[Çýêí׬­Ö~‰öË‚¥˜6«±_‚ýÄï§»Ns7·2£Ó0™u -w³·Ÿ±Ý<-Û²>kêfDg㦖YJ©%KIµÄZ‚_‹›äìÕ+SIÿ²ýõ½Ú³ÚÏEÊM-³”R Îö„ÿ¥Z¢”P‹¯EIo#ô  m-ïeý.²^EÖ'Ê‚pŒLûLólÕ,ódÞ¬ÌÔ½LÌE&¢LòîQÞ•/hä…îändÈYFdDöË=&ótëô«€Ž%P³ªæ@ÍÍ„tY¾Ñ»ù+7„0‚ zÜ(7ìVüÓq™o@6ËœA@#©Çdq?`#Üaš. ¶s)oŃ[\ÜØ!w˜ÃK¾©.9ƒhGonqÑ?`ïÜab/ ð3}¹ ûÄß&3aßcoq1Üà‚(¸&RŒ¸0<. ÞáÛíkqÁ¥2ãrÉ!áš ¸n.ƒ}]q‹‹èR™p3%qGyÜU¼Êvè–·(¯U^´—/bëŒ%•]ÚÚŠíZ+i‡¥—:ù7Þü³pÊ)€wýpåqÒtо¾~™l‡[ ÃÆÔ+I˜±©"6”Åf:ÚJ®ÞrûðGo +ç’·P”ÓÛn¢zñ*Âm&@žÍûn¹ìvY9¸îürÝñ²»áåË Çà+š× Lý° ¶2qan¶ÓÎY Ÿf´Kü!ÌÜüÉÓ¢g¥]ˆË-*õòæòÖº 7•ÜûÝÊ -Kh¦G9c\d/tÜA›ŠX/€Fq¶4gÝ*+ÝÙR¡=:ÅähOž£E:õÝiüƇñ²°¿­¬‚LÙ‰8¹Š=ZâN2ªÒÒTi?ÊïdÔ=ÿÒî˜E@[8})—i'ØÝ -Ý„þ;w¥te"õ·451s)a(~(î ÔŸi'éOÜ–I[þ½;, Ó"ißVaì¢ÒÙa™¯–Òä¾i#äkI/,«H·eÚÿ¹(ÖßÇâ¯Ù“q/,G|P¦6|ñÏ‘ìþ~¾µÛ½h—U.µ±Ùwµ(‡Õ”MIQª,Ü”õ¤OUlnÇ»©EÖíßŸæÆ¡¶Ó»=°=ÇM¤Ok^T©–¸(VÝßÐéù“‰ßµÄªžêŽc;wÓF©µUr]ãe§dU¦ôç³ì´l«v¦ihŽŽèò÷4œÌþއòÉ2 -ã“úÔùíŽç´ÑA~ã3üÔ9þáÝ·Þዺ•~FùGù‘Qþi\ˆ¡ }/ÜÆ\%¿Tù ·H?Ž#ï8·‘€n!‰4A¢¤"… #Ê@·¢üQ9¨,r¯r%¡[HA‘ƒŠ¨’Â$¢•Ãñ RñŸ€ïHB* Qr* ‰=TÁú¢eßFμ[þ-±=½0„‹w*NžV×båÒ”3+"@±„i¡Ô׵ᱚ&UÿÝà-‹$üдa‚vDu œ;ÎeG#wqÚñ$,m;$kOp#Çð22q•||›ç¸J‹Z¶jªíÏ^-·Q5nua"¾H™ê/nWü®ìÕn±+iWò´SååNÍWv*À¹J¶ÛréË´è¼Z¹Êøó0–¶Ç¦íMÝé=«êÿ°øÃR5yc‰WJºZ]î´SìfQ7?UægÊÍÔ)”Êå…Eˆû´Ó\?Uî^V¦ƒñÅeºZõ5ÆKôëvT7f?]µXhi*LUh6õf®¥i?çZªntªªÒöÓhÃzlÚz4ÊÚDäÆÉ7-­êlÃ$J#-i)¹–²”¹–›¥\h~¦@‘¦UuL6thºB„®QŸkTgCi.¢Ã¹Nkž 1;¢R Ëô$M9 $Ï‘éiºñ’Ñ‘†iK%¾6iØœ÷k„á…d`<ù×ÏñÓå{:Ç_I‡ºÓ¢‚e»Ue§aÉgù&pzic‹½€¨=ÖT‹,m²Q¬² e³ÌÞÑ6‹ËE³^XQhó$üi³ÒÒN{/–ZµÕzr—b¯åm¶7ÂÓnˤ¶[ZoÉXŠw#n!§-†Ü ¨ÑÝbÎ5`ÿÈIÒ¦0TÞÒd’8R¸AÍð5*’h7©²3»†ŸfAJS„X+˜¥Sãg}[µ'ɇüÄm?ˆy36 rëkÿ £ÐyH†¾<è&›‚a*DŸ¨Ìd6òFÈ{á/è"HŽQ¹ÅÑßõ.±êþÚl‰jQ ¹8S]‡Õ ùþŠ?ÁâN¯yÙý\÷£Þš=bUç‰~Y}nÄëfñ»éU̹úߨNõÁ%ó}uùêð´cÑâWôB¯¢­Ua¡mu:Ùº¬Ž'·Ê'oœOÂÂÏÍåN׉PõA¥ÜSšÿ©H;ê}ZD¡dC¹&b(ÌÜb³`bu5½ËêYÁi­;«ÏÎÎå§jÍb/¿½²*’sU‡jk²Õ„òBW«ò2?+u%Y 'êªáÔ+®zÃÝU¸æùVCJ¬nêØf„¾ßù_l\Œ'cU¼«'…_äÑ(2i¹4‹lZÄŽp#êETRw“$"ª®Âªú sÝTbU™u•ZEn­žÄêK, 7ñ$âkñµ °w;!¶c«Ë¥oþÆ"É6Yvê„Yº ߊ͗Ÿæ\Ý™WWææÂ\—•ÒË ;~Úp#½^õYÔ`Q良W¾^ú{cúÍbLÏB¬ªA}.`µªßÉàôÚÓ‹¯]}Ëå·\íoc¹q NõÜÞ„Û»pëu¼÷;Þ{/¾Ç“2>Õ¶Þ{_ó?~ÂyÚ8=~-·G«Tù(Ò ÷§"Ô`µ™T+Ê´xØ÷>ö×ýì7žöµlí§g|í¯ïÊR-O›ý´ñ³ßzÙ›e£>T¤¾™öYö¬îÚYî:Ù»SݾI®ÂuûêLª´\Ú†¾¯Óu»ñÑÍ2Õžë.O",‹¢¤W(¸^êQ Ûþ^¶¾l~õž92ïöÁ4}9¶!»Þ,4„Û†Ýì#A†œiŒÃéEŽÃqúœ%,g %#s¶¡%Ï…çøéj„ÎaŒÎ3ç'g:<<—r=?Û3´9I;½ïy“‰“o|0vYdéBÅž#ŸK ¤<$èK1FämcAÇ¢ïéBHªÿó=­Qœ¯h=çùŒW•ò; -Ѷ•”fk2¸tPACÍU˜Á}02x¤/¹ªžðù¨õê4Ÿ«>/ÁÏ•õ=¿Ó§È{äàA®1e³Á…Åï9ŸqoYÜ8Îejo¥ÿUI'OáŒï>¢ÂsUcb ÒFážcWþ÷ûTÕŽb&<™ñ9WDUý\¨¢œg‡‹—Ÿ`ïo =»²‚´œ9çe£ ¥òúr>Çh¶*ªï÷©_IiõågŸ=~ ÞJõhÕgnøëÆöny×m˜s^\j›/îe R¿o’:éSnhBL\$•¼È#k¤q ß -kX¸ÕÓ&ª¸,^ÔkÀ·z\«ÿõuÉ>Šl/âÆ´‘7T°Ÿ7rÇ¥2 ÷M¾‡„/Þ…ÕA[úŸl“Hã“8$fqOTq¿‰ü—Æ…Ô Y•¥v5.¢ªbí5Æ)ª•% Wj™k©¼@¬|G\XžÅó£9ù->ÞÓLâ——²þ䥔¥Ü,å²–)ÝnÊê ³7‰nÝ¬í®øM‘¹›rXJÜ•ñ§te>(7S¾Êí•r÷DY̺ӱO‰¨P¾j‘<÷m”1F~’ÏKœüe=¥vïUäP^ÖhÅ© -ý»˜19f)~uݘkœÚÝFÚù lªgâV¬÷f ¦5œ¾ˆRó¦nç{Ñxq{QîÆº7©ïºÈN¼ãlnNöÑê²q#.uýÄ—ÙŠÌåE Ù4\ETêÔp‘­í–©Ú­(º-uј»ªc'tÂ*¯º-2Õó¢Ýߌé÷ŒÕAcÞh¶n%jŸjåûêç»øfLsF dõ€kN*W¬®n«‹ÛêÜ&k5uNiçÊ6Žl;‡çÚ⳦2ßÞI­1¿½/Úèƒ6ú»ÞN^g‡Þf[é`ô:[Ët z°¾À5{º^ór}²ˆ>Äncê[4}‹£oñókì|Ã>\Þ,‘“"MUZEi É/«¬²ÂïCà7ÇÔ¾¯ÂÄV_…ð­ø½ß[©{:ºAƒÀÝIÛUÞžî½È½º÷bw© -ç¼\vqZ„ïUo"¸[`qÌF؈ã÷‹øµDíOíÁ7ëϼ”²”õîZ¯á¸”°–©Jï« ï6’¼ÝJô¹~-[yWÖsÚHŠ·»rÊMWŽ~Ê$ät_onQ¨]/ 4­¿v%|å"7Ø4ûo£|u4…§ñ$„yêb˜GL…}$óWa‹¬PM Ó¢ݪDïë6]Õ¡;e¨ZD›h³ŠÞ´õÍu}tB]kt»@/Ì]Ä‘_5¢U'zŸï&9ñÙþs5faN›XÕ£«‰xo$^#‘²ð¶qªáHj+v»¤{¡WûÀ¤Y˜’¼¨QceÏ—¥‰:UѪ>ÔKîN´«·•RlC–4hIÙ¡º¤ÁK*Vˆ±gZ¢˜ªü¡ÔS‰ÜEt²7U/Û›¶¡M©JUHñ~Ù§…ŒÛƒØÕkÑ«-j±>OUüš7 èµ õµ„£öÆ>þŒq¦×ÂU¦á£û¯Sžò€7¥²sO9®¯î1ÑwÞ$¼šÍÎLζPÀöq¹ú®Ä$èD}GçÝó=á«hþñÝ»WŸ=~zúSýèd>}¸zS {ÅEfÙ {Ùëø -sñÐP*¦ênÞ»šïÁ:öNæj±WkýÍηâÉ´8–Ï{cäª* ƒ°ÕÞÀ5Öá÷/p™ô ªò㥨#OxÌOëû¼|À—:à d;Û»ùžê„ÛÝp·â5”c?­Ó¿„}@Dß ÑÍôÂ}‡ÈI? ¸ xc‘ð!ƒÔÍ>[zŸ’Î9pnÎ9¤µ?Ü@‹4\>YF´ûì›Ñkc)6>F×qG³]u$õ¸×/~)³P Ò3/~"³ègïATYT„¨{›,ÞL‹w›b›EÃy·TlÞm-LgTÌ58GBsš'Ó´¸2íݘªÓ.'VMÏ>g«ï¹Ÿ¦Eé£NM®JY¡ªZ€Nª¢ZÞV‰¨ýT¡oª"๫NPÛ²†™í€0VÖ}™Yt-þ°„+%îËÔ}^Tòõ2]­*_¯L_¡ñÈ:–éeÍ^^~êð Á“4ž/-TD9='|GÞ!¸:ñ<ËÂb¨ -ze銿™!máæÈLl1[½¨™Su­¬‘‹CåêL¹N‹e‹ÜG.$‡”C< :Q¦EÅ ú3Õx[í÷54ÌÔè@[…ªæV—(ÁVšÆDn¦JYÚ¼®Ú™¦³YÕ9kìÙªþ±}™¶¨d;]’ßQ»±Ä¡-œ6«¾Xf®”UV¦í/*ƒ^j_¦ç|ÕòÒ_ü3½¼é˜¯QJ0÷5t!ŠÌr£­Á0U¥A?“~Tp"S"v^·à>S|X|îãóY TÍ{kœ:¤ †47샘âC*ÒèH&V©“›%Q5~OKVz⪢h¥*±jQó´!,ígÝ£{º²óꣅ™"sظ+¥£8Ó Ðsäh)ÓS•_£Ì—HÃ|vG×âHÓä}N)ÌÙÍÆúÜ,á\Ñ2Ù´vƇ¶–cä'Åo ¼¬ÙŶ½èÆKÙt`«ÿ1 ªšï‰dý)Ú³Ýñ»šÖDE²g"Jœ|8'»âÐ=ÑbÿýŒ^£Ã¨ÌÙ»9|¿o±|?çƒíÇßÐéÀ;8:øæt° $ÞwîÜw[÷Õ"÷åÍÝPn¿ZÑnz×mþÛ<ó‚Ç#+™“ Ææl£ .ëçœK§Hä©FÈ*Ü`xÑ'ÇþN?šisĬÍT/4“ggpŒ.FWl žðX†_¸<ú›‚q`WA¡“­ÞºÕO×ãš(…OYßù»|оÇaVl«ü ¯’ËÄ}uãûê{ oñ5®®¯SsÕ}Î×6¾¶G‡³rpÌÄüDïÇoqìx¼{Ÿ©½Ò×q»}Ö%wS‹Uù¶ãaä S‹†yª÷¯àҺÙSç²q¶Üɾâ;÷ÕôG{ÝïözõtøFM¯Öû|›Ô™Šax™$ƒ‚„“nBIW˜ï´À{ßÔQÝ·bdÔXw'‚z¡=W‡¬YLŽ—È~_+Vç,¿‰Q§²LIÑiˆa¼ù}-÷Õ+4Š9rÜ0¹Ëü¦Ái‹áäąˆcEÃqÚ"9m‚—¦kÑKKÞ¤¼TZðÒ·å‚}|Ú^î‚Ýííï}dH¾«'Èʾ Ö߃äå™R~óxZ)kåãÒ{Ú"¾˜° ÞŒö[êï›òrxÌË|vAXl‹Û<Íå¸òƲõ†œÍzuZÜ õ ÷‹ç´Ù¸­_m_Æ|a‡Sz[½ ¼ßKõðõœê®dH>F'û>¾° - œ‡mTpÆu„Çeð¸*×´„V6¹°÷¶€^½/wM¾`W å½ÛÑ9Pº©&‚kñµ-JÓ­QšúÜõñðIî h°åi+]ºˆPW7YÈ«®h£Ó½¤¿›%ï¿XÌ!ÕÐ3Æðl#yífQ={tqw0(^ê˜Ábcùl'IJwÁŽÁÞ³àßy#Éæ¸4uñ1_÷‚¼Ïχ3Õl%}®’ðð¹ËqÚ@Å.O–ØŠæxœí šML;€5>b± pØÆ),±JäüÎqû “Ët³§œDÉ[ãG6Á#Çá#iyÕ¼s]Vg× 6oÜa—¬ã»F {½øŽëlý9W×ÍÕEs sYÝ»©:nÍ:Ìjñ0»rÄá. ûØý$~cQüÅnÅOÌ‹o]ÂîÅ ,ˆÓ½è×åÅwk—,ºZÑGJGV1Á›ñh„Å<Å<€ÄÔ$àÓ7É^‘·/?ìklä2»†“„–.)ð_"ÜFè#x/G6-mC+Œ¦d¿’Õm=¸©˜wŒÜK>Y¡ XÁM’šר”¤O+ÞàŒ2ð;YþÆ€{ÊRc9]"Bᘬ0¸wBpÉ€D¿ËØá^ôÉ2¢äÎ3_u§Ó¨T ÷ƒˆÚˆì™|ËÅlÕJ÷“!¤4ØccK|7$ìÖɹÆÚé'Ï@¸A²#³õ`¯šTœÉ‡¡`ÓrU†8Ïr(œý8Æó„»p$Û…ÕK€âˆWVjòIüÑ.E¦ýx¨Pd¼–\_y£ûÊ ùªú!»3OUës·h}ì­f­5kÅ6oÅ’êm›ém“&|ÚçÇìRcîÓbncHö)17É1·¶Ogñ}Yy˜¾Z’ÅçËß¡jƒâ};IM/õ»ÂãWî¾qö—ºÏ f°ýÛʸ n„rnäã+Lß’§"T<ʦ®»îà¡F 8QÔ…@Rb¦EI§ o¦õ9QÓщ¦AM–Šê¸F;®Îøcg¿XìPü•K˜J8,éë–éëõ[êP·ÆŠ3ÙÀ7[ -ÍÞ \sýoÞ|ÞRЬà[ö'ÆÊ-Øÿöÿüw›<ÁlÒ(lƒ`^+óµ~~êð_¨É• Nã-¸‚Ãy­{aógo2øN˜{²ödìÉÖ“©W͘¦Øòóâívß0ô KW½¶njvÍ`²¦!òSÍ’R“©´Œ,KV¢5ïý’ñ~—î¾mùwºšçÞå*ÎÔ¶LC>«}ùî×ò[ïPUp·b+Èb'p;ÇÐRZžeÁfy:YÖ´$†J{eãήrÙ@Â5»Jƒ…ÛšVl1Sµ¯áø*ŸGþŽ\Ù82o7"kóß{þO?{ù¬‚LË-§›ë¾½ Ø\Ñü’"n/iÎÓFÔ,¨™wBj-UTù†3ü|/>-\Kƒ[Ët˜j°Ï¸g)g˜E‘Цêw½M×r»ñº~XÜíûék²É´ÿ¬h¥ -ÿÙ¬Ç[ûñSäzu^•Ô)ób-ÜcÞ -J—ÍÓH~[ÍŽüCsÅߤÃ+²Ã•R%ŽiAFae/Ìl䜣Ô)Óš)¥–KE$Z¢Üo°‰Ì‚OôBÑ5«ùÖfžvIco7 c›ã&н™vªlWÙEì½·¢¿¶bñ0õÕêJôƒsÅßE‡OÊÓ•ŠëÌý‘̳JDÓ&ïÈZ¶Õ*f5<‘UKÕŒ×Ä$Sân6ÙInw–…½m¡å'Y]KS5%TãÁÔ%Ÿ\8çÝ{}§OùFFÃxd4Œ;¿ïC¿®þ^~1½òÊJúþïiÇm3#÷ÌK0•KÞûæ!ýÕ¤«XÜ!TO—5UF•‹ŸÑƒŠ¿÷63ÏÃ&Q阚gÞ$Ý'ç Kr7]Íϳjn6j82Õv¤{|N¥ÃJrRŽm‰8¤³¥eeLf8¬Û Ömý;¤ìïè šã‘ÑX\lKŸzéÝ0Ñ7½õ’A³+ñGsçK~ìÿýõÿÍNÿaØGü)î㧸Ÿâ>þ÷‘æ£sŽO‡XFû‚XÆëÙSª$ÿ-«â–›÷E{ýEI&ÚÑYã­©ñ.)¿¥Ç+Kz¼5A^KKÞ’wwáwBëwgà;{‚f²íöôµúo´Gó!+šãSñ¶WcUŸÈñ³‹W8„]yÂtt6Ý7 WÜ…Ù^®];,]dmŸ#gíqPíu‚äïŽÂõ;䥷ȧëeÓ‹2Âô™ä-®VÜ”ŸBuNÅ>7êGâgÊXÖ™„[ÓI=•«ç¡¿Ær5'xw |Û±ÀÿãÏo>>þçÓåí«×ÿ†#¸ûóûÈ­5ªx¿fv­iVoi¬úRýnIö»ÏÉаÔoé!x_aÔÝ&ffÏs= Ì6 Ìeáù&!J·›Ì.£4}ý ¥Z¨ãHÜ«; ßw™µl°|í¼e“ª®ì”†Qk¢hÝ,+V,~ ³„)5qᾦ#A>‡¿j¸ŸÒn¿,&lL*ôu£Âö 6kR¡¬èîçE[ákäƒ3ßVF¸é`#ì ÅV½ÝÛŒáml’2<µžK̰OËPMSùfAxý¦¸›¾~Þf‹l6Êt%ýÔøèÛãø+ßÿýuxdEÝšJ·Vè u›ˆÛLtˆ°¿ÇׯAÓ7ŒzÌ÷¸†=N_?î±ZÁ.ª®E¿ ÎÆàêþâê»IøõÔ­‡)§¯¢p]üN›×i(½[!J§ªÈ”Ò¤ôîE0¥{Ò19}³IE¨Ö39}ý Iñ®¦ïMª^Õt¨Æqzè€ÈòVÙO[á§­ðÓVøi+\(üÖ¡ñÀÁïê ß•ª |òïßýîÛwß¼ûÓ/~±‘Û·Ó?|ί5¿{õñãã‡wèoÞþõ‹/^A”¯¿œæù<'hé)ù“ áL#;o<¶çÉÙtÆþÄFŽ`SÂ,#¿‘ÿÿÓ_ôGüó¥üÚæâŸþ*þ=~ý_øð/˜“ÓoNÿü?ÍéSýæïñO{tÿ„Óg¨|v§_µj¯ñëMÿGŸööÿýí͇wo^|óþÝ«=ýR´'{yÿþ-&ïWu"?¹ÿôÍÇ÷>¹¼zýo˜ìOþøæíã'¿|ýñç§ÿŒ/üŸø¯Ÿùõ?})ÝÝÉ'¿•è˜â¼Y²è(k-N«óôuv’ô—n -8l‰rLÌ©BâöÉÕËâ7lt¹.ÇÓ?½’ÇïÉ[{6`g†½ƒXœb9{,º˜.±f†ÄŒi;ÅùœÀ0ž@ÏÎxD˜!YLâ)fæ€Ç´|»8Іlitñl±6§×ì¬Ä3(UFÝ †_rçÙ[ñç€/€ c\>…ù ‰‡iíÓÙ‚6á $áüôÆÕÞæ3õiÂŒy '¶Y†ëØ2ö…)øàŒâ¿æg £·oèòsgµ»ÎÏ@¬ .›O.âƒKŒ qÆ‹&ÌÄÉ;}%VÐgs •Çä@"ÐîPiñlMÃ^°M‹ÅáJù VO¡ -¢Xº›àûÛ1¢=X~ˆ¬ÀÚ׉KæÌÉ™1xYÌC:3màÉa=ì Š‘ÀÑß%سç\ ßðñZgö YïC,}lœ6 .E†*z¨áÒ9H¸ães²{5¥ÚI:ÏÖ£±nñÄqØ2Ë{àAxD “ý™ätÆDaŠS´³v‚I‘…òˆò|ú…=ã²àºûrÆÖ¦dR°«°!°‚*0Xlîû„׃¬„Gí; q·ÒkO6×Ù Ù3_ _8JìÞåóeƒxlñÚ „Q~ìMLv ŸœHD¤s\‰¨(”ÀçA7UÀfÄ¥q -ñœŠ¯›ÊÛsá.ªºÉSLXU‹ [BQÌŒ†ž}:¥p¦†ä0>¾@|à cþÔîpʬãîÁÉtà9Ø£ÈÒQoŠ5ñÀÎFwø6*@ú|´ÜòXô–p°°¹Û"ñáÂ9·|a NÞ`z0ñ3f»`šJ8o•„B¶Å¬b-q8qíë®ÂK“ÁÜb×ÑI¬®8*&ÍR{Í®ÐsÄÀ±¥ôÄ[м ¢“ž6é ;2éžÀdêE#c®=×­dCRy•t±—{'›µ<Öñ,D~_ÈËgG•89DM–í?ƒ+ãÇa#DgÁÉÔ2';uÑx¥ú¹ž -¼ø6Ôe ÖhýV§‘²¿ß<£«h#k§~_‰3<'~«{ æËckˑݼÏú¥~v–Ç\™¶6» ˆ˜nCÞ6Î8®§ìAqŽ>;¬ zÌØoè;p "MP"0Ð=âõN3Xp©ÚÙÌé ²nä$|œÅ9€Àâ#™APr‹-È -á2Ã3CÞ¨LŸOZÄ™\ªŒ'¬"‘L‘ÓÓÇÈ ÙÏÈ -|½Á¿7`€yjw¨”tâ`qùsðz4êÈ RÁ €¹ÄÉMd.qO³»+óÞ±E¤I˜iÌ@ ö† vØgGuœEò­˜5ÆgâsÈpxaœ‡;go@ÃÙÛç¯ÛJƒëäJƒ½_¿ÆÙ‚Å‘V¯í3úŠ:0í¬¯Ä¦ÍKÔ=%syCGÖ*´·îuÖouï¿<åxÎv‡Ïžn>ÿa.HK‰ÔÐø‡E<»­´¯‹Øb¼w0‰ð6S1î=½7rc-¶éR¡÷DyJ2ÙˆÃåæ[X]HÁsF“Lãúœ¾¢N»ë+ó™êÓÓøýÿŽ£«Ú]ÿNË·ºIXsˆy¦¼/D|6t§Ájãv›!µDºÅ‘ÅõÕ’¬Žƒ ®V|ÃÐBíÒç íIÑЧsT)F©È=fðÉ“'iŸ«O 5%ëgâ’£¸m€•ý-Õ᦯˜g£©ð»Jƒ­)0‡ôP83Dc( °³è~„}'S@ZéÝQ…Îa9![$Ù>|}XY[]&dÐ?çÙµïôýÙ¨Ûc©‹W·Y†²øC ­pgb"¨ ¡Oõ  Žw&S'DÊ)î5ô£‚®™{Ú»D…ÉØBžî?ô!òt=Gý¸ê‹öڤñô-úwj~]«¬^ƒÙPSNãX¨ìƒØJe_4ÜÜÃ;õ-ôIýÜ ýŒ«ÐåÙuúñ /ƒ'¥~NÄ[»ÃzRµ>ï6ÓìG·BvãqgAàá‚wþ…´#i´ ݲ Á"Ÿ™°­„Ó=-úµ‘Z -ZÅipOɯ%:ŠF’áÜÔù мIŽ6F‰É’ ñ"K6Óø×{%R£„—£ÞÚz¬Ñ±{"µÛD‡¢vߣŸ"ïrH\h‡E²Ôja´˜;×ËÞs‘<§%-—Š­àÈÆ8•ÔöŠîèËH³f·x‹æ¿Ù»(R3Iƒ9Z¹"Ö…Þ»^ÑyÃ@è¸7ôA;^|DYÜæú‹d˜áæú(ú@\®â–ƒ‡ø@zusKVt®ÇÎ"GÊh΃ÜêIß >RF÷H+‚P8vm=ÕYÔÖÓ ip“¤¸Îˆr®íì¿dàêâ\$Gåb¸â8 W&:ûyô ´äÐ bÜÈLåT})ŃëG>ŽÍÜ9Ur™hÿÀ28ð®ï½+i˜çõè±nô³ävÁv§œÍâÜ;\ŠšfeªÙ˜†ið¼tÆS’{… }.˜àˆ .bcBÖ=NǾ˜NœÊÄ2Í”Z£O¦<ˆ«Åy:ÜvΙtp°+ê39ˆ’é¯)΃—&­þ¢9 Lô†+lð×§ ÑWXð¼š÷ÚÖqÓ9ªbÁÍs3Ð:0xp:rBTéavå+ƒ+'-"B™ˆ^Wª½mðé¤-Ñ3²1ÐÜ-ßœ;© 6bê•æÑËs¸[žq÷d{¥í†ê{ì÷ÉË(Ì{à¤Z;8€ÒD¤ŒGãî–C‹C§Ðƒ~:Gσ¡ -ºW:tååHD P*ÜqâeÞ…Šl\ŠlžÇñ†G¾¤Ý ³; å¹Uºêf -…÷ä!O óöŠ¿)MnA­ØžÎ£ã)ÎØ;zw¶ŠCÇÓõ[{'Òƒçõ ºa¹¢òðD±cÓµ'Œ.©Žú<êZ‡A׊C—Ôõ[Ã,õÏ{n²’ÈŸvÏð¶z;&ª'yéÓ -}MùËY½qrÕÊÆÕñn‡dc@ÞÁºaÔ#š­©·œjÜÜXpGå=>"…u6€dX¼:ºjK[x\tÎâxŠÑíL.n&…iRÅ8¸7ª+®ÅDî7›,w¢î—o ®‰‘~yl¡êR_=fqyx臮©_ó|'| Wò$p´|’\ÏêsA'ÝgW§ÓŒzj_©êM‘v9<ÊèÝ& ¥¥Cylí³‰Ü?6úÊ"CsQ*ýçǯ÷>ñãÆÝ«úÖ‹ÐQŒ¸Ýâ¢N£“=s…{ ØMYüäë«ô‡n÷_fsÂs«òãóÈ'Ë’{#îb‡æ‚¡U3 ÞÍ^À3*vÉD4&¿[{¯XÌ2¬~F›Å^@·%lU’DÊób/ aMý -N‰M;{Á`¯oö‚Á¼ÞltáÉÌ–.î–`Œ¶ªýÁŒ,ŸÑ¨=µØ Úß[ó@ûl° -Ї'‰ã1G@}`¯Ö×dÁÛ1 $Á›h—Îú—Èûû¨Ÿa%{óÀókÝ“òè<*º×#óÀتWÉ‹UT/8¸Â£Ô«õù¸-"Tñ*uÇæ±Õòõäu€SY¼åìcÏó®†2´8Ò¤´ê4òÃPz¥þøFGÆqfÆ~†5†òÜ*‡"|ÿîL!֋݃W¡¦žN@¢F¥2y®œóØ*«Î7ApÍȪû45ÔY&@˜$Þ)¥&*å°øelÑ\Ÿ$p#nÅ£~(pY¶ôÏÒÕw¯Ó®È]›Y­|‰ê±Y/¥ý(À+Ϥ% nÍèð6}‹æyµ›”±›a^‡¡<·>?ÆàÇ+#‘¡€Y$è0«r0ÑÝ2T;“‹gŠÅTa‚ÒéÅ¥b0W8;uƒÂ3øI<ÓžÒ+^’ LHìc¬®ðT/;qxï bÞøËðAå¬DF‰{ -5Ý,¡à²-¢’Ýh'¢ðEûA ÁÄsCQ`üÆÃø» Ö æ^¡’‹(þÓJçié°ô­Ìò$Þ3|áíÅ+_ýŽ¨ÓˆºÛ<Áñ°ÛhüªÞL”Ò-[§;$91=%‡+¹ToÜbÅÏÖÑ”P¡,á쪿n®Ž#„×Ytؽ4]”ÐÂù ØGsæƒÎz &kZ2ä‹h×£S€*e~œŽ­=Ó¨s°m†,ù!œ¿@]ÈÓ‡{³è%$8¨1!<¸…OÏŸÄN+ïh$£hÈ cjñÑ#$>Ã3ÏÁgÇ­ª©Ž–(ï¼X( ’%žmœ9ÊÄgÂZâó fÊdƒ¸@ö-ôäúV‰3–óA+ -/$^¬óéh,C‹îôIC+:SZQÔ͆6©q,NE ìV⓽S×¢Q£nn†~†ùÆòÜ:ýèÔ+8`KÄ’°áY·3þˆ‰Ð­Õ·bDŒ`«½§Å¢’—Ó-.@»7‰gãª+&‰@z‡ñÌEB€ -,%Ê¢®ÍÂw×Ë'K’£¬–‚Äèaì¢, §U=ïfÓð:L9k¤ìøU¹Ð$HK÷ìÔ (… #fUÔª2Óié§ÄÆÙj^î´ +¥M ±†»oè&ÏÊ+DÂhI(Ü\µ¦3Qi5<@ƒ¬°SL:h¡ª“¦Ê1 ÈMý„ Sž¨Rà DJ™h^§ÙwhÊ\ÚtZÈ ƒ´o•½*{"å)«–|‘#p“X9Q3“o8¡˜¢IŠ´õf½Ìô« -ÔZ=k8b$ùåQ+UY‡¦^x²Ô&mâu0×bÈ‚¼˜º:A2ÖŒ-Ú-©ñÎ@:>h¥¾+ %Á5J¥9]W@ÎèQènÁ.t(ŽÉEœXãdÞ#Ýš+)®u É#j_Š¢]Tõ—dTSW£ø©38FW8ØW*qô\&² —‹µ¶(´V¯Ñ@f!EŒ\GWkb%üXЖêÔ`©w²¾4ï}§” /fñüpê§¢>>àðð¨åIõ"Îtl?Ö˜Ts*«Oi5ŽK×òõ;“¡Xql%1­ö‚Ô«”¾ È"ÆÝÒ%(ÂÓ¥ÜûBo[!P™”¢mŽì”ÏÛÞkFnÕ×9#v£¯Ú7²‚~às‘(V1eˆFÊ2Þ -:!WÁz2|÷Y:Ù]Ù$KRÝ`u†Å‚„ûõ³ÃF`“ fP ¬"0€Å* },¼a¸íià¶§k—p®²=Á¯9[Éw-”àbóÃ8™$fì'38Ñüä†Ò7è^HŸÓ7ŠgbgÒy‰šöÓÁ@h <9ù`^¨k¡&fè§ŸÛa(ϬÐ≢¦îÛ -¡‚"eÙA5 cK>;n5Wg† y DVÿð”…N̉AI}“ëŠ UÆ ›™Íú­¾Æ…YưÒ{ȪKÇØ .%ÅL)×êÁP†Ý+µ'u­²jÁhÌŽBÚ…ÑtJôÒñv|¥¾>¨Ÿ™±›av‡¡<·JËzbkƒÒÂCµ£™L ”T+æÃЊVc}j²x‘É ÕjX(™BÜÒ+ <*Ú%2.AÜŽnb_ÌÌG韬Áцý›è“†VñÉ•âÎVÏË~,Œ„£¼ÝÞ þ­wj÷Ú­í8­ýcžø¶Dtp*4£5Â#1 „Ž”B]åJÇV -5ØB©g3ÛÀDîUÒqÚª°È¦S!CNŸà #ÙkjXpjÑ1µ0=& ™T3`†"|ë1éб¨Ü§OJ|ÖÀdÄ*Ò‰÷)F¼,ˆ9 Z¥#-.'›–Ý)ΰÛæ¸gqÑÅxN”YW-~qáÀz-±½:©Ñ´šF -ƽêÀ¬8t÷ˆZä”ü|Q‹óŒ¿9Ïô¥÷#´$d¼['VoÛ§—¸ç¥÷ÀQü[ôñTË0"áu‹ºcOUqÀ{®JW%’T’3ªNWÜÕÐâuÛz°¬ƒn:˜­ƒ¡ô-ú7jZë®UÑ Òã–ÐŒÛRý9¾Hߢiaö2öÓO|À3 rlGû¡!½ÄË܉€è-åÛ‹Î: »p°xÌ™•š§"‘ç=ŒÖÐB-¤ -×A?€×:„¡¢{}ÀÐ -2é1e¬ÒL®û!du£í?ˆNjx•®E3övS2ôÓOæ0”g–dáè®ÅˆÏw¢~tËÌdø±Ò6¸ª—ì[AüF©ÁhR;³b>‘©¦Ã U~¨`èuá SŦ±…RSܳA.:fº:èÆÅ@ – ˆÂÁ†ý‹´‹}ߊžÅñÔˆQ}ÄvC!ta•ì†åàúª -Ñù¾=Ìä0€gWäÇhô ›H®£z”œÊî°ßDù€kJ”r1up$½‘ JLnf…îÀà¨z¤³%”mQWìPáÄ¥_o<ãû¿‡‡£h 6M\É‹lƒ'nh¡¢´Æ_ï1à¨ÍS¥]¢ÝÊ´˜mÓtf: W=t×J$' [ÙTN”5¢ G¢t9òCªéäåÐLœ=̃ºd<¾0%Ê<‚ÈqЇÖcòA‹D[dbôÅbµAb&ÛÌÛ(ÄdŽ1Þ¤FüèAæ†*‰ïAæÆnzt8FþóÛÕۃ͌IE‰óMÃ>´²g ©íÁåœ8CSãE·qjÈ{p9Fk'™±Dÿ f~îÀåèœ*¾t=LÀ\ŽN¥ VÂÚd/8<=¸u¬² |\Ó7tØr “°KO÷F 0ë°åDS‹ÕMmŒaD™ãXEuË܆Äl^ŽèeŽ‚ôJÀå¸Y•»²LËcG”9²À–¡xÔûûÙÃÍÑD&A[=ÜYtyÇÀ?cqç"Ö¹£õxg<ø…kˆ74éŽ+êÄ™KˆâE'+4縭}ÞŽíömýRwð¼¡E7n}ÀЪh¸ÏÔSC â€SA¼@ß@Ô¿þØÍ0…ÃPž[ŠE-ÙƒšŽ!К 6±a po}£1ŽDSÜu=FÄ®9´ˆŠ¼é Y-­è¢€ƒÈNàžƒ¡P›çØÂ{ÃÓ6´Ð'upoýtˆqcZ¾ÓÐj˜›a,ýô>³HËjöài<åYN0¡4#Љ•‚>H7œ¨îzØ6[xÝŠã!¨‘Aßú+ØAÆ ½ô`sã@ÆÝ ½ž@ëDçKS1ƒ+­É#z˜¢¸1Ð3úè…ö ô‚¦¥ïe˜Ù~ Ϯгʱçî*¢Þ òÝ1@àbD XxFÄŠ7`D þð‡ LÞ1àå pÞ!HÄ€ 7€D PzHDÃÔ;ĆÀõpˆf¯‡Ü÷Á!½bàÀ!Æ>ŽÀ!†¨aft¾%bé;‡èñúlˆ¸¯‰ü¶ ‚ßÑülˆÒïbÁöë‘ ÈßÑàþ îßüм‡xóÐ0t‡8€:T”ÀC(‡.°‡rh°‚À¸…pð‡HpŒ¨ê!1¶à€Þ0€ è =Úà!xC;8`7ôøƒ†ÃóD¿Fé õ1ZuÀ ¨ß¾ÐCb8 €‚c7=á8”±ÅàÁA«8a˾пÒ!„Ã03Ý ³ÛåÙUÚ²’;|¿C ‡ƒV¦Bl úàºaÀ,\¿Õ¡§a(hg¹œq[Ðø5¼QßBߨ›˜±›~nÇ‘<·FËJ•- VN‰ƒl3©3áç o.(]+î<¦_?H¨¸'„…ÓÌQÌâà$ #ꬤ`È -Å17Ôë 3šÞý”é¬?è¬2]”páS¦>ÆÐ {›Æã­ -isâq𨽠}-Êøú±vÚÏ@ûÊÁw{n ~¸«ÂöW…‡¤DÇy*eÔv­±ô¾ÄæØ06"t½£m[šˆO¨á£ÐèÍÇ V€È<ÆÕ“ÇÌq¨_¹¸ÿÐléÆF¼3żÀôṙq -º×iò¡•¦ÜF´ÏuZ3ˆ-u`íòì×ï¤ê?l˜Š+mÒWÔ¡5cÕ¾÷†$”“5…Í8¶¼É¼3¼P­§ >çêÄ­1$®Ú[fªÖ<•m‘I1?;¬Är‰VcF2§†ž“3i‰¢@Tk¹nã— -e\æjØ nrÓò-Fû‹Ñ~Ä©é?¯cÓκ:Þ§ÃCHçù`hµ¢E”ì_hùV?í9×&îÇCoEL“¼M¶«ÎÉ…È~Üö­¨xH‚à;—(½NÃÚñ³ªL“8;Û.!ÅQ²Š$<´hW2s,òÞ+â0<öÃ5šÅÛ¬H>Ùq,C‹îÚÜµÊ -_èF5>¯K©b]ö³¸2ŒïÔµhR\77C?Ãücyn~Hq®ÛS.V·2Í£¨J5ñèa¿ÕmmlEãªDØž]5ÞXPOø4#ÈLõ3« ¶è׃çmë— -U¼ÐñœÄQìwÛo™ê\°°9<¯oÐ[ûZC”U Å„ùF ö^^Öàë3uíà ô-ôIýûý =Œå¹¥øÑ¨Èz¤š½ÕJ(c‰ÄJ© -ÿV骩”£‚ªøIÂþ4^£úó=BÆ_.Fæƒ -U†û3Dd~¶wôus‘ û†0´èÞ ©Ý»VôbÍw5ÝÐ0–t.„”aÈCvÛWé*ôÃL _o“8<ùÊÔÿxhŠXS ãñfÞªaƒÊÃ[·ÉЊVî¨VîP…pKlü~… ‰Ä/ BKŒ¦øY²„¡^§š¶2A/ˆVrر<¾Ut£oÝj¥Ó+SJÔîöÏC Ú iE zyuß mÁý»Ý ó7 å¹uø†QSgFúàÍ8h¡n¥²0­h&…¢-þ âÌj~_oAN­"³Šî‚à{›Ç*Í ¢ è*š\×Äq¦TŽÌFãÓÑX†Ý«4«ì¾öæê äbQŸËýXÐBà”¶$§ƒwê[¼®“¶Ÿ›±Ÿ:­ã®,FÛ_ AüÛ@ÿ¡½ù "#ÙÃˈX ¶=`¦Ñˆƒ{SƈÿHi𞬑´¢êíPɲ˜ãýF–¹§ü1¨˜ u Ðc¨ð@Ü#Ž%fÊ#ÉС½“›G|1zȈ>«‡£CdÎWÐÄèeeœAÄ‚ £ø;, -ÔÞ!bÆfæq° -“ -.@a‰ae4Îm€Â²„ó‡,ÏgŠq#,˜(zªýy@£¯ݺfÈÒu¨‡³‚FB—w°ŠF@va]›f®MÉ„1ÆV¸žŒb¸Dñwh`W7õÞ­£Ð*ºc쯵²ƒÙÂ.β){„.fNâ8øÊôÞL‚®2ãÝ -SÐ÷ÏY+¯ÖÊ0k}N‡µµŽîªk}§þ[Ë,tϹ:wϺx~ÿ1‹î‚‹ u‹Z­i«ì±µ²à¤úR Ü3Ö@Z’óÕÃgÑóÑr½zÔ,*}Fˆ+ ÁL<ÈÉ¥Jw¬}.«G±"|ñ,TcF˜+sŒkeF +¢C ˜lůrTã]A­¢Å`Dªrõ5z\)¦sN镊z꣎äñU¨9Bž’ä:ÖTÔ5¦P%‘ð¸R<£9†NªÔ7éA¤x¦`~ˆ…Þ”HWÈ(®‡#PT²Úù<® ºá¨PtØIiÄ‚*¹nÃ(+ Ÿ0Ÿ™ˆ$Ý”œ»ôéð0î©2/¡ ¼Ú¾ÓZÙ)I6ä9Ž0Lä|8qâI]Èð%BÙY;>f­8€6Z+;`¤õ9¤Ò2¸@¦õºÊuºÇ\¹6Á4*+¦ÐÜÒZÙC‰ÓÐ(AöòH%ÈîÙÎGHJgî£#¥Vqˆ›Ô*{Œ¢öœÞ¨î©¾P_·Î@÷”«óÖ&ÖKš’+¸GKe6DŠ&—BSòkD‹wsD¬ ö_"&~ßýcZÅ6ÐZÙA µÇT,¢eHÜ¢eü­Í2 }_צ§ÍSU[ñv?%Z+;ü®ݬè (Xóþy(H/Ìߢ÷vÎÏY* xÖÊÉg}N´ŽîCh}§þ[Ë,ôϹ6wmrik‹þ -@ÐRÙ£ò€¸ÌÞúÐ~˜ç+x@¸Â‚Ë•tý6ß?§U鬕{žå1µgÓÙgyÖf™†®¯kÓsä¥ÊèÇt?™â¨±Ç -c«ÀÙ¬ŠFÄH?€SGŠõQX`³+qW0GÅøÀ¥âb`©ì -–çôàËèŽÆ—ë[Ô?ùù‰þZ*›ï$éÛµ(êk¬¨¯§¿ýýã«ÝsØïûŸüñÍÛÇOþÇ›O?þYû§¿ýÕ» ÷áñßß<þãzûÅÕÁ×¶wo>ãøß<~ñÉ{üës­ýø¯?Á?|xÿîú¼´ñ¾ÿ¼oëéšH3B4ÜßÓ¯ú_ßüéÏ_ø®¿ÿ—ú®Ñ\í–/û»Ç¯ß}\ß6\ëšÿ¼ú DÖ÷×ï_¯ßé–ö~ú››_ùOîß}Z»Ð¿/zó®~òËÓÏþþÍ¿?þ|ÒD[”tû -Ÿ7âäOÝ,ˆ÷à©5Sh¬D®M¥eùÿ?ýeÐ~> ¦)sú{üú¿ðá_ð¸ÓoNÿü?ÍéSíà÷"ÆÈHúç,ñŒOŽæôë£VÃ[ýz}ÎSu‡½¿{ñ¹­ëvyõúßÞ¼û“n¢ß?¾þ¸[³§3/ž~+¿ù€ÆjÊ‚™B4};O(cª]Å×#5…V+FkÑ>¸Å©*Ô(~ ‡é©y¢Ç#ogªclk)+ÜÈJ&½È4œÑè† -fé`E£Ï -«ZT:½Ð£RÁSäó%…ˆ@ñ3W$O·ÑGG‰ýQ´WÅN#à˜!;ó* ºävRïç$dKÆûÃ2”^Ó;z+ÎxR»è1g^ú²‹D„s&«ÆW–Tõ YÓƒ29Z·%CiX2é›ã« ÿ¨pVt¨ —ƒ -fïf…oÒ™ôƸ~ö&w˜?¹8fæˆe]|Õm‘ÑdÐ*¡f_+¼[&LÀ¿˜ŠR0!¨/Ìl©'6ÞPó:TȵT–déË@Ôʼ‡cˆ¿"gB]Ì -9*˸6g¦J"Üš²‚ZzT”L%4ÕG`bD}”LË%yÐ*$+J&:vK?^œA±ùT .*»mŒ>GRW£ž9´E!ôe?Ù"ÈЊ -¶2WV|K¶ÊòàØ¤y«Êsé‡ áø$§ÉtÏ"iˆ-5$'Ce€«>ÈÕD/¸#d>fLœ¦7#èAŠd(JÕà˜ªÿeÏØ:L˜Ú¨áÛDSC1މ)†Eç™| -D`ý:^¢á!fòý Tm44ËçÌDF+™t¦Jj¢—Ô'QEà g¦C£Ì!cZñèèa¨ViÝÓQQ-­îÂWR,¡TDïc9iýGi -Äšû–ÄßÒ²/y]¬èiù Àé‡ûƒGÔŠš4¡Ñ‚ê¦Ú"h ɳ`ÅKZØ%M©´¢5X<…õI3³ŽCTT\vŽ% 81ÕøªÉd:( iâªñDdÂ;9AÌ'ž1æ›-|jØÃP’ €2FmE«Â…"ö“VdQ•Ò“Ld2£+ŒULõ ·ç‘f•¹e[4ú*LÏÉ·r -rRMæÖ0ÿ"W™Éb K•‰FøÊ´ -÷»xN\†ô$Çœô™®zRD¨:ßB±&XMè)ƒ^X3ã„-U†æ›"pžæ™I'™>SN˜“hÈjʤ$õKŽQ -}Š ”›„)¾¬ôfúMºäy|¥E‘ Bj–¥…ÝHXÔX[ÐDŽÊ0ãö$N0ëÑ¢Pnˆ¼ú:ÌÑq*ðAá’„‘c #Æ&dšå¹xls¦e†&]ú -ÓÀó&£#"UqI c“„JÐEÒÐÐÀ9KȯjA=Næx¦ÛGh @Ÿ4ÉÉÒb#ÉAšM'bË 21Lì³>. ŒNä(RK&Dm‡@‚& -œiïÊšK]aÁÐó’7§Þ©œ ñÇcV. 7ÏníŒ&qÖëΌ4ׄꂖÄK¾”’â"î=æÐ`l¼|šJŠÌ>0™ht¬$Ü™à@€¶ñ±(ÌIHô1ÑšƒÉÄ€-)âÄI}Íí¤Y"èEŽ%ž»Na3UT§HÆ·¤¨‚^Aä3±RQ‰P^”•Lè—€ÆEçQD²ÀómE ˆÀµZ*€xn‰â¥;¼\uqdzÑ ®ßœéN‚ÁñyŽS/FQy y4©ÄÊB!·¨1Ü!-²Û&ì—QuD±búùiÉŠÔdB„у¹ÐZÈwôÌ,j<Йó³@*MëìDÚb+I¶WjáK †Å¥×.Ñ•üŒP ^1N*™5Ó•x*j°Eh¦˜‹&In!ˆíÖJEjÓn˜ï…aíàux¹±Ò×yÇ0¾µ·¢i×ð¹¥Áª=ÿuÝ–Ìe`Žv¼.Aɸû¸-AÛI/(~‹1W¨!qÁŽ$*HžU‡§ÓdëÐÀôêË êçjæ µ› s\“ôà9H’X" -U®4œÓ YI*ÈJú 'FÏ5]¹Ð@H®$ߢëƒTèsÀeѲÏ7*˜ÐÃJ_¦¨F´;¼¢‰Å¯øŠ‘PÈ®œT¸Ð&®ÒNÌ@‰ž‹ÙTàˆÙ“iØsÞº'{w¢y’ Üó"õÔü›7I·¥"Ð0TããÔ%VY5‹ãf'×¾ì*sú6ƒ<ù&²39ãÑžmçÆ:EÍE±Öc5N!é>3>G3)j– -Ck»à¸ÌRá¹Æ°‚ ÎP"Ó •`¼¬TЉ9‰¼ TÜJw¹¢&ÝL+;+æ¹A¦$ሉ[Rˆ?“hèèJ ó[:9¯²Nœ:Ü€œºÌÐKšÖäàf%ì®ó‚çTܪÁÏ 0"ÁËÄüÅ1%¥8Xèæ¸!ƒD)÷žk~Br7ãâcµ™“ÐÐú͘I®l£5¤è€;–Ð+W¯rÅL#±ã¯tgIÖÃYQš“ÿÙŠY¢ýèÏAq×%‹$.´«\G<~Öò™ÏÌN“øÄ {ÝŬñw’‹ÍC™ÜePûGDâ·)¼ -„Llô•矈­Ž1Â’¶$™',¨l$0s–0z¬ô¢¬¿U¬ --­tÙ£F›‚,©$Óƒ5´^J½ô]Å€ä,ÆF^=ò¹x†ò àˆdr†^“¡÷fB$W2ý6Cœd½‰©{³î&‹,“|îjŠ å_ ,0™{c(\7D‡Ê`Ë4,WÞ_0‚ -s%ñ†ªB+¢ºª:…qæ­Þ°ï¨‡=KÞž&*ï…Ã'/C‡.¢ÕJ¸ÝÙ‹¹„¶\"øDLàZñº*g<éV2d¥Âú­èôX‚)dVÔÍ\sLEš•§ÝӤÌ2·µ3I´™bD„ôY ­`Âëœx¡ôµ¡‡V²šHE‚=‰sé ·Jegƒ I5hœå>g¥8êÐóH\;¹â~Þ~n©ýeÂ3ê›Ù™mYL©£Â4“óôR9gý–€€³Â -\£”Uô’ØµÈØ¡YÆšT|¨˜å–>TŽ~œ•¨>T*Y›,¼¬8‚¹ƒÏ 7^\ÅÃZ£úV¾Ý<+Äm7C&Œ[¡çeâ쯡ި¤MŸF¶èª¡i–‡;ÓÉR H’HPºUhÚÓ^LÃŽ"bªá¥DÖo–º\ÍV˜sþíé &pç°-H>(?§ÓSª÷íLxR!êjŠ„ÐäG3ɽœz_JöÍ$~0©ä¸^…©·ÿ”¶8©¬PÃn¢ž ÈuA4`Vˆ—K뤾5‚I¼êt8²còwLêˆO4äÒ -k´p@ÜÊõÀ@¤c*Ñ管–GšÞ8cRJ)V`GéŠï+ÖýÛª?±\ dé[E‹¦að†Â§ðÈQÿ)×Q¨øB„7 3àÐÎŒÂÁ’ýÇy ¯ÖB!ÁY–›¤ÑT·+ù…,$ÕªqöuÓÅÖ‰ºx^¬¬Ìb*Š’žÈÑap¬$dž.‰D†¢«h¾‘>KwrÊS¤—vHÌe¬(âiÉë}fÖî(4³;SV¤…2[¯^ÈT# s¡fe¦ÅUŒ›î˜‚@×SYAévôÄ!Tm½ *P"»egeöœø/e}Uº¸D¾j!¤rÇ¡–TîT§µ -((!¢ˆ½ÅͰ~‹Ô³x)&æ˜=ÉuBõ¥˜ Å”H¶ÚÒ´»È‡Tˆà -ÛH•)A™ÜL×7K$åÖ$}+õ€ÆÐNDŸ%ßdVŠ •†g™•^ìe¥Æ„ÏÌ¯ß’ÓØcÐâ&+ 䥻9KÌ0[Vêþd…pf&óçdSáWšÝõ¨Ê¥!Y•–°é½'F_ÑËdl'Rh¡ÜsH5Ì„â`à¥2ëBˆ$s„Çû詼ãéÃ3”­$Òæ6å®ÏÉQ>$ºÜ†®ÈPø™Ð8æ|!=Á­–Ç -IEí¨OlÌëaÏ´²Rvg¦ *ÏÖt¸ò-+dçñ¹“D| nþ]Úš1wˆ81¢°¹/$RŠ`i¥-±ýqÐE8+eÞøÁ¡²Te·€‘Å[eÀÿSuÊkÑ›ªºÏtJnëa®b ¹3ñn_©Jš„צzV4âät† -úŵȾ’6ê`è ¦# _%êëÈéôÇ/0î«¥ï’ÄÓ< `5 °R÷¬=gNfÓK `QUVr+PƉá"p£4—aröø ï«:1Q£*.NVˆK) -yC’égéÅ›°:‹¿5>wŸ½êòÄíŸs)¸M\©ŸP>K>Ù'ëýÜ/³Õœô×u-£×ƒ(e™e]v|«æ%c¸YøÑD\|znï#I¡.iR™Ç¨:,ºª ’KÇœÑÙÒGSž‰"¿L•#CiqITÊQ1Q’ófjX‘«áûG(ýޤ;†¥;Ãë•L$-•.«ÝbþvPz¡Å%«Õ‡ ‘+Q±¼“¬6¥dF¨«•H³Ä¥Ì”’E˜„0äêRM™\Zu ܤ „UÏLírŸlö‚‚¬y‚*¨‡0¸pRkETU:ßë…CNÄ j¥£XEæQ/x£ˆ¸ …érbñRÞ îüI!N!Ìas?ްüÒVvHbòÉs΋ÊN(LÓ°C8JGA¬ú³R¼­’‚ŠpÃs#)‘f©ˆÔŠ;« -5!b?î6Ú]l ­ÂõÒ2Ĭ ž ÂHº«ƒ˜‚à‘ådffñÁ T7'±«Y2ydVêÞW:*ß=†IH‡y¹ëàt‡ î¬ë¢¹rÏ„q_Ø=*Ø7 ~&\jYÛVÔP0úâ“–ëEÉ -j/ÄËPÿª‘j݉2‚¨»’L²üxù–äzÄt?¨P“Œsi&OI¤ÙÙ,Ç)ˆD$“«ÀØ“w -‡jšSÞ âRÙ4”¬(”šÌ¬Nµo/8'0™ |<ÛD·Õ0ÑüàòÀúC#jÍ7g9©˜Ñ@uQý¼éwÔ ¢i7•’À@mfNð}hNPßÍ®‚°„±Ù†JÚ¡£šàÀDÒÀåb¥í_\'°/N©LUI4Qï™ÿ€¯I³1m5̉Sã²SÅôЂŠp)ÉA"%ø"9ŠïZ!èNÂ×25rP¦a®ÊݲfªY’ÄT Ô1ï. -ù…‰Îc"TÒ`ùõdrõiÆÿDw³ò'Ø"Âr@bP"Ó£|™yëôÒF=CŸ˜Ø!I/Q×i3‘ØìEYJ6ßdæÂò^»`R!¶ÀŒ¤åAŽT ­…tü ÇC`î+ìJR‰âжpÆJ ÁB&×è̉¤Z–')W®¹/Åu‹–b°–äËI v ‘T_OøÂè%9‰—<¹œÔ؉û®ªà}QÈW/©“²0ÎÔÕ°[ñ¤c4)r3Œ„*ôA'þ¨p)ãDŽæ$ðÁxëLÊÃ~ \èãCP§š%=œDzx¶àN•4jsM$¯´¾Pû§<¿YJƒpHÀE‘ -´­™h=‚Eé´löšKá©™¡&×X]i!Œ˜²­ë Ð1/À0-«Ùê8ØH³“¯{žAI$™R*F=’JA##‡Ëè¾Xš5;>ɪðÅ\Ð¶Ê í Yé‰ÞŒ de;¼œ:ñ¤æÝì$ƒ53Ήiç–S^îγ‡°n5Ž×I”÷¬`nDTß.IŸ«¶5âS‘}Ÿ#hYפ”fªíñŠ^TŠ #)Ê[ Ä,Ü%Ì¡'-Àu0ˆP\®C<$0ý’…L­3I˜Ú–Ü€æ\- 㙵UÐV@% [4†“nQ.Ìq”»¼fg 1¡… m1Ådæ••˜Up^ž$"-m6k?Q†ËÓYtÄ¢÷C $­¤ ,ÒW$.z ÔŠ™šT˜–»Žj5¯À™, Ñ"™ 2 ä%#)ê‚X5CIÝI>„ga0.÷mÐJçR]¤rÓàðÏÔ¸ÚZQ|Ñw‰â·5·{ÉÔi¬Ã®b]ÖnxŠø#Е”àüò4Ì..þÌÄ4RMK¦iÄÄ>G±˜*Sé$а|ÒKÔ Ã¢õ%·(¼!7*3ЃºQ§¦séœ&v ªã]fhÄ*ôW#\³òE”Ê™†£€¿êZ <ñ$ñz>.£Ë ‰&2=­ð¬ÄVÈzŠ(LfC–~® -K©V’i”ŸÇÜ’²ŽöÆ<ô5Œ’@—÷’@gɆ#y]ÅPEï­,ƒ#(«V,.Œß´5c€‘‘KŒ9çùãæê)˜?B!}ÝÉÌ ‰j"ÁOÔí&£T5µò;Sés Oá[,‚'=@v–h¹æRÇJÑs¢ÒÐ(ÇÈÑ¢`@Y\Oü~ŸÓÏRÒÐµŠŽI:£­{éLTµÏ ‡ž“ž$q¯„N¢Âð"Ä ÉÄ|Á -V¬®¸ûÈ0Ü$sš¨$똱5¥Zqþ?öÞfWv&;Ó»ÝêúšŒ[eÃè£=°g‚P-\*AV|÷ŽçYLfæþ\“2à38›Éd’Áˆk½?Šo…›DÊX×r8„Ñ2ÕŒ~…Z¦q°&nMD®t<ãTgð#d¸½–þ -Oͪ‘q.óÑHš(Er†m -éð%ŽàáNX=ãÉfÿ”_'s36O4h ÛïþŒê ¢ÊÄè0ng =Üž¾«qÔ)¾ Íl¢ … ™Ë{¦’F†n^ -4ZÃc²[Û÷,Œ†k•lò\b™I+(5îSgw!9~Åq´pT³Å4Å0·öc/Î[ëFýbÿ‰Êža™–RE§7kógÕ~D8ࡉÚÓü1ª`ë—V¤€þ aÍKb·%JÀ*c9™Íü¸dм§éâ“(=ÐLÊ N7‘¡"î¿Lôbu¢—î9%6Wõ`„_Œº ÷Ëú -Æ2A‡»r+PjÇÓ#­ñŽëØ‚„”\¼ÍiäÈÁ&YS~IYû6áe m¤CÒÛ¨¡j¯kçÜ!atZÁŽ=x9…š[üm5®{z`f—yÐv®”¸¨äù>C¡'÷,Ë|šŒ”ûŽÓñduˆ2—M¹Œ J‹äO§jß‘fIñÏß œŸžåá á¹b಴^çýË¥Ç%—0ô¬ù~³¨±£Š˜™V®•• jØAû€`°êŽÎXl_„nZCÙu$çÚ ó(f_ê´Åœr}A‹µõááØ'V ºªe쳄‘m³ògã¹B+ |%Õÿv¯1_–#¾îNj‡JˆÙ…ôå1â0tfW -°'Ã-L#‹áû‘ã´!§Í<ßÒØºIMM ôΪïÝn0ôÇŸˆ`…ë cu - n-…îK#ߦ!!Ú?¿F¥T…‡ 4ISÙâÌi´AKª¦·XÃû½Z^­!£TztÀAwJˆ6ƒÎ:7Ôó~Ðåàž¢š:*ÖGëCbÎ!1;òå  8[]>mÁÿS*³ˆ|)ê²@ è.(øÀWÍ <æ:»¥; :íÕ¦†3 -÷h8‹¡¡õqœìí¾ûŸML(=\Œ…ç2Ú)Ëæ»@쑟ËüŒÆï†x–YðÈ«3{!n Ø¿ìè–? -øˆëïmDÞ=ˆÁßž+#›QèZ)äN,…czA-¯\7t•6çløN ÚêB{7qesÚ— ²Pé)|î³ÁïÂMÂCÑcK-8„´>ƒý4 3ì Ú4Lhó‡=åéé^ÀQàœÂ H„‹W,7ˆ)Ó£ÿ3·Íó?P8 -!FRƒ…d¬% Hi¤&òášv ‰ã* rœŠ*Yð6zELS Ë"XG}ûœv ª`Í¿ƒMA°7ÏRÓ-ÔÌ«{†f4ì½¾-ì?BëEüf¿£Ž¬/â¸3~bpGŠÐhÎvìÑc‡PàS±†|ùç´Ø]rߘÙd¡ ò‡õâ2 ’J9ê|J6 -ém!šDrŽ<‚ ÒæK¦»½9o„)ζØ !ß~Há´ã“ƒ6µ¥-ËÒÈß×ë$ËÕж|¶ÐPN †*µ>—qø<<œZ|ç ÙÂ0¦‚K¡–W1´\©ŽtQRŒÅüp»QÁUÏ?é9ç/amKˆ,Ø?hcÌa&þ­ÄÅ¥¦­6hót—¸´ýKÝÜðƒÈwOÍ- ËG -U!ò|j‰ø¾ lòê_×øpˆ$¹7G:j'×RödïÌq ³! U~ú~Ö¾¶ Em‡;np” ¹A‚Ô*&<óý8¾'ãcQiލÛT®çró[Lmñç¥G@ƒŽ^¡ÆJÔ)Ô.bfí_yÌX÷z|êê+‘Çža®¼ØVž'%Sf'\†<Ÿµú‡]1•)fËvà=Ž%âLVñÏe%¼w´bÒû$¦T*¦ó§”®ÎëCʉ³ç뱉—î†åø|ÙÊ^µ@r|¸,Þ9à¿FfÓ €gó*¯È;7€÷ê;ÍöÙv-n®9,Vlö(ž÷•Z5½4õ2»ŠË0 2³€(ñ© ²Î½ŒDœÍ—8Q)‘©ˆXèîõE¡‰¬4µé}¥ß<ÿ¹àâÏZ¹ïØèM7JhÀ™Õ]½5yÎ曲7Ž1¨Rºd’dYl=yÙ›E‰pކà•«Þw_®L!Î;!¾œÝÍN?P G…k6¶ÌH¼~ª„š)H$Š(’´Ò¢ö²Ëa~=ÍЋ“¡£Ç™oÙÜârUO _7·t¢Ð~oçð‡¿ù º}•Ù\v¼ÚS€)uÌÍI¯¡MaâSwôþ }Ò†–߇OÀRÞž¡é» @1Bʰ'p <æŸv㡯XPÙfc0³¬Í’û$<7Ð4°j[S÷Ÿ;ï\!ŠVÑ·€‹søùÕðZ³B]¡ûÏàÔ²Õe"^ùÒs¥¹1;š\p½Ö?³•h³‘ÊTƒ?+ì:W‡¹k(#8j‘l+nb -±_ 3ƒ¿¸¼u+¹ÝŽš¤\”û½W­¸D‰f¶‘™§-Å|R¨^pÓ2à2œ Né¸Ë ²aìn^L¼ ™ÆF}¼ËdÄ,/r÷xV×ûö¼ï> ¯sZ/ÛBÙ¦ójŠÇgD»Ê€¨‚-Lžu/ˆ?5úJ¤…™ÁP–x"CT¬ ³•ùœ Ld8¤—|>Þ24ÎиÚ(9LïR*…˜f½]Á=°Áì4óÄ`¾?®Ä¹#eç牌ւk$„5j ‡{ž‘ÃayÞm&µsCè©ÔEݵSVyE¶°~j¾GYØM¬3É ¾sŸŒJ'äK*&©Wn€LšÓÞ6ŽðUÃÔS!G`YåUšé¬Ì”+,m2ÿ•ð6“IÉ„‡™Ö$ì'\K€J¸wgh¯Ó™n¬R,+-åõù=Qî -ú¯W)¨ôƼý -ʪœ±tñ»ŒøZ 9)]ñ7R^Üáw¸á_gÛ¿Â2jeséàžÊ"e7j’sîF‘•T¸Rú $é -³µcCĪašºTÜ âbàîÂùF“â4÷²ÜKèÄyyKjšg·ø_<]ذðб1cî’ýTðçî3¥ß.Ñ’#¦þ·vw RÅG¹Å H!ØipÍÒ¢9ìRËqcØ |Ć´ñA:d× 2½qT2§ê¬®ReFœ33Žƒí2Øã'š£”r¶·DœîtÃ#’V#xJ¢uæK™:)D}•+|„ÐГ»Ó#‡%èfâÛFÕLú*g -†Ïkü¥Ä| ‰ù§soqŸ.©.?CtÒ -5î×À á(0çµ:Є¤ÆÂÇ7.¯÷½AÄþõ¢1@óƒz!sÆ=Pg¨.÷€„Ê3˜· r™´Jª+ˆþÕ(Û"ÒN)?‚´Á–" rß|´5(LÝ^m8‹Ï6Ô¶¤Цy(e‚lP¥ñ–8›¹ûÙ@(îmh^Ûϯ¢Ñ-p]8D@R0'CHƒ†_‚A5x¿{[[±ËÿÆåÏ'\spö$ó_£6E0Mºh/R‚ Àz1²Ìçݸs#àZÀƒqÆ&Qcb#ø””º¨.ºåxAG -a˜9" ½Ÿ< ÐŽÏ%TÀß—m¦mmW9ÇûÕ‘9 -3À3¤Ù3Šb§œÏê¥Ô1'®çÙæ²£v-ìüøÚ›‚ÛÔþ®•çúµS5-ºFïO†Dœ4¦9ÏíL͹®¡¤9'ײ´ca+è@Ͷ%2†! A2¬ÐùëÎKrÌéÉÁd–Õ¼. †DhIP%‡Ó/I‘§‡²œ”xAùE#f-úŠì¬éâìÁ×¥¡K[£0AÝ‘²Is¸]¸ËóëeZÇmÕÚ©ët¦jFˆÙÏýäª^‘ b$¡Ú*v²* ‚Gkx Ò¯Ôø”B&è¼ÁW4ŠÝ§šòLëU‚º„s£Ÿb%²ADÌl`qçø.Žp}Åh ,hje'1ÐO× NNL ^Ú–—Öv…,ŽpÉn\%§N<Æ'ªƒRÎNq.ÁZÊç¨Ðëï9 „š‰K1‰ÑpuQb"Û&ðØ%}t£ë…‘fÿæ PPiŠ´ûᙎx^Á^ÝÒ#"Š%Ç©ÊnÝÛ´p™*†¾ØÄ½¼•ÂRãiíØ:#×¢a³:iT½«dq>6 ͆P‹ž@gÇÕÉþCOcG_ßÔPŠjþ¢¹:ó-ƒTLûH%¼&õèÅÒyo$3ha ~̘ÕÏe/&Kynq%Ìs·-ÙdÌ¿Dž'‰úú@¾»é¿raf°´ÊÇl&ìQC€ÃÐÉ‘£F‘Q:éX/ÔÃì5_•Õk„tÔé~‘Õ æ)”%'f6+’MngO=|ì‘ûÂÒN÷ሞ ëVÄõÁÄO:üÑ- ’dð@s¿Ûà ݬ(õ½(y~ôˆM%bæ/Íý§ó\kŽÚ–9D;iÂá ßÕsÛ›ÇF^†\”Åñ#»Î%k¶29ú'Ì©RáF‰ ðü‚j&Ç’æeñ äN¨\buê¯Â§JcYmöêG|\‹ n„ âCá]eÌÇuEiT¥ -úÏ~ç Ž… k="ÚCª\«ùŒ˜ÚéQcwÌÝ£/ñª4Z*Qt )!AÑ!Ÿ -~A†½óp1ÓU®˜ú¾ÜÉØ!£÷Jç´Rùu=Ö§½w/âÑ‹jH«bM¥* =‰j«)äwúPðEƲN;»Jc¤=¹wx`ö ›Òž¿ÝO’GˆñIMÞŽm›V¸ƒý v4‹Ö¤%Îù¹e BZ*´ Óù $خŊFÒÎ<ËC?Ôw,GÕ ´“:m·¬¿d} æ”ÎŽ­U§´“ÿ<åIÈ–‚Ðî§`óSðè k1 ZCl™5w¹‹îiãFà‹mŒL T"ë\z­˜¡@“ýtád•I¯Ðдg¼¯°Ôr×M8˜‘’Ô¨‰U&®šUFöL¼!LŽâv^´¥°áULÛ=!‡–g¤æ¹šC— êcŸEs˜9wL§Šò³é7ëÄÂL2G àÓÝðØ\«À¾VW¸ö /•ƒÙxBiÇZ³Ù^¦@¾tÂ<>åàãßDçΟY™šAÊ, -Q]pe6À¶ÓT猳‹¨ÅÝ¥º9ðFÅÙŽõì1<ë2ú#”–@&?cœå•i“Ü„"dz¤6U¾yxâÒF»bÕ*¾ ÚlúÀéõ(+äÎg®»!°8Ì"ç«3!-:–ÔUØëõ…IeÓ‘@Ç¡wXh¹÷0ÉQ›ƒ=UÃÔ‚ ’údX|=VV€[sšfŒ”€«ˆwÜräG! Ÿsž})±çc²š K©ð¾lP¬#c!¾L[ƆÅbbÜ4_~ø@arà8ÇA½ -G|¯$gÓ¡£Eeƒ¯Kcíd±±·2}µ(!¼°õÜô+ìñ=¢8¸£p|–ïªø¾ÂzË,¹8~* -=øèElîôœ¨¬"3§¨Lês”€îzm%Ǧ–to†ÛUZrše\Åbßœ'(„ЀF{€ºÃ»"•ƉFqÚñ)n7TÂê^CÀ‚‘ÑcEñµDf=NWc›Ûë¹Ê.{k<ÉdC!ñĨ£Ï†¹uµ&§ûlÌ+—]–ºÏ¼ˆCŸ“3’’*W7)¼â%]ÛÀŒ$&dûSy%°ŠYxÇ}ƒ¾üÝ€héÎF~6Ž $Œ„‹¸ Ô.x5SÈçK -¼å*Û‰/R¥*¯µ´™O’NÚØ&1ß³iU.ŽÍ\z…Ç7Ù·×PqY@"”ªëW¤öZ€á°i€‹He6X¢&¤9JÇã­˜äŒ1àîÙèÙªŸ`¡á¨Ï…Ñ“b~‘.Ëqp ¹{…b¾U,{æ²>7D°þ3B4Ëœ^Gà£×¼.ß] ð†æ2É Ó9ÄI~Í“毼LIYü¦-ÓOøÿ!z7·OCókBžJ#B×ç¶À_À¦<çé¢a?ef3Tæq™^5ÃCÈ Á€ ¡M;#ˆámÉâ/š_m_d€ -lç4Ã_¡©¨(t,ËTr†H‘Ïjüù>Ò´‘j{œ£/TDÐÁÀ®/ŽÊ8CpN—ï-­WÔ‚f. 2mØ3ˆmЉÉÂç§L¤R,†Iu ¶õÞ.ÔI”þohêÿ)‹A­/¼î±¼ÑÞ”°ë|åòÕ0t¦7’øežv™µê¢?JÅ©¾§åµÐÃkG˜öØŠFuËÎCI@-µ'˜Q"28zÒ„cEqÊb·ä&×’AŠe «ô‘IÕ8ÿœ¦^¿h,S<‡&|–< Q¡Ö|x4Ëœgã¤@ZØÅæ¹¾Êi_²…([eñèó‘1ÄÏp¹³AÁä}K(ÎΈcIæ@ €ƒ2?0w0`ÔÐJfƒ@lk‘bŸ­,ô¹ê[šVˆ"ü¥À„ƒç¾r°òÜwü -½þç. ØßX -®õ„2+ڠЀµ'<“¥Ú–%)KÎäq+UÛšô)Nhìè´bÇe(˜2€&Ͱ’–΢ÐÄ‹dí•Ë-UÚò¯QhõxÒ·,˜TËs›Ÿ•C”#³ÏöæZDcèy-9ðÙPÁªÖ€ÊyœÔ~cÿ(¾Gn?ÎFÙäüUˆÍTIú!Vj!p.’Úf—´ðïeié7øQÄ #ó1ʘ¿¼82YÐÒq>¬p®¨£>å“e8Ôââ6V“®Í°'¯Ü¬- æØg×X¶ €Ï#ÒfyÅí³‘|Šß¥0/ªÁzÿ¶XšiØW'}­áÆ~Xv]ûã -îLNÎÆPÍÒBJëº}+ØL/ž£‹S‡8P” -Tß³± S.pþ,FYzmÈ´hûtõ7‚gF°ãW^u¤}–ÊfÆj„*!Ú@mq6ÌIÀÓ/=SðÝlÝN(0Ɇ×EõPNÇ砦ؚBÄÈ:ãü‰êìjØ­ô(ØKBõÁ«Ó)ã{¬ÕŽ}zJVõðMÇŠS‰ž™~óxm!²Ð) í¢‡û1@¢««8RÕ§‰)ª`ù¤ñ7¯}G˜^(ÞÕîû$CIù-$`4á䮽Ä_²‹f7¶±q|óUÀ}ÂBÁªÄ9Ðwp/ÓÔ:»‹ú -9©'‡`ŠÚ··VÞç» ÇX1Í)؈‹°R”·)éû°`Š—ŽøÔW¨Ib¤H‰ ØP-ˆœ`Ž39ª²˜–4pWê…Å[ÖSÝ‚õÙ˜£1ËB"ïÄûÞ#ò$;–ìŒ Žµx\€…ƒ}çb»3×h:s3†)vY†Ò‚¶¢æ˜R¾9wõ–Éðî‘»Œ]V[/}U¤‡;§R­nÝ,È"sÈ ®)˜ d§Ç XÌm‘|L`&ÃuCÝåŽî½Êõgñnk%¬uŽá&Y%cùj—UÔÓ(&z ÂÏ9¶õaÕÈ]e|¤Y™(-õ@FÇBC ¢.0Ø¡¶®¯ûä6%YÌ×¾^šÞž[M•ŒÍi>2|Ô/­U£"ø{¿?üw—róÿ'úóœ¿þãßÿùÏÿǯ¿ýOÿùúÇÿ÷ú·ù‡ÿüþÃù§ý§ü÷ú¯ÿ0?gù¹ßÿøÿü/ÿð‡?ÿëÿõþßþá¿ÿ¯ÿüïÿÿýù¿ýëÛ÷^¿þö?üú_ÿ—¿¹þÛßü$6pþòù–Œ'ü3ÔƒÌÑ*æLÖð0Ò$¡Ñ‚P;`¾—[UàÔ-FPÿ]‚·ØÀù&5€ºYË·Õ`Xü0€½¸5,Öo‘Ïlð¿@q׿×b–u!>9fª§"´=ß*äÐû`cŽJÔ°áØ Û‹2›Gà8ä6{·!8rE:iDe?Â匴·™8:‘OYWle«q8EÞ×g–d'Õ,Î;C+þÖN(©*.õP¦ý -& 2ŠÉa°t.°ã˜M”ª½b6Aªüì¥÷ç¥UÏq‰Ú—{ úcW{ä$ˆ4AµÇ·=ß,ûôíu_p}åg‹ûÂEÃDùt¶/dÒ·¡}RÜ~ö±&Q!ì닾]ë«!e3«‡)Ûsþö¨½þmMO‰ã*¿ãHOÚ=åþmDÖç¶—3  óϾóUˆlþ¶›¯ÜÓÔ¾]æmhõgsùªåiùö”ç{$}8ÉWp×Ïòœ˜Vá5·í#ÿ°‹'Ÿæ=þÉ%^NÅ”&’Ó§t’óå¿ ÒV?ãÍ–vŒNÄå§!ú… ,2äË}åw¶ûùEÛÞMÏ9Æ\°½ÎÉ@³œÈ-¿™†ëC5ß íÞ„”µÛ"œò7ÁÉÓ\)ÌÖ·!8$ë'KW ¨X’Þì¿‹BDívýÆŽUc›}‡Åá»ÇwÑ"àåñ]T³¹nkoþÆ…óéè}Ÿgy »€ïFÞ…}*Óóÿ;¯9zÛvS .¬áÖM@K:ûéÖmJáºMºS‹ç¾½¹?ãä]: ¢5!ÏÈï–Ü(‰¨÷Nܨ˜×Ònn¢ÖŸ§ï¶"åǸí¶Å<åt»lóD’žæÚìV‹R á©Í÷ ɸM±kŠíàÃ@[}jLœÖ±RbÔm»l¤Ÿ6ÙhÑ*ҽܱ‘a…¸M±Æ ÎùôÂÆ¯ö ÀÕ4.¤žõñçÐ{âax%{xc+5Uîy¹[ó7Y»§©u10·—µïçy[Xß>œ«‹Jçí\=÷ʼnèpVW)Ò›O5øÆò9*÷T5(ÆmOÍ–€»þt¥&xkå6£f&ABc›QÓÌSxzPs)Ü£m= îBìvœ®ÅÊÓgšCËOZÎ,ŸáEm ‡éîÓÓVš0“«ÝnÒ0«Ho7iÜXñŸ&Ò£œdÃ<"ùªí­Ñi.o^ÑbcÛ,“èb6캽¡ñkfr~ZBãA‰ÒÅr‚v#–ómA¨/òÃ÷žMfV_vÏ€Öz»<ó7ˆ¸§¹s"`›ãb{:§(l'g>šþðoÎ"qÒ¶mÎÂHÒíÖœ¥¾›4ƒhIGÝÞÌXÖu¾ÍÈy½91S&Où>Z×-öö]ï©ë›ßòopkêö[f‹'´–|dlË»»2º õaªÌFéè//å#øäoʘl…srsÊË/ùpš{º$³0¡ ·]’!±PÜæÈÅMÎÓ/cÖ…Û™Rvi/+ä+L4Þ•ýv@F¥Ü¶ÇéX«ÑcIaijÜ&ÇöÉéenL±.¾õen ˜¬><‘}ª×ËÊxÿýt0ÞǶqñ‰•e>Œ!jé–­Ž’YÞÝýH¹]‰ï¿fÄûØö FÊ…³ÞÖÃk˜=‡/¥>Ëm4œ#); cÍ ’æé,|CÑ·µ0hXŤ·¥ð!û!7+aÞN±µÛCøï„"€þØîÁ‡J|á&}O8ȹµÀ……Y0QUî·G°U¥Z߬ñÚC%jYÏÁâx[3™ŒüîÌ*È:äÈñpÿÛø—Â|ÔÓð—{i0²~ÜÊeš,§_rLŒO‡ßðŒ9_ƾÇò–Ú~¾d¼òx³ñ¥°SHº-÷^àÃjÈ…i/ó[Ú§W/+ -ænÛ¢¡XV“íÌ‹ërÍùÍ—µß¶sÑ'SÄzûðò÷Ð -ïUçç4êø-×]ðSaŒ{1ÆrWãñöØ%Ã;y[ërƒ7Ú8ÐfÈ„=t÷±íŸ ²tÚÌçã QFúEî€ÍXÙ&¹`혷7.í)¼roK\Žqó·n^úÛpYªo¶·@Ì4³]n·ˆ~^ßò8&»m±¶nSÚoK[f67Ë”¶’Ž7úp°%`Wb#™JÌ¿ýj÷ßO›ÚûØr§­,~b}†¬; %Ï¿Ó<ùóGSZÊ*>I¬¤Û”ö,K{¥h¼®oSZ@{×ÒÛÙ^´g^@ŸVº†_^´|ŠÄʶ =yÍDo#@™¶§ë»­ÎòíKƒ¥£VCFúË{öTó©rþ9q÷þ³÷,C%>*ËÃöã›ØÙ'¯|Ñùí=kt èq´ô³÷,×›šS$=?¼gõò• ñëúöž  -°+îãGZJåYCà¹î¯âœ®œVyùÈåpùæA«!) $,órnýò µ×wúÜ–¾Z™Š<™O Z´xáJüƒm8Ïæxð¾¬h}à -Äýú¶¢õ#‚Éd­Ü¾#i$‡ßa!ûÓŠÖb»Ôù€²úaEë`¾”%–~¶¢¥”m ~¶$Ì—-Cà ®>—-€ŸV´ñ†¡(u̱GÄö“­ ˆ½sXæüt¢ÕíMÜ>s¿iù¶¨'^8©?;Òr‘\|Ñò[…´Pxù6¢õJô©GÌŸiõ'#ZAçÂô/j#õÛˆ–¢¥§…úx3¢µ‡sf*Ëböˈ6àííÛÖUÜ2¥>ýg願æL¥äŸhõM½¸‡Tð—-é~kCÖêz;ÞœhM‚73£µÈŠûɉVÓt‡Í-oüÉքäeññ§o#Ú«b.Ð~öŸEØ¢ÁòÅ^.¥ôm7;αNÿe7Kcqzó›õ3ýÛe–/¹çÓ\–œãAÿá)kFœ -*>™OYn• óžQ3L?zÊ^×oa<üi%{‘﵊ñá Kò,?ûÆ’­?Jû¶‹â‚Ë·K, Û`öËvF9Ê·), $^¿Ü`£âš6EãR7²OïW³ÑD|`ð(ü|y¿ŠúCÐÞ¡ýgïWïxrpÆù´~ulUjæoýÛú¯EOÇ×K-­º^É[È\þ®ü]ÚÓÕ•#ˆZl3WNpDN[W óͺõ>göΑÇËÃ5jqŽŒ˜V·‡+³´ -·ýÀjâúÙÃÕe¸©zŠ_®Ž =„’ò·™«ÏɪG±Ìþôrµ¨·€¢©ëíåjᱡ.)·—« ø:ÐÀÞùiæÕm'yM%ßf®QYŽâ!×mæ•íUÀíz3såNo![§Þ^®Êt €L6ðÛÔ•»$û¶£ô éÛÔ•¹Spáœ;EmSW¥˜ê€Ã’J)UŸ ©8¢”ŒŸ¦®6ªCd¥ºoSWaeÇÈI¥ë6u¥AÉg|3@‚>]]iÔ"¶ƒšªçíêjƒñÈ‘Wº]]m¨ªüÎ%­Õ7WWùJ Ä)Ø»l{WÖlT@˜æÁGÝö®¬bç²Õ¤Ë?|^ƒÓ”§ )›åóê§Œ9秬&-Ÿ×Ó<1Jžpyóy¥1ŠƒÎ“CµJŸ×/&Tø¼žÚtìkŸ>¯4͇á9nŸW¤Øwxñ·Í«ÇAär¼–òfóJ "œ}¹»B’÷¥jˆ¦sÛ¼‚¥Šõ|Æ#çš ¶¹*jÝa!‡«Ïv~=õ®$(MÇ4¹ÖšŽ»5cïöt~F‚•ÙHNp;¿ú5Y…LÆíüJC‚—¶àÂÓù• Z Ìæ¤Bf;¿†‚@ -6†Ëù•‡^Иiļy¿†ÌÛùÒùö}_¾Bô<#¬1nXˆ¥2ì`-Pn{:ÀÊ:Uú ¡¦ÑoXœ$fCR/,`=®ŠHbIëoV°6 -¸ãÅiù¶‚ r«üÚùbõ˜J߬`½J ì³ÇÈ9Ê©_^°ÁjýÁ–½j6¬ŸdL»°_Õ§¬ûb™PL*bN?<`yt²>(—ovØ›,¬íãŒ0àËú•Ƴ¨‡(ôåKé é#}{ÁÚÍS:œíúÙ Ö^鈆[ûò‚õJœOÎ#ÐÖŸ^°³åqÍØPýìˈ'+ïü§¬´[ˆU+€on°ìÁ€™™ŒÂöXÝ?¼UïCËSu‘ŽÛWO²OÕ^£`z÷aoÑ_Æ©ûï‡_ê}hÙ¤Îkœ³ÝQz{adºQ/a9Ûo/ÔÁ:sŽÛuq?ŸÞ§|Ælò²< ȺN‡*?éÍàtþÁ`Û×TXHTgô5EĽ‰§©Ž‘zVâ>$¯Û½”Úk+ož¥º®óö,åo`@Ûª´‡+èÓ ´ „³|I©Ç’Ûv¤ÖgS{³!m²çmCÊk8“ŒíPOQ†º†±Ç¸MGÙšzÞ^£-|îa1ꡜngQ>¢Ûå2Å‹@ðÏËPO“ÜoQp}.-ÚTAñ0TÏÛçÒDTcÍWúö¹4«¯£ÖËÞ’Ü4Híj‰‘üƒmf)%<•7K4(¨!lëÊð£·Û±²+=Rߌ*9–ÑZJ@B&QG…Þb'÷´¥¥kÛQö°³Û.”Ý"Zz3Ÿì8¶|{Nö²WËi’0‰ §Ád§LFœ³ &{‚pYÕX²­úÆÓO |JSÛF²EÕd›G*RíÃ3’c(Ë*’3\˦qò[PïÓR,+›¥„Õ©9ä~û@rå, OHèËÀâ·ý£Êt)Ý®X%0?ÝÙᤸ&aA5µøz;µqÚ›§#©†ê:î'Ê -¸·ƒ#Ëoy7‚•·üÁq“KÝ68ÿÑ}º3¢"äk™2Ö}¶#^HˆO FޱsÛŒ`Y¶i"Ø`m×Ö‹µ›h;.Öü£ÇgPÄzóWDðŽ2ùöWÜ{®í¯3zâÓVýS¾g»)BžÈ]rƒÁŽÂØÓD‘c¼:Û;±º˜ŽÛ2‘ëÈA@ºQiЙ–S"Щþâ1 À˜K³Eä—^‹¢ -‰½,v› "§„‚×ÓûðZ›Ùí}¨†W\ö¶/äïý-ÛµÐâ¨bEí“mZ¸«—Û«’<~ O‹BTVÌ8,gB]z¹ ¯ãçéCHµVéŒù;3AUÛÕ³¥Ú╇·Ù:!u/¯l®‘í|3"´ÑÒî ¬ÜF„§&gɆtÞ}ÅÜ%Ä7©ùÑóiDHã¥$Ú¡œæmDH4sÄÈрп×ì*N«C|}Ã2 ¤AUè>aæÛ€P2(ErÞÔ˜ž„„„AŸc…4ŸÛñY)“ur Û€p¡ÓF ÓB¿òå¢K8\‚!Òn·¡%«Jó™bÔ½ /¸Þ׿žÿà%¸áúVºÿS4Vù¢ŸnƒTw6¥öi2HÜr®jÁ—·à¥FÔ,Þ,i köå$ÈéÜÑþd ¨€LlÍÞl¯k1e?]þ"%ü;&A@õŠëˆŸðùñó ƒ¦ù ‡¨¶O“ÀoÁÃ$Ð=xLkš9.çÍ$Ð >¸º9a"IñëÓ$Ð,ø’:ù²î3/ùÜAËp%·•G#ž¢ãÍЭQ6V;Š™šßû‚V‚ úf $vãϹ?Ëå×—% =)uv.ßÂOO@Ï뤓TÞ¿M}4îR…º½M¿Ž?M­" Äýê\eô ÖpNîèÔã6®ÊR}ï–€Öñ³Åˆn÷¶¤!%_!Nk·7 «$ja•7k@#àôr¤ê©VÁ2´Ý¡Ä4¬o#@/ß§9×+¬e(Çû LSäˆU –ž:”,(CK¹‡ Î¾s>"o»mp8%Kívtñ -V- -ÏåÍ Ð¨?~vAküv¤AQ¨ÙôÂ]N€4 Œv9Ñ]×› 9!ïYGßN€¢bÍÓ@«(· ³ý°KÑõfhªÈg]§Þ†€L Y·` }r }®üf¨”èYyö2 ä•CwuÜ&€”.×z‘©¾™*7[…ýÍŸómHÉÙíýP‘ …7@ªJc³£­ -Ò ø`¨¨¼<=™¢ƒŠÁÓIHG£žÒí¨ßŠ*Ùx¦t;ò D»š7o€`YÙoã?'ãeë¤\dAÎø÷›¸‰»à!œ­Ô—ÞŸ"¢ kx -­çíüGÉÚq]ÿtþ£±hŽrð®µåü‡–¸SsÅHyQtõ)u‹uÏwªŽ7ç?}(L i”nç?¤±ÃÊ·ñŸÇ5e˜ƒ‚9ùiü§`7óÎl šíüJÞ‡v•·óŸ§Ó!e~Í ×žÆ§|D,Ø2Îi`ÿ¡nEâ”v¹ÿ´³ðkæ›YΧïŸ(‹óZ(‹qݾÞ”öÀ™§°mÓø_E~‹KÒžß~§zÒE+¬U€9Ç‘ôù°7»?5ž ¦2aÛýù)or펷m÷ç÷ ÇŽ">qÛýqñ¢f@QtÛý1:5h˜˜ÇË%çφ§Ýßwã²ûã""%Š{ ¨eÜwÊZi1—JÔGžv€4+mo//@ð$¶Ëßý÷ÃÜoÛž~§ -~SQ n{ú}½ˆOO?ÑH@ÑZž3cI·§ŸzTÀÛ”¡›ëÙöô÷ ¬ô±îÜÃÓÏÆ+^߫ij©˜CÒΠcæx{ú C[Ç›…í$ ®þ #»¼üÔ¿¢Zô[Çåågol -8®¬ÐÃËOËJò¨R¸Þ¦~ÂC -@Y?¦õÍÔϤõ¸^~ZïàrŽX÷zL'Jè‘û.?Xù9?¹`“뛕ŸN‡’n*®o+?Ž·˜Ì­L;o/?b7r\'Г§—¡Oœ³¿¼ülh*@cI×o/?޲\ô|šú9 ³„„ÞØî~B¡$ r­âÖÃÝVM"!$K_‘ŸÜýIJŠ>Mý”Trüs—oS?]ˆ7‘F}sõ' pœ$rÛÕ]•ʤ,ðéêÇ»X4?‚d”C*ýÃÞ>Ús6|AD`øûÙÃá6—vYQŸFöúÍ‘ƒÅñƒÑŸWSÔqD¼nmàžFÒ„|¡Ù—Àx½ýÑ#ª s;Ð×7mýs ˜2afø°€á‘¯_*½JÞ/q¡7Ç?é*fú9uõôtüûjûrü3ü†bþú6–¿ü›ãŸO~@’šO¾/äÕ—õ½âõE¨ój¿¶õ au1ŸJ]9‚7ë??*!k€l¿~´þ³—㽯E:x:ÿ…ÓZ·JV~8ÿIjqé½DÍþhü'‡ÈÕeØë›ñXb¹ÕHù¸«/ã?õ“ ƒWöiügõ3 *HSôoã?•ƒ`Ñ×”z¶<üœæ|h —¹ßÊYÛÇ®õ/Ÿ¿»á'{¿W㇫ßE>ïŠêÓ››ßï¦6þªY”y£õÉxš÷…²Ýy{ö‘1¯¶­ú(n¶òîÐGÅ@¢Ä2ækA*¾ýøFÈè½ÙðÍcæ¶u¨V*OÛªÎpß=²uíù‘®Ò6Ù“ìw¾{ë!£ôlä) -ÅuÃJâ2§O=˜Æêú†qu«¶Íæ‚È ?ýò8yÛäQ±9ÆmŽ™\פ‡'¤dÀžÛ¿/PAË -¿×zZái]ˆ¢Ý²Âƒr­vø¾4X›NÝ/7 éö»ƒT¬ëR4Á+©§»¸kj‰ËÔ.“™ ´¼ì2ŠCovDÎl¡¶oUÕ0} »:gJK¶tÛ›U½Î7{³rèv»š§°ß²ª†èþéc&à°çÛ¾ ùO^œåZÆ€Üó4+ãØ±\ÅXS0Þ¼Õ›,[?ß,ɶœëv"ËªŽ¥m@ÆŸ‰_õðãnÖn,3ôBMUp_V.¿™‹!v¡ÜIäËǶCJƒ¢ÚÓAL¦vª·qXȹ_·_МÖß\ÂR m¡mÆßçh·'ÏðøÍ -,Q?êË ]äZ¶ñWuLo~_Úå®cØ|Þ<ÂÍ+Ä!æíO£¾¹{U„›r‹š°6o//2Ò$úž^—Riç˹«(4ô2ìbÞŠaôòéª!¹{ûtkÉ\ö\ …r¾™r1‚7¶tjÙÛŒ‹UÑŸû0áBð „žR2bïÂB´•ýÍq äl}m‘áŠ/Ñb()„ña«5šŒ·›–üžþ²Ñ‚:Vò»{9¾\^¦Y¿0ßVYÀdÎöîE ñ/c¬ß˜vûaÍ…¿„ÐË+Gð²Ý¯ÒZ™·é•jVŒ¢‡×ÀÈÖo‡+vW5LÁÂÙ - Šãü0´Â‰·Ü>V &Ž©˜:Ýÿ©Äñ°­ - `Ï·]õ Q¶Û¯êPá)ÊÛ§ŠÚgØ=.£*„çî2¨úŠsÿšA4Ó&!üÓ -`[¢³°å›·û@Ó)R9P ¶×J_d‡¶Å”B{åzs–bRÓ´nÍ;‹1ÛGŠ¿û»{TM!¼M£€ŠP×Ü^QŠfRóyXDÕ"›»D…βé÷åñ„Îå+܆Pã¼á0#᱄a–?]Ÿ8ÆÜfO—†Äi{<áÿ­·³µ4V½mè^©íÕø‚§}Ó`n‡u°\›ÂL(ݾK}DuøiÒD¶™øbk#H Û’iÿýtbÚǶS_«ë¶Rêªv¾û.Á®ÈÝÞFUƒRÍvYºÿ~˜+ícÛSI?©«ÜVJ})>” —(์“U_³“YÕõŒkˆ8n›¤.\óe‚ÄÐÎñ™»&ƒ#J‡Û iäX·(÷иÛùˆ„¯B¸KÓ¿óËùÈÄøùæw4–¶ê¶92e;ÚmoD&µ´7S#“òµl/#/¡[ìZ€˜7ç¢-V»‹Æ ä/£¢±^Âý‰†X”Q/•=ž·-Køy,L…\€ñ:îCP©‰Éž¦Cª ôë6ÒNªŸÛlHÆpz³B%¸âvb Âyý2òîãg¡¡nrý¶ºö®æÓ5H„:~v Z®W_.A\¿ŠCÞ@0ž ùɈó)–Ùû|¹™û4ºÏüƒíÏØe÷3,ØÖÛÌgOOs(©·ÛÓgœñ ¾¼xzYzä?Yù´±ü?©Õ^bÓøGÆÒ(?ûõ >‰é—M²”ðP?íyú >]y:t¼«|›ñ0K‚äûòà™ !Iÿƒ÷N³ºÑ¾-wÚ±L>vÁÎëXøê´%§úå^ÒÍò„ŒÍ—Ž0ÌòëËD:ñÖzçåBÃêË2§\± ú²Ê‘×~pÈ)Êýúч‚ò¹Ýyž~8el“‚œ2bJûÑý¦ž±è}™ÞPœ¯õ¶ºÛÇá(»mlã^quF”GŠ¥Ì¾‡pÚóñó¯))€¿_¶5ENf>Ýj -‰³?frþÁ¤¦¤zÓä~²¤‰ò¸h>#½?ü£Èÿ߀æÿ%ªš’­S‘lÀè!Ï]Â’Æ^J=Ôá®óT«wCdûrÔõåÌ*ÖØã -Ô@²V3wzz½)láùç(z!BT!²H¸ñÍÉU´-¼¬pþbržalMsl³©kWxbͽU[ŒÇa&8Ÿ‘Ê16@¨A©8¦éû‡†hغ¿9·ŸF.sÙ¬ÄÄÊž‘T¡S“Y–S1žC»”ò®öðœk°(;%ŠzÊ`÷4¡–1~ß{= ã=„ÇU~Iô¸(äà;ymðŒ¢À3pá}‰Ú½N« ¦'X+拼Èëqˆ¯L0|¨b¦µ{ Ü3B=­9¼âQÃ+ѽ¾Â¸`§p.8½÷µ3ìs‡¶”S’>ŽYGÆkÖUú´!Nꚦq»©xÙ/²­X>Îùq®´Ñ«ÀÀ„„€ç!cÉ2—¬æfzU´¿z†Î›NqÑh¥nÍ™³+ÈšBôI×$àH" ½®èmsöu¼¾§‚V›½TM³W%ÞjsëE”9Ûã ¯„];ßT´ü:šë¤0YíAùžkE3ä®Ñ‡äç9)ï :"}3‹&Ï!ì2WªE$)±nò#tÀHª£üSÅŽ5Ï‘6­•ÀÞÌßVÓ)¨ï nâdI+äøx'=µ‰Pk¤@eœ,6X -ùDÖO»5hT­¨Ž¹ÒC´¡(5p)0°rX7ú̹%‘rGÉ+ a_À ¤7F),šÅ¸a -Ô|l'ÙÞ”ÚW­ãeô¦°O:  -ŒÊM¨×­˜EØÏmR¡³ÐÆ*(1æÉу}YÚ——(^6Åb·/r_ŽƒstÉaÆ&Œa†,ò©Ê\ 0_ô(ÉñAÄÛí΢iþ ºzœÞ<ÓýM¦-ÙVÛÔÇ:¼°´ÌÕ7W®$BÁT–UƒpèqÀl;‡9hzˆÎŒóPF›÷¿"\Êû×ÙŽPLÂ) ɦ¹ómÎ$OfŸÑtW@~]åçÙ¹í ¶Az ¼2Îæ‚0MˆPVg…Ìü_#è i+l‰¯¨=¸NάàZC @ÒÄÌÛöÌœ·6Eª¨5ÔÙ ü²~¾]†§A²ŠdUè 9ã 9 u44†i>_î‚–i¹^§GñŒ^+范^ ,q -ÃïIŽódÜ/gýq“Ţüú«¬ÞŒ»€‚Mð²ižÑz‰_«®ç|³ÑÓ¦¹¢„SåžàOL -d®s9À—Üóá+sy SåDŒE´S–"œ¿2;Å#Ú7L‰'~ä¼Y -¹©‹8ÏGÕ3Šå¼®Iëç:'bо† -=;d¯úù}©…a¬oy…‹~Å[[–·þGê”uw §â³Õxö@ø2NqàZ5¸Z_Ä[.<‹û»¾èdW÷šžG9€¢Oæ|:¿4¢rSô¼Na&¦èzRë›J(ª•ªì/®Ñ¼téÔkšÝ×Á“FÁ¶Æ8/„X[¶K?nU£3Ö… ¹G–Ôz ]×cʺih^zX[€8F|¼tÇ¥=ƒ"ŸÝðÑIV:Œ§”íŸp›¡çHÑËådN g¼WÕySáªÒ£ÆqèÒE ÇñÓ‡N,8îó+|@¹ÄÍ¥Vnqþ¨‚ YŠ–ÁüÔJïÓ/}à ÍÑòqa\£Wp)Zß -2Ãó*Utûx6èÜ7²Šâ± ±æ­CjŸ õ$œ]wý\Wá´z9ªÖNŒW_y[˜XŸ‡Z ,B™`p½O¥ÅûÄ"?ÍòWKz¾ˆ+ -½PS˜ËÞܾôÊ'c{°»páZ`nÄÃ-s/c†ðZ:2Ëv˜[¶J‡º¥é$ö|v\M'¸ü³S#ää1ÁÒÅéè10™Ÿ§¡òLYgL$¯½"Öü²R`ÄÝqBAˆ°Ç)ä*T²W^žÊs¹Vª—¶1çÒÊçÚ³xtlX8Hê!2^ ϵóõ ¹È3o°9»44沬FTY¡÷¹dï+2¡#âN‚^âÎò¨-B™†×ï¿ö€,Ï^ãm¢(Çý­ä¦ÔŒ#NVÌãIN×ZPgÒŽp? Ìel.zuÖ¦Ùk®®çêEdž/Ô´Æ_‚ìa+@ЈÊÄÇþ’9Á´è!5`öW¿Ã¿Kÿtp§0æ®0—ô%?Ö.·ÍËNñâTwÍ9äRÑ›?@«¡ݳóÕy­Z>Û+B:Òœ>l³fsâJÛNîxZCwßÀùîñ¦Cf'ìLf˜ -˜§FudõüškÃ×—*©,C¯Ó2å<˜j(ãmé@$%Ž˜íéÔxça_ #Ð]CŠ-!#ºí˜ß,$©î´,³»ëâ›g åÀÜÉvƼ[!D¹U™Ë`~Ø£¿§nÉ9-ã\/Þ8lT†$$„·oøUÙË$’°+=Xb²™¡“Íun­àïËŠÏÏ…aÁø-Kë{Îê½lk˺tqæÑÉà´f¸äža½Ë¹ÉçiíeX6d2Ä•ë“=”•ðÅ#ÌQsªiAˆUŒpw:³SÜ`fx3ì>çF§ÕHe¶š˜?DÞƒIë/Ù’8æõ²ÚùûËIª]±â«[Ö:òðˆ`Ðt¢?­FÑÏó¦5õ1é5È>ÌAŠäÔî‰!27уµ–èa>·»c ÊÏØþÅ\jÚkçŒt>½P^D§ ëߤF =ô)G—1Œé|cé£y5¶¾—êùZÛ$ðÓÖPDß ùêJb°×Uà8Ãýàrg[B$ŸßTR”D.ÖÎù“F9bï«9f½Pžìß="Ý€®5ìåý¼òÃy¨Ì3—!z(£_–»G½‚ÐRsK7žz– Å Î-§¨õ£;džQ®œ —Î6_ãÊÚ„>ÉH‡à__‘z:£“¯‡õ0RSï=Sè3u Ý»#æ¢z\k‡á=;%n[‚çÜtF~ìq7 ih/:â‹®­l£ó£ÃÞC¤å²®ìNÂÌ]ÝozˆÌÇ`z£âT"ÓÁ®j.wW1¢ÙQÕõ”Øà.„—R`XVäOfN{Á§‰4×ÑÝCª©ŒÄ~C9½–ŸzŒp›“v¡²±SwÊð2_EªHu¾Æu«˜2qwã4~œ ì¢O®B™ì91I¶ZýXfÞ¾% €H@h(™P8›ï…/‚Ê&¾]ˆðçè¡'Kî‚öU‡pÈ#żοÅÅ>!ŽauÙ6}aJ.uŠöÙp‘H Yå¶„©ø$(†¯[¢ÙãØð~Œ^äE`ªk<ËJ ?nRÛ¬ §QAÅÑ…Ïzo$EøJf· $’ºê-ÃK¯a[I±>êÌa‡õü°6P"+“–ÚãÌ0qíÑÜPQzÚ*zÅ]ª}Ø+ö‰£): ßw¬¼Š(5…Þ–‚AZaº—¸Æµh–¯;Õ÷Œ’Å… - -• SýГ¦3ƒ“,㽆ÄʇdTC7BÇÔâN^yif’N fç9¼8æÒA0/ˆ•*i ‘‡Û.ÌØf^ØÐ ¡Ç©~)Irê>G}¾ü} ÝŸ”©FʪúEÔø_¬X˜W—þ:ãÿ‡S 3}@–8þJXŸ±f²!"2›!ѹi„вn‘3gvØ ùdæã\S¦ÌìÆ†‰ŸDGÀŒâŽè!g‡œ¸3Ôi2»³Gß~"§Sž@ì`c[Àn˜mAŽÓ@Ô²ƒ”.ÔQ)«2(˜Ì‘çã‹ÔÇÍÓbgÑÎà,çŠ ‘»Òî«­}u%—\}Ù(‰²VÀC7$…ÂJ}Hh1²Ô1\ -9˜ä0Ì[ýƒ×\Áå,om¥rl¥Úkµ±Zq`Ì=4xo§v5es»+üî?td´AqàþpÒðaä='Mª_ˆäã³ ÍÓ: û颚ÃòÅj+½5÷ LGñMÁ÷™£ñŠ<<†¢„îþ´Ÿç±Ä u…[/24¡[~„ÜwÞ!è@)õÇqRœ„@#éR–’ Ĝ۹ϓÖy´•!²Mú4ÅFBz<…ôø‡ W—ÿ8GÆy.s/)\Ì\6è?±SB ó¨®iÊtÙ#vbþyÛ$36êr%d '̘áŠìR#Lw#ÀæùÃ<å«åb—p¨ƒÑKAؤ·[† i˘Deœšd×y’›Ù‰L®‹ïÜ‚¾ž“^_vUªP6â“sí"«f,–7g  ?€F¥Ù¨:Ø‘¾fóïè1÷dnUëµTlæÀÓŒØáw¶˜rŠ”bκ*”ì7icƒÍÚe#4§ï¬§—BèR%ðX¬õ>‹iEPY§öáKÕ”tŸ5 ÜS…„döÈ}õ˜‘ÁÁ>ÌÒæ¾C_½Æ*~ -qˆµltRìš#ÓHÁ,"ì( ÷C†ÿG{̈+ ‚µr•_'YxÌ ®µÅïÕW—utüÔCÆ:ÿgcÕñ—Ûì:.Z^%¦5På3­G¶ü0O!ý}-/‹zSA¶-N\ÉXL›°XÂvz J8¹Ô¦²Ž± ƒëN3bLç^vÁõPh,FÃÆéiP›MŽ;G+’38Dtan‡ÈÊÄæuŸ5w˜Zìpu#e´çù4Ú2¨Î­¾€ ã~”Ð\ا¢‰ «ùʸxû朳áWšÖ´ÐjÁúCß`œ!è àÆ©´é ã[ eÞõ€:ºà±œÌ¸×USØ`H¯M]†¹wøRnò dYûɇJ9›hU$…b¶Î©8<3Ìtϳí–X¹b§Ë§ÑƒSS}Õô¤êýäK†=j޶ŸÃ%ªèê÷hˆP-@!­›(7D/|üé:µ)$÷2S}‚‘["ú‚<¨hδ='‡]_ eDÃj,ÌRxš˜¥\1¿Iw—ƒ¸íç¡ñãPdž¸k®A¦°…5¤Ýf4ݯ]b·ø“Ü"YÓXµÃ‘&ÒR%3ý‡^Gì]órKI±AC­.`N;–ñg”ºâ¢j·:ìôbók^^œìÖŒ¡5×D×_]3zFBì1‹Î„óa}êŒ7ÜNb5\ï™ -.‹f™¶lñqǶeæ¸ÌŒâ7 ƒt;_ ÷M3Þ~äÎfŽû P ¢×Ðc“lI‹}´ï:<åãÈ+shü×ÃF4/¤Ê²Çú‚Ø„ÎÇŽo4“gÔÎuȵWF9½†=[ˆ¦,™•9ysÏcúL1}2Y¡ïÛxåDÑ(6‹äw¤ç,^ÊW/5šk“DR·;sG®õ›â…iŒ×#$_1B®±xÔ] ðà¹ݘ8æ°—KK¯#iz¢Þ©=TôÀ¥á -”oÄ_˜¦° 2A>{„ °^ÊìÏ2”…|š½æÇBú¸ëjØ-/—%D\–DË¶åŽØçÐÏeÉÈä‘ñ€pTÓKר…5çF#ŒL^6~“ï\[þCÔ#˜]” âÒô¢jî¥/,ÖMêf_!'m#¬¹~…¤bJö᥼YéÌØê†ÃK)µN0ÃâþcZÓýtΉ.IÅŒ|óüÎ3Ú÷àtZ ¡1o:0茇J+Gª)~‰W0ÉY¶y:Ðäef¯B2î'Òk ,UXîa–6{ cb⢌˜H@V=ê—4`Æ=>}þÞ¼d×'¢ØæIEl8ÎË´l4Vè¡‚wlöŒöúÀùX2 Wá©§3¾)óz!KmÝ*.X¾)¿çˆQn¿ÌYêX«³YJ8(€dLÃæÆW jBéiÌIÈcž˜ï7/]ɺ›×2Ç:ÁYG2SÓBeoå#“žïÜè\ J™|³M™¿¨æÜ,†Ò7dåBVÔ}Zö 3CeXºiåЕç‰/!þ€$BR¹ò=¼† c rsW Ù’Þò>hŒ†#P“ó‰Ô#Å@s‡Ë@¬­ï{vü¶Jáèá\ÑkD¯ÂÖ…âä˜ÉŠ/ …—3Ä?PÎa»Ê^ü”cìÚ´½ˆÙA tO®é#Ñ«AލqÌra ͇ç1 ÷§œ»áê6ìÕ?ÉÖ?xr½é$‡Z@ÊñÚ -ý, ØÚ¹&о& -àG8,ÎqèœÁ¦Œ0ÈT_Xgì2ãÂô-[‘q3$8…B]áJ>%flÚÓ©”È/P,Ú"Ï11ã˜a~m(JøÞlT/aB¡¥T¥“Öb”°hY>œîTÍ´E3^8ñœ2Gv&&²/?|6(ãôÈÃy{”8[ü1÷—º%uÍs¾ßÒÖƒ¸%p2‡À›?Îë®\b½ø1Ý ö¢ò_²šúç -½ Ùü²^ö—%G<H”ÓèqKmk¦LC­#Ãb›¸ v PŒt[,UûYc.fõä#ÍsÛÝ4&‹ø£$QÆL@Qi†Øü¸v4Ä ü؃ØìѤ#AµFv¶ðšÑáÚ^XtJH-ÍNhÐÚk€›6Xœ†t=Ù(±!Qj.¶3ñ5èÑÈ‘2X;„Ô@A€J'%Р|%g‚fÉ"›F^ Ò¹f àn†-ˆ‘–ãVhFù(­Ï†'h-”òÖW3w‘k8d–»{SÇ”à)÷öÜv ,{€ã°Œ,þIÔ PÇM¿Sƒ¼ã¶¬^-PRM%ˆ¥ €vQËú´†ªô@L9z Òh馂̒i1 ß/㺚ôê5¾©h{¶wpíð›šøRÒ ,"Àò‰¡å±±’Æ,rFCäw’¸³cM§ÔѹNNS¥Ì¯0©*ZûéTr¿<¢`FZ}óÝkÁê?ÛÀl¢»®~\‘œŒ(t4{šOèoõ—Xš(swW÷„{BácÂÅøš \#Œl/Ó˜ôФ¦°MËñpIÿÛÀêDóM ýhGÈ–qþv­ÍÕóÐ[ Ð|'ÓRÄSÇùµdäQ\Dר–Ý_’4(²Çc]›z±r«à»pá<ôtÚë:Ò‚5_Á¡_2¸B±Åp®Î- v!Ëä &¹Ä Î+ìçu˜4BôÏ9vÞÕê:~¬%£ÄØdüXSXÐøÔ™—tZ"“ ß:5°lþ|­‚5ê³R²“ÑÔÊ{±è±X°Ê.põcc½ -¯Å%–Nq,v ,Ű¿“3ÔD:½œá†A‘ìiŸ¹`ÍCu=cY´ZKKu^ÈÉL±ê^×U!‡\t:id”_Ö54…~Ù A£ŽNÑ0ô9-°€ÍÅ‚Šb[ïb?þ*6枈R¹~ÜÁŒæ.‘— ¿€ÀšyDì.i!{àô¢–ÄØÃ+/¯_ -S…$“h¾á­ôåyÜ͹Zܪ9xjM{z(±G®Yãaìé7ÕméF/÷µ³×)tG7©Tã †xZñS2êIñS. b³&µñSÞÐãØŠFÄŸVT²(D)AC' ‚¿kM*)²­s28ˆlÅû^ -âS”øªºÒÖ„v³€8Ï´#­)ù™­`¥23³³ÃŒ/ìPVd¥ØÁS[l’èE¬YÀ‡EH3@U‘Ûö -z³‚”ö GâeW$z _«!~@éÛ;Ã]<‹ËÜœ´jÌDÞÆ¹0ඈšÉHñ±4¢Ïéþ8ïw±Ã>¹sÍ:EWØ5öù# žg5ÏÃË**yŽ.bM$cŠ:愚°¨Vùÿ"’©³™;¯ýCÁfª1­^—qÝIåi.4p2µ"»¯ ëÇÌ¢Úc\u…Á¼asœå=oh3×!>¾{UccÔY>¹N€½³Ç(®Ü$î«c_ÀŠ¦Ê¼Us†+¿ÌÙ5Ù¡-RªgH.Ï÷ƒ<+P4¶/‰®Kë£ûf"„"D›ùˆ)$âµHf8J=h‹z°¤´H½0ÙŸqÈ ßc8Þ€$Í'I•—ýüÅUÕV^éAä`¹Êé YçÞ%y—O]X*¼ªøI ±ŒˆH1â¶QzZ“Ú[œ&³eþŽçòÁíïætN‚cÊøsM/¢ zé•–6o*O€/®<pBg0 ,)® 'ì4ç>ýH«Gü€¹œm•ªº øíÓR¢¥MvPY»U²0ÙÄ{ -s””÷ ªGLFŠty^ [¶ÛΖ E:Wv›2›"ÛlO!R²k&Û´6›s˜¶!šT!F'v-EpèpžIAº¬V›®@$Œ”]Â[ -ÁËðæ(©Er`'«"w{ž¥ ;¬JjF2ê‚Ôø€J¤Ö\ÆçGtPGì½kÂå=,ßÓc.¤¤Æ±·mrI“§©¾}èè9mÌñã˜Ò3kD\= ,Ù rÁ¶ì/§Bï¤)¥‰¹ý šaM+[ºJðŒÍ™¢\È‹[0»«„¤1YÍãT¦Šz ’>M»Ùâ0’â¨õ†( &èh;n=WÊ„ïmE¥§‚„üõŸõfCòx®×… !]Tâì GèOÙë -ì´¢lÅ^—c,ü€½,Æ? -p½GhT”…×%9ÑTVÃuùìCóDà@ !§Ðbç!8¶ts@Øhjü_JÿÈ8bÒnX7ìÅ…êóÕ(ñ Pb=c±RÓ¼Ÿ£nÖ•l9€z ŽîV4¨ó+e§~öp+Š’O„Ì#ÿ¡-;m}ÉAÇC+›ç8ÇB÷>$ŽZÐl‹dvrè›i™"ˆ_É/-‚a)w&ªèw¶@”BNŒ\€˜æJZ¥œmÛLfòBßšñÈM²Å©jZ¬^áFäkcãÙ.Ïéó<‚×%P£¢câ¹7\ ƒ8̸Ÿ©ÙH—€=L6ø‹2j5 ØÇŸ@%XŸÁžcVbÌgÈ䨣–m?õ"RÖ!gî]Ò¤.™*©¸+>;`àD@BÙæ±_”i8Dí!BKÄïæ­bCMTL¢¬~Ç,Ë, -Oä1Fÿî£.–òûã)ÌAeCäx+JkÍIìgˆ2ó¯aýÑ uÐË~ >07%¤þ±™óFœÅó@@ÍåM~^½ *]HÇïóXÙw ¤×eadî"ã4M@ûœEeŒ°üœâÎG«1–_¬® ÂÚ‚zu±™Ê÷×4I=³ÄgÀon.(æ56@gl€:;pz@¡Gó™“k…+tÖÕ#E›@2Êbd’ا „ü—v,¬£»>dg.5/öao§xXØ©"èÂ|’6^ˆDp»¤kQŸSà–¥ë£¨)jö9vèqG³<ÀƒŒ¤®6jÃ$*ÛŽÆÇjòû¥84ùÐìú"Ñ 2—s– ’^0`<Ý‚.©Õ[˜±_‹§N­‘ 6RgñM!â1—ù'ºf¿)ì+úXTñpXóRX·¹”MNƒ“.º¨9 f¸‚]ÎLHïLU#ˆf‰Àv˜Ãk5Ó˜vÝwÚxcÌ¥õ/pCÎHßéÒ†Ç! tªTByŽc±y)t(vÌëKýY –}ÝGd·è%¿æà;Î^ÅÄç\Ì7™~ˆ(†Ä?‚#Ä—hÈñgÞ`1h_²»ÕøÕ«(M¦%‘|õÖ¡ße}îz|³VZ³GjñÉ`—à‰—_ ÇåðVX>`½Ö´{ª¿07ºY” 2hbÏJÐLãUÃK«‡³›Õ§¾DKâ‘,›ðªÀi/ÏÒÉÍ8’V ’8åm¡•ð#p¸ðT™K- -¤'ŒõÛÈÛâô˜u·W ñþ¶êØxÉé;ÈoFtüe¾_ÐO©² „@Ý>^´¹`ãΰ4¦ˆ Àá -&¥4:œË=À¹ Ñ·ªÏû Iiö˜“ù~ð›`DÚã -3½Ï bAÌ_qD× ê)⋽Ï÷:ûÑÁ#(¼ž -KhÍNp¿û¢„9Ò(°ÞÛ@{`$)FÏy?8®cáYÞzÄBKô½å˜ÉõÓy®¾*„.øhèÈož¡†lèÖ´ÞÈËF°Þƒ¥yìW —w9Ø~ÉF¦ÎháHO5|z'¸m³‡Ztk§†A|E$z¸QkþƒóÂÑ”^¤+1‹Ä Èt |,ƒjöhéŠó‡\ãå,ëÉàÖ7QK'õy uX£¸Ÿ1ŠÏ]ZCÈ»¶ÛÃÊÝwÖö'»Ô»I¿«p½®Ð^’òÀ(½FPp -òbåZˆ±,ä‹ça¬mâ-}Í)Tgyê1¶žÁ²V!7–D²‘™®ú=U°nÖ^ZK(ƒŒáQ°Á`%é7*g@B11ÀAàÂ6"A¹9ò3fÃÒ]€ -H¦¹Ù÷<Ú] `œ&*¤÷®l¾£uhö8…jqŽòÒ1ÐÉ”÷M:\Zi.£µÐCÐ <A18‹;EWÉ‚‹T ñÅcïDxZjRÖqÑ/‰ÊK3Ô‚"˜=ì_¸Ñå«Ò¼Ä LQsÃE*±¿ÅÀ¨RÞX^äR €Ì‰¢rÞ»,de >óîõRc -ãNr’¬ÁЇdÍÙ7–±F‡hj6”8Œ ×ØÚºxåHth)×O¼®Þý3$˜•º4(GLàlô”ÙT ?GÔþÓ Xy•î¾…áBüükï‚Ð…;„s§=æ´€O„2pðú6z†ûíõ×óåÒ~‰Â©·…áŽßÊSNlN¢T<”€Nä4e°(ZÎö:„f-¥‘Ö––ÒLZŠô ¹J€ÌŸrÄ•1:Ž,ȧIaû<¾k*¡}Øa}úd)†B)zâLë:çËa<õ –¿,ï†ïäl®‹â2©<Õ -Ä͉X?w{tnüÝÚÂÒ¾êH-­jÓœˆs’ÆTùŽ9{Ô ›a¢Œü¨L„â®ÜÈqs—††ïq/Xcv£kmxKv|´ lâ§Äî)ðÇG„÷àÌ^A1Wkÿ0-u¬/’œ9;àÖMû‚îÏ ­Åq•E>F-=Ú±zÜos^‚+s¥è@ ˆbŠsšz¢¸V˜YšïìQ"û#šÚ,óåª9¯'ñ‘3c«Û¥¦ÎYIÔ¹ÊuwÝ›òÞÇ †Bš!dsR¾‘š†)³R tR ìŒÅ¢âÊ,Là QskÊÀÄO>C?ô\ÌãU° ý¥Œ!Ü»Š7>£Wõüsäæ8ª‹³GÅKüÇ/BËE…|¯‘Y†k/å¬Ó0Zø²aFÿ×镬#OûÐR‡×ËÝ/:'‘Õ&ƒ˜ÏV¢8~ -Ú¹,…(â^¡ý¥>&à²ù¶@ž1’iê´W[r†yÉžûÎ×µjøTû’"Œ:Ëý=Ü*ÌÝÝ·R„yI–ÄKhi†,¢ùg‰×u¼nÑXÊîDœZB @¦ »¬º.á]‹]Ý3œŒj\$AŸœ¸…N5cj™n}^¹h÷úÀ¸.“3¤ÜM¢Ãf­u³¥-‘>„pÉõÛœ¾Vý¡/0Õ|!GI¡})k—Ž3–ªÞš±`¹—×4R -g ÃØw¬SCûm6ö0E*Q›{µÖ«Kßr°®Å§«ïûœVR -I<‘ÏØyŸuuP8|†{¯6;•@ÞÎɢ؉ʌ[B”{QÆÏL§q;Ú®(×ßLeô “Hq‡Ó×¢Êô3ØÛTTVCöø»{ŠtqÖ¸Âr™ÄAô•€iÜg‰•ö¹%00UµB‡t ÌBU¿†É¯ð4ðñŽÅLOQ¯IÇà¢Ø€1p–âʦé‘!òå/€„ûÊv5ž03 ;LØh _ÇM{ª¦%jÍæÒÒ\±ÁcìR¸øã‚ Ë'ÿŽ^KSD'g‘,øòp½D%äCP¬ AìÄÚ:"DR´o`g{Q‚u½ÎJzj*¦9]05«ùÄÔƒË i® ›¾.Ä2³ ýô"é|\ 6+és=<sT3¤Ûc¦Mæ4rHc‹î+ŇîÝ7ýC²rÜ€ë-þ -¾\”+ò‰ôB10dCzPñ‚V kLƒd|õpÕ.$/Té^¤ÐÊj·S$DFnbâŠ+†èZ‚J[Žc¦Ûª€Ö®Úö¯¿œˆÚ ¿Šë¯ù6··ÿ7kï¶«[r\é=ßaÝPàÖÌœyš—RYnË®n B»[‚ah±ÔMCÅ(ÊB¿½ó#"ÿUkí"}AA‚jçÌ•ÿAÁïŠüÛnÝñäÔƒ/€ÅŒ)&b5ïòs¿t%d¨$¢^Òhhë• t'8äž)ΘÚ ÛLÿ’D­É}›}ôô$ô˜‚»9u¼ê6\ˆli§Æ˜²—¾ ¢tp™é'=d 1ÛIòÉä¾¥Ôxñ#ò1M@H©4²–3H*Bú“ön5ø6’镜ˆÓÄ)¤/OÇU*€7bÁL«¡u~™FøLž„Ü0w˜ÎRúExæ¿TJx÷gŽ*_¤ƒ€gPD¦ñîê!é•m:=L /þô ×> ã©VàU¦ðzeöÞ…è’$Š {Ùw¦êvÝ»" Ù -d$(.ç[Ìz¦€Ïåàë¥÷ìÕ:»âùBpÜŒ>ûµÞÞBæ´0û¶’5æNÞ[†Ž4`BDILù>^Ëù0ÄÚt -?ddõ4²ºËd…|¿Àâîn:–DtNß±q-óG–ßZN)H¶Tk«)ø ÷Wò¸0ô4‰âÌ×J¢U*Õ fùZ ½ï«»ööMÖ±þ¹ä «ºš'ËzÎ`ì–ËÉK"½ðQF JT J;Ü(ÁԜŔu~`ªB_ªY<—Øû—–€;°7ïkÕ•Pv0(0¨È^Ã!°uÇöÆ‚iòÅ -z†»Wi+°&Š‘öö#Š# m†ËQ2”ó ¨³  ÏæðS8=ÁˆØbˆ’‚Ï8 ùmØ…à3@rÈ^è—Å»×ñŸúYì=ÎÉä’£ÔÛIêuz£®}yï¼®a¾ÃmhÔýc»$¨‰8HÓz/°um–dŸTýÁ 'é§²Œ´jìtÖñdÑžªËKÖŠ!°NžGÄÈYYªv–.ÒC›.‰ƒÁròSö%Õó•?㌠(å]¦™f{¥â±÷®Ð7níg-–«]¾&±rpôÒÔ¹o<M44¨c@[E4sä –LY%í Ö…%T!:ö”_åZöLÓ8vHKÉ1.ävI D«uc‚á-F¦à,7¿•ãh%¸·zHŠôòF¨ù #±vž¶U.ß Ä>`%uò®,Lœ°X¬t(aµMNeßkhüÓ?té® '{;fÑ=‰'dxÄôéSºï ?Éã÷'`ìh\Æ9/°_)U‹Úƒ/&§ ©M­ñàà.³/­PñVa”^ׇzôÞî5ôÈHH=)LÏ2cJ÷å"ß?Ԭ拠†êØlK§îUš”ʸ«"K­‚^,Lè$êFìk¿rs,¬0œZ±nã衤vµ„ÿÈ×,>ME ·wábKéÏy¤8kwo¬ à)³¨‡˜äejò´(üR‰ziq(ƹ'7)ö FÞ‡%ý§¸Ê"£‚4Ï øÔ«ºT*ç9C‡ôcÙ´º¶å»©¸Aû–ªåÅ•ì X)Ÿ{x‹< ÎIRpý4ÎÉü¦±¿ì:õeïImͯõÀÈIWB°œ?özz@lw˜E*ʉÏV×L(³ºÒ÷çYLhý[=ö\P’AÕ°ü6er[ÕB"¬€¼§C>uÕ™GËú³ì5…î»"Ÿw„|ãUïÞu潕óÓŒh?ÈT<êåÕ±¹æqP¢zäXWýÂ^Á=ƒlº³3Î _N¤îÉB3å;'ÑätìÔÌ¢zˆ]«7]á êZÜ2z D¡\Ég)‚áY€â;5ÌV¤ì)+#€ýî òÆÑ»Ê ìLì“c–6œ©ƒr ZÔç€òUCª‚Ï÷¾cgC/H&uèxâÌr+!ÆMR=_v›Be*£-HŠ=HŠ‘ú£™4zQ’°”DUö|¿±Ýœ¯ÇÄ"¥‘Ô¡˜yëã"c=ÅùéÔ×CBù8\!^¤}Ë9jÑ&gJ”’ G·G=P£ÇØ81 9ÐL1KlÁ&ZçY˜~ÿ„üfnÅÓïÏzwk ËäFj*ú—&9ô°š¸¨ÞœGnŠmúù¥sÔ”ØêU$DAÆ»ZÇÇ©²ýâ\ÅéÆg* gIïá ºúKõ™`¹ßˆ¥üŽfˆ·(¦ŠMHÁ–ƒ± ~ ·KTþ½*“ e~šÃ Œæôı ãØÖFîÓ”@ ô!ÑÛB×gå†^ôæ‰ÝÂ&¨ -àux5x EZ‚ ‚x˜YÍ#ôŒš4¼§—Çñ!A²,ð#ÌË —|ø$ýuˆêžùª5nàš#7 JA°U}Ä¿‹‡r)Ø7¶^[xb¿«ºcÚgʦ‰0ö½Ÿz•àa£%r‡d‰$L÷ÿ‚ò-ÑWÁ9„väqêíµ¹5^W`b•Pü%äjÈ;-¿TæˆØã·ÔKœ¸ ìÔ(©]¤_¯ª4z=܉˜*û|•Lm΢‚b¥ Fœõ°QMm!±ç@ÑÉ€TÉhŒ±†‰Dc¦-™u¥Ä1-Y%듆‡”`š×iXƒ˜Î³B¤ì‘ç4ÓOĸ€%Þ!U—³§L˜û.…šÀ ‰ˆ8AIÔí—¨™}9¢òÖùxmY¦y£NŠžJoS}èq`-¥¤“Œù4ÎU?¦bÆ~Ž-ùÂfŸzÔeœ(Ú–TÜϽ†uá†rfTÕ§öŸ²%ck=œ%àÛM†þ)°Òˆ¥¸0ÉMÖPÖwÚÈV6¥Øbî=˜ªP¼8‚’­lt£ÅW>³*–ˆ\ۃ˸×{1F¹5ÆsÀ(µEåx¯$ªº«~q Ö²TUØ_¬eCWh5–îDÀÑíßm÷Wʲ±Ž8u¢:œcAUZèߨ“>ü)SÈtzW»8ÙS/¸ÛÙÚIù‘-_ ‹Z:Ô¤%8F ’и¾:<ˆc÷¸l›ýá,ÝCˆ¢çD#ð:4Àëc½»Ž¡Bäuɤ¼¸–µ7[Ð7„Ô’¨Êh[[¿t¬f$žIP`AÐ@½ÈàÜЮŒr‰ÓÓ¦^L7j -ìU‘Ã`w%ò:êÖûo»áHRObwß‚TB«$¹S±Žž¸‹Õw±¤Gp`j~ŠZÎ&ðOö(²Až¶AÖ¥1tPtJ=ý‚jÔd—7l…#öâôÒã-!₸ýsoiu"§GÜ€¯+ ¼ ”¼©¯t2öØå+·c™<ô½ñsptÓÉ‚½™^!l ]‹,º£ -„"Ïѽì§]e c4æbÃ3…qkLǨ~!Š´Ç¥òñ2–}ê«J®1A iµ÷¨W¨¸^·01¨A7óP(&iÍo–ãŒ0‹^X,ï“›!£Á‹†ñ†¥;…¡‚Bbâ¦Ï€6yL•;Öè³YzX@NŠ67\Ãv½ä]…×(09Ñ«‰˜/ܨLyò¢‹8u\à˜É>í²(«=r0ÄšVJ~’Ó'ýãa¸óìpSû¯GþkÕM0 -ÖëBlŒ‘lèåe'kîhA$¿Ê¢ÇŠ=©|¹okPÔ³`´‰?µÉêW²à€R”¸vž(B×.ÉÈ¢·P™D;V’äzLÖà˜E EE@L4<¾#c±5hÞ”±Ë\R? °gw¯X’º %“1ù…KhcO­|{ê9Fé˲á"SÝF¯H¯‰ÏDü³eVx àrÔ¶×¹ íëSËŠ‰B¢Ó¢kr§=ãe­0á¡Fô”¸©&TË[^ƒk†íŠh8˜~Íè ö0¬TÍyÕ•YÞ¹1ÞqWÑ«¤N¸Ú€²åŒ”ÿOM [ åTœz’ÄZMbUØB}ør…Ž_ˆ¥LƒXn«†«2ƒYgmí+¾dÕ%çÃÿGdÉsù}Öw“$Ë?G»\¢T¼ð¦}¾Ø]y¤) •h|÷0['›ÆÖ¯/ý|ïŶ]x iƒ!6è\qYô\çO -¢•0zm)‰&Íïä_~æ(VéêeÃ"I#îo‰iÈç'¹= ­‚å>6íÞ=¤î(#³æ‰âWÕS/5Ožã‚¼oãÂýöê¯ou‘^!âVÂOŒðm8Ýõ÷¶Rî¬KÔÊ´æeÊ{ ±oŠ”Q Ö0À“¬Æ¾”î°Eó¸ÓZÜ,ólØê‘là­üx•B™»ÙDô)uP#"ù¨R›³¤w“%ɳDp 0ûŽÍJÕ|1C4ôka& Wž^]¦è/u#óÍÝ£7v‚qÔ×5쯠BñîÑžðPu¥˜Œjª’·ý„ÄŸ}J·âÈ(Å}m¶€5¡¬™”ožn¡úhFœ<|G‹8Ùo²lÓË{_5$σ¶) 3¡§ú‹Œ£9ØÛ°O‹Ú"{Ä•Œ¸’î€QBª›Ô¦Ùc3ëi{ÔÇœ•c-¦î™~“¡[¬jb îGq¹‡A§{Œ™¯Á{èA¨Q£—üÖöùˆ-»{$6½6 -5®D -0»}XaZ¡‰Jø“F*2=¹Ã=E±—‡ê¥ˆi?“ê¸\ÓÊsÉ;\Â9ªÕ.é'xÄŠ[&Ôéf?™îpÈÇæþ2äÉçe;‘ìé%Vy±f¯Þ¹LO¹F(w•ËF H-TÔ‹<$½FØ‚üĽĴþ®—ÃÕé\Pn·)Ñeã}’S jX¾ò‰éß2í|Šÿ¸ø(×)è«FóŒ'œÑøŠå¿`‹2…Bì{ /›&O¦¡*k\6ãý%›w[Ì¥°áF;Â&aWl'— UØ ’¢Ü¹†E2'À‰e…„½¡ß§¬6½„Å_Ó¦vQÞgK°š¸¬>0ÄSBÈÆ;CÏ…NÐBÁù<+¶%Š©ñ§Ç(B -,ÀM¼QÖ´À*R4ç–æ!M,ŠÈ«K ³Þb|¼†ŽO„Äm9$ž [$TR ‡d¦å4ùQ‘)=㱜â”óBö=íIÌUÔ®.W˜Ÿä® -öË”ä’=T‚Á¾­¤ó°{ÂÞƒ`_éœ; ÷ôzB5A{vORm‘UJ»m•rç¬y¶Â­A¡>ùÔkS/Phôº£×媛õ4aNoïÌÁ’cÎp™I—sh÷¨«›×ö”×qdGRrØ·WÚуšR‰ÔŒ6¸0 .O‚Êíéi?¢'<oÝÛGÙ§¦˜3r3#&Ë.Åj1’lÆJ2}g0SàìÕr§é-G¾Ú­YÎ~즠ٌQÎQ(ióµïwdhò›Á„ÙóŒ^tħÀ‰ž• Vïm˜6º, ¦ÍàÙÌå´êú?D6r€^Ù½š&zAúe/$öƒàcMB(Uáår•Ûê -ë--cB‹šçÄ¡’ò?7joD”zs•‡Õ%öyP}³“^{ûã™Ò?i^ÖªBˆò ugÍà|JÇvÁ¨ì&7¦e.t²lLT™Çȫ˛…÷Ê_¶Ð×eX˜ígð–LY÷ T%ÂÓË9š.IÃn´jÜ{ÖÔm‘ãæ£·Øu³Ùê®ËIÕ¬w ¬«è!í#vh÷+–…~yâ§ÑkL&"¬Â\ï)Xî¬ ¥ƒ`«ÝC{d”%‹ÉrW¤øæËƒXP;œAbpͰ_VCÅ/ÏHÇݨbŽë)9¾Ñ,m­¥ ­ýv^M„œ!9Ñyk?PLbªÜÀ@Y< ‘-°ø¼_ÿ6—ã2w Ñ É­eçgúÙw¯ñUö¢dß ÔÅãŠ)9>W`o -æYD˦òå£^Ž¥µ´ #ýë§ 3,ì~(.-÷°{?þDÉWD ëù%m–d½Ã&ç šÝK:œ"®,Áò`°µÏ㨇x8ês¶T%Ù›Vž˜„Õ.¦®ªüCVº€ûY¨È‹åPµÊµ=‹ÿÂbC{Cm=«=¼•^±õosÆWÆA-RryÊf4“?!R)ÖîûSÐãzNLò±ØJv‘366<~ƒ6¡ØÔjŠM±ÜjclÔ@îêáÄÍ29)}~G¸KQ¼¹Ão} $?´_¦¿ÃuïYgùØKÏH±:sSˆõIÁp_f¿Bˆôó¶V±•æÒ„ôz;jзÊBȺ½˜bÀ(l½”¬+˜7YÜZT·}o]H{N°Ü{Êb`L¤ÎxKVúˆÑë¶<·(Þ‚ñiï zƒù¤Òh@ÃXY$y¡,=ôön#½w®ÄÈÇþ¥i—ÖŽ_]qBN³5AÏÅÆ¢É‘ѸŠG>œ}÷„E 6«#2Aš¢žÛ9È'êêÅh¸eeÄ’¼ß½>Øj+ß./[¿Ì"ߣ0µR4Nx0‰}V2bêÕ¯œ%óT•ùÛ튟”c! ¡RJǦ´Z–¸¬­ÙÄŸí³Ãé.ðÆTex˜f–{„º“ð%8ŒüÀ’Ü'åâ×^ÛçýÞj¥y–½Ñw4±ÈÒqIi HEQúAl0@˜ß”‹YàËÚ7’/@ß|Ð71=Áç`W -Šà¢®âûŒ_ƒÀeÞÛ&èx»Rs±{h "Oµõ‘*Qu§OóR¡½^G -MHΪkdD|eÕ”jèÀkF¼Nvy¾3½XöcÀIàQ,P€—ÞÁfË”¿Ö’„”×ÝÂóâ±ç…”;85‘ Ø™/ù‰*@È4H‹b¸]i0Y¦Ù"£®ˆb/œk&¥×Ÿ(+ñ®ÍàNmtáiîÁˆ't(¢—8ÆË+ヹù%§Ô#â“Eý»™Q…‚˜­D$O©I ‚T‚ôXº^à&ˆÐ±7¯¹ª­Jq¶°eÀQô«NùäÐÃV@r¾UÍ<»9›ó;Új5`åË'!I¹v)¯ªU~'‹|¸:ØY²9¾~*bŸQaY0|’õ<º´Ëfá)(;þ”Ÿ}Ö%\cqFP«¶ÓWÖO=üdŠëÙli HÈ#KT— ˜ˆõ_ËeôŠ}nŒÙšà¢Ïî…áðç^Q‰Â%ÜwH–lÇ!V)dÇõ6¸¿HÐ\±Ä - M9uš·-§é½*Kü[­n —•qáÐé¿–¤ÉL:;»eÁ‰@¿ÜGet™Š‰€'ö2¬"#ŒÚ’Zò2XrÓ.bÊ€ÿ]ÅXzÁ8&äz~+½¿d‘.Ùê$µÇ[<ã-fzUmNa]¸Üé·—-I=|êQCòãßë83~êU¬*%‘x‰\ܦ •¸ÏPÔ[ ¾õ ;ø™ÄIÏq¦Žf±…t¸ ,«DD›6¨£ÆºI0[Lv3k \ô°´€QwÐ×ð¡Zé¾!jž„»sá¼ÒÅ+H @¬Z1Xæpð‹,FDJR¯ßžgO¿òe¿òH/>ü“y~G¶™»J7î¥ó…±³¬),Êî!IAáÊ´¦ÀM`yèÁõ¤”e¡×õe¿“z#ÄÊlW‹æW9/R­³þØŽ¬¬Àÿìöu'wõI}Ô xªq[G¶„6.r -#‡±á|â9qË”²¿ªÐääed|F•ªØö·ªÀW£x½œ×äI?tªz€0dlë&àÎîti½;H#Ö¼Ü9JÔ ö»´ê)ÉGð¤¢(ÎcLAŠ/Ù×ù‡¤XÝ­X]ÛWÞÚ~…eäŒÕ‹<Ž4aCáj¼P?ÌX$`ih3æ–€0?ŸTßNOê$4«e¸"p¡iá¨^ºR ½·úö³ †oþ„Y éëý)ú™qÊÛŸÿå?þÓÛŸýÅ_ÿͯ~ÿûï÷Ûïþú_¾ûÛïÿùû_ýþû_·ÿÀ£|½ßøÕo~ûÝ7?þóÿîÇüî¯~ý›ßÿûßýø¯ÿü“ß}Þþìß½ýÝùÅQ ü×_|M0°¼écâX¤ƒb ’(wŒg¢Âs¡°¿ *dèFJÿJp(JÅøM}þ3D``ù‰\ d2­\ä -Ë-g˜Ë~™ª ¢¦ÄN± …lž¤ÿJÒ¤Ør*(nÆyïŽÐeõŽÝˆÙ>%´ˆ§Ð—ÞsÂþH†4?ײB)¡‰ 2AR9à KÛÁrJ¼R8cHA»¦ýº±°Iøo-Ãiг¸˜}xË¡¯“PšET‰d{8Û¥ý &äoò6V&,0\Ú¨@+}X¼yHF²Õx’œÁpéVDR·‡B2'!HÈsÛÒ}Zaª ¸«½)0ÄA£56ºO0o¥³Ï¤¥a•rFÄc :=Þºô.ìsæøbYÆŽ;¶ÿjØÅF&. -+¼ì&d¥Y ÁfïÐt NÓž÷¦LF~-3“¯ƒò’‡'ó¦ZIñ'¨Ö›…´šùÛ%øÛ+†»yÁmj£8~D‿º½JD‘²‰ä[8°_ìa›Á%׌Ɯèá€ð‡å 'nìr÷m"Ú›¬xZïÜQ[Wðí¿H7bt’ä'—8±½@ì—¤¾‰D¦³½ ×iR£oR…l6”¹CÕ¯ ®ï@YUÀñˆ.`Qd6úØ`ð¬{‘eî¶""×R¨>îAŽƒ¶ÆÊiñW…ª‡”ÿsXœ°…Am2^DŽì!9jr• Z-L R‡(¤tic<>0äÇê¯÷Ú}&sHŠqGÜ,šÇˆò£$ó¸¯x|‘ž­‡+.‰"‚„ŽM€ÿq˜‘@¹eYƒñó¡}è‚¡¸, @UÒÛ>‘rîaBy+¸ØóçþÔ'+ä´h€²õØE -·¸b<jéë¬È{„Aßx,öUåMúz ×¾z ýî7ëï?>Pt©ûÓ‰¯%ÕKøý‰Æ@¨ñWÍþš¨fÓ,i05?~…•p`¥Å#2ácøeô)ÀzÜSÉk!b ã -ÔÏÛl¶m…ãPÅ ß+‹o›Jj+¸á¶êDâèmuðÇ6Ò”þ!t¨MÎ7=š=¤”µgqE¾Ÿ„–óÃyò¡ÙŒ|Øí?Bý‘Q¼)ôæSìý\ Yf‘[=†vwûý²¾5ØÌ{Vv|sÖ8 ‹`ªÓ`{Ï(´-¶zXlí;‰­ ”2À§¯{âÞ?#KÄ ŒC/çÁêòÜyŽîŦºš.Ö$ŸÒmf"4 oŸðuÐx(c“ð¯Å»,=ÜýóëˆÒÑ‹äÿÎqy«h -.™ŽGÃ(óûï©!zu…èÕrÁç²UdT¡éq¼?”Q©l59„Ìtc!äU4 endstream endobj 36 0 obj <>stream -¢æÝÖ8Îûš{ô@á†Ò¯ñÂYé+êúû¾/YP"pKF·î×Uß(\Õl> ð^¼”Ïé?¡Ñ$D Êé*#éQ€Ÿ.¡ð.yr²(”³mžÈºÜÖ¼²Êqmvû¸ŠÅUæ~VÂÕMfd)~õuÀ[ê%•·ggKe$pKN!p¼1W­ï²©À¶uÙõÔ͎ºŸXýâVí Wñ_ ¢A/Wª/ƒØvàøïÇ7êÃ|¦Ïg¦ïhÓ´[Œ%ö¨&íçö7錭*òœ—¢Â€¸=<†t›Ý_ξ¨ ‡o9'¹H.I÷ƒûÄ5ö§>Rdð¶È`D/›¨ÔÕÀ„1ß (5CÎBZñàT©*q¡ a›q÷´r} º„…¸Šû ¨K”5ŸÏbUÚW()*;púöúF.\8é%79]ìx‡Ï¬ tÆËä2‰ØEÍv=iL>茥ïS°¾ŸXèþë[vÎÒ D KAÆ’H)«¦m²ZÍ]t—zе÷€­¤!ÝÿÝw¢)Õ-¢öÛzˆÈéæ*^÷HrŒ(Ýk‘Ä«ìeêÀ9#Qö½b; 0r²Xô.]|`7ª/c¥êaâ²”¡Ñ$x­BèºâÂF2Z`­ÂÜgâ%­V‘ñîo ©.U-«Ýà»TÝ='çtA4á ò÷^~º«Ë”÷¹ô|ï$Ó‚7y„^M’Ó–µKb§oM•Ãh– -Þ~ísé—=*z³7W–šL‹S@mÉÚ‹‰”¿êªŸr -Ï#%)s`öPãT]qþ ì¾~«Û~CÞ‘bN“šŠŠÇ‘Q}\ðCe€FÚq5óו“Ù7ì‚úÚÒ¼û?TFßó©ˆÑûs¼,Ù+êtö|%Äxz¼A¤¶ÉÁª¸Yq ·”®ÝhKùõh‚!¬ðE`.Oñ%¡f…w—ö«èŸ®À«Ëv…šÜ¾[„¥Ð£°Nðއöã ÃðÑÇA£ÜÁ””MèepÌ*a3ñÝõ}§05Û9Òx¶aKÚÛð#Eƒë¥æn€$HË#üª›„ïDX‚·Ý¶[ÄçÞ«khÛõÔ±‘ä‹üx°µøTZ -$½Ü} S> o‰ÏïV–Éo<Ô›ÐAWÙúÿÞ…iSÔß  €~¿]@uk80‰ú ä=d®z¯Þ™}¬2pErõýÊ¥ê¼F»<Úˆ·}P)4o¤­î|+ô˜`pp…=‡sàš†zJ ×–¸s+>ô–„§{¿4{8n©¿.לö)€”{w`…ýÙýqv×M%, ®„CÂêgÇ@]åõn¸¶Àu¿ê»¡KÓ' ê “Æ u{x7µyhÉgQÙI÷ÒJÏè‰cãDþ­¿Þžv?)HºIHœ=ÕeúI}2 RpÝn.„?ÐÛÔ‚S Ù*¹d\ˆšR(.‘T¸Â¡´*ìÉŒ(Ýã÷æòø\vééªþ­\-bö[¡9…òØÐßèA¹TU}Õº$¨4(êÜAdŠ/Ê~2tX‡ChsûѰè¥D}b×'öŽ#e…åp¤´¿œœçŸøª°ÇÔ²Áb½ã-Kˆ¨èÈù²dÚs5“ì%µÚT±$‰œGÓ„=¾,ȱqmª"Ø Á(¹}{v¤úv+@5ðý’cOÁæmäpЧ„”"^xvß}Ë”/’\-øî"”ÒOÿ¾rî¾(…~u@\n‘לRŸU·n¿ Ô'ýÈŒ°bểþá€(r–’5œJ͙۟‡³¬0©)ý‘(}»yBâžúŠ2cš«1•´ú'eð·°ÌÇr¸ßɳô·[øX+_­ÅrÏ ·$q̤¹C3;¢ö—r bu²¶ýrûK(R®~?ò|> 8ÈåýùØEò²Wûœ‰ÇÝ%ÛgË@éè±8¦\Ûq Ê™ºaC—¸A¾î‹Hr?ÕâIµ‡ùË; ¼GîLجO{ÇMÕ-½Ù0| +“fþJœÂJðÔ{ÔpöJ;9ÜàšD¯e¹š&ùK»uÚ³ÞMs_sb?¤ÐxÑnBÚ@5ô ÙQî—ß“¨@úCña¦4̃4A wx?"íË×Õ†]Ø -t½½8Ma€ -µ‘Å®ÛÅ.eO¿¨¥(W+ä…×aìzÛ^Ž¢›fB¬OЃ¸DÂíÃTp¤Ém°’U¾WéE9Ö6ƒé¢°9üW·ß³gEì€8·GÄTà•ŽÀÙÌdY–ºã²ÓŒf güÝ{wÁ[&íÿ¶ùV]/øšòÃ>Š>s ’m]“)wC3Ø[­ñË=ÑÕJn·×÷Ø1R¤àFèÙ/$ÖÔIÔ­=7|aµ|Ln•7… ¬•>œƒ_ü22Ú:.!ûßòj…õÀw^™‰ŽÞjy/éa. _Þ"-í*vÃ^ZÞ~)ø¥˜ú¼¢ãÁ9hMnPSUt^+[ðPΎ‰¤bm{`Ç|)ÞìXnw •êHIßyļ íBæWuU¾„oüŽVážï'<^ã ‰(MC·3 -,%ë+ìOY;¾n‰jÑÌÁìÁq—·ÕGDßG¨fá!ÃáHÍpIí¾´7Š“ŒgŒò+R“Ú±XR8‹)°æ“j#ôúD. ±ò~›'-%¨ÖëÑ$q NÓ_ätöL9d;o‘(G1””’ü—šj?†ž˜›ð²Û&Ì6N{ÉÁºUH¾^ìONnfk -ªÑ¸íÃéÉuPånÈØz ¡;lòV‘%à•Ba)ð½”}{OcîtCeWÐ;É{æ‘ -^Á¥ËAž© FWìÙBmU<}±ÑºÄxàÛæ€+Zw€…9pÅšÆfqÜö_“É"¼§ö¬79œ,ßJåJÏþ!vi&¿ßáÛ°ÃÚ|Àsð–è°ˆEV0-ÂgŽ— ùÑð©#.¥lGª³¶svþrj@Ò¤<±cÑ[Z¡áî§et-Â_Ô°½TnKˆÉXC8¨w‡Ý.Œ>¸xˆêÁ¸æ -B =Hœq ¼«¡¹M–$³£Ü­0uÚ®aV¿â0§F((”KD¹”qob“M1™ì£(Ü`ã´¦¥dÈæþ/ü¨ðŽñãØ³ºûñà¸\ƒ«%1êý -(<jr»$~É^›ežöÇŒ(©0ðs¢BøK› mçÛÏî÷3-Àb¼TL˜¬¶®oo\9ˆ58–¼,Ì•<*Éáj^1H Ôœ¤1VaŽM©†Nᡇ E擼šQtbòTj{PQi¡Å0 CšH]I²+¨’Psé=Íù Ë«!VY‡ÔÁb¡¬›ÇyË“{Ä\¡í¸Í7ÕCe )!9–þP˜Ùí?¥˜ã[íÏðbîùÊPÖLÙÂ\nŸVq;“´_à -]“ˆ°¬šq–è·ÈÝh™Ýø1óG~ ÕÍ!Y–GÏ͈/ÊODbéIžaÉ5HÒO®{ð¾ñèBê…Ù‘V H6+LœŒòÊÏb†{‚’†*©Sô„}E:·-I‰ô"SjѺ«·t×SM2y«R=XaÄ?Íï¶ÅÐçõÏHU‹[^ ÙH4-$Þî8™Ç4"äÅB’¢Ùk¼{K¨ñ˜ÌC½ˆûu‡Ë P<”‰ò„”æ:$ªŽÞŒd/Ö#ÿ’Ì™ÈOÝ:Ñ[%m8^KFOl§»_r•SöHãZIV«†î å3Q¤Ô«³È\—šªDBæAùġܫõÍ„†ä9j;Vª2£Dç•ÒF¾8%n‘©–‘)N.¡·—ÿK“V·­ú·u6¥Ú -¼F¹F9ë6IÕ<Ò>—†¤­ý;Wø.ãH(’Ë"9iÀ—Ãú²*9pãýGì]ÃvàÒ<Ücá¤ö{à‘ÐZE1Þ; fõZî%wzˆ³ñµ$V’²–Pîë2´'ÑÂÉ -„y³C÷%ÞDL¢@Bµ#×"ÁC€´÷¥?¿å›†¨DºÝã&AáÏT\X¹Ó2˃¸bœ%àäþò˜„í‘\0o@ÏCà MiqBöAÙ[B’Þ¬Ükuš?–+¦é‰bœ´é–=0 H¦ Jqì‚0ì)Vî–7R`’¨>tI†÷£"EYQ ^qC¨bTúV XÒú Ü$nå .F?e6l3µõÀšßøwžj—r(óƒjá(ÔÜcrÜ[Ò ¡<º=ö VuCaÄ×Wøœ‘¶Õუƒï¡n7ÑsÞDgV Ô'&ó( Á>¤îõ¡†U2ð®¦vºîPäãõ—Aå\:õ´MÉïô½V(Î)zGM`Oû:@>8ßžä}/Ò¹—¡KJÿûyâr€’ l#ŠY& רéwŠŒ4硦I1S@æv`BbùRn%ZÀÖ@0'Ñ‚÷~Åß‘†0B5ÃÌ@Á|ïb©zý $¢Tù!VÆÛ¯¢æw*sÃ#£+¡S€E2£ÍðD¬¡7\ž%t»Šä±O‡ýåÉ„2 ÙÆP»ßŸ §Uþ¦(³žšæÝì^€Ò‰J~ÆHÖ£ªs*—-NiRÄBPœœx5aý¡½iaY‚ µ…2b¸aƒ1‚u©]XtÇ+&¦Ä~Åz˜Ü(ÒRW+øj‚Ueá8ЪX{dRq.R€C†³5Р±8Ù)$ª‘6=—$‡‰\7“‚3¡< s³T°R -Û~9¹¨UBû¬…™Åt–’5iõjšˆØ›A!Ñ÷&?’åóNHñTS5.r‡’Ó#*dïáJöt>žèQ£ÇÁŒ`SŽîæ“Ô¢N{”f¡2„ 1žº±! Dn †[çÑJYä¨qÈÚ;‡x8Ť×FD5¥Á)ÖÖóì Mê6ËLÏ}VKÚna=’Q¦Eºü½ß“k¼4 ªÔ§/„3LÝÛŸ°V -ðÌBÑÅ&[¨Ë;”Ë–,Äp÷¸µÆóó=!ä/ ‘Ñ@·w3ëP£ÐùHùEÐl©90˜GÚ…S:ëôè²lÛ«ó0AÐ0ÌEÞ‰BðÂb–¡;ÖBº¾ì€Zìw¦,¶òâ˜:dBÉ3‡ÄG°´R ¹ßEß×m¤ž¨XÁ¡†‚C8¼ö*÷0Z\Rtô½ÇQŽQäM°3u/ÍZf°j–åå -Å[]R¾yìI¡C°'•~Ê"cjcŸªv~T‚ Ç]D‘Ü÷}©‡5X 9ß~XiŒš Ûú„Ds]‰_züçV훈ëùàqdêJ–SœðÛŽT®$…Jùnâç&,›˜ªêA¨t~Hüz]k„Ì÷2ßË~£xçTJ÷/©ºE©% ©— KrÛ¹zÉÈÙ?@1LÜ…½ºÜÃ\:$çår‹–N"ýv‡T­ve{޹žRÕ.u¿ûžc„}Z9ÛHW”L²Óæ%Ë«¶’’w”<õ5ù,ÓE¼ëžÌ«‘ŽD+B² ¢ CR k«ž¼ ºŽ•×i©ô"²˜ó0B‘Ê[GÐÃÞ=¤KV x óð&Jéãü’äcè%0ån JÅI²S{Ê óA6 'R¢bˆ’b½²Én\=ŽG²4šªšÅq¬XåN›Ö}ãnñøˆ"(¢í(â¹Âþù'âJ†LŽ€LŽÔs]¡ Á,= ûvŒŒÖÎeYOÂ!¢!öŠÀ¿@q8—n«âp »ì––¦T¨š\q&r-¢°ár”Dæøê®*äW¨Ïu,é[]°z¬ΫŒzxMqIzI»„MP —øà#.%keÓµ²0ª7´)‡äú›$p ÐÆèá+‚x¶Î3q¦¸„íàž¨I/¡[=ÄÚ¹sÃ8ž¸#ùÛ…Ö0-G)t1Ñp$ÝîQ‘;Œ©tÏG¼^%ò°TBzR‹Êäâ‘­Ò=Ë6öøÓù[jóèº9"S#áÔ(Í+œè*b ýò@6G#lŽ\‡ì&>k]7-wN½`DººÐëéN¡p­ÞF‘m‡+‚±WïBw»V×”ZUeŠ¢/C(맯ëø‡-èÀ \£¤£^zOêaÕqv¨Ž‹ôñG³Œ'IÄÆ:EìÙžµ[Œ=;Nç#` Q2b‰ -8¥M,+1¸Î;ܘa³k«™}Ç]À…bBø+t­ÕöS’4=£ÛÛ¹‰)‰þ(¥Gìj¡!À(ÒaÜa ›2t!¦4eCÝ+ñ6 ¢v_^Ñ­¤¤9(þ8n9ÜBx«pɼKçG€Û{³é«z Ðù܈—¬[9WP¥Èvž€@y€„•¼öƒØpó¾nЬײ>¢æf4¤î\LÀ£ 9‰¯ˆæ)óoy¶´yð"Cžbx—yœ?9ÀiN<%žçóA¼„QI `-ÖqGV|ï·> -¹%(ˆ\@(œpð -5‡»`•÷Ä)=QM·Þ¡Ã8@ABäÊ.ýÇŽT]޶¿–êƒè së—üüW£Ú’Ÿ6/¾c™DàN™šAöžølÙVe–ÀTŽDŽÏ)ämŽÀÝ}< ý9娧}>¸X»uzD‹<ì9ЃúKe¶…hàëàe~¢8“·²]R{9Òn™Ý%:xõZÈñÃ=×ø¡OÅ®|ZÀS¹ÇeJ´õ%•XAñÏk›x_SH_е{‘_XoXOy"=)Yõu™*¥ƒš|T€Z#Ø!ì$©‘S›Eôüûì‡Æ}F3ø §|w×98®}lU3Tw’—¥åê ‘Åô¶„ -ÕŠðÈ·ñœA{nRT½„½ÇuN²™=‘n{µÃCÓQâ‹Z»ë…{(’7:PüùÚM‘=àžˆ&€©–tTŸ™ÀÇʬr%ðCò˜-:õÈvƒÑ…4Å5¸ÝNèÑ®„k—À?8ªÝü‘yŒh6\nÈs@BÓüŒÌf!Æ|h'¸A)ù²Îî§”b W`”Ö pAÔ1k ÷Øt=‰š¾ônßw–tq<»ßð`×f+‡âH}ˆí¢».Œ¬è¢qN5*Š=ŒöA8WnN°Œ&³Jb!Ü®¤‹ø(Æ{s¬.Bƒ£Ý·òšú†ú€a³@Õ!Ñ ™¥í`ß5`°Àfá•J0ÊIl bÌ/é}T˜AÅÔýbÎ,D©¿™’п™­åØ. Ky4€â´3ƒ2„‰p x†.§ùX—¥Åuûð°åÂЬÝ(Õ# ;ú­:ÐÃÝA¢½|¹¸o³HìÍ9 -+oÒüíþe}ƒ¤Ãöûýè‚8ãüÜsºOÀ2$î*ÝúKªF3AŠÚKHþFÚîÌÏÚõòZʶ¢‡xýÕã\19BMæö7èÂ"£Àn‹opaZ°üü„,EnF<ÀŠzòf¯$e$('º|ÄXÃWHšìÓu$8ž0Áž&Ó0·ðÑYç¹Ôgí‚­ýhJõäÝîRùe£$°<€×î T&RµE«ÆV+¿BÐ s VîIP³™èŠÇ\Rùµã¯HÄ^z¨DÔiÃÅa­ð1¶àNx ¿ÏJŒ9š¹ƒôßUõ|)ýJ&‹ ¡dîoú†€¿L&„»—ÀÆ>É¡g]n;yð• 8”WX4Ì2´/ØuM¹7S³ôB!ÙÝ™ÂTq.AyÊ?º½ú&6b’Œø¬°`Ü‚Wô”b”@xojÙ‰ì¹Wò_ ,$’ÑÐCcáËë_Px¢=G]A ©°°›÷ ‚,Á€šžÊ í?¤8k˜±ÑIœÊ1‚«3œ§ üÀ]ŒP¼ÁÆŠx¶X p8€ ëç§X{+Y oÃãØ¢toçæÂ|BïÙñO6$d÷·±“00fmˆÐGdU݆½w’ñe–)w%æ±-m¹„€îã›ànô@±’Z©ð[¥A6=_…¹˜üÖ8×,ñ@¼ë“,=êdÃ-H Ñõ]:zý’.xâÍ7Ưsž3âù€˜Áf¤H†'m…lJ/êq¾ìZ|^@^…½.íh {¼g—Q:¦Hl¹/ˆÖCUÍ(Ñ‘’læˆ}»¿¼žJ¿Ÿò ⯈삌e¸#Ù¢ ñAsB‚'ƒ&OÌUªŽâ:XD½¬õ‰÷8“Õ‡^+BÄö\5VWIŸSå•÷/ä#mÝö©Ø¦‡’r¶%ØI¬ÍòùC7f„ØÎK%:j©C(¶‹Ršpw€ÒìaD$Â`SºäÕÆ»Ç0vrä¶-I@æ´ek2läBÖÛs4^¯%xÐÒý®”UÂÓBR£dŠº¾,¥VÁØj»P—\$Nû.ÎKà¢-2¤ÆOe‹›-VB¯ (X·H³BH9_³agÒ8ô_[ß5’M\Õž®È¤Ô€P“®¨6¹€ªŒÜžeÙÓ-!x†¸jI ßm÷õÈØ^uMØNÔ5û2Q΋%ÒæNB9$à:…㼬¹¡+*÷jªÐCN/Kì^·IW g(±Öæó´Ä÷Ž -‹— l´OÍŒ(e Ü\äl<}¶K™–å¼.•&eùµ¶µ'œ‡ w1~<=°:%4¾íšc[ª%‡›˜®Ö¥bþ&9;’˜@°…\ß›Å4²[<ŠÇøl©È´Ó{Nó>Q©ÀAoÔw³ ƒòL@—e9"Bá]0²á(û&uØðÒ‘wö¾Lh„bà,ãõFÌ»¤ë„y»£F s±¦â—4A®äÒn†ÓoJCÝ6{ /õe/$”9C$ÿŠôäû¡mÆ%–,Õ#1&tìZš5ÉZï/T4¡+*RÍÖ^àzG`˜Û$€ òUŽÉÔŒÊAUJPöÞoÑ0¼‚vGà×·Ko­¥³ Ø©€prÐe›7‹BØ£s0Ÿ¾å"º?>²q{‘‚ ƒ4 YÙSñIP_ÜëÛ^ Æëdoƒ¹5 -:ÚS'z¥Î‰Â˜?›Sü~Ÿ©PÄ¢H¨…X"BÓEÒlsʬ>ÂTÖCIš€g5Šºãy? QÂÒC [©¹&êáJÐ쉀‚§9ï$=W“ž ·ÜÄK:`H!  µ.Ë™'¥ºN@6îÁ¢*Ÿl§è%×'8»«c™(y˜K¼C辚Ã/H€Pw[QNn*É$;z¿áw$5{8ÈÍM¨Ô9yFÍÜ3Ç”"›áP »=eÀ}T5K$Á‡XÃbKŠÌ;Kø§°ŠÊQ™§ìnàÅÍ_ImåkáÜ'€¶'j?¬0­Fx®É`zÎ'…EzÈ ¯ a:>»’:êö\Ù³%•µoœdòÙ‘¹º€JºÎn)R6VrXÅöá†é/é!+œÜ¡pRZžg4‰’8çºïûௌ/˜¡¿(-’¦ñ;+ÄŸYÁÃG‰èLkÁŒ"ÜÕ½èKn`~E7 KïÒ¼U±nDl9"W¨‹±î¶ã;.Q³Ú*Ÿ ÀД|m²5Ï—Ì£=™Çœ+èè -îK“öl·…õö\-dá´?B*‘í@¦CÄð§9q½ƒqéjŒ8LJ²¯,Ô„ëù€dØ–Ì#¨(á»nß‹œÃT$bÕ›f]GÀm¬ÈS"5Ãux‡ÅàjÊöÍÜ\æIR÷zaÔ$®ÙõUñ96n—,sE–ä‹HÌ;‘½àNçË©Þw…ÜÌ ì_.ëèW9å.†ÍŒÏj¬C©æ'µY -}2F iš`á n•`8¼:Ñú>ª(çgQ kÈŒp.Õ¼-G­›^ b™‘¯®É±„†i p01˜ -µÁSŒwvQY¹j eï,BØÁ"A)#uÉßʽ¤Ó$ƒ#YêP&BŒÓ…Ž ËW>N@µ©%OìóIt»©1ÉH7L=Á?µËÜÀtÏH˜)‡) ‰4¡vÆcreçoZ0¥”²pôÒçIbtYމXúéýh%JŒÒ*Å#[ƒ?ŸËûa­»¸g^¹Ccšo˜á©^>cHDrpT0ØÅ]i%X¿$äö¾®–ppüƒ‰€,"ÿ)”.­—ÁV"?ñ~þÁ»…ϯ渾_û`³ 2;H5Å^E;†²ìÂýØNÔñ“Û–EµIð‰jU»2\±•,†@¤Ê9¤0NÎåõ -xm“sG" IC%¸„‚ºÚéä¬v7-EÜê¸ö¹dÅþဧd$§ æþÊŸ”Oš|e—Hù‘%(’üÊgŒë°9"’;¸A}¿$®‘àf÷ÙÃ;dogDo¸"û-c¿!I:¨À™âˆËÀKY¯mQÌG­ÝKú.¼˜r »ÂN’ -~ ‡Võà3¾ª½Á'‚sþü/P¯1±2-þùpPÁgMPè+ÄüîÃîA&M7óI¯B$Ç4VBK.(Á¨…;Rø=v„°v÷S¥®ñ©Gz£|? +â¶’@J1Uži4#ÞЛ&dîbè-Nõ`f«xP c„ÃJ×)ªL·5D.âB””WŸ6¦=×E‡vY·k/‚$eØ øJe­F¼§èöPˆMîîžß‘Fó/óE6¢‚ÎÀO##q^±î'Œ™Û;V½å€¹d6ŒÆ6ÉùöC¢a5Bg²T‡ÿ bê5bßì>¿çȧ -ÐH™k=™nÚ¯„4ÑÖ³Bêèz šyyAïxX—ËÚ²ÿìþs½ÄDBBIšD„ÖlÙä(ß:!ÃÁgëî»Öpµö”7$*šk‰ÑïUt2zð‘¢N¥å˜ùѸ1¸‡ƒßFšç…­Öݡռ¬âÕ¿Þ"¡QrGÛ›À,¾ÔŽ8¶¹“{¶hZë/ä^Ú©~XäåHíëE¡òÙÃŦ=RÂ&³.ù3àùÙÁZ—Õ TߦÎ!ç>Æ—CѪqb~àB3µ…°}õ[g(myÐwó*wÑÇ:œ’¹$­²Ÿ)§Zü>ì•ín S’¤¤b‘z—á -ŠßŠv ]®àà®—ãÿ°¼ÜÏm:ÿ#¾ñnéõsCô ©ÚºuØ`óã8DÊB€ÞU‰–°Wæ!:»Á%`Õjz÷ÐäÒ&8ÕÑ&o_$[‹æÇ-³“â²~/Ý -F;3n[­wê¾yã1ŠÀâ­§7êžkº½BlçDù¢å%õ¨Ü2Ms/ aî9QI}xøb™Üš2=Œ-Gª¾ :Èïü±ÿH@Y°ˆŽ@K`t¬³ â&”]ëO{{@]'Ì>Ù†‘óylìe?¬ `Óˆ5}q*Ô£é@: ©ÚSÚÿ -’gì¯ýQm Š‘ý¯Üq®ØÔÊàÅ®fù YõØ‘-H3cÐ…O „—õl˜èÑ%l# OrQQúæ²põ˜b·_3•làÓÒºŒTtÒ’{\@ŸRAQ¯å¿’â&eæåí¡•¡ö^Sœ :\"Oiz;(g¸š¯ñe -d@ÖYO3 VìiùÇ’·ðÞÔà%ñvŠz˜‹U|ü©«[—¼È<þtüBªQZ;2’th]²Ð¼;\Ì«bÊ~òÓ5]åëéiB÷¹Wu]i+—ñ{Ôû:qÒÒ3²¶ń۵YUÉö,¾ñçþ%eä³X”Òü4NDꂨ¯x¶k¾;€Æº2;X¼{N´qõZAÇÄ"TˆxÀv›µ¥„Ÿ¬ŽC€^Ú§ÖlvômºñždÖ¬±”yÓQ’/?ö*ÁÈk”ÍŠ!tŸñ€šó7þv8Éâ3¢tµ_™D ­Kíæ~å5Õ˜MöÎÈ«U5j¨j,¿zv€_àBlaäÀm¸šÆèÂ=@ˆ±ù²ú Vp5°"œÏ\uæÉ㨇=:$‚2tjA+Þ‹°C==bªƒ3;´åå<|)ìÀgMŠ·µŠº¼$¹Ñcņ‡FnÎ*º"ie£ öY¡GBÙ-P¦ªÜi]6S'Ù‚êÄæN{V¼Í×…è 0i– ©bU·½v-«’O=GÜhyó>öˆ ¼@8Ÿ*]_¬tbw DUJy S Še—E£×Á0:mÒ3/ÔxDyñüƒ!êýö³©Å?i“wÄO&É$0±z‡…g.¨Ëêúß•üž¯L£MÓÕ ôXÔB«ÍR;6bª³9“Ô"›Ayz…Xé.j@奸 -·˜ñãdŸŸt/ÊK—ñ'ú -ÙÛKNÞÃ@š!´1ï™tOaYÚɦ¥ü×F›2þx:P}@`–)—Òsrûûñ¡R ²òÄBú0z8f?’–î]²t3Ý7 ‘0Ñ£$¨uu j‘Å‚»ÓMÁ|+‹tÅ ýIí ÚVPǵ—⢋%¡åq' ‘À9ª¾tîJb&å‰)×Ô–£YØ‘_hÒè  4­Û4$IžAš_·o¬œ‚ùr÷¤•ÃÉfLuý­Í/Òût]µKÛØŒœßׇ¼›Ì”™Ê÷E꿾مÑ\lã«0VÜ/í-b‰M‘Ö$˜ÑTÕ¼¾{Ää#œÆÂIJ¦Åb²,‹§„ß!°%•À[í®Œ·@uSÐÇñv I+Ñ­Ö^1;‹£€¦,—4'N‹[÷@_ ›`çÙ¤v&s?©ïÁEcqI­è½dƒØÛ‰ @»3$Y:ïIв2¡ÚöM,ØsØmð:U,¬Ø¡(Ÿ˜¼F¶cxSÇ0ö‡=ÁòxÕ†ÿÀÕx`*¹3q:A´ã\õÙÿî/á ”ß¼!L\öÛ)þDX()à![¤¤TPç û a’UàŸ} Q.b†û€¡' ¹“'‡YÉ71$iî7šážH­³C*vœ€ãºÿJÍÃ>ƒVgL©H=É0›®ƒ<”„Ývü€ZQWägøµ©L“—ßÅþ>04ÄLõµ“¨˜h6ƒk,TÓÀ¶‚cÑ´t—O í¥„"?{y.¢–à”±ñFÔfµåÁÒs2Öœù·CÄ*&4f™ßípFîX -+$C7]£ÝÃP©FòdHú<ˆØ×¬ -j¡ÀqK€¥`á~bF»_P—2ŒEyˆc@$J›G»°ˆ”q‚hAjk¨]"™kÓ’=ƒø~êh‰ -ÏÖT2Ÿ¥ÕnØ÷~«ºé&Âî·êzOvŒ‹­WJõ™Àd‡v/{‡PåöŸàó´@?êå`Ň~¦u'²ñý@Hê¥O_/uÎF’ØÒ`¼]5®½ô9ÕÕJPßph¹ ÕiJËî%<”Ø…¤˜nû8 ¶¾¤Á‹œµª!³¤±º|)—þíS©Ð%劅‡ª±µ:ùJíxl±zé t€v ËV†\·Ô[Rí2á\J/qÀYÛ¬ù´'Ÿ ç¦?ÂÓˆû´oƒOÎPfáQä9¡Y¥…#é€ –Jš-h ’Ø%;ÄîžÙ1SÓ 6Ò(c/Ÿ»«n»vþ#¬+ñìLvä-pÌÐÁEÕùâq‹ÀɨÅ‘['$Åñ&ßXˆfp÷Öæ -ÿãáÇÁ.ÿOäºÌý.ùÃàµS"ÒÝkªÿÂu)²>óLþ{i4'öÆD„²!à,ëc‰`“ -åõæoßB´Ò³\Þ ·Zž8¤ÉœƒÙ¸k„J RHXˆf„Z©Î©GŒ[jƒt>~èL²‰¿2’f‚¦h‰?†jÿÁŒû_“ûnZ,ÿ”*é¼íË÷ß§ta€Á?EÔïdÿºC`CÀ6C€Ú¯¥ØîÏA¬´ý† -Ë]+nÈahžª›ñ±2æA8t$[ÒenÒ2¾ Ò BK%.kg¨(ºPIá@k·ÏBÄ]@•iæÛ/Fp¼ù"éXkûìöŽ+xJÜbïùÀŸºdÛõï!-X²ÍR%GÉ:>/P³(iÿ»£À'óç UÉ‚1©L™¨÷öƒ²“TÌÔÄ!4»TDâMÛÊ!B”Ñ¡‡áå†61l8P}‡K e‘TŒo?¥Ô¢¦P¤±Ø3Ünò"0^ÞyA‹f´ ¼q'sN02} -Ià¡W…^$¸ì^A(Ü+EE°¥ -ì\?áRc_5îqX³¿a­C¢¥Û'øt¦Õ,x·uÕd{PnºS׸ ­~Éë‹¶ô–5n·eo5¯¦/Š~H;¤”b©Ox»xQ¿OåKk@oK_zDªö‹ôÔ| Sswlgˆÿ%¦/4‚7QŠ—ïðRäI¬"JKó -NB³ÃòÏÖ‚GàSÊ­_„¦±Ï.&·¡H \]Ñ›ðb‘è €fýcCz±8,|5;¾Š­Z@Ø ãåÒÝlø´Œï¿ç¸H;ƒ}E‡(ŽÒè%Aà™eÓùPNƒP!+HŽ]˜-_G¥‘ây˜ËMŸ‰_.t²:Ü«ŸËü)s ¬ÆJt„1†&ˆ¨}ZuJf¨D¤©*ÐK›²)M¨E4›¯àý>bÞ&‘/íêÊ*¹ì;Á☣ÂlöØX‡ìÔ
êØsÆ.×û5Ûépuƒ›ý³;Y®¥ß1е…R[ïy\{dù©ŠV“³Œð\Ô0£ˆ›÷-Üï 1:MPma~è·¹÷p} <š.¸ßzÍg}Yù·æ®’°r·­'onhŒwÂ)¯šuJWÔ]ËRŽ%`²‹tÐA‰f5yNvg)³ -ºå}éÀ ÿnïYtyJÄ€O(9ïƒY …L[÷~ø+:®(*×LŒ—n+KšÂCîyöNdÚìÒÊ­¯ôö‚QÄï0_üãmg®Ø|<ˆ˜†T5Öciþ½–½PËÒ_°’ÝI*¸ì´y…s/ñë×[*•œkØ1W`èW¸~óီõbÒ{>\lL¦÷KÿúçeUÃS'²gyPoŸBœ½U¹t[–THp{dsÃÔÂt9Óé©ë†éé.ä‡ýS@<ÉFÙe!L½@=,@—g\pŠ!‚K'Ùâȃ:²,?É nÇ­®‡î4Á#ì×Û¹Y¿âå:DwØ£ &[eƒÍ¶@ס§|=¡¨>ìàÚhœ<;8ËÖWÚ‰‘0]Ûቼ9Åh(º²Q‹m()9 ‚¡BE‰u•t&†O¯ä<%‰à¦¿B×VŒL˜^’ðm® c§˜×ïi†­ËŽe·[V(…ÍÝ–ÊÙwßü w+Ò·øS ô3ã”·?ÿËü§·?û‹¿þ›_ýþ÷ßÿî·ßýõ¿|÷~õ›ß~÷Íÿüß¿ûñ¿û«_ÿæ÷ÿþw?þë?ÿd¼çíÏþÝÛßý—?0²”ÁÁÞ#ô½gà?ÿÛïõ“bà÷ÝúÍ?}ÿÝùͯÿßüýíÏÿú·¿ÿJÇ¿ùÝ÷ÿïo¾ÿ·}bÿô/îú•³¾ÿÓo~à~óý¿|÷¿}ÿßÿXïo¿ÿÇß·/ùþÝ¿ýýëüŸ~üç}?+ýÁ+ý_¾ÿÍýo¿ÿÿy©ûã¿Å¥öëg‡åZÿæûßýÃ÷¿ýýëbÛÏ ÍÿûÕÿ½ODÏ÷Ûÿáõ7í_ýâø‹¿¾¿û«ßþ:†àß÷üíßìwî÷ûµûå/Ýü—ßÿ×}WÞøÅügŽ,ùËßýë¿ü·çÏþßþöW?|ÿë·ùï~q½ýÅþ¿¿û·_HÅå__ÿ¯¼ÔU®·ÿuÿÇÿ³›þí­½ý‡·ÿóÿºÞ~Í_ýí/~‰ -Òß( |Ñøa7Ïa~¾oþöCóŽ,±þöà ?Ó|ùíëÿ÷_°Cä@î®°A. kTÀXë’ý¸H ;X¿nô°ñ7£T¢d”l‡($b‰ñ(A‹ø„‘÷â4jx×aÏk÷«Äva¹çòñöP3yê·hDÅW 7‚etc¡<÷M €O›—÷/~îÛ_ü£L—÷˜ucÅy>–êf -¾onD«(~’åÉXÄ®;Ïc’Å‹,ø)D#;_qª D+ýÔSž× …â Ö•ýà¤ä;f;cLtôÎ}x`Ç=«wôD¸9~¿F©ÊèWêëÏ—|‡u[€ŠÅ)ÍÓH‚ ®)n8,*eZ¢¹ß=O¿ë'`ð¯ëÿð¾ñ£¡BBHÄû!šQîŽæáçKãÌç…šÓ[ =NËO‡ÌßZ_mòÄÿã·Öy‡]ú¢qÇþèžg½¯žßäsž¾Ñ³ûyLÄÿúûyb(Êúñ"ö¹ïãÙœHîDº©Ñ¸?h¼|³º• ¿É?G§ÃÍ#nÎãš‹w<øöÕßÿ£O§CÎW³„êòùj½Ûˆ§Ñâm–ðÞúƒH" >À'×sÂD>tÆGÙÙqEã™dãH#ô“=[‹[AW^{·²åÏAWv0+?éw_:Í9µÈ¶œÆ:P_½€¸2Yo–|IºdѬ¢ª›Ëã[)-ˆÏî)þ²h+†Ú`4¢ëÆ¢ ï«?s!Šçw¾,tò¢¹\ùjƒ¥{‹F€Ä~vÌ_ш¥ŸÝ“wHåùr£m}/ìeÜX=AÙG8߈K@hŽÇ9ü´³o~ã«—ðz{Pð$VóåuÆ÷½·F-V‹Ç¹7'¿j6nÌ ùã°ùHÙç8pgq+CFÂÍͤ$â1ÝÙÖk<£ù”˜N~Ò¼PƒÊ¿¯-ûkПž€Ïlá2:üúà¥v{áus‹7^©ªlÌW±ÒÓ8âÛBY§¦æå³`€zú®y~¬¾àý䩽ÂxŠeÅ©Q™»â­¢8t‚œºz<lÀß²ñŠçYãsã+ìW~.¾ö’êÞiðC6ƒ€Œæ©›¯ÆY¾ÒX{6>ñ³¹æ¡æ -±/gþ˜¾™¯žA¼WÐÔVÎ ¤$}jò»c䉱3àekÑÖã£á«»ã½zÄÈå§ø$ûì«ýt•ù|¯LöªžYó {M=>™zb,²ñÌÍL¢9µÖÚÎÜ~åܵ7»>9è‡_ݰüÃWš=‰~hìýíïóžï:šÏ<,ÆàX»Îý½r‘ðgnº_4Êø¹¸jEù!›)|ùß~šhY<-Þ©>}/¤³uå:-ÿ›_ds½³o¼”RzŽÚþ}>ƒ<5x+#gªuG@„üÕr-Îüm4¯Qb˜…‹O4Öü44zûê¸ñƒèR¿zÿÍ#0¹-] -ýLn|_nì÷¹çjGs}ú9µÓ·žyt½KÍyØSfüóaŒ{ßy-?ƒÅZþÕKÈk£yÍw?÷C6_¯ÅêÖ][‡s‰Ðv gÞéÒ~“ÍudßzBNb¢@j4Þå ðáÄ<.€”ýŠXEñÄÑ\®› Å…ÑxßñAÏK”cò€Ïo¦škÆ@©Gß 'm¶¾rïãÀü9×9Ñhx¢»h«ó}Äö3SE4߹ɤ@—}#ra€3×ü\8󊌖lŠ’ðÕ+x} -6½2>³o`‘Èt3›±o£9×}>íóbŽ+óâ«ãÆŠ ¯gð»o¹_Lš_ûÔÅæñÛl¾Ú|÷Hbˆ[â¡ãí«ãæ -°ùù -ëéÝ:xˆ-'°~àš¸Q.vn¼Þ½Èhº¹ö@Z€1Àù¾ê•ÿAõ›¯ŸØëKR<^äX@>¾ßZ@¾òÒÿýîû“qÿóþAåhþÇUx“ôÔñËѼW¦’Ík½¹û“¸(O4Þ_껌ù¯¶µ¸×Âÿº/yWžh»êŠ_Â2ïü=á¸S^ˆ–ŒÎJܤc¢ìx4¶¸Õjn™±X×hÙ·äzc¢±ç7ù\±e[õýG…¨ÜÏ^sˆH4Ö«d¬àh%îýç¬Ï}DßJ!ÙOaÆBܾÈe¥Eh^Ï×}ç¼Ï”ì{ÛØvåÏyÎ¥qöì{ßñÊ d£>w>rÈ’gÊh­EÏQó šÄõÓsŒv¨Å7‘W2î,ÅÌž™—¶²ñWyט\×y4Tì|]ÀÎ[ ±òDÖ›^Ðúî:å7[ß½ö¨†F_e—b†ì%x½NûÑ  sÎ|Çãõ °—çêeVB-'0XùÎÑ”N”¶V,߯áüâì5m™Ô„Ft<ßÈ–3l›ç[Š[ðsƒ^çúg$õ÷mfsWÒ‘ÆWb^ŠèùŒ\;É^©ºØ®òÚ,‰äXÙÎÒWòK(±ÆÉîÛým4ß%'ä§x6—tQÞ„’ãR ('/Xâƒ9^ËÌH'qÆ{I’eIžÚí­Ç‚uýdaUY¸ùù5Dô¸ŠL·g<ïÕ—¼a2®HO6/7Ö»œà¬ø9È"“2%_e˜yýÎfÊön¬g²ŽD1¯I½¼3@Sx—Œ$g9 0«]6÷6Š~âί‡£­fÐãü†F(ùÔfu‹Æ+×ék}_æy˜çEØ…gŒ ¯\®/4ðuÞ2Ò’ßFókÍðÏpwìÎ+-?”Çt _Ä^%jþùùÒ#ÍD¿\E€ßçìÁŸŸŠÔã™]6œ¹‘ÉÏÌà3Oät9h[ùÆ“}¯kÑ«îœ'ç‡E @B²Åí"ûm´„ÊÝÚ=U\Â8œ;ë—?Öæ¹Ýy]ÓØ§ˆWp´ƒ5ŠÎŽ´ƒLò”²Æ™m¯x.Qò3éú’$`¾HL1À 'Û¸æ7ƒŒØQº±ßý¬"~ d“ïýsgH.ÍÅ3¹xϻϲ•“ó%PZæYêSc[yÇì(Ôžã>ŽâˆÏyªpc.ÛoïË$l'ÖONPäy邲3c¿rõx¹ò3{äÊOcÍê lªèy/WS (@d°ÚŸ™R&ÌùÄV<ÐÆíž×0ïÙk¬Œ í‰ž«VÄ’ôϰzß¹ñ¾ò¥k9«ñ÷g’‹ùU0):A]É¿U’°uŽÊÉ)ã;yÈPYç#õI]_¤sW~a—kqñÖ{ -ßóLËJÒFãÙYïÏ£žúÊ7C{,7¶²ÎgsÀGôÝב´ynVmÄDud\]¨y`Z\7d@hÏ+À<Ñ̃g!äý6šïzåž•u6_¥ž8)R°qîâ2ZLêÌ%äY¥¿Ý3•³™ Ši5r¸í'Ñj&ί(-ìý§:J!?§o‡ë4f­‚&ã4R7§V o£¹œ› ´ëÇĆàQ’ —yÁçõ)¬üÛõÊy¬PI£ø42Ý Ì»æœ¢„¶ëäx‚±EÆd‘ã|2ù‡_¸Yª»nŽ畟áùVÖø“ö»F&lIæåÎ -òšæfĈl6„wÍ5Å/æçã^.žDóAdD‚Àù!?‘à[ý}2ie†0!áú±Z#I…&–c€uþ}Þëëü8SÞ<³› wô=¡ ž(ÑX{NÏz·r€ëÎÙµV—©òSg‹25¤ÈÑF|èçòŠ™žkv§ëã´ý -=óX½³xÅß×»zço]°ñ¬žµ¬ÿŒš·ãƒ\©%ÝäÆv"gAþ@ŽÌû,·Ÿ_žA^t¼Ü«L›¨yæbvÅ«Mu³œ>ÑÖ¤àì7•Z=Ùä“®®¯e¬:.Zœ\Âó®‘×õºÝó9Ëv¢±ŸÊŒýÍ-&Íåm®K8¯ÏHçâÆ÷ -”sÍXl2Íù{_I}ÚˆH²£"jÿ=EîuîÖUóïO2£vÛ™®î9ίPiõ²âǔՎ°Êàh,#§Œ>#v ¹0£qÔLÞw”c Õþ¼Û÷9@VþÅH¯Ùw~º1ð„O ØÏvá¥s¹2@£å ü¢ö+¼WVnj}4ìye¼ãûïÓûwÔwi<[ûWH„ÁÊ“étqöìX'ïL;UôñWÍL7Ï÷\ÖÈÆþŠd¯Hâ©ï›:eؾæWÈ#E«l~e–jõ}ª²û–ñs5lÚØDÏ;N¯˜i¬³„Ó8?f«dßQ£1Á[ïJnžï›?7îÉá?GߌD‡£7Þ‘˜Ú?6îl,³æwó!¬”§=¬žØÿ=Ovð æ0v>ég2¦˜?×ùó’÷Éœü„šG‚ã¢|¡Æ³àÄô7¤K‘m-Á*GžüÕ•9%š 13S¯ÆyŠ %›ž‘óä8ŒËɵ•šWaÛp‚Ã=<9_›m5Ÿ9©”¸,öÕ'‹Ø½\þ¾óän»ƒ}vÇÆæ êD§ÒR˜ý×í “˜y\ëf€;g_é:¹qœO£Ÿðf´w ¼–°Vdìr Ô[C#*o1æ•3ߨí1]`ÿ6šgàŠFÀa9żüµZ̺ÏþJÑwŽZJö3*Ï4ßF\U}‡,–Ö”§8I>kË=NMØi?™ÒRλÆF;sCº gm'yæÃË,7*¥“ËËéô>3F! §É×nlgæ¬P‹ÜØO€ª*ÇAž· zS>P9îO³OëÝÅkå¿æó½¸˜Õ£pwÐ+-=OY"CzR8ø”lê<˜ó¦®’7EƼn|Z~VxœAW ‡ Ö¿ü Üude™Æw“ó]êk€¸¬è\}óúËU³±˜·¾ Ío‰Å¯« Å|s¸ŸLà Å +ünU¾wâæ{3j¿÷³}FÉ=wI]H ¼5X´|ÍóΩ<KhÎ8nÖ¸5{‰9#û9î«.¦=sðé_gÔoy‡ÁíïJU—Ëã4^ç d@÷KapWK÷ï@¼Yµ†Å`€ ò×r 1Þ™[±~º·ì¿¸€¢|üØsgÐYÉ£qž-Q}Ú ‡Œ³M~ö‘¯§ù®ç¯O=ͯσâlÍÅ“z¯gù¾CïW1µÈÞÑYÉk0³7úŽW]Éy„ÇJžprhŒ¤.ŸkÞ…û]1ä~Î ÀµÎY.¾çÛçây~æ:%a¯r¢Ñxĸ?ì P9¢–U45Ïœ*€Ùß×<Ï‹:ÝÙˆg­~JúácJßYÏD=Nã)[ܳ½xS´lЈ¶ÐI%D’«_vsM­ç&^ïîåö^©cØM¥n~)¬ÖŠeUõý˜ª„_‡É2ì%u¿Ì¬5Ÿ}O•I’& Œ³ÞÔÄ«¡æ×õûÜ'Þõt=3U_/hÛz¿€xùnœÅ¦fߌâD2œ}½æïžôä’Ru¨L°wsG‘Y‡ŸaX¼ÊAäš áDÍ®œhiŽTžq¥ëuò«öù÷ÃæxUÿîw‘Úœ¤Ú‹Œ/:Ç=ÐýùneŠˆ›Ð“3@Ô9þžÔNÎhÏ‹T¦ _¼ :kïS,e’Øs€Ìµ¬×y•žiÍòúbÌÔS†fÄb5ïs¹W6få_áñ`æ­)×Êõú:|‰yQÍÉé@©›\okDêãK-%ì9ä•»· F}z¼Ûƒ(8Èˤ”B޼®dlüúTÍ—¦©Vnç~õzB·•|GÝ¢`®V=‘ºqñ[óÎØ1C´á<Ó j_8uîLî²z#Úï –Ÿ$‹Õé…EL¶™3ZÏ—#"0ŸBä‚ ÷£NÄ)¸üG\ÿ:~½ÂýŸaØeœ8X¦½EËw¦Ü%÷V×¹‰¯ºžö7IÇ>ðÛØueòsOͼ·QØÁ¸7*‡ͳœw¼çí5­Í|ë'Ÿÿý *‹\x£ñɉµ·™ü±×W»ÒÈJîNìÇúœŒÈ^ÑøÔzF}w‡ (fÓ·Ñ|_9_ -Z›ãžyíZ+ï3#´õnÜûìkÆ”ë•Æ‰hŒÒÈ€IÔÏO¼#4®“´YÎæ¬ÎÔþÊÞð÷íü}d»qô|¸'Pý -5/šKî®àE½ë;œìqã:£–uî+ñ:±FßçEö|%’gfXþ}móýWêÆ\0"k•絿OXþ¸üÓÞ“Ÿ”¿H.Ò¼ -Ò/¶t靿“Âer-uÍüHk6Ö;_¹úÊa!ÿœÅ4wx4?I4NŽC\ó|L.'ÒX²ç+”áçør¥×ç>¯¿{õÊ3™« sü¨¤þ>Ü7I[ŸKéY#Qs²ß•¡È4Û‹D¿_˜“§{MññúŽzÊ…±|{\Är’šømËÊ•Zçwå”Å$NtC i|qÝŠÆùd–fïz×àÅßzb»×JXü‹§zæ2wÚ"}Çk’å>{2ˆ´-Ó¢õÉ›ˆ­èÉ€j'âw½”ÌÁ&‚¨уÑÞ1·ÖÙVJ8þÐ(x ×^sUŒoˆÔìÙX^AÍà”×ǒ㮕ôºñªqô”õk†¾{Éœ÷@,þ“qÆGøç"cGÎ{$y5³pä÷σ|äFýîFfÕà‡hÅTJ #‰ƒ}½+|ôÃjLlÐ%zΚíSc¹J’gõçO_ýÓ)Ä2¯w,lA9ܘ;¶îå1(5ÎUqËàɧ;£¢2q>… YÐØï|g^ò ô $j÷:øm4ç&ÙãŒÛ{=SJP ó×éY_ãö£µ ¼@Ž›;מDÌÝ6c¿ÔMÈÆ$á*ü?%ô™7,ùáôLãñ.ÓóÉ;þªoRšïçÓÉ{SOµ|œôµì›S5cÎL4Sð?ŸÃšóô]©²Ðú}P#)Îí •„CÈ—±V B¤ÁúYa9­óz‰½dÉ¡»C4¶œW3qû5¥7Ï•YVAM*ôˆW2ºù…è#Î^[¶“Ò7¡yݱëùtEÍJ4I’5ºKH1@Ééþ€oî»tçRs€qÉ#jÏBÌ«¯rÊ£ol5X1ÖÉhüéÇU=7Y#šíÝ&L½‡mgycÿšÞòÏc…)_ssªX ÿ:3õ±ÿqcæ¾»uݸ® <$»’àËšSâ“§ºjF=&eõL]‘vªl«^øõB[ͼW5ªl³[Ô¼ *ý„3Ý_e4Þ§1&å)Š\N:UºÆùŒX­`®÷ lάþ+LÒg ´Ȱ–óŽdÏå¶Ì]\‘t£±æN%#2FÍøõÎ}%¿ÿ¤RÒÊGÓvXà—F±Í $êuÐ^ã]4$é·ÑÜïóÝLvŽ“väÎÅ‹ô¢HèyäuMۜĉåF`¾‚ r›ØRygJ4¾bÊCWTó8Ñ ¦Çn|Žä/*m?/=1®³àíŠ^r©‘áX4žž³‘GC»åyÍš[¸ùY¨ÎÞÑ·ü9UÜצâ¦yŸ]OÍ·öq¡8¾G×ÁY¾dr’bsz"þÒÞ °òk˜ÅÛ 81áˆ2w9NÂO¯“ízés­G;lS~ù‡„(dðæ.ñý3E[VÏŠ2<Ýä9O2õ­€ãœÁ>Û¿ÿÅW‡ø¥´WÏ$m¥u‚'7ªíÜïUº'Ë[äûShc&Ü÷«â÷»¬¥ä…ÝØëŠbùÀ  RÍ'w’%oõ=êYëÎi?åÚ;ìP£ï«Œ¿ð›{¶“ã}aŠP"NJ't«õèH)䯬êjËóB}·À#v§§Ü˜ï¦$½ö\…e‚áúÁæ*nJéˆ~HDýdÅW?Ù—Ôª[<æ3s´Ü7âp&”„¶©ï‘¡"ØÿÏÑ·ª‰’¿4˜¿dRU7¶’Ûd.3~lúÓŽ·Ö»B±¸oÖ^Ï^YÀËÔv prííºò ÆIN¶™¨éÂó¤ïžd¿½ÏX®u¨Ýp† ùƒÝؤ4¬W÷ÿ°¯‹#éÚ q÷lŒd㊠²7"ØL{Ü‚»»»»ÄÝ}ãž’ 1â¶úÉÿ—[§fº‡•ïÞÝgHÑSÝ]uêœ÷=çÔ)w5Q{X¥Ê½¯ÊF}µ²5¸"Õ*Iª‚8P…ÞØTdMªÑ5Ý„íwÆPÜ^Œ^éÁ&5e¿ªÆÖTe± Ú¾ ÂG¨ ôECªŒ¢Bõr±„Ÿºü•‰©Ò­™êö©$§ÄSp‚†žàb2Pé|¤…à\ÁAÜUª¯‹ÁN8qXu­P8B¥R”B´†EÜ£«t¥«š•~'èU=²*?œa$Ì‚z_\k*2©úL…¦Úà¥|/aÂMŠЯX+S(ŽhªÞj¤,£lT—QÄ€MÙžXŠ -l±ò^úbºèœ{"¾ÔD,ÿe v fP¹žá2¤¯DBp¡±Pfï+¿¯'²q©ð}©žÀu T5±LÄýöÀÛdj$nÇ“*w"/f*Ò%Sa‡—‘/ªžAIoMq"P°ÎD —¦8›Hõ`p↸™×RQ^-웃º¤‚Äê »ÙðaLe4,>4K…Û QS1!FÑPèUØ) U*_eç„™Ty‹a£¡@+L•šL úbAø:Þê(ª=¼9“ªYMB¤zªm•zb¤T*Í QˆŽ©8Œ²_=1«FªÞb¬§¬ä¦¼™ÒÙŒE»hhh î@_ô´¨JKA£T/¡*‡®ž˜ã Uª@¡õúÄså›é+½¾J¹‘Š»XDŽ®ª {cõõÄ(‘¾z­ÚŸ(}Ñ5wIK•õÌT»sõÅÚ‡ºâ>Xõ¦]©R[lR5›¨|i¢ÔÀ¦a|N’êÝt…ÝÌzj´¯Þ‚nÔ‡ûèJ•×®ZáÁ¤ÊzW°«ÜPô<âõ¦ì@]¸WªŒK¨®5±Ê£€÷°‹. œØ t` -Š´Mµ ^[Vrܨ -Ê‚Ôß7wfJ…â’Êf=C ¨¢$Ð(ÕÕå^O¸—à—*ËSýš¨§×ÀD(‘ Û' e‚* RµÂT•æÒïSÕ§¶à~¡Ðƒè$Ta\Bªn -E¨K˜ ! -Ü,ª[œ+¨|.eÖ¶ò- T5C`û¶0·ÊâKøÈCQè„¥‡®’s¤}öŸÃ!"Ó“ª*,ö-µ¬Úþ¬\ðöˆ^hÆuQTªU,KÕ¤°Ò•¸MMõÕS¦¼ .DNp*²_ b‘F##áZ©àž2T•ÿÒ3Rà+†Fu%XáþÆ}PzªjWzÆb-©2HÙqŸ<=å¶r=±Ò®TY/PÙ(ì[Uqe&}Œ.¹IÕ¬v¥™˜ªjR@£ÈG…úÛ²nqÕ±|«®TY[ E.+ÖÈ0CžÀ6„¥¨g*º‹T™–ФNYÐ×KÉHÅÐ(¾‘ðuCQ2qUFu5±¯2+7êŠñ7©ð¬&ÆÆ}ùîŠï‹#eÈ Õ 0¦ªÒdÀçÅøŒºÊ®XíDª¬þ¡l„#ÊU7S4`)ƳD䃛E"¨ßÐh¢X¨ -u@£¨5Ô#«¯'¦(‹Îeñ!|ë©Ê³éõÍà1U1#Ü,ºMuuÅkM Å‘5ê'銊#¡u]JlÔ•úÆbuNe^~V]5F5Q?ºY:p¯¾*wúâ+E˜¦/ÖÂ× -$“mÕÓšŠnf}ÕèæhêŠåìôÅ;RåvLU£¡4Uª—€žT¨ÑúB”ï ݤjVÛ©‘¾ÐTÔ’‚~BBù@C¦†b¿Æ†"þ5®”žTUòK¿O E]ÍM¿ODPÛú"Ã%Y•Mê2¨xÿªòëà¥ÖŽë)…”iU áϨËc@³±¸8Õ÷ÒJÊ-fÐ(œ> *¨-|__„‚&†âµ -kã&o©µ n€ XŒÐ@Œÿ±1¨ƒBB ‰>×ê÷îBE}ý>XÖD¿T˜Šár¡ô*úú„\xV„X¤ºV Œ‘˜ž'Ôœ4k)óV E*î\ĶOø¶Ú©’v \Z_’‰XÚM½þéT5ó1a$oÚóT5‹›– UEdõõļcå=”84¨¾RÍ¥u…í¾*ň¯мèë뉽©ÅØzâ.Ecå(Õc‰[e …þô -»(›y¼…I˜7SSÁóª -…àFÑ[£Ú°‹E‡®¬¾ê/¨ -ØÀÍtE (5Y®ùf(Òa5¡âT[çp£¡@2nP§‘°¯^Õþ_o&¦ùJõDžú§1€ÁY ¦«’í¿PNO¡YLî5QaÜ(zk•é -¸Ñð™;"cS—¢rYã› ÙC¦‚ýWʧ/b4U`HIzE*k,òÀÿÂZõÔÍÆúâÍDÊd¨~…?ÓnáT¸?íËøŸÙg „à…Ý º·Sê‹;5þvSÆ_7W¨«µYlêøüÍö'•[]NÓJO±ù¯UŒõûœò†á妿ïc“xÎÛŸŠNç¼ÁqɪfUòÞŠNàJíªF±ºAŸšÂQ‹p©¡±ø}±ò‹jëÆßU½N~ûSÁáä7©3 Äjœ¨Y]¾K¨gâ†v¡„ÁßbPÞ<âÎgÁ@àf±Ø—PÀÃ@d§¢ -ûïÅÔ•ÿ T¹åøûb¾b½¾üñ¹6©ÏCúc-7á<$a£14K…„V5žS4!¬&662Rn¨ƒÔQ±ð‚Ê)¤LhKUêš -É·©&§\s©å©j6ßPØfd,îø0V¦íªŽüB4¾n,”ÒW¥E‹Y ÆÊÔ“¿½ŸãlT«ÌD™U«>ÒI¨Ž¨ò6üñZÕ¡ÿ:ŠBðÃDLé„F£>W.þûcoþö±6‰‡€ªë®êC…áP]ñH•]Å[LÄÄÂ6Õÿ6¦FBa&• Ç}ŠðS¨ò×û Ga(&–¥ÓÎVúH(õ&TQW6‹RªöãFA°¥B½ã>Õ1Äó þævêÃrÿt½øbu^LîÄç+!ª -~B£±“Tû)þî9„ªëeãZÕÿŸ‹¤Y<ÂÉX,V%6÷—^ÕGKªy¬žúh)#‘AáÒZâ)‘R¡6Ö“B‚2Wí¥ýk·‚ÔU–DRþÁH8CU -µâÅ#IMÄòLDÒ©* {ßD]éô¿?°ºf”p Ÿ´oazÕyBó`Âë+W€ÒpêŠO¬'Tf[¨`j î^öˆCñÑs¥*PŠ®m]=õöõÆ7áäP=ÑEe¤.ùó—S[#uz™¡pÆlÖ7Õƒ—Êõ®E±B‹¾pŠÈßt"hO£>‰Rõ뉲¥ÊÂÜBµ>u´úMßÉ&ñ=5âÄU%…ƒÃÔ[ßÄ=P@Ø@®ÖÎÅÓÓò±pêÍßv+Ø.S±äµÊûï©j6 -¹~BÝH‚èF*½ckÐøYu­:,Ghª¬¡FC¡×?=€QuûÄaðî"OU³úè[¼%LÈ QŸEŠSˆ7ý}'0Ðòa¦:óæëPä~›½bƒ‰Íšm+}ü\,ìüý}·)W::»nûCó<ù¶mvžŽ:¸U5χCÍàØû áz=Þèw=]ü?‚þa†~qCMA:zº:›uX^WǾd5l1²  ŽÐ !3« /kl gT°Â-›þÐbç–â—ïóÅ¿mT~w<–7¼Ôf­«‡ã7Ê_ñ«YÙù¡·†BO‡Z7léjÇ@W{ÇU›é:Ô–a¬Ðü‹ñoè1P—ÂÍxÈVDö½†Ëÿÿbø‹ê ªhÑ ûê™à‘B‚— ›=?Ùj;»ot õŒ £6 ^¿”¬YµY²a3)ÙlíÐÏ‚tÖ€Ïff«†¹Ü®ßKû~›Íú­ßÈHÖ®¶’˜md%V2—~ÖŽÑý §¨2§Èþ2§ˆþVڜƚæ’eß­—lXKK¶îý¶(|4¶ÈÜ5ÖšQ’Õ+,%ë×ZH6˜Ó ÞEÃÊÑOÛÒÎ[Sî7Xæ–4ØÜ1T{£•d³ùV‰9ë¦amï¯%sL`e¬µÑÒßÛÌ’G}XKÖ,Û€~ZI,ig Ò9b€Œ÷ÓÜ´É_cI»ö#œBúsÛb‡ò¡YãaÙ1•Óèè’I”kÐÊ5pã;„ó‹Ám‹ÊùeŽââʦò±ӸȒ¯q•:|BÅt.¼`"ç7”Øê£Å¢k™ðòI¬Gø`Æ%d 7‰Ë9¤ËÇÖêp>qÃÏÈÁ´GØ øÉº…b½£†°øØºé\DáD®Îǹdœüú+¶%ç}Ñý2F3þi#IïÈ!ŒOòpÒ1´¿5áÐOF(úÉY{ j«»ë0€tðѦœ}ú3®hGßþr…ƒ†•œ–Èí<4ißÜQŒ_êHÂ5 ?áì«M:ùkhli÷ˆAœwâp™“†µÌ¶Ÿ5³µåØŸrGïï:˜‹È™À¥ïšÏÇ4L§ÜBZr®ýHûmÖ3n(~÷”æÙ|XÑDÆõƒÆ…ñôMŤâ£j¦²ñÍ3è¨Ê¯È€äá”jÏC‡ä%cZòÛ4­ì¼4iïè¡tXñx&²l]ü’1† J…Ç$*"SöåŸ1’rèÏù$`½c†Â¼6îšm«aÁ:iXðÎæ”#’ENbnéÔÏÂÊ®ßF NBp~ZÖhÞå´‡†…Éé&V²ÙŒ“l\/“XÐ.Ö¬§¦ ½aÆý{“-Y³z“ÄÂzk?¹kÌ@Ò5i°Ü5e°lk°¶ã¡a.sêgnn'‘)Ü4­îf[¬%Öœ›å—3ÊÒÞGÓl3#Y¹Î\²Ù -£]Hf[öÚ?wå™8TFyiX²– -Í èº «Ì%r[$‡áýá9䌫†µM É{k‘NÁý9·˜!¼gôP6 y¤MT>ÈÜt6<<½-n¨ ½/z 68o,Y=™­×á¢J'óAYc‘<ç#Ê'ó!écA~h A„kP.¬ò+4¾“Y÷°A|TÙ®ø‚)›ÊÊž×ÐHvèmÁƒhÀœOÊE|Í >©þkEbõ ¸7ȼMhÁ$…OÄ0Þ7xœ1–Ï÷aüâ†Ëí½´H;?m¹ƒ·¶\á¢Iظj’öÛ´O$ëîу)ß($3y‘¥SøˆÂIŒüpÖ)­ƒäá\LÉd>ºvœ=–ñˆLºøõ§ÝÂ2þ©#Aö çmZ”£6ï•8œ F²˜<ŠÍŸÀ§ï]ÈfZ•Œg<£†P^‘ƒAι¸êi\LÍ46µi6—Ü:‡ )Ïú%d<†‚lr1õÓÙ¤æ¯é’Ë&LÅï¨Ì=sé¨â‰l@ÖhÒ'~¨5æÉ剞ÉslÝ46©q&S>• LIo‹Ly† bCGó±5Ó途‘´[Ð@6(s ‹äæ´õÐb<´éˆºÉ´gü ÆQcír3¤#×J¬H´Þø@-+Æ[SƸ£¹ô×’£㦱y #Ù²‘’XÊìúÉÛ4)ϰA„cZóöý,ä -‰ ßuÕmõÕ¢¢ÈíC´IÏ䡤{â`èÇBîÐÏ’tîgÉ8öƒw`Ü"Ñ…chç¸AÖ¼¯&Üé? ¤ú³î±C§Èx~Ü¢Éy/M}sÙÖ~2ÎK“rȺ%‘qÞšÖÒ£6^Z¬[Ü.8oï›9šóŒ¹‡ ⃳Ç)B³ÇÓöAý ‡Ðþ´GÄ`:"w<“¾w.›¶cŽÉšŸÁœWø˜Ö7iœ9–óOM¹ú ݰEãð^e“g¢Ÿ³Ø„ÆlTÑ$&,í4ŒôIJyD ¦¼Ðè-ÆÉ'šOdo&³Ñ哹Øò©HWŒ¦ÃÒnÁ¹ ¼±lTùdERó.iϘ7.¼t’ÔNç’·ÏBø`*‡t—º}6—ypè&.uÏ<ÐE|Pêh¤ SNÞÚ ca¶`\ýо±Ã¸°Œq¬_Æ(&$\4ôØfÐ'hMLâR[æ°É;góñH–¢Ê¿bƒsðúaüGРCáY@B Ç3£á`-q‰Ûg²™‡1YÐ… È¢“ºlBê£`"àø‹®ž -}S9Ç3q5S)ŸØ¡ Cl4’»”–YXS›fѹ'–òÉ­³ùˆÚ©Š¸†è^`-‘ÎAýï¤átpÎ}h¿”´_ÒplÓCŠ'ÀZ!·¡±÷ -LyD Â:éZÚ;n¨ÜÎÍŸ‹¦ÜÆë:üÜ0è;ŒSÀÒ%d€5¥ègEÚõ£\‘]p‹L %müµè­¡h½‡d\CH/Ê9W À/Hþ‡Ðh¾X.þ(wtôÁXGä×;y(‹ðY<‘ -JE£~å ȃµÉm)CÙØíÓé´ƒsÙäCóØ Âq¤½¿6t)¬X“6€ëÐxcù (Ï"ù°âPß”£`GГ”­6Á;jÂz‚w»Ì¥6Î}ÉycÈyFá‚ÒÇ(ß»p<Æ€ #ƒ‘-B˜0¦| -–g$ðw˜{ЃøÚ âñ€…hïØ¡XG…–MbƒsÇ‚ýlsȇNä"Ž ÉÏ…¤áGrécÀƒl€ŽÂö×É ÒeXÇŠ,™¶æ IÍÇ×Íàâku„A@Ãz…uÉeŒæÐ³Âºá‘®Jj˜ÁÅUMƒç„±eÃJ&‚ò±;f2){ç°±åSàA6`‘˜G§ïŸGg^@åŸ\JešGGTN¢#J&®˜ ?AgÂulêÎÙtlÃTÆ/kèB5.®~:d›,:§Ï¥ìžÃ†#]ŽÆÉ×Ðý”Ò?¾ Ã舢 tòί™”ÖYLXÉÀ ÷ï¸aL`ê(,¾Hf³FƒÞÄmþñÃän‘I{¤û^ÊÄ¡5†ô1è.,w<ë•0Œ,Šôéî7Æ> KИŽRlCöÙW­}Æ=x;x†ìÓKñÚBt#^oèo  Û0™'—å·L©¼3KÉÒ«R*ëØ6$w,ë•:œ«œH§X@U>þžÎ¿aH{f7·=í®É†Œgs.fò.esŽ.Ác—Ø„ÖjÅDÊ9haë«xõDø2Ík²_h=ráe_)âwÌ]z‡²uÑdœ]¼”²g.U|Þ€E:dÉî .8m ›¼c“qpÌ#à Ù5˜o&,­a4¶qCð˜ õóXˆÙ3„óŽÆ¥Æ: -æË7}$Œ% :Ý“AúÖ¬²±€û‘œa™É:¾˜É@zÉ)ð<èYØ´]sCÒÈþ“h¾°ÍÛœ>x•}x!Yxb)™{dÖ‚tiÈ(’‡u%þeަÃ3ÇÐáJ=J£#^Hg˜K¥îŸMÅÕN¡³‘¬$Çïç“<ÛçÄ3édß‘> ="É]‚ûË|0Çbãk§Ó9DZQÕS(_4ÎQaàùhß”á´WÚp*¼`ƒÖ—Øú5í>t*é†ì+ºÈ.c[8½‰8È-Ƈtdmë¥)s -Ò] ¶‚AëËgòö¯-)§~VÈ–›sè'â*ð»%í©a…ø—ŒC„1·újc{ -ö#õت𺔬ºõ “zpí—:‚ €u^0–Bøÿž;†IÙ3›Ê>±NhAE–O¤"K&Paã¨Â±TtõWð!"k'^éÃdAÚ” £„[â`:( å“2LîÒßJᥘÄÉH;… ÀùefýóÆ`9@¶ì#‡øÖ—I#ÙmÑC˜°œ±òê{ßPµÝ+0ÿv „m"š_yõÃoäÕÝßy§±±µSA>±H¬×¸åÀVˆL]ƒìÖOÀ‰xþÑû#<;0?à>ªb -‡æÈVÚYd_d_@cÌdžƒŠ,–A¸Û!„!Àþ3ˆ7¸‡ ÆXÙNZÕŽ0 -Ò=È.¢õ 2 zˆFÏ!|Ö ¬)ÐÏLRý 6É.ú~¶ä¦™òªG¦²ÚGßÙûç‚ý¦œúÃz‡ûÀÚa‚óÇ2‰;fPHÖ°³ó×"´aÁ¸À=Iß$4Wˆ3Ûxhg¤½#Бˆû+uhå$à²rÌõ`mÁú„ñcCRGƒ>¥‘¥]ç@6‰tGëÀ1¤?ì1å…ð’OÚ/k$éæ31ÚB†¸ -aÛ|I€ áÙHàíV´3â!nȦ#.æƒî~Àg0ÏHgMFXx›~h¬/°Ít0’Sß 4‡ÉÃ@÷>$íܵäNÞZ2-lüÒGÈ]CúËýµ-8´/·f}6 Ðß¹-aa e|ݦiN:h>ã&³ñÖ¤]ÐÚD÷žN»F dœB€ßáºl,⸠hާ%ïšMV?ú^^Óñ^_ Ç¢r'ÊëÚ¾£ZÞ›ÉvýcuÍ S*©]_ö–ÁТq2G_-KšëG¡w!‹4¤ó.éÓÙ£å¾ÚàÃa¼"‡À`|¢†‚ÞÄ|8ª|(ˆK—!nQ2U„0wÄPÎ+x0àO.,u ð&0aå=Öæ -ˆk#ŒÔŸDØ”ñŠÊ!lš5éE„1Ðïˆ÷„f"œ^8ëZd³}‹±È=ÒÙÈEknwl)ƒ¸5¬AÖ=裂 †TÓ«õô®g–ÄŽ§«˜ôóï䀯)W„!ýâ‡QA9£ñØ#ٹܺì5á6¸é®] ~!ŸÔá„KØŒCŒ¦}3Gb\Yƒ°x“`&03ÒÑpÂÕtÆ$“(ÿ¤ä¶ØÁ°Ö@6±ŽEk¾?‘]ذv£æ]f¢ üq! åú DÿöDxo«†ŒvÒ ÝcƒÞ¦‘Nÿ‡ŒuÑÀ˜é&ºr2ß8 )ÖÒÒ1ré9PŽxµ%â4Ö6KƾŸœGœµƒî£\ì:†÷Gò¦ |ÝŠG²ÇújÊY´6AœBûÃ:”Ùúiá5†t,ø-Aw"¾§…í¶ó‰Ã8ÿÌÑàŒ ¼Ùêi€Ñ°®Š¯F]ÒE祀ñ1gD—,=g@î~¶™:ðÁZ¾ï÷MDá]C:ªp"¬càqæÖà‹pÖ c«¦Èëþ@æžXDù§Œ[D8 {#ü„q+Ècl½~doÁ÷¤ˆ©šXô7í‚ùúÎá¿Ä÷#™}¶ëPdcA—±˜¯'æbª§±éûæ³é»çaþ]5•‹¯ž8|†\XÎx>ñ´&¸ÈüI/§6~MÔÞûž¨¼iBeŒ&È2Ÿ\1ƒMožK_“ÛŸ­"š^®”íxµ‚¨¸aBç]ÐG:s&ãž<l-á6@î1€ -x•,»aLç_6¤#Ê'>$]òñ;tÈòÛ¦D}ç€g™¸ÆitTíd*²F‰ÒŽ/ Jï˜ÒÕ—3µí«˜ê{+ÐØ‚nÀv%¶r -ðRªø´ÂVó±]Š®üŠIØ®ƒñ1ú°GÒ9§—P%×̶È$à˹ؼQ¦äëH®`M/'ƒ -ð œñ'ð¬M$÷àçí:œA¼…›è:p¯|+ÒŸöaýÓ1áÛ…”Œ§ -1¶f¼³F‚^¼>aÙÖ-IÊ-~0ã“=­MkÊ^ƒvÄø¦d¢‚l6žZ€Cy¿$ì«ã#оß.öwFLäÒ÷/`ÓöÎã€z" ˜0°U9™õÁyGek¦É«®Ë÷|6#öÚ"k~¿œŒÈògÁ¹k€_–p -8Æ -Ưs¤'0>þ[<ûôÁ‡”¶{>ö'aÿOÉW¼ÂHðËP®þýðõ€/á Ä׿¸aàçMüV -2:œõFøéIÌ¡_gR÷!þ؈9ðÌ×½¢‡°H7ò ;¾¦óŽ,÷d“f2èw¢öîwtæþyTXÞX:ñ— ´Qà_¥‚’FÒ¾hl^¢3ͧê§cþ„¾Kç_BÅ·è0aõ_„ù;Ag[HÖ½\N•<0¡â›¦]d«&QE'tåõO–É*¯ÑÉÛgP9£ 7dóÎIjÔuÀVÞ_AV·GÔ¶O_1†÷œœ‹Î›ÈäXBå[Âd\ÈÄ5LlO#¹Å.ûÌoYémCY}×·À«Y÷¨ÁäV/màëðu°“7¸¬kŒ¥B -Æáu€æ°èÀÀ€…)ŸŒlX…’¯¦Ä>F¤sÁ^PŘKæY¤]À•ާœ‚Àß™°²‰°¦aàÓ›cÖgнd[½´ÀÇÊx"yGú|d2Äáa½°Îaƒ &ħnWñõˆ!à¯Á¾B¤Ëèä–¯±¸›sÀÖ?z8È&~<ĉé袉Dñi]rÏ‹Mì‘Ñòv[=ÖŠÌ)ví=´CÄÞO 8ã—;ìxtXîàç›âri£ùÈ¢¯€¯ðñõ38dçy¿ÌÑØWãW=¸2ö—ûÄgC¯Cøô-øU|}p,x6ð- 1™Ê¤¶ÎFÜy>æÍQhþàoˆ7cp>Ð5™{§g²Ž.HT\7¦ò..¥²ûƒL'Œ$ \B€ï|€OhçÀ6ñµ3‰²«Fòª;¦Tú¡¹¤wöp°ià»f·!î·k³Kì4æ’Ȧs)ͳÈÊ+&d.â•ÈfSàöA6%PéÒé\僕lÍãUlÊáù€1@ÈКGzk0^×È®Q…Èv•ÿhD•\2¿Æ·a`ΈÒ+Ryã‹e²ŸWZ5½øNàë€yhL¯ƒÏˆuGkÞ3l0àé[&ÿ¸.›P«ÃÅÕMG<øk&®t2`Pz[ø`ì¯Ihùš,º`@eŸ\Dþ¨Oe[ˆyâJtìŽitÎÙ%dÍã_—Ò^¹#°Ÿõù:wx ›yh!øß§ÃZ ¤äë°^¢_O…ãkhANlb·Ïäbʦ`¾n‡ø:²ïÀ‘±ß9¹eæËÐæ9œÉØ9IÙñ5ö3Í=S ÛúÈ‚Ùß%§š_mÕ\3%3÷Ρ]ј; ,î„pë­Ip¾š€0÷G: Ö&<ç‡ù:`*à`@†Ù ,Ì×±? É“}b1›±g>W:…Å|=óu&uçxFÌ×Á‡|xèP¤‡©üãKÉÒ †dÞ©%à[?%æj—b®]>bbL\å*sÖ…Dͽo膮5D]÷2„IƒÞžëûl=b†ÈŽÀ»Xˆ1Æ–O‘W]3¶Þùy³cš¥qes¹„´óÑÂøÞ#y€ôpxÞ´ÆÑû† µñ#&¦q`bÂôZ 6]?­j_ÁÔv­‚÷£<⇀ ¥œÐý2G#Î6É9´ô*Uß¶’¨D;ûö¹?cÓv͑״}'oy¿Z¶ó§5²Š{F`"³Ä=sñ5:¼wÂpMÀ6lÞQ]ªôš1U{oUyã[Ðø=‘M¥‹N N´˜MªÕ]ÀÔ=Z͵<±„±!K/bùLß;b4tÚ~ôÙ3‡Ê>·˜ŽmÕ!¼’†ZB|Tîªú•‹kÔy›~ Ò-b å7Dnª ±Úq48Þ}B?øüGº‹Cºô"øçAþè‚SzØo5ð({xÝнVVwÕ„N­Õa*§±YˆGdìš§@ºs&°ÿ _«0ÿcüKÆÒˆ‹6·Ü¢Àì ¬G° âžÜ6d§‘¬a=˜=Çé€Û»…áõ„}è1Sèä=³èÌ# ”ú Ý#ÆŒáÙãÙ Ä‘?Àq#Àø'èdÿ`Íb] -ºì?`ÄËÛ€ßþü_c‰US©âSútι¥Øá=ð<ØIÎ'u¤Â­—mÚ˜·'f’‹¦R­O6aû\=~“%/±°à$X¦ žƒÞƒò 8…õv0¯"©n¼›Â/o,‰øã1b¬lÞYC>qÏ\a:|¤ˆÏ3¡e&Īج] Èò[&dõío©‚cKÙˆŠ¯àZ.áÐŒã äåmÆDå=S2çøB*±v*ø«pŒp7Âë3Å'¡õt&øfA»"{‡cnÒïLSÇ¢áå - -q[À»€‡xˆa B»xjC®ø‰€óS^iðÿ~G|Xæ¬mníÔÏl >O Â7iá>ÀŠóÀyÖhí’hÍȶƒ? rG)â«tÈŽ'jïÏù¥Œ„cà¿D˜Šª¼ÿ›yj øÀhÌȪÛßÊ›ºWÈ«îšZ7v}8 |—ooY·Abaf.‘!®nMØö£í½´ù„jÐ »ÚbÎK,7±X>á^¼/ZÏà—t -ľˆƒlb^í8Œr >,ø=Ò7àGaBrÁw3“ÍÚ‰0jë\.ñ'ˆ•{*}]|JÓ>¹aÄe±|C| ðZc\"z–`¤³½ü"¹ä½’‡cÿØÖœÃ ©ÒóRì·÷UæVР§’wÍ[~gÀÍdpÖh¹ƒ·䆀~†¸*ë‹äÉÒc«ØÆ‡Èðò àKÙ"sè'Søkb™?dxö8À÷|@ì˜.¦`²m\Õ ÛÈœI Ë8¯¨¡²q„í6-Eâ@Îa)GßþØ¿[7¸#øvaÿã߼³°Üy¥=Âä֓׿^NÖ÷¬ .êa@òbǫհN逨a‚õËa=T8ìØVÊ=p äð§FX{ÒÇÀ-LˆÆ‡Ë™ôÖ9àd€ .ææ’-›,$ˆ÷÷žñàÃÀýŸÌá -YWõëHÉêo6JV~¿^²q3%_«µ+âa¡åã© ¤oƒ³Ç@ ú óù+²™à/´f\4€¿a_ ðrÄ#ؘÊ)`3“ƒÝÎËÆ"þŽÆ…*8¥+ozºJ¶ïý´¦¤穹þ»Uó æ’²ék’–öhœÿgæƒØí&3R²i#!¡]"*‚ ƃ¾ÆþI—à0ß8®a¿MÿtòÖ†±b=ýA:ñŠB8b=„±EáI)[qñ;¬s‚¯adºð´>UzÁp&ØÙA¤ÈÒ“úØg™;ÇQªt Ž -z˜.<¦G7?1“# zb(ФËSëg±÷×óÍÖÜŽædSÏZyÕ2¡e:¬:}Ïyå%„ýÎ’·M©ªG?†|‹[l$[X/ *¦i*•wv)ø¡ø´óø¤ªˆ΄5¤ˆ+E|4kàZEdö$à‡6Þ #(g4NýI[WM‚uÓÀxbÂÈΓw¾¥Ë®›ÒwbŸAÆžy G0ç +™À%íŸKÕ¿XMïxcF4|\~i6~÷×Ldõd²¥g-Ñбs^d3€/A~ú@Üé‹‘8/"´`ðrðWþKÓü>4Î)x p~È`ˆ}2I;f’E·¤tÔŽ)rÏä!dPÁhÂ?o$ȧ窱n¹dŪu’ ë,%æ´އî$ë.#j .>,kÙgŸþ˜Oäׇœ/QÒ% ?¸4¼;WgUxYÊ!Û†}ï¡Ùcqür9bÊ&¯”×µ}Oo±lyµŽÊ;ºdFÎlÕ`¼µ9ÏÁœ³÷ÞÍ Y5•ËÛ·„)8©Ïù§Žßš5ZOäž ¬ÉG–Oæ! -p£sððµYÉy µÕC‹ ÊÇA¾ä\$6Í]òŠõZ7lÙyS¦ð’±"¶^æüï,äœ!Â%×ÎD8d±¬ü”.µ§ÛœÙѵæ—²óÔº¶òÎ2¾õžSw5]zÞtÕúØŒÎÜ3|—8$${,äþ 1;*±Y‡JÙ7‹*:§OÔ>úizmƶ<3'Z?¬“ïè\N§´Ì‚á5@æÒ_î–0ˆL=:G^÷ø;²ªó;ñ2ÐS|ZÃl.gß>> -¶ïÈ–1y{1g ¹Œý 1<€lÎíAú抬¾þSs]gYw9Ì/øžÉÂËú»a£j§°IûæÈ«Ÿ|K\Ñ¥RŽÎ!sÎ,Â:*óð|*ÿœ•±{`:ŒÍ!xÉäªÐåw¾£«,ÎC†•ŽÞñzà=x}–‡¼=$Lé9¶®}=Õú|#è¡¿·›!³O/$C«'ù£å¾™Ã!amï­eIÙö³Dr -„B8­—™ ×´¾Áñ"s3B×n\ȧY¢HÚ1㿌Q¯AV#[^sw“wÉç3@ÌéW!ÖËÄTM¦w€ù‘—_–RE'õ¸Ô}ó¸Ð2ìƒä)Ëgð)³ù¬£K!§C‰iê¦bß;øSGa{déWÀDZ# }ZÓ#pŒ'$u4øÁÁ·ÂW¶­aËo~¯äìÈ~‡A~Ç|òöÙà³g|"†(ãЙ£Á@‡&¢svͧv·ofε9(NÝq§ÓÌ߸n“ÄŠ“à\¶†Û«ù¦ö-ÌŽ‡fòÚK& S¨æ®udñu#&®i:ŽÞ|îÅ“#€ÿÇcÑœ"N5â¢òrÄMçötòÏWÈêoCæî™G%6NWÆ'¶O%ürG’ÁÅc©ô³ ˜”“ ÐZƒyTVó<ðyq UÓÁfbLþÙÒFTée°aàÏ㈫×.<•É?¡§ë¬ Ú×`~Rßµb&TþY]*õÀ¢ðØ"¢²Ý”J?µ€ŽªŸú[^vÝj|µò~¶X‘°•Ê<ƒšé,ä5ÀýsŽ.a+î-g:בùWô`@vpLÈ qjˆ¥G_ØCÄ‘Ø}í„Ý©‹^ü‰6«]oWÀZ sÏ/¡Bj'P~ Àk_Âq`¿ì‘XÇÔL•W_2!ž®y7CxÐlõ&‰¹Œ—X±È¾#;Ïm‹¢;‚p:å0ô;ï›…óŠÙ„Â)`»pìrË çÙE&ëÈB6ãØB>¶iÄ„ÿ¦a F ñ4—+:ð"ÙGŸ„Ø×ï5ˆ (Bºø„¬ò¶1·S‡ðL,÷H‚dd -•t`6“}hp:¡q•²iàgesÑ;ùxyû“eç¤`³ù¤ÖÙ€ýÿ*æ´éÍs¨ê[˸škÙÚ«Éípü -ü+ Cåõ/–3»º,É=káþà‹„µBÕ=^Áîï¤ ¯1ð!YD¸m“½{>ðnÈÝ…¼Cºà´•}h´çkÈ`sÇÐŰügŸYÂDÖM¹}ÜŒjê^GgîžËD×L¡÷̤âк )KDŽ_ äÂa%㬴!fÆ [8ŠÝÞ¹‘AX|OrÆYòa÷|ÒÈÎvÛ'òÖ&펰øãA&”¹jØ^4‘Î=¾û)¾`’öÍf¢ -•9ÀS³#žst!—1ëèb:kÿ|œñˆ£l Ò†8Ä÷ 6> -ÈUàêtp^9â8ç6}ŒÓ<ð)‘žþpŽ ²‡Àk@o`œ>‘•“y„_ÁWËÇOå2v/€ü^ªäŒ!ÆÌ «ÛÛ̘ý„¬éÅ2œ£°-a(äBŽ -ö;VÝÿ|&Lb“ÖíÀ‰a}¥ì™‹sþ@ïŸE2…¹ä®Ä”OÁka^ð‰Sydzñ ÊwŠÛ>ƒ*8´DÞØöƒ¼ê¶1™¶w6Z2r"è ¢±t -úwùUÿ‰«š9œ\üö¸o¤;AF D”_ÊKÏëa¿IJë,È?2È “ydUuù[>}ÏœÓyà»k'uÿlbû›ÕLóûÍLÒ‘¹8¿}0.Km8ƒ›T¯÷Ç:ñ -´¥€_ðÚ€8*pJàÝáeàƒsú ¾¬‹ô]=âžó£œÃ°Ý‡9&=‚âÜÖ¨º)£îCø'Ã1PŸ”aV¶Û4'YÙ8kÈÝ–ŽmÑaroî`"§`Ûì? ÇãyMŒÃ¶…á=}¥Ì—HÀþ^|à­àKMÝ7óì£ !ï Ö3è>ˆMã•×?X~üN1èÙ2÷Ï£s‘üž3„kèœ#‹PÛ|àlF–ýhD6=]-oyº -|¡TâŽétÂvȳ_¼ú®)“}Aû¥ÑÚ€|=àÛçfí±by݃o‰ê¦ @¶a¿ä‹ >1©{q¾,Ä Î > ÈÇ!K®’­o6ÈjÚMÿìQ„½+ΕŸ"Ä®a½3©æ±5“YÿÌÑ\XÑDð¡50Ç" ð¾û.€˜ÆàÂ\úÎùØöcþQ5ÿÝ=aí–„?8GÝ5v0䢀Mfã¦Ì©·÷Òß’µ—&øŒåÛ¢ËCûË!—Æ+n([?•Ê¿¤O–Ý5†µ · ÐB¼^ÃéXÀÅ› ¸ÇË"rÇÓQ“ /…Î;¯§ƒ’I`Sñ3CRÖé%dñ=c¢ò>ösH·‚\Cž¨MBÝט—þ©Æ¾O6íØBˆ)*ý;f±é;çqÇÓEWŒ0fZ8pžÜ‘…_ÙK¬bk§¼Ðùç ÈŠ«¦Ø‰äë<6ëð"¤ŒÉúG+ˆš[ß’E§ôq Æ;kûl섘ÄÁgœT?ã'dψú»?åç¤8nå•<œÉq~6÷ÐRð§Qç ˆŠÆ`û‰Š+Fdùcªè¨.èe¢éilë LkA6{Ï|Œi‘͆œO&ãÀ|lû›{ÖËš:—Q)Í3àZðÊj»¿ƒ˜™wEø‹¼ªÍ”i~º…l~³ž¨éøË}îñ%dÙ5#¢æÞ·Èf†8*âdžàóf“vÎý6‡K?¼.8¾û@ž­¢wwXÕ÷¾!ÓšgBÞÄc·mÚØÞ!ŽM4¾ZI4¼YNÜ–Â8‚~„Vªàš\2– -¯™H'ïþšlx¾’mêÚLÔ´}‹ý°¯ 8Ä<ƒ¿ ~‡Ä)—„Áx¯Jìž™\ôöéCqwdÛ—àœdÐÁ9GŽ8£‹1Gü:aïL*ëè|y)º/`ÖЊñò€‚QDdíD2n×tyñùî/ëɽï·Xïþeìè¿·µ!.}ÞJû@“;¿l”·|YM4\CïmÍîræ/>öá~ìÜFèᨦ7ëèòßÚ¤ÔÎVx†¿Î]EcFf@2‰>9gtéúÎUŠ »Ö{ìÖÆ{r»†;VlÅõe ƒ|@îXET5cà•DÍÃïÀ?Ãæž3€¼ ¢öáwH–1çDØžny¹‰j}»‘j|¿†ª{¾â&ð!«ï}‡õ\c÷2²©g¬¡ëyùì—¦sO.ýI4¿Xº…ªí^ŽxÅj¶åñ3.}ßìKÅù¢çƒƒŸtòžÙdÁé¥dé-#yÓË•Dc×J²¹k=ÛÚeÎ4wl"ºWÊëž|Ïþxvyõƒo@N@®‰†Ë!w„ÜùÖŒÚ×mÅé`¨C/åÖï~U=ûFÞúÛZêÌöúK?új'w¦Û™:òŒbö¡º–?ØnCè’±ºÐ÷žÉÙ£¶ô‘W‘[È¿¡+/ï0±jýiyìÍŸiwç=´,Ãïj—“Ío7ÈZž­®Äf«ŸN•^7åªï¯fŽLJ˪îéJYñ5]Â'mðn²®{™Íá6:’M¿¬%ó®ê²IGç±g—Þ¦ª/Ã1­´“‹Àc§chàƒtÁu#°¡‡”Þ6aÓO-†üEãc ¶ñÍðAQ)‡ç þ4‘Œm™JÆïœ.O:6Ó¢ò±žÅáÞ5²3ÿ–~ååWÿiG^þÕIvë·Zßëµ'ŸýÁ¼y™J=ýEÞëC_yïc§¸w'ž»ßÅœ{çDžúÈ’g>pܹ'ŠÓ[Îíè¶´Ýñ˜`kŸ¯e3O/®h_=“Ìdë—<Ú&¡y6S±ãóRÀfHÞ~€8ØGjÏ sjïKúèsš>ú”¡Ï¼ØÊž~ìÌœîÄî~A-×5O¾•5½ZNïyaEzNQhå‡>šËþ²…ÚûÙ’8øÑ’>ø‚$½¶¦OËA樼uA.AÆÈ¯Ö2MÏÌ ^Ë´¾ÙÜ¢ØÙN(öÞg¨¦öµDC×rÐ}t#Òµ]Ë f!o|¹LÞüv¥õ®O«Éï7{_o–ø¸‰Ø÷y3qà³9uòƒ‚>óé74qî3O_|ëÂ{µ•ÝÞñàs‚9öDÁïÞJÊ‘‡^YÙúÈ/›eGÙ"?õI_úì,»ú[ù¹_æÎ³î΃Û‹7mOߨÆ|  vvo¦ZÞn€g£ /‚-Àvá#âügž9ú†§>¬¥‘.غû¦-]û|•ÕVOMKû-¹wÖpˆ…Ú\¾¢8{Ï›=ôƆ9úNÁí{Áò­Ï~ç’iì6c[Þl¡›ß˜Ñ'Ra¥ãé´CsÉâ›FàÿA÷”~aSÑ:Ï¿)e·¿0c_n Þ¬²nýy…¬êƒ©Õö_¿·jý÷2‹«½r«®^wÙÛÿ æ><Êf>¼J“·ÿìEtÿB½ÿœ@¾ÿ5Žÿt3×áíáb·ç{˹sØ7/3=Orm_Ý-vy~¾šü #GþøËVæÒ7îæ“0Å…_öàS^q ÝÖîØ]Ï­.…ظéÃ~¨·ü¼FVóìf÷+kűvzß;9QñÐüà3fZžnAzÈB±ã¡ÌnÿG›½À7ÉÆkh…¦žuä§VÜÑ.[öü#7þ|‡§ìà¿6ÉOü,#OP0WŸû0—^»QgÞ)Èïiæì {úòs7êÒGòêgêöêÖ;oêÚO®Ä•9?þj#»ð3C\ùbGÝ}íÍ?¿“Æ¿¸•Î>¸A}iG|+#[?m×=ÿ^Þôe5¬êpIÁqǺìèÃ4Õúl£¼¹gÓòÌ\qâ¾3È·âô]wæÀSŠÜÿÚ’Üݳ™9ðœäŽtÚ1gžÛ{1“ü¼™Þ÷\N}a-?ñš οW—~q¤o¼ñ¦ïöøQ·^{Q÷_úSz|‰s9êØk -lqîK~)“Ÿx/cw3äå.êÉÓæUW²Í‡[…ܧŽYw¯·U{¯ÑñS õ¤'Œúñ#±ë˲ÙÐð²‰ÀË ¦‰u9Â¥`À_eUðp±Õîÿ¬bŽöðüÕ{AN'ÏñUÖR¹'Yïûm|ÿ¯e~¢ä§>’Ö­ÿX!+gd]óë7lݧ Š–§r»CmnŠ«×Cmî\Ûzëj‚í¥Ûáܹv~˶¾°ÄXeÇ»uÀÓHdçèí6 LhÄEì˜*«l7–ûÝB~óW{òÝO1Ü—[ÙܧÛÙÌ——ôï¯Ó™/ô/ïS©ï¹wrÝžµ{u7–&ßË®,¼›RîÒ³¯”øøÏXî}W®óË#¶onsoŸfó/º2ÉG=Ah<½©?9Ñ>9ÊZ~[)oü¸œ?ßém{ån´âäS7æâ[gòÈ'‚:ýšãnu†Ø>½™ÃÝéŽ`~ìödo>óã¯?åo·EÙ¶]Naouðy³×ys—:}é =N䯶rçŸ y¼ïÉ_¾íÃ]yàƒtžeÓëo¬3̶ªh×·:ðÖXîµ$®¿wfŸ?IV¼¾›§xߖǾîLcÞw§qo:³Èg/íoÿ¯õíÿ±•ßþÝIvÿgWòåçæSG:ÿ¥-ßéõñrîKWyÿ¥/yá‚ÚóÎ\^pM—Ì»¸”(ydDìþ¼ÚسN6î*ÎßõV½ïÈì°Qi³·9ØfGxÎѧ^*äg^Óô…§Nìå/îüãmÜ©g®ìÉöòƒ¿m–ÿhE!ûK_xæÄÝ¿Á>z«èzf÷úz‘Û˃5žÏv׸¼:RéøþB9ûña:÷ô~2{§=„¼øÞ–¾õ̇î~kûæZ‘ûóeîÏ÷U{w7V<©© |TYêÛYWáþ¬µÔæã¥<êÓÛDYûïVÇÿµü?œ_þ6¦y:Qÿr¹ó£½ãƒè6°]²Ø³Ó-ê?QW>¹Ø¾¸–gÿüR±Ý£+™Ž=gÊz.–1m]á²ë¿Ùm9Ò»Â:éìL+‡ðþ›Íl$$é¤ÁFïÁ}loßs±ÔóùþÚ€ÎíÛ]Ÿ¯±yr3콿›`wvZ²GÑ8ýx+Ðöñ¥ ÅÅû~ôî. ~ÿSô ý¢3Þãyk9’¹òê[I¥·3Ë@ß*±ùt¹€ÿr5ÏþíñâˆÇÅX&[oÇ–ºS²ýVB©ww}äÖñõÑ×çûÊùr¹ÝY¯.”RC­Žõn"Z['«yý-•xj¹ãçõ¶§ÛýùS=®òæÿY-ϽµÄª¨m‰ì쯔âY[†SÏÙJ—§ªlÞµ2O;â¹WOÒ¶¾¹Q¿jË¢nöxÊ®|±±>ù/ Ù™7uã™uÿY€¬ýWêõãX˜‡W§JÙ‡w",þcyÓC‹–¦[ÿ{Ù–K½­ºþåæù´¹¢á^|yõý„ʬö´ê„öÜÿîú§×GÊùŸïp?=Ëa¾<Ïb}–åðæx‰_g}•Û³]¥vïOZ?ü·‹Å­¢öülÎ}†ìüÇuLúñ…tÞuÀ®Të›Øæ~Ê3{þÛýTnÓüXÆ×=7£«ïÿ@”Ý0"v~^Ç]xæisÿN<ç~4sê­¬å+eE7—Ês¯.¶*¾µT~ú“œt'Áåå™jç×g«=w²Ù—íÉ6ŸîvÖÔ$=Ê®M|”]S×W‘ü(»z3•|üÜßîÃ⸎üúÔ'ie…ñeÍm1Å­íQ…{ïG¡÷-I½—Qšu+£$ë~Zið“ò²­oÑoß&’·?xQg?Úñg:<ø ÞüÕ‡AÜ™WúP7Iïé¶d?wfXê ¥y•êÙ½«Ê·{Gw÷ÎZÏî}u|Ïà òæOîV·ÿ——µÿÛUþà?næ×z-6Ÿï]kÞøZj±ãó7ìg[ßÞ,uxs¾”zú6‚ºùjuû…ÂÏ®\S—µëå&öH»‚¹qÏ×¶ãÇ ×ç*^œ*q{~¤& «q{xgqEòÃÌ’È'¹E9’‹šïÅxYtéQHþΠÜëmaWî‡ÜnÉ{ð0$ïú÷½¡·oG»UÔ|'®$çNz…wGc¹Í‡‹yìÇöLû×§ŠåÿÇÇúT¯qäÿXS~µ¦Ž¿cÙ=[™Ÿ-¨ú_Öp;_‘Ôá_IæNO ÿ®+‡yõ4™~õ2‘ÿð(Ÿûr/Ÿüø6žùéE†âÃíÛwŠ©§¯"­ÏþÓZ~楜½Üî¡èº•Êh˳ýp­8¾=·.ëIZƒwˇWgKùw×Óßœ-wy}°Òùõ¾²Ð§EåyKµE_Zp¥#$ÿbgHþUôóÒãÐüKBóÏ´EEë®áA\éö»q¥u÷âK“d•+¾\Î5¿ÓËXÜžo½³wsø#Ëû°•?üÚž»Úík{ûf‚mÇõl»7‹Øk>²Ö«äMïWq­]2îÄsGþjg wÙä ?Ûóí’²îg6Ä<,n°{v½˜¹ôÌ]¾çŸfÖ5OŒe;^KzÇ2]ñuõÏöÕÚ¾»Žtá¥2Û÷7‹¸_žä9¼9ZÖUZSý(¶¢üQB÷Ó–:þí<ºçqœkÏÁª„®ìêÄ'™•b‹÷¶EÂçàƒÈ¢“hž.Ü(>3¦âÌÍèÒƒ·£‹+î$–¸½ØUÂ~~šÅ¼èJV©/sën-V¼½škÿæL1ÿ¶3Ù™Íw?Ë`Nüî@ìýÏFæìïŽö]wJ|»Z¼º[«_,ßúî\‰ÃÛ3eÌçiò·ÿ¥Þ½‰gmËqîÙ_jÿþD±å‹^wËîOÎäˇáÎ=‡+âží´y|)ÅübïÆ--¿J·džš¾%´v´yTíØ-u]z–÷þÅï^E¹¿ÚY‘ß™PQù0¾Ôéõ¾bËôúo~Õk³ém/·ñC/¿ñ}/cö¡—Úü©×Þò—^_Ë÷п¶%Ñ¿µ%Éþ9zóÓ^nSI×\‹#½ëˆkÿvànv‡Ù>lKw{z¨&êaI}ɽԚæ»ña ü›YÌ“ÎXúñ‹pöñƒ8þ]G®oGSmL[QM؃Šê½WJO\‹) -yR‰töÙ -Ň{…öo®”9½>ZØ]Ûù8£!¶½°ÆãyK9õÏ×)dOOó¦éÎ{…NoŽ•{>o­ 쮨(_‘ü8³šùÒA¼þ)‚èù5ÜêQ¯ý–ë½[6þdº)¿bâÆÜ]S6Üì]aõê·mìïrRïg–7ÞŒ/Fv¯xïõøâä;YEž]MEN={Ѝé'oè‹_‘w¦;{¢]_¬J|˜Ssèjlñ…[‘EG¯Æ•¸‡¾W|úZLñö‰eޝ}½ìkÆýÌŠÓ7¢‹/ߌ,hE:ëöƒÐ¼O]A9ŸÑç:Òu‰3Ëeÿú³ái¯•åo½ίö•îèˆ.¿Þœª#¼øhGxInWrûÛÝlö·Y`í>]-¶þðÀg{—o‰Ì±ÎÅ[sµ­¿Æ÷ÖœÄd¥™Äð›$F¦+%úF+$º†ßK-—è™K–É£ú­‰85jMËÿÎ_û¸w-ñó‹˜è;EÛ/¤–îý1±¤ðJFiÅ¥ôÒÆ+‰Åù—³ÊRvðêl©`Þ½M·y}¿ÐåùÁ -„‹ªòï¤W7\K®Ø~+¾t e÷’*çYwþÇÝæó¥‚í÷cK/ ýv¦3¤àÀ³ü/B -éw¤mÞõEjR4~cö ³]?ën8ú©ÙñÞoÌÊÏYnå*™¥³T2sâ×ñ³Ð;Œ“ “ ‘ • ’ FŸè_$c%:šã$³ÆèH–[J~°-Ð\|v芪OS×võ®³ø¹w›Õ。6Îå±ï^g2ŸØ®7ÉÜ›Y®/÷•§´eWV]K.i¼œX¼ûjB1Ò‹%ÍW’JOÞŒ.þñVd᎛ñ%HŸ½Sü㕘Â+·¢ -îÆ—–ÜO®ìîÌî}íÿóóÐÚßßûeyôÔnùg¯û꫽ÒU‰?Žùž í§÷Í*ÉÜ9:’E‹çIÖØùhlHÚ9Þ,¡yì×0ÍÙÓu$#%Ã%%$Ú-ü¿6z/Mô?‰†êßZ¨e(zëÁèªþè_š¸m(úÚ°ù]}Vò-‘©±ú@ïBæýõ„âóYÅg3KŠ/§—]N/)»‘RRq%µtû•¤’—K]Š/9w9¶øØåØ¢“㊢µyàflñ‘ë1%×îD¦=Ȫ¢éIg~z’.ÿýK\ÐÓ²ò‹ÝÈ? Ê/ëŠ)[ÿºwË÷6n’y“æ!9žžmz* ü07CО´ŸDýüýÏÿià·+a†Iô…~—ô׎þ5N2qÔ"É©ƒdurÛx«Èn|êF:Ê‘{ßåþtwEë¥Ä’+—c -›¯%”´Þˆ/A:¦ðüõ¨‚Äû9voOå'ÝÍ­Ù%±Š:g¯½Â>{}?Ž‘ÈÐÿëÎQõ+ÿküqÍLÆÍB3f …éhmáÝ î¯•^ô·²6ÝìÞ¶ã\eË¡ %­§/´œºXÔvêj~ÇÑkù­g/¶~u®¨õüÅÂæí×*š -GëÚ¶T´ÖÞÞÒ²{×]·s›öä7v”´ˆ~Vnò8¯\á^vÐØ9r³ê¢…+ÐdÕ ÄµÈ»øÏ6§J®¿±Søø¿ŸÃ˜%jâŸ#solªÏá{ãñ?ìUõÐdd 1™›º!›U1hEH¿ªÇ#¥õã·¹!o>¯¾ZØX{½²%öùîf¨‡÷µ@^u%νš+ðÇÍ÷›[£_7Á÷‡o4ÞÆ9û£ûõc¹nF]׃Âö°wÇšp~!sN¯gi6ùÿóÚ«ãÇ?žëŸßƒóUûãgcç­I®Œ6¾BÚøß2{Ç<ê˜Rûã\µÈü3™¸ÍsˆAŽjxìWÚJÞ(3"žV—|g µéÊVb‡ ûšï_,ÚqãrAëC<†®ìxúUQÏÓù;îßÊm=¥ Ûg˩˅-;®–µø~TÊ—¬“£IzFdnýW~ázüyžÿÕç¤õǘjâãÉùOÀÿpL4´CÓçHÐ\§4´LÖ¥²f·ÒÒÿGedÄã[ºÏT´<[ÚzöBQû•K…;n]*깞ßýååÂöã— š{/—6åÞnl†GÑhm3ŽïM­wŠ›Â_Üî3¢ô?géÿø<Ƽ¡yÏjÿ0¦*üLÿTÿ3P™Œ&©Y¢ *&xœŒ°O2Ç1~2Ò˜…&¨ÏDújÖÈ@kšlâ…æ­+@Žë/h8_R.âÞ^ÊÃyKŽš n׵ʾ©úp¶6öéÎ&ìcšOc_Ù‹ÃøÈÉwaßzùzNÓ³§éûqÍ™ñ¬±ÅÿWe„Gÿ7³WùÈÑd5ýÿËØ ÿÃWÂׯ ˜§zØ+Á9™ŽŸ…&ë/CSŒ‘™ÑJd:É™.GÆz‹‘ñ¸EÈPg!2„ϵ— ]ü{&ÎhæÒpd´GÍmXi#x¥ŒŽ|r°&îî®:ÈÍŽœ)mÞcß‹¯Šž]*ÝùõµÂ¾·×Jv}w«pçû;oïçõ>»“³cd$¯ ê.—ÛÊÔþßøÇ?ý œä)0^¦VÈ@Ý5"D~?Uͱ/™†&©Û £q ‘–-2Ö]Š&[¸¡é68÷óÈGK¹•å|Ÿêªê7þ?)Ãø7òÚÏU6öEyǵ‹…í·.´ßþªpÇí›yí×.ç·õUAû‘kÍ—°?=w-¯¾ßr£´Éõ¥ÒyÞ"çÿñ¹üé7ÁGhÏ>îÏÇ?¢õÇçñ8šjÌ@Sð8™Ù! ;df±™ÏrG–ÖBdf-Ff3…ÈÔÜMšî,æ°ÈÖ·­Ê}®çtE¹HöÍ™¼†3µÍ$oùjkóÉËM87ki»^Ò„óÌV¨=]Âù ÎÅnÜÈm~ðU~óWWóšñ96ùý¢ uˆÙ¦j½ÌÇÖ‰ÿôyŸO<ƒ:ù|ÌŽÍAm’L@“T'#3mdf°™O^‹fÙÊÑœ•ñh†]$~Ä óyRd>ƒF“gShò4šdꎦLñ"?[$jE«óè¹£ô x§Œ{r¤<ñv_ÍŽ/ªšo~YÒñèBñŽë—Švàß~ájnÓ77óÚ>Œæ´½¿ŸÕþáAN×ý›y; 'õùM)·^ø?3xÿHŽ6áìq,æÁÜû™þ©2Ñ4Cæ:³™î§)Øñ÷õpÄÖû™ª2Õ²ÁþÎ"ì7í¹ÉZ4m…¬—Å Ùk3ÐLB4˵M[—‰,Ý7£©îYÈFÔˆíTu¨x1Áé”r®à½r=ÿú«¼×{jŠ/6Öqbk×Ý/K{^(¸x± j†m·*Ú7=él¿Œë„G·²É:¤ôûsåN‡”³ÌÌýÓ±\äZ#â襎c™ŽöýÖÈT}öóÓ°EN"¶i„ÿ«šàó›Ž&ëX##éØ7âÇÄyÈÄûkde‚¬F¢éKbÑÌ5ùhf@#šîSl#ªÚ—=ÐY{P9Ãõ±Ò çÁqò¯Ï”&ÜëßVw¾¦ùà™’¦Ñó…-ð¹Ý¼˜ßpúfNã7w3ë~xÕùþYVÏ­{9]Ý7‹{“j+Íø¿ŽÙXü_ÿéKÆra-*#o•1ÜwïJ£ž¨{8ØþíÑÆ¸'{ÚûÎoiï¾°µ=þéÐŽï®7¹î¤rÎêž1slzk´rûk‡‚[ºé'ǯ©¼mà|\9×íÒ9ðe²ðeÿÓÕ²wŸoK~ÒÙõÔäkž„ÚõrAË—×rGnf7<½‘Óüa4¿ûþ¼ê§§9®ù7ŒÀG€ÿglSëXö ™±é8sda°͘ï‹l=“ ‰æDÖ£9ÇÕm+®h.­¼¡µ¬äÊøEé§ÔåžÕX^vK{yÕ3Ýåt—ç^¿"ãâ8Ç’Q=—“J[—ÊÕëö+­jŸ™¸+çx>Pzú>RJü^*¥~O•¼ø£2=í^[#ä,p^{p¾MÀ‘·¿ = ù¾§<}ì'‰ äà”u|šŠõœ5ÿ]ª’1¿>ÉçÓÉ4wdj#Ds\’ÐBª - ÊÑ"iZ³W;ö¾þê!¥åº³x|î(—»ÜQ:€ÿ[UýÐ`Eô Ú"i²S4«8ÄíÕXS0¢¿¶â¹‘sÛÏn'•Kq~âåûe°è·©ÜOW‹}ß(y¯ê›–~ÍOm„Û¯ÚÐG~ò7ߤH¿üe=}ð÷ÉÀ¿8sÃÿ(=ñkwúÇþØ[¹âä½hÙ¥çɰß)àª2ÐIV­f¬ößÇ=X™f8~:Îõ—¢©V"4}~0²¶E³=2‘­¨-ðÚ„®‰Fóíh4g;²±ñ@ VðhU­²2åä8‡ÍWµ]úÿu†Ç]¥«ÏCe ÿ[eõÓ¯y‘_ﯗþx­\üË/’Ëò}®ä¼ÿºÀ§çõß}J;ÿ¥PpSɈF•!’Ǹ'r¸oý¢5ìõ¹é÷_W3>dˆn(å’;¿mà¾}QR|w{×èÈæí%£µ­®Ý§Ï°ZñOØ¥*Tm8÷Àó Ÿ§‘ÎLdn¾ÍZˆ–zÆ!{ª9Ð9hUl—ºCÃ5ƒu_)çyü¦ •7J8]@ýu4+ðß~Þ(ùû½LÑïO3þ®Üàñ«Ràù£Räû«Rî÷³2œýáu‰ÿke°WÍ% ߸F-ÏÈZM¿ËJñ-exÀðï+…ù{'‹O(™Wï b^îëˆzu¨=åIOÌׇº„þˆ Ñ`ëÏ,‘ ?¢ÙÓoeÂþ–{lêÒ™9w©Óþ«CÛTS{4ÛVŒóÜ-È>î¼ÆÊʯõ{•¦ØöVzý¨¤ýþª ÷ûMáó«RæòTéè|K¹ÌýÒÝÿïÊõ™›†oå7¶5Ü«m”~Øö<Î)í=O(í¼n)=O•!¢×Ê$ɇ߳e¿Ü«å~úf‹ÿ ¥S@PŒªó²•ÈÇÃA%ìc¤úŸ81 ç—H³vZÈâë øüãÖÌž¿ûòÇ?у?z2Ŧ‹³M}#kÆ-X*Dæz3ÿµ ÿ°M5œgák‚ š¹œGvAݪ«k_ÿsû‘Ì—Pá¯Ê8á_”‰?(#|c_ð@IÜRR~7”þÂGÊ0ÉeVà·ÊXÁ-%pFé%lzi+,9l)è{c'ý{óî»ñ÷Ê ÑKeŒßðï+„ǬD;,§‡~ôb>ÿȉÛn.¡êÎ, ºÎ®`ŽÜ”¿&“ߺšòèR5êÛ®û£Û0jÏÖ|µˆ=þ” yz®ZþæV`DÉ.YEÿ—ç¥ýâ5 4q¼%2ÔŸŽëèåhú<_´È?ÙÇP·ßr[wõêzG¹ -Ï'×9å¯Ò3¦^q}Ú~GMýÎ+=ا·³b¾ÙשøxiûáI±äÝÛÍ—•Ae³© a½º`ã&MA~©¾_Ëqk¿«Jþõ“RîÉóaùá©Þ") -ÍPîý—µÔÞß¼%‰µú’Ð, ¶ááJþÈ·RÙù§qÜÙ—aÜÕg±²#i{>¬•ìýÅ|åJïúÞ?õM(}ñ§Pß3J'·{t¦ÏYKêì< qÌX°H‚¸JçܳÜî(|¿W*T&û½Wa-â¸KÿôKýËÇb?ì¼7¬tòD+– €ÄÀ£o½¤O®å'=ìËxÚÞþöx ýý‡BÁ¨’÷ÙýýBߊ –þŸ+ç•}¯– -NÏ~þ›ýÅ×,õÙ»@É¡¿ySimFâ d5ß@ ¢±jD' ô÷ z-™Îǫؽ¿(.²:hð!£øêffðÈÕRÅ™ñü±¯eüð 5ø­Õ~s¹¸jÿ ß”f]¸ßf¬®GÖþñ€±4™8MçŠø&¢Õ‰ƹ}¦œïý’ÁõåzX£óù äü^+yá}e°ÿÁqô‹ÈÕðö F^®b( -F¬“¥VØ;›o½¹†«>aà'BöÓ§ Ç™æh5<æNA.öˆj¿h'=ÿpsú'n½´„N©š@öŸ¿ó#{¢crµ˜° MÐ’å{^¹ó½¯=Øú³K™¾×®²ýO9öîëMÒ«O“©Ýs£êÏÛŠüìC_þÁ~(‚½8ù÷êwPoÎö?ª\'l{½X8ðÓJÁQ¥{àÐokÓ: V¯vB‹¬¦ ¥ææHâå‰Bã“´#7çN -Ï)Ÿ}bG~rg®¼Œ–Žæˆ?ÿ‹H|ä/>âýu—T-É©2¤êvϦ==šg¾ <ô»»¸êÜlzóÀdIX®¦8,UC¬Aú^ö¼Ÿºtñauæ+j¹±XT}r– ÿ㊀®w‹} -Ž›¸ÈòU;)Ðl›§Ì_‡f8‡ »Ðzçm÷M=+m=/(×z^Ä£Øï÷}7Û£ø€‘gJ³v@á.“ÀíCÓ«û,…g -úØ †¾sמKeõM¦SÛŒ¸ÌîÉLî^K&kŸ_¥çåêÜW¯E"¯DB$“‡¨J!ªLQ‡¹¸íòqû¥¥â—ìè¶Ï—Iv\XNí~ëÊ}ÉÑ_~Í“}•[;§³…=–ôÐOùé{‚FF Ãn_¨ºy=_~ñÞ&ñÞîÐWAe7 R·èøNòØzÖlmX™Ú‚Uš¤g…ŒÆãzס6‹È9ÿòD÷§J7Ÿï”,ýÓ÷Eôû¿æ‹.(ÙÀ}Jga^‡qàz|-SKõ$õ§çÑ%½–ب3ñ¥º )èïäŽ<–Û£€uîˆgcH¯ÑŽ+ÚcœÑ0™ˆ‘þy öLq§Õ>²œª=nÃTžÃn92G:ðÌ'lð®œkqä²·M‚ ¦úÀºÿ• Óy5]wz¡d÷÷®òá¯Ùw÷ªOoUîÿWgIQ¯¹¸sduú#ôôzEð‡+Mܯ+Å¿)3EU¦âxïýJIyS®ôNžè$Ež²õ*þ°OÞlæo½JcNýÂIRZ ÜÖy#¡(‘Š/l¨ªS6>b9Z9k>Z;o -pqFÁ²0µðÔ<ÃÈ”<£Ð¤ü‰Š¬ÚÉt÷W«`Ÿ/òQ0uük5ü£§hÏëµ’ò~KªjØš9ðJûj%û~ñµ½\&éøÞžÞ÷¯~¢ÖÑ%ôænS*>[‹Éjœ$î{¼ŠÙ÷Áþà!ê].ª¿0WÐÿf…ð¸ÒCxDé0ü›ƒß¾]á·WiçqIéèù^àó¥Ìó£Òßç‘ÒÏïšÒ7àœÒ7𺒜Uúúm;m埯–¨š æãí‰æMC.ööÈG€èð4M69_44#|QhŠ:ø 6§ÏœÂ×–®Ø9èTôÏ–çV™² EºlFë$IïƒUTÏó5LÙ.+&¿ÃŒ)h1“`_(?{;6ôæ™2úÌ·2Iù¡â¬í†téÑ™²SÏÃåwnÁ>HŵkYÌ¡÷bqï3¦lß fSƒ¡¤úKáe¥ˆúøS.äEÞ§•«=rN¸'îÑöL;6Á#e®÷QårÑ÷ÊtØË'º£ (4ñò BîNþøœÜ‘«Ã:äâ° -I³´Ø½/øáÇBzà©“$)_[(V èIÑL’j@z÷ÄÀcJOqÍéÙ²$UQX–†$8]]HoPuvtÆóoZ‡ó:µr¢dð[g˜7\ -hf€n1š¨®H­6–Õ~±Œïõ¢ûFœ$ýwײ;Ÿ{„âà]¹xø+]¾ÇŠÉkÌ– Lƒ^/èç¶î´}ž°¯ÎäÄ?êLz²»;ôúÅ"éîwlõ— ˜­gæR»>83'_ñ⾫%ûô¤¿ñ§kÏ¡sꌩüöÉ¢œîIŠCÓõ׿2vy+ÒU=¨x_Y–š€NUõ†«HR[ Eëô× ãŒÐ$\7-2œŠ\W¹!WÇÕÈßW@tˆ’`J£F¸8I[&J#b5h|®ÀQÄ—éƒî–<¹PŸOÊÑ…žanðžŸüøh˜ìÐsUa¡$«Û„jº²D4øÞ‰.=8X]BY¬*…mUzüe¨ìðs9½ëw¸ŽTÃÅELQ¿%¹ÝˆÝ2<´©ïÇÿâxøg÷À#¿ºÿ´V\up†¨d¿¥8»s’$¡LÆÅøcB)‚Þ|lë&tÅñÙÔ¦*}°{ªìÐ è+¯ß¬é‹ó0I¤ijLA¿ÝñÈ‘í|æºÙ gDô„?¥%ûÞ{@oÓ9ºŠÚõÄ™|æ -ýâ4ö)LA·›¾ÝˆN¯5 77KšqœßóÁIÜ}oeàÞ÷N’£ï…Ôù× -æË×rúÜÛ`îâ×QÔñ÷bÑÁß<èÓ異}u¡âJuü¹ap’ôoÑ{~ô–Ÿ~¸!èö•BÅ‘\æì[¹ðØ¿yˆ?Wj®ÌôG¡¦3Ñ|½iø£òðc‘(z³¦xÃfÍÀ°$u*"]S¬Ø¤îäâŽÖbÿ¹v…#á±Q)UúLb¾Ž($RbŸ¦-K-7$̨èL-.,AKÓ­~è±Pv豌9üm UÖaAgÔŠ:2»^{‚®!“^mÀçl7eºÊO]‹ »zº0úîg ÁgFR˜]ï=¡+:8ƒiºoÏÔË–÷YÑõç3µ‡æâ{#†> IïÓÕ’Æ3¶¢á÷Nе,ìùf¾|¯ïü¸FÔxÅVÔÿó*xÿtFéIBŽSudŽdðƒ3µë£ èfRÕ‡fSŸÍ’4][,êã(Ü÷ë:qZ»¡g@Z6g1²5žìg.B«/EnnnÈÛ/¹yáØ†ócŸ@ù0ÈËC€¼|„H– &Éh0íAð/У Z‹ õÇÒaª”û*B•ðãZ/¬àúžºÑýÏœA³›J,ÐaªöÌd÷> •‚í²ƒÖ\~ûÐÄâ÷=H?”óǞ˘ß ¨ÁïÝ©=?yBOÝqÏ®!_XgFWí²ï¸fÇ|ÈŸ~.>ð7OQÍ9IÍÈaß[ûÀ¾wŽâ²}Ó„á9B>IÕG®" MW§·ë‹6dk:,±G‹¦ÎF«–» Ïu~ØoŠ0"A^¶e¯¼ûš‡´íÖZà®èŠ$ -(`áaæ7˜A¯?è¾ð•;gC)ŽS™Ü&S¦¸ËRÒýt½ÿ£/5ü½]÷…-»¹Ã”ÁЋgÓª IO^nû’ß4~µ„è -V›K5ŸYL7œ^È” O§+Îïzµ–:ü]søÚù“+µåˆ5èeˆÉjf½ª(8SŠ©Ð nýsb±hꉃ35@gôéõ…ãÙÜs¶â˜ Õú`Øhþâ¼b*“\=NªÐ§ãòµ©Øìñ É–°–ìxì@zë>·•ôÜt€ÞJÿ‚äÇï„óÇËgGø ×Ó‡¿ ”´ÝXÆâØ/Ùöù\èM„þ5æÂ×a¢áŸÅ¹Ý¦â”†‰’¢ ñà/Nâ¡÷.ï`ÛtïùÉ´À$Qɰ¦!…«–ö‘e¢Þöt^ÿ”Àà u—Õ¾hõä¶Ê Û¥ˆi$–…©J"pm™X¨K'fi‹¢’ÕAI4^ÂÓ4èŒFc®êÔÐô]WEZƒ‰,*c|PT¦–” W•Geh) -ûg°#«@ë ´1èÜ6SºbÏ ªÿñZ¦÷¾»ç¹ô¹rÕ{m@Oîâ,Ýw_Ìz*ïyë,Úÿ£ }ò#½ü$^zæézvßkxÏc'vË 5›ß8™ª;2Orà£7é]>ùF&9ü;®;î/§5Pi†Tßûµ’wëèækv’Ê#³è¼.3qùÑ’ô6#gçd¿Ðy¬ñCÀñÖ—XŒ?âØ#VD¨ÍÒÝD£“‰Mš©Ä.±ßdÛ2ƒ_{Rý#kø´’‰\b–_ÒfI7ž^Än?µnÂoè{wñîo×qíæÌæ:c®ôàL`mÐYõÆlV‹)ÄI6¿ÍŒhêlÆõ`:ÎÅ‹wMcóÚ̈–dfã$:!K‹N(Ö!z;•ŸÛ©Û ¨¨ìq 5Ï>|Ш¯ÏÒ„>iÐÛã*Ïå«¿XH'ëRá*â öLÅépyÝæ0_ÄÃ߻м÷¤v¿q¡?¸KzŸ­á¶œ Úî SÀ ¼t5Ð¢ÛÆ4¬©¡WžÜà öðs {ò…œùü9'ÞýÞ™Ùöù|Ѓ¸!iûjuè?uàoIóõ¥TnŸ¬«I2ZŒèjì3ûž­‚ê¼çýã çÚ‘bžk¡qjÔæíF°6 鹆nººŒŠ*ïãÉã:ÈùùòˆK©œÈm˜Ú”\ñÀ4|-M¸ôFc¸ÆâØœñâ Mꢰx5`vУŽÀêM iõÐ<®î‹¥ ­zŸD㺠h-m+Ä——‰ûŸ¬ÆóÑ‘i9¹„m¿´’îYÅï¼ç#z æny2;ï¸3{¾ó¢~Àú:ˆ¿{/Kñüz•âÁ•迹x6ƒ;þX ->—Ém™Œç®³ï­ôâÒûó癹{Òh­ý:$‰«Òez¿ua¿õ}1ª oФâØLIj«!ä¢.Àl B oCt#ËöÌ&<ƈœq|RõDÂzØÜdšòÀUÄ:ÅñkQüûbÐ…aB£ð÷Ë&‚&:½÷x÷[gÐ6£ÚÚÃø‚0 ˜X\W&•ë3=æL޳¸¾`±¯`²›L¸ÌmÆLv³ U€ë£ÔmLêvCfS_¤K'•êÑ8¸!„*‹We3ê¡¿•xïL ¼t®¨g*aÕâ:§ýš=ðÅ€\^`3Æ›Z24\˜ý_ûñ'žÈdGɹýÄP#€f4¬ ¡ª}6lyh=ÑMç—‚ö °Ah\'Ñü©ážâ¾ç«`΀†ü™ä|]®¨Óòj×7¶ô€5pwq-50€ØŠÝ3ÀFACƒŠÏÕ -ÉÁ'¨‚æ»dCš¦$&o<]8<Ïm'nË‘9Â0ä¾Öùòˆ -KÕà‹wLqÐbâ t€ú„Lb¹ž82UÃÓ—Cþl´ -¾– =š®tH²:hɰD?{·5ÑR[†fó³øêCó‰VJå¡9TóÙ%„)²ó•§lß*ì³KÑ‘'Τ„¹Á <ö&zx¬¹£OÙåG‰ò—7·„¼¼X½r U";x…¾|à1Hš¾X(Á5ˆdÇ {qÿwk$Õ_Îm(ïê,D«ç¯DÞ¸&M'7“Jtý€G,OP†¦¨û -塧 ClX†&hO…·_ð ê¸èF´ÓbŠu@+ -¸% ¡ÏfÔÓRÇAÜ–v[zôF Wr1èÒ¦Õ~~søƒˆ9ò“X¸ë'G¦ô°5hØ3Õ8§løb1›Zg(‹P\-Ûo qêjqh¼:hûS·èF µ©v¢8>ûÌ"6ûº´JCô&3Û'K¢Ò4üýq ”pt’ c Ûp¬`í‘-!‡Æ§À1àÒŠ&ð›+Œ@—Î 8¨ ÅÍWì›zu8†9idíšZwÀ-"šQ©5Æ cZ’þGk/@X°ÀSm<· ò.îÈs2tr¡®$8Z -Žã6‚Æ2Ž•’£+Ù´Vc4N5ž‘‰Pa#3ÇA asÛÍèÔŠ  8‡Ǒë̳Àà ªDg£¨Ïbä(BÑ¡IÀ/ÂuŠ Ÿ_oL,ˆçÀa¥ã²µ`LÈǨâAEž¥Élª1`¢²Æ‰¹¢SÄV~nƒ)W±k&®Û×n"»óÓ{Û‰k8±„hÞmû̘Àî“í½/ ýò¦ˆ3_díUmÈÆóË`ŽJÚ/ØA,ç¿|Ê_}ž}zPÃŽ+‚}Ù5&­ÇÇ &¹f¬UÑYm&P#øIÂTœVû!‡9+‘û:$ -O×ËÕ¼qíêê%Ĺ4Î!¥Ñ„¿-”„¨€&7èOƒ~)hÿÓa)b:J•ݨÁgÔ3Uæ€Ý&ºùúrùþ¼|ï3†¯ùlÑ.,éœFï}åËŸ|DŸþ xHéAo9:‹Äà“eµO¦Ö§hø E¸³ÐW 8QT–¦§·_$œ2œ°Ùu8¦çi›“ŽˆU]L«ÄöšP1˜Ðu>ÛXjÉD6Ï¥¼sà€v‘tÛa[¢ËŒsh64QƒèUÕ[$«9h º\À¬b£4A§Žm¿âÀ×ìŸú†c|Ã<]Yò–‰Àë¾ÝuÝ‘í¿ã -¹h†nv~«9è`J=–*NÝÝ =ø¥;®­„9 l -_Kংf*“Ù`ÌÄ•éHÂ7i+ƒKm ŒM°1˜—B.T…Ú¡IXB%½VÌÆ2}Q0ÎO°¿í_×z$–§ÕÖ»¬hÈšðfŠÛ-€ûD˜®pþ¸n­t`u‰qŒÞ³që&½Áˆ0 -º-eålˆž¬s6_Ä÷zÈvßJ{îy°M§—‚]òø÷Ì!ž3mW²=7¡”¾ úŸ¬ãr:ðuj0¦Œ¤ë±µçGМw?s · Mçó:Íá½y»yàùÄ"&¦T‡ÚP (W¥"34©X¸iÞ×<®È~örä`»¹;ƒ.g¨Š0$VN«7d¶îŸÉ¤Ö€N>èSaÿ -ûQ æ¶×{×´˜‰oJÎÑ•tßr$ú?gÞ†0'R/9Æ$Vé㹡ê‹k/ÿ@ ÒÏ]%炟ôô” //Þƒ´ZcàNŽ0™!ª wHɘU-o¢­Ë%¦kQ!›4ˆ¦<ö‡\çåÕò®ó.üöÏ]3‘) ƶ^u`»¯¯Ý/.·Ö„äZm—WÒ½7V‡A^Po.+é™yÕá uHw\ví¹'¢¿õd6–ëKBcÕ ç¼lÇ é¶¡ùÀdßú0Co}I¬xêL´˜ÊöÎd£Ë´Ù˜m¾¾‚ïþÆïé#ï¿'¸#’î¼ë ú‰x./”uL•ç×M‘Ö[Êö^wá»F\±mÚ“œ ç6LÙ®é8ÖÍ%zzñúÀĤ»¯aßûrCoýaÝÖIAš)ë›Fâ~2öÓ[ö΂õ&oxª$~‹Ú`H%VëQë35lˆŠó7´zÕ:÷„¨(`¹ƒÓóÄ t|É5Âu­PÄ":"N²ú³ö„¶©Ú°iñ<‡k!õc[®¬äó[¦€Ž<—R¢OÖ;‹w༫@_š©?ŸJôú½0GßÒ¢½?º2YÛA“Q Ý€cÛçÙT=tÒÙ-‡ç€ov"èÒs‘ñA¹ÍŠün+E~‹%Ô`t(øñ _?$á‚U@â&èm7è ÓIDrËÐ,ië…U\ûõÕÀeÍQ€íWœr½Ö ¥)î:¿œ;ô„’ Þò Å­ˆQ#L<.ÁC7YéÀìW™‡nܾBvÛñùtj±hø³)ÅúÀ:†lBžäæ°öÀï´Ígˆ' 3Æ” Og7÷O‘DnÖÆŽA—îûΙm¹ï€mÈ -j?>«Ûœh× nB4Æij› \ ¢Å]y`áaƒØùÌ“~" ÚõHÌõ}ãÎâMØY8fÎPvû`gIäá„%ûv–dø{W¨áþV€Er¥1vV)a¶MJž°)žèÒLýg°½?ÙY²ÎGn|Ï37bÇxŽ‹Ø8U ¶-`ÍÃsdÀjØ\; òiiQï4xO\Tž‘=øòòŽûn|ï àÐQðüXU1®Bø-À ¯Ø3| ÑA¬žÏ5ž¶“vßu]]®ÿ…'h<2]OÖá˜Gtç©úÿ¤;oþïºóßzÈ= »|._¶û¡€­90—¬ç¡d÷4:µÞ¬+Ö[À´œ_kᢈMê uÌã¼⺼ÿ¡Æö[AÎIxÅÀÁ&¢,RU, '¹Ñæ^Ÿ¤ \$«txЦ4ÛMz­1hŸKw?ó'ì¬R|mÿdgU; çw‰z²ÂV ÐŒ•gá¸÷;‹-Õá<ØßM‚h.\••㿪ƅÅi€Ö2«À¶¹ìµÚðñp#k")e¨è êÀgMo¢{Ýrv9ÑâÎŽÓðJ(Ÿ¼º ìº)²­C6|ãÅ•hqWÍþ•l÷=äÈp/‹ÉÆ9S|‰=¦ÅMøC£ŽDg˜Ï s ï»ö-hÖÂ~4ÂïÛ¬5¶œIŠ˜|]`GɲuÆØY –잇¾°>È¥;K„à™¤NÜw^Ä!Y\ºöì¬ÉÀÎ"z¥²³"²Ç+rz¦JëÎØ)ІgËp<#:ü -µ ·+«c -a(fUÇR^Ðd Zúòlì ñ¸J£‹uˆ}×]ÏÇñpÂØó ÆžŸÓg šÕ`ßl¶ÕôrùÖÙAÝ#>!;ÿî¿ëÎÓêÎï}*ú?uç¹€î¼â$ì½x!…˜ MYÎ iÁÀ4ITº&¬IH6lÇmª5„ܬ*TE@«H€£V¼×š¯¿µò\>«w -Ä?`ûÑá›5ÅL°ŠH$EØNÔ ‡ucÉÂbO+5å·YÊÓêÆxm0ç·™Çô?q.¬/ŠqÞlàœ |%ÈÏÝ‹°³ÄœLEÂü;;k:¬AL(P€»Ç—HUˆOòˆÌñò¨,-yt†–4bÓ8>2s<øh`q>u^ãYA›%øO6!S â=á]àk˵ž³ÆѧßTiy« çúØÌ“5²—n;h+­:00ÛJ;¦1»îzÀÞX+-n.µÖÁ¯ |3®ë®3䤰(Î×–ÅæéÀ¾ÂÆ*éŸë-„ý›×oÉlÚ: -KP','3IŒü“Õs×…ï¿çk)²³ ÞJ7m7{泪Wì,à%Cmö쬢1v–×ûÁ±ê_©µ“øðTM˜» á/ÛXc9ø\yQÛTÂ3ÛÜd¦ÈÙn†}àdˆ|Xæ8ÂÞÂÏJÛfϽõ|>Ôñ²Òž ¹M˜}k4]pw_p *ß;Oš]cºÏÀ{&,Ø-g3»Þyðƒß @GرÀÆ#ÏDZÖ˜ö/ì¤[wÍã®'«+ø°÷¼ü) øU± ¹H¨a=;@,CÀÄæ°Ï`ë..\’O(× † ?ùˆ£ˆR“gU™(JvL:Ôå„m -q§ü€ ¬lùþY a{ - f¥ö}çÍ5œ[¼y`gÀ^I.HØY†C °³°ƒ"ì,oü÷ðØïòMUF²Ô¢‰A±:ÁÑÅzÀhäÃ5Ùð i<ŽŸÀîÂ>™¯˜ D`¨‘µsàšuŽ®å:¯¯¾«4½ÑD‘ßgŒ -¾÷–;äùpŸr*Ðæ&|­]3˜ÞQgˆ-„‘PŽóŽ‚\:>Gàrô߯ùÖˆ‹"·ÉB“¯œÑh”ëúÊAùàm‰bï}©t÷s! ÚÉwì ;‹ðÛ÷Φ:.vÛ~Ó‘°³rÛ¥æ sQ– Êåï²­n¦޺‡°³äÀOvVÑ;Kþ쬄?ÙY©ã˜ h5ŠÅµ¥ çíó;>‡%è{r`ÉÓÊñül4¶y>®;ø(üüà j®\*È÷ž_}l>ySç%c:Ç»gÊðµ”Æåë>Yô¦qÀü–f·™ÑÍ—–±Ã¯}%=OVÿ -ŽRƒýå4~@­FꄸMãé05?o)Ѹ&È¿ ¤XªÊo®1†uDˆ?P¿ÁëÂp§©pœÿä´šq5ŸÍ^°¹}=$È×[‚ ßf£Ó°?®7“Uî±–/É+qÜæÁŸlÁ>×2|FaþÁ~+jçSg~×3?ÂÎôØ -ñ¿³³Òÿ`gmÒRvÖþ…ÒºÓv²”ò‰bIˆ -¼wàmýRyVÃdYíÞA%½3ƒRŠßšÔãYÍ“‰{ÇUGÂ+Àq¸4DËx„MÞ8™ß¼ç^Ã3!²×Vó=£îL×µµtûùÀ€'ka°?‡Ô2=Vp^\ÃKAKö=Ê*Ž..©l×ý¾é‹åAi¥FlX¬ºbC–6®×,¸¶ë«!ãp-;Æ—cg1„u-¿ó•¯tèY ìA†ú€°0 téÈÜq¢¨t *ºhüŸì,X_æá+mé%«9`++ÜnNâ{a‡·}ß|i×vòŠÃ €])MÌÕ…½b0ÇaÝD^ÐmÅ6ŸX:ÆçøÒŽpcÊ:­àw!vHÇUsl±|ë¡y²¼ífà‹¥ðüÐhuàoçžk?mÏv?p‚õ5rÏX‚uØ÷6M–¥Ô†sl!aÝ+ -»¬øŠ>k¸Á@írð×”-ë³bc²´Äl„ª$(\b'ÉAÓ?³ÆØ×ƒE¢P6l³¦<®\ê[yÖöÉÀ<ŸÌm;4_ÖÿÀŸè ýŠõ9ãÁçsÉåú )y‚šPª"„=?8ö@.qLžÛ5•ÄH×gÖºHŠkU`àÀúæS¸ÆpŒC…c(ä©õ§ì€ýya¢ƒçà ׄ}'Àû‚ `ÃõFä!lÓ±Å|óeÈá¾ -°ã‹œ¶þÄ"b›À–É&±h6ßyË ì“ëí÷ëdý÷}CïðöŸÀ¥ø?1R•p Kz¦ñË'À=}&!GîK1 _.¡Û®¯v–|ø1#Ùù ØYì¶ýs¡çƒ+Ý3ƒËë³-k†¬9Ÿ™KØYÀ -õ¬*lŸåýøœðù;«xŒÅ7¾œm¿°bYoÅ1_ž×nIrMì÷Ùù0ÓzÚŽ¯Ãç]Þ;/í›NX󥃳d§–s­çW®-ÜsI)3Päáú~C6\÷ˆ3ß{ÇîYCïÀ¯U{l>ðì€ó¼'Y剅òÌ63&2Nƒ¯Ý?Ö4dûîÑ‘µ§NT祄ï„k,RkT]Àw\[Ë·\v„pPe1Úò´Jc®ç¦kPßm!aÉl®3\€ÆõP ×ëlÛŒÃÖGë$#œÓlmyn»°» æãó»-¹Á—îž=&d©hÈš{…õË„\m>)_ò0€Á¶$­>8îgÆ{|¡žNò}ÈÁ¤e‡ç°­×aMDZÚ?˜ß¿Yìã€-×êQâ‹Z-€YMú\ê//'¼ ÌjÂ@•gTM" f<6‡òõ8nã ò}±¼¨´×ŠÅמÔFÀÃÍÄç‰íô¦»·íÈXÓ~$“U°}w\¸ xu‰ˆGpÿŠ0jò¦ÆpÞ ‹+Ö%ë ÿÀÎbÏ.#u[a»_wb äã’®»P¿K"35%8ÇgÓ;L€•&-ÿƒÅ‰ë><§q²³Jº§Ûˆƒ9Õv†0ÖeÅ»¬Ç^·o*Ø©C]½gWwÄ–m?gmÌkÄh6:W‹’'©Gî¡KËÎ!|r¯˜TÓ€³kÛÐKÆ×µƒ{V„yk˜`å'æÉJöε¼ Ç -ößpMçÆrK2gË«>³»'c ëMÀã*ê˜ -k×|ÿ}ì¿rÉz|t–š¬!M«ŸûzØ}/äI¥» ØöÑU„Ùk„;}l1Ûuc ×yc­lËž9„iÌ[œó‘œµúà\Ø_>@ZÐj ,¶ùô2z×SWªýÊr¸¿ ÷›I¯cl‰‰IUû矇\JšQb@ò”œæ)òâ.+rOûwºýÜrªùä"¸>ÀY‡z^,S~aªà¸B|^Yìa™C¸ApÞ8$1Ï{¶f¿ ‹ós\·,ƒ|BÄaÿ„óP&*{¼oØ{Æî~æ @Ö­wÜ^Í6_sâ[9`Íö%ì½Þì qÖ® îïºê >•Ü›‰Pƒºb,¼>‘ {2`-8ElðF ±(hŒ‰˜Õ2˜*pNpoŒ‰Ü îïãsZ)â7b»€{ÌéÛŒÆxæŸ/”Ví› k¨prFir‘>abá 9¼7yÙÐiã™°>#-Ãö‡ßŸ¬üÈ\.£aì‰`ãrµ¥À±Ä¯þ+§s -ÄI)°ìrt`ý’oør90?X[À†Ëj u6¹œ‹ÇdÀË«;d ùáV³½t§5®QŸîƒ/',ž®ëŽÀ.‚çzjUl·‚î~º–Þqwøªë -ÉøòÁ™TX††D¾Q j àVAÎL86k;Ž3M¦<Î?yØoU±g–¬°ÉœÜ+k:¾„í¾¾–k:o÷é™°M·A…ZcYÉN+ªãŠ=¼>¹_“ƒí!¿ËæW:`EoßoCu_s¤Ú/¯ Z/ÚA/*›­|L6.CKºeç,‡ƒ=$…{fðp +Ô‘e´˜«P -,mœrÕ;±=0l×\ºpï ü 𦤉™:ìÆr}iZµ_Ô}T—YçÃ5©7ðóà_Zà+Bb -A µ Ô»pÝ!O‚û­¶Y.>S‹Ø60¦ñ5“uO…½<||¶¶ âyãÉå¯O êAس%+°†½0¯à}Àýbiz« ÔÎà¿!$ÜôM•†dϰàÓ·ã8fLâ<ð^±Oá2M€éLx°_1·ƒ0»eûçÖh7WVñÁŸ/!œWX3Áy(Ìqnû‰1ìSìãç -X±°ÎŽç˜4 _»"lg¸>¼l×@˘Æ/—À8BNÈt|¹‚¯Å¯Ï“ðÄ€ -üaXçuòôrr¯çDÀg“î|è}tL:ηa/m¾n[‡g‹ŽðÊà>]V¥1ÔIÀ®ƒ¹M®ø‡mGç“ýÀ•ûfÂ~Wà&ƒö Âü"9¾¶à¯äù]SI\ª>lK˜àøœ¹­=3ˆV춦·šOWŸ˜Ë¦7C>GÎ ö½tÞp„ùD[Q‰À  }½VòÙ7ÜÐ7þÜàs_ºvÿ&*MúC ÿÃc7 8=8Ì%ó؃ åúä}“y}|‘òÓñéøt|:>ŸŽOǧãÓñéøt|:>ŸŽOǧãÓñéøt|:>ŸŽOǧãÓñéøt|:>ŸŽOǧãÓñéøt|:>ŸŽOǧãÿçcÖ,÷øp·”=ÖKo–³÷ò üµ(dcJD²^€Þ¬ EÎÉ)nÑa)Ñ ñ!ÉVŽð-Ößòv³r´²ñ ɈHZd4×j••³÷’ÅAø ø§s­à_]¼p©Õ"QDH¬•ÍØ‹Zá[ ’££¢ãñ7Åa!±c¿º -?ô(x +á-¸$oÚ¸^’‚Ÿ?öM—üœÿôm*>>$."ÜŠ|× -Ûjù\½ÅVÎøÁ¦Á'z›ð‡%V‹É?6áƒ?Ù€¿•fµd±•¿•T¾Ø*~_¤gko¿d‰•½þ/±Â~ñÂ+Ǿöû‡¯WŽ}ôûó÷ÿ÷¯Ç~?þ?þ<þ4vi=¢c#Ç>%góÇu¶™‹ßë©·È-"5:,ÂÕŸóµbô¤V¶äú‘7ŸüÃ{pX¹pÙb{{+¹ÕüõŠ¥pvëÿÉgÀOÿxÖVZÙáw°d%¹RvVäôfÍ"ïlÃÑÊnÉŠöz¬·¶—7ƒÜ]ý‘·?ƒüÅá*B&Jþ|¨ª€ -Q  SñDªxùòÈÃM„||¥H$Y¯"ŽÈÓ„¾IIdަ$2[Sžª!”%©º; кÕ^ÈÛƒCtŒJ€"I5@£êáÃ"7ç@äå!D ©&”¯WElÔ IT£â -µ%Jµ™¾¢ ä/E #%KQ—D§«û‘¿í(ǯ!Fîë¼ñG -ä¢T¡ö¼ûù“ß ä¢UèÈ MÐF‘gVO $E~ÇTè͇ÞY¢û[ =Ô¤Wfc•ô«B¿1ìe†þNyqû4è]þJ:4I] -ýÖ ¡›¥ Z³¤g³öÈbèó„ž4>.G›hZàÒ ™ZÒDÐ<©7}*¢u¿=MëÓÇó‘5ñ%úòdü÷7U‚Æ “˜£C´"25ÅУL+T(i˜*èVž¤=ŠÐ‡ÌE$k‚ö¶ˆâ«Æ%o3€þ:z“&•L4i@Ó‹‹ÉÖ‚þKÐdK‚UÄ|¨ - ýý1øü2µeÙµ¦²Šá¹òü¾iÐÛ(‹VaÂ6i€V9÷òݳäз»¿ô™ÂõLÞj@4‘r»,¥E»§s¹S˜MeúlJ-þ~—QgÌDå”Ç«,—˜§K48rZÍȾr¢Sj@® ô"ä·NÞ(ØOö¿ƒöþ;tPŒÍ«‚Þ¢P¥ -ºÜ ë,ŒTŠBT|…2Nbèuàb‰>¤¿ŸùÁK‚ U,S“àó¡Ãð5Å_ƒ¶¦»›‚~UЉe¢Kµ©èrmIhºh @U‚$Š j ¥é FÐÍn¬5 KRóñç‘‹§ùC¿lH†&_3KÙfÀÆ•èJØU`>*RÔ¼ñïy»‚Öo° -hÁû#qPª:#OTg"Ó5eòuäqyºÒMeƒrëÀæ¦I³êL`ÿºŸ/~ªÒôíÆ²œæò‚^+ÐF§UƒÞ#ÑÇʨ0ûábÓ´èè4MÙæŽ)øúšKAç"·ÕBÖtÎAZwÊNž[c¿ÃaÛáâÓµ Ghu‘¾û1ƒŽi`óA™õfФl=yrºŽ<½Ò4ˆÆÃÆB}Р`B6j€ž!èÊÐAÑjLX¼Ñ™ŒÉÓf“su¡?S‘Ób}Ã|J‘¾42G‹hå7›C—,½Æ˜ÍÑfÖoÔ/ÒÛƒmŸŽŠWg#’4@CBšŽm#µÌzðåûçKkŽ,”§5›ðq¹:lBŽ6Ø9ô‚¾ô–¾¿ŒFÒ7[¬ ¶)ËïFt´š/­äÛGVC_$—;¦=Á$éŠåx,°=^ælÏÐÏ[Ú?´.>[›ô®d–Ê º¦q›Ê'rÒÆ“Þè£ÅãFúû"c5¸ìs.®HGÈG¨z8ù`éD žoòTuŸ¨&ácðX¦¨Sø!â7¨úð(À—câ(âÕˆMDžóa*BJ@¿Þ迲á¹ã Ÿ‡‰+ÓM?x!®ÈD©]f|ÐÍ¥6qQ…Zby²ü й€žfiLèLñÙ½c½Ú _ ü$6&c¼tC‰ŽD–¨&–a?” .ÝP¨#Kß>Iž\e(‹ËÖ‘ÅdhAo«"³Æ„ ƒÞ‰LMè›å²·‘Þ3Ðà€Þ{<>Ú„µÇèý¤WËR* ¡—‘hó¥6N"ã”Ý4™¯9¹z'¡·z[¥øº‚¦ö½Ð"/Ûk#ßvb©|ëÞ¹2¢ ±s¶<zìóu‰Äþs¬ûdì3¡÷ìŠô¹â±bc2ÇC;ØŒ<­ØzaI?3ôªíœ½B¤ßuS™±7ì—å©UF²”rir¾ø9x-¢³cžUCzQIßøÖ]³ä%C³`®ÉJwÎͬ±~ÁAkÒoVÒ7M–×iÚ=ŠÂÝÖäoNBRž.Ÿßa½k¤º¬†z¡Ï$·ÑŒß\7‰è ƒxl®6áÐíâNKè}ãsêL¥› -'ÀüXð« %ï•Và±{„þì3À>AӀÞ9Й»òñ ?M( ‹mÑ‹Fþ~ -$áñó±O¢Ã’5$òHUð?DÇ *}ØøfIÈ5:"Nz©}Ȇ«2›5™è<-ÐÉ…¿ zõ`ctpºôÃÜ‚ž+Ò'•P„ßsÕÎ/¡DWšZmúE ÓÒ”CÐ ôvóD”,VU -}8QÚTp’:è}]U{‰®ö…à#d1™Ú ¹ M.ž¾´KÙ ÙZÐã(+ﱆ>hð`[| ¶O<ž¤*¯Ít~ ?—‹ÊOôÈÒ¶“žAEéîÙ¤÷›,«Ål,/èž&+˜‰óKÐ(’m˜%«:¼|“lË>ðEò´-† ­ÅF&j>0< ·à£7Žƒ^WÙæÊIÒ•|FÝ$Ð!ºf ñ0» úØfC/¤¼ÛôÙBŸ"ž?DKŽè¶á÷öÙ`QpN0— ÏUZudéám8· ú»  ú¦ Ÿ!Ú;y;,áµAzXÙ$è%Ìוæa»ƒþ7°Å-;g‚Ö³¼lÏ,yv·%ôïã¿e -s z¦øÄR}У'=ô å»±TŸÄôŒ&S˜+L<¾ö ›µ¡÷øTìkA‚ -IÄã·žè ƒ¯#ïÆ?úÎáz€žº˜U¨³ÆqaC®6èÕ2A)ê\h¦&è4Æý"%‹V…üz!Agt@ÃôàAr¶ßÄ2]¢+Ó4™M«0€^j -çTDº_® ZVÜÖÃs¤eGlˆŽ\XЇ})é5Ås2ò:ÐtûÝÔjýð"ÐUc#T‰Vö“lp’-ÓùÆçqú‰@l:Éeqy:¤ï”œwƒ ÉÁG¦ãXž‹sÂü6 bÏ 5ƒc~ünZ“ äB QB|Tf«é)Äñr;C¢É’ƒó¸Œ:¢ñ´©d¢,µÂˆè)aÛEâo2¶è3 s(§ÙŒôtƒžUF¹¡¼¨gº¬¨Û -úI_$ž¯0/A·úaÞ€ž‹”èCtN…÷It@ïÛ!èç‘^È‚6Ò÷¶ñï=¯m@‡4­ØÊ#6 ³ Z"Ð×Ág’Mèm,賄¾UÒ‰m ´(@‹4\Æ4Ò°/Ç×Û—ø~Дe“‹õc£lÈ4] ¿r ð{|b¡ô+HÆ6›ZmH4á{)EzÔ†œñLö}  =ú…xŽaLz÷Aƒ,¡X4õhìÿ˜˜ãàÚÀ| ¾¦Šx/p|ý_¬½\UÛº6>»Ì-vw' Ò°Öšµ -ÅÀ•îîî;À•‘îFBÊÞá>çÌÿxîsÏwïýßïÜßïƒßÜÀZl™sŽw¼ïó¼cÌ箞ÙåqÃÏ”¢sxºÏ-Ä 7âù†Þƒ\ØFè÷x=ónülÖ*öÏ[Ÿ‡<ë5™µ‰›Íz?ZÍÄ5ìcCÞneOLÖãAž6“Y‡Ê‰ï®†än€gÍñ½sÏXÏóƒ.ÖN?ËÓ_Z¢qµDõ ÍG±mô\©ëÕ¥« ï0FÇeAS ã¥+ ‘¿E„rĦtb/{ÏEü,'GÀAø™V4Þ# YŸÏ†çpáž ùuXžqšÏ³bmÈQ0^ç|¦Â½AÎÃúåW&Ãà3g”³ &#,| -î›ÀÐ\4!±-âéì »± Ñ‡=†@WÆq\74F€Ó{y<àO±× à3àÁzé0§0W@\a¤Ñ :Ö’K[‚¶U°èRÏ Ö¿¼6 çZT³Àócˆ{”³‡õý²–²Áy„XÛÙ} -Ö€|úr+“Ñ}ˆÍi7 ®¶aQ¬cî9ð5Ö¥=ï: <ð½G±q ¸ r'ÔkðºnAŸB¿¹úB^“©ã6c0L`:ü"0.°O\€µ«Æíœ£á÷®¯¬ïzÁc -}Æy<Ì5ˆMœcÑ\߇¯¨.h¨i0î#«QÀŸÁ§vxþ\¾ Q-`MeX3§ñ·Y”S ÿ‚3¢ü!]Ð¥°Š’Csi hýÑÇíÇ’ˆW N£Ï7$ „&#°N%zrsÅîQÛÑ E |´ãIÑ9YÐúM@ÊÔz4ÌCÑù‘xŽ¡ }KȈïÄõ×y÷IàÁ}ÀÈÀ;P­þ0ÎU mþrÖMÍàŒˆã‚¦}½]‡¹3À'oýªM…UlŸ˜ÇÀãôøRì‹ -þ. #G=ZË\¸2juýmÐ\Ü -ñ蜢^VbTo¡÷$uŠ_Xò7h#¾>Flðè·îÍj”¡–ã -Z1 ©‹ùºçtоÅÞ>×Wbþë¿@ìš°p,ô Å6rëÐaFû9/{¥-¡’*÷a/¥K¾Ó Ÿ‰õ$ö©@ç&µ‰ÖäE÷F|1Z´q‡ÁóæŒ,è Q¾…™qx˜/¢c6ã`MHâ•þ“¯ÛM€~ î¢\Æzf-Á=BànÇ,Ç€¶7Ħúx?=&¨ˆ§éÚ¢MR*ëƒ:hèþå1Áš:Ž¥19?8ð|Ðt¨[»hй‘~kSb‡X tš!º¦,MW¬í ½¸_. X¯ó§–ßd‘5âu@¾ÅºXÃ|}p,87¬ é·@蕽 qçU˜7; ñÖ´š{ Àù ×øÝ\ œ^蟻r"[²ƒ ~µñì1í6•Bü9n=ë@º§-|»8ÆÐ5i1]¼|jŸ{+hó€ÉPÓ w-:ƒ¸·KÎ"¡SŽÔiÌ%QM]4ðO£ƒ¯D5´Øb Yðœ_*q\õQbƒ -xÆ€<þ •Žç5ªkLª]1¯·3‘X;ã[›Xy3ðoKÁÕx{ÿâë€y¤èž_Ç^fhΟ¶u9Q¾†<Ü(rKR»$/DáºSì|ÖóÆ endstream endobj 37 0 obj <>stream -RÖïÁêáü…þ>hóf´ ­4X?Àq#Àø+Ö3¼»æ,Î¥;¡þF@¼\а ÖúGï?Ç¿×ã€+øbîGœvœxû4XxM•žBsàø™Q˜·a‰ðLv£6®—ÁcBBèë‹ S°žcZâ¶ã§€ÓO‰9à1×&ýËcÂÔnì°Næó­÷+D»°ÖÐ#EœzžnY‹±¿‹Îjð6£Êö0¡yÀ~ô”Y߇«É˜šàC5¬Ÿ´úUxp7Âë°f9Jâæ7ʙЛÅÚvà«ll…×ÜÀSD˜Ñ¤A¥¾Wf·Åz´(äðØ€½Ð'ÎÏœõž„ûð=⣗GéñMGhªÒÐó”mê„íð™€}|4wi4çÁ úI°gpxB‚ßp"è1 ×GƒV0p ¼ÆýK„©˜¸ª½"¿'뱟ºgt|Ù2£U™Œ¯ØÅOkÙ8 z—úoëªk` âê|êŸ -`íJWOBh‹p|ÂßÂ^QЗ4½ˆ{3°v±‰y5èk¿8zX"à÷(ß@´÷€‡€ž­Ä;{è°âµòÓý.É•ŒåXÿúrð¬aÝâ‹c1@s <‡ ÿ):‹âÅ¥ä¬çdÜ?ƒÚx{«à¾ý¹á½,ä)ðGAµúÎØGý²ÿtòˆùHØ‚=(λþ‡ÇDJŠ(­Vƒ¶‘ÿËcB ½ ‹cú¶³ßƒÇŒØé_=&܆=&PÃ(n¤Vˆ³Ë=7÷œ“wÄ>hAÿã_÷›KqÜõ™ y¼WÉ”%:¥K™}µ ÷û-=§PW»Âxÿà9°>|¸eá7ò"ø‘R§‰ƒ»µˆûàÉ -½Vþ ð‹‘`è›Áü;€±V-ðWT3¡_>xØÓzÀËÁ<PÍLu8/è_Â}Á:¡m*‚[ýhNmmð˜ÐÓ}qÃpði–OGàÿ i=&4iB[‹"Øãvc¥àåò5îO¿<Ưk˜œ…¿šš‚{%:…êøâžµ›@»ˆóÆa·‰b_íÅy0'ô:Áó+ìéf&êåvÀ™ »c -¹Žz¼yX¿4h6^Gu‹W€uT¬÷–·‰ÍlÔ]ÈÛ°†"µB¹Ü+e©(­ê$³‰/¾Ú©Ggt©‘ñÕ;±Çš'¬Ïåd\ö˜ cËva ÄŸa¿…–®!¡+:+>Kà;}(ì³í¿¼[°Ç„˰DŽø_=&Ìÿò˜°M¥D'e0Þ…5aTçéØò=ltÉ.áNÜ3ð½±òæœ6‘òbÛ+˜”΃ìÕ^M*uPúÒ"×ëK„ö óè¬.5ðoÜ´´/Áþ0t`ïÍsîSñ¾ëÐYÀË¡\ø/x‚þƒšØôòXÉY¯)àkŸ WK‡¿ÛÆ:\Ožöœºðԅ੟<ñ uU=BYEÐP7 ôØ“x=p'\«úµ ‡=,>~F£1Ÿ|¸ö|AŒÒÇ-G³ˆKõ‹SÊÕ™°ÂmbTÛpïÝ:`&^ÿƒ½N ›¦@&×ìcÓ;5°ÇDpîZˆòŸV?=&.Œ•`‰[ëA£_|ÁkôÖøh>Q°÷aM‰}Ì< ì…ÜxìòèµñH Á>5R|)xÖ¶‡=îK!WA¼â<zªÑù»„a;¤Î) -0žÐ/ -È)bϤŠ‘,ˆy²‘¹Ñª'¼Ú¢ã ^U8ׯ•+J²+yÂ䪃lTþvÈ Lvƒ&h:Cïï}TßœUÀ€ÚÝ_ ö˜¨ß/ÌèÑeµëQÙêäÕf%öJÖRX㡎;Œ·Mžt÷—Çß¼WŒxä) øAÞZ/q ™ë;ªeÂà›k…¡Ï¶Š}o¯Á8ðªxoÊ÷0VtBÉ^ab• -›R®B§T(ÁøBï™+Ü k7"ðËö¸µœLhÜC…md®ä.§Ÿ­Å9Êïþ*ð°d|¯/L‡±9¬CÞÿ·Ì¥lLù^6¡Z 8m%¼Öë÷àùXöí¡˜F½Ø)J®;ÄdwhIîÕKn¶ -逧khëyÚ2d:yÎo2¬AðMÌG0F# Pœa@óe1ä5!šßЋ‚õ"=MŠ€ßÃ>-J|¬—z\]†ñÌyßi°_|)D‰*Âà‚-x?¬Ùoéϵ^ðêÿU2¦pþxxLˆ­£qz°çHê³Hr%m™Ä?wìéÆ4É pïú@½¦á»}Ô\à㸇š»<¦à5+¯éЇފ$®FUSºo˜³£úmû;x¦/ƒž=ö«ÄëÐ~Ó¡žl`Î*æzŽðEÍé“r3ð„ÔR×&ÀSïeK-;(ɨÓ^­Õ$“ -vbOHðàŽ(ÙZû }×#À¯ -aèÿûb Îf"ë¢d ⦇‹o4QäÕeð˜_sÆ=máðúDúê|ÐTð^g|ž¯ÆÖ30òÏ\ =/±[üBì1á>ì1!Šz´|$°?ÂþKÄ\R°Ÿâ©X£½Ï&W+³©uª˜Ÿ¤´(Ú øOöøäÍÿ§O^Z·*ìûÑåÑÃZäxŸAâBìk€¿Z뱕J¢Ôfu:¤h܈¼&^=°– -ziPGݪ£ŒŸ¼:+yTs„—óA政ž±J’-}àšÀ—ð:ðù€©8;%.mv:µMâ]áAÍƒÚØ¯”'BõÕyñû R¨#àIjf9ò»äœ?ÞW,r ›õ•aíö–ÁžT… Íì›·F✱Ö„ÿb_7X£„õ4–°W ràðã[¸MÁ½þããD–áˆG__* -~²òöns{ð CüÕ?k?Cì²Ö¾¸¯}iBã!ð»:$ÌN½(Øïcx9XÞÈÂyŠØÖOkêÿô„„±%³ZJ–5*,¶fîµ `JGS@@mÂ| z;à p5øÜÒiªàÛI'7)²á…ÛEÞwW‰<²–`^Xó· “‡sÖ}^ƒý -ñW¼.䞸üÐOâÊv€OuÚmàú*ì%…ê?ì;O#ì»äqc ì?BÖ.BÇÀ³õBûäy€›1­ê¬ßõØÒýÆb🦬"gRöa³ ×{ah›ÈYü£–£`ÍLˆj9à(Qz³–aEè=‘Âc2°pö€DuüÑÀ+ú™¬ÂЇ˜´Þ«†{àà%ôpîS |«B‡°á=ÀS³#ž÷èÂ^FÿÜuàa€÷Áz¬£¾4 -Ö©`}Ö† G{ÄnÉ -x_9øAÀxù u9p}ú¼GÕCà5X÷rpF8ìãæ—ôj%. ľ×WÃþ^ž«àS’·|—E®©Ã×ä’¾ˆ ½·žL«ÙOÆ—í ½o.£­#gÁžˆa#ô3öÊߊ½ˆìCäA‹ÿÛàÏýß»«¨˜—ÛȨüM¸ožTg½'CûVú=X þ⟫ñž>Ø{aîxÝ^F¥÷föë=¬ÀûkÀ p™Wö2Ä6/ Ö߇Œxš‹Û¿à¹ë¨À)wÛFËÃ÷ô‡"|XÔðRŽ’£-®L/pàIàYJžDXÚ9KATºp‡Ð>m>®Íg]'áõxÉ)YŒÃÎØN£zˆõåñ~ 7ÜïÅx+ôR½n­À|# w öBq}àhü½a¯ª³ÀoÀ›Ň80o“È/wŒ-¬YÃZ=ö¢€>&¬_B¿öøBŸß-s1î Áš)ʽx-zXðÿ!œÁ^¾2 çQð\‚µfˆÑà‡±ÿôÓaË=u ö;ƒ|òd«(ôÁ&àqÃýĸ…à+Ïd¿×$ÓZÁRx1p:sÖaœ3Â1ûÀGV5íbÈL|­p=ˆ@ìB~Þ6…ò)™R­}|MNèÜÀO>ÅOØ‹­ØW;ðÁZôÚ*àl°? ün茶ƒdV› -ôB÷« Y·tØg½2¡b—0àå&Ü—Fsöë߯8×ÿæJX+Æ~ï owAn€Ø†ç=`¿ú7Ö -½nâý²°¾ë¼ÐÓ€ý8tdÑV:»WCX·Kx!`erï•„ž"¬]Ã|zÝY)²Kœ‡½^lÂgC¯ÍexÈ>?7‚×þ/‡ÎÄÞÐ(¿‰}®­Âµóøùø}3· ìI|à=ê'œÇÃ^è£ Oï©79;zK|ó²Ð3&Ï8Œ'Y_rð=aS0!›éèŠ0ÀÏ ñz>ʱ€‹ao.ö´ƒõ2» 9ðŠ‚})lpþ¦á{9j*>g؃äÿt=Q¹¼h1ŸG¹âö‰º%/Á¼ð?øˆ N,òÎ[kŠÃý€«KÁcKì›·Ž /ÚŽ1+à0ë0y|à}rÖ`}aT/q^pNúâ… ÉßÞ^¸‰âÝוà7 ->=àqžetø“Íx î·ú2Ü„5!Xw„ž±GÊBŒŸP=£R*öÓ1/¶áu«³ž“Á; ÖùEA÷6@? Íß­Øã>¶h;ö ÏÝy™ŠCy×:T½³P;± -cZð­ÿ!ß;«píÏì:$ÈhVd®d.‚ß…þ¡ ©u/¬IÑÁE›€¿ñ5»„™mºtfï!*±i/Žû ‡à!·J¬ÜƒjÖvÈÃ°ŽŠøñVèy‹<®-…ü5Gìs úpî‚oõõ&}*¡r7í¹{G@¯êä™Q¸Þ'LZ÷*µW‰ -Û÷ò#ìaeBßl¡/GÎdlg³ž×—ЩD-:à·Žûð\pXó< ý׫ -°ÈwŸUq¾±X옾öa/!ðü€=ɃsŽx¶c× -¬ÛÍÅŒî*2 -ý]À¬Ö±r¤eè4Ê>i6í’³Œ(ßB^ÿtˆ¾Ù¯Ë¿þUUûC—zõÍ*øx˜Î`ékŸ´È¬O©ÌAUöv_ü´å˜äUƒ…øuóæQ—˜ÉèUgcÞî1¼’´LzÚvô%ðÞUtÏÀCÍÓÂÀgÙ”féµÊ8»Rt8­’4N-ç‰bK±ß±eÐL©C¾ÇÀ+©ÄڽП½Øû2¨¤Ú½à%„9'ÂölÖ{m&ûƒ“Ö¯Ê$w€u8Àÿç¹´VE_=Ýñš–÷ãµPq¿ó¨õhàƒlhÉv¨¡‡D•íù§*xöC@½ü&!‹7¦ ¿™ -Þýí0¿’3¡Û¿Ø {ß{1mŸèªlQÿ)¸wÒÊrWqUƒðEŸ)ýdPD?‹_4ž’>­?mx¯ÖDšQÇ“ÄרJ’1)-QîÙãJ?]Ë$µ+‰¯¶]m DIj"¿§ë+¹&,–ØÍ1:ï9ÝÐ-s™0 ÖŽó±ÿø‚Â:ÔGæF§ssÀ€Íí`ÙÜ6!û¬ó°èiÃ1a~‡©èz'Ee ªQ‰{ÝJìN{¯ƒaÐ’÷õÈ»_u™› ¨»ƒìÝNš¾×Ãgµ‰D÷[Å’¼º#Fù¥çE«˜ôN5AJý^2½GJsLðë—côÕn5aF»&¬× -³;!6u¥×ê(éÍ*!“Q§F¥¶(AîcÓPþKjQ„5 2í½"™ùá?gè }­_ƒ¾Ù£CÞÔ¦n}Ô¡î|ÔcHÙg}(ô²Ô‹öՇ㢼îâÛèïvP¼F©øaëaöa›˜¾×̓3ÿÁWAîW]òÉgš-øxLPüw#òÅW¡°¼ÝR\^mgôêíE£§oÏHîVK™k­:LÖ 876¬`+Ô\W>¢ò?J„¹½6u@E¹àðõR#6©C…wø´¬‰åHð´„µPÃÂb+éóJsѽ^CanŸT|«S$Én§$×iaZ«¦(«W—ÍìÕd}¯,ÖûÞ -:¢t;ö% +ØøEä…æyHé6Qz§¦(í½Ú«ÂÏþ¢,ˆØÅKÿ¶—ýCQ¿˜#y-œ™àß—ÅõÂno²îËYªõ‹ÓÿÑîÿæ"* :òá~ÄÉŽ›1âÁ†@Qï{?iWcQwEÄñŽüICµºbúõ×ÂޓâÒFé˦s¢»mé:#㼊Ӈ_X?*µ߯•’Y_T‰í»…×»ùÒ¼ºãì­>’Š­Ýý?è ³ÚtQÒ—^­ß®>jx³V -|“NëTe!2ºÔé;mŸ Šþ8J½þf(xùEH}2f*zÌ%åÞ’Îw>¢ê -;æù{cúî=¤A&wì#3>„ùÀÜï¢Ù‡bq^‹1{¿‰e²ÛµÈÌ.aV»žôQÕ1ˆoéÓ -3á6†¾Ýc@_ïÒÞé Åš…Ï:Œ©›_5É»uØ[$•ÛÉ'õPT~¿”.øz”}ÛkÎVtgÞõœeªÞ_`ª»ÎQ/ÅL^µ‰zÑ'¢î¿úÂû­Bº°åÓØf)ìnñ4x&j -´ræ¼:Δjú|‘iì²a^÷¥r>iС¨†ÚFÏ^kš8—#\ -õúU¼ÐÚu¼ëWævI$Å•—Lç_’Ä׫1AÖòo}W'oÓ¼üÌOi~öoÊ‚˜¾íüÄo»EÉCÒ¬6Òø^ÍIiq‰µay‰ËáwÅnFe¶âu§$·[D¢ìNŒU®ö©O£QcÓ4&Ü.¶»º@W·C÷«>YúÍ„îûì$þô.@=2ôÍF:øÕ*²~;uý£¼&zÞdjø²ò¢4¿Â\š[uTr·ÉPú ÆÄðn1ó¨CÌ>y/%Ÿõ°ìË6SQaÓYq~Ãñ“ö¢Ç&äÝï:äÃAƒê/û²ÝT\Ue'ª¯u–¶T{÷”„Ÿ|7ñtûõÄãÝâŽö¿Œ ÖúˆÛª›|xa×c2»Ì9ò^™Sdú;·(óÖ”h ŠÛ£=¹‘':nÅHªƒÄ­þGº_F1MƒÖ¼×°Á%[»2Ù½Z¸æÞo“o üw½4ÌlH’;4Ù„ªýTôÛíÔµêâ—í§ «Ê]%åUŽÂ'ŒY¿„—n ƒŠ×ñ"Þm Ÿ‘’úr·ãïŸ%ëy/í*½¯ó4*¿Øœ˜èQä^˜\ãëY*i+õ¢:.¼pi -IñjôŽkrάqŠÈ®s»Y厮7Ò«Ò7Êÿo¤•wÔåÆ˜èÆ³>¸Óeg™çƒÆ’gM§$/›Ì%ŵ—ÄÏšN°÷ZiöF«èc³/ˆ³f¿v{n͉?×z5Ù¼õZÒéÖ[É’®Z_ºô³¯ìoAÝdõßOê½áôuò95½´žmúW?î½m¿xøCiÔ‘Þü(¦íƒSÚ}†)ë´@øù„8£EŸÉy¯-zP'¾­ê3)_UÅ׺iæþ7ZXÞuQÒ×(ìnód»ß»KêCÄŸ*CèÁ®ÂϾҲP£¾ê¦­Ûžÿüw>ùì=)*¬;%myç%¨ 6xáZ”ìßèz¡5ëê‘îçQ’¾Ÿ£½ÏcŽ÷Ü;Ös+Úº-<&¸Ö=ê^}DI½uhQ“UÈ«f«bôµ Á:¤ Þ:äY]x.šw©Õ.Qé.QÉ•®QžÕþ1ÒO…AzåœP?´lÿ§,¼?(ç –Üï1·ž3*+u3j* 0î, ½i¶dªý*âìøQÇQIqóEqªÉ/¿˜Hêê=ü«üRj#RÛK"„ífäß5ù‰;×¾¨1OúD–fWËæä”Sí·’ŒúJP.,ˆ6ê/ m >Ò›eÓ•˜PïSï–hÞ–•,xÌv5¸œèºïÖàÞèWïq³Æ> Ž»ÕöáÑ8½¬°‹È/uŠ}Vêu·Ì1"¶Ü=òdgN¤èc›¿°³ÅSZ[sEXØqZ\Vo%z×d%®¬µƒ¹Qzŵ_”o¥o´[eH¬sMHlR©{Œ¥_"ÝýÁÙà5Çç5s'£üXá[â^âe߉â+))¤Ê;é$:7jpÈIç §£÷šÓ´~·€ûtóÔàš€œ€ÚÀóö[¦Ý¹ÑlS¥°²â‚[}H&Œ/«mÃoÖ:„§W:‡ß«³ /i² -Mmrˆ>Ö{7†úµ×Eÿw ÿ§yß¹Kä÷ONFO‚jÂcý«½câËÜ"3KÜ#íª#£-“#Ï5¦DŸlÍŽ~(2é}!ùÐ,yß im÷>úõuóïZÂç¿5i)<×’•z¶5;áØû»1‡û^Dùð,Zø±Ó›üð›5Ó×ë*úVx¬ëv”Iÿ£ƒNÎÌ uèý¾ÖöX×ýX—Æðk† Wô^qZºYß¶éú=Y¨k4]Ï!i¦nrË&ƒÊ?DT_·ƒY÷µØf·Ø¸Z×(Óž[¿qtº9CíœXk€“hõsBÍŽÑâL ¾rç ~p–ì·ö{ùå‹£N'ÖŽlY¡ÿ€S§Þü8".mµ1ª­ñ9Ùv/Ñ¡62%²Ò+1³Â5Ö¦96UÒ[í/llvf:mE Õ.’¾¦ sMIN5á‰6Õ± 7‹Ü¢½q -·jŒC9ûy¬t 2̤·(Ú´'7æbkRª_ƒoªs]X⩎¬æ÷ž+tW—ƒ°·åÎÊ0ÓÞ¼˜ÓÙq[ccc]c=ü„ŸZ}©žÏvT×7[^=g¢[ÂéjÝÚ¥;[+(g¾F)§Ìëþ~Fôku W•_LZ©kª{7K\#<ËýÃO·d„›vÝgÝÙÆ6Ì«OGQ?Æ6w9žè¼ï^˜x¯Ø9âå;ûðÜb—¨;o\ÐÿëñôSDú[÷è£Ý¨Æö—„A}õ­ò‹}úÖ1¢°Ô>4嬲jëà¡–KÑQ‚r{ƒ_ŒàNmÏà;gy¬ûVÔÕ&ǘ’–Ë!Ošl#r›l#ƒZ<“Eß+Dß«ý¡Gð~»¨õœSÒµš¢~Ü\ö Ñ™}|1±ó€&±u÷~bû®ÄæíÊÄÆ­ûˆuÛ•ˆÛõEÒa„ªÝ“iªY[¥ÖÀ©Q_:ËCÃÓ_zEÝ|íVä[à•VäRè}a‡³ÍY±Â¾>†=UaÇ;îÆ"\Rî“úÆ36ýkT ѕ±€óøÍ73üXš^åõå·gÍV¡wÚ­BîtZ…±?š¼ur>mÓ³Š˜ª¢%"ÖÌW ”#rÄ|b1 -èûÕcçæ.#b;u©«ìî½4±|Ú|b1ýÖb’¬1Uf.1{¤1ìrBaÆzbñü­ÄªUŠÄ6}sâ€wÕ¬C/¸=:5œPÐý§%õ†;"|óÙܨëmDö÷˜¢7aoJ -ËmCŸ¾uOªtŽ.÷ŒõªöOt­NHzãs©kDÜÛ+1aï¼¢÷= »~½L÷÷¹Ø5‡ÆÔµ\nl»„æP<ù£ßU³‰Ó;”óëúC7¦kZgLÕq¼'§ðVA3çËFÜ¿oÓ|ÈíÖŒiX®Ä;A,UØ@,ž½„P[Š®a1‰˜@L$ÆãÑ1ý$OÌ$dgKg(vûBe•.?Ÿ¨?´@­…S×ÿÂáýÊY¼õõø ›‡ÜD-½žâÞNÿïoÅ\© ˆ‹ã™Vèq½Ø-åÅÈÌ"¨Ç¥Ž¯ßÙ‡]-uDù8ây±SÄë"§°¢wa©®Q‘Užq­­¸ó/ÖI¿öŸ÷?Õ•¦û;gv°˜Û¦âþzÆ>±õˆM»UˆËˆµëVªÆ2×ä4Ý2gªž°‘]¶P˜JL&ÆcˆQÄHü9 -]—,úAÈüüy$ze"ºêñè·F£ŸdñkÑç/“V7‹ˆ=”ŸÌÁ;Üa‰[D¾Dìs¿ÈˆBŸˆèBŸÈè·W"c‹¼¢Ò‹<"¯ºGÞ+p|Qè‘Wèþø•Kø]47ï”:G<(qŠ|Snæ]íÏ~íò~nô!ýär©-:æU+ªÁí—B¢[œ¢õpºû O+ç¬Dq8?œÛtV2ø*`l& ÎtñðþþÁW¿ w`1fÄ4ôu21Zf2úi1{ÚZbý¶#ÄAÏ9Þ ªCœ#ÊQGÅý­þfm×c³ Ü#‹ -Â2߸Ef¿uD9&,¿Ä!Ô½*0ÖøÃ“Š 8ˆÍGÅŽáwß:EÄ–zDšudE -mógoöulŠ«yoÖê®÷;wú`Ôëù[öi -g¡k‹Ï4:Cø~º¦™(⦣ïàûÿåjþóÇ|uÿzÝ#Ð'ŒÝxôïÍBsqÍþS„’oû,Õ›ÜjÝAî8ÛõÁSÚYhÒö<üD[NÔåºØX«ú¨˜W¯–E1 c[ìã˜ûÊ=êe‘7È¥ #›J£»*ìÃÅKýпgªÝűúýÜ)þwÎZã§¶[×”˜†Fèÿõ\£ÌÏ;ÿõóžÉYF,^¬K¬W»Lìw©™¢Úâ>UØZ–%%¼ôºóÚ=úi¡sÔ“ט'%NqÞ:EçºD¿t~UàüÖ'Â¥*$&¨Ü':°Ò+*³ -ñ®J‡ˆ›åNáIåîQ¼¯œ¥Ú+n»ªçí™Ê¦62Öo'fËLÁ18ŸÅÿs2øþËâ8…¯ÿù†#q4z ž{Ãópþ^‹>' ¬:‰˜MLµ”˜'X¹ÇŒØnœ&£ÖÈ©‘Ÿ»Œ{䔸„–úFjËŒ>lÞ”¸ x%Â^‘>è«M]dô‰Žœx=çsx%ÂìuV¡ÃX×*$±Þ%Ö¤?7á ±òå1 æÌþÿ½÷#Ññ¯×ú×kp½²?ß¾îÑøÎŒGwh<úœ‚gïpFÎA²?¯užrS7«w™»OÞ¥v“['è嬎¶Ý9WñÆÇáÙ¦ÔȺׄwEÎÑ h KœZŠ]“[Þ9%ÔU8D¿zãâ3êI‘KTB‰g”Ö'Ù¤(!fMšçÖ—þ·]ç÷×4î瘎FŸcñõOAŸ¨&NßJ,Z! V)]"¶ˆGìËäè|æL6ÝòJzáu;ß#:ÿµkì›B—„ŠB×”òR§¤çE.±yEΑ)E•á‘p¸VF¢ú]íq¤çv°f9§µfÅæÿõu gCY|βÿ2¦#~¾7½;}N1›˜%»€˜2BÓ ”“æ¡¿˜1j1eäRb²ìbÚ¸µÄl¹CÄjEgb÷ñ×£” ¹ l_¡#Â-¨@Mˆt® ‰,÷7Ì<Õ’rLäS”+SP\˜ü*Ê­E¥ö­-—Ão"ÎiÕ¥ó;ª–ö~ùM 1[vòÿelˆÿ’+áç¿êÌÓI(+Á5É]FÌž¼…˜;s71gÆNB~ÖBnú6bæ¤ÄÌ1ˆéÖÓáûñ›¹‰è÷䔉¥›; ³eæp+õº¸¦Í·N×\ lvï…Gdª}íÅné­…o]RûÞº_ýPá’1PíœÞWç˜ÒZmŸP^ë@%·}Šìÿ›üøW„ëœã%?J˜6Rý4"T~T?eæ¡\²˜5r%1cÌZbƸuÄ̉›‰Ùó‹V"ì§æDlf“Gl¦Êìñï¦ó…3ö¾vŒ}éyÿÙ•¸·.±Eα•Å. •eޱo‹œb‹‹cï½uŽ,Dùôå[Ç(x=êG„J§¼zƒòÿúZþÊ›#ÆãÌ>æç÷cq÷óû©håG-&æ¢qš7c+1_n+1gþ~bÞ2UbÁ}bÎ>1g©>!?O•˜µHƒ˜¿‚!Öi…{Ú&)½á6ˆß¿p {‰qK±wäã"ç„Í¢bJÝ#ÎŒîq§á„ÅÞ½sˆ¬/vŠ,.qŒDסý;¼Ë,Hfɖݨ¶Ný·¯ òäXœFâï‡sàðÑÈb–ÌlbÎø•Äœiˆy³÷ËÖIˆ;Ï‹·š¢ÃŒ˜·ZDÌ[L³—“Äì…zÄ,yUbîÜCø½ ¼hb¯cý$Õ÷œºn?wÔ¤ùÞóÊÔ€„g~‘eÏÝã_»%”º& ûºÄ!â}™cÌ`•}Ì@mì`½}b]™c`RÍœdÉ6ƒÿÕ˜ÁùOÁmÊOô8\ó`î ¿7 ½;=‡˜7a1gâjB~úz”›WrÓÖ¡ù·‹˜3}/!?c/1sÆ~|móW󗈉ÅN«4}ˆ­GîÉî -Ꙧ”Ë­•QLês7 ¶›‹8ËtýˆUl<±ŠJ"6™<•ÙüÛ,ÅrnÝWzùRQr°{qX˜oq@ø;„½jе=|çõÕ¸òR‡¨Žr‡˜žJ‡ØŽ*ûØ‚b§è µñáªo¸=s¦Ìý·Çí¯ùù*ÕLYyB~ô"tMsQ<ÎD¯OB{òð{2ó ùq+Q>Dc7aÊ›[‰yrû‰…‹IbÉ3bù~+b©š ±LÅ™X¨hM,Pµ!~Qµ%Vò‰†2»|Ú§(=áVé pÇ…=ÅŽçK“Ü -ÂCŸ=ôN¬yî‘ÜðÚ#½ À9 -8CP…O¬es|lâ v¸)úøòŠÒnÙœ9þíZ>c-Àˆ¨zDµl‚ÊýKù‘‹Qž_ˆ"rŽÍès¦Œº¾EÄì Kˆ¡ÜˆŽ©« ¹™(ÿ/Ñ$Ö -ëM‰E›NK÷9KuÉEšþÄ:ÓÛ2;<ë'ì¿Í-Viâ”>-é|áq¶6-(äU@äíîU¯\¢ѵ•8…=-³_cò©Þ6~ Õ6¹¢Ö>1©Ì-ÜàGïÅu"«ÿë˜ càÿøù¯\2Œ…ǡњ€æÚL4†sð1SöB~Ê&®"~Q&)h ëP"æ,TA¹B‘›òÇì(g¢y†æÚü9{‰ys÷ 䕈ù‹õˆ+hbñæÄJUb½ …Øp<µ¢Â&¸¿Ê:$¾Ô=òP?GmÒ¶ø¯m4¾žI¸6O%äqþ˜€1ÿü0äË™£ 2ÍGybú(8ˆ™“×siK>¶x1r_Hÿ¬}×¹…ŠÏ¸•€'s+ö&ÿmÎ;ƒ{¦ír®˜¸ëòã±û|+§)çq«ÖsÊŸ¸súŸ¸³Â/%žÆý‚Î5ÇGŸNXó1p×"ç¨çoÂËËìÂZÞÙGV9%Õ½sŒ#¿´Ø«8½›9òû¿›ã~ÖrˆO@Æòcæó§­'¯Ñ"Ö©[+)kb…i(±Ö>oä:Ÿ7£7û¾·ÅýÍØ —ŸŒÜà?j›gÅøm~­·ù4NÜæðvìv«‚1»Ý«&xÌ­;PÏíU¼É-Q -l•SÉáV¨×sêZœ@»ƒi·pBþwùRmL8`¸®l„ªCcôh}BCçz’-B*÷‹@Ïýö\Eá¥KVìûâRäõYòÏV"äªò+õ‰,ˆõ¤'±–¼Bl…[Ì®Ë¼÷·@1O5·í@5· òßÿ†iÛOdÉnù[¥‘#v¾>jŸsùäý>m3”c¾Î?ø˜ÛŒðÉ!­_9#Þ¡‹ì—7­^NxÈ¿lvdËJýà’•Ô½?õ…e½DÏ¿§nÿ©+Hÿ›2›óÑÃïÆìÓÏÆÂÜ>‰ôqí qaÛ9Øï¤[Â(‰ýegÊþÏuú!0Ó¦]„°þfâ±h±dÇ)b¹š5±ŽçA¬=dI¬ßw‚X³•"V¬U%V®T#ÖnÛIÿ;/<³Ë¦dü´¿/V«áT48>ΘüòÝÑ´óf¨èóÛ+üo߬ŸØjµq졬ßÖj&÷¬ÕºÁmÕ)çôõÊ8šWÅ šϲÍõöìûZ—#}Ï¢Mz^F‰>vúÓõƒV¼wœDPýã$ÛÝîîVœXUnì^­’4´h±Âö#.e€µ!ìæºÎ–óæm'–m1 6«Ÿ&vîÄ.ÊžØs*qä®°·Ó‹¹Õj?8ž>7t^ôé©3ù[•­Á?¾žüQkÍû³ÅJ÷î¤ÚwNOý3ÇÓúÎI´¿rG˜O=î:=œÑ¡€ÂùZ§ÃÇ©›ŽÖ.â4ùÜÝœ?wê;]ŸÍÈÐ]Îf7âŽu݉½Ðœ–lÖy'QW_‡`Ž˜bB_lç4RÌÓ>±~Ú§mj–‰–®ÚƒyÚ÷1Û/ò;ˆåëøçz;N¿µÓ·sòîNÅÞÎCŸ9Jû7îˆöî¨æwN| …Û­\ÁmQíåTuþàŽ[ׇGäT8…ÇV¹F8׆‹†^ºBEÅžÚKn‡úCnë¡ -NM¯…3æõp‚Á?íÄßjÙ/ï½trJº†f2Ê[všjªD?bù1e›ÈkÉÄüíô½:QÞ[±¤¢Äθ±Ð_ø¤Û˜M:È„Uí`Š70y-ŒqËKIoE€^9ÇlÚCý·×5åÅ)²ó‰©cÓ'/BÖÿá:]m±cÑ\b÷ÒyÄ^8VÍ%Ôì ÈØ‚­¢W 'é§],?ºpuÁo -ÞžÓ¯÷D›9Œ£M¬Fƒ–¬0¹KU˜Ò£Æ„æo¦S{TÄ7[X¦¦ÇRTÒrŽÌüý újÿÞWMªhè(ÝØwQ¯›;¢VÅ)+z—Mßu,]vçñì‘{gR6Ë£vùáU—'3e]G ºÂ^§Úвï«ÎNQ?¦g£~ú—z8Uƒk?ö\Š›¶w¯±Aa.±yÞ¤ -ÏUvá3õ.zMÐtËš¥æ?g¿‰§ìÚ=$1k’1c,∇®Ü¨G(;MUmáj~àêËGWjà7'ÞkŽ1¸Á)ë;ÆÍ48ŽîåEI‚Ч«)÷”(Œ¤ÏxLMA%UBmÛBWQ•2føY!¬çš½ÄÈ*l¶POBï ¼A»ÅÏ'cË·‘y+iß»+¯{+Dé­š&Y56º|7k4 žÁ ýo­ ÒºÐñu{©§ë™U$9´øC­¿´¥ÂÏàæß•®)óøñå[ȧCŒaK©Ñà›ö{“/ÿgÍû»ˆêÙ.ŽÔÈåvj\Ιª¤w˜P¡ß´–iîµVt]¢Ÿ|c¢§TÔ ôyÆ~FÃçÙJÒïÉJM¾„عl ±õB÷€2a$6‘=rÑqºéLJ-œ¦JmgSIÅ{`Ÿ¯ðq£™×É#s>«ó²{ö ®¤- ýr–зºô`_­àÆ75^LÇAÜÇÔ¿kó¢«6Q6Iòä»q´mø,~jÓúÆ 6™3¨ÆKªÚÆ }½J/­w»~§¦;¨›óc—ö¿o×¾ÎmU+äv«pºš¿rbõ!NG³‘ÓÖ~Ëié¾ä´ J9V/ŸÓÒzª sÖi´®‰¹¬Áá³²šêÄ®Õ ‰;všzºuäÒhæœÓDÐÐðá¾0òcŸ:D÷–òÉX„õ@|Ò–Kü䙳®«èY‚”ú=drÛ>Úóªí7‡vŽš#@¹P’_yêpÙ OêE·XpåÎb¾mðtÊãÁRñ“¶#’êJWØ)}ûÖ–¾3Àç§´î¢=o,¦-æ üŸ¯Ô/âxäÐÀEO¹½jöO¦©šgW¿”;EíBöDÜ6ÞGî2ìåãUs&ºÎYr‡´ U%tMª„Ê.EâÀ®=„ÀÜvs½CW˜Ó¤O¥·( ,œÆëó¥<“Σ„„ô¬ý$x¹Ú ax³TŒŸÃuKU AF‹"Ì9Òÿú2ê‚÷dÒ:h:˜»ž?‘¤6é³lN³žäYÅ1Q^³D’Ûp˜ÍФã;ö ’:÷2iCª°çSô¶þïöïj¼´ŽÝdð“Õ‚°Gkø¹ß´ Šþ$uª¦êäëvqÆhÜt4ns[t‚—j›¸ŽRTÔ#Ôõ%„®ä²,ïbäTU-±o‡ -¡uHB¨+iJk·êû{ÑÏʨ©ëÊ{ªº_"DRYãs¶“\S—»_[ÏI\CçÃ3Žìµmã»ÕÇE÷Þ‹ù×>«¢å(÷«¿Ò?* "J7‘—¢gðÏúO\ýSIRÐz¹ÛGãg]läáyfÒûÆbÒ5a.å’2_àsw‰~JÃVý»?T ®U4ˆ+ߨ—1¸]÷Ú×]º¹Ë–pzU“”üÑ~ðÇ=«sôœ¢fèg|ÛEå P±í[ôíbflf .…LÓ¡´}±cÙJb߯í„6šwÔ Ç±ð,héI.ùÌ-v2ìÅ*§GCt¿N$|P/dï¶ÒÂ[Í|:»_ƒ {¸ŽvŽŸÇZ‡ÍbRæÑvñ(߯Ï!½ÒÂ<ä]P! »ŒDÅugɇŸy¼ëßTøYù×¾ ~ Ù’v aAû)þõï|'Ó–“IçŒù¼ÄÆô‹RIkÍ•ÝØîý|NO÷§ªÕ¿VÇ1Oþ€î B“¶Ñ½œ4Õ —Sç<]®+¶á™ØŽ]©O”QÞ­ŒæßBáê¢ïTAV·2Ì]Öphf€n1sØ|¤ô¢ÿLqà³-´ªCTj¹’ ­f?“Ñv4 ¤·k$üœ^êJ¶í=›qO_ÏzÁóñ¬wÆÐç1)~a¦éZ¼EsfÒáÒWQf¿.ãÿ|-íýbyuP™~Ü%ä§¶ïÜü¬NÞíÕ¡î® ìÿ?öÞ2:ʬÛ÷­($!Bp îîN@ˆTÕãOUbÄ…¸»w î†;tC7Ðö¶ÒhÓh»½¾÷>gì{ÇÝwýg5½ß3Î8cÜ/÷5F5tH%UÏ3×´µæÿWçÄå´LÒfvŽ÷.»0Ó«þÓ^)ƒãÜŒÉæ®\”™‡šnáÅ'šð4Ó'wÔ©spÙá©™=bœf<«›V8ÎÐìÞ²G³{óVÍA/Ò!öÒû™q†p ââÄ–ŽQ‚"¬xöYÁ1F;@wË—ç ÇfŽÂ̰4ôè€áÚýõÂK#Wÿþr}zç®éãUÚ¡ßvòEçgƒÕå­F˜sÌV•kßR/¾4ðÛ‹ëÈ5|°BÈïΧ֎KOÍ…v wý7¯kÿ±×çâ?÷ú\ú÷=>§þ±]Wq~¶¶ðìt]FÛx}t±î‹øcÞŠ³ùÌÖ'ðe׿s °{®øÂlÌ•ê§Y{°<ÌÝË Ñ+IBnï4¾õëÍbÛ‹Ð͆žé ]|ÎëÏüæŠÙ.¡íþnà™ 7ôb7æÅyæS„ÜÎibrí8>¹z,ŸÖä¤?ÆâüðŸwê:mô9ýÛNý•ß¼¹÷~4 -ïþhàïüâ'}ðmwí7öüºò7S´gþÇ..²Èî äoæíkù-~øïn†›OÂ|ï}œgüün–pûƒ÷ÕÿÇU÷ÖyzU}õV/éǵyƒS¼+oÏÑÅ·ŒÝ½—Õ k·h¶®ß­qÙ¼_sPh†9KmD±ÍÚùË4sl4síÇi–Ž™¦ÙÆòäW¾¹]³”ÚK+0“g8z}™Ôò`›oñ©E²_´¥V/kDc¸%i‚…_4FÉo˜*»¾Fèþx»¾ûþ–K/Ãý×µ>X«»øw7éÂϼnàå6p„¸òÑà.ðõ7—síO¶pO¶ˆý¿ì§µ^}a¡PÚ?‹;qwxî•pù•÷Vxï{ñÃWAüÛ? -,&næ -†§ë" -l¼øpó}®‚Æu§—Æ :÷¡¹#ù¸Ú1|fßèFñÁÙ#¼„Pæ;¢Ìù# c™-Ì -سúÃå˜[NþÙC,»¸€‹È¶áâ -G ¹=,ž_`ùàñ Bj“ÉGV_]Âu~¹Eè~±K8ó½‡xö;/~ø§½¤·}þGOáòO:Ìi軟oÕ7ÞZ¦=õÛNÌ¡–Å™oáÝߌºþ¿lÓ6~¼LÛûÏ-xÿ|JÑh}t¦Pqi~èÏ.ÜÀ_vA7“«¼0Ÿ+»OÍš+5Ëœfk6Ì]¡Ù²rµfÏž=·žš=ûYlcù±»¤q÷4û]½4ûݽ5ÞÑú”Gh¿`FZ‹ÐúùsNË|dNü¸ﯗzžïá{_¸@³›‹Éµ*†çЧŸ{ÎÝW`»bÙÐ)§e -4±ä3_é•kO òÕ—ªpîg/nè¯{¹áìÃLßúh®¡œW7™¯˜£kÿt­pþùæ7ºsÿsŸ¶êÎB}ÕÝ¥Þ=¿lðéùu³®øÌLïÀL+o9ÖÜ]hæ}(Ù’‹©uІeXoZµA³bÆ|Í–u»4ûv`~S§#Úðjéé…†ÎO]•æ/·ƒ»:èjõF— !fNÃdÌúC÷E.ïŸ9RfYM…‚ŽéúÎç[ø³ñàNýÕ•¯{g™˜Ö:Q`OèÅ‹I•Ž4“—Õ2…ò›Æ?­"]ÁŠ«‹¸c·Vò 7— ŧfñeççê¾ßÎ]üÙS¸ø“7×ÿÝ\é¥9ÐËÐã,¼„ÃæZ¿TK.¼ÌÎÜ™ùç˜;hêéüR­ ³ýGþpÞH1«kªXvu!wâ«õ°/hþ²¼b†W9š-sà#sl¹ˆŒ‘ÐŽ ÏÍÑ·?ÝD3Èuo-Ów}± ³•,þù®=”¯>5oß–ßr˜¿ø³¾ùó5"‹ýúš·a6ókÂûßhOýÓE—Õ9Qß0FŸß7M7ôo;u'Û…|‡Ùæ.Ýð?vA Lg…ž†—hN:--w×h»¿ÚÀg÷NññK±ÜµÕC³ué&Íž-û™]j5ž:^£SÌõA¬¶ŒÉÅǤÛjCâ,Á $—À$+>¥ÑIª¸±š>Ðu5&5LPCRFú†¤Ú(R ¹!$ÅÆ˜×;[l½»ZOÐÆà³š'òeó¹Þ§Û…îÇ;Åá—î˜s•*O/„ž ßûÌE9óX'\x®Õ ÿâ¢=û÷]üÛ¿ -ÊGÏ¢”[Ï‹g~ôÒ ?Ý)–Ís'qu—ëÏýÅf—ßþIÕ_ü¿XÝñxµ.©a,—ÔèÈõü¶]ß÷ëþاkõå—æñÙ“u%Wf듛ǹ¸xj6,_«qÝv@Ž'X_:û“Å1Èœ4?ŠI£SˆHÍT²Kæ7ņ‹Ë„¡o÷q½w·ÉI…c¤˜t;¹°y:ßxs…X{c9ßÄ~ßÉ¿îÕ þ°CÊm™*¤Õ9IEç炵Á§×;‰éÇ'"NŠ9Í“IS'ÕƒÉ,/˜)f7O&-ÉÔÆñ|tº ]`Gz;åo-¤?kÇr!# 5×`UºÃéÖ˜“†ÞžT~m‘\ùÎr>¦`”hæ©óÕÀž¹¨|;)»s*Ö‹îÔ_wëÎý¶üi7ôç½úîÛ¤Òóó¡í¡ï›ÝÐXƒößlÒ°æN~¿OzuP¼øR/¾ýÊ ¼õRÒ þæ"Ô¼µºsˆúæ?­á.üz;÷77ý±ÏVsY=“ÑWÓ§ÇW2ŸÙóbr®íÑ&ÌCÏÚ‘:•­µC‘\Zí8ôô½ßlã›>YÃ…Œtß'³:ÈUsÀCÖHñåc¤Ò¾ÙЦ” -úf²k9AJntÂ5ÖEdŽÔù&Xj¢,ÀìàÛîo«š@JåÉÅRÝ;«¡­½OÒ¸Îí íQÒÒf±B×úÑ]ï³­l=nŽ¿½Jlùp#ßqw‹ÜÿÈÝpò+Ô÷å>¡ÿÁ^aøçýüù<¥ßúÊ¥_~VaüêãBÌßûp;EºöTϲŽObkw­pæ—˜ÅåÏþ§‡.ëää½ûxÍö ;4úÈŠQB÷»Ä¡Ü /ÆåöLÑ—]«O<áˆ\Ôu˜­¾èÛndñð|â1eŽc+Çë!­i4åÁU±ÎxíÓùÜcta„C!ìëÅc ‰ÎŸþÕ]7ø‹ ´Í¸æ'p¡EfÁêÊØ!·kªÏâ,«/Dæ+„Œ¦ Rj“ql—Ëê£Äš±Bb­£P7VŽÊÅÇÙó,ƒ‹ nq@Õ(s1¥Þ ó­\ßo.\ß7;¡ã!åwÍ VQ5«sZ>ݾøxàò‚Í!1±p44\„³ß¯?SÕK_¤³_éP#@3½Òª8³P,ér†ÖßôÞjhÏ€ ³:‰?õg7îÔ_öéz^nÁš†™þL\Î()¿m:ònà§=bѹ9àîú°Z5@bÙàlØ(44¸¨,O­>Ášïú°$k}xöH>ïÔ ¶¶wJ¥—xzhönß§9à#k¸€D+¹ }tÄ¡$DåÚ}B!¦Ä^œhµÏCÒCÍØµ˜í!hºòþq–Ð’I?{pi©àÏÒ“óå²¾yrå…%¤•R~awìö*bŠô¿O=ópùÃÐàë·âý/}$õ=u#= -v¯¥+Ïõ£¯c ß|QêÿÍu˜•ƒV‰zþ‘ˆ¹|ðôMï,׳Dßþù]ïÏÛô•ï.ІÜíâ­Ùºd£ÆÕÐt¢¸[8êxĆhsïCñ–^ÌohÄ€khO¶¼ïîÛúÁÒN /°ƒV¸%ÐÐSêœø°ÄˆÛ†Ë÷Œ‡®|.Õ¿½ºtÐTâZÞ[#\ü³V¸ô÷À?6 Eç@Ã^¨d9eÃ;+Åĺq>jr=±øìÄYÔÕºCQ–Ðö玔ÚC#K¨£‹Êf>3ßNŒd¾.©ÜQ†ÞdjË$}H’ÕÁƒ,ê% t’‰±Æì +ô9h ±8dbœ¶NÇ@JÊ-§•ƒ.#>8¨Ðâ–ËÎ,€^‹a.&¬Ùк·ˆ4£«œ c­}ï×ÛÁ ,xªwÖ ï’.½¤ûÀÇåÒû…Zp~&n#4–Y¬Ô·ßß(&pòR"Í}Dæ… 318ubˆ˜Õ2™O,ííI i]`$]0Ï|üÂÌIg#¿g:brOoYÃе¿ˆÕ)äœúÉ`b!žƒÃÊGfØ Oæ-‡›³ÁL˜n-$TBÒGè¤pÒ)’ •ŸÕ0Q*˜ËêöÐMû¿Ú/tßÛ)5\_Ešw5——Ù vŸzú±þлï'Ýz'Å÷ì}#iC6¾·kTßòþZÄrù݇äO^FcN5Û!e¶²ëÔঌ¾ãé&nøï®ÐœÐu¾ØÄ—žœ%g·MÅ{sÛãÊÖ“¨‹츰\%Êœ N±æ"p-’¬Ü¼$VóìÖl˜¿N³iÙzÍ^èr2óö°à“ê…£gç -‰Uc¡-Uâ'•9ª™u`÷ÏÜËSÑ@÷‰ølЧbþçQó -$u?Ü -fòMq™£ô_n&ýŸ[¿ø oÿMáÚ¾Ù æ˜SáÀÖ†¹«½úðØ ß÷r·¾ñÎrøÉ}ûôšýû½4à]Ñ=HªvwŠ8N`2ýÍ¡wìé|ÈZÞ¤1JŠI¶áü¬HSžùC©í£­†Ž÷vɵo­€] ÁñVÐO|²Iìült¿¤¬ê ”k5´‘ïþ|+8 †Üú©ja×,p —Bëoýh“:üHËý°O8Râ ?aIœóâöÙJÍÉ%àŠC¿¸ 'ñ Xß÷Ü…´˜ŠOÏC‹mÅðl[Ž­?-»Е–ªn,ãÛžn•ëïn€V8j¸gè¥A›Hün1O™¿3;¦ˆÙÝS)_¯~w¹Ôþr§ÜýÍ>C÷ó†î'„®{ÛÁBTRªœ¤‚ž™Ð2„ŽÎ3@ßXÈí›N9GùµÅâ±ÏÖËßí‘{¿q7ô>òòë{ Uúz@?‘­ååJ~ë CNÝ¥þêj±û³]rÇÝÝÌ67PNÆr¡x`‹u‹HO/ªÌLL¾óé6qè7éä/Ñ·@ŸzÐBqÏLŠûqÌO—žž‡þŒ}j†>ªÔŽOlpäb*í¹Ã©Ö^¢¿™Ë¶=š­[vh°'äÉ…˜å-0¡ëÙNèøÒ5bu­·VÔðA‘V`T¨õ·7-¡Ò‘Ø´lãZ¨}÷ˆÇ?Þ(çŸy)¾Ðúí,ïÊuP¢SmÙßg^ß…_½„+¿ðÚÓß-¤×:A“ÑK c±ÍÄ9*Ç@'],½¸¾ìDèÒKÁQV¾YǦs:9ǧ£ãÁûšy8¨ÑK~fÐcD܄޴¸¡7ÌÅZ‘þdéÉyʉ÷·H-Ÿm—š£Ä€‡ö+Ë¥²î9ÐÒÔu¼·NºðŒS‡{ËÐâ6†[ӆݿ“_ˆJßwæW7 }OöHg¾òk®-á ì¡á/Æ8€uŒ?Åèl;äæè=HýÎÐ|F<ΘPxj–˜Ö;Eœf Æ‹c ËÇ÷üì"¼‰Ù3j?9½s*i×õ=Ù­ïz°5/˜Yè‹Q®hhlÞÐñ•+´ÞÄž»Ä¶{ÛÁ>gŒ×¬¡ëËú¾¯¶A'=ò¿¸Î%§ç/¶º¾vz¾ÛÃ^¿ºÆ´ª‰RÀ+¬{ôœÔÚ««„žû.êÐCoß¡G‚Òù`/ßúù&0[¥úKË u'ž™CÜ«’Ë‹”¾<ä“ßy ýÛËõ|³]*¾0úÇ%'ç¾Ý©W^Æ«÷‚ÔËÏ|ùÚ–Ó>F\Ý.¦tj]V‚»î%6ƒ¢”Ð4Nf?Ÿt$ÁŒav§CÌìבÞ1Ø*Ð/4T^]i,˜/%TŒUbÊÇ(-“ÅŽÇ;Ôî‡ûÅúתéµI ñz×GòÀ8“~ggq'X^vþoõú“@ÒTËëšþš…<ŠW0i!Å@S´u">¯!«s†!¹~"4PY'¦C±–˜,ÞBŸXx©Åcå†7¨í]}Ûº+-wwË;¶ØÁ˜~lŠ¡üêr0¾|ãÁØH¶!6{_†“·X{r‘tî+oå½û¡ÆÛŸEC‹ÛÍÅ]ãy€7iq÷Þu5 ÞóQäz>ÙBZܨ)»Ÿï`5ôjh¢Qä:p‡XnÅò_b/²:ƒgñÚô†ÂÞ¹ˆõÐ Ž^šÏG–Ò$Y¡î¿DÉ?5KÉ==‹—%§ W€få5—ã¶tR”9¸|°µýÑ^cÇ37µìÚRä¿z)È̇÷77À¼«Åe¡þ*Õ=r|#4.Ùõ¶×Pí`׫ý™‡Zvc9tÔ±‡„8ÆÉ¡æ¢¬•_0š48ß\gè|ìæÛ}ßš»ÐyïˆëcþìØgk‰‹Ù9ÚÁ|Ç«m|ýÇ«„â+ó…ê;¬¦º¸P,¿´ˆxºÓpãnpÀ­[‰†›wkÏüe7_wk¹PóÑ -1­ƒ|,˜sاó:§£¯>ôïÀî{_í÷Äm¯»fß^æWµËCýÌ^óæ 1ùBp´â"q³b+Ç‚•‚þ;1 B3l°îÔøÜÑr‹ƒÐX….7±³˜ÿêy¸O9ùX >qè;w}7ËcÀÎ:\`« H´[V/EXèÅpsèq¢  ¡¹v`œ¦ì¡$k‰4msG‘¦òÑ¡¹2ô¹Á€H*783Æ®¯‚±Blã˜bâ ÎõM¬ï•í¦Šr´wîk-n¥lp>wòÕ>ãÛŸ†ø}ö^–tå•›qßã­1qšš' DZÜåç~ ÿÅ>ùÔ3o߯uRÏw{E£‰Åb6q†2Z¦€¥7;Kýv–þÔ_w£>Äþ–çŽr%;«ˆXĶ‰Ï¶›‚Øð¤KÛ7úϰ½×ì,µíë=r׋=dÇlkÅHs=³-°æñ¬†´êñȧ•üî™xORH¶”1|yCëã=r÷+Wpø¼>Â\'š¿Ìð²áùð1¤ƒXuj‰Ôxs­Òùp/tu¥ÞWû ñ(t<ÛÁbéÎsõÿ‹îüÔ?tçû~p5\}ðÑuð‰—Xunõ Áy(œÉ'Ö;R_±êêRáø{ëÐ ×%XBëXfy9⺡÷‰î9Î[!ç$^18¸`"ªÁæ:5r=Òæ>k .ñjÀƒŒ·V"™Ý$W;Aû\|qØYEìÚ¾fgU€Åò»˜\{5ïÄ4hÆÒYÜû%FÙiY|p^ÃKæ¢ý.ßCR@¤´–E#³Í0Øk¥#ññX£žH|ñh.4Ì|&hz“îõñÛëH‹œ-§ñô.^oFÝõèÉ…rã%hq—Ÿ\þ•:øÈ 92ö²„ –3EÚÉ¡&-nâµÞßL:³`>Cçï»úÂ2hÖâ<ñ{#ÓlL}àTb|ÃsF¥FgØ™ØY ÓÅá'èJI`g5Þ^à™$§ ûnà…!©‘ɶ¿³³&Ez¥¯ÙYA#™]3”º[kù§æ«,ž‘Xž-q»Ò[§C1½Ü KCnÓthé2˜/d÷U -°#û®»½¯gñp´éõ¹¦×göL‡f5ì[Œf¶š\2Öp´o¾oç]wÿö‡žT7õ>üCwž­;ú¹ö×ÿztçoãìÅ+1 M5³}š’Û7S’lž„>,m„”Píˆn–'wÈÌ‹÷3Óƒ£VpzŽ\ÿåFä¹rz÷Ä?°ýøÀ4kàg¦Õ*f'–Äa=R8šXìIEcÕœæé†¤:¯ kþè¥ÅBï³=à¡¿¨cyØ2àœ{yè5öî'v–NRÍôÂì¬Yè!&zy5ž{µ,¾›#>‚RGBÒm ¡)6JPÂ98u$|4XÜħÎnœ¢æ6O‡ÿ£Smï‰wÁ®­tâÎ0~HŸ>¡Üy«Êr}æ«M76(5ç—)ç³­¨u¦0ðÐgoÐ+…·”Xí(°Ÿ ¾™ÔñÐ9)z€JhŽ­‘m‡s#ÄÆ*ì…~ ±³{§ GGsÑ–Ärb1“bäkvV×Ã]rï£ý襼fg!Þ* µã`Ïrz¥xe`g—ŒÚì¿ÙYù&v–‘Õû~–ˆ/ÆÄêñr`¢5Ö.4üÕ#UŽÈàs ùÍ3ˆg–Ö4Ù˜Y;™ùÀIˆr@êbo±×û&ÕLÀë¡·þ¯¯G¯u͆æ61ûk4½¿ÉÐùþnß’Ó‹•Œª Ð}ï™X°¥çç ¿ºÊC?{AGìX°ñèõ,v¢ ´¼³V9:0ßÄ]³+üô±çu“5^rùA¢ñ–‚ÍP;¢Ÿí©S5`bKÌgˆu¬B.)G—Øûxûk4<µÁbaH¯˜`,lŸ:êrb›"[ˆÞ±`KÎ΃†=ΠfåÎüì&5ÜYÞ<ØYž8+)ùšƒ¥$v³qø'bg¹±ßÇž`¿*Æ©‰ùc|#RìüB ìÁh”c¬ÅÀh+%ŠÅO°»˜O–Ëú悆õÎÁ5k»¿]jûlø®JrãcN3r÷—{‘çcŸ9´¹‰Ox´c¶Ð}ß±… %,ïÈmŸ&%³Ï.Gï=–oÝÝeÌjšfϱóKiœì›Áêúò¡…†¡{zãéÇŠ2øÒ›‡vrëƒ ÄÎ"~ûéù\ë‡ÄÎ[¾ØL쬬°³,<°Õhs)g`:´º‰M}t˜ØYð“ÁÎÊ7±³ ÿÊΊ~ÍÎJ!ø†Zp"«-U–·#ç;>§}:ô½Áß@N˜!©„­ÏÆ©`+ÐëYÝ!‡°×û…Yp| ¸TȈûƒ×W^]BO05X^bÒ9œ«²k©DæØŸ,4a˜ßJFódþ؇kÄS?z軞mÿó ±Àùrž=Q«Q™0’÷°8à¦h´<«Éƒ2Gà{<½9ÎxÈ\N«rBñõ~.zàNs,ÿÉ<1Yªº¼¼ -°¹=\õ7½ù¶šÄüqýdµ|x!X¾”W²¸-ß”2ŸËj9¥Ž˜8oÅõ?w‘^ v4Ò#Rlt°³’gg%؉uv¹Rws­_2F§÷7Ã{o{¥†ô†Ijõ饾…Ýs}ãó‰oMõxú±I¤ÇÞúÉfâ°8. iÙƒW@lòÆIrZ-˽NÍE[?Ý*wÝß+t|ºoyo=ðÔ Ãùªeºœñ¹¤†wVCKçÕ²+KÁ%U{ÊMï¬óM*'DXÃÒmY½6Mjþl+r0‰Õ²&¾¤‰%;ëñv¹ÿ{åä œAF}@,Œ˜ÜQ|pÖmH²š?ò5; ý%0ˆ¯TÚ=O­:·LÍ«Jñ=¯ÕYª=³Dixw­¡ìâR°+•˜¬Q8+†5޾‰!·ÓYÚCfb@šµ!²Äõ­!½v˜'ðÉRÍ…%jïWI{‡3GÂçKq%ˆ…œ!ÚÂ[wÈÌg~XìA.…8fÈê˜A1’Å5âì¢çÉê6œOC¿ÔÄ/š#Ô¾ mý ¨¹„Æ·W‚C`H=6‰ø`Ù­Ów|‹[É?¨•WV(¬VýMS¸ÊÑÄ¡b1yjýµ`¿! & -<,—€@®‰s'`þ0cf0®7uÈCĦ«+åcmB®ˆ}°ãÁEçG¬¿¾‚ll™ ŠEóå¶/wÂ>¥Þ÷c¿Ní}ìá?ô@–˜ÿ—Îë ø‰ÁæÄ.ìš))=}Ü!:ÓûRBû«øæÏÖƒe8õTÐ÷¿Ú v–Xsvf>¤¢áÙRvÏ4hY Ôs¾µˆØY`… ŸUÁ쳤—}&öyÁÎ*0±³äco­[Þ߈AýVó Ù-Ó)×d~ÌäÉ›kå:ö¹KºgÉE=³ˆ5_44Om¼±N:ñÞFâÚbÏ%¾x¬1›Õ`ø•\(uÞu‘»ìå»ïnãÛÙϪ¾º<;p>À{R˯/7¤6O‚#­äê³KÐÓPÏ<â‘Qo£ïùN®íÃõÄwb5ÕåW–Ê­Ÿn—´y’—Ö_Ã-%ÿdkô|ÔØ<pPÕð[CR¹“ÔõÅnßž{ÞÄ’I«›€\€gõ7«×õ̶ƒ #ôÁ£A_ƒr0âœfزZ¦Ý…šOÎéœæ†\483&ÔgÊ?9G„½¢e+ÇæŒBF fKJåù%ØÏ Æ{Tž½˜Lù>r0¥øâñħ›ÑQŠzgƒùø-2¶®+êQò‹ù'¦YMs.õ­#^Pj%1P )ã‰ÁÌî òP¹žÅmV£!ß'Ž ò¢¢ng‘]{ªÀÃMeŸ“ÙéïLw{©æÒRô4Ô‹_«†‹÷bσ]’o”¥^+k°EŒšœ†)Äøç yXdÁ(ê'ü ;Kl¼½†ê¶¼–irÝõUÈÇõ7¡~×§ZëYŽ/&·N+M)ùÅÉê>¶ŽgJ¯ÙY…³À6’°¦šoc]-˜cú¹=3`T ‚C]9¼@ª»´Ll¹³ÙØ&©ñ6å,Ô³ª<¹?ƒØpÅÌîÙïC.@¾ Ü)¶FÅ*VË÷<Ü¡œ{Èóç¾óà:ïnÆ;칫חӹɔœÑò¹G:ÿ럄_»pþã`ãà}¡ïÞ.V¹à=éYÓÙ½dŸ]ûÒÞy8ë&…dTŠÏͧš¹åÎf%µa‚Îf.°œšÖy}Îàn‰Ì~`ãz1Ô\¯÷e¹¡N£Ó5BpêäÇø\‰?­C_‚Õ“#tœÁŒXžìw)¥½sÀ·Âù%bUÞXÎÿ|˜#`ÊÑœ«eÑ‹C"¬ÀÚÂõTªßZ!V]^‚^>b´šeÃb-ÁQƺR|~ñQh¯Lª¶™à¬¡·Y2¹îöZìYó=LØEÉõÅjáéyàPr»œqþFjºcÊ-i Í7T\^»§{~x\ù­3л–{»3ÿ½\ŠËµ—CÓmÄCqVJRýxœëÏ|ãi8ÿµ¢ |í%¶ÜßBÌôˆ;}u¥Øñù6©íóíjéðbšƒyËr>ÊY+Ï/ÂùBø%÷ÄT0°Äc7×ðÏws-¯Ãþ.ö›iÖ1¢ÐŽbRÅÙÅðóÈ¥””±”§d›b(èp¦=!æßù–;ë¸co¯Àõgõ¼N‰4¿‚˜*,®Ï+îÀ–Ä Âçfù#ŶîŪ³ E–Ÿ³ºe ò ­ÄüËC…Œxß8{&¾Ø ¾uû½­bÓ{k°¿Äò¾9b×Ó]8멞ýZëß_K¾:£vrVü\ò1ì^âì%xO8@q½+ÔýŸ¸À§ÒÞ´ê^ÄXü|!(Ú -g2Ð §Hô;b¥Óúš˜ˆéÇ'©‚Ï„½1!8Ìò »Ëi|„Ùö˜“kÆ™xæo-W*Î,B{È•¸|bb± ïÍP|rÒxk=ú3J1³?öþÔ’K‹¤”†ñ8!FfÙ*)àX²Ÿÿ•Ù6qRË>:ÓýK¹áÝu`?¬-°áÒOLBMûÈYìþ‚A^^Ý…eÈGˆ[ f{QÿV£Ÿ{çðåÄâéøl3ØEx Õ{¨U™Ý"‚ï|¾o¸>O©`¹¸Jˆµ5—ñ=Ï\Ôá‡:pb°WO¬¯Ä2G:{‚^#Ε](³¼|cü?ü¸Ë=·é;>ßÈ7ÝYM{:É,vÀvØ3ñ[§Ò> ú8;œql²)Gns\ÇÇ”;É%Cs¹€+½áˆj p«s€ '¦×²8Ó4Qfù§ŒóVeÃóÔ¼¦©´WÖtm•ØùÙv©é½ ا2­½¤03î0‹e…ýÎ\ëÇðói¿&“ÙCNÇT¬1©¨Ï™¯=»ëüt3×òÑzîÄk1‹*FdØ€)F¦Ø(¥ýóˆ‡3$yóå0C#óìÔ”ãÁ*TÀÒfù¨TÙÏ|è¹%°IVsÂÞü xSJLªx¤ÄAIª'ç÷2Õ1ú|¬f¢zƒ½×|i/­ÆGÇiG£6A½‹ëŽ< û­³Y)*Õ†lŒivÍ”üÎ8Ë#Geتˆço¯C¾žêAœÙR‹úæàìÖÞö‹•äP;Ã#$nzB¹#9 >¹Æ‰Å1'Šóà½2Ÿ"¥6NÓ™xÂ8¯˜ÕJÌn¹8·èѦ•#Vùà·Vç=–‡bKµ×MþìSæãˆsV,úìl)IìÚå3;cõ ò"Ø «Öï®Â}DN(´¾»^®f?ƒ}N≠-þ0ú<è“'—Œ¥½R–Ϧô?9ˆ9:!™åÛ8K[Ì®ÛÑSóÁ¢#^öéÒËP']‡µM×þ¡æÊ:\~f.λ‚›!Î b}QŽÀ®-ü•!§cťʋˈ Î>³t´k6ÙiÙà¾æÆ¾òú"1¹Ñ ù}6œ{iû|3Ö1¶Bb¬À מüv»þòwžÒÉïJC/=øê³ „$k̇ ÿc÷n8=,,¢õö`t‰½oZ××VüכǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛÇÿÏyóöFîñ÷·÷ÛÏsq[çËþ_ë$>(ÎÞÓ~žï -—¸ø=¡ñ¡ÑQþq)Λñ%ñàÎmófç…üS‚â|Wú®Zé»Èy‹óB7ö7ö -öÏ‹œ—²ï]¹|õZçÚ ÿç…¦ŸêÌþÙÙ+.4$4Š}QàdúÖ-ìi¿lÃú «–¯^µró†×,_»zÃçH|yÓÆåkVnXÿ/_ŽÀ—Mÿƒ/›¾á÷/ÿ÷ù?|ù¿Èa{Á>ÊÞÇ~“óÂE΢`¿ÒÙ%È>Öt-\C#‚6›þº+ˆ½ãß/ ûÆUÎâ>û{‚C‚v”<œEO{Åy¥3}`Óœÿx{Ø/ܰrùúÎçUì¿ëW³ÿ{û–×/úýÎkÙï_µ‘ýg%û+^¹Ò~Þf½‚Íö{È×=Z»‡¢Ñê›é‚²­1æ¨δÖgXk­¼ÕXó½.^š[÷kÜ\%'næiŒ5÷Ô‡›»º‹š=.>šý®ÞH y›kƒŽXùøÇXp‘y¶ú°"[¯ T+­¯æ ×! dŸtñ–ú ‚Z¿dK_úÝî>ö3tš½;ÜØŸZbޱQ?pÀ¾ÇG -5ãƒS¬!ebH­É"cNë ŒÒcÔ•dz#rí0òL£-G*Æb¼ãÁ8zŒqLCAËLŒš`’?k©`<’'鶆¥ËêK+1–‰292Ó–$(ØŸJXª‰’ú‰“"i|?F'”ƒX£ - qì÷'”;B’DˆÉ´#i„ TkFŠy£§˜CŽÒB`¬F -16,ÅYC*[ËIÎ?ÂBŠ«‹q>4Áš‰# HpIá6—„„ªNïg¦“™‰ÇgŸ?:ÕVͨž¨–ZdÈ陉Qd5ÔLH°‚´}ö’ÁyŒÙf?c¡¸žqGÇ’„QVÇt%p–”Õ:EH(vã«Ù×ëÆI)uNBHÎHC”d[¥˜ìQ$™‘yb2'Éš¢±tM0:sb -F™p|žŽ«CªýÞ7Ü‚—üÌ!èm1‡Œ6d˜½|‚ͼµþfÞª’K:Œ&H$çxð€¢9œÁ~½ã£:%ÒBÏ>À®)ûHaîÝs@ƒñRȺ -¡E¶\h‰­þP²¤»½ _êå¯ÑÃ, }éî©Ó`|Z(ÉÌ6‹ÇbdÞPvv‰Rui¹!éØ92ËNŒÎ´…cŒrD¡1½”Æ 4æQ0 -¶©ætÏ$Ù«cn”[înÅ£”e’ŠbóGé ì^0{ ÑãxfÏ¿-ê )¹EeØÒ¨Ij¡£!·c¦”P2F -KI£${e÷Æñ‚#¬¤Œ®©Rd¾·dîºÓùHWV`ëÍh©•c,ôr8»—ñ–{jå0󃞲ÆÓC4!lŒQ$”ÄÖ|€™7gÔ@nïr­b`֌ߑţ Á‡ŸãÍšù!f$£Ì>F–¥Ä†qRHžÎgßY -Œ +á¹v… û†Q=Óh5ä&;ÃSF*a…vz5ÆB§2?êm©„å٩ɵã qŽjd†žbƒQTcjÕ)£©Ös•2jhT ’•g÷Ç–Ðì>‰ˆ³Ò‚ÍáHv $yì¾YïfÁEZbôÙÃK¯ñÍ… 4k!4Û²¶øÝ—‡ñ~ÉVõÅÚˆ5Eç³÷\1ZÄç‹.¥$VŽƒÜdu y¡ÄW9BÖÏmÏ> §F˜+› ɵåüb-!ÏA2¨,ö’ ó…ðjxª-$”¸‚ÑðÃ2l0’¨–tÍÁØ2ülKgöÉî'=e7O…,Æi¥ô‘$–TK#~Æ¢Áù4*Í~|²)/蜩÷ÍeùÁtH -©¥}óÔŠ‹Ká›ÔÒ3 á‹ I¥ŽÂƒc¬hl‹­ärè‘MUÓÊÇ+GÊÇÊ)uã!B2d2@<ÌhÂØÙ|Œ.ò™-a,c…lýôɬ±÷{Hm˜I'|&¬%Œ¥*—–ÒÈmÃ5ÇÂøÆœÏTNvûtülȇcäTŒÅè_Î(%›ÙÆÕ`‹¥ýs!Íl(žgÈ蜎q{ö»&b-aÄIŽ)r€|<¼Cz÷H‘Åô”¦‰X+B»öÑi¶Õ#ŸÊ|-d8ÿvÿ“,0|½oÜöŒ‰ãz@þ\'Í€XCY\˲…¼¬ào)Jµ†¬$ñxæ95Ôù F!‹&HÎBþOÊuŒÌ~cŠG‘ @fÓ$1©l,FŸ9– pAÉVBTÉ(HOIG/.PŠ/-$Ù·€x+‰ùR ekÒy$a¿ '&`|] 41Èœ¤˜Ÿýb­xCI–›}ÄeŒqÓè~D2åjd¶‰Òçn˜@9 |d2‹åY,'ÌižFö iöï¸÷ðƒô½IM AR„|Tê‰É4Èâ7r;ÜC’PÉdy\JÝ’dJ(£&–#ù#fðQã˜Í`,>k(óØdÁ†üTJ‰£!¿k–šßéŒñ]cdëë2“ÛúüŠBrm3ð>I&òÔÌ!wG£‹¹Í4¦ÛøcDµìüBÈ&C‚J,¿´²ØþÀ"þ„Ϥ‘JŒ"æöLǘ)O2[ƒt¤Ã!¹b’4c¾œ] f_ãàû!+ÆØ£øäH°`¹üž“gñB²8f³‰•Ž$™ˆ¯ÅçÛsa™#…æû Y‹‘ú<¶Æ˜?¦Q{H†EØCgþO?2×OøvMÇ£X¼`ñU ^x²i”½‡ª›+hm±¾‘Öû7øä6rÅÛË…æÏ7‰µï¬ iáÊk‹i|1ºÔAJk$}k±Øúd›T÷éZ)²ÊÁK ?n¡¤ÖOPª/.“ë®®Àh8]»ÂþY¿‡ŒI?ÉòËv_XübëQM?1Ř?0¾ -~Gô;l $Ê—J óp{Â|lS…¬kòÑq=¤ÑKv‘Ñ*»ß°HLÐ85ÆfqMØú Ù– ÉQ9v?%)ø(ܯ¸²1¸– -|É—8`IÉ¿ÇXäý…Í@òKÌN_åã½Ðè2Ë!%ÿv¿(æ#ö'—9¢Î‚4ÉGÖ\Y -YlYe6ª¦Ô’¯¤gR…£”^1H øQHžÔù…@ˆyÓHž#®Ð>_lñhŠÏ…'gC^þ²¯eæ‚c©ÆRò;gJÕ×–büXŒc÷/$k$îÞdm0š -ܤAÕÂá9RL™|*dðð;hä<×¶a¢¿ÉjØ-¤¶…ÐÐÁIVð•ˆ2[ÿdŸÅ}s|Ä`3-‹å^*û“Õ*ø»i®eõ—^5a?HáõjéµÅæ¥ñÖÒ‹ -€$2'±ü˜þ^3N.93O¬zk $«ÅÌæIÀzC#¦48‰ÙíSðä3;'…Ys t¬ ’íbl‰=Zc´9rRzò¬&32ÿœ69¤v”øÚqd,V >ª¬Þ  ¿¨l;9­Ú‰¤:_¸PýšjC1‘Ý_®ýÑfHéóµ7–BæöI> °Û>y5¤Þ[±š`| ‹[£aŸÈéþGÁbr~ä oQÙ}€„ÅY_d_à‡)ç`¶Lˆ’Ìú 4ÊÍòŠC,‡ )ÌV7„§ÙR.Âb§ôû×IVRIlýÂ&á‡hdø÷×`½`MÁ?ËEݳH®Šý½·âþÙÀP@Öœ¯:¿ñdXïø=X;(€LŽÈlâ䲬°ÎHJýNÈòëYÍìašQdñŽV£õäC['£–å|c©Ö£t¶>qý””RG°+…²šƒÅ$!œ­ƒ kžÅc`µ`ŸÒ‘Ê1@Gà:ctÝ[ÏjÞÏ ½$ä…xo‚/êös­Âê0sÈÛóC}äg¸ÏÌg!&³\ØF)»´ë ±°R\ùh’'e¾ù¡ànÉÇXêc-))Í…¦XCò2†ZV—›dý,Ñ›¢ -ìx¿KoÔëJ”…—hŽz õ®›Þ7ÆŽ$Ëêt)4c$$õ ˜\Vã°{„<­øÔ< ¸Ž§[i}ÁeÕLâºn‡~uןú{ußn‚&ÉõÃSÇëƒâ,}$Õ 7¡éýµRí«¥„*G.0Î -=ÈR` ȱY£à7©ΪG…ÕÒ'¦AFИÄr‚˜ŒQjt²-òO5­tê S oŽ5Eµ«µYŽd 9ÈN’Xn ) ”Ú ‘–„ä*“Æ“¯e1 ˆÊ `÷Ìg›äø†æJµ×VÈ$Å\8š¤àêï¬ûØ/zåü$YP’v‰)üšddäÛÑ@מÙìy|'â5Ш-„öýð•è Å–:ð‡ÓFP‚œ ¡ÞxÊ 2;¦“Ô4Ëq •B>ßÇòj  HŽ5¾h´•k‹µÛ$ËÖ‚Šz²¸àæê¡Á}×û¥X¡~VÖ´~­€€¤´^ -6—Âslá·%æSÐÿ€äåŒÌÈq€ŒDÊñ l-€4Ÿp8s$ÇêjVÓxë|5>r€ÉJ²¯Ã÷‰‡™í¥[C:õ:¤Þ9%ÎÒ|ðãƒS­±õ~G,i1‹¾%|'«÷,)þQœ/´2}äȨ;X¬ž|¤(ï¬#™#H| fd5.$„Ó¯Š~ÓqçþãßðåZ`5°ŽQÇy錄1޲oBÍ[KÅø’шE| ûÝHAÞ -{ÌívzJeñ½'cNÛLä¢ðß -fõú5–å[AÞ‰iæËɇBÚ¸T¯;Bª–Pe§Rý›Ý6]ÍoŸ‰<=C5­z‚!µÞ$«˜Y7™òåÒÞ9|ç½m„>J*‹~&É?·ÌRÊM¯ãû^íæû¿ÛExÇ–O7JµwVCÒP/…X Ä š1X"ä«Â‰O7Hu®•2š'!?BÓGBv\hþbßýl;Iª±•Õ9UÌì0åG¯/ßÝ$µ?Ù)w>Þ-·ßs\‰I²Å•ÜÖi¨KIº’•ˆK@ ô9S~ÌžJùÕ%RõÍåâ±OÖ»{ê5èeÀ.zèMõ:³+¬)Âp°ºŸ$äÃ’F"ßPPs²ú Òg´6™Ý£Ïƒ~‚Sê ³º²äèÛ!ïå1ÿfš’N ’(·–c*ÇÀ/#ßAO²í°Iȸ˱Uc€>׉æRh–wtŒ˜5¶ yG䡆#EÔ«ƒT3z»Ôį̈Ÿ¤–7Éy Œd9\bÁäz$]Ÿ?šd| ;fpmŸlàÎüÕ?ÿOýà¯;…Œºñ°?o5Ü}YHr#õ" w¬sæ'(?‡LTnÓ4ê飇tôô"ê'QÿçØH‚¢/©e½¾ôRX¾ÁêuÈ¡7nH`1ùcÚñI&¹!–¿2?I5T)dÿÎ-nù>IÜ¡^ζS ñX00‡äÉH’¨g6ä!Ÿ c1­ÖIJaõKÒѱ诊IEc Nx›òK‹€3¦ú rÓ5×—¹'§uOA.ˆû…8!U\["t}·S<ö`£˜ß?qQNo›,6¾µ’ëþzð]Rqß,1±Ú‘c1/å9E½ÎXJë}¡ýñV¾óñ6©é£ $·û(²W²k'Éu–wY!’OƒtdôQÃU½³×[ü‹µúîç[HR,<ËV8m…z]D½Ž8Éò&ôð_ËÛS.•R?žÖ»7ȵàC#cËG+i-¦z=±l õ™ÏE¼€”´\raPûÎr¹ìêb9éø18yþ°ì½ÓZLºìÚ¨‰'&@ÊVˆš( ÈÉÌߢG¦g5<Ö‹’fƒ=!Cißïõz†ú5Ô+d¾L*šC=BÔn! # Å Û”ÑÇû Á7Ý\)œùö€rå©‘úy$o_#!¤àì‘‚?ËAŽX¢¦“Ô8"n2N@–f"êsìM©ÌI -²ÊðŸùݳ ÁJRœèàz嵓¼æïÒ{J*«ëXþK2V¦zÝ5ÞI8æ¶N—K‡ç±ÚyÕÍYìþ™$¨ÆQ5|MÅÙŨéåÊ«Káù–O6ˆµï­+‘ûæ Æð¬~§Ž ÙÆÂÞYÈO¤Ä¾ù³ùZ¬ŒXviS倘†ÞµÅjï¼S³äœSΈÓTK²˜3à΄VW²˜ é4½kD0Rjëƒ]JÇ“Ý@… Ç€.Òæ´®Y\Xìj~½xì’ú£ü6­e"î0 @QêþºKÛÿíÖ×õ:r#»¦¨× -ÎÖ|dš-Éh2+×]_©t:«y]3Y<ÒŠÈA!ÇNý`‰ï¬«Þ^ -,"°ÎT·±Z R…@ O¶³z}]3šúûJôõºT{y9Gè¿!OÇZEdª×±^²í OOûkì>ÂN|sûf«9'¦Q½îÏêu`!ؽ¥¾sñÐ\ª—ñµøL¹üäB’7BŸ‰Ãóäîû{•᯼åóÏ9qð7}ÇÇ› Ê®y ËŃYž£ÄXðjœ…Iú”Õþ̇amâ=@âõ:r*Ôˆ$‘¹*ô3ÐObö W½µL)?³HÍ;>M¡z½šêuH¾â=R½Ž"ê Ôyð¡Ìƒ(¿³ø2ôÖѧ¤Zå¥T«CR½†¼Öi"GÌò÷6-Çw½ØÁr‚ådX§Ô³È±ãŒA„„Pþ $º”30Çcµ²§ücGBÛ+ ̧×NB‰I³ÃÚ!ÜHNï äļüš ¡´=v‘;ŸïÆçƒD8b¨Ì~B…#dÇ ¿ -¼ßÊjìª+Ôs% ¹£§æs·rC¿î¦Xh9®Yá™ùÆügCLl¹ IÿxƒØyo‡Øúé’¡Ä焌eã[k$ÂAv:“”g×W{Ô¡¯}pm„ãï­%û,;»{4ÒÑó Hj­êÖ2)wØ™.åƒýQ.ÔþUÍëuÆ}DLB_CË IYÎ?Õ -{ &LGÝÚï®zk½7ôâYÎ|—Ê|;ü"I¯1û#ä!úF»c6Œ¤h QÚéü¢Hˆ*“jû°4ZOÔCÏi™&Ÿ™+U\Ylò_ì÷CJ9czÕH›aÿ€jhV!' ?I~ðâ¬Yò¥ðˆÿÈX]nd¹ Ió³C}NßO{‰mÓ!™*UßZAýˆÈl;äó„Uˆ-cŒ`kàp”Õm„„hœ.}€âG2··ª!›Â~N8¤¿Óm§·ô;b2ølÆ×HˆàŒ‘&YËw× -Ï,PXî"¥¢GÊj"ô< †fŽ¥òÔb È„ö/¶ˆõ×VY‚ï…ü±T~}1×üp°Q&¹ëÎéèWÑòn–¯cÏ >ÊPÄÖ7ó™èÍ’0Èþ)´çˆÜÿÔïùÎEdµ-ÉDz|²ð)@bà¬úD¨ùÅè£öÔÀßY=¬J¶òÒ›¹ïÐó4›M,ÎèØÚØšºý$œY@„#ð¨‰Ðc`_·†´/j Úã@ÿ’åTbëý­JÅå„`×Lhûb ×ÿÂ…kûr“®÷ù6äiè]z³|ÛsŸ!!ô¬V×ñ !œá°wåéeÐøPÈ>ñ»턾dp"õf°wÛ¤ºr˜‡G ‡¥ ¾gþ}Hå¡ü¬áèðȦÒ^y¤©×e(éŸOrÕɵãM2É#)`k ˆ ô?•hf¿Ì. ÑÅÔ?Cl­¾L(êÛÇ™ÎVHðSÀ™°X¾3aÏ“+¹ÀKœ !dÄ‘üÿFBt?Ü­ô>rÒ›'¾FBèñd3èC¦WG~$îšó¯Hˆ‚Å8B:0»1¦°($m¤gMý…Ü®™¨ ;ÀÖúï”ÿžKv]æ?T*×ýãN¡û{¡þ½UÔïO(Íü°ëTJȵÇþÖ¯J~¨a"áiXlÃGâ jj Ø€º‚<8ßûh'I CÒµØÜËÛKãyÀ[Ãê~3Ô9Ø@=ŒÚ­p€_>tÿ>A³g³‡f×¶ý TÑkÕ…åÕ<Ø^ôͰ‡…Ÿƒ˜¤eQ¿²˜‰~!°u„à@/u9°@2°˜‰œq5/ä*q]HÖ³ÿåný¹_ÝØšZ$6^n÷5ÃS'H QÿC‚šî‚怯‘gŒ4½Áü5õ''Äý¦}€(+ú38Æ -×J‰`ñÛè ;>$‘üå o¯SZÞÛJ~9'z@t5Ü\-¿³y&dqOá„ão¯6ÉÖL¢}Ô‚6g죒UúÞ¸5ªy!}z çÃØ“P™q…cè\DjýxÔåè¡VGý „'ò?ôÐÔà䑆èÒÑ@Vaïò²Bãç뤬i\d±dÜùøÚ1°O­j¾o¯—Æe÷>Û>—Fû¡È;…®G; 7 ùrô°t<ðC±ÖTOT__3_°Qáp‚µÄji|vµûî>±áÃu*‹mÔ{O­r¢ý?œåÈlk¯3×õp›Ô÷­!!j¯.…Íp !R~GBÄ4âÜrHê«ñ¥cÑ[Ó±õÄãì Ë5 ™ÍS 8 …¼1$yzmZΠEXªIµãIŠg. -ûçÂWÁ^ÉAþôÄíMrÃŒ¹ÝθŸè¿Ÿ¢wΆ¤±¾ùÆJñÌ /yà¹î/ÐRäk[ïî0 ßÓÊ]÷÷HÇo¯‡o‡Ÿ¸C‚½K:9ÓòS‹P þÆžÝk$„HHˆ¯¶Ëý?º+C¯¼øáßöqÏvJ%Cs±ÇÃΡ?œbÍ…ؼFBm϶ª¬.ƒŸ2ßP}n¹!¿nÅwËäÚ³KåúwÖªåç—PŒ|€Å:ÛÃü=î•ÐþÉV¹ãþn©ûîn¡û˸¿è= ®ÆÞ¼uѹù\û×[øúVŠ%Wç Õï,%Uqy“bùéùÈé(7Ç>ò}à -çJÍw·Jív¢æÒŽO@Ý€ýzÔ=´>Ëãܳ ùø­J×ãýâð7†Kü g_ÈBÕÍ%BjûD!¡Î‘‹«pÀ„. ÆÒGô3óavŠDdy[/³á×d¶¾Ñ‹Â~‘—;¯Á÷V…å…†²+ËEó(Ÿ9R>ç5€‘P:¾Ü-×~°†Î3`ϘÑß÷zÖ.÷‡kþpØøö* !ÔÔÔƒ@gŽŒ…ͳ %½ó •WWàL‡)§éšN½wôKÇR=óøÔãÔÀDn|ÑhÚãI)uD½CëýJógÛL5;‹ßi8ßqa±¡¸ozö„—¤}è -Gô€p”ªO-O?>(ßzh¼q7G}4@ÓY¶ž/öú{ÊܹÎ6ÂÈì¦OÖCRÕ´¼ËÐÿ7a,XÍ–V7û¢\3«MY®žyÊs߸  ¹XØ;Ó´?Ñ7?R3¨t±ìÝÅ„„H­GuTåàBô¼Ô‚¶™„„(4!!”ão­ö$óYîoH`õ@^·3á×XJ’Âìߥ®.RÏã½TŸt?wÁž °=ÀÚñ ÿ ÖnÚX»ÞöâܧV0I‡Ó9ƒŽ™ -Î5à÷C½åÞN¥çÙ>¡î£U¸°ÚZ{©¨ÑÑKCR5†|qNÇtH© =/wÃÞÝY>è¾çáEµ -‹ï,ΫQ™vFÄ DÃFÀ¿â*é\±RÐ0ä±w„³e8óÃ⢠)åòkK ¹ý³°'„ü—0lØ£Äþ -»—8+Ÿƒüø<5¶`4õúgÙ( ¬Ž>=W©½±þP @’gÆê×Ê«$Õ Û•RË©¯Ž¾‰±ýëýÀÓËYíSQ“ …ó>¾ÉµýbsG«éHÿw„#î-7ô|ñúA~þ)U¼ôR}ªƒîz bÕkèíáXuy1°´Bï7{Ùºžî?\¯½¸H)šCH]ìù§5LDNŒ.´§=ØABð¬~¥}¡ÂŽ™À—£žÐ·~±X9>²À–‹(±c62M,º08hBË´³ZåÄ ù5qçñjÏ/NÜZ‡˜m(ž‡Üïu•jÚ²Áùbûç;ÔŽ®Jçƒ=BßW`í„×X»SÏ}þw¬Ý`íp“ÖúGÌI¾êô"B?±øs‡@&©èÌœ>PÊhšHö_õÎr9³k*ìþµ™ØÿbŸTqz! ÏÌ.šO9æÄg6ŒG¯ga„´cãuA VØ3“Y,G¥ô=óY®ˆÞ'‡˜ã<,ò>B6²8œÐÆègJá,÷@?6™`:«F=p ?k®/£>ó@¢ÊY ¦3¨S³³:ƒÎèâ,cåÕe@Ðù ì7`åP’ö©°¿‡½!ô(pVA-èr¦såÀ7`¨°2–G%W"ãGÐQ×L9|jF<3[§ý†^­!¯iºZ~z1Î÷Š@8"g†­ö=tþTßÿí:£U0 -g qF…úŽm÷7£g zòí¨‰±¾JÎ, 3ðû¨g«€®`µήä4O£µ -¬dݵåÀ$+ù=¦Ï”×7K¬¿´œë}¸kûbƒpôìýlàtП)¿¸ˆo¾³Ž;~{õM€Š>ê€>2a&+®,ÜPvf1éÃ9pœ]ÄÚ)=?ïûi<øëA¹èÊ:_|ò²Òáy¬fXŒ Éå󺂭ÅuÈ_hm`5%êîôñ¤3ýõ,¿A® NvûTì{bÏO I£¸{,D$¤³­Y]Ó°G‹Ú‡úøø!¶ÄènÔI@Œra,—Îr–k>[‹¼CÎìF±9:ßžöã ”‡E¥Û©,’<—( ~/ýԭ襖ž[@õFÕÕ%„.ÉÃ9pvÿ⬋³¨o€Òaö¡V_[¥T\]†{‹=kìÕ:}Lì_¢_ˆ3¾èó Φ¾öL™ï¥½|ô°ð:–gHÉ%cÉ‘„½fØhíõ•„ @?û\…=sO]wc­Reê8S?±u&0ðâðwî\ïó@8ʉՎbt–Þ3Ëc¶û*#¦%Ö9ÑgÅçaµlþ½mžùS®ûÁôUè3å°÷ü{ ³Ÿ†[k ƒ]}e)ûÚ"Ôl8<Ðÿr7ôr7z¡báÀL© Ïç¬ÐëáÚ¿Ü$WÝYE}i¶6p^õ6幕gb¯˜ðìíŸn‚o€mcÞçEØÏX*—ž¥ó²Ø_À>/z8#ûh­0ü“›¾ãñ&9¾j,Jg%ÑSÄÞ5Ö»\za¡’Ñ1•Ð,i“Ð+bk`íeÖÓÜíý'×;Ê™ù7µìä"ŠýT´M£/°“ŠèIgÔCsmq}4½o˜éL}@´%zK:ßh ôŒ¹¨,[.$Õq`J¤ÜîébÝ«…_nÀZ~ŒÕõæ:æc‘ãl.!è°_–Q3h'œK‘jo¯2]ƒc“Sé=ã RåÍåBÓ½ @ÇR=Ï|+ìçD} ºæP]ŠüØV+G¯-Áž¢©00H,µüÚ2©ñ£õ”³"Km˜HO:'we åAè ³xI~!·sìEª»½(.ê_2»g×u!ð ÀêIĘÐxc5í¡àzWöÍ£ž ö„°ïˆžqQ÷LÊŸX<㻿Ü.4ßZGûVÑÅ@aŸ_©¹´ý4±þö U IßòÑzÂ÷5^] ¿Ì·2?M±ŽÅÀ£C,fŸYD9-0À•_XD±ðûýúþg;Ä’ÁYø^ôõ/¶bOJ¨ýhê®íá&yð¥§0øÓ~¾ãéV²ûšë@¾­ç;îma1k=ü0öQY}¼=o¥èä\øÄµìò©þú -ê3}ú©7ß~o³ptp6¡Ы -‹²¢x„Kï»øžŸvŠõ_¬Ãu„ÄV±þã5Bò1'1½c’T|zŽÐóÍ.¥ÿùAàѩ߈¹.Ô ØóD>Œ~Aþ€3öÅö4«’{f¶šÝ7gÈýDÎ$ÃW_eyÄ;+)çÈ?ã,œ-V^]Äg¿9kjË.¡~,ŸÙ9IÈ;5“kº»†;ý·ýÂÙ_=u§ÿ¹Wõ?=ù÷þÍ—ÿே„k¿IÂÉ¿ypCÛÃþy¯tþGzóyˆá½'±êûϢķ¾WÅþŸöIÍŸnñ-éœgŒL·C_‚ή²kä#[§ äêwVJÝÏvO>áý‡ï)‡zïqþ=wµJË';OœPãdÌj§kŒº’ïx´ý¥æÖœËà;mú‡jN–ÛKC߇ö{Ý+v}³ û&xWD~®÷ÅHОçÛ¹æ»Ô—–jÞ^ÿÉ~»¾Eì|±˜G`r`gjÙ¹ÅÔK¥ó¢ÁáO©øÌ<¡þæ -áøçë¹þïvñ½Ïw ƒÏ÷+ÃϽäÁ§€y亾ކ÷ˆþ Þ;×þ`3ìvÍ÷|»gG„“?»‹ç^hŠ/}ÇézÙ®o{µ™þwWñŸ|•O¾;"ýéûHõ!â•W¢|Ž=Ù÷.>ö•.<×+ž³×½â”«Ïü¤+?ˆ|Ý«øºOWrÍO7j‡ÿ¾C¸öƒdxçq¸áÚ£ä2†S9aðg7ýÐ+ÔJ@!á¬xü“Mjûý=ò•W²tá'½Øò`³ 3:4_ìz¹KßôñJ>ö¨=ên¡ëÅßË}/> -úÿé*Ôþi%0¸Jù»Ë ÁÖþdíi}{)â1õ;ƒR­QJõŸ¬G ¥<äø•²ËpþÅØûÄ[éýÉ =(±äò|V?Mr‡¦ ù'grE×f{·>Yå}ù¿öêßùO=çß ÜŸþ§¿ðá¿ë?ÿ¿éîýW€ðêòOß•Š/ÿ–%Üÿ9Vúè×\;ã½»ùêýÇYò­_‚…V„w~SÕ[_Go~é{éQ€±ÿ±ÖÐöp¯¡óÉ~±ûùæ{¶à¾òµ7—Нvª/|üžðJç7®JÅÍå¨ýòÛg2k&û)vô-œ'7`ïø6 ñÄ>â£xæ[/ñìo>ÒÕo$éêKYzçÛCÊÍ'!òío‚•ÓßòüП]ùޝ·èûØ)ùV+]úFÙ=ä.ýÙ‹»øOOñì_}ø‹ö‘.~+—~ÔIo½T”Ë/TõÇ~·?;¢\à'ö}ëªïþj+×÷£ {î„͉µï¯„]ÂÆ„\åþWîØ¯•‡¿…mzO>ægïËbÿcW¾çùNø>©—ù¿Îç;°gÁõ~·ƒüùÿeí-À›jÖ½ï©áÚÅÝÝ]*ÔÛ$M²4R/(ki©;P×TR ‚(î¥Pw7¨ þÏÞ{}3‹ç9g¿çœï¼{_×›\‹¤ISÖÌÜsËdÍï¯%È9Hä 7zM°ÛÃÆøÍ&øí\òÑ”z:ý@…?ÿ(¡^õÝï±Ý‚m,èÂéûÍRñƒvKêA‡˜¸ÓÃGkÌ‚{_M„…_9ØãÏUôñðíßͱç_iº²ó¬¸²ÖÍüU©£ù“Òã’‚Z)™×nBæô s£bж¢XÀƘá/>JèÂ> •9¤KA_`y­ÌœJëÒæ[Ú+™ZUF”è»P³7o¥ÏªDwúÌè©øæ{‘$·—ä5tV»¡(§C]í3¤‚­A’VÔ¥;+YÙvVF4¦hÊ_Dá<*Û&Ê~o(Êú`@döi r¿h -“‡vñ³¿íãçþ8À{Ë`ü6樰ÿsâ¡Æ0z¨çÖðåÞþÅ™üèG ~󑌔EX÷ß•麑(n -õ}‘v7G˜÷TÉw½H‘4ÕÀ~¯¿ZÒE}GÄeÍç¥/[N‰ -:$ÒÛ æ÷«ì-_9[<,;)¾[/År¾èS;wÓ×zÒû ‡©›.¯ß…ÖÿК1ÓÁ~ˆ'½R/´¸Ukcv£^ŠêM"ë½…lár·q»ƒ/.l3½h<"yÑb/,øÝ{øEH<’Òo»NÒE½GȧRâá E?{oE½é:B}²!Þ"+úN’åä»Ïvxñï6øëof—_h¼ø“YÕë 骼$y_$ª­r#Ÿ}° -ú…D޵»üé šäÝn‚zð^,¾ßfAÝm¡ÈÜN#ìj·6ÓÉ•>¬9„ì[ú¤ê(}»ƒ$nõš׺MèÛ]„ø^«ý´Ë¿ñÕ+øhBÝìÂðÂ÷ìa/Ž¿”E_m¨Ò>ªªû4YÞ{‚¬ùp†¬í>…?“÷{I›ðç"üî!öpPHßm§‰7mÖdsÇYº§-Ðl¨O¾°Áó?Ñ0†º&ÌDuúN“õå0/Eñ­Wñ£ë×ñ¯ý]›.ì–HÞV;Ù>zá$InÔ%#®Üü®‡Ýúf$|ù™Ä‚Ü_5…‰Û©ßv‹ÒG ¤9˜Åº#Ò·%.f•%>–åoýÌ‹*\ÅÏŽInµ‰D¹ïMÙ\åÊ€ªÓç¨ì!˜n»]™'LjØ!¼ÿ +ûfE |ö*T„ÑŸ>S¿ôÑŸZ‚©¯ƒÉáAñpeÄ‘Î\Ù‰ö¬øÀê°¤˜ª ‰‡»oÆãÿy‹Û"}¸'7ï+—‰û;Â$ïÛBˆÆn'ØŸäë[êåˆ0ç»–5¬!yÑê`^\å)}Ôq„~Õˆ¸7‚“OzÅâòVgó޲pqe»ýºÝ^TÖyZRRë"©¨ó0¯{sATÞ~Vò²ÑAô®ÑA\ÔzŠzÙmK¼î±¿h†öXc/ySqR\\{ú<3Ó˽»!÷–ñå ›ù·ÿ¡Ã˜â%ƒ‡D]ÍÒÞªHé`]¤¨·õ=Ø~IÜ×Jt~pTüÍBPñ‡9Vñ‹­°æ‹ñá£=Ò$ùTeÛû Qü©-œ¨ùpŠxÙ'%¯p±èw‰ÈWð¸ÆíøµFè5ѳ[³—ÕŽÒUÒÂIA‹™ô^•YAù°KL=þ ÅžöRÔË[Ñ›–âMÇÅ;íDÞ[aßM°Ã|Æ_êe§­¸¦ÆMÔXï-m«½dÑ[{äCAª}çµÔÃ=÷’l_&ІëƒÄ5¢ÊgâÕ 9UÞy’j¯÷6ï{k=ð"áh×͇ö¬¤³Í©IŽIñ§ZÓåG;sã͆‹"É‘~aÃ/Çø~7Aë?âÓQj"¯« ðŒˆ¼aCêÊ!òm(v ½Ÿ-àe|ÜN6ÿ.Òª«HfÑXbÓý4ÁºûU]׿*,ùnÁ¹Çh -ž-æ[»Ž214a«(ò¼±H\ØdeÕý*Þ¾ëVÚÙÖìl»Ž©fÍeA(®Q·ÚqQ^«©¨öÓërGó¦¢`髚ÓÔµ6žäV‡ùê}«ï±®ÜDhs‰)åñÁ! ÈmúîÄ™¼‰–|ziÕÿ@æÖ$cm2·Â;îN…W\v¹_¼C{F‚Ú­Moaœ]×ÍDÉPm„x¨=Ôºçe<Ù2ì¿Ïã¹ßõ„©½{HÿÇˉ+_ôÍŸ4œ‘<î¶Ã®þq‹(_Ï­[/|ö”vÖÛv?K:üþq²Ù@] ÝÑâ+îi¾dÙW'é© %˺í…ÅŸÌ~ç Ÿöádiç1²¦ó¬°áÛa²·É‰uÏãxQ}¥›iá¯zÜËõ[x9û8wà1Fü¶ßØw\•gVû&¦Ôø%…6\JñkˆH=Óž‘jÛ{/Qò¥&Zü¹3œþÔ*úÖjÝ÷ îtkFò‘Îüx‹ÁG1‚ú‡y·×&¯አ;aœÖ£ƒ¬¡"K¶ Ü•Ìí3bcîÝ }æ×:0³«MBIz—!•R³O(ÝŽç}Ô¿ì´7«©ô•TÖxÒû-„9¿j cË6`o×ñeå°'#˜¤±Òïð‡§)‡zŸ%K»+ÃDÍF*c[SSÃÒüÃRÓë|äa™’޲‹DS׋¡R™OKTÆÅæK 1-¾ Wë¼d¹ 17jÕ~%Ý¡=/;ýfº¤»>˜(û|”_ñ7‰°á‡Vû÷#Üw Ïä£ËÍêÝÆ»òq·¨´ÓѲ¿,ÞºïE<ÙÑïF–õ'+ÞŸ„ù³ørÌÿ`,º× ¥K«O™·¼¶ëºdýþqÜ‘®{©gÛ²²][eòÀú8÷æˆØðÚÀØ«ÕÞ²Ûî±EÎQ•­N%u磋k\£+œ#kë#+áÏÕµ.Ñn1÷+=b¯VúÄ…WÉZ²͆^EІB¬z˰¦?N -3|üÞ?äíoòÁ€Hô°Û’ÎûÈ#3¾êˆózòî7‚®ìv” ´…Ó=TÏÉPc”øSu1ÜïK~,ªˆ6¨•‘=î‚g¿ °§0Ñ›†cÒ¶ò‹’¡ºHó¡w2߆ˆôÐæK™gÚs®X÷<‹— ”Ùô=K<Ü[t¨÷f‚KGlbd½ü:wYI£Ktq‹sÔ«V稷ð±¨É%ª¨Ñ%êi[l!œw™µ>ñÙU>ñéÕ¾ñµ¡‰ÒOo"¸• Í‹®X%Èc4é»Ã"ñý!KÉÝ^+ñÛöSæe~æ-%aïËbEïZO -s‡µ±ËƒÚâÜ6¡øa—äm«£¸Æä—_¬$ ¡5!™^õ²L‹Î]Ôy»þ›¡ µy‡0ï‹.ùx@D·µúžmMÏ8Öy3Í| ú¢óÁ²Xñ׿Hë¾Âøómñ©)ÞòÄF¿T‡ŽœtÉPy$ÕÝäc×]ì×–âß"Ojô–ݨsAGA­{ì#8N/«Üd/ʼäOË<ã *ÙÀ8~ˆjíö´{_ì_žzç­·ìe¹{lá[ŸøÛï|àg}dOÞyɲKýlz`Œ,‰Añ5¸&Dþ¤ÔSö¦Ì=:ú¬ŠZ—È‘6§ðð(¾Î¿)$QøûG/ƒ†oú9{¨çfü•ÏÄ’¶sQ[\e…-®qmé¢ïUa¢ïµ¡(ZŒ¼• †~u4zÆhpÜ#&ëvP:h~FqŸ@ vj‚­»÷ƒí»´Àæíš`ãÖ}`Ýv °q;À<tÜOÕÉùÛ*Ý&FÿòÞ˳2:6ûåÅø¯ýãbŠƒãåEAñYÅþ²¨7¡ `îp¢5GNô™õÖÄî*ü(9ª2(%ó] <»Ü7>æ Õr”ç Zÿ~ÔìcQtvwüKèßž¶:GßîtŽºýÞ9†úÑrÉ$ÿÓ6®³l摬™»,Vž€`.P³á±>_=f6Ø0{ÐÒ±›¢žÔWi÷^,Ÿ:̳àoÍ•f€)гÁLå…`î˜å`¡Úz°xîV°jÕ°ç´.ÕL×Îì1©chaÏgñwŒ5ýyw©,÷bñ;˜we1o*]£Ÿ”zĦUû&$TÊ/Ö†¦úÖF¦¤½ L¼ÅŽ©¯,©ôBbLùÅË'2¬û—sÄà€[ktbCÛ¹Èæ§8‡’±ƒ¾†- W?ÿ—õú×U ].O1ñ¼3Ã(¬t¡aþ—…ßfø€Ùm˜Ø´\ƒo–.ÜÏ\ÎX -Û0LãÁ0ŒƒÇdø“:˜*MKÕ‚ ;LÁ~óh%sÏ&h&ÌÓmcôx_˜ãü_³¡ç‘¢ÞºuÄOÔÖ(î{j÷áfâ…º°¤äwqYoüe×ÞúÉ _Œ»Zÿ¨ÌSöºÜ=æJ™oôDzgo½d¯‹½bŠË=b2«|ããj“ÚÛØ^‡¨/].i¿ ž=ÖÃù9zð-³MÛÿµÚ>±‹Â¦ÝÚ`Åò…`íº•@Ç⤢A@Þ C¿«ÓtìÎ+-[°L“À0¨eö®Û¥ï -@ñÏŸ•á+`«ÇÁßRb_›ïó'®7‹Àzå[çæí2oÙ½¯¸w•n1—jC“©¯ÝAôçæ ì—O>N ‰¯Úa îtŠJhóJÐïe8ûÌŽ€•³VB;T…çÎm4<+E¶hlÆÃ©øÏzÿ¿ÞÙÖ ßD=0ŒV˜ -'QŠ“àOÓÁÌ©kÁúmÖà``Ý þ0Œ#Œ'ôQ6âÁöУ×ä¹EþqÅo¼b®¾ó‹Ë-õƒ>&æE‰G´M¸Ü¢ÿqT@UD²Í‡o=c J½dò²€¸£]9qô/¡Ôo­Áž­IuÎFÄ´{ÅrcìÆ¿ž»eŸ1X8a:lÃöüGÁ3DÏ'Â6Mƒ§ -Ÿ¡ç -ÿ­5ÿõ¦À¶îŸÛ­ïhìÆÁ¿7ÎÅ5ûàÎé:7˜Õœaæ0ÕÝ(}_nÕñ,Ö®#?þ\ƒ\îÜŸøêÌe¡M¢1”¿½Ʊð•üËb/vÜ/}ôÆ;®¥Ì3¡»Ê=Vü±,þ=[ãn†â 2Ç߃rFw7ÇL…#ôÿú†Ú¨øg Uþì³£—Å‹9`½î9°ß§n²N/£ªr=[‘‘ò28þökÿ„'o¼ãù&>.ñJºWê•ðâOÂÛ—¾ ¯Š|â"Kƒd>5Q‰•A áÕã¯ÖÀº«ÚCv£Ò+6­Ò?žÿ•9«ûŠÙ®xkš¦íyÅ ë·ƒ™Š“YËžÅÿisŠlÿ+±vŠÿk~Zâ(øþhvîýœ‡ -ìsôÚx½êD0LUY -æ¨+÷Û-²u›]ìs‡EßðüŸØð²àøcWãP=ìÐ’ò2TWÂÜ+.>žoˆK°ëÊ—¡×ó˽c«aÎÞÜàý3×uŽJmô‘[ Ê`~!Ö<5zÞ¬™ÿ¿}¯ në_¯¡ö*ýùÞÏvb{fì¡qð>™½?=êO¤ôg[DzóoÆ”Í`õ®£`÷‘[*º7˜uÂ>ÆÙ¦ãnÔ©ÚìÙ»K¬žhÉŒk(òM)/öNh‚cØ\âÒöÖ7½­Ü+¥¡Ê#áÕ;ïhŸñ‹}âSJãFɦ0}¢;·þ'¿ðïÞþjçÿtCmû瘎‚÷1lû'Ã;Œ‰ª[Á¢B°Jà l§*ì»ÊÌ3ùÌØÚ´Ü¼˜ö<(þÖ‹€„¯}åïÞø¤T½ñͨ,óJ{Vì#¿_ì—Q ó¨ŽC‡oMxŒï²„Z?™uï­HÃJÆhÍŠÍÿv;~zC%öœ•þiLþ|o|w<¼OU˜ ¦+Í“fÀqRƒ>iŒñ €šÊ20Yy)˜¤´L»Ìœ¡Vð»¿VÑ|Ãl Þx¼E㊠qÞÕQ â•¡fÃ/µ]–A÷úÊ F¯A9ùè[‹ËÜeímçboÀšÓ¹=6Þä;c£›õaùC ˜©4éÿ26à¿ùJôó_ñÍÓ‰Ð+¡6©YfNÚfOÛ f©íêÓw€ªÛÀ´‰Á´Ñ€êøõ@=· ̘o†&XºÙì0ËU:˜Ï¬äv3v¶­·Âìë®D¡ÜìÎó€¸û:ßúe·¿ ¸ü¾Ô's ÔÿJ•Ïå¡ZïìÏŒöZ÷”ÊJÏTTwiU3Û'+ý¿ñùAÔ>”§ ñRWY¦*«ÃŸ&ÃQD‘ÆOÅ9З,Ó•WµÑkÚØu`Ú„Í`æÜƒ`ÑJ˜ûézÍTºÂ6:SqOhßT“/ŒÝ÷ÚSþ28îîÓ I¥E>òªboyõ[Ÿ”ê -Oyi±—üí[oùRï¸7П¾,õŒG¯Ç—È´»ÍÕ4ÿí¶üå7‘ÇzöÑ>Ãú‘±>ŸÇQ]e1˜ ÇiŽÚV0wÆV0kî~0g™˜·„f-€YKy@}Ž˜¾ÈÌ]A‚uFQ`GÇDwÌñ‡çž1ÏÃãØ¼åí¥¸GÅÞ2˜›Å'–ùË`ž™€jÛo`þs±òr¸Æ·^qoK<ã`eÆßË]G#—lÙ c딹]ÈOŽa=ƒ2ûü§ü9DZÙÈd0]q&˜5n%˜5u˜3s?X¶NVì<oµ…ÇQ0gµÌYŒƒ™Ë10sLW׳gë³ïmà'€½žu>0zœAÆÆªõ·ḛ̂”§!qÏü“š_û¥”½ñM1^þºÄCö¡Â3q¸Æ=q¨ÁU>ÜèžÚPᙂrRÃŒdÉ6ÓkÌÐùOfs´Éf?cš{?ß›ß -fŒšæŒ_fMX ÔU×Cß¼ -̘ºο]`–ê^ ®¶LSÛ϶mîJs0w‰,Þ`V­Öw”vEôNÕ(dVj•1Û9™C‡šò‚Púì…¿¼þOb3§úJ÷¸®JÏd4çÞ7zduÕyft5»¥¿«ô„µDP´v#³oÙƒÛ6¶°ã‡â™ªâ, ª+$8¯Ôàœ›¦´¾¶L‚c8j£—€éÖ¶m3fm‡ö© m’fo6ó¶;€EZ`'¬¢’Á*< l²z¢¸7ò×é*™MÄ@Ù9§âôHÿ·11ÁoÃbËaîUÛö Ü3þŒq•eñ]•‰½Õò®wyÑ[¯„3õɱ:ï˜=³&Ïþ—Çí¯ù†ü=ŠTÓ”Ôú¨E°M³¡=Nƒ¯O„{ÒÏ÷çõ±+¡?„c7~ô›[ÁœûÁ‚ÅX²å(X¾ß,ÕõË´½Á‚.`žÎy0_ǬäÇ‚f—wuNÖx̬â1‡éÞ·ž§ËÒÃüŠb£Ÿ>¸”Z÷, ½éu@vQ‘w<ª"ª‚äg[“åŰNh®rc×!E_^иÍ,›5kÿË•Ù\ åˆ0z)ÃX6~!ôýK€ºòbèç@‹œÎÚ¦¼OSœÛ·Ì¿¨_}#<¦¬3¦Aÿ¿Ä,\g®·‹6K÷y¥œX°È0¬³½¥¸#°qüþ[ÌbíFæÁö’÷ÏNÔgED½ -‹»õÜ_VóÊ'¾¶­¢È+æI…{ì‡:—¨O®ÉCí®éUõî©i~±¦?ú׉œÿ¯cö3þÏŸÿò%?sá±p´ÆÃ¹6 Žá,ö˜¦4¨OÞÀŽ•ú0úË9ªëàbÞ0wöN˜SrÁ¢µX´Q–kžë9a`=![?UÚÕ=açCf¶æs@û£Åal¹ÌQª0àPûÍhû¦œëž{±ö­¹òÌWåi¯/É·å¥Xô—Åy7ÆfVU¬q‰J.óÓdðMÆ'ÿ×¶bÛ3‘ÍS€:ë?Ƴ9ÿxöå È_NS™s¹p>ªUt,Ó&­³%`~|ò¹ò¾¨Áéû®1 ³ê`#£iú‰9ÅûÄœ ¿”Z >Œ8Õš,CõªÉQ®ùÕ®ÅÞñÏJ=b++ÜbÚÊÝã†k¼ÒÊ=“°/mîÚ^åjÈG ÿþ¯ØæØ?c9²O”«žæN]¯1ëôN‚•¸ Xa ÖºßW^ônÔæàò±[üßÙpî±ò*Û«Æm iŸ°-¨yÂ6Ò1Û‹Fïö¯™¨õˆY§ÕÈì=pƒY¢Þ>C;ŸY¡×Èè53Bã.FdÜÆÐ‚æœS}b,ÊYP»raîìUÈ%xÀÀD ž†äz~rýoÍ>@;),Y±ï±KEvÌ_Ÿ®óá™`Æ ¾’Vhë±@°»6ˆ¢À–£×”v„7LÚ›ÇÌ;ðŽO-³M«–Ù…üߞЦ©Ûír”6ˆBÀViœÂ.ûk*û¼+'íêPÓLü:÷à#f3ÌOô~aÌù?F©/%~F} ­Z1Ï8®m%/²d%~ç]ÑwFôìÛaüÖaöß4©ü˜Š|· ž|¶  $ÒGõvâ7§ÐõNœÆTCª4Mé{h=Í4Õ1‹`®¿Ì_ȋ֘ƒ%;Žåº.`?¬Õ? Öï³k¶â`ÅZ°r¥.X»Û±P…gÞu¾dœVÖßëÖ1Ú†MŒ©Éc}ùîiûþF´èséÁ·oÎÂÏ?\:J?ç×µ†é½k®3[M*·‚!ø5Œ…°eøÕÚèN}¨÷±xš`Õû2^ôñ}(Ñ8ìÌ/g$ÂÚG¨žN¿ºÈÔšÊó‘þ5á Úi#‹/Üþ/Ø¥"ªÚ`îçl§Úø¥`Μí`ÙS°YÏìÀüÁ.Üì9–ª¼+¦tê·ÌjÝ ŸÇŒœ}zâýZãjú¯§…¿×»ðÿhsæüÎÑýÎpõ>3|£ïŒÄø+cM~êõ7éeÌõÃÞÌ5²«g>ʸ˜1T1Öœü?vò¼®Í<`L‰î!ï£]דuß–ŸiÍJ?úþv*‡gHë£*dôóMâüfœ|2 æe}Ú¦{6uüÒU{Ø:íºM‚ã6_}X¾NóÜ‹`‡ý+•Áï'íÎ`Ô¡ííÔÿÌàÆ¿2ÖÆ?ÃïŒX«Ù­YÅlÑéctL~g»4ÆÊò«¼bå5¾2ïúðXÑÈK_´†bmO÷%³Cï³U¿ŠÑå¶1ü^æ¤pø7ñ·úpêˇ‹& ŽÙQEÍ-;¡®@û(ÑuŒXV«ój“Èõò\ññè©´×ý%DîïFôýa3<ç³áws‘À5GÝÈ6lôÚÍ<0gâÒÿ¶ôŸ¶©ó,˜cM^ –n£ÁV³4Žá]jÈÿüÌÎKÞwÆž÷ ãÀùÄØµ@_ÐÈ`œ*3.gLxÍŒ•p˜q5íaŽq«ŠóœÑçɺÖñü æq3û¶ -j~·!û½g~sÔ8ÿí¼ Â…ü”ÆmxÞg}âá%H¬Ø„E=_‹¥¾ØNÜi0Ý/KªJÜ,šß„Ò{,¨´‘ƒdLÍ2ìíò~iÑö2TÒWÆ­dÈM{ðÿ±]ã _œ¬4L3¨NZëèm`Ñj#°ÁÄì8vSyÇÅê {oþ}¾v-³Î'®þKfŸ~Àsu}ûÌqÆÞ÷Ô_1ºd[µëÑד¥#o"ÈáV?áàÀyN1ÃåÇ©sOVæž>;Šë0É8þþãÆîm  Z;Üy -æðE€cé¬Ì»ö·ýصB‡ðIBKW2¦i'}§G$~ÕfO½è²¢JÚ‰Ë+Ls‡÷ ¯}ÓÁrºµñ+uèÇ,ñ¢/–Fσ§sÇ/Z±Ÿ­³ÿù¦ -cÆÚ B°‹ -VÐôx1ù`-£aô‘‘š~fN1fÐ_‹y0îâ_¾ùâßFüŒ¡o08Ÿ7u§†ؾkà8œQ1½7 /j-õ:Ù‘“éÜ&O·¸öáÖ0´áÕë‚^Ï3yÈhp_1Nf÷f^̓弇?ôñ§ïIìî ©ðöo˜S¢šÀì”’‘©`ÒcJ,' ñ÷½3æÉ-{Èkß8Ò×­NÒâ'AÆÈቋãM“TOÅMØkr -,šµ•ÑJìzºÂŸv©¦(Á¸6s X±CvJC4âûfk>gÖj73û e¤ÂÜð?ºü¨ßšƒ-†_Ä¢ïþ¨¡¢qÐ ÷Í{õ›˜,9.nlõ“T¶{Q÷‡ÅØù´FšFÀ`÷.@ -H€®ç'Wnå=þ‡/¹tÿ\ð$´Z˜X´ËÒ%î -„‰õÛ„žI3©€ôùâà¬å”¼r¯YN!}[áb^Y }Þxœ.|/¦ó;ùXNÏAL^±Mrc±Ñ™¸ èû¶iÊÙµƒ¾¡±œ1e˜¿Z¬5r{nŽ>x—YcÐϰ¾<ŒÖè ‡ʸ—¡y Œ¹É­¿í6¶ñP106úÚ`Ê7f®hyÔu‚•OÆr:¡bú`ǘv,š v/ö¢cÕl «µ`ò¢­¢WMGˆ'Ý” áÍ&üLÈdöúóüAcöšè£c +çQˆ%K§wëнºdô‹ÍDf¯¶øFEÖõž•´Â®þv‹~µNpç«!^Wf˜Fæ-2 ͜Nj½µ”›Õ¸•›×¿[þbæš9wLT£\Òf׿®×çÇC&êk½û߯+>ˆ%ŠB©…"á›4GX¼I ³Yòf+žøp‹0åõ6ìê€6y¯‹ÂŸ½§Ùë*/%/"}ÒçáyÃz’'õGÌ*k|¬ª_‡šU”yIŠêÏ -®è }˜[ì4®ãÅñ†~9Óu/½˜µß*Pií LŸ¸¨õ¬CWnäM¯â):mÌAÃ~†Ä¿|ôŇ~õâ¿fHÓëŒ&Ï3išéaØ—Ž…ÑOVãþó P&ŽL@LA  »màÐ4y”Ý+IJã|s—˜;Ç̤¹ ß7…~ƒðKž‹É+·aá÷WÁ+È‹wVˆ²Û ­rê$TBånÊ-b:ÚƒA„Þ\gukÉ {ñ¨'ë…W?jKòßâþúPi[Uˆé¿k -}3æ’+·`OFH³¶² óáw2ê{K°àãÂÿ•q„ñì¸A7ƒ2; ÎåOÑàZ=ña“ä–µdkßyºªÛ‰xüžI˜zð€àñ-»G#èéJ,äñJCì\¶ì_½p´4¹ØJÉÚÑSÕöŒ§šåI¯)R×ð™xÚÛ=è:_úQ³9vÿ=Ëÿ¬ÇÏíÝ/¼5 É_BÜìæ¢ëj…׿éò»¶“>îÀ¯ÿݘŸP³ ?Ÿ¦ŽwK¸ÆNd¶ì!®cùúü´šmüè׫¸Y}Ûy÷]Þæ 'ÿÇ.ãëßn|Ùªû†Ù­7Äp aÄz#Œ‰a3cl\Êq^2F¦e Å}ÁG©È·rUšŸSæáG5wkÂù·€ùîmüBîBÂ3a&韽íõBûã©K—— >ÕÛçîÇ[ò’O¶^M³,+ò]ä¡ÏÖ—ž¯Â® kºiAfç^áÏzXAŸ V°wš†yÉgòÝÓ¦ó‚n/àF—®à:_U3žSÔÅŽ+‰]•¸¸£¢1ÏZAè¯Ê?5Ió,­¦Ãºiƒê| ½ç ÐÞ½˜qY1Wh®€IŽ*±º8'/NÙSÁa[‘þ‹ôxà$ÄÝ’œò™DŸtŸ€ö S9õÆ’û5VâÛR,úõz¡kÚ Lön?gH¸µiuñÄÇ1h«¢û]–â‚ ~å“êG,¦há›5w‰T#/æ/Eì@ìÁ)÷þ/:¦_uLï|?hšÿe¿ äÖb¾ÿy·äéÂãѸ!ý1ž ½ùÐÖgàA÷—cgC&!»Ço/FûJ‡Ï2‚y˜!W„"'%Â;k.žÔ¼›Ln×@ÜlÄ3byBm¸ðú.ÚÛE$×ìÁ®´jb9íÚh¿8} -á6—<©†Ÿ ŸŠŸ—MÆÁ8Ÿ;¬!H«ßizmHCxoˆ‡½ê•Ïz%øËsªèý!ìþ€ë‡.þdHÄ¿þ«f0Þ„²Pà™ŸTBû·ðÜÏ’'MG̪ßùHË+=ˆ^á?t7ìÝR=Á!°V})X3q|œ tIÀ·;?Jpäü(S«“ʘ͹QéYe -°úÏýÛw³zlØ™I„ƒ×x¾…­"Šô §qbÇ ª¬f”ËXÊê„2mï4±è¼žøv‹˜(è1Å“æâÎaª‚ì¦ÝÄ•^=Ä5$Î…N¥Ý#Õ‰ì&mÉãR[«’'>vuwcÌŸWž!® é¡=h”ï­Å„¬avoy!s!ýr#~{ÌVñó¾hðãË6˜ºÆ©ò}®Îæ…¾X"8#Ÿª­ë…­{ÀÞíÚ@s·>0á[+ }–ücc·._–Œ›–NTk§Ìû`þò+3ïôE¢È;О<É¥ë(yí>³ÀüU´ù e¾¤ô¨2Ë"DZg¦ˆ|cæPq¶ïö 3jöÀ\zARíVAÁgêv?.¸Ò±é(§‚'#Ý<úÉz,¥i–Ö´‡¼< ÏÎõðÛ+‰‹—a •ÛÈ›¦ÄÝN![âU·ù¦ÓÔKÀ˜¸óË'8æ7–‹UÔÓ%€®pçÞÎ{ ~*r -îž=q£p[ÏÑ\ÂúŽãŠøé˜©Ðæ~ð³í[!ò†È ‚Ø1ϱØ)ÿ „w&Œç·a>?ƒp‘ýô‘á…k°´ª=DF»q½Ûˆ¼ñ‹çöé°¼í[½ânŸíÓf´íÆ>_ÇÏÒ@û€P-‹®ù&ž I—Göñcß­ãg}݃Îw˜,<á>–¹³B˜3¬‰]ÑBÜL,ôör,èî2¡¬t#?«o7ïú÷'¹ªÇlY±¬›¶ìXºìÙ¸ê`¹_ôО0<©~êCÚ'jre‰ ¥t+qkÀ”~Òe-¸ù›?ìåJaXåZ^æÀÓÌÁÝ‚Àë xÖî*<ú¤¢¡ÐZgyNsˆœÄ?â6jצ`Ãüå`Ï6- wÀúM@‘ˆ /¾xm¥$­TW”Xµé®!âò…R`Ê%«‡é3 íõGÜ:øòr´Æù„‡LðK'LkÛƒß1Âò?êâQOבç“Ô x ^<éªÊîÉóÏf󛨷›X®`Há*,îùF<æÉz"0tk©àJ÷~¬ ŸCôñ°Ë_´±‹w– ^_zJ‰KVä›»(cGƒÆ›"Ýúg¿ñˆ©'0wQAœ=ÄÄûŒ!=ÒçA…+±„ÆíȾóæó‰S¡“ñ“A“p{¯qØ1·1ˆIúß\"LiÙÅîAŽz¸N˜^± í­„ñÏLr¿Öš.l‘H_Ôœ _7Æ úM…‰å[Hû…W¡½‰hÿñú½?ÿ«¦À#M]p&fŠÐ7{® 盆 oH å;Ð6µ¹_´ Lxè” -ZÓàŠ­YN‹¼r ?£qî™5ÛÔÜYYk¯Ø»v8¸GÚ%p8ˆ­…6°¶tð™€;¸Žã:¥Œ4(YÆ‹µ“ -î; -y¼1}×Uê3C|ÈyŒÙ!—±"ÊZQrÈy¬Ô'k1™T¹±ž÷HTǃrcY-û‰Œ 2·Ãís¥B¯­Dká QqëqÑó¶Ãäõ^® ·Eƒ¼˜³„ôЉEÝY-¼9bÀî]~Ô'ü뎆ͧ˜©˜S¬*–9´_˜=x+Ý* ¾³ ÷L%¸po±ð\¢š¦&ìX¿èî3HÇi} ðÆÔF‘e~\eÄ1§Ñˆ™ÊÚ%ô›dLÁ:"ç½–U¹vòŸB9¸Ž§ýçá±O6‘×ã2øÿå}Ô\í9@yËç磦Q·–"­ Ü5z鯎â$é•8‹e꜇õà9˜‹û]Y@z&ÎbY’.±Óñ®cñ~ãYÞNðÕì£cäTìÛhÄšGŸAûð£JpØuÚ'x{TðýUtèÓõ¸ƒßSÌZ#0Èž±ã¾ã)Ï´9h¾ò?j néaWû´°œaaFû>êâ­åˆíŽ8Dv—6b¬!öžø“aåuëQ9&dA‡|Ô)!vP‚«CšDÄÃ5ˆ;‡â†0ñíìö  vó“0®l3æ‘9 ­« ãÕðPè33Û÷¡K®ß…ö#ž?bG -Äp®YÚ+aç#ÕÐÚ€0«k.+Ù‚òc¨GÃ:HÑ€:<…º˜½±))¿ì°/gPçb§¡>s#0;«Ì·:®„4;ðäšÝH«1D¡y«©¨§›[ñ>YƵwÖÄeYÚ0V’Š·²Z÷Âù¸›ˆ´‰”¿Ù‰§Vî¡/×JòTv•q¹V‡Èí×Çoõp¨ÇïÍèºzWiGYˆ´ñ?ÚoQô™ºß"B>—ðˆŸ çîVâú€1Ú‹‹ßøa$ðÈ›¥£‡ƒý;¡}È"£G‹Ìé1@|1Ì;s¶0¨p©Ð1A墺ZH³Õ ¾ Ë Ì]Îê1Ú¸¦O†NaµÎËf ¦<ÒUBzx(ÖIï—¢o6†°<_œ‚˜èøµACÁÕMÄ6Ûv ñE,:¤Y@ƒuåÉ “ïô9„/Œ³°¾ ¡¯ Üd3(—ˆi„[Ü ÌÖGŽS ÇHUâlÔTú¸ïüdÀDÆ`¤‹‹tCXPñqEÒ9zÚߊeibÙ]ˆãAù¦ÏgµŠÂa#/ÝôÅ>ÒåEÚLˆ1D:úOF âÆ{cúA«X|§YBÝh 1£ÑÚ Ë -¹¾’¼¾±žp٫͈=ƒ´ApX'áùÃXþˆž ³cš3ˆaF!ý™S^(ßäy(oÁ®ô$n.Aº»¦°–A5Ò"ƒ®.F6ŠØq±¾ùEÄ|q%<ê9÷ÉŸç¶uñÎ -Ï -èì×Ʀ4À¬Uh¿”ùˆ#Ž8@ÄqïñH ñ ‡ ¶Ž*zF0!í`_ÌCì!ÄtÅ-N)#– Éò³¯.aY*èñbÞr:({z{ ËJ ¾½‹{±‰Õ¹Ü­'¾ÞˆYÝ}cgûàù‹;å6Tv‹Ë£€cMÝk#ÄÅÍ’®Š‹]EQh¯b•ˆoÕ“h_>ÒcÊž®ÂD˜R¾CÕ¿OúlÿHÀmMØ»f'0€5b:±qó¤ÿc¤G,9¡È³<£lĵ‚~Ó -VΣ{ÊZþÚÐ,©è ËN;ê7±¢n bè“ÎQÓð#Ž£QÜ–Ü­–ZÞ+?JE?Úˆ¸tˆ©„É_m! -†ùÄ/Þ•/»‰€‚%ˆaO„œ2æéFÒ1JÍTl£€r=2ðÆgQ]-°<®ŒØþØé‹#;>EpÜúLßñ¤=ôuNÁª4âMºÈg -9©˜˜À(¤â$³kОŽZ{ÄKÆ¡Ÿ§Is‘Žåä;™>¤†¸Œ¨]H±¸é ë+¯Æ0ÍŸŒ¬+‹ëé±Ì(ǰiˆcˆX¬æýH_€Õ‚Ezª±/· ¼‹ºÓÁŽ~Êg‚ÐÜN 3?öS·1–a¬¦Ôì$¦qEöЦ$ô„ië2ÅÒC> w šÌ3³g5¤Ööl? Í3Só#Š,gÃ7sŠ(Gáðh€[žTAúE°N™A{EÏBšX(ž#VÜÞm,Z'ãÑGaŽ  ´vEœ ›Jr- Ž²œ" -±ò=bÔ© +KaÝ~qÉËúDFµó`˼‹¸»iv"í>ñµ¡å³×gmž?u6»Q#eÙ±¯¶ 9*”¿ÞŠb9ý¬Ý’.é8öé¡q\ s èËŽ(N10>¦Ï%N…MFkU¸kâ T# ­4öƒ]+v&€o}NE qP2€µ«¶>æÒ0‡Ù±úÛ<¡…br#þ4â—"ö?nuFE€RÄ-O«ÐÎáÓˆ›+DÜ&<®l›äF#-¹ÖNÐawײìBÿäøµn#úQ§þäÊô6£‹_¼·Œ;HŸÌU>;|FŘÇHwí«GpüC®£ô øùEV§ æ¤[Œéžã6'nsLq1Y½Jh_ˆ ÅЀ°<ªLŸ‚6æè?…<ç’gÒ¤G€ØE¢ˆ‚u,—æÐ¤¥ƒ -Ë« -/Ü »µq¹fiwbâÔ‘òw»è°kß𧾡çñ©‹S^7Ò×ÀSËv“YµÚ(7CÌPV7Û+aâ`Šn·ˆ¤ëŽˆn5‘xRéN4‡‘6ûé¦"f*á3°/´>«‚´2(ÇVcÙš—<ÊR;â<ŠÕòÏXHœœÄ7‡ù ôwˆýKÀZåNQjˆõ.öÍ[ÂêÍøÉç"Ý'VÓµÖ-ˆ•Ž´º0F ½-âô¥ÉĹ5VÃÀ;mžøÂÍ•,O -­sÆÞß@gÕ芯6ðDéõº¤ìÉfd—4<Ðwæ(ž‰E;Éô -MTŠr:9XVëÊ= öSÌ4¤)#LmÙ…å~ÖEÌ AZû.übÞ"Ú3y:7ƒƒºp>‘€80;â=ÖTt\³u…C}á¤bÀ¥`Í£ v,ßv­Ût4—ÓRgqL wŠV%.ÝXJ8†MEœxÄReu„‚TÅîQH»o*Ò3çrDqŸX}6ħ‚þ]‚bb QuÚˆÅÌú¦Sî„iU»YþÏó âÑ'–ܵiŽ!“àÜP4‚µ—‰) âÙÚÂØ—둟ÔÓ}}.@zWì8…OCºS¬ŽÒd–Z("Þ±)&ÚR±¼YFô · ”ù±˜ÅY–)ý!•\¼W’úJ‹Ž|¸Ù5a{FñÁÈ„’]dZÙÄý¢<Âg°¹VbñN<£|/ÒaxGÏû§/B:’‚µˆuˆ'ïçÖóñœ=âô…IBËcʬÎy`ÊbQDÞ¤;Hæ yFl¬ÏnÓdYL×–’vãÈ£žã08ÿøp<Wš -{¼OnÙKGWî@¬8¤£†Æ ­¥!6yõƒ«y -ý éž:›ôÌ˜ÃæëáÏÖS)tF—ž$£ÍX’ÑdL¤WïGZˆ"ç°i”_æÄ2D=t=âÞÙóØœ#øþj2®l;öá Õe(ɪçšg×òE—ëŒ?Îåõ"ߤù¯¨Ù¢èÂÍdF™Z© ms›“Á܆¼²ƺU,OïxÐ$¤‰‰§µì#s†Œ¨¼´nÖIšÌ\ÀÆýSÐO_¼¶ ­Ïžùó…Ç/ŽÇcT1‡Ð‰Øa—Q\ÒBAsßA°wÏ€¾â`‡–;bé­ˆãËö¬ky|à6ö*H£Býb«v6T•Õ¦…óõ…8»Æ˜Œ·“öŠŸ8òÔÿIìz§_ -Ì»¼'‰N¸ŒƒÏç³¼¾Ûƒ\âÞοöY›pœ†˜Œ\ÑÛ~êgC§ N:y±`ò H;qé)Ûã*fqs¥^i ¥^ñóP †["?n¦`dl„”¹â1¢¸‰x[ˆÅxøÍI–?y1o™(áõJ^¶é²"æ(«د0¤‚2– –¦ õÕ6êv+&ÎiàшÅ-=ªÄjÚÀq1Ï« EÙµ†Ð¯î&²›R×ydÄý5¸£ßDÄð'ÏøMBZÇè‘<á9åæhíò»¼1ŸQk¶Ðöü(¤±cÆÄåÃ3û5Éø†]І¢ÚvM›Ã²ë²›´…éµ»QÍ‹4³Ðº»³Ù¼$µQ±ÞÈÌv-2¹z?Ò> »Aº~Hk†H¯: Ìn܇8¡hM„õ¿¨Ÿ/\[B¤¶ï—¤7™ÂÏk#îƒô|˜:euZÍ{´æ$Ž,ÜDdÖhŠsêxf9õ„(­VO*ß…4[©è;ëëŽò¿¾„Õ½ºpw•(»ÇˆÎûÀ#.ÒÁ2»öS·—±ëÇò–°|»üN®´°ÚF|·Õ ,ZÏ~q*j -æpqªuMa ˆt×¹ÔaÄA¤ÎÊÔhø÷YŽ$ÒŒvÇ')ë XÞ1ÒVAüBIháFiÀ•åÔÙ©"‡à)"7ù,2µá€8£NŸŒ~·Uì©Î²Q|E¼ëÓ>“Æõ§v–ó²[]<ñƒ&k–©æ“>ï/í,”GáâÓÐÚ+Qˆ)š¤ŽÚ+ñH›/9­Ž¨R„yˆ‹b-«¹ã-ââ³Zx.Sé˜w;Ä) ºfÉu†"y¥«å}2p’Ô5n¶$¸p=Òø2;ƒ46Îeu°áyIœ²¸ÉȼUÔÍFžèUôEÙ Äâ6Ð4cü'‹;«RWrµÚTt¥ÁË,Ùò¸QM™ÑvÖЛsÕ#âÓÞ“0K˜[Áü—Õ^„uã bÓKü³–¢XxÄ¥;Ëqûà +'T÷ ý‘oþ"‘÷µE¬Æå…k+P®€˜Elqg5êCd[ê¸"ÒåCö/N©×‘¦¶ˆƒî¯Eù¯²Q0Å-7æÒj€q™ˆ.dëúL„*b\Âþ…t Å©°¿RZÄA×#Ž:ú Å1Œ¶S$-NªˆÏøMfœñO¶IÒ Ì2j8ˆ¹‹8ÏHïˆþ,®l+«‹àž6±ƒñÔÎ}xô»MDà½åDøKXS¬$ƒï¬Â®´hHWÚZ=î(yRy˜}Dz¾žˆ(Þ@žOe},ÒœCßÓ‘>ióкÒG@ü;¤ÝAfuDº':†@OúU>óPs…¿ôæ$¾“Û*(.²ºY'C§"­´þÎjعEóN|Æ{2ã b¬".7«ýWfž(¯|dÎCaÌcvÖa¿q+Ge¤-+¤Ž) É£ŠˆÇ-9á?Ibç=iœ°LYK§QË´õžÀ2•/å,¥Ÿi@8NA:ÜHgFšÞh‚4VXmc‡ÀI¬n¡ßÕ¥fŽ¡ÓÍ{NBš*¢KYKÿbq‹‚®.Çò:õ¤J™—½ò îuÈf òÀO¦Ä™Hˆeqß\Áêa#?p¹]Îoå™]iP™tH£Yí,³Y!7ùl¤%”X³ÚYâÒÎæÔFõ!ú~‹cŒ±¹ÒOí¬V+€Õ¶9ã9iS°Úð,—6{>â?#ÛûK;KœÜ|No?ÈÚ1œã|Ò^Qm iͣψ‘VÃùðé(Ÿùf,@çDòKÙ¸Fúò’¤†ƒtF§.Ò=À¡ÏSÖ -¬~ Ò Ê]Ž| ËA Ë_CÅ>Ù*J«ÓA\]*«S1‰ÔÖ0æ±Üy,úÿàÎÏùî|v®¤°Ýʪø¥—øj— »¹Š]7D:þWàŽÑªìºbXáZ"þÕ6´η9«ŒXÇ4ÌËQ\—d5qј£ë­PÎÉê#\¤‰(¶Uˆ­Ù\es>9 -é"±z5HÚúÌ(‘=´›sáÓû\tµÝ„ÕÎ -€}û—vVÒ΂ùƒ÷D±OÂ\ÄŒ•¸Â¸÷§vy,`<æÁ&…§¬I ü¿Ì,•(+{ÄZ&¥Ð6 { Ueõñ`c×DÎNÆìŽ(#}&Äôf¹×ñ/¶±,n¤³ã4:ÌN\˜‚ôêÌÜ¢f‹/å­¤c‹vRˆÅœ·é_‰¯ÖsQŽŒ¾Ë"Ü`ÎtÜá6þ§vVÌ<2·É­RNH;K -x\¤gâ4ét¡ïÝ^ŠCbûsãþÔΚ‰´³X^é_ÚY6nc¤îéóEQÏ·J}ó—‹axëÿüyTÇ‹Ò#æ6«Ù‡r Ùë]’´×Úf®­¹…Í@Üg¤÷ÌjÁ^¼µœ¸2¨KçôsGiÇ"m<öó0v¢5Bþt«èÒ•å?u×O)#­D¤?€ÖÑw^& ¸´¢‰@x”­ªÑz6G H›‚>ƒŒ*Ú„rIúÄ…‰¦< `bLcÒCJ×Rÿ”EHÕ嬶)Š;n®Dk¬ì…ËÃ]S€jVìz¿ór Ò›GÚYt­$e¦ˆ´³„¤mù'V;Ëþð@Úï’³!jbGß)fǜǛÛùMD´µÃ(Òú„Šè8ŒŸH» úd:({)Ò@DjìÚ9Ò5K®ÙO%—íCú®¢s±3¤^™ ‘FQ¥ƒò|ô=Ê©››Õ'¼”º˜È¨ÑD±…ÕH¸óÔ9ØF¤Ë‘U ó­J-©‡l®ä¨×øÿ½÷ŽŠ*ë¶G fÌ¢¶ÚbÀœckÛmN ¹ªN¬D@’EÉ9KŽEΈ€9çœE‚(QÌÙŽ_¸÷þx{îÒï~7¼ñîã÷þó8J (ªÎ9{íµæZ{¯9­}2GZ¼>¾jвªN¦:Ð$Š•f -p'ç7,¦ÚYT¿ýÀ$yþMªÅå=XJµ³‚ò ¥m„¹(¹iñ!{Ç€«›jSﮦÚYJè'C;+\£¥ügí,·¯ÚY;{²VŽÚrŽä–ÁíÀ¼ÐŽ)~oèo“@ L¹+†ÌÏÌQÐV OòÁü½µ“¶\±¥t©€¨îþ>ñÔtú€¦Á%žãʉ¹—¢kH_ªOæèÕšßb@îHEÖÍùÜþWF²’Ö¡(·vÐÆþry W£y‚«W/…­ö¦"c¡ 9¹]`O¼ÆÄLÎXª6k ~ICQGDüAþ†÷E ºÓò-ÿæŒä“NLƒ^´¹ÖÉ£2x›sÜEüqúH)¾z -´|)®$q[€?‰%>—ä2‚OÕüÃ~+yEÛJaoû&ªŽtŸÞ–ÿÐÎòþ¢åÕ[Eµ³ÍÓ.,vÄ ´”ÙtùCok¥JÿŒRòV‘¥­v„S}kšûg |ìùw—R½‡ KC¹ì¡W@µÉ3G~©{퟈8Èåß[&”Ô¯e‹îý¬È»¶ð´†ý94—)ÑÇuñçKû¥¸“3 K*ím2ÔZíŠÂÙºtW9ù÷!ùÚh>·f0OrY¾¤F;‹¥ÚYM? /ŒÄ}íæØƒŒü€ja¸‡öSØõ´pðÖ‘;†÷úª…ú4¨¾Rl©”tx¦–:ŠÆ÷°|}>õàt1ãÒeܱЮ݃úa¯æ8ê&ÊÐb}.ëÌ<>Ç¥T7&º@¯Eì¡Ç•tjŽr÷ÑiRpêHøb¿Ù±;ô· sÏç]XÌ?^ú]s‡–`hñ½êÒŽ´¡TÃÙ%ŒjݫŠô…¸² X¿`‘»i–ãžrÑeúœ³oKÎNKfµE ±“â_púû& 5ZÇ1æ›»q¶~=”®1ý‘ß*ýSG@ó>™O9:]*lLy±V±5°|>ïÓ±P®tÓ6³ÜÜÍ {~Hì–BS}Oc$‰kTg5O’·aê¥ý’ª lê9pë/FÎÅfž›¥oÖªœ?qÇ*:Ÿú)ñäl‘äªÐÀA}S£)œ4X£CEb(pjúùÐ~ š(Ðà!XþXûN  ûB4ƒq¿¡Q©OͲn-Vĺ -´ã¡‹.ýÌlj›Ð–  ±h’Pðpì“/µëuRy“‘MUƒÀÿ ]:Scè'ÚkQèÈ’±Âö˜XÓǘ°n}°.Åf\š«È­Yí,åþVVñt´³¸”CSÑóÁGUçƒËFƒËš¥5çËS©v´BPÏJ öSN®‰\/´³"4ÚYBÖÙ…\Þõ#h½•Ä|epÞŠ5‰ß‡f ð0›saF®;¦tœU6ŽjÍGUH™çò9×~ º¶XsÙ=HLòhøÅí›Â×®JÖ*JkR’÷J>5zvÐù€Þ“f–Ò7w$kïª#$šŽš†t𑸈Ö6ö´­Ü\DõHŽEsø“3„ü{? Ù·–'™ZØ0 -ÕÎî¼wÔ|$°þÐA•œ}ú(wÅåK¬¶*«3£Z2~izÀ -’™›‘|]Fl›U2Ð0BÝz4¨kP FuNú(ƒòFC» 9ŸR<šBTåxô˜Ð:Sø¾ ìõK· >‚GH?à0ªClIL<2ëTã}[˜.·Å›â}`01úØd.çÞRÔDĨòñÐüFü戃¶î+òQêÃsFC³šö¹¤ßZHõ‚|©ªÒ'aÕ`&c*¤“¸Mr4à}ªc\UªÏ‘{Os#èáú’ë$vúEÓ]—O9>5 éX³¤ç¯­41æ‹'ÉûÈ<ËÕΊ,m#s*÷2ÕX—"öNмoÙ÷°š B‡:±z2Ÿv|&—wu1±±%|æŠYhÍ*qßT¼Õ†‹&vO>X€ú6èN‘9Ê%‘\¾¬q¹x¸Q¡8üÜH^\»{ì°æ.%œ™E÷Mú„ ?²´9s×ÉþôywÛ#wìU•õæìžºU$Z‰s†/’‚ŠÆ±$×@î}l¹öºñÁ½ÄèÓhΜwu©è›¡g©rÒb ¦¦Öa{ô¡»ÅûË8G-™ÌŠ`CKÆÒBŰö¾=q]lÎí…¨K|²§¥\Ùjy’ÏcË'@ß -û—¨&QâùYŠìû ¡9M9Úç@rYÔ¢8hmá~ŠÉggsI'¦£–Í9õ–+=ºCGkèbô‘ÉT…®õB“ª`,tÖPÛF/™veÖ¬¨æ!j˜°‹˜3Ó¤ÈСV†–ècÿ ¯¾ªÁ–tUMR&œ˜ »§czô¸Âó¿GíZ(o2$þ{ïª+8ú÷æ6{ꈻ҇a_w°ÓDy¤Y÷6›ryõ?RÍÔ¨îô©9\ÑýŸø‚û?K±Õ“©¦94o 棘5ñÈTì/„CsFA‹Ëº0_±·mµ<ïÎB¬ïb½™ö:ºDö¥1)áÐ4øy`)Ñ'rÅ)Yß)#Šôéšñ« åYçfãþ@gù¼¥èªý -ª©Bâ -õyÑEØÃ2™êẠ~¤1‚Ì{.éÐŽàs’·Ìž°à‰"8”uè‰óÆÞ3®²}4¨[Ö-ãÔ׿c. ~qñ{&p%-«°×S:ÔÌré×P_ªÌŠ÷¥>†Œ%ö^Bï ûhÜCí -yÑÝ•ð©tmÚÆNy/b,ÞŸµsÓÁž Ô¡SÄYo×±´°Òh"úg€¦ -® kc¬½SwcÃÓŠŒ°ØÖ˜½S†hôÌÏÎNE kÀŒ¢gxª‰Eb40ÎM½o²˜yyê3b4±?r~RÌñ©¼OÆ0ì‰à\ƒúˆ>б$ïÿXðâ¤-{·À¾¨_ -—BóˆêAk Úpþ9#gÓuä 2¾Ð ƒ^^ÚÑ™À#T·šíQHŽBõ9°v_NµxŠj–B»Có=äªÄn ¡(nûYQØø#|ž˜@°t•kSŽÍT”µ®”ª-¡ƒµzªõµ3n0Ý{‚Z#öÅšÂG\ }cü ÿÝ岯ŸdE÷P¨¯Î£k:Þ$vÀvÈÓèç¢ë€¨G`ïp@ÖH FÎÿûäEw(vbª&Êm}tdÊíÚÈ% [ÌM8Î?•ÄõpàOû­âª ¤0õ(ºV¦>=—+®ù™W_[ŒuzÖ6°‡)ïÔM¾•Ä²È -}yþÅxº^Hì!¤hæµG_‘zhмøÞRyÞ­Eòœ Ћʹô†>&çêÓ[Œ­0 úpØCV=^p"1Ô5¬¯ä“=Z…"´´ å+ˆ=<6Ir®~X{ƒÞ”èîÛ—ÛÓ_Ü•8D/'>ªh4­ó‘œ‰æäïp /mjdÁ˜[Êàhä&Èwqß“°ÞÊ›å·ùö¦¶ irÏÄðâï±—GØÐGB<Ï<·xzZȱgKŠÚ3{70¯pX/½sô;ÃGRÝt¯øÁtÏ´à½S†’86”Æy轟ÂûfêAÓ™ê c¿bP>Õì–€} s‹­_ܪÕD}ðÙ¹Tç5‚C1ÇùÔ3íSâã¨Î´bQg'sLÜEî]8±3’ŸÁI4ŸÍ¼4ãLÈæ_Z$$“÷ ×IõÄ  -ýaÔyP'÷ŽD×J &‚>›XñÄ}t¬7ÁÛØKMîÛîý“ EGõʰNç?y´ë0·é}€H99îŽ?8û]¡› BìÄü¢Ü[ø+eHÑ÷4.%›I5ÁÉ5ó»KÆS;«œ H9?]‘xf*ç9xŽ^ö½Ü_ŠùD5¶Üu n±ïÙϲÏMø}Ïùª#Eò¡É¬Ã®èþ#cg¦ÒùíA·˜þô¼é¼>=»ëÛñíøv|;¾ߎoÇ·ãÛñíøv|;¾ߎoÇ·ãÛñíøv|;¾ߎoÇ·ãÛñíøv|;¾ߎoÇ·ãÛñíøv|;¾ߎoÇ·ãÿçÃÀ`í¶-klvØèrt Vn\hE~¶°Ù¾ÃÎS×D×ÀjöJÏkmw8ºm³ñôÑ_Ч8ãMòkô—êOÙdãcçi5Çj‰ÕTýõ§¬Ü8wŽùòÛ©ú3ÈKçÌš·@¶…‹þÍ›ê“_ë›z::8n#OZÚÚ¸Øi^ú#yèÎ\¼hɳæÏY¼Hñ’¹sf-œ·`±¾ëxú‡æÏZ0oñb}<­ùOk^ðŸŸþÇ›¸ü÷ïí¢»U—Õݦk®»DÊT}ŽÕ•ÿÓwä~ü€û±ÊÓkûV3›äü·iž\eG.à?<=E¾m›«Ý}ú¬>yZÑTÝ9ú+Ƀۅoìt½È—¹úsè?·ü`H¾q"OíÒŸ;GßX_TÎÑß‚×[³]F©?—|ò¢y¸¶­ÿ£×ã6|ù›/_~Ð_@>}îô.-ÐÇŸÍÑ50 ç#]ª¿`î¢E‹u¹}6ld™µ«™Æ,cl¹¥›ë …‡±°YËTnÓÍÄܶ›±©}· F³nch$2²­Ý,í‚{ SfØCfÐÃbËN3ÉCkíJSfù² ÌÆu ½¥Í£ÉÇç áÍq‚k`J®A¾ŠN¾½Ew¯¤Q%]ÁëÑ\µÕ»—`¿½‡j[d¥'ù|¯øÁ [aÝûRÒ;ß–h–V¨ºÉE[--4Ý⡃fI4Dóvž=@n!繋6ï™2B -G¯ -OJŽr1Þ9 7AAk)³îf)lîÆhÀ™\¿›o) y¸·ª2¤l,š¬Í%Çn¬­—H#èµÇT(Ñ@¼•¼^q?=w¢äLAEcÄðÊq|Pþw¬WtnG2y>mï“6”uée®Ü¦ BZÞ=¸% ÌI7¸S2ž¨Aôž )"$ç;4i¡1€nÄ ù…•³¶‚·Öñ£™ÒA á ˜65·ïffaÓÍÈLb@&e‰¦ Þ…Uoc5l1hŒµ]µeäz¶äž’ŸAò¹vÍ&³ ¬e£úÈcúÈ6{뀔ÜĬ¦6ŒLå¤ ROCKáÜöäAæ¶Ú†Æ³j½)cŒÆ]Ÿ¶¤üŽ”Aœkd?ç¦ñ sÕíäuWƒtغH˜p [²´ÚÙUºwgí½{HN!}•®ÁýD¯èVAi°¹±¢š6ÒËÈõ’sнS‡J…£”¡¥ú iPîJ -âIJÔå7öûìê­pÜÕCòËÿŽÜßQ"7‚rFKê«KÄ´ó ”AI#ñžØ¿Í»7š%(éJx%Ð-ä…Í[ù¦Tyè*=½û*½ã‡‚Œ’Mlë2 Öf»ˆAp£°rÔfm·éPÂKçà>œgP?4Šª³G£YØÞ_´ìMÉB²F¡™LòN*¸öa·nïÂ1ÚdDl_á°­;gç¡2 Ñ›ØÆÎèA PÆš.&Ÿ¥Ü•¥'¸õåÜûÀÎÑ ¢%4¹ÐDŸL=ÚÀáѶ)…”Ž¥„^Y7òj—¡A“Ò`°áý,•d,ˆ=ЦêÄžÑXU>$T¨n[@ÚDã9XZ4–÷ŠÈ;íêE›dÐÐKÆ6Ú»èð%£x×ð¾f‚Öº†ÄG®c,X2ß”;»[îÚ2Á™ŒåŽîrò°œ´ŒMÆÄˆÓˆó¨¶iS2»]dÎÛv3“«Éâü@DËm ê‰Æ"Ö5ºÈñ>fò-ÝÌY‡n” š\š±ùCx‡°Þ–JOm|7Ð\-:‡öá'4!jšÆA¤ !'ÎÙ§—èÙW&¹k[JÄZ¹uÂúJީÔž ƒ%×€¾’³Oo4Ùª|“ôx[4qøö@/B›à@2>}¨èJ<ä0TÚ7M•”$pgæ0:NêBÒ¹ÙhâD“9šlEr_A®A|/a”Ѧ(SÎÌSî>0U¢$“”höéG} ñŸš†dⓉÏDìŠ6Ü’±âœ}{¡¡6£Ü1M¹´±M3áãÑ´Do½¢Q{#~Y¹3aˆ´#fè¢ ?‡÷¢„_sÿ$ÚKØwï5PFî3À\“¢*&‚¼KÓ¸X56¾E–•‚ FƒDHV9~<‚û !ù£ÑDG¹£ËÇ‹hVDÃKPæHÁ/m%61¹KP*ˆCI” Æ  OL.z… Àüa-ü*HÍp® -KØ#‘ˆÏ€}‚xƒspÕA/`W†ëLÃM È©d±Å -Æx“Š‘ äï‰ORØzêÈ”öZð?”PÁÁ»'ì¾Yf㤭°s펦n#ScÎmÑbíüz°ŽÁ½AØ‹Ïq>lLaí­ƒ&fÌ-4ц-·prÎ 8\Ÿ[d?qgâ)0d⎤Á ,ܸf=#—\´D49„ö‘[{tñ%x%±—\_!9ûöùƒè1¾$ªœS@o4[J1%Ð ÿÛœ‰}’ñ¤ ]Á¹£@8„FaÞÁ¿%FÛ•J›UQ•“h87É?{¤•¢÷L$ø` È’¤Ø=R±ðMRìÁ)ðEÊ]±ƒAòÅÙ»ëІ42€-Çí=Ñt+ùÅ·Ç|Ò†à„¬¤ñ0@†ºIhÊT†[BÃ/&Éü¡¤v”@Žœ ìÁ7CdU¸&Ì%4ÜŠ ÇgÐf⌫óÑh†Æ84pÏP àÂ1xo££™–ó@ScH?1˜Øñ`‹±A:­Œ®6P‘ù¬á˜KhÞÜ£úƒŸ6óƒTx{TÓ}ÔÃ1WØmäÞ»ùõA"õ©ÄׂBnãNÆo+%<†¯£çñ ƒxÜ»[rªnàI\p -êâ\ÖjGw~³oFìOAü¢\rÔ~AS&?@02];àA±ŽŠØ¯{t?Jp¨Á튄¦n9Ár;ov[L?jñ»M£O¡„v¶;txâKiÓ+™“VÀu —„ýzåè¡1ßoœ%M ~’³öÐQ(í4„ãäZ—Ñ NI \¼)”\ƒûÒXzÝzÂGz“XD0aHîhjÏ ½!¿ÇØÃÒ×îRë ,…ú(ßœ‘´¹‘Äo`;Œ!%‡ $8Î'M’MyE”vÆ ¡ÄNÄ6à£hüõ$6ƒ†GøXÌ¡À¬‘´¹ÄZ>1ƒ•á%ã¤ðb}4&ÓM2_1/A ‰†DÌˈ”¨¢à{œ'%@ñ6±CùѦÌÐ\Ú€ ÛøGómÜ‘) „¹| -¿Aj‚K|…Ϥ͢h² -ƒZÚJl ¤ E™Œ†¬ørr/ˆ} ï¹-ç¡KÅ>¢÷M¹ =-à÷÷0]4NRð$6»3q0%ƒÄs;ÂuåN½X[âû@Æ ²€02Lj?¦$ Cs‹Ð¹Ÿ‚ø?Öy{OÜ<àKÈ=¤ÚF≯"þœ½{kš[É9$]˜MçÉàé|#¿ƒ/¶ÎÍbsï/áR/Φ¤É‰§§ÑÆL·Øþ¼_þ~÷Ùi\þ“Ÿø´{ xפþ¦ðÓÎÚ¢oºž˜|l¦vj6šÞ齋¬bäQGkº|éEÆÕ‹Ä/2%ÿœïTá{'ÂWÁïpÖ[µAîDñR ,®Ì‰ƒmJ ¬õÞ=„Ž´©”Œ#pm®%ã ymGC0î ™”†`!a[H_4ÖR’ø(Œ—gÜ@ÜK>©ÇôÇ<⽿ÄXà~4¾Âf@úb)b§_ p.´)›`HžÄ–ŒùˆýÞqƒ‘gtc¦œœÂoÚŒKlTòI¥¾’>v% æý†@¬~d.TÄ þèdˆ4paÅ£)ñˆgdz}Ñh|ŽÜ7Ä9ð ´E“¶ÜÞƒæXbxñX>ùô 4Vsždü‚za p~ ìAÓ-„T@z*EVOàÝãúç‚àŸA›éCpo3†óð›$€Ý‚Dœu ém Ñ û]:𕈙ÿÔ>£÷L0çì»YXn*‘¯$WÁ÷漫–É¿d’FЄ’=|m°== ¤Ã´q7öØ2€ìŽ6iï"ø˜~Ÿ2Dˆ9hÀ%2n.0wË °Ãùd å‚ ¿ÃCX<"O l‡h‚%Éà p2zÎ#Fb$*7-`RúPœLEü·½_O`‰;R‡P; ±ñQ"ùõ— 'ÜÜWðKJI*ŠÛWÒüÛÑ·7‰d|å…–B$@‘z~ìaŸÔD–êÇWƒÄØŠäßÃ׸5ö œHÇB$fó7€˜F"ãr<gI|H|¦˜ƒØ2_ L×£Mê·Ð8D0%ùt!yƒ³_ŠEHìä¿4$rY¹•Íõhs=™Ÿ¸¢Oì`*À@b,ïHr“Xg2ì|z(H<†`ì“ßž8¢¸ÏhÊ7“‘\EaÝ µ$àBœk…¼ÝEË‚w yˆ“ˆû `DëÀggⳓ î-ÆŸ†ù…Ø r[Þ3~%^%¾øµqî.·wï.ÛâÑÆƒíqäŽ>=@æ ‚F ’—k ½º£6Án‹è«°öên†|]ܦmÊnÑB>†| -÷Mfå® rJJ†KòtÞ1 È©ØnBIŽAÆ8-z¿ÄäE-Ëèü‚ J!/i\ÆU½3”íÿËZË¢gK@òI…`ƒ¾™ÃdvžÝÍy©ÄéXõõ|êy¼WÒ`ùOÔp@¸9 xõƒß¤ùpP:j($—Î ‚DÕ.‚ ÜúInÞ}€?%¿Ø!Èg âvÌ)š+\›`¤ j¡¶rÁ– 9òIÕAW(§wÆ0êkIÌ‚ø -Ű{â³5DƒUùÔÓ³J29€’À¥_]ÀU¼ÜÀïj®ØÛA O)i{ôàkJ»=\âôÞÛƒ]wÁw"^Ct¹ëB^_‰ºGlÅV¿ž‡x¥†pÅEc(‰6Á8 ¡>¯#¸¢ ”hvGÔv[hÌ5Ø&õ±d.HÈ÷ñ•ą댌»ÌÚGù3s5óg§@–-ãíµxç>ðÛ<ñ)¨€ÌbFâ?T€ Ã'[Ì¥ž d·ö’“¼Úœä4f–VŒ¹`Ûf’çáû¸­Ävíü{€ù:Hì墧6HAN¨°÷íy(³ÞÞÎ1âcQ·„ï$ù^wÿhœÔ… êÀÈÈ;H¬þú*ld^]H œ@^‚œ‘ä¸ —`<5掾·”þs“"ãá†`#3µTQV̀ЎM9;ƒÛ3±H±…|6È_€[a¡¥úÕ’H¼EíIR0Xþ$È$_ï)y<"à~gˆXN}(Hk@îKóõèÁ á¥" q¦Ðü7¸`Œ^885CÉ/YOé›®!Œ LIñrlùEqÝOTÔiWü Ô3)±EtÞ81®r2«¾³P±çéjEÅóUT¸2ïÞ|êÕy kœ£û!ÖB¼GîЂKÀ«lνÅ|ÚÍ|@îàCÖÑ¿ÕÙÜK¥­?S²Xˆ‡â‹4a÷™i\ví¾ðÉ -¡¸iµPX·D,2FWBóG#/¥¤D ãD\‚¸KÄ}ŠÉCŒ?5O¾0‹Ëº»ÈÐDÆ –»06’iòubW˜ST`„äý”ßiW/à 9'ÉŸ@êFç&±{ÔyPOàÝcû $oá:êvÀ½òÍÄÚúõ@N²*+ñ^[ î‰á—wP!=lõ‚GÒ@ˆº[r¶Z¼cPoÁs÷@qKP/Ø&ˆ+C•Û£h­$Ô¨íÒzg@ú)¨y +Áp;#ëQR–á(AqdÑ÷ò‚»‹å?*Ž|4‘U¾[Á¤ ƒý™IÎZ¨Ë‚l8÷Š’Ócž?Añ9°BÕ£iM5¤Ý¦Òz­ÿd}²SÔe@"- Öç…Z -Á$_ÁjãJ/Sý²Ghˆ”~%~’æP± 4<<BBÀû”¼ùº[p_ä•{'Pâ5J¶T6D” †93ç—:”÷!ùˮ݃P_åvE Á9î‰?>BÍ4‘vÊ™YüJ¿Äx!Nð §§³%ÏWpY ?páß#. -þ#¹Ì³sä¥ÍË!LÆGïÇíL¬p"1Ï‹àœ¨r}Ì1¿~%[Ø´LQÜô¯¾µ˜Élƒ}DéŠÁ©#„´£³ äÂ$J R: ‡Kº8 ÷[–ý`¬´íGJ–æÔ‡Ý즃|C¾Ž8Ipjø_‰û)–òIFç`-ø```aÎ#~€è—§É×wÆ ¤5Fâs/@’-Ä̦^œ%Äš&ìÊÖãì½{â÷T0ƒœ›Ê/OCLî´3G$½²ÍßÙ¦ â#ø[ÔÈd$‡Ç|üzcMH»çK¾ÐõZ+$¾Œ®š@k„Èݼz‚d¶) Ž÷EìB¡¾0‡=øl“x²E¥¨z³d¾_Å.xûà^¬ Á ¶Û»#§¶§ FÜRä€pg8òs¬MIÄ)9£á?ÃKÇ\–’Œ¢V€ûVH‰C¿ -ö}I^Gðü-%èÒäëºÈ±pn”œ24Œ[m@rç©4o"ã§!×Bk ÈùàkMCN/$žšŸ¨È»»˜K½6›Kö‡MG TüÛêÛ“RF–>ávö´ -/¯È¹½‚9\Üñɬ{RÄ4Ô®Åm$÷Û?NÙ¯8MsIÓAÐ!76…ä•$fƒN&yhCü -YR~Ã*±èÉjˆ cÀ@¤ít^“¸ÆeØ•{}—uƒ’R|ë—7cˆlÊö~ZeQñlÙ×|˜GEî)òu*šáL漫_JJü­vfŽQ¬/…•Œ%yðFƒ‚hžÖk ¸”yu>—tn!XMó6’+„"GlÑ“ŸI¾¾wK@ëû¢Û?òu>õÄ,ˆ7¡þœŽ¹ - ¤É×1_‚û‚xŸ®¯‘q„X…î/…䌦ùº É×!xAÆ–Ö£«&Ò|Ïíì/Äï›B‰›Pg¢bÕBiýZ±ú±™p¤MÎU¾Ü(+º³„Š]8’{¾…`q{‚sDwm…ä©­!u%¹?ña˜›8ˆ _¦Bþˆ@É endstream endobj 38 0 obj <>stream -Ÿ@Ä…zêIÄ„¤³3ÅøƒS¥°ìÑ"Íדi¾2[œ#Í×QCD><>”øa<²ÙW@˜ µuÔ)i®Fp)ÍÕAˆZCXþhbNÄ*Šê–B4OQÒ¾œ`ØÁd˜§´fëÒW®²£bâ?‰]@ìÙû½¹œäʦr†µñø"v­+z?ìŸ:b¢»__Ì*¤Rþ=0±Â~M#v!4­ŠÛVãú@~ŽÊÙ“Ï÷J B5{Á¯B8E‘Or줓´æJÉñvïŸ$/j\&¯z·Ä¼–€‰pÏ"NR…é+Ý#úÃ6m(ùböÅ\qÝr.ÿÞ”`× ‚Î̳óy*tY¬OIJK¯‘ªšÍqoØìk ¨}ÆšŒ5~÷‘É”D.éòL>´Z_áÕÏë£rG-øW)¬\㈘„ºëÐ d¹r_¬-hHÒôèzwÒÙ¹ôÜPØAp8ñ]ñíð‹”TŽØsDÝD~Ħ P’]*v[¬ÿ±‹xˆ]$i„ÿá_ü hþ± žä¢Àææ&*Šg08’{‚ø¶FýäΤ!t¹½“O´†’7š>8‘O89Mã¿Èçƒ$˜Ñ?I¤mX? 94É€ èWJ¬xl:æ,õ¥ðˆÿÀ$/WlCEÈïŸÓ×ӵĂ1 ƒå“/Ϧõ×à¾ÀóT0Â#v Ê…Ì­ÛthÞFÅ.2ÇpÕÍ›hüð†Ø…’13“jSXÏq©¹oàI}» ± \›ê«Ø…}@/ aç¥Êȃ“E‚]x_ÔHIN„šgDÕx*4“¸DÖØÂ?ré§gCŒ¯±3fš<·q1±4DÞÅcP¯¢k ÀݯcÍ >JEæ7ñ™¨ÍR’=<ÛøÐ57ˆ›-eÏWr$·¥Ä¸>bØ+:r~Îm·.­?à{’Ëì¼uL-í»®eQóÔ‚Ø·ÂÑ¿'/°À’Ì]–ÌyˆR¢ž„= ÀQ§„ðr"ÔÈó=@ZŒˆ®q ~I0—_¿LL8?‹ -+{Æ<øQ^ѾR^ðp‰eyÛOÀi¨]š¼m²~#»‘\ÝRñ± }ø¬]™˜*óM"µO|­B]Ò~'­Í`í¶Iój}nÝÙ5,ù=ñ7¨£€yˆu•»«'ƒ–®•»jj]ʘŠI”ˆÛ;u˜†@yg/ŠÈƒø꟢±_b—J·èþ´~†Øš|‚Š¼Ðº½§fo?¡ëQw¦‚îÞ‰ƒå[Ü»coÃØþïb¥«ÅòGYÿÜá_Å.dªÚÔfP‡ôO|± ŒòÏb± ã¨X±•Éüzqvž=h}!´d,rG*¨@æêïÿFšHíÎ-®?üD`奯V°¥/V²é׿Òz¿WôÅÞ—k0Oy¯P]¬?aþJÔe §Â;$¶rÎ;{arjˆÌAÄ ÄçŠòG+(¹;ÈZ‘ )¶j™š™2&›Ì’÷wCžƒõäÃÈý ýá!Œºa=ˬYjĬúiqXÔZ-!R–«AbÔͰ†…÷¦¤¹È_IÌD½‚|T\µ@äå$…؉™ÀäˆÈyAĉûB K+:VË¿ÛHæÔBˆ}CìÂt#ˆÎ­ºáaÉò Ä%‘ÿƒ\›Š]²Ì&#Ão 襂¨ñ×´>¹Õ»Æ›®kØnÓ¡_íÝup¯D ÐëÐWá°“ú!Š-2Î-ó®-£~˜µNˆe\˜Çe_]œ HŒ)|›}nž†H5e]G(ÐÇ:*%žÌ8=—¯l6„Àü6ÖPT>Ä—Ç–NËë7(+[,¥½ÏLÙŠëä ?P± 2Oø¸ƒ“äù7¨Ø›÷` » ù3ö[™X1&¢›Ÿ €ˆ:üŽ**v¦»þYìÂý«Ø…WÖÚQ[!:iQ¼‹5açÙ¼Úùœ»Kx‚;iÍ þàøšsúe —¢ŽLæJŸ­á÷¾6T”}X‰º´~`‚X8Š­z±Br4ç©7ò%ì#*ê9î‹ðM†¼õ#äêÈ!N -ü‡šdïÝKé;b\Xûq.›y!´w´Ü5º/ê;RÂ>-$G­õkM™•«×3×›3¦¼]îdK-‘.ˆÙQòT@XÉ£Í'’ÏÌÞ/Ø(»Õ«Ori\»TZ»žË¸¹P"±ÖÞ}“†Òõ?ìå!m¹¾¼¤ñ'~ϳTì"õÔ ØŒüb>_Ä.vôRR±‹Ã³  툄ښ%™O -ì=!XS˜;J‰½PÀÞ=Qk³+n³KwiWê0J²=‘á«`¯ÔØ5çÊ!ãÆbUh©>ÆõwˆbÀ§HÑÅãAÖ,Ë=?‡;Øn*ìm3ÂøB4‹úÚüÚåÊê: ¡¤~ Ÿ}e|WýÄäÒ¨]Òý jß?yòo¬Ù}»à¨ØÅ㟅ŠW†bÕSSEõûõò½­+ø˜ª‰XãQl ê)ÛêÓCîÑû«Ø[кL"yü”Âɇg)ÃÓFÓøNb™zh†~qd:ÅÁÀ$vн=Äßc¬ØÂ»Ë„¢úÕ|iíj¶ôá -Œ/jÏlÆÍyX»!Üux’¼°ùGEú­9\Ì©IlòÅÔG%œ˜ -1M.þÀ$`:ŠÍ±¼!ˆˆÊ‰|ní2¾°arÖ/[yÖë‘÷Ðù,}{Ä&„ìË?ˆ%M¸êN#åñG6ÊCí›ta:ë[8œõJ,÷Lè5K[÷îæœu7sb§ÈA8‚È|¿&ùZÖ‹L  ^Gc.TÆœ¥ŠÚk@ñÌöøAد ±èáj!õÆ|ºŸkvPý²Ö ÑPÁb|ä¹7r™çæBìBòÍ¡5Ô°çH™;NSn L<5{:4˜¦d ­½£´3v­±f‡|œÖ0@þ»#j]ãñ‰Œ:8j+ÊüƵbnÍOšœÄo?ìï8:M½Ç5{*œIס£qJ>yÿTî@“±p¹q‹ê|­3Ä)Öob nL÷²•=X£¬h2ö>2”ßøŠSB \}wHÿAÂM×# œE0êÿ’³ù¥éa]TžKrS‚Ã¥ƒ- -ùÞΕ»€À:Y>V³>±gŒb{Ê@ˆÀsq—¦Q± ߤ!4J¬œ‚š—Q0–Š]DjÄ.Ä쳋 hAÅöWz‘| ¬TŸ -Ë‘<•’%“ßó% +ù²¦µ4?)m[‰5A°O‘ñûFÿC°¯üåZìû1±`5¤ètŸAÑXûðù }Ï«[!–µ®gÓnÍÅ}€íÐ5!ˆa-9:jiˆ‡$G7)lÎ_sSžmÜb±ÿÍJÌ6åÊ,Χx8Hý‘k"_¢ëÀÛ“R_R4$ñlYÇjØ»!Áƒ†k6QáT ‘Äwç¥m}Uˆ#Guöê ÿ®ôL¤ûŠÅˆŒÑ”èkGØ[†=?$. - ‰Ž?=]Z1kBÀ¿T`k”X_!c‰½bð9À”<"ÐZÿÖ Þ¢W&É£LSÏχÿ£"[„É_OQjØ.ïOëꨛ¨ -›7pd<„ ÂQÈIP‹Â~+ïÔáÖ¡$ÿ=JîÿEœc+¯j[£:óÀÎúæm_îx‡ ëTƆ2±‰æk¨í@œ2éÄ4î²åk! Ê–´,ç3o.w›*FUM bÁXó÷ËŽç©K×`ÿIìBAòWº.Y4ÂìÈ'dùC0OáÑGîÓ—ØÈh.ꨄ®‘ƒ€Œ[ŠÌù^ø*v8ýx©Gf²9—"f+£ª €ý¾ÖWiNW9‰+¼¿\*jX'7¬a÷<þ‡`ûU°o›ùì{²‚}؇IçêGÄ)ñ}Ò©TÔŠÄì;„¸€Š:8{ ŒÈ¨‡SûOº8K,»€?@nÆU´¯çL¦â”‘ÇC[á“5T˜1 µì…aý²†YÚyé`ÍL ±8JÜÓj$¬ˆÚ“\pÐÂ~Xà>*FIâ„Ú ÚŒz&ïL°êñ°I/Í^5Z‡¨iÊ™™´NAüÄ^…  Ížä)Àì$Ï {t±—1ñÔLˆ)ÐýAXoÀ:Êæ]:X§ÂúÖ†P£À^)¢DŸî+‡0Öà ‚Gp”wòÖuGOºG†ÄCä5”€>9#ù£ j‡Z­2L=FŠ?0 û{9ˆS3ÃV÷4BØUVñl9Ý£°-¢öb -­;Ô/EÍäúÔ·#'ÆüŠ98™îùƒßG>›Q’{`ïJHîh:W!˜™vz Åð2Í5…íÇ¥Ÿ%/oüY^ð`1»ûë›5 {"4BKäg*DueE -LQúÞ -B}&þØTEîÕ…òì+siÝâXn»û£ŽL4N΀й2îà4º§ûÀ±ws'öˆbÏë5Bå;c!êädº¿Â`Àe±Õ$g˜ *Lò -2¿Ð¹uTä”È»ýs†ãA÷ô§|¬ qŸàÂQX÷ÄšçàGã>ƘuñîE÷¶•ŒÆ-rň:gë±1º%GžñT¹ÁÒ¡UúBJÍà!°|4Ínáºt=^é¢MqØ6ÿ¾‰‡”èžî—ˆ õ^ú9È[QK=<™æI§¦SQ–0ì'ã¿{­HœE~‘ bRòé¹b©™[¬Yc­žŠb Ž‰õKÔ ±ÇuþˆÊñ´.„5Sâ{éZ>jXø;‚3xï˜AÔBü kͰÑÔ3s¨êéXçŠ,›@…×à¯ÓÎ/ÓOÎE§©'æ…À=WýÜP^Þ¶â”ÂÎäÁœ[P_œ3Á1?AÐV@LÛ™6”^+®‡ä°]øÔ¶ÄŸÊK–£®B¯)„œ„íSˆýd\^@¾“OÎ ÏMEΆýaÞa+:ÖÈ«:V£ÊEîËGìÑÇ>+Ôzä…—IWçÒº4™د‡|›âÜÄCS°VL…ç ï-o€m£ßûEÈ{ÌbÑý²X_À:/jØÃfÝZÀV¿Þ(+jZ"ìH¤°u¤{%QSÄÚ5æ»{tŠP4ŠŠÎøeŽ@­ˆÌº˜NûFèÚ¿wúP*RMü›·o*ý4ÿ(MïÑ—wŠ¢ºGÝ1´ö¢ Ž&³rÒì©·uëŽÚ’¥•›6jÆòmA}ä¾= >´t —vc›óp1æ„ÕH^¯eI|,p1öæRq=¬—¤èA´ -ûRøÔ+s5÷ k$b*=gìAJ¼0‹U×-†(.Íç‰o…]cŸ¨UDÉš—ÿCЄäÄâîÓÓ±¦¨©ì±/)þôL>óÖ"ŠYÃ|3†ÓÝ'wr:ÅA¨ “xIýBhñ÷°>íÊ|ˆŒÑú%±{r_§@ø‚A[x›y~]CÁýNÜc@k‚Xº#jÆQ¥c)~"ñLQúðg6÷òBºnåÝ"nXçSŽÏF=K¿2b±ˆýм[‹¨0aæ©9ðËŠ|â§i¬#1pw‰Ù§RL  !ÅJcå‹ ²ŠÖå\Lå8¼õCYqû2¬I±©·æ"‘4.*;LØÊ×E-˨ݧœ˜Ý"EQÝ$f-‚Æ:*É æ-Fí›ÿƒ˜#ŘΧŸ™Mk Ð>Ðb¦(¬[Êî®OE,P«rÚ¦CãÄiÊ_®R”½^Á¥?Xˆûÿˆ=¬\úù¬wÖPοh}`[Ö¹J¬h3†ð;­7¢¯ 9Ö<‡Q/ß«u@nkDÚ«zp¼¼g,öQQ#ˆ`O2|pò)‚#.Ρ˜#ü >qh<—xjª<›|.0«ožžÜ+}"°x¶¬\];_~àóöÐ;Ë¿­•ú»‰âÚïVŠŸ6³§ßóì¾ÏFòªÏk•ÖòG^YJÚ”מxH×[·qg_H\Åëõ|î½­bŠ T®þ}Q— {WÉ=ƒ˜%™§“…ä‹søÒÖÕª}O6Õuâæò:¹MY­…˜ww9^öJª -*¤÷y¥¢èÑ2ÔgÄ”Ëó±/CQühDhÎI°=_õ|Wýƈ+·–+é\…u< ÄDý\yûrb§em?Ëski]šO97þSQùl-| Wܾ–‚Iq‡§ÑZ*Ý/zl*ü¾òÑ Øô ³Ùìû‹äÏW)ÊÛV±•mÄê6S¡²e,å%Í?áQ¿Á¹Ë –ÂN`׊²g+°w„Ý÷Æ;Ünlîøs¹eùÛŸeO—Ê«ÿXÇ]|m%Þ}¾¿ýÂUºØîÀ|Ê ‡Éƒ¼Vy¬ÉŠ?Ú&¶‘¿{*OµZó'_rŠ´si÷æÈs[~°¨þe9{ú%¯¼Øä¬<ýÈXF¹¿IÎV¾Ù(«zº¹Dž°×€Ë¾»D*¬_#œ|*ðG_˸¼†¥ÕªI\IÇ*™úÎ…Çn]äÝlIûr« [¬Ž=²c+~[Ǧޞ_1þÒ,*.Wød9]ÓÚ}nâ1­wÚùö@>ȧß]„JqHöƒĸó3±ÿEUþÄL,½5(.æÄ$’?`C«Æ°áûÆÊ£N7Ë2×ìD×ZÙÅ¿ËWWÊoÿÕ†½ù»½ìþ¿n¶¬ë²eŸþ ¼~Ëu|bëßxð·Þ¹àÞ©êjÃ¥ú¦ áò[{öü‘½ø^’.7»¨.ãÆÄW>R\ù¤N½Vòeï×ñÄl>PcÍw®¶ØìªmnëÕâšX µºyÛGu©Î]<þÚJ8õV%~&*«Ÿ*”ûšY¡¼ÝP¬zmÂW¾6äãÏM‡X¿ûødV]³ˆ -¤fÜXü"Æ’yžV³PÜóÌP,¾‘-{½Ú²úו²‚÷K,öüþ“Eõß—›Ýî’[´u9ËÞü‹·ôþq’ðþånyÓ¯nŠö_}¸wŸ"Øw¿‡)?Ö¤lysBíÔy(Wúð$Y|ýJìõß6 7^;I5Í~ª«-žâ±¥êh“µÍ釮›¯Þð±9[ã!x¤’WýºVVôt©p॥êtÓVþð[¹"ïÑÔÿP3ª:Lˆ2Sí}$³9Ò`guè‘ -ù&[þl-[¨x±ž=Úa!j³¯Û±·ß;p^{p÷ߺsw~qTÜú›âúïV²«¿ -Š[Ÿm¸‡¯Ü•µ»•Ïîlj ¸KÏmØcodlõÇò’ΟäŸ×`>p'^°ü™g’tºÍ†?ÑÂsÕOä•/V UOMUgë`ߪ …£{ä•9{à…±p´“•N¶Ú;m‡~3”ûdÌî”+N=³”Ÿ}¥P\y§boüfÇß{íÎ?|±»ÿÊ«¾ƒkx᩸üAâN¿â›—ߊŠÏeò³ïd‰v½Ù¶…kîð^¶E[½¿Ÿ!}lI–µw¹[4uÙ+Z~ÙÉ5¿ð㮿µSìÿ¼‘M'1Ô?gò2¬iR_Np)âêUéfZø·Õ©Jåíº]öç®ìR<^Ç¥œayøõò#¿É®þÂÉÏ`-«ÿ²R–ûv‘eÑïKÅ’UUr›ãNªÛw}­jï†m¾;ÂúÆér“‹òH›(V?3§XeïÛõÈÓXçø=ï7L¸H -Ø;F–ß´XvúO3yÍï¶ìÛ_B¤Ï÷“¤’„ÏÏãù?_Å Ÿ[âùßÞÅrÞEJjSœžV«ÝÚ˳£ë’ò3Æän}q8[ñᯡһ¶‡ç'ó¬_ßWKo:’”ÏÚØÇ/v‘ûéÎ]ÿhÏ_ýh'«úc•¼üà -å•Vwë[ƒUç:œ„koؓ܅W’t¿ÕǺ£&Yªm®·»Š5O·+ï6ø*4Y7ÞŒï·{)¯>vïÏʼâÕRË„“yMó,ŽþŸµºÌwß9ˆÍѪWSUïSÅW­»…wí»¥×­‰ìÓçþ–þÕÆòÁ¿XËüi/«ÿÕ‘}þ)@øØ§üܘfÿêL®ô¹-™­îÉ^}­â¾5•§ß™Ã¦^›­Èz¼Hqà“ž/µØ[]­Û©ºòÐ]uªÞNy¬ÅJu²ÑÖêX£ w¶SâÏ?WÉ/¾âù«öâÍ7éÊ“mÒù§Žâ¹g¶òcËÏ|°àHüå¯>µ—êëÄÇBUm »m^ÝÍtz~¬Èõ颭/OæÛ½»š+~x'uÔG‹µM>ìµwÖüý§|û£Pë×w2·¼½’ãÜy¸Ð½½<ß«¹(çãülÏÖ’<ç§ÕÙVn¤rßDÊšþt±8ó7cÔ¤íiCÄʱŠÒçËÙ} ù½ï áÛ»d¡—Æš•~ZÄÝú¸ÕúÙTÛÎj›Ç·ì^\ÌÙòâZŽÐØæ/»û‡ÉÉ®•–Q—Æ[lñïalh۬½–|hœtꉭí‹kÙ®GнZ÷ìqì8SdÕ\‡¸ÆiWˆûZÍÅSä>]¿¿ÓúÉxÕµúíü63å‘~†ÖîÒYKl.·ð~Tvüƒ„Ø ÝëãYVo¦+?ßNµ}sFðDMm²úAhÖñ!Y{îGd»·—æ(‰ÝÚ½:•åØy8Wù¾!Ezßž¸ååÕl®åƒ¯Åé®MŠê?ÖËŠ^ýÈEžŸÄîýuƒõ…¦Êó/å•ÿ²Fžr–Efã,Ù¥ß9ÕÓÆxû—ò·>;_`õ¶1Cèh —^6ïÞüú^–òec"WóÂUv볕广™É.¾Vp÷žºpõO½dM¿oå^= Řlyy>[|T`~ê/ëM+Í7«ú°ÄäÄß—›Üè2²hû›“kGe^Y]xna}D~bÓ”¢í¥Eö¯Næ*­O—~yš,|îLš¸åõ™¬í­¥NO÷gÛ¼;—aùèï[ÍŽþm5wðWSéÔSç?¬âÎLçSïÎvåª_ј{¢C)$øï@‡Üªò‰LYÒiÈÖÿ¬È¹·H±ïÓzéêSW«úÚpem}°pþ¬ê/«d™5³å)·gZ¨ïÏ–_ø(W>®Øúüb¡Ã«KªµIâó¦h«µ™;[‹Š¢'G>N**i Ë‹~œT¦ì¨‰eŸtî°yOÖ’VÛ¼;'£%<§²1D]Ý”q¨>8“\oVl]|vâýø¬ÄúÝÙÞ͹9›ßœÉäß¼‰d¼wã.}°Q^lqQ^mqWÞ~´KºØâÈogùƒíæâ§ÖxË]¾üo/c]Û÷x¶ï-qoßWìÚ~¸DùâQ<[ó‹³ÅƒUÊšþî(oø7'Ó;]fÆWºÖ™–¿Zh¶÷ÓRñÞÓ›ßÔdoy}%›ëxÀռܯ=xæAð³£TÑfÆí¾I<Ù¤îÕyZ·\wì<š¿åÙù,§Î“E^må{ü[ÕyѲ›S2“¢3+ëBÕGfÞxì“VÛº+ån£_ú­zÿôM>© |RkÉÏu ¾édœ® ʬ¬ ËJ®Ëso)ϵz-UüД`ûê¼Zþä_<,ÏwY(NþKîèï–Ü™·¢xöÅfaß'3®ô·µÒ¾—,wâwV¨}±Sù¶-YxÙÍ¿|©|ÿ8Mú\—Æ~x.üò,^õþAºõÛ5×ñ2ÐòÒ_-åŸËÅ›M.ª¶û±Ê÷©Öïï¨Ã›RJ›w—íh¯Ú»åå¥låÛ»qv¯/ån}u,ßáÕáߎÌÜÔG‘ÙÇÕwû¦ßjñI»Öê“v›|½ñÄ7íÆcß´‹™§È¼+kËÞó0,»¤.<;º!1WõùfŠim—`–þ`ªå¾®•‰¢túýfå‰W¶ÒívOë5Ö-w“lžÕdŠwZ=dÕVË+Þ­–ªÛdÒÙN;åíÖÒ-“¯þj«lz•XŸPòH]fóô®Z¸ñÔY~𯆖EÍ‹eû~]Ç+ -m­á^­%¥.O[¿½K|áëw5™ÒoÍ©[^ŸÊökË.*|š—û8¢È½£ªDùþ~*ÿâI˜ã‹cmI…‘Í yùCÕ‡3ð8Ö˜yŽŒÓÕ‡ê+5!yk‚³=VçÕFf9=ÛŸ%~êHžµE«5Æ7;]¥}Äû->RÝ£Ì uM ±ë„ìøºøœˆº´¼ÐÆ´¼âšÈÜĺ„"öå›Póë]–­]N[‰J~Ww7:gÏÝÈìÀ'YľЋÓêw;‘sS|øb|§ËØôz—±¬ý¼·këÑ²ÔÆ¤ýI’÷»?=\aÿòTßRç'Ô=Üñ8­ã„ÇÕÿÌC‚2÷Ô…fo -ȼÛâ“^Ö”ãðúX®âÏ×afoºÍßýW‹?ºvÉÿøbýþ|JPcf^bÃîÜ‚Y•w#³²r<šK²<›KsœÚ«Õª7·Sl__T+ß´¦*Ÿ·&)ÛŸÆ gÿÜ¢8ôoFÂ¥?ílÛj³<ÛªÊÜÚ« žËÝüörÖ–7s„OÏvËßüÅ—{û:\ü½1ÙáÅ‘lÛwgÕæÏºœÍÛ?:°Ïù;¼8‘Öœ¹ÏêÉÓk]F&U¿/4I8?ÖÄ·x°iPñP“’¶¹æuo_9¿Ü——Ö‘—ÿ(<ÛþÕaµù_ºv¿ì²Úô¦K2zߥ4z×%¾ïâŒ?vÙšÿÖåiþ÷./þ÷Æ(þÆ(ù¯¿wtI›²Ú&›ìZ¯¸ó÷-RM»Ÿõ£Æ8§ŽãEA²J³êb‹*†çùµæ•)_7$ -Í­¡ü“gþⓆ0åÛ–Ï–ŠâÆÌ"¿†¼ÂC·"²ÏÞ ÉôiÎ'>ûRžê}]†íë[9ö¯Nåîl/.Kx_Ú”QäÒY•ËýõU ûâEðº•øÎº û×§s];«ów¶çåå6‡çE?I(>·Ç+^ý xñ»¿Åã.[“»]&F'>.Ù”–7Â(eÿè5]+-^þ±Mü³!9¶>!·¼&\MâžúÐÝputmb¦k[E¦ý‹ƒ™Üû‘|ó?îÚg;ÇøÖÁŽÏŽD>J.:~;T}õ~`æ©ÛaÙGï„‘¿ S_¸¢Þs/2Çî%‰±ïîf ¾Æ×'ä]¸¬¾Y˜^M|ÖƒßÔm»’?‘Ç]âë"Ÿ$äÊþö)dcG—…ù]^/gïm Î½Ûæv¾Å_}ªÅ?+¥-ºDüãa’øGC"â¡ÍÇÛjË÷Ùit©k…I`Ê€õ[ݵ×XïÐúÉRb~XeÈ,Xú3³hÉ*fÞ¢•Ìœ?13­`æ,2e–˃º­ 8?hmÕ¿N]÷¤kâ×g!Áµé™{®Æfº™•q+>;ïF\vù­HuÚÍÄœ‚ÜZ«ò„·oâ¬^Õglí<–GpQAZm\aÙè¼=÷ó÷ÜS•œgÙúoÎVŸn¤ï©;JüÛÅVŸô£O}ÒŽ>óÉàÿÞ²Ûxÿç…¦>ê«Dfúh}f|w=f,£ÇŒf†0ß‘‡>ù~Z¯ï˜Ùß0«V‰ÌF)@k½*\{é2–™4h43ŠI^5’ÑÕÖcj}ÇŒè®ÏŒî5‰Ñ2‹?z3uêrf¡™;³jwý° —»~4nìd/ÿÅKq§k‹pçwë÷ÔÕw"soÝ Ê¸S”q³Ö?ý½ ÌâºðœœÚè¼Ø†Ä¢ð†ÔÂâ;ѹG蘆«óïÅäfÜÍÙüö‚ZþâOoöÝÛ°€Öôܦ6ïÔæŽ])dÈÿþ.ܰ¥ËtÃþ?gm:8ØÐ·b qðq=£¤{ú†û³ñÔ¿-4<ÓµÔ0÷ɤŽÌDýÙÌø}½‰ä†1ºL_¦Ó›éCÈOÙ¡Œ¾ö0fâ}föbsægëtíÞ—ú­,ø8f][×z³_»¶YüÙåkõþrªøöU‚Ðú1Bl{-½~–èøüpnLcR~Áè¬ò›‘ê·#ÔÄ/fUÞŠÊ>W¬¾~?0coMxñÇêK·CÔ×o…dܺ”Qö0<;«>:¿½}gR×+÷´_;}‹ÿ|·=ÑåEi†É_»œ×ÜîZ¸:òúŸ$ßns—®f&OÒgf̜¬µñÐÚµOÏ0¢rèZG?mƒ±úÌ@¦?Ó‹éÉè0Ýé?r]Úä_7FëËÏÝÉ3ýÈU÷!¯êA~Ò¦Ïõ#ÿ¾×ÊÌ™'2?*´Öíš.¼»¡¾’¨Î»”¥¾§Î¹—•s/&+ïVlöž[QY{oFf¿žuùf¨úôÍÐÌs×Â2‘¹y´&T}ònHÖÚ€ŒÝ ‰üo/â„_šãä~ÛÕ‘“{­Äà§»ÒrÚBr6¼ê2ùÉʉ™2r -±ÃÁäüqn=ÉYiÑ«ÀØô%œi7æßüþ?ZôjðJÜ]¦g·Aäk¦‡VòÓ0fÄ ̬…[˜5ÑzHÜøØL|”ô®=ѹã@^õȬ[7C2*ïDdUß Ï">&ãÊÝ ôÈúä<›7çÓ¢¦äÃ6ÏÞθ5%¿ñ¹WJF{H¦é_»\×d_=ÿ§MŒ~¿aäzÑóïAÎßë’kJ,n0ùßwû/WóŸnôêþùº»‘»>äý†‘¹8ýgfEüÓakuM3ùе•ñ&Zõ¬!Ù¶ãR¦cÇþl寮<ŸÇÙ¹×®,Klc˜w;6ãxêZdöÕ[!tÜàKÏÝ Íj© Îyñ00SúT“@ÞÏ~Ó‹.Þì]—‹å]¾ïw­[jbÏ "#ôûÀ5j}¹#ø_çË=ÓëiÀŒoÂÌZçÍüÖ8`í«® ŠÏý½§^Ï>z=2çÂÍÐìó7ÂsÏß É?y/$çÊͰœÛWÃs®ÝËJ½§«OËM©ËI®‹Í®¬'yW]úPmHfqmd¶Åo]^ë®u-Z}dèJ{?­Ù³1#´PìMÏâ?Úœ½ÿÚÔNñõ?_ƒÆ{ß÷¤sO3»Ñïñ\/ò¯/ñªºÌfÎDfÔð5Ì”™E6åZëš»ÖÉydóúlÒþ»a™É5ñÙ.•YȇÝ[ʲËWì•G¾ú5eå8vîWãùý÷C3ëfonòI×`]Ÿ´¢Çay¶ïN© ¾Vz§õ3rÄÿë½ïNÿ|­_ŸÃõjùæº{Ð;Ӈܡ>äß:{5Uヴ¿\ko:ÿôÎc¦-qf–:ÑYw¨k¦ìu—]lj4φ=9ê;»©ºµ”e5Ý/¼+4ç Ãæ»¡…m·ÃKÚî‡6= ʹv'4‡Øgöù[aÙ…w£³>v)ç.W2Ãt‡Ð¹õßù…ÿíñõ:ÿ»×Ôû˘ö ÿzÑë@þ‘˜8x3n²Œ™ºb3_*êöSe×ã_ºìíZÇ_ŽË>r%*çÊõð¼;7à -Þ /­­ )¾t+,ïô­Ð¬Ò[Qê ºÌ,<Â듳H|Wç4D¨·¼:’jXÛe4}ò¼ÿõuh¼¡6=gíÓn_~ׇü¶/ù7¨Ûf˜öf@7=2NCˆOEbüXfˆŽ3 ûD¦¿öfPï̽ Ì´å¡ÌÒ­×uVÞìšÍ¿½Lp‹šÄÄ„¬Ðº´éSm¢Õ‡+É.mjâc²._YJÂ| 0ù^â[oÕªÛÛ¼3‘œÓ§=3Ûø.»uåÏ'ýh¨dFh÷ÿÿæ¿øJüü5^`žê¯„kÞË€Ñ>óÝÐ¥ÌÈ!?0Ç-fô/d†êÎa†öœÍ î;‹ŒïûÌeôú‘×é­d&ÎÛÂ,¶ªÖ^³¿kŠé‹.GûÖ#I®{Ӏ͎_ŽÊ*$±ïéíˆ=í7£*žÝ +{{/raïB÷¼m -.mo,¬­ .BÞµª®kÑíÿ;þñ«Äõ§`¼†ëè3ƒº'? £ˆÈOâ§Ö(âKÆ2úOa†ôœÁ é=“Úo3bôfÜ‚ýÖ…0óø’n …2­_2þµËVx}=8ïj|Ö‰‹1ù÷n„å=¼šWw;¬°îApÞ½[!y·o‡æ¿šu“øÓ«÷‚³ñ|öý(õêή•Óf¯ü__ËW¿ чzöž_¾ïEýHï/ß$ã8\g<ó§QC0£õ0#GÿÌŒ2XËŒ™`ÆŒœ`ÉŒœhÆ µ–6n#3z2ÇÌ4Jc~ êÐ]q§k¶ôürpÆåä,Š[nïÎ:w+TM°YvnM¤šàÌäGoüB°ØýûAYo‡dݾœE®Q½é÷®ÍKœS´&Ì_JbëÀÿñuÁOö¢ž¡;ý^ã5s°E#˜aZ#˜‘}¦0#ÍfFø™1˜©d&ÿ°¿Àž<œ™QÓDfÔx3b’œ1Ö”6|-óÝwèïf[ä0Ë‚ë®}ÞµÞä]—mëñ÷º²¤Â‹ Y.Eæ7_(¬¹^Hb|Þõ»Aêç‚s?Ôæ¾oòÏûð8°¨éAp!0©áß»”šÿ¯Æ ç?€b´_У&æaîi~§K~;ˆÑë1’Õ×€Ùo3|ð,â›§2zƒf’ù·„9x3|È2fèŸéµžbÍŒž 1ãg»2S ã˜[Žk/Iy5hÅ©®)«jº™|êrpx²/ôҕȼG7Ãr›É8=ª Ìê¬ .Àœ{ö8¨¼³1¸´³9 äNm0É%âÒW?îúÉ`úÆÿµmj®•¡ã‡x6Xk$3X›dHd^ !sn¨öXòÜX¦?Ãä1¤çfX¿äÚæ1z#û\IlÒ„ùnž53f‘;3nUc`’ÀLå ˜©Šbf®í­e©¶¼¶k.û¶Æ{×­’ÔÈÛñ·“2ïìÕH®íÌýàìs$ÆÕÖewÖ循 Êë¬Ì»q;$gÇ£‚̵wº~9à»ÿñ¸}oð÷ˆTCµ‡3Ã{Œ#×ô±Ç¡äy]±ÿöÞ3¬ªkÝûžT¥ª€]ÅÞ;vA¤—µXköUè Ò‘ÞAº¨(HQ»Æ5±Æ5ÑØ»¦˜5;m—ì}ÎzÇ쳟÷9×yÏ—÷›3× -Š«Í9îq—1ÇýûÛöþ›ñf°ÅDâÉØYÍ ~s.3|Ð2fÔŽqžËŒ_–ÅŒõ\ËŒs/fF-Ïf=r˜‘¹ÌDU33x·ñÂêý\Ï&)ÞVɯþT¸æÆ®ºÒ+M ^×z÷ãò]/—w]¹R¼5ÃÆ[ÕÍiOv4_%u£[ytRóÃÅJ×£†qC‡Îø_ÇrSšk!G$ÑË”Ä2+'âû™Á¦cˆŸE,r µM{òŸƒñ r~£™!VÎŒ½ÕhâÉ£ÿdfñÿξŒÓ´PÆiz3zV3vi36°‰í[ËL‹:bìRñÀjÙÃ÷ÇW’Çë¾<_žx¯scý¥º-GΗm¾}iíÖGäÜ>¿RÔxîóü¦¯îf×ÿùAîŽ7Ïrwݺ—ßÚöyiSÐoߦOÓdýŽYoü_ÿ×ôæÂd´¬È\s c8”>LF2ƒûÍ c5ØÑØ 3ŒØáÈÙ:fäL‘ø”@føX_fð07fðhOfðÌfÔ"2ç‚ê˜Ù±ÇLæmzl³¨Ç0tùmÃl·ÛåÏÿˆ‹zÒ³®úZMãŽO*·ß¹ýÉ¥‰n{v·`ç7÷óÛ^?Ìßõãü¶oïµ}»kI›}žÎN þWãfòoþ±×Ø’s!Ù‡õ$Æi¤3Úɇœ‡+3t”;ñË™ACˆÿâB|&™gd®º„>lã8Ø•1FÁ8N˜1³c˜‰k™él;3cÕ)ãÙ%·úΪf¹èŒaä’Î߆­¸j˜íõÊ `|–üòtEù寯6lþâJy×µ«EÛÎ^.Ùª¾ùk˜âcƒoÐ R_\ý5LúòEIÐ׆xÏÏ Ë\«®Ù¶ó?žWol³ Ù!¼¤%Ͳ¡‡1È8 ê7•Nâñ¸YQÌdÏ,fœK83n’Š3j)ãHüåp»iä˜7‡1lÉ)Ìè©3z¦†ï–ÂL¬c¦ ÍÌÜU™Ì®ÿÚzÁ‡†ano ËÝ¿2¬|gˆR¼6ÄJß}_ýìpCüÃîmßœhв¯¹ãRUsÛåuÍ O{v†~wcKñƒ¦Ž[·r6};»~Dz-ÞßøYþÉÿã¹™Ó󱡱¹?3˜ú+šó[ÑŸÈAà/ÌI2‚ÌÇÁŒNŒƒí4fèh?Æy9ɓϛ.­ÿ~àÒ†QË?2LD>¹üŒaÂ’]ÿºhókû›^ XX|Ëza晾K×1Àí”aÒÊ· ?R”6$Ê?]«ýþÃ)OvlF=‡š¹æÔ®W‹·~|½ éæçyO?ËßòövQÛýÏ -[¸Ÿžæ»}fÿþ¿±M‹ßc9ì™ñà>Ù¦3c¦ø1Ó¼’™‰|63!ª™šÊtZõ§æ³×f1§ìÓ¾32ÏšÎ(¸`6¯â–弚gÖóªYÏ+¸Þw~Ö•>‹ÊnÛ¬8c˜¶âaÉòCg× Ï¹ï7Lðz`ðò{d`ý_4þO ²ú!3ãÞö&ä,8¯}$w.ºÓ°]!(Ÿ€ xºƒOeþäO¬¢ìȰår†‘ó„¥ÿƒ]Ó1ƒ_8˜äÃC\™A£<˜Á•Ì„ÉÌt®‚™ÊU234õÌœØ&.îÛ.é18.¿@ÆçŽaÞŠ;†…ð‹k˜Óm2CSÃÌÕo1ZÀliñMÛeÕÏíݶÿùZ§?s/FûÉóìw -¼frÕÖš8˜üÏqë!˜iv}G“\63ÒIÅŒžÂ8»Ä1ã=³™iªrfªw3}i 3e.ÏL˜êÁLœèÉL/3ó¹Z£©gú,̹f¹¢ó?ÆxÞ5¸û>4¼6„r?ýZõå¡Í×+Õ¿ü’Åþø[®ßsƒäÝýש¾»^Mõ;h˜pÓ T|nT· ¡ìã·‰Ò“ùÒW÷ÖF¼þh[ø«‹[5?|Y+|>3nN3Û+žqáʘ…|>³8®ÕtaãõËÿd˜ìù›A¥4¼[£ùó¹bsƒþóç5ìßïe«þñ4+ðï†Õž¿^?T~¿tþ?"Ä?¿* xeñ®ûd„_|“…WÔsÿ«_õ-CDàþ,P¢>m¾~Sûò`Kô×G›SŸtîŠýòhk 2€#bÍĆó³´ûñâ¹×ZeçŸçy¦µZ´˜ÖiÿÝaKÆmä`fü45És«—øKf Öi»¨Ý0˜ØÞï ¼ÿ_ þ¿"}5hW<5,r»e˜ãñ­Á#àï†UÙš6ï¿UÔÔ|»dsñ½ MšwK°†âKlÏó¢ÁÅë´a®÷-ƒ§â©!TõÊ̾ýGžö—{¤Ÿ¾ª -8mp Ž5v›³€ñõô`ÐG‰}Œ\çW¡ñÒ,MîîÚ„†rÑ)gaßßýäSoƒùÒãչ݃ý¢êúL­d†ÛŒý¿Ö‚þË6MHžEr¬~™±ódfnp›ñ’ /íáÿVþHçK˜òWC¼ò/†¤À?"ý_ðÀÀÞ2pþŸ” áì[CnÐ7†8Å-ƒxÞà­Üürš²ì˜£¢ãÛ¹êÛ¾ÿ®Xýƒ!KõÒë¿ÿó•Õ'T;Ìã{~ô>|'©·>‹«??•k½0_8~?HsêºVwëZ^è£Ojå³ß„JmïVŠ·]ĺ?ÍO=CŸ^¬Õ}{«NqÓ ÎZÌÿ·çeIüb?“Lÿ¾ŽŒíhRGÏcFOöcfd3.q‡M]ª¾°^rø?Fºß1,&óIá}ѰԻüü`ïøKÿâƒý/<ŧ_äÆ~up‡þÝ'Å·OJÙï_ç^5(ë· V$®2U¬I3W•Ûúo=åìÍà+¿zR.=yž¯¬<6ÒG¥aòL•þ¹Œ;ð››´Á– Ë5.£Ñ^z/]x.]{§ýìfFо·ËØ¿xpÝ_»ó{~ðÏ~Æ_ù)Ìï¼Áuåš}V£',£uö¿v$fLÁ2 ¥õFnú­¼cpõûÁ úÑâÿÆLüµVIâ.ÿÓ/%ü/ïJý‰oðÉé°ÀÕ‹™¿p˜”jtâµ·æÉõ¢äçÝYO›wE¼>µ•ÿáíZÅmƒì»÷‡é~Õ—>4¸*.;¾ž­l<7^ùáoÞüG_ŠÜß±GÿæÃel·W§˜ø± §3¡œ$ð÷‹Û…‹~ Ô_~’¡¿z?CÝþn1›Xe”Õb矲ÅzI@ -3zè\£MèzºÑïviÆô7!qmÈf‚ Ë,Ð×¹nýv˜ÛyÃT÷G†e¾5èÙß¾Êãÿñ²TúÛ£õ¡o/4áÞŸôæy™ðàû þÓ_"¹KÓŠ×Þ%h<)ÕÝ|V$z«årÚù¹ù1>‹2¢Zd°ÿ]µãæ\åÙÿôRî¸>C•¹Þ}Ðìö+³¹}o<…ãß«Ùí÷æ±…-C¤ò]#µë;ÇKÍ7—w?ôú<;äæµrýù òÉ/µòþ*®û›•\óçóÔ5‡Æø¥n±Æý6SºvðïÆrPÿIÌÈÉîÌT¿$fIÒá>+?0LñùÎ úrÖè|ß$ÿWYyßp䟋ü# Ì|üCow5¤ -a$.Ä8,6×:|mûxyÛçK¥ÚÓÓýUŒËèaÌ¢±Ã™%xLÆx®pa¸æ+s5—®Î}-©·}2‹O­éG÷Ÿïÿޟ-°³ÌÁ’•w}í!·¿ò.Ì:^¹k=•Ä»¯Ò4מ¦p{ÿ¶’k¸4M}üg_þê»HáÑëtÅ7†ÏÛ·åë>·[Ýe²`Õ>Ó%«ö™¹Åîïã™yºŸÇÚ³öÞû~ž&¼{[‚½8E÷vr¯Î 8aX®Üþj¦²ë§Š žß–e´ X²Ä•™á4Œ™=|8Ãz{1a É–Q9#ò+‡¡O,èøO§/c´·oç«?ü‹J}ü/¾êCõ`kOŒgókì¸ú½ãù£OtæùþÃC]sq<ŸÓ5„ /0W‡§›±1)f´ïeß+EÈÙ/’ƒ¯<ÌàοU[?›©ª=3NÑùn~`ë÷3}‹O Z¡-2žéªgÆ“ØAÓõÌ7¼û®NÚvs‘”·q z0„ÚÃøÎ¯W;î/áëÏMg÷þà®Ûÿ¥ ýî^­þé­š CÿáÆ–´Wï¸9‡;÷N ~z£:äí§›¥_¯WÿfÈVýÕNâY‚Ï×Îç¤aOæþþ®Š0ÆK»Ê(`Çã©â“osä[_gg‘ØÔmV.÷a”ªP†öhT4‘«9;ÑW­cŒ›Â,›<‡ \áÆ„hÃM"Ò í¢R íÃ’‹úës7 áÛþ´û|å3B¸S_ª¸ý?z©ö½ZÆVv:r5û…Ã_+°¯–=ø‹§jûË9lË.üÁÿðWm»=‹ÏiÌ%äY¹MÕ ßúsûßzªÚnÏS5\ž¤èüv¾ò”ÁSyܰ2pÿo ýþÇ|ÿ†¹žŸy½1úþÅ õzgð}dð÷¿nð ¼hð ºa ~þÏ9$™†'™…%šøúx1 'bV¸¸0¾Š@†È0SЬÁЄŽôETa©¦ðb~ÇpŽ\[¾z÷hÊ©î¯+¨,&–X‹YÛ²ís»ž/*ö8 E-C…â­CYâ u¾ˆ ûü|þ-[ytŒ:w“_~b¬öìóÝ/J°Rýz®pôZÝþl¡PqpŒÖhÇÖ~¦°/zÙÀÒÓeTÛƒÅÎ5žŸÁïå£ùà¾F>ñ@–Ž=äÃOÔ¾ï}¸ÆÓÓ„âÃ¥ìÆRAûp!oñ·;†rU]£0UÞ¸sŸ|¢ùÓýDîô*Õ_ÜÕÝ?,W÷ü´B8ý ]{‘,_y§>ðë -6u½­VnËï¡j}ä"œÿN¯{v·2æ›Ó;¥o®U^0(?2xný~j@á©Á+c_!Ù80³­ÐIƒ—ºîÜø@m²±*<׌ É4Uò«Ý¹‘ù7ƒYNò>}}¶û7Ì›@)ØÌ p‹Å°$S}z­ƒvÃGsäÎÛÞ|ÇMW¶óî2q÷so0 ôGîêÔû¿uç+÷9 …Û†ˆe]£Ðë…þxiÝngðyÂÿt>?áqÏŽä'{ÛÂn\)Ñìý>P¬ýxª°îü$nÏ[7áÌײºãÅöÐ^ܱoøºcøüz®¨yˆ*¿m ²úè(EÃõ Ь½ö>úLcO.ÁÈO›k¢àÓý•FlúV;Õšz[·å̘>öÌ@R7Ͱɸ/^ɸ/ZÂø)(‡XÁ†qºXª‹“\Õ_gÆ“s…þ‹>¡ÂÜ-]ÊZ[99ß=ÃR÷=Ý©ÛáÚ£Ïõ\ÃåélnÛ nó§³TÝo\ùò#c Õ¥ÔÆsÄV5§^†i=×ñ{þìëÈ5^™!”t:òÙ›ìŪýcÁäN¿ Rœú‹GбŸ=‚Žÿº2hÿOËÔ5GƨÊ9ªóv d+¬0.~ÐSjôæ[ÄWŸÏ¥ÕØÂ£cÐWª^•cîGò0_…Ža5&Bqç¾åÑ"qÇ3Wp³Á3¢<¡cOyöàOôv ;n/æöE(n!fn²ç37 às6;°[Hœß÷ÖUÝvoAÐ7®ì‰7JîÒ+½ðñ+ñuˆtåËhîÔµêÈožü¹7ÕÁ¿®àâË­¤P#eH² ú·ø}?úèÎ=\üŧkõŸÝ,.¼Ö)Oþ§§úCC ¢îÓ±^êhfêà±Ì›QäçÆÓ_dT19æêÕ9æAáɦ\d¦¹ZŸfêºÂƒYFüç²ù‹¨—Zc+$Y©B£Œ+äÄ Kmz¥ÕŒŠÉ¶ÂMåø °äžÇJíÑÇZáØ7A\EË>«ÎNÝõp‘°ç•¸†Bfí9Ó`¡ë¡»îìõ¨ðkçÖÆÜý 1äüÍTaÏ/ô I%GÆ›ï»u'&‰•N|Ãř†£“Hž0IÕó“«jëA¹[ìTk÷SÖ^pV§6p÷ õÂÜÅÌ’ùîŒÛ"o&@a„>KU\…ÅÜñÓgKf¬=3µÿf)É?_ï­Ùt|zòtëNO“šï, ®Ø?II4U±2#êcM)‹Z©åý5%Ã¥-§çíŸ.cÛo/&¹ô4Œ¿ºåÎ\õ±}¤£ßñê=Ï—BGAHYߺ |ùéÜ·‹¹¶‡‹Åݯ½é\ßpt¢Pµ{4·íæ<ñð‹ áƒ,ÆV¸ôu¨øÉ‹HþÌ+ÄÄE\é>Gu\©…‚5öòOW£ç>¦¸/Ÿ²©?Ÿß5 Ü(>ª°Bˆ!¾#Á˜_Ó8€ØÂH¡”<6|2}+BÏ[?±úØ.®Ð‚K)³Š;HrÃÉ)\Û­ÅBû³ÂÁ¯ýÄC_)ø}ßzPÞö‘WÂߪѧÁ¶?]Â6Ÿ¦ÚÿÆ}@¨e±ç[øø^½ûÝRUÓ§ÓT?/Æ÷ç³Êû±‰ùBÍñ l÷[7nÏ»àfrµGÇsÕŒc7_Ÿ©êüv‘òà¯ËÕÍv^¡Ìœ 3™ic—±3˜Å3g3+W®d|ü™•Þ$¶‘üØ7Hb|ÆÛSÁxû*ex¢ ›Õhö ü z´ÁZëOäÃ9ñ=\¤1ÕÛvy¾Ôñt%ßùÌ Ìn.©ØJ¨Ù7V<ð4Pwø¶¶+Vw;KEÍÃÀÄ’>`5§êä“ϵÂáï\÷ܾŸ¼ÐÆ·Ü[ˆk(¯­Ê×ìqVï¼>W8ò:H>÷2B}øo^ªº‹Ùº›S•¯]‚:¾_¤®88J‘o¦”“}Ù#eX¦)—´ÉVµ:Ï|á,fÆÈñÌây+¯åþÄoªhD‚ ¯­:0Q×vÝS³ýÖ2è®C^¡ŠÕ3A -¡z˜ECÑë~÷xô‘’80R(عږ/²äâòú‚)–vfw>^H{ë?œÆîú|!z+Iü Öº!Ÿ|¬Ó_¸(_~¸Š?ö]»ý³9"‰ýìÆ'¡7ýkÂå/ÃUûvS´ V§6ögKºF¨»qU÷¼Y|‡Øæ -õ¾ŸV€ÆF§˜aMC¡0¦œ–æ›sTí\øÂÎaA!Y¦+–ø1K¦.dV.ö&v©bÕ<£Ö†³‘¤¶LZkÍ'åZª¢SL¡AI/f|V“ƒTsv*˜>àºê3i£³úGg[h¤c]t–…~mç±åæb°žÀÆà ¶æ«÷á:/Úﻊûžû¢ÏUª=0´wùÌ·ZöØ?HÝq¶:£q—ÑdÇu¼YÆv}¿œßr}.»þø8¾°u¨ºòÄ6s»½›[ ã2}.ã¹ÔŸŽ'´¾Ôjò“ĵ>Ò˜2?Ê÷RF§—ÑÌTj—ÄoŠÇ¦ Ý_zq7—Êeý¥¤\+¹l»#ßtn†¸éìt~3ù¼ž<Ô{¿Y.7rê¤ò#c¡µÁç68ˆ¹[#NŠEÛ‡R¦N©3I.^ºg”X¸}(eIf7 äs-øÄR+ÊÛYÿáDú3}Ó.:¯Xóx úðÁ¨R¯Ê5GŸ4x{ÒúS“äÚ¦óI¥ÖA\„Q :˜=s %VRaÛpÌõþÜÕ‡ßxq{¿]Áu¿õ`ÛŸ-•ªŽŒÛœ¡ë¥;k`ñÛ{Ö\Ï×^R÷‹ñØsV<óB'|ø\Rï}ã&lüp -¸sˆìö?ÍáŽ~Àþ³»åÆl® c(ÖÕØ¬­ö|-ñ™Ï–"‡àvÜ[ˆþqðüÁŽTkÉ\ ‹7ár6Ùcm€í|¹”ß|m]Ú××K&u'ãï'3RêúþRU×°)¥Ò®QäZ’2›pÕqù}ÕÁi¦ªðhvð;n/‚V˜@šÚžÉRýG³ÁÖï“2®‹;G=JYÚ$V¨[®ÎQw>YBæã"aë™Ybó' øÖ›‹åÝ÷|u=ÔR×-/a÷aßwÞü‘o¥³_ËwïåêŸß¨Ñ?ø´ ý÷¡W.dI§kàs…‚­CÈÜ+|í^\þÐo~ꂞ¡^<³Ìe9ÃÆ×X í߬»¿ñ_Œ+îÆVŸ˦o³C.깚­Á ø6”Y±o<ÕcŒÌï#'×ö§Z9›)]%èá!ÖéO]–ßWƒ #„E“ßWô?ð½¯zïk7°Í¸í]0¾`ÑA³@ˆ#uer¥­P¼k¸PBâ,©/Dâ+„¼Íƒ¤ìBÞ–A\1©Ò7Ò7Ù iõä„k>¹Ü†'1º¸Ð ¡: Úc1«Áý­\×7®ë¥+8RÉ®‘T«h©sš¯»@_ úxÐå…6CbzY?0\„C_ú˧ŸhµÇé¤CÔ¨ÀŒÆÚ eÕœ(Vîrë‰ß|i6Ø3ÐáIÄïëÃíç¥îx¾s 3 ú3)EÖRÉGä-ÜžoWŠå‡¡»DjÔdЫ÷Ž‚¡Á%Xªtð Æ`¾³«3ÌÙØÂ¾üÚý#ÉÜv•ªŽOT†3˼ÿ ™áÂÓÍäÒ#ÁHH(¶‚ø„BR¥:*ÝÌËObÄ#r-ÁÓ•M1KF¤üì½Î”¥‚ŸU=ãåê®qríÑ)”•²þènË…YTSd÷×^Úƒ¸ð>‰‰:}>5ôøg‘R×cÊ£ c-x*h¯>JÒ½ü¼*ôå•zôÊU¢=rOD_>ôØÍMgI ÂîüÌEÝùÝR¶öã ªÕå}Ýݔ̒) R€éDãfr™µ?ôˆu‰ÆÊ°TS?E8ñ›áŒžeöTDóeßà–++);-¶Ô -¬(è–€¡/fÕ;ð«Óû në>øBvâ³X©áÌLpéÀTâš/Í޽U ÇR+÷ü´H(?æ †½PKrÊÆfŠéõöAÚH#äzbÅ!gÄYÔÕê°S°ý¹5U6`riú« -‰Ï,±㉯ËXo'ƒ7™Ý<„Î0  1•p’©Æ±'èXaí‘KˆÄ¡^Ó–Ð12JúÉ9Õöà2â¼ ƒ -·\}pxu$†¹õ2²öŒëºE”•^çŽ!Xlç£eРZ°ÐSmº8y—tü9>e­5cÂ…Äõê6‚±Lb%»óö1c›ƒBo$ß(D‰QÙ}CÄ‚æ¡|zu?ep<ÕVGÄÓëͳ ÕÆ”³QÒáˆ%P)3|X²ô‹H2H.j -M,Äsè°òñyX'SʱÆ$G0b#rÍ…´ºBtnµK9EXùƒ¥ê=cIݾÜDq÷o¡ý W©ñô,Ê¼ÛøÁ4hvB»O{à>öñå´Èóeº­§lȦKs0GÙæËsË埅Éמ'¢O5<8®BH(ñe«M„ŒFwRêúa­ŠÏÝ>5‚?näºÄŸY8aã±<€QEdš©uI&>¤vu÷V’\šäšª¿­dCÀäüR°ÿùðT35ṁ­1“³685‡'À‚ÛÄo¹1Owè¬;ðLë>˜JÙ…e;Fñ¾ö“ϼæÏýE -:jðä«NŒ£qúd¹ÍC¸U©fþJÝYôÕCNkîå£bà©NÉļzÓ -¡ÍÉGÆ™‚‹Iõ*‰} ¥PËŒk*§K/ë/¦¹TØ2z`i6›F¹Ì$‡Ã’Ì(¯jÃÉÚº#ÓÀå‚f•“hNØüéB¹îÐð {õ ­µ)Uý¡× } ¾õÆ"±óŽ;r30C©nvѶáà`jŽ>ÖèÏÞ]­9òPä[®/À†6G®%tSÁL²„ø -+6"Í ZRz#ÕØ„a^*¥0#nu–9Õ*kwÖTتBH~BüØ¿©õh,Ϩ·ë][ÒãLõfJ›G@÷‰jºâüIÝV:´ºÔ$F@oKX³®ŸÙhO5 ŠÛµ•‡'RžÖ9›NÍ;o{j÷ÞWjvÝó7Ÿ› »”É÷ÌÏ…íWˆ»>wC=¨é~Èu>Y.å·ëÔèM¶õñBnßž`N¨Ûž-ä«zFË…;†ã»ù¬ô$óId„Ør+nu±E&Á˜‹Ê2çâp-2Ì|©yÜ—ñó˜…Óæ3nàr†)CãLøŒ;aÝ¡±BzÝpâÁR¥:ÂÕvÚüzh÷ €ž¹"PÀûDõÙÀ§"þûQóÀ’ÚﺃÅL}SJ¾5Ûvkåÿœ*œù³†Ûñr4Ç„¤[27ŒýHíÄ3°A¾ë¹;Ûtq:ü¤—Ëx{+è]Ñ1ÈØàÝ)ªãMf}¨1xÇAœ–QËaÆ`ySFtbžµ””iÁ…¦™Q¦<ñ‡ÒŽ«Kt­—VÈ›>œ»¢RÍÀ·][(¶ÝXî—T°a͵¶_]À·¶: ºâ†áÚ²]£¡ «96¬C¾åêBí¾{*¾û/aM¥-gJuÎ+vŽÑlì™ÝA±ûµ¯ÐóÚÆú®§n”ÅTq`¬Sa)ÆZrdþ©Èx€+-ÕÆïx¼Dn¸éVtÔ0fXK›HÜû•Õ<%þFÌo&¶§ùú†§K;Ÿ»Êí/½tíOýuíý…]_,ƒ¢&«ÎA*í–!8zØÏ¾±PÜåHsŽõ§&‹[nÌ—Û¾Z)w¾ôÕuÞS„tÝQivßõ?‘Ìåéš’–‘º¢úaš†“³Åö+äÖ›îÄ6]hNFr¡bÏhë&Qž^Bµ-41ù¶ÇKÅî7~RÏë¬[`Ö„jÚq éù\ÔtÝñ%~u‘Ðõp¥tðRÜxj -Ÿ^j†¿˜Zj ­cü ­›cíA*Ýíæ3â 8cBÙþÑbNç06*Ç{$fô—ïøÎMÜz!±!'Ô~rnÛpÊ®ëzèÎ5/4³°.F×áÊ»GÃæu­<Áz;ž­w|± Úòª¼¾ÐõƒÖŒ°ëÖr¶ëÁRpB±&Bý/®såg¡õÙ2Ý®G>BÇW+ÉëÝÁ}ÐçÔ –ÂטaÞcÍI»éä,¡ã¶›¶û®2¸ûž i»ãÁ·|¶š­RÃñi`ÝIe©îUå“4]ßøÉ=_)…Ýöà:^.“*ŽŽ£ëÇ•=Δo·ÿ…Bò‹HíO‚ùMW¦Óû)õý¹¤*kÔºA¤„îºBZe¢”¶Ù^&ïO9’ÐŒ!v§£ý½Õ”w mð uµ'gêË÷Œ—Òjh’Ö÷×ä5[ï/×¶ßõ>«ÍÝ4˜²_Á»^³ÖgÒïÚYÜ6’—y©Ôž~A™jkw9þ¡…<Š×®!þ0ÞDJS´e0ÎWWÐ6R—Ù0 T}Á6Gð`k©æ‰·àâS-¼ìŠrã§.Ú÷=ƒwÜõÕ4ßt¥ZÞɶúÜ-ÃtëON‡ÆWp*462-¨6ù^º¬^·¸©g’tøRsévŒþÂD°¸}Ü|™@¾—ÅÝyÓS·÷‹ Ížû\ǵŔڲýérRCÏsõˆvM±-Fr+’ÿRíERgð$Þ€M¯+ë‹X^ °îøx>~½µ:<à uôK4%ûGkŠŒ¦—•& W³ˆæOÆ5„m©¥cèòÁþµ;ïyè[Ÿøh«OMEþËJ‘FA|¨‘€¸Í+h5¸,4œ¤uœºÑŒKr½Í¡k¨m%×kç?mõÙéà¨ãâ'Ç‹¡ÉfÚÔÒ~”Á¹õÜ<]Û}ŸàöÛ`î‚ó ½#®‹ø³-7æR]„ü¶á`ó­/–ò ŸÎ*NŒ6\$5Õ±‰âú㓸=]ugoF…Ÿ?Ÿ®;ws•êà;w¾þütaãÕbN+õ±ÐœÃ}:qm›#Öõ þ´;ÄÎ+¡{âãáËxy¿ª’Hbô‡Þœ.©ÄVˆJ4C\¤ºYɵ •‚õwªa“gy§M-î'ב8Æ*¸ÜT;‹ø¯Ž»^šžû*0øÄî¯|Ùv’Ç@;kU©¥:<ÝÚ²¬gбÆàqëËlu1ÅVÐ8¡LÙ° s‰2m‹­)Sy]÷X|nh@dTô‡7tfô»@c…j'UØRÝÂÒ½cƒÓk†$ÚBSE³®sì,nMõÞñ\Ï /ý™ëÑ!7.H'^°ß•J¦W§iûèQ÷úè6üÀîg^òþ'Êà=ÔRÇW"‰ÑT;‹Älª3”×< ÚY¬.‚jgiÿM;‹Ýÿƒ;êCÜß -ôçh®Ô«UNµ¨¶Mj¡ ´)¨6<åÒvÿ¶÷‡v–vÇ£•ò®g+©“9®ãYb[КÇk´ÐjÈÙ0ù´¦¤}¾“]h!Eæõ¾¼®åþJ¹ý…'tøh¼>ÎX-FQýh†WïC9ˆuû§HMçæjÚîz€«+u¾ðãQh}²œÄ<Êçþîüðq绾ñÔ|~õb‘vïC…Xwx]7„ÎCÙÞQ|zƒ]W¬;9UØziÖÂU‘i¦`Ë$/G\×u>T`Ì±ß -9'Õ+†.4µQÆjmÍõ(›{U²9t‘¨^ ô #RÍ5ñÄn278€}®Ùû,€jg•“kû‡vV ´³H~—Tl£]»m˜±º\÷~×ÎãÊ­T$XÉ2¼a,êÈg‡™Háñf`-‹zb›«a¯µvTÄ1º&’ZÑ‹Ym -}&0½)÷zë…y”Å -§ñN¬ì½ºà¼úaÚu=å¦+ $°¸×÷L€þ•vï=rdÜËòHΔPf%Çô²¸©þPËíE”3 Ígp®ñ½7f-ö£QýÞø‹Þuàlªñ¡-²†v”61ϪW;«ÑQÜ÷ÐëƒR´³ôŒR=“Œ>ÐéÂ}7è…!iã3-×Îí,Ê+ýC;+2¯¯>×HMýù¹ú’ýãµ$žQÿêµ–T·+·eÕPÌ]ïK]ñfG°ôuyÄ’qÕÄ”ZQû®¿0¯'ñ°_ïë‹{_Ÿßáf5ì[L$¶šY9@·®k|pÛMßÐwiÝÔy÷_Üyþîü§ªÿ›;ÿh¸óú3Ø{ñBƒ˜ MmþΚâ®Qlt¦9Ö$ØÕ9}¤´ vˆñÐÍ -äÂŒ|ˆ µÒÎríÈsåÜöaˆÐöã#rÌÕBˆ‘J¥aˆ˜RÖ5eý¨{FùmÑvG]F}¯^æüºã“…Î'+¡K„õE5É{ -s…Ëø{xSí,µ¤5b…igÆb¢"PÏz¨H|‰2F|ÒEf÷ÕEçZèb²,4‘i}ä¨ì¾ðÑÐâ¦úÔ…MôÅÛá?ÅÄl Ä{ªwA®­´í¢ 4~(Ÿ>m½òV-Éõ‰˜¬Ý|ÖE³ñÈ4MÍáÉT³­¼e”°ç®'öÞ`­,n)}ƒ@ÞúfRë]7ä¤XÔÄYjã -­°o„jc•uŽÆz Õþ-ìtÒÖõãÂM©–‰™4Fþ¡µëî -¹óž7ÖRþÐÎB¼Õ¤m²‡=˹µÐ+ƒvô’Q›ý—vVI¯v–žÔû!q¦ˆ/úô åˆtsÌ]0üµkêìÁçêJ¶¤zf9›‡êó7 %>pb‡žÝ‡jo‘×gl„׃·þï¯G¯-ß5ÌmªÙ‡\cóå…º¶ËîÁ•&kòêû ½gª[ud¼°ç{O¹û;8²ÐŽ…6}=‰Xš?š«Y·g|¯îzŠ)´¡?€õ@Üó -àdF!G¨5ŒRŠ2Bíˆõì@µ–&¶D|†XerI9±Ò&HÊø Œ ŠôÑ&ºÜšAú²£¡ƒŽºœj›"îTžˆµª[yhöØS€š•;øÔxqô案½’R°1´³XAbhg‡¢ÚY>äóÈÚﺴ{mzIÿà¸,«˜Rh4ÊIæbD¢™&ÄOhwŸ,Ww…"4ÔèÚ9tÍvÜ^&í¸±ú®šÌ¦Aú¢'hTÈí·<çã>r*°¹©>áºÖ1Bûm7Ī‘PIòŽâ#¤LrŽÐåèü‚ä[7Wè 6ÐÅY…d5 Î#uýúî/XýûÍÞçJìä–;.T;‹ê·ϵ|Bµ³ÄæÏQí¬‚fhg™øa.j¥¢=Ž`uSmêuû¨v–úÉÐÎ*éÕÎÒý»vVâÚYé}„àN$µ¥–äíÈy¡_´Ó|oèo '˜.£’ÌϦáÐV ¯'u‡M^²Ú„ã#Œ K…œêþàõµ'§Ð45H^ÒË9Þ;VK®¥&¾ÈŠê“Ťõæ·&oûP~Ë'sÄý¯üØ]OCÿ ‰6Áþrž­/nâï£aT<©É#óûà9JŽQëÃŒåœ:¬#"þ ~Ãûb ºÓ\Éò· •ê>˜ ½ -hsûy²ŒŸË ßc2ˆ?nª]¿o"´|i^Iâ¶ RE|.©eä¬zªù‡ýVÜî§nòžgþT; Œô¸, õ¿´³2×ÎJ³ÐSí¬CÓ5õçæjS+û«ÙP#|wèmã^©.·qˆvéÁeícƒSK¨¾5­Çs· ¡<ö–k‹¨^‰CÐ¥¡,{èPmò¦!rÎ&’{í‹8(¶\_"ïºí!´^_Æ7_š xº†ý9´–Ùå„ó’?š –<ö=j«OL….©vÏý@yóGó‚3ÊíÅð8Sýê\KR¯¶ßX‚L"µl¯¾d¯v–@µ³î/“wí§éy„=Ȩ¨FR±5UÐGiÆÅ”ôýC; ëKРúJUíã´u‡§i×nNãûÚ'iÓÁ)šÆçêªM…v¥&©À{Å0DZn¢+ns·œžÝ«Ïññ\ªS±Ã ÏEìÐ@«îäLݺ£“µ…›†Âkðú°SèoAç^j>ç"¶=pÅú½ç-Áâzâ{7ѦÖ;P 縵Të^¿¶ÕI®îpÆý µË‘G®©XÑá$ÆæZ¨ÅHc68±“æ¿`úg×9øyŠL*ÌH Ï1×ÅWÚ¢¾ÕånÍødiãÑ)ÚΔƒŒ{«òûÂçK)•¶ˆ…œ.ÑD©3Rbω=È¥Çt­#iŒ$qêìbÍ“ÔmØŸ†õÒ^ý’ngaÓ°õ]Ps MgfB‡@—½eÕ+lqDÜ ®h¡þA[{b††ÔªÐÀÁúf¯¦p]¯‰¡ÈSÎÎ…öòª‰ ’KÀ? ׾hþÐcÍ`\ohÔ!7Ÿœ)o¹º¹"î«@;º(ÐùNÏ ¶ m™<‹ÆË;n¹Â>¥ÎWÞ¸_§í¼ïÚ}G–ˆÿ„."ú‰QÆTºl×(yMe?ÜÓǘ‰ù–¸/%4~<‹ß~c>´³tû ìî®ÐÎ7š„ž©|ß©°cXÖ]s>?‰jgA+ëY5Ä>+;É9‘ó…vVi¯v–¼åÃybóåˆt½•Ä|]a³#Í5‰ß‡f òaaÛ¹¹r=9ïÊöÑryÇhª5_Þ=NÛtvž´íÒªk‹{.©ô…¤>€†_uÏD©í¦›Ü~ǃo¿¹”ßIÞkÃÉ)гƒÎôž´ëOO×eo*DÅ›ÉMÁš†öà=y]ÛèzêÊíød>Õw"5­5ÖŸ˜*·\_&o½ºy’BÊðútS)4Ók>Úäµ¶ÐAÕÆfYê2Ö;H»>wîøBIµdrê!àI=¤$õ:Kl[Ð1Ð0º1ôh°®As0ªsšg©+hí.Ô|rQ›#47äò½cÐcB×™JzœEØ+Ö/ ,åä"käaT†Ø’¦öÈÜÏ ï kmĈLšï#ÓT› n»¾k"šòÎ1ÐüFü‰ƒ¶®+êQêK¶€f5ísi¸:êe×R T]VÍ@ªÁLÆy¨Ü@â6©ÑïSäEåíN"¹ö´6‚n69Ob§¿kºÛHOÅš†öØ#­îØm½Øqg…œ`ʪd÷¯¨FMQã0ªñ7äañ¥Öt=áß´³Ä¦ shݶ¶y„\zòq¶õîBÔïlT¶9Kr|1³e´Ò4•¿kq’ºÌãQÒÚYem£¡m$aNm?O5Öµ¥{œ{ß·c$ìւС®Ý7Aª?>Ml¾èBll¡Ôtæ,tͪ¶gÞƒjÃU»'Ÿ‡\€ú6èN‘9*Ö‘Z¾ãîrÍá»<ø+?®íæ"ì±Ã=wmÍéétßdVQ?ùð=uèék«£NM -?òi”~ïí ¡ë‹¤rÃw†/Ò´:’±$ç@®}Uç8ìu“¢ ûj*§5sóÅEšìÆAjýjcäÔTÃzm—t·Db?°qVŒ1fÙ`’ªµJÏQÙ}㼄mš‡u ROöQs:#ªåI>KSÕé }+ì_¢šDµg§ó[?›ÍhÊÑ>RËb-JŒŽ3ƒÖ®§fÇ3ĺ¦`-1ZŒ)°àtɦÐQÆ=tMÅ‘ T…Þë…&ÕŽQÐYÃÚ6zÉäú sqÏŠjb vQyz²¶ìÀ8èPëŠw9aÿ´ùbonIçQ÷x]ÍÓ`÷t¬±Þ=®’–‘X»–;ïûÿ=]J)¶‘cr-İ3MFÃ@ìë¾ Ôy¤Ñìy¤›o/¦š=XC ºÓ'gŠ­Ÿ-•v|¶L[µoÕ4‡æ-ÉùhÎZ{döÂhŠ· ‡–¸åÜ~ÏSw®ùÓy¸¿‹ûÍ´×1®ÌŠÆ¤šC“áç‘Ki²ÊÐ<%Ë0]i«½'Dü;ß|q·åÌ \謣žWkâ¡_A5UH\¡>¯¢{X&PÝ œ7ÉiŒ ó^¬;4Q$ù9©[æ ŸPIÄ?‘•Þ›4AÝ‹‹÷"Ͱ'káÐ)CÖ˜©UÁ½šˆ¹[‡@Sç„{cBÔjÓ_’Ójy ± ÜcÎÜhß«gþátMÍÁIXCÅ=H䌚”[ª‰Eb4r$|7]EÏMÓùùXŸÑTû#ßO[y|’”Õ8{"ÄøKMt,ÉûÃåï†8©–}b¾Ö/åÆçAóˆêAk Úp¹Û† Î¦÷‘ ÈøBƒ zyõG§!¡ºÕÐl/ßíLjªÏ{çðåT‹§õÆ"há5´ÞC­Jì94 ø¶§ËøwÃçijH.]%ÄÚǦñOÜ´ûƒ{õTë+½ÚŽî=ÁZ#öUš(U¼úÆø;üt—;î.e[?[Ào¾8›ÞÓÉ$±¶CæX¯¾qËpzëØ;œ·ehoŽÜ2û¸ÖOiî$Wvå³ÌXÝÔЭBÎM81w‰3›Ë$ÿ”±ßªzß8íÚÍÃ齲ͧf‰m7–I›/¹à>½žo®Vq«H,+Ûíĵ|ê‚÷§÷kò‰=µÇ“Ê»œøM‡&rm×qÍWçsÛ®ÌE/ª—g}L1>ËBSµ{ՇÒµûÆÈ«I _k¥ÍÚ:Z…hi“|TªÝM|èá)°IRsYãÞü ô¦4IÙVâšJ[MF­½\ÒI|TëºÎGj&Zo×áA_Zá§b‚Ôƒ<µ ê]\wäI¸ß*›•²-¨mCcš\3MIÛHìå‘ò,µˆçMgæ!_žêAìÙÒ–w9cïæ¾îk2· Bí ÿ<’ꦧ­·£{Ž Ÿ¹ÑÄ1ç¡÷J|Š”Ý4šÎTOû Z¨f·¹tn±F›SmOµš¨þpÕyÅš ÉC1Ç¥M§{ý´O‰£:WЊÅ:;™cš ríJˆ‘úylÔ@s„¦ga‘ --Ï—7÷ çIõÄ  -ýa¬ó`<³r½WJr"è³iv? @Iòm쥭 ×mÝþñТ£ze¸O—»Þu´ë0·éu€Øxb -ݼþàXìw…n"4±_ó‹æäÚÂ_éŠZGÒ¸T{lÕ'ç,­Û5†Úiõ^g~ãÙ)|íéIbf“ò9znØ÷²ã³E˜OTc+:É :᪞/—±|(õ| u?÷ã7š Dg˜£?ù»qÐé!q`ÐL¬´¥ß›ÎëS3 ï÷Çûãýñþx¼?Þï÷Çûãýñþx¼?Þï÷Çûãýñþx¼?Þï÷Çûãýñþx¼?Þï÷Çûãýñþx¼?Þÿ?ãÆy$D¬ M µ½mƹùÌ &W…®IL± ´<Ã-%ueLxjLbBhJ–Ó"üJ ðç|V:-ršèš™<3xAð$§ÅNÝ|fÍ &/ ÿ:Éi*yêÌé³ç:ÍPE†Æ9Mì}S'òÏNŠ”˜è˜òKuxh\dïS“‡Í4—ù æLŸã2{ž“ËÂY3§Ï¿p–Süÿñë LŸ=oö,§8üº÷/øuïþß¿þ×›Äý÷ïg³ÊF°I° ²Yè4q’“(ØÌtr‹´I1q‘‹zÿ¸"’|ã߯ yâ,'ÑËfÆÊÈô˜ðH÷ÉÏI ´Ñ8ÑÓIþ›Fÿ4ÍÅeÖ¬}µ9N:§Yó8ÍŸMž ®úß<ÿöûK~ÿ±Ài.ùìY Èÿf’?Ò—ÛŒG¿Fq‘ÓÜYóç»Øˆ>–Þ>ãáÀøL€:ÂH)Dã ‡+¸P£À p£E”‘·ŸÌx®T1¾~FÅ®2RGš£Ã‘Ê7g£òÌUéfJm²±‡›‚Y¾Ä›ññ”˜@>Ö(PŸlÈÆ{úŠÌJ· ÆÛSÉ€~¦Ô­2VE®1 -M2áâ×Z²«Ë-‘Ùf~ª`&@Æ€ø¤O5e#Kû¨B2Mý‚‚égûéÈ{¨å>ä§Š ’¢Ññ€Ýéþþ!ô9ARŒ•eЉ.»v hEú¢–‘è¢G—+%ôÆ[¡Û™vµ¬©€ÎRtc×1:1u¥Í£Ðe‚NH>,ÙTƒÎhÐNâr-A…¥Ý•ŽÏDG&ºÇäø|KJŸ ?5«³-4I “4 IŠRIð|t­Êì+G­1×'”ÙêRÈç§­·DHÊ·¢T„Èls5º‰y½§ 7‰T!"Ù Ý„è–"SÌAÉVqÃ…Æ™H) “†I3ç£S(=ô-)6Ï’ §ªÙ#µf$¢?–œb¶¥6oÃ`mõþIº¢ŽQèBÒÆ áif *Ðs¯Ü;N‡ÛUä}Њ뙲n¥´:jJöŽ– -Z† i¶bêòûz{)«ÞAˆ.ê¤K0±UJ*´¦´ŒümCépJ«)@¯ ºж CvÎÓê 4ÏáƒcMx)ÄdD¥.Úm˜AQFJU¨‘ŸRË€¶¤FW‚GIŽþ&JÞ,ƒÎQµ&Þ„%çÇ“kJþ -¦ÇJ¥ º -1å–\L¥%–ij·äRE(ÃêW›€zé¨fÐ9-®Ù0 (<ÙÄ7@fVx)˜t¶†f™Ë uý¤ÔÄø2kVL4†:C>Õć<ÏÇTÞ#PŠð=@#R§› -º$S!*Ó\»ºÈJ_h­I«è\P›¥É­„æ,9_òŒ5™›´ù;‡ëŠÛ@1ÐeÔ:€ÌHIVYÕ°).ÂÉ0׿´ #×w¸DŠ‚m#´›/.ÔÔŸ«+¨ŠçHÄv¤„L tP*II+í若Œ‚Íg7 Õ'çÙèR2­t™ë@+ 4†5kmA‹Bט< c"„'˜Q"dl¡¥˜R`NJ}þÖèð•SKl5Qù”T´e8º­´™ur\¾¥°j9ˆ\´ ‡Ø>`*F&›ö É$¶‘^1ÝòºêCS4uǧë2¶ ’ã ¬ÄÄ|KØ9:ø@"BíÐËjD;âJ­a›Ú¢öQ”xµå“róÍ%è`” -z)Br‰µZGÆ‚Øí:N%öŒÎÛòÎ1 (P%·„Á„Òb"3Èœ7Rrz¤U|?Zň‚>è¼â+¬AßÃû(¹£ !Úˆ”É9 [YJo´—¢×Z¨u)&ø )Ð}¬‰-¶‚ŽÏjtéõvUƒ4 ¥#16«¯fu™«M2Qk‰ N4Õ¬^k¥ÍÜ4P—Rc§Ï³ÒÆfY  UŸ]7H -G—C¶9:\¥¼´K ´ tÉ“ñ±¤ªd(™'³ÆA›Zm‡®CJÑKoHÇ)oó¹îÌ t9¢ ]¨š,r]AŸ ¾"ºŠuOÏÖ­;0IK)»ÇëòÐ _dM} ñŸ½»Ä'Ÿ‰.ØíH%c%Æf÷EÇ9lF—Q:]«´ó]%%»Ç «‡v¦¦U  öFü².½Æ^›Z9@“Rd?‡÷¢D,Œyní¥ÞëöŒÓ•õŒÃ\Ó–ï ºUog_·3í +ë¥-Ü1”ýÚ½Îô³@4H.´–‹ZF ËŒv:WtŽÑ ›!MCåœú”ü rw\%UŒ¡”áŽèR“óëkÒÖöÃüÑ~Ô/|W^OÆöˆNâ3`Ÿ SˆÑñfèrvåë©`|ýU èM¬HlÑ›güõ +“ןć§˜±º(cøJˆÎìûofCW›ð‘ñ¦èzöS°La,Dæ˜ 1… Úâ³A–‡ñ!™fèòÅÜBwíhJ,!ß¹¦ŸˆóK,³Ö¤×Úƒ4¢hšÔ:;ý|Vz1œ6ÎXƒŽ™èbK.$ÙdJ@%±— ˆ/„ÐÆf[‚Ž I)íßʨ¸:Ï݈ÚÊ]ÎèX†€mɱÄ>ÉxÒŽ§ÂíÃAäA'­Û—’Ã26Ñî>}ùÞñ´KšŒ›6wëÐÞ¼ m”¶¢k,ÉAÒVuÓÖ› -ߤ­:8¾H—Qe -–•dF;¶È<@n!Ǭ郮TmÎúš5ëÈYõA¡2P ó6£ãl<ºu%ĖЋŽB2(õÖÈw=d7Í ç„¹„ŽTMÍñ©´Û¶ñâtb¡s NÈg(%§p§#Þäpt›ŠÉèú+²Ö»C§l±j÷XP™uûÆéòÚÑiO>k0溛ä¤r[ãi·;¨»kÊmiLÏÚ<sEH ×>1Ç]zÔ§_ bšDÆo%Ã×Ñïñ ¯A‡8®ÈçjQou1†Ä…Õ– Ë -Á©¦RX¶9ˆJ áñÄ/rÚcä/èZ&ÐfA>Àƒæ:zb¿IÖ”¿yˆ˜Q=]ÏɸÈL3!¡ÒÔ)iݱ šŠã)ñ-<ÕL"¾”v…’9Œ¼ôEØoÚ¶Aè\W€&FSªñ“bH²¯‹ì%r“sA\F7íÚˤy 6¾ÐŠvˆÒónDs@øÈLË HNX´}µgPaÈ¿cìáés36B.šõQÙÛ†Òî?¿‘Ûa )=%ŸäqYõƒ()­¬¿6½Úž’ˆmÀGÑø›Blð±˜Cù[†Òîk§²*ít%»FkKڜйK;É|ża{˜7 ¯h(ÉaÇH|OJ™šØ!Hw´k±x;íP„mü«;µúÈD“AŸ×Ÿ"6¨è@ÄOøLÚM‰.ÄâGt˜ÒÎIbk F€ÚJ/ÍŒørr-ˆ}ÙÃ÷ƒþ*¦”ÚP5ŒŠgÐWÐ ‰Ü~ONZkƒÎBj)ÄfÓkí(-¿K-±áVç÷‰ï­ÝôkÉ#þ˜vÙƒ–XjúOüŸ»¦® ð%äšÐ'xA⫼ØL‹ÞîOòêÎÍ s‹Ôðt¾‘ƒ/@n#ל™.lÿl¡¸é£”*\{j2í\L¬²•rZ†Hë>œ,¶<\*Õ_Ÿ+Å×Ù*TðÓ±&šì†Aš ǦÉõ'g +œ^»²Ý£Ñy‚¥By2žä—id\ÓHü"óQ›»m˜¾dÏXø*ø1d• èG4_ªáá ñq°M-ˆ®™ëìA<¤]—d‘ÑîS2Þ°Ð%h'5:fqMÈü Ä’ É EVè<¥ø(ŒWJu\K |%WÚbI™¿ÇXäýè …Í€Šò±Ó?:òñ]h×2É!%ÿ2^4æ#ögVۡΕ€’#7ž˜ -"6íV%6ªÍÚD}%}dÔØI¹5öP³€í„Rþ×qmÛJæH)³¥ç—\ÑÆç²ž1 ËÀ€øŠ.f.*™ÖXš’¶QÒ†SSÑy,¦ñ‹.è‹1À÷Ñ]©PT[¶ÏYJª¶…OŸA»Í‹pmK𛤀݂²-ÄY¨¡*•a_‰X!“ùOí³¢Ë9HŒ2R‘X®Ð’Ÿ¤VÁŸƒ¤xc©¿Xm¯â¥!üÑZuj2¨¼´³µêØD(€G»˜3H~Lÿ¼Ñ^®<8N¬ûp -hÕbþö!Pô‚˜Õè ß6*H šCU@Mê0(€Ö.&WÚ@­C¥O4FNJ<©ÉôÄGåôAÊŽ&u“=µ+µ¤Þ þô¾„B+9gƒ¥8´=s£õwL¶‰d|¹÷¢Ïo:;„wØ'õeíNð!È«AyCnEj‚‘ð5$nõƒ}"O¤ã% -³ó#o¹EKÆô8gI|‘I|¦9±eªN’ß0ˆvq“¼…Æ!’CP -f©bs,i.Bb§ôûï)Q”$2a“ðC´[ø÷×`¾`NÁ?Ëåí£)©Šüýn»Ç@Ds¾îÈÄoÐÇ0ßñ9˜; €#[£q¤ìˆ43Ì3JQ Ÿ "?Ajæà8ÔŒ"‰w<UÐUO}hËPÔ²\p2­õh÷9™Ÿ¸~š¬*;ªP@b¬Cj“„X2"³Ìy¡¨û”ÖÔö‡j®3ºÖ•,©Uø#¬%!/Äw‚Q·Ç«¤hR‡¬6Ù -?tùÆ™ø,Äd’ [hªOÆüBlýUJYß’I‰ïG~(„ÆšrQI¦lD²)kªûq1Yæ Ý‚`¨"uy/Ñ/ÍkBB©’fªD½®I0QƨÇPOằÁI& 7RZ,©Ó¥˜¼¾ éQ5 `ŠI[JÆyZÅþqPCàZ/¡ó ~¬`ãn×Ý%b÷÷¾ìþ¿z¨[¿\ -&%õ󛲑)¦A’ÖêmÂæËs¥MWfKiuv\DŠÖp@¤À“ ¬á7i=\Ѐ5RKo‚ >ƒäIyÖÚÄLKäŸÚœ*{Ô3PKÙsŠÖ -¤Ö&9’9H Në2Hn -PÖ¦A HA‘„’*3R_KbÔIhn»'>»—Ä×=VÚtj†L)Ìeý(þ¨áâ\q÷7ÞÒþAüžç”J©.Iý_S‚욨3ÐkOlv¼ ¾ñª¨-„8ò|øJ¬ %WÙò«rúÐ<9AZƒ”h^ßêH)Ó$Ç%…úh<äÕP5 $ÖÔò~BB±%æl“úX2´¨÷ñ“ÄO?ãΆd™¡~†¢lïüI7ƒhÒ¬e,ÅYÂoKħ`ý´?š3ÿ!ƒà‚DÖÖAd.õ•OX•ß—#uu©i”ê`&H7¢DIò{ø>q±ÝÈ\sP#Q¯ƒòÎiRL@å½Ê6ÇP$B¾*l»î"Õ2WÊÛ>ù¡“ÛÄqaûç ùö'Ë(MêZmÃÅüÖÞaÝéÉâÖ› ¥]å¶ûîòÎ/Ü@*饒¸RÜ2u)¥ö€V‰¸õ“Ò.'š“‡fýÉ)Ò†sÓÅ-׿û² Ö2`~lo½Nì -sŠ*pºŸÒãWgôE¾¡AÍIê'PÏèÜ$vu¬'HIU¶2©[@$Ǻò^.ŒøÏðsÔt 9>$¥5ÒÜZNªí¿Œ|k ¶Ã&Ap—“ëúCõ\-†K1rʺþšˆ‚¾°M‘‡êÖ”Óµ:Pš±¶K×;ó†h«ô’Yj{"«ø9€a¾ÀO0žÙk¨¸*tHåÚ)yøE‘uÔl:èéF"¾^”»·¤EôeŸ©äqìó.aœãš¨û@Y¡JE×ì!ckö2ÁùÛ¹N+§a}¸NÛùÍù?XJÐQˆëœ]Û ƒ>p8ï—ëáy CK¶ -ã›vsÝÄNØŽ¥ž|¾~ã&ˆáÿÕÙžÃR3¸}€ç°ØÀÀ€…és“ÄVC|ý²ûd.ƈm.ø è"-ºþ`å÷r½È=kµèJèLÚüê(xŸS”À÷&³Šêž‹ŸärØLèb+<ê4§å¡3Û[ˆ‘ 1‡‡ý">b5rBÒIòõkã ^ÃÅ -±-cÜÒ–p1BànG.‚.ܰ6EÇûS ‚ ~±‘ºÓ®'~Ü #Óz4¡Ûí_jŒ¹ÝhÊc³ ÃÓ‰.øN¿%½i€ŸCnJ‚×!×½ -:*ƒýtŠ_ÝW¹.œ+€çåÍuÖü³ëÞD±%æu€½å:X ñõ À±àÞ¸î‘óE7Ò—aãͶxþ†ºOMãb ÀùÀÖxÞ] œ^䕵l"Q¸ö{»öìkÚy2‰ù}Ôr×±Ñ%qàæÈåQÆN±‹É°%P”¡Ý® ÎzOŸ±kñi̽3‰ì3ÁOs\ûtè`Jg”/æ•ØgC×4¡äœ<¨C‚”$²r¿8¦N TBc€¥èjÎíkì×è@ì»Âß)Ñ!¹\—?ßZE(Àœ¨P -S>íç'·ïù‹¯æ‘ág -|S•8÷ü)«±\MloEþO6Šc%Žq 1^]ƒB'v.^ŠDAo¶ÐÞÏÖ‚""(:s¼ s%èR*@TLÝ>Ì×·1g|'qñ}ñ™òuÆïÑzP7‚øàtØ«€†ø:ì»qЙžË¯áy„ubì´Xb6ã릘¯ƒ"ž[.îì–¶”ãËðÚE›‰"[+¹ÎFgâÔ Ò—‰â+ÔÅ鵆¢ûMÚ©-Œy¿“Sƒ8†Ÿù!ŒÅÍ1Ο•'%ç出žbîmìM¸èî|0ðGð\w$èTñ ˆ'áõ ò~ºNìqg•Ä1tž˜ãë>_‡n¯p_‡"ð ày`C±D*ôÍVP.ƒØ:Ä)9®†q)ÇÕ¡›Ä#çÑ v„m!S¾ TåȸfeŒI†Ô 0&ƒ}ÊÅlOÚ#d‡95ñ¿¨A€:cŸ²ÀˆÀ\™G ÊôÜŸjnÄ—°¶öS5ñY«q°w8¥ûÄ€‰I°kCjâ¨UQl“Œºƒƒ¥Íñ¿És*tƒîW`WAY„ŒÄÛû1såºÇÝÌXNÄTí!Òú€B/(BKÁ3s¹³\æ£(=ë<Ö&`®;aèûítl¹2ùa7ׯ ,ƒžna8%ÈXE®‹g\íIZ½<*ôíVn}ºß]9ææý\—5ï×ë‡tEòŒëx#ÈÇäÀ¾JaÁ'A\ƒ:~m4t“%L-G@naH¡Ã&—ïö~º‰»7ˆ?\Ä8Û. ¶í`¹®kxýqj‡7‚NwxM‚t¡åÔ nÄ*þS ÂÔ ¼‡:óƒÿûbÅñ?Pƒ`0lnd ã0øØàhÌ=¡3*¬5ÎN^öžÆåé€Û·âöC·˜Ç¸ÝYÊx>^=d¿ð¿]ô3Z{Ï„®f?à84æF€ ¸¯\çÁÌ5°g9[ -¶ü?`ÌËeÛp]ùñ{ÀϹßçr‰Qó¡[*ãóz8e7ð<§¨pîÆdÙI¼ŽžÁñ6N "h>^¯Çù« !E††Ä­)È眀®ßÖc§€ÒÒŸj³A Æ&ûK ÂüÚ衎–¯¶J]î¬cìÂXBŒs"ˆy:§-æ”X¼2Vƒ -]²›ÈÞj%ð»Ðù˜ñx²š¯ÚŠQC®cçC¼ŠË1îÆxrf`£¤®xc› ±Y® ( ›Zp97Pÿ%7h“ UiÌm¹Î±AÇN°) †µ'ÎOŸ¹9‹?À÷˜ _Á˜ÓQ§ æ)jØä1ëQ u¼w)¼çAµâIP³8 -ÔA™8Äðë#¡«/p .ÇñKŒ©èÈŠ=bÏçë9åų̈¨’ÝDr³*U¶SØ´pÄ. 1Þ6ÐÔæÔ „˜« ȪA(‚m€Ü•OŠŒôÄÜú„‹Su‚¸¤ùe.6¹sX›¯†N˜G/‚–ø=¶7G.yÀC ó¬ôfú -è˜ÊåÊO ź¤×“—sª¯úÍê0|y4‡ðu ˆŠÏàõ‹×¥ôŒÛD.~¾Õç§‚ÂÅíÏÕV0`§@Éûzˆ;sŠçW½¦‡Î‡ÚN-â‚Ó¨AÄW©‰«µ)ëp…¿Ô „²‹òÜš8¤µ÷ À÷ s ±ÿW5ç!5ìã85¼nd˜±M>?’‹/8Ä-îÈ)à}ñwÿºÜ]Ê­»3îÁŽ€J*ߥBÅw¨Ro7qñþKn“ȔΰO™K ÿûWÂÙ¡@N™ûVúÄåÑPÜTØ@å -:ƒ“‰Õ*\÷sèf -\ˆ<*Ç3ä!=C„yÿ0à9> Ü<ç9ì"(‡jiRèÀ.]´¯õTˆµ -ŽŠWøLPì…¸ä°àïæºÊÅ>â… XÇ©o@,x9(v‚ö™€ÉÁoç…N•ð\¸ŽžÉ-jÂ{}ÚxOm5lPƒàiC'pãap (ú"ðè>Í©AèPHO—DÌÑk£e ºí5ŸÛ<ÔiÔw—GuŽR„<*×™10{“Z¯øÁnCEfmùø¥âÄ --ijƒ@’ÒΣ’;4ˆ¨ÊœÞ'ŒûåDd.§AE”ìäÔ 0†z ]cd >#ŠH q(NÛ5j¨¬pjŽCj’Uƒ8û—Ä¥‘”É1yR|\ŽÃ»Æ~žŠ(ÝÍ„îd0îäbwV‚á8§Uˆ‚Äõþ -:¾ý“Ò­C& ¨B\Zìt{‰È&z.•Ö¡Jkç…®×À— > _œJæy—É\]„eÀ àå?®üÔ;ÿA Mb~u´ôÌI V¹Oè,KoclSæ§ÜÆAwò¢ßdXŸ|É19MuRUÓDÚšFˆÇçò¡€;©¸jeè4 Ë!†% AyèÜHŽOø<Ù 5_°F©£—F2˜KÃØ%ñ¥št`Þ6 öm\ìÝÒ{:—ÿƒZ{èØš¨HÄUíe’Úµ95¿¬µ°fˆªAXü©qq´”Sƒ¸·ºéK.Þ˜±5ÞO$Ôž`¬)µ Ÿ+…Z(ÀG®Ž‚XŸ"úàÉá’+~3¸.ôPsá’¼l¬WÎAçÓ°œ¢ÀÜí2‡xE˜Oˆ¿ƒj؉[ìbèf, ¾‘¾ÓÌ¥4éÂü‚ªgk#K•¥éå|Q\Å&4G l^§Ý—!vÉÕƒ@'SŒUÀ€CÎî/5šSƒ¨Ý'JîÒ§µòÈô~M"¥Q…¹ž¶r<äQÛQ£#‰ãÎcþRƒ ¢÷H0/;%åŸ{ë¥Nþó8ÿŽ}™ÈïîZQÀË­ûk8 xû®¶Û{˜+*ºp(¦B‰/U£âËT`~!öLæm†Ü”­]ï-'¢ëw“ùéëYË)Ÿ—k9åùh¨MÒ·—¦ã°9ä!ïƒR‚sêR&¼t]©œ‡² - ¼òõÀ{¸ýXêöðš…¾Þ!Ž«Ñ¢ÓÛt¥«M¥w›E”÷‹5”e´uÉ*qÞs"ä fg‡Ñ&ÃŒð:Bc€÷Ëb°k"¼¿!ù"ž‰à÷8EŒ ¥î×Ë\S–qxæ‚Ç¨× qL™šÈ/w WÏ9;Pý3× ªš ” -óC„çm£ƒžm5‰eƒ€ÔÉ\ÂI¯'.“zem€šŽ!L7Ÿ‹½Cèò)\ŒÝ&tðq.†Ýq/ºNâr<7¦Bb+ÒÈ*uqxÑÞ!ÎŽý·Ôw«èÛ5ú¢×U‡dÏKO€z£®¦õ_®–-¡ä€4¹Æ@”R­CÄæîàÔA-;¸P ºâC—j.ÊR#@üHÁs6+ÿ™%Â17Å8\r§$RÚTA Èi—Ä…Cù‰¤ùäßÉ ’N»¿ZÍ©AXzOãx”WêJˆyIœ£rj.CjâЧJ øÀuËÇØ_z óÇxENy óT®›0~Ÿ‰«TejÔ9~ߤ -9PìE;2ðÿP´›÷OE»ÄNu¨û1àSC]ù:ƒ˜…b¨k€º¢G”«ˆ5)ÿüMð`íp9!PÕ\*ptˆ¥?ÄI|¯†4}þöŒôiÕ!~F*ìÊ7g=m«]ïk_âòÀ¼'s¶Ø>f>tQ§ZÔ`½ë`<¨s@S勱Ç~^rÚfœ ü¨‡ž¸4 -ì»ô¼WW,vœÇuB†ÜÔ–AÍö‹"è¢ì‘½Fê¼rB€96ÈQB~Ï%ÔŠÍ|Êy’sΓ¸XÿQÛ1âKA˜Gß^*ö{¾ì§²jä6 †ù«W×¥Ö.céÁÅÕ!n"‹®×ez‘mô\à$‹‚zã«~ -&ç&I¬=grÝïÿTo„¹%ҚȞ”6É+°¤¶!O¥¯#Dà›8¾±Poô~´i©Ä6uPؤâ”™ <%ñÍÌUb×´%œš.äü­ FGŸq™Àå`ÿE ‚Äü•Ë ¹Ä,åràÂÈ’í (GžrKœ¼>¯‘y´ëƒe Í©Ê;Gc®¶@ô—ø ¨Çó»¿Ž -{½ |¶Ô5}`¿¿â«§uO]NG+Kb*5ı•¨¤Ú*ÚQ)Úe4ýWE»:UP´ƒ:LnAü¯E®3¼÷íUœêöÿPwêCœB’ë%P#Ê̵`ný{¿\/²‰› ëìp3:¹Y“ñ¼½‚Sot¹³”¢I‹é¤Mà ˆµ@- e2CpøÒÈ™‰°/%NjÔa¬±'BtDêa÷qjØÏ’¨C<“9±ÄãaM^ªUãbà úéûd§ÀöÔPE¶C5ÀS³cžÁÕèB-£WÖ:Pàêƒ ßy”ƒWF@ž -ò{‚Ô*Hœã¹ºrPn€¨„¹cuÕguêâ(®FûCà5\‡r°!ÀᲉœ ªo«•:Ï—xÜ^ õ½4¨7f†µšT¥ʧÂäve®Fá´óx¨1„.îU± b&Ð}ž³íÀ‰a]¿³‚«ù»|ÖT+0÷€ÚûðyÜ^EIÿìõ ,vJ“cÒ":àáz"±jU²ºywe2j"†”ˆðÏœRSÎVN5ÈÆ_ºæs”t >ã‘¹Š ³ÍÙÄÅM@=êÌ͉Gæ&=¯%p©ûÕ\MÔCí"ì÷—‘IÝD©}ú"×Ç+¸úPÎ\v#}æ ›@Á…ë”6ó -¼·~áöäQSï¶S€‹«éÀø°.¨ßØEÏ…¼'äüè#Vœß‡9¦N^ÍÕ¶ÚÆÍƒ-pò"¨‡Î¤Î]ŸªÝÀ“@]”8ޱ´Cš¢È·h+à‘Mâ<Î7ŸqšÀåã¥'å9vÚzœûC®$>ٛĞYë`n!g ¹zN5☿„x!ÔøBœß9u1‚œ)¶½\.bXðÿaœÁ\½>…³£ Ž¹fX£~O6rJO‡<—KÂN™ ìµÿó­â€Ç›€Ç Å#‚<þQ‡HlRõFÑeŸ©ôÛqpÏÇìÅWø´ËþÓ¹±Âx07€µ öbÛ$¶§D|¥2ÄU¸1Ùã{åw_¼~_oå°}¯Å¯­Îõa LC%· ÒZÔ J»¤,dœ“¡Î -b=DtÙN‘÷›M\\ï ¨×¾Íá\¯»+!WÌ)³GØ ¶Ö6œ÷€zü7ÖŠnÜåêe!¿y^ˆi@=’¿•JïÖÆÔì]ôžBšãj%!¦¹kØï¢VНÅÌåTY¬‚fA¬ïe\È&€;7Âåþ¯LçTœ±}“¸ßZÅù~ŽDÍãÞ?á<Ž9îÊ]\ú1‡±P‹q4¡ññ¡šz³3Ã!¶$0>#1câ´íXâˆåHP…Æ!~>ퟻ™ -+Û{”Ç0¯—` ¸js9õ9È—]ó ªNP—Âøålz!³Á§r÷ 5H^/ÖSÁåÛA5–ãóضº†:Qcç¸%/üŠ˜‹of¯œâP< e)¨aI<²×1AùJff¨À]\Üã5‚¸0ö—œ]pˆ]ë…ñÏÙ*\\ü¯{ü\W‚2((ê€ ¨‹QAÏ7s9xÞ^I˸˜ ä„ ï1c×ø…~ÂþŒŒ/ÛG…¿ÞÆå­Î¸M•3Èó‹}n€x³ÔT95úˆ|%N¹/(k#Øe2ÛiÎ×ax3 ûì;«8L - äñ`çûS;´„ÉÊôõÔEð»?Æ6ïœå—¿ ø UµS”Úb@¥vk‘1 {¸uïûÔޔȘòÝØg)†<*æÇ[!æ-v½µìø‰û£5LÀ“ \ ¦o7’Ñ廨›©‹9•ˆU?=‚ów Þ’عŸLèV¡J¶Ásû5¬tÀû-ÔÕé´uÌ,Æíö*¡m¿8¹I”ѹx#œë9OÀÃ/pJQ„< }Ôy,wVÅáÎb‰]ÒB¨!ãT@j’Áûdañr#‡9œî(2ÎwÓ^Y«ˆPüïfµŒ˜I\ -˜BÚÄ΢3Á¥[ˆÛŸµ¨»}‚ÛßÔ…Y? È·ßÉÜO©ì~†ºõY—Hû|€LPgîw $/šŽHßÖ“¼kÛö“LmWÛBÇ6«€Â#(äÀ:“¸ß[ÍÅR¹zÑÌU`Çà+ãvgðbZ¬D$ÜO&6í§R›´ÄéM ¦^öK$¯ëOÊ^Ôž2~Xm&K®áK£ªÔ¥±uZt|Ól{vü’~/ÖÒ±­*’”f#“”:RÛ¦!ö|±¸¢‰Sôb©ïl“ nSS—‰!wœÃ)5‚'äéÀ?ÒwÚyôÝ~#&«a²ZDÌËöƒâuGD9mæâÛí$™6 AÆÔï&wª0wÚùÌÃ6šÆsH<à™ß 軟ŒÈÌ#&³¢v ˜§-bñ£f‰4»æINÑñ“J:©]C_»‡HêRÅ— -¬9ÚïÝFX—°Æ¨”N Qr«äkEéí°6 d·jHÙÝ -\£A&4©€íc±ý‹mR†œ‘øQ™HíÙ/È<@ÝêÓ¦îvéôÈ{ŸôÉŸxô³~ó²Ûn†|ýIʼí9*Îî<(¾Ç˜ÙFвëe’'Í™'-êa'bÌ‚Çßô…Yß ˆç_(&÷ÓaÁßMˆ×ßD¢ÒÖK’ÒÊk&o?\6yñá´4³RFßjÖ§Óz´áÞ˜ÀÜ­à 8¿‚ñ™óI*Êê–2 ý ¶o™0±mjüƒ§äÌ. õIÈ…çXÈ^•Ÿ?ì6eõÊ$÷ÚÅÒôVRz«ž%6ëˆÓº ˜ÔnÆãÙP³bn>\A)q -¢¹Û¿ˆoà}î_´MœÔ®#Nü¨M%t« Ò¿ª -£úwò“¾ïå§ÿT6,` ~{BØóÇUI­·¨¿ó&Qóõ ÙüÕ‚îûäLõ}w”ùêy|¼ín¸d ÎGÜýÑSÖQïkÒY|´-'ZZW銟£„z÷í (·û¸¤¨ÞJö¦á¼8³E*{Pcbš]vêà›\ Ó§Eç$ªeDÚWuaLë.ÑíN,»æ(s¯— #ªwBübÆ¢´l‡ e)ÕBÓû•‡ïVË€oR‰íê ¬…äMêA _’Õd"Ω=.Íi8%Ìü]xúUH½è—‰ -ÚΉr»ŽÓ/{eÔÓ>FôªÝŒÉk;Nç~>Lô¡KºÏÑŽgé÷_Ž‘ù¿&ß}7¾ù*"ó?›Òe]g¥m¥7¥íÅîâʲkô«¦TfJÔ&âÚöÉŸÀ~ uPÌ“v‰$»É”yÔÀÐé­ºDj‡š(­•'{ZqÖ·ìE٠уšºßeDÝîÐ=h£$ME/ÛLÉ»ßtˆÌOú̽6‚ÌjO»H2§OFå~;Ì|è>Ë”u\ ‹»ÎÐ/Ò•çÉ×:»‹ßD¾î“> -‰§}BÑ£f•×tˆ®o¹$êlr3î/” 6ø›Ù³üÖœlør™®ï°¢ßõ&3>kS؇Z‡Í^9MΖc\ -þâUü€êuüÛWeuH¥åWÌŸå\‘FÕjоO× -îýÐ$î×¾ùBÏ(Aú¯ªÂð^%AÌ÷]â¸AmYZ aú°ê¸¬ ÐÒ¸´Ðñ`q³In‰µäuÍIéý&±8½ÝˆÃ*)½šÀÓ(ì瘤~mŒ •$×Ræ #k¶ ³1$о›Q½_ì%Ÿ‹½%ƒ%Þ¢Ï=˜_ºÜEŸ<˜o}7è>É@©ïñÖôà3͉¡nåÞ‘e×ÃvÜ %~sô5ùùø8¤»8XÒÓâ-moò¤j;®àçy–~7hμ<,Lû±ŸHP‘æ4ž5É/³“=k9.zÛs„zý/ó¦Õ\RQqM\[í kª¼iÚUtücfÌ©ÖÛ1G;Gî{.¨v—´T¸‰Kk,¨·}&Lqë9¦¹ÚÁ¤û}Сޜ°m÷¢Ï6'F^ª‰¼\z¾1.âDkz¨ñ@®=Øã"¬ùå$ÿÉïúÿ‘\ðŸ&¶O]HÆT¦n è0)ý:`ÛÀw ^-4Œÿ¤Dç5iïgÖ–lZ›ïy¸ãeØ¡Ž·a¢ª&kaáSƒÇ¬ªÀõÕbþ!ë‘ú:ƈ¢ÌåÄvwI²êÌÌ:Þ†žj»{©1)éXË“ãú"wðkÌýfR|«ÑHœ…ŸÓ»âË&u¹²·˜ÛM†Òû-b°3L{£Óɶôp¼æÂ£‹]C=J<Ã` î~b<˜ ý\àgÖó$øZ]0·&ÓKB–؇$;‡žmŽ“âu{¸++äXÛ½pi¥¯¤¿ÙëPç›PºaÀ’ŸÍê‘é?4…1]»i—çË©”¯Z&/j.JŸw#Rÿ8@ø¯çU­¾úNËZ«<Ì;^EmeÜ[(jip’tÖß<Øý!DÚYåEuœæ6<ûÝPø²›¤?´ž¤+Z/ k¾¥»ê`Nu>W—^3ÊúU“—\½Å0m`§Á£ŸÊ¹¬.¿é÷ã§ZR#Ê£+œ#½jnF;×øÆ\lŽ1ïz.ýZ ùÒê#úÜæ%þÞêu¨ûIÈ…Æø¨ã­¡¦}ÏÕ?>ø]¾ó•'ÉjÅ~~@Säþd ãW¸°+Þ­ËùÜG-RÑŒÿn·Æ©uBi\›]± û DÞú¤)yÓzʸ¢ÔIZZa'zÞc*Lûu¿0¨há[°Ž\¼x1HHkK~|}¤ëU”¬£Ô[ü±ÆÍx°4èrcLŒk­w¬K­wL\•c„[­w‚´¥èU×vÑ´ÿC°cƒüú›a Na©UöÁé5¶w+ì‚ðxCn”{„z{„xUÜ ½Zv°çIÓÓãB•ôŸ¡_ ˜J_6œ”¾i8+-¨¾"yÙpŒyØL1wšÄŸ=ƒ¬%ó­óƩ挨óÍ)qg›oÅžj¾'í¨ö Š¾œà—üM*¬ùyŒ¨üûqÞ{ÖP?‡Õà%vm3Lù´Kü¡õòÁž¢ÐCÝ9¡tKÏ5º¨ó4]Ò~ãçc’ä&C:㣞øqLô¡ü¼IÃ;cm"µ?9Þö8æRSb’ucp„[µgˆM½oO¥[Pj¹CðƒZ› ÜZ ÿÒÆ+¾…UVùÖ%5~•Õ~¥øçòJË€’’kÙ¥¶A©¥Ž!>¥îgÃûßú‰j<ͺžuœùÍW3iM­«W…g‚}up‚ika°(·õqç7ALývá­¯ôó^±¨©ÑéRc\üÉÖ{±&½…Ø憙ôI¾ÕûêÎ -µj -‰®uˆ¯uŽ9Û’'í/öc:êudF97yG»Ô{FDÖ:ß­² „+³Ò&èž§7eׂsŠì#^Ù…f–ØG”º„oÏjñµ7¹Éª«®‹òÚNIJj-ÄÅ ’òêk°7‚‹®ãuíêQîæ\îáPå[äîUîCuö8½cüFöøQlŸ|ÊÜ£" -ÝÂ’ -]BmêBðúŠõ¯¸{ß90h¯ÿžÕç½cõ…Í?ÎÁß>Õø Á¯Ê;ûÚ'ãlë½dóά0¦¡ÜJT^vѹÖ?æ ®7•ÖAw«mƒ’Ê‚Ö\ *l°Hh° ;ÒNþÒíhØÃ3êûÇ)þö -ñã³½Iÿs_Ûª ¯Ê›áQ%Î!©….!×*CÂÎÕÇ…œ¯;Þœ,ë)ð5ë~,íiô“~lô–6·zˆžþrˆ¼ûw]Ñ«_›5•†œoJK8Óœ}äcføÁÞ×!‡z^†‰>µß$z~µ¤{»Äß«|ŽtÜ5ë{lÔΞ0jÒñ(±>è–q]îuÞ[V× íû6Ïç ,c§òlc§Ä5m2*ÿ]LövÚžè¼áßèYíjÞu/ØèWö¢~'k¬×ÃJtûY©n+ÒégiýAÖÌè{Þè'{‰ù^åÊü¨r%¾~µÓoa%z!M+ ³šäûŸ‡$EÍV&ÕUîÇ[ÆØV‡Ä‡”߈I-sаjŒHvWz‰ê˜ºvkq]¥£´·Á÷|Cr¬}UPŒUeDôÝ|çЧïíƒ,ê#±Í~!ë/4ëÎ3ïÊ -¿Ü›àYç‘àPs²--œþ­ë:ÕÑa+ênͳ<м;;üT[zäåæˆˆðz§·:ÏhÑçf²ëË5²ã»5¿–53(d t îÔó˜¥ë›1O»ˆUåwþ8-þ¥ÒçF…gxb‘S0ö{Áw ‚ÝJ½‚N5%™wÜ ¢û\˜ú+úíçÃØa;쎵gF¹TûÄ<,p~Sl”Uàúà½#þƒ_¼·Núàv¸ûؾÂ@ð¯ž/>ØçÙ¤c›URié7ØtÅç¾ -±­s©ó þþÉ^»…åý`/鼚Ò`^ØtÕÿyƒupVƒuˆo“[œøG™·øG¥øCÓÁ‚`Aÿ¯—u_±*6¾“4ž•?`rQn¯@‚vì×A[wíCJ;÷£ÍJªhãÖ½h’ -Ú¨ÄCÊ„í0õkϧ¨§ým•F«A~m··+ Jzs#ôî;—À|Ј\÷ÐÄ|—`ÿ<¯°ë;œiL‹õö¸wUmËŒÀ¸(Ê¿Ô=:á½[DR±ShÆ a宀ó?aü)7 ©Â!ô ¶o/-´Zø?h·d~6ÜÔÏø¼g“y•«¯Æ«F Î×hb5 ¿²§ù¿°–Æý¯ýĽ]ž¢ÆAgqS·›¤»ÝëØÇ{á׫¼#£Þ»…$æ¹ß.pÆv1$5ß5ôY‘]ð»b›À”"§lƒ_ؿ˷Ì/¶ L(s - ©p‹ln¾ìÍvõÿÚfûK߯“ñ¿±'°ÛÔ\ÞMÛ+±¶i—Z±\­]·©›ž“Óv½5SÇ9uºú1+ùe Ñd4F£Ð4œûÇ%?‡!¹?Ž_G=ÿÖHü“<÷Úxü¹`Â*´q³í&=å<`׈ú -ƒs¼‚#^y†ç¹‡å¹‡„}¸‘#4)ß5$%Ï%äa®SÈë<‡àì<‡ goƒ2ñÞ|Päü¸Ð>ä}éµÀ›•^QÌ·wÑ—zwâ—ÏŽWZÂÂß6cÜzÅ?¬É>L«‹5Øk|­œ½¯Ã©øþáÞFá»’ãFs3_p§ÃÐ|ÀûÿùCŽ ü&< hÔ°)øëD4Rn"þiš5e-Z¿í:àV5“?€ýÆ k‡mÔaI_³×‰–Ûé¹.!ùyö©ïCÒ?8…`˜ShàRáaÚóÜßµÌ7ÖæÓ» ÌöÁE®!'ÚÒBD¿´x1¿5zØ5úFV}¼äØlÄû=u ôݼ-{õâøx £¹û‰ï¾Ÿ€Ç4¯¸©ø;ø~ØÍþÆî_Ç= ÂÜÅoÞ‹köD*­3Ôﲫ Ø£LG›¬½ÒǬåUб–ŒÐ«5µ¡áoßb,‹×$ÌaDÁP˜Ç¬·.¡oòí¹y[ú,Ï!¤¡È.¬£Ì&Hò©Èÿ=s½–1ìcO -~°–ÚŬÆ.s4ÏÐÿë£ÜŸOþ;âÏg6sÔ2´x±Z¯qís¬š¤ÞÅj‘ŸË¬/•ÄúF¿ñ}ðÎ%ìEžCèó\§ðç…ö‘?؇åä9†¼q -{›ëâ÷Á=رÂ?Ü·Ô=̧üFhjæ]å¶ÁwKíƒbK]BùߨKoY%u·ûÓUÍ­ä6¬WB³ä&qkp wÿ皓㞿<·NáëÃÐJ‰ßÅí½¡}8Œû^?Ça«:ÍBSF,Es •»O %ÓD9zVƒøÒikÚýÔ;£Ð1ȧÈ#ôdKjðá³ ¡€Ë€Wbì⎿ZÕ„„kˆ×3Š‚Ê1f¯¯±ºþ1µŽf}YÁ_HT¯úš?{Öÿï³ޝë_¯Áxåÿ|ohÜ#¹'3?¡±øs·{‡,ê ’ÿs¬c¸ý7sòf´zç ´ëøýwÙuÂnÖâpË#ÿó•IaÁïorëðLCBHM®Stq¾CXžÃúB‡è¦§¸¦bûèš2Û°·ïÂðú }žï]èª;ÈJ7)KÑŒ Ó¸½õßÙ…ÿíÇ_ãüï>`LcþœÓ‘øs47þIøûÄ©[Ñ¢B´Jå -Ú"‰¶7•¯ÿ…5?ÜpïFìk÷Ðû9®a9ïœ"Þç9F—å9Å—ÙǾÊwŒÈÎw‰Ïw ¶- -Ë©Â'û÷à°JçàC]÷ýtJYÝ5+6ÿ¯Ç1d å¹{–ÿ—9öç{cñ»ãðç”a³Ð ùùhÒ°™xž¦a›4ûø…hÚˆehÒð¥h¢ü4eÌZ4k¦Z­ì€v}7B5ÝÀôæÙaÜŒýø„‡rÿ0ɧR/㟓MÉÁØÆ„¼À¶2»°5€ÉS°mÍ/² nnºtsN‹æ PýìaÄËwëHÑ,ù‰ÿ—¹AÿÅVÂÏù ا°U‚1)Œ^†fMÜ‚æLß…fOÛflG3§nCÓ'lDÓGm@SÇ­GSáû±›ÐÌñø÷fª¢¥›¡íÆéò2Ø•¼ö˜yã}ïSU)þ€Í¾v ‰Æ¾¯µÀ9©9Ï5¹ýƒcBï—”ž2ÇäþJ‡¤Þ»øæJ›èÒR»à]ûËY¥Iòÿoìã_vÆ8æKa„"š2\ÿ4 Ï"x~ì?åæb[²Í¾MµM³M¿Íšw-Z‰±Ÿ†=ÚÌÄ Û&JÛíÕ=Eÿ+k&ê~gñÆ#äÑËë‘r#Êò"Ê £ËKì">äÛG8D<üà’‡íé›v¡ðzh±k°Z«ºzƒêÿz,ÙM°c9Ë>êÏïGsvdÌŸßOÆó¨0b1šƒçiî´­hÞÌ­hö¼}hî2u4‰!š½D€f/5D -sÕÑŒEÚhÞ -­ÓõG»m[&¨¼g7H>¾¶ |íÂá–‚›!Ïò‚16 /r Æ83 ¸Çƒ<Œ_0+.¶ ©-°)(´ Ác ÖûÎÜyÂWnÉ–]Ø·Nþ·Çvr4g†sßÙÀ¡=8–C#“Ð ¹YhöØ•hö” hî¬}hÙ:)Z±ã4Z¼Õ_'ÐÜÕb4w1‰f-'Ь…<4CAÍ™£Å½·†öØÕNPÿÈjô±‡Í^?[žàýÒ3¤ä•Kdý;çè¢<§hìã#ÞÚ,± ¨° ﯱލµ‰©)±‹Lªó“•.Ùfô¿š3¸ÿIF›ô'zòy°÷†Þ›€ß‚fŽœæŽ[†f_¦®Ç¶yš9eÞ;Ñì©{´=hú´}ÜØæ­4Aó–HÐâ §Ð*w´õÐCù¾]ST²Ø•û‹X%ƒOì‘#u·Üƒ¾Êq‰¨Îs ¯ÇóT]jÒVj{®½Ö6±­Ê.¾­þZÜûR;Ì%ÜÔjÙ½ËÖhÿ¯×æÐX7àϦÊÍFSå1CÂûjÞsÓåâ×¢‰x'ákÚ¨%hÆøµxl›ÑÌÙJx}ªâ5i€æl6Aó•΢EûmÑ2O´Š‰B«ÈX´Éì…Ü¿_g(—²›¨Þ¢«Wòãü\ -= -¼ƒŠ1öªÂc{Rlú û¸Ò"ÛжRÛð®rÛˆ¶ -›ˆÜû°‹ÕQAêïÙݳ'Íù·çí¯ýö<Õty¤0rÓ¼§ã×'`=qè=¹yHaÌJlñÜÛ€íæV4wæ>´p1–l9–ï³@K5Ñ25´PÙÍW·B Ô­ÑJ~Úhœ,·Ó½u’Êsv¯Ÿ=*ê*°»PçíœðòÉ͘ªW®quï\“rsB3ø–¹G\jŒŠÈÇ<¡¾ì‡zs]å»löì ÿ¶/Îa-ÀˆØ{ Ǿlœ"¶ýKÂðÅØÎ/Ä+r·6§áÏér3ñø¡Yã– iãaÛˆ¯É«ÑÌéØþ/ÑAŠëL‘âzs´hÓI´t¯=Zj„éx¡uæ÷å¶»ÕŽÛwŸ]¬ÖÀª`|JÚþÚõLu¢¯ÿ[ïû¯]‚+Þ:†Ö㱕äÚ¾(± úXeéÿ¹Ö:ª¿Ù:®¬Ú&&¶Ä9Èèg÷åub‹ÿëœ aàÿøù/[2„…ÇàÙ‡÷Út<‡³¹kºü¤0i7W -óÕðÔEsð:\°YŠl¤±M1@s—ê …9ªHa‘RØh‚îÂ{ÎÈm>‘)¿Í¯a®[ìlå -v³j»ÝðÛ'ÍoÝt/ô ŒÊ»Šmgø[Œ¥ñ k®²î¬±‰í­³‰ûRw-¶»Ò>¾£ÂbIÁÚ-,o‰âŽkÞäÿÅ>Ù‰x,}Œ_…¨¢EŠÚx*höB5l+”ÑÌYØ~ÌÚŽm&Þgx¯Í›½ͳÍWPAóóÐüZ¼ùZ©îˆÖ ãц£Ùr›ÊFoòo»ë»`OâÏ9ûóÙÍš],Oø¥Ùڸ퉛ë»À@ߟàò\פÂ|û°çïœB¥?ò^±:F1¿Èÿqiou2ê`Oi”°ûTnNS˜°ø×oáC°’c9”zš‚çi椵h.öÇË6™£ÕhÙv3´l-^¸ÍÇörîÔuøŸ·Í›³cJZ´–B‹6ŠÑrÕóh½7ZOE ­G_Êoöï¿ã);GµŸUVûÈî7dÍy½ì ¦§ÏõHó½€Suia‡:jLHx{#"öÝ͈ÓM·¢M{ŠBjƒÊʬüú*,ý£Š\B´úXr“Þ¹ÿql#¹ñLà|ód¤ÀÙqæÇ} örúˆùƒÌÃûQM—"š>qš½H-QÆøøÜëá{ýûfì½Í.T~É®<©üŒ]±'îo³w÷NÛá×5e§CÙøWŸÞëQ>E5›]u –U5úÌž7üÌž}-t3í{ê{¾1*øprÀšÏ€»æ;„¾ú`TZr-°©Ø&d Â>¶¦Ø.’øÚd£f_< lØ÷gmŽùÓ—Ãúd¬0j.š7e=Z¼F­Ó<‡V’–h…yZk“=|ûû‘›=ŠÇlqy?zÃÕçÃ7ØæŒØæV6v›góømîõã·Ù~­d‘;j—KÅ„ýÏØuûkÙ=ÊwÙ%*>Í3Õ2Ø𵬦n=+ÔkcÅzM¬H0È^½R˜Æ•ޱ³}e@82DÚúûôÓÞi‘Y_…<—ûs”EW†-Y±÷X—rÜœ]Ÿ¡€ñð,4s¡:RXiˆVì?‡Önh-qmû£-'nËo÷©™¸ç;_9ÏO%»m%»ìßn¯º)JÇÒä7ˆ=ÑVYȰ§nØëP:qŸ{Ë4ÕðoóüÃPTÒ}QüêûQòþ¤¿©2ÿ0?ùaʼøb*Êê•ÊžU“䵜‡z'ƒBÖHEâ%?]þö{6uô"Œõ7£Š|´h Z²ý$Z®a‰Öñ]ÑZ­KhýÞchÍV­X«ŽV®Ô@k•DH‰ð¶ãâ³Q;­ -ÇîOüûb*VM§Ž5ÒïeM‰¯?ìÌÛ|¸.øþÝBøå§µn Ëh¥ýºV'®k­îv«~)kÈ+a)~k*l8Ã4ÖÚ0«õ¾ 3ëz*þÔîEÕXð‹Y©°òçq¦³ÕŹÊ/¦¢ÔÊÏ¥Â'L-vpÑbE¥c]ÊkÃØï3<Îiã–¢¹s•в-Fh³æ)´pA;I´ûdÌð¦(°«5~²|Cvð‚øó â× -k£|» ü½Ú’ÿG“…Áïìq,Oó Ë×ýÁJõ¾±‡èÏ].ú]¬‰–wÞ<ÝSAc4Í}Fêå³:‚2öAÆ; íoÏ¢A¼Þ$ɨ'é½ÃÄÏÛ4.ÅŒ[ºj7ÇÓþ»‰xÞ(lGË× 0ν¶Ÿz;b‡GûÄ]ñ¬^{;´¾°¤Þ¯ì!½Ÿìa¬d»KµŒÝ¢Þͪëÿε¬ -Î(³Ѝp -v¨ö ¾q‚Š^{oØíšOØ­Ze¬¯‰5åw±ç„\“|¯öa¾~¼¡ÿ„U10>!§ºeÒÑPGpŽê‰ÄF*ðí&±uò<Éé€)"ûì%Túﺢìc2í‹&å|o‘À:MA×Ü{ÔÚ͆hî„¥ÿ%ôkSã,Œ±&­DK·‰ÐVãX¹=>mÓÀþøÂí—ƒ†?ØS†¿°g >³‡u°-¨e ƒ2–Ð+fõ ëY3ákmÔɞ䕱ŒÁkVË0¸m¡Kæ|^B÷VAÅ¾Á'ւ߯žÐËøCÉÐ=K‘]»¼õE‹z:ÈÂK6þ¯×19JÔÃ#qö‰´¬ðši}ž—èy§);x€¬ØN{l ³›hÓ¦7^Òî2o^)KoÚMþ·ã‹íâ$ùyhòèùhêÄE˜GoC‹Vë¢ ú–hûÉ{÷ß(¿çÞߨU²»ñ~âi½a÷j¹¾VÐ:•0VÏ᱂Þ[Vƒn*·>ññN”l0Ï—htöõZä³<žGˆïÌÑá¼ —Fòì]'ê…f/Ñ+duD]®Lc‹áõÌÚ|128h1Üðößö·j ÏúL´AÖí=ìKÞ6brÚÌ˜Âæ“’âÒ+Féû„·¿«ijdÊ'uÑóÉܯu_³*.¤[´bdzÿõc*ök7ÑNÆc˜ªmΤ•¬Šî'Vfô…=¯×Ïc{-1Ä~—üú݉ü>謇mƒ¶Õ­);T4‘ÒÎMÈàìÅF{µÄìϵ¤%X4EÄêÍ%? 8ò*X‘Nê§õºîïæë?eUxoYƒ„ŽÍ†/–>ý©E¾l§‰G}F¿iW§ ŒÏËë !;)ÏõI‚þûñ󩨆Ýôíï²wWdù5Wñƒ»…gnŒ3²ˆœªw>düýóhÑì­œ–çâéÃþ\—#Ðdyì×fmA+¶ Ñ™×0•Ðî9ª¯Ùµjõì>_Y™ðçÇkämÎÌoõ¦9Aûcú[\¨Ú¾+äû·¿IèÂÁÓ’ÚFgii³=“= !¬bgêªê"í];- Ô¿ó£J·>ÿ‡¦aÔ‡ ü«á´0€yèÊ<¤jŸ?Y½‰= ÓÃÒä×ONdÿ¯öüw,mt‡U5´‹œnt?ËË®„/V“.ñó±Nv=õUԑƶíÈ@Y‰èÜY!®wœSú‹ÀY"žiá÷°Ý œ£æ¥ÛŸì•”Gæ -úÆÃâ¤f³´*)Vº‹¹æ;Î`P^÷V‰û©¨š=¤ÿ‹õÂÔOjÒŒvJÒSí%k*ó4ºûwU¡Sü\ATéâÅ mÜTän2ð>˜ùÑà!øÉZòe/cvZ»ƒ%´³ØÚW3&«ð"MÉÑaúQ kéÆn+QYÇêùwFx1lÊemdÈ7EÜ ÷—+ Ïç+uR´cÙ´oõd°_™HÌä]¶›j~ÑnÚÁsö“eÖ>³ÈØ‚ÝPç+zVoBd·ó‰Œ/šüô®}Âë‰ó ÏŒ%Ô½ÔÕ -ï|×à‡·mF~ÚNÞù»?¬bi«@œ¾6†²š!HhØMÝÐ#24ø±ÛøïVñ»• ³Y Ç샌Ÿ;õîü]Iï6»U#Ý¥ÙÏèüÂJ4Y}zVOï«kð†Õ5*b^««çûBQÿŒýH³³òFÏÈëhk¢«¢ýÛ·#ž"]IŸ·=4AGôEø/{AÛ$Ì%ð³%Ý“qý@Ü—Km=è3Nãi‹°ÂøÚÝD\Ë^Ê-E‘²œM9„Îb[(Í)?y°äµùºS"¼þ`±ÀÚo*éúx©äyË!ie¹ÔAÊ>|°¦ô ñÍ;)·;‹©KS…^¯Væ³|bð«-à"íì ›çSÔϦռ’5IãbúxíÇì6þ'ö*Ôòñ+Y3‡´™ZºÆH]EI©íTFûwîF³ÖcèÛm¢ŒC2©IExÎ~¬¡@†àL:Ÿ!Ù› pN©Ó6¾[$áÎá:'(B ar“2ì9Âëö2òâ͉„¥ïTÊ'k5œ?‘&4ÀÙ&£‘'}YvDœÝ(•fÕdRûu¨¨¶½ÂØö=tâ :Ô|Š?Ô^äßÿMƒŸØ¶‹ð{¾Zøt 뻞Qþ„~%ÆTíìAƒÖÏ›¾ö}v‹¾oýR=3§ÊÊ<¤i(EÒ«òüË!“ÕuÅhïv5¤«%Eš*ÚHeíV¤¹÷À茜†¦Rݳi« Db™™¼éyë‰&N KM]n­‚³AR§€ypÆ‘¹Õ¦gšYyTüð£Dp닚Ð6l&é’²@˜ôIE\´‰¸6MpÆk¼0åinóE:³—âκXE+ÀyfâæÅ„SôÒ1~žÐ=s‰a|ÝVÃÌŸjF·¿)E–nä%(Üú¶Ó cÙB–gTñ7©Qáßh½Ç¿ïæ¹¦ÌæÙ‡N3Lþ¾“Ìî'"Z·^ Ÿ&´Šž!¼â?ÅPtx˜ŠÒN´}ÙJ´w£ÒÃûŽÚëÕZêæëUDÊ€*õ¬C$HhÝ#¼ûE“ÈìÖ'½3W6þÓ ûˆY|›Ø†îò>¬àY¤NÓ–]•Ó NÓ•XËóÈËrz†‡† /‡Nå_🨪l€š†f`Þ´aꤶûRÛµéëò¸>Ä<¡É0BzBžÓÅ9wc²øðÉ$+è¿ÈN»M„¾[ÒóŽEçlÆÃ™a&­ZOš]a&yÐ"#Þ­ZÇÎ$‚ßoâ§õ«®÷ƒV—¡ä¤ת8»í $³EJ¦|V‡çHæn œç“–~ÓèK¡w ñ¤ßˆ—ý‹ºQæ7u£‡?e|Ý'𼿘ïrw¾àZÔ á·q0/º ?f(Fp6¯õ™¤{örâ’çDX÷„ÛƒÅp®TpÔj¤.Æa:<)НÈS‰óÈÈú]tT³ -ô͆~F\?¡Ì&Rx§_ÎvQQ»‰”FU"­Y ΋“ئP±óè«~ÓÈ«>SH«àéÂìçÓT±Õ;Œn÷«÷o»dÔ«.)ù¦×„Ém?Bd÷ ø÷j/úÅü;¿î'N¹ŽÓgL‡šœ“‡ó[dúm鋺ãÆåïeÅ¥¶TN¯Ô0ë‚§¬ÏûýRMÁ´Va)Z3a!þ:ièшÌj¤à¸ÕH#³sÉÃWG -d—†«ìWGû°ýܧ´‹Óc#.zN¤ÎÚ㛚˯¹2VrùúTN3ê˜åÆìÌpÑ©+c W‚èVƒ¡äAƒ„Êì4"Ü"ç‘ÞSIu»¨”.MèkH]õš"²ñS ’êÔ¤Ï?˜›¾pa|ÅnŒ¥×Áü "+· -2¿h3zHAJË^ÐQ Î{LÝ2àÅz"ºn7[·›NîÕâöºÏƒ•ÔäEDXé6ú^«õ¨UsK½í0¥óZ“Ϻ(ìwÎéó'ÇðÈršÒPá!ô¹?æ0š<ï7™´Iš}£Hs»Q<ê¶§åÈ SðZX@9ãË'o=œ[¡n èÒî™+ˆ“vcˆó.ã)‡ìÏ`<:“² ²‘>YkˆØ²ÝT|ó~êN‡.}÷#LïVçúmßï2 u àœ†0¾i0èõ:~F¿ -œ. 5ßÔ«~™ yp/?èý:~â·Ýpÿ¤…ë$á›1”çôU"ep?ôÍ$¼,'Ü-ØÈOìÞex燲àJÄTMS´eÅF´núb´}é´{ãftàÀ¤­g€ha߆ñ±Žƒt (¤¥ÁCZ:†ÈÐ쌼Ð"p*ôûg´¡×"ôú£I39‚mqXŽÓ {§Ä$4 ›U¡g7qÖa噾”¾Ýd ½W!†µK»§-aì#æ@O,ÑZ¡8»N*Êj‘P÷zxDÚ'u"ý«&œ ##«wÂ39úÏ&=S–¢?l¥î÷‰^´ÜûM“ïýf¥Ð»t­aBïv£„¾]·; ÙŒ0“Ófxðêpâ¬ßDþñk#wnÚŽ6,XŽvoÛ4•õ°Ý Ј„Þð’·WJc?hˆÃËöîô¡ƒ~…|¡ ñ(ÄéaÚΆ³þÐ÷E䑼Αb?°€² V œcæ c›v“wu‰ŒO¤ÿËu´U¤…/èO_ñšÊɳ˜Ãá› ‚M\_AϬUDÈëdà‹õ”[Æ"ÒýþRAJÇ>"³Ç€Êì6$’¿ª7.~|ÙyyuTŽob9œ8á>ÎtDØ>Ÿu=õ&–# Ïô$:ަmãæÒîY+‰°Z%X_ÐóãŠÔy¯Iä9÷‰ä)û±ÄÉk£¡w$íro‰0ºa'wÙÿé:a\ÉN8[‰ýŸ±4»ò(«A*Ë©8#zWw”Ìì1†o¡±ïú>]gáüõÿ±÷æñmUר³SÊŒ `åÌCÂd;!Nl,k–c[vDdËÈr‡„ „ aJ 3 -¥Ð‘öòµ¥—–2´¥”ÞÞÞ{ÛÞé{ï÷¾ßï½?î[kQ’9Ž-™#ˆuÎÖÙûìµöÚkØ{íµ~òO­/ý_Õ¾U{¿éË>vvÓºC—øÿß·úŽü½õ Íß‹ÿ»c5ud&àšF}¬m<ÅiÙõ߸ÿs9°úàEwÜÙwbÍs+n¼A­˜1ý6 ËÆŠù¾@…/Ö:¾)¶e÷}gºWœÖØ‘9sPRŒ—¶¥};'†zïŒéƒq],}ìüXGß)-ËO†ÛÆ7wôºà¾ƒW†v4c=alŒÀª§¿Øüâ•þƒ¿¿9¸ÿ³[C/þñv<çÞúòdŒ'8øEuô•Ï|Á7þÐè{ñ¯Õ¯þwMàÝ¿£|Ñýá…^ù—zß‹¿¿5ôÀá«Bkv^àßþÖuM¯ýÇ:»üî¿ÆšÞüÿÀîøŒó-}ìÿÒçúüýæ¦C»%ðÄ/„¦-oM -¬Þs¡oÓ·¯lZöôyÕÕó+d¯P1릺 -Ì㉹¾|>øÙã[O1?6¼@1:ƒ©¥'cÌT¢Kà›¡ÇÞ¬ -þ§ÙþƒÝYºþìp÷ŠÓ#럾4°ó{SC¾ç <ï;òŸ3}/üå–ðÚ]ïÙ>1¼áõ«1×F`ÅŽ‰¡O~ådhÍÓRL{À\ºøýÏ_Zýô…KrùÎoÒ+N ¤ï?âílùîdú^òè9þŽ•'c¬y¬ƒçð1F•oÑŠ“ðœ4ÆÛ oùΔÈÖï{Ý÷Ÿq‡¿mÜ|_KÒ³¿kÝéáÕ{/Æùâ{é?k}¯ý}¶ÿ…­ñþ÷™Mû¿¼)üÀë×`lwŒS<ô§ZŒ±†±‡Ok1¬ýGþyvøðWóBoþ±)ôîWÍÁïþ1ì{áïÕÁG¾{=ÆC¹ÑôôÿâýoümžÿµÿšÓôćœÕ q]­©ïÉó[gøò&Ô!üÏ|ªâùqŒç±#}1˜k ;Oðßóèy¸6ÐtðO7ÿ9ïï¸ÿ”ÛgGÀšUQ77RÎn9;üÀ¡+16eøþC—.Ï/Û9qìKÝ{Н¥÷ÄÆÖ®0gGà™§a®Œ Ýzäºðöïs[ã}RŒëµ/ÇØ£Kd…o÷¼ïà7Â|œ|ò]6´ë”Àž¦Gžûôöæ#Ÿû‡~5;øÜof_ü·Û¯ÿe~ø½j‰|òéŠüð¡Ÿÿl=ž¿ÿôG}áïü>Š<7¸êÉ `î -ÁWþZ‡gq¯þ¿s}«Ž\8sv âfù–Š¦Î‡ÎîÿKMèð_æ`|1ÿÚ5m~ûê¦%O‹ºè¬ÌÙÚRñm(n䯝¡|Œ‰{OŽÜ½õlÊõpÏãçcLyÌ«„ùðPÖ-øÎ/:"¯}æÃ¸0Á…P¾ñlŒ‰xùo·û^øk5Æ6ó?ý[ÇcÑa΂` -ìÊ»7\»ïâà:³`_„€WW>~~xù#ƒ+Ÿ8ß¿ì£%œ\òè¹ÁÞíçDºÖ¸{Ced0æÅż!”4Ö5>Ô·c"žoõú{µÿПnÅ8áuû.£\Eƒ³ë2æÃüx˜—s3aŒ¡Ð’õga —à«ÿTyç‹Xì­ß5‡_ý܇6ƌƵŠ!ôÐ+“C›öy0ÖSàñ÷9Œ=ƒ¹A`'^ú÷9þ—þc¶ïÀ§ãœÁfaÌ?“YsFxÝ3—¢Þâþ_g„6¼væÝ½l´É0Phó W"b תSç76#O1ß›îZzRÓâÕ§î{é2˜Û·†xëÚù ­3ož]QwG¤ÂߺdBäþg/Ã8â(صötÌ…ñ ƒÝ›*}íK&Ìž®˜JŽ\\б‡0¦k ž9cÉ„(~ö WQ,ü~àÈ5‘͇&E¶¾q=ÅJÙòƵþ'~ÄRN‘çþyvì•Ïý­ßú‡dû;?ÌÆßúe"|è÷s(ŒuøÛÆ>ø]wóŸþñøŸ~ºÏÊa¬’ØëŸ†ð\>æchzüûÞ&°Ašžý¥ì;øo75mýÁµwm8¥¶º¡âÆë•Š9``L'’›w¯?£ó7§Ç7,Ìž8·¾øfkE¨µï$Œ=Õ¶ë'··ìþé Š¶øþÓ1Væ-Áú¡¾íw-9åvó·~½`á·¹8¼ã]ãÒaL%ÿ®÷ùà›ÿÞ|ëûžÿßÓ‚Þ¼ -cØ·‚NùØ÷™Ð’íçÝKŒC]/´ñÕ«P΢]í[Øu"Æö÷÷s´i×O”å‘|¹0òó?¦ñœÚðÇ5xgxÙ]'—>òqß%Á̶³p­*°âéóÑF¨kjwëuêµJÅÌ[æU4¶-›àkî>aØ®µ·5€. :d4Iù·šâã0&7ÆŸÆø¥û?Кà tŒ,ì™é{xbð¡×®Eˆq›O|(6¿úy¤ùå/ƒ‘mߺb®æòÀËÿ<7òîW-ïý?á;ÞøŸY¾=‰äæ'[±ëÿ¢ì„º†Æ -Ì;‹çê1\cÇŠ“fÏi¬@¾HyÊ@­Ü2}õi˜›3Hˆq1)_%ÐÆ„ª÷E*‚ ŸÉ-Yv(siõî‹1Æ.Š>òfÅe:´°{Å«zøí©±m¯Wa\.ÌYJ¦OÂ8u¡]?S#Û^½ãjù WŸËzü{Òeþáž9ÊóàÓ?UBûþ±íÁèá¯æû~qKøÞÝ€§Ç&bN™¦=¿Wý/þ÷,Œ9áÛû¥xàÈ‘ÕÏ\Œ}›3çPEpñ†Óýw­=õŽh×x{ßIþâbé„9õa°yj+äkÄ -µJª˜Yq9Žkˆ§N,ÝqnðÁW¯.ÙvƉÇXª”Gxéæsc÷nÇÜ}ç`>óúùÑ -ŒûDùÙ0>ðWôGA™‡±…Âû?©ÅXÌÄ›2÷žÑ´÷WÓ(þÏÿ¾û_Qÿ3š†9Ç‚Ý scü\°½æÝ¨@ úcmÓÎ{‘OΞÝTqÛmõ˜ïŠÆ`éÃ1ïåqÂœÌ âã1ÞñþX…/²p<Æò¦Ñé•g„»—ê÷N ˜òÀÃÏ|pcóž÷k"~w*Òu°=;ヅžú¹Úûá-÷+¼êáóI×zú%°ÿ—7b†æµ;.Ž­ßwæh~èÍ0Öa`÷jìÅO‡ÿ2;سé̦…©)ÏùÆg¯Œ>räzÌ;:ü×ÛƒGþ:—dý¡?TS,¦/_Jn<-´xõi~˜0W:¼í½ªÀ3¿¿1²ã#cÅa53\KÃØD¡þ<›rž¿ Ý»ç¢Ðêý“¾þð¼ágÿxkdÿŸf7ïÿC]óþßÖ÷ýúfÌ…íÛ61|ÿË1–!ÆÑCŒo\{èRÒ9¶|çºÐJ‘½ž9ø§Û›~Zç¡ß4FŸûd.ÆO„¹ì®Û}YóšíEw¼Í…öXÙóQ-ЦL:è6ÁÏ_²n -ÅÓëÚ|&æÄ ìýýM¡ÃŸ>ò×y¸në¤:¸ñÀå$÷3À§xy®ÏW¿tYS×§–¼ó²bÌQʱ_A oÞÆÒôíy_ ¿ñ…?vø³†Æâ^°øÊiãrç‘ Eýævà«Ó‚‡~;#üÊç ¡G¾s}`Éý•Ã?”½ÿLÌuŒß¡ôêÓQ7ǵ‡ðýÏy0æ3ÊŒ3\ÿÒ¡{^ÔÔ~ÏI˜cdÆÙ—/pàߪCO~¦ yÐö‹¬Ø{1Å®;ôÛÚ¦}¿™†6/æÌÂu1Z‡Ûpø -¤ùæ=ŸÏÂXo¡_Ö„žùõ͘û ²hå)˜×sÍ÷ýê–¦CŸß„qBqM„ø/âyÓËW÷|ysó¾ßÍ øó ¨_‹qܳí›áÖž 8ïqÍ)öèÛlðÀÇձß4´þ4Ýû›™Ý¿T1gkxÇ[Uë.¼þ•«(ïÕ¦oM‰úËÜÈ‘?7Ÿû¯™þº9¼ñI´~¼éÈUßê¼ýëDì[_´ý©—ö12ÛÏöw?pÚºw€ ˆy×ëËÆaÄpïãçE }Š#‰9c€îCãënóQ¼cÌ­‚ñ ›·¾Í,Øðü5áއΉvo9;ºr×…¡=ŸÝÛÿÉm¡?b+ý&ÅBFùŠñ®{î;sœ…õÜYþ§@/{ýO ±w~ÛF1ÕîÛw©‘; õ¨@¬øaç ánŒ)ºû›o󪽗5/ÛñMŒº`ÕS—boˆ¾ÿqrÁ>Lc,î9Õ·W̯ h±¸~4«ù…_ß}þ³yþ?ŸN±¸Ñ¦Üÿ‡[À†æ0æ Ú#±žµgú‚nú/å^;#òcÓ7¯?x5ÊzŒ|ð­k[Îðµ.€væ/‰®{éŠèÚ—¯ —›^¾uŒYDzÄ#o]‡8DÚò…»Æc^>¤ÿسŸÎ\°ç‹9±Íß¹õߦpbÜø¸ Ê Ìy…¹@.w¼MvO$ûȹãð}æ5Œí|=ûÅÜØæ÷¼G÷PŽù#Éñ¡øÝbÙûÏ¢œO~OlÞûÙœ–ýÏǘ»çóù?{âCò"Ü»÷bŒØóÕM?cƒ¿}MðáƒMõæäЖ·¦øŸÿý­Íï}ÔÞúÃ.iþÞG‹_ùÚÀözƒ|05tÏⱘs÷éB÷í½×õ0?Æ¿ÃÜ¡ƒ_ÍÀ¼'sfÞ^1{&ðÕÆ0è¡wŽ3òÍ5w¯;3Øžž€r‘òfݽõÌ•‚ëï”à ¹òTœw±ìÚ³"Û@bŒUŒËM¹³€ødvôÈgƒ/tøÏ·7í=sg-ºÿ4_ë’1·lS8uBShñxŒÇÝœ^fsríé˜ã„bÊ.\zR˜bÚ®=ƒb*?xøêÆçÆK7žy¸1ÏÌ‚}ŸÏÃ+”Û¸{ã™”·ðþ®nY²õwv­>sªD ó"Q¾ÌÝ–=)Ú t³ìá‰û<ú—ó(wÖÀ­‘;ë!Ìú]÷ÚÊØ}O]‚1c›W€ÜÓsg…RNo=xÞŒ¦Š@¸m|¨ÞÕ²ð„pk猵Z´yÒëÖs)?È1ZÉn<ËŸ¼ëDÌÏ„1½)îõ“?)7æÙ9ÿZÒ›ÎÆ|u-+·_{ðÈäÈΟ*aŒÅ½åȵ˜ÿ*ö§õ¨#ã^Vp%èL]ëO$µXÜ”h÷ÇÓ(Î,æ|Æ8רï‡ß¨Â˜µèFù{;ï9U[^N9>,^s掊¥Wž®åÎzìÒЋ¿‹ëƒá¥˜;kAEC=æ3Yz2æéÂ}7̆r(Ö¹ì4=wÖ˜;‹â•¹³+OYpï¾Ë¢Û(,X÷Ò51g‡ÿ®ûN£¼]+v_D9Wl™ˆy,›×>~)ÆÒo^ ¼Æ5š¼ÿt¢ïí?’°>Èó´úkµú÷¸cV#}‡Ò@«Ë6Óüà¡kZö~t{üÙOæ“Ýtð3î|Àˆ;ÿò ãÎÿ®ãÎ/x}/¾Š¢LÚ±{Ÿ½$ºöÐåMËNÂ5‰¦»î99Üûð¹(ã1oÖ|ÿÂqõ;Ç5aµû_¾*²ãW -깑û/Bù‡¹ým÷œä Þ9®±1Ztr"åaíYåb_ºáœØš§/m^º]Ë׆sþÁ·® übæ%ÂõEè=˜[óœ×Ïmª¨›yåÎò…cãš‚fî¬+pebýüóg6‚|iò©9±ü”控6'ûN&zOŽ´/?y4æâ¦üÔ«w^[ûô¥È?Céå§¢¼§|€ÛðS?–1ÇŧïÝr.ê­1Ðõ\{ü=9úÈëUч^»Žr¶mØ}yðùOf¡ï ®•b,îð’‡Ï B›˜ß,¼ç“jÔIq 0š\sZ,µútô¡ÜXë^ë-”ûwõÁKƒ½žåoMŸH¹œ@f’Œ4rgíû¤&rðÓÛp-ÅÈ…ò6ÚûèyHÏ‘['b¾2Ì…ù’Ñ6³rg­Órg-{ÿÎÔ‰(_,yø‘¶%'áÜÅþ±žm碄<·yÝÓ—Q>³{¿pÁ½^<ð”‘Öå'Sî-¨ß²ô‘ó±>Æ[·×G;>¶aß•s›rö¡®ñøOÔæ½?©mÙôòuÑ•ÛÎǸϘï™rÁ>ðú5Áçÿ6+røßê1Ž,æŽÅÜxTd'®w}_ˆ>øü5ZÞõ̉˜+óàz îyÍóG*ê#‰ñó|ÑŠ†pû8´q={¾/V9±ÃÀ3BÛÊ¢.Ioª¼£!^1¯.XQ7¿±"¸ ã„æ¿`ý³W`t´Ë)·)ÊM¯MƵÊ»éÕIÃ} -Ðfõ¿òosÂý˜Ç|ó˜;k>úJ†[Æc`¸"ˆ¹³€Æ‘?Qî¬9ð>ø‡¹ß›{:/¶dÝÙ-©¾ÓïLÞ_‰9#mÝ'…ÚÒ¢] ?1wðäÈæCWcDÌ¡Fkç˜×ì™o?óáM˜ß5ºlçù Öð`ŽŠÈþ_ÍD=÷9P§ÂØÜ”ŸðÁ=W÷\²…r$l½cí³—„—Œ˜—ãà¯Aßú¨fÁªÇ/i^¼æô;ûv^زìú-‡'7þuÓ‚—?‹F_øcCc'ïþL¹³(ûË×øwÿåÎ -íúÇi”;kÕ.ÌuÂ\œ‹±ôøðšç/ÅXÝ”›úÁ)wV3æOÆÜYë´ÜYÍöÜYi#wÖ’“ƒ-Éü!°-c ·£Î‹¹ã×<{)Æ÷Æü¨“`.°æ¥›`~î¼s+P}°;"PÿλNðÚÆa^*Ô(ïÖßúöõôsj€^¢Å9~áêà2Ú¹ætÊO–ì=s~GW>}aà‰àC/ýËܦ}_LÇü‡þ;;N@ÿòüC[ì„ÎÞSñÖêæD+`“'î=Ÿ™ßà¯ð-X8>r϶‰¸Žˆòí7l×00ï´¿ ôŸ{Ÿº0¼í[×a¾ -ÌÍ=wVSÅÜ9M¨o‡’Kï¸0¶åÅɘ˗ôJÛä'Ï[&Ò·rþ¡¿•ÿ¹?TGžÿ²ŽrgaŒôTß©>3wÖ2=wVï© (wÖ«Þèöï ±ì¦³}MñqØwÌ·{¥Í+» öðË7´¬ßuKvå·&{|ÅP<öÝ?ŸFù -@a^Šeù -(7ùÎ "÷< -º×KW£ íþÅ‘}Ï îùÅÍ]ïK˜žÖÂÐ?‡l™}„+üØ÷9Œ%~±Íß¾ó’Æžÿl~äñï‹-K7œjM¸à®§½vIøéoD, ¶¬–_RˤÜYŸÝyîŸçF|yú £}@¹0º×žh_urcDz þäºSŒÜY¸¾„9(¿Òû'Ŷ½V»ïÑ‹I¾ß·Û~ô•ë£ý@hÞüæ ˜»2Ú½ê ôÃ9Žë&Ík÷zBO¼Ãiù9~ PÞ˜ÏxðY”QÌǵím¦ùÁ7®‹­~ôBäÅQ¬¿0y"æßÂ<÷á]ß“C{?¿××hÏs ®Ý¼÷ñ bÙí)‡sê>Êu¿à¾=žÈæWáþEm—×çGœ†6ð„¯8ÕJŒoji²“ô_Œé¿|ÛĹ³Bw4.j½ç¤æÎMg¢}Û¼âÑ 0ç òäð#o\;øù<ŠƒŒ{‹î=y~8³éL”…þæô ¾…ãÐçdêR(ÇšWí¹Œd$È5ʳ‹kž`·¡®—jùK_|ô]Œ­/£ÍÜù.ƒyš—?qå[½ûR”;-wˆmýöÔ(ت˜×7µœÂÛÎÕòP E=uÇ{æ~C=€r¢`Ð%? ®‰~'˜ é ÏX`Î`Ä7æ¨C=$ôøÛLä‰TÔq_sÇc^ÌóÚñÎT¢MÌ-³’dÑ5‘g~u+Ògøà¿Ü†ûu±ƒŸÍþM$ üóÒÕÏÃü‰íã)ôú}—Gz6…{ú8&Áô½§á¾Tð±°§?”0wVóK¿6=÷Õ­˜;+ôÈ«SðÌGxËW†W¸cYiÍù‡S(wæ -Áõ¬‡€>7˜^Ìu¿–;+òÄwÅЮŸ((#h½d~óê]—’® |s¶ >|ê{Bd;À½iÿ‘ ® \óOŠí|O ?õ¾BymqÏ%»ñœ«Á>À~›Lïý¨:²ÿ73û?º)ð,´õðÛ×c>;Ìóùžb[Þñ6/úÂ`{ç„Èï^k±W>  ^Dk‡þp«ÿ™(¿ØXdklùö ‘Ý¿¸9òäÓPOªoŒW,91_v®ùÄî¾ïL̃[ÜwZóÒ-Ãûþ±¶åÀ¯(—Ì=ÛÏG] öÐ `¯7m›+0‡®c>\× Œòœ®<­yÕ®K0wÚ|‘5{/Åœ‘ /\‰gLhiÝ‘«BH¯¸~™^uZäî5g F9`€–¢[_¿÷3(Ç{×}•¡¶e¤ï£Ýøæµ¡§~1 ×D¢^‰9¿Q~‡€Çan!Ä+Ú£Ä×=u 欦s.;>)_Ðò­”µ¹ï¡oPfÔC#;@nƒ†ú>å±A½hÃ~OpO¶æÃ]pê9Ý+üu®iÄÞü]¬ùÍ„ü¦&ÜÒubSc¤÷¯(GÍšÇ.¢_˜ç õ°ÎûÏ õ[î¬ÐÎñd·Ý·ë’ÈöwXÔÇ›ö|¢¢ýÞÔ¾ü¤&ÐñCËvŸ¹Ò¢›ô\œ`÷Á<¾v¸ç{è/ùMö­9+òÚ§¾ø;?¿«ý;ïu·¾þ³ö/||GðЯkÀªÆ>#/Š­Ús)Œ%À¸àà$ôu w¬>%ºñµkÈfÞõãiÑåï[p×ø èÔ”Ãú¾CÌ»úAo -%Ç75µ€nè«ð5.¨¶/?õc„+øÔÿq]ìÉ“}þæq”ËÞ}ààU˜ß -ý—('ÑÖ÷¼')bÎÌ)GçÀ–ŵ¨PGjæÚB|FþîÔжo]kù(£CÉU§ú›ï>ó(ãztãë×R~ÚëÅœTÏ\ŽyÖpmÏ’E¶ÿHÀ=+Êyˆk˜H›Þ¹.¶þåI˜‡ºyí>úß„ÿ±¦[Ò<:|MóCߪBº§±Æõ&Ìǵn÷e¸v9øÙíÀ¿½áÌÚÊHrÅ©¡…™ Ñ¥;¾~=¡Wþ4¿ùõßE£Ïÿ®>´ëã锳×(ïôÛLhÏ/o -?óË›c¼x-å4Çœ· ó‘κõõ)è_ˆ< ºö©‹1Vè‰ïñçÿPëßõ3÷wq¿™Î:¦ÖŸN2é¡W¯C>ºT´oý9¤§ÜûÄEÍ÷ïñОð÷À®‹þ'ÞŠøÁ<ëhÏû¢ã1åT¹BôÊ\CÅ=HÔ£™ugRN,Ѩ#aßš7¹6ºó‡®ÏD7ýAÿb›Þšî{ìèê\uZ´óXBûÈ¿î}æ"”“QÌeŸ¾÷t\¿Œ<ösQþ ̵…¹áVBy«1gû†ç®…òsàÞ9òrÊųçÃi˜»뽇¶*Ð-ê@˜"°÷7žýd:ò¼èC K`^%”µ¼Y8ðEuìÅO|˜'÷ê)××’Íç’ï ®5¢ÐæW'‡7‚^‹ùñùæ]>ðÉMM{~©ÿ1G{:Ë@v íÀÓòリöq=}‡W>q¡¦#ï¾ ýü{~FºSdÓá«ý­}šš{N@[óV¡Î9áB+9óø7# FÐßjó‹“b÷=~1í•=þ6´÷Ûÿ/ã>}°õÞ“êÃwó/Y¶þ9÷ÏdlŸökîzX³çbœcá ‡[± ‡®Bß œWØÜ/Ž.{ê|´‘£IyÓ{·œK>G˜ ~Ù#AŽM$9ù^§„—ï<s:S>aôW\µ›rvÇP÷Á<·¸F{Ïæó(Wñàï²”ç×L@Å9~ôaîSàq”ç -sÅâ:;̱èRÀÝ: 3°OP/Bˆîü‹ãˆ:ap÷¤ÈÃÐÀIùÄ0(æÆu\'_¶éÚ+ó³EŸûí<ÝŠ-ÑNÂÜu8· Èùöõä¼å•«Ñßó&bBôÄùE:àùUóš=—‘\Úúfå˜Ãî»’ètó WyïúÀÖw¦„–휈úÁ†~/ÏürÎ'ʱÕÑ=ó„7ù§››¾õçùá#ž>üǹ‡_½6رô$<‚úŒÝ$ÌÓr` -ÍGÌ=˜Þt&õ›æõw¦þûq?îÇý¸÷ã~Üûq?îÇý¸÷ã~Üûq?îÇý¸÷ã~Üûq?îÇý¸÷ã~Üûq?îÇý¸÷ã~ÜÏqþLš4³«mF<¯ ÝV9©zŽØ÷ñžl"S9¿rRËÔêLvF²5›LwÅ3}žiXšWçŸ3Ã3Í3¹.Þ—È´0-bËÏtÏäê9,Óà×)žàQÆË ž©‰xÊ3YkÔ?{ê3ÉŽdúZã©„öètøWY%K2ëeEQðÈŠªx9‘c=X¬ð^^æD[q -‹µ,ÖЋ­F(¶YT¬ìª¼£RõLžâ +ý¶+À‡‚ø¨Éôö,jˆg¡ÿ]&’Zæ§»2É®l²«£ªJ+®I\ö*çwã/€úɘ=+™BÜN5/§ˆÑùé¶^æ {ÀÙË:S]ðSt+“\Ø›Mô "a¼2ñ¼'Z%Sm™DþÎy¦ÎéÊZ¿áŸl_7 Âd–a&MñLõw%[¡Øívuä>º$žêÕž]”Hv,Êýé®x'= }1¿¡”aZšlË.r ’þôˆCT=§¥:Õ½(ÞÂ:…+ÙO >3â ¤Þ•hÍÖ¤{»Ú o5éeN!j§©f{WNÕ9‚DËJŽ>Çpô𽻥Â&³½™…½©DWkÂ)*´ª±a¼g r -O&ÑÓ›rÎüÇG¦®´/›Ì¶ÂÓ-¸zèé¦d*ᜭäÔq9§ uõvÖ·fãKŠ€Ì^eäùŒ—¶0Þ“˜•IÜÝ sÒ9×É«å„ {@ú¼6I–hrÈN¬®e0Fx”|éÞLkbv&Þ½(ÙêXér…Òíí=‰ìàã0†'R›sáÕ6ÒË9 ÎeWÛh×õDsî¼ÍyŸB½=%[Ó©tfÚÒEƒškvÉÓ—r¾rª?=âöt'Zë{!³òckŽ0zz3íñÖ„îÒët°r*ÂΠcè`t{SñÌÌeÝé®D—ó+¬8òP dmº«'VÅr²TÀ\ƒS$-wŒ•å£azŠE€RâV4[̰ »}\T‘†t²+[WÌ’ÙñY«Løô[§ËåòÓŽŠ”·¥® QõaH«@îvJ™m§” -O“[‘©d¶!žL+?ÖP4/u¶àXWY<È‹ |´t †Å¼s@ø’Ä9m-.mÒd; ì(Ï$³‹:Yçìùë.BËÇŽ.~m¿hÑ;Jã9/‘éH &ËO%*V{ÃCrüúá:¹ŽGÁÄŽAÇ£Út:U“I$–;ÞÃ)Y¯£¯Ñù“*Ñ1%–øÊp|bÌúW±^Çg¿3ñ¶d¯s*5yã (nâPI ¦2}ßR.ËOmÉTܹB9Z¡óÒ™îEéTºÃ1,³e r7ççIJœ»ž6æŽ:º<­”yÚÂâÎh”0(âh\‰sÇCR., Êuß-‘é>Vc,t¬™•<sÎK9×–Ë„ý¨ Ž=«Ë/jƒcjt£6Œš2:ˆë†ËÅGÇcR.\Ü1@=Å¥ó"E¨>%ï­Víx¥vQ¼«+‘ò%R‰Öb– -+Ž8Ž7¼† -daÅQG3’=Ý©xk¢3Ñ•ï.?™Ô‡¦oÀ–…­T\€ÆR–²Îõ…R—²ŽÇ¤\¤,ã1þó\²9—N!§+çæ†ñø(:\¦Ò™yØG)²½…Ž-Á’gÎÙ]©3 ÇcR.LÂù)à‘ ôR*³¯½(?¶öd*UŒ»Wj4ÄÁ ŒÛ¶ü‚I©œ/»hOüA!ÇiAf¾~>õß!„yµFaѳË1%Æ[[{;{ß﵃g«2òËŽ©²Íy&íÙ‡%“ CËñPµµ%³É%E ”Y¡tÅD{&ÝéœÒãpt²+w|¥5žj—v~¢ÀV¡t7²iç6rz‰§–Æû³О²ñLQÚ–öü(Y&ñ®dgú8Q)ïðw­®ÛL©YG·¤\¬£*Åu›)é>VÝfZÇŒÛL ¹Ôù˜ë6Svn3Îcö•ŸßŒ›ò²ôåSë˜qœC||Ì9Î8VGËÃq¦åÇuœqgFX¹Ž3¥g-Ç™"ô…R—²cßq†ugÊˆíµŽÇ™"Ø]©3 ×qæ8;ΔÃQù¸ÿÁCŠy£4”e¬°OHw0Ê7ÌGùŒÅñëÇèöaÌ„Œ¬žÓ2ƒ‚ž´·,ëH ,)æ|ý³L‚%ÉHþnx—¿ ™¿I_gþæx—¿¹üÍåoeÅßff ÀUß\öVêì-„êr7—»ÏÝ\åÍån.ws¹ÛXãnöm£–â\6Æ“s ü×o—ÐDEL"ùë<‰ïN"wåN¢†ä²Dª!ïk)î¸h)z}rR‰ŒGtì\§uµ±ÿ:[r⃙Dgz°pnLìÈhŤqHŠn@š£ƒ7šiXç4éF¤ň4=ÝÆÅ)dåÄeÄbŸŒ0\É®¶D{²kÐü×vغñìŒ"¦™­ÆÈs;c<¬ü›×ð=~ðŒÍ“E²)Uja1éÈKü”ÀL+YÌð”Ëwclq…ŸB­éÎîtÛúÞA&GùM¥!î´•úòÁHª¼7Új ‚,?¾0”¹TNüaÌÅm’JTêìÁñ‚èâAvmࣥ{trñ pv@ø’Ä9m-.mÒd; ìh¬d’ÙE‰¬sµàë.JËgûcHË=…8„~¸ûÏÿÿ\\œÏR\gr÷Ÿž»ÿ\ˆwÿÙÝ>`ºûÏô¨»ÿ<ŠûÏc7‰ˆ»ÿ\žûϤ´à4ÇL/Jq÷œKowÉÝs.åá)—upwϹä¹B[²½½×yN“Rg ci ½È¡)¦àxíT‡¿6Ý*[—sÈ -ê8ˆ}‰T*½Ô)œ©dÇ¢,ü^ÕŠaoƒ™_mä>Çܽ7Óf˜¯¸¤9•J—JµyTl9uÜ%8w n8ל3w®„×áÜÌÄî:œ»ç®Ã QùœÞ‘I$º¦ƒ=”˜';ÒÓ—$Ó©Dvz&Ñ6=‰w ¶Ïî.ÐtD"Ç+¦‰ÜµVb«1ò¢Lq X|y²³7;HžH;ã7žµÕŸI22ëPíeß™šÝ[§k€å7ÆÒâMOw¢tÇÌ<þd¬/m°c{mÃ9t:Ï\Ö ¶Vkp…GÁ“¡X(‹^i,¬è.渋9îbŽ»˜ã.渋9îbŽ»˜3 ðáÒ¶˜£¯ìÐšŽ»˜SÚ¶ljðòñªpW¦Ü•©céŠO·“ÊwijË9î -•{þÞ Ïñ5Ï1&/¤’Ù†xr°µ°òc Åú»–<[3a9œRâa9œRâa9œÇqÃr¸"t$¥M¹HÏ1ÙjHv+BKŽa—¸u#[¹"´ÜEhù8-­Ü¨VCèÇèöa,Eµò-Š·¥—º)•üÇÒª|Ø“{Ø¿,LÇæÜÃþ®ƒõ0ðÎööžDÇ!“h+Š9”Ë„rœ¼µm¹aw[VÒ€8N‚Lލ'ÚûZÙCŸncØX(•Á™Èò׈+q#Žå™INétQ¢&óñ‘_³œÃ´4ÙV„/™þôˆCd™Únôè2Š]ÅŠŽ Ñ¹æ8Šc18WjŽ¥Â+Ýå²°Ö$wù£ÔÕdwù£œ&”2V–?œâ.”ªv—?J˜¯»ËîòGY- aáKãšÕe½ƒÝž‰·fã©ùé¤ó“Ze‡˜1Þ4Âpµ·.äÛŽ·?ß§’“r1ºÒ¾l2Û:Èz©ÝÀƧ›’©"޹çÔù¥cÇn¢]½õÀJ–š½ÊÈû¿zÇšZïIÌÊ$îîMtµ:7„òj•“T{ñ—ŠB7\ÑÑÁÍpEn´¢"jô¢Á[Û3éNç̃…3Sc5øãuœ)›v®ó§G7ŽÔ0Å‘•Õ¤¢£)—•¤¦ÞÌÂÞ¨e¸ÔX„Å[âv¢#åëp:Í]†=ªÙ=½ÐŠ€©l¼Ð,‰Ñ2ÈÁewÉ<}´%ó‘V|“biû¡9‡cÌz¡e*måµP¹Ëåå¶\îØ¡¦üVË™Ò[.wmÀc`®èZÃ̬=vS4ma*ÞºxºG+JwÇ[“Ù¾iE,:ödûRÎ×ôõ§G⢆oÈ\n”æÔ,»ò›R=O²v,M¬â¸„«&Œ²šp,‘œÜï2[ñ.¶WlÖÙgycÉ0*rhÊ…Í9Žg£Ã_›îêÉÆËÀi·(òë8ˆKq\7…[0ð{•qmƒ2¿ÚˆéØÓ­§7ÓoMøZãŨæ9•J—HµiTl9uÊiqhnÌDÖ’Ç6J¤à¦¨5[[‘§]ÞñÔŒ/Ovö±¹j>?jªÖŒ$1õºb¶¹S´€šœ©Óqùé~cIYBúçrQ˜\m¢ìµ Ç’Æ ã™ËºÓ]‰"”ÞŠ¥«3}-Z³/¬XvÚ“«<¹Ê“«<µ'|úT._íi‡«Dšåú‘»«ê#MmcÌs/•Ì6Ä“ƒ©kåÇŠÝ)y¶àX5[<ˆ_… |´„$ø–¾¤qN[‹Gƒ´Ûx‹yÒ; -€Ä3Éì¢ÎD™N\ZÒÒÆ•ž£#=‡d¹´äøu‰KP瀔¸uNZ®c´|–ªÝ¤’_gͨ|†äøõ£üÈb¬F@ƒYæ—)?k`ì‡v»ñÜ¿eÀå;ãДãpåÀß‹g†¥ÎÞgCÕžÁý“Ê»³Fÿ¯¿+³Ä)Øtåœ9¢-˜Jgæ9˜€¥È8Æ 5–º!EJ~FÈòÈÃT?æOÙV™hUŽÕu7G‰)|¥ÎpÕ™@ÓŒ>=tWúû–®C`‰rˆ¡L¨rbŽ…– —`§0w5pWîã” -µ'2³’™ã¿xT>ÛÑÙøBçc\kžœÇñ.Á(n¥,§Îèëíjm,?¦2æˆÍ+{Ï׃Üf»ä6úäÆ~]˜[Í(;ª=„‡½›2ñ®žvçÙ.J‡ú‡¢ð”ƒ§í¶ŒˆWGÛÜ•wådHCÞxÕ©”k#ƒqÝ@‡ÐÑíÃPRXMªžÃ2-3»ÚÌTVX$bIËütW4A~ª´âšDG²ËþCåünjCÐ~òõu.L§*'W·µyfÅ—¤3ÈD*O5ü -Å‹De¯õU_Éx%UfUUIaQñ0^VP™áN‰“4?/+1²"ð,/s¢ B$3¢¢p¼È©ËbEE‘8YUax•ã<¡x¥åqꃛÛáâ.(ZêaÏ>stream -V­Çê*/ jíÀ‹•á­±Àesk%©<¾Ó|F„ñS8 *STÎ:«Â"ÛÀ|+’,[(ÄáyÎÂsm¥Yd G *(±"GÕxQ¢FP*àplTè "ÚQßååQ¢vT/Щd/â‘èxhW‘UÏzyYØe@Š$)X`ô‡ç8»hA¯U…´v€œ5”Q¢…£U VÄÁƒGyF ðÔɪ <Œ’(ÉZAÎH­•Ð/FâE«ˆ\°2¾IÆQ=6€–XžC€þŠñ§20ˬv,"´^†ÄK¶=`YÙê4’Te ç -Ïr¢}âLâD AUÂàÃâ({8Å‹ HðJ‚ÄI0cáLA=0Í^à ‚Y00<¾ú “‚·•À|Fl ŠšÃéÏa³@3¼½#ª­l¯ôWój«”<“§xBÁÊI-ý±*("³‚šý°+,ÃÒz2–…5‡Â´ì±±­I-…ŒkRKѬkR˘T -ûšÔÒÓ -‹faT-Ÿ‰Aa!›Ô2$FÕ -YµU<3| …Mj"C¢KÓÈ{LM›QCakP³Ɔ¥C`m0þÅ2·I-…ì †«€ÁMj -‹›ÔÒjïäê®t—Gå$âqvÚPU^šde˜I¤ÒijhxÔ4 ¨GRTä…F °*ðÄ €+Àübû+2êÕ‘. -¤Ã÷W„S^%bÔ+,! ʤ)è=(,±jÑâ`”X¯Ï‡­®Pˆ«Ì1ŒY!¬Bë%8¨°Z]¶j÷Wfoõ§¿2{ÝB´Xeö΢ÆFH„?”€í™Í1±'µˆº‰F ß–j"ÓÕ¦KO6C»ëMºµEü¦šê`žHÀD&-uŒ8™Èojc"žÒ\¼¡BN›ª/•ÔBˆ‚•4;“l››èÓÚå -;€a83YëÕÐrM:Ê}¦ W²g÷&Û4³zR Xo-•ªA¦!§™`ýe5½Ùlº«%½¬Äþm²ëzƒ3ôy7€á$äÚMŒ§£8 ð({qö)tyì‡Ó~¯Ò$Ç((«ðFÖ7¦¬qú[Ó*¡F "ç̳¨šÑwñNºÆ'AšÀµQ_ôP‹ kÓê*ת‚ìÑÇîØzŽÊÀó,TìÄ/w¤<0kID!ÏÕÖFS¿Àeìô˜á»S -#j!eµÑþ*r²Ç¬ - -GÛþŠ*jÚì&£™!Ô¼3ÁWh-×jÔUÖ,ÄÙàïB“¿ÍÓ‘‰·%@vüÔ*˜µÉ`=5•¨˜èà¸2I&Î,ãDÔ¢ª$Åz -´:Ùºq§‚¶P%ƒ¦c=Æ(Yµ·$+žP§íu,Ëq«i¨f[,ƒ()þu,Œ= ´y/‚À©iQàj†8 iJûé¢ ´êtH½55•×ù+qqf€9{mÔÓi§)ý¢ªß+;AæªAfU:åPyÁÐ&G­5K -¿)•ª´Í4kúéǘ7vŠ·Ï­Ñ>ç”öUV‘cpLyHÖS²,óöñ‚ÁÅS¤ñ² +#!y°6òòhŸáÁ6Ò¬kìyl©ø×±D‚`?RcëˆBW3ÌÐÉñ³ø:†µ?o#þcù‚Gb[ç¸Jwö¸H÷ÚL¢-™õÔÆ3m¤{©,»rh‡r¸Öª_i¼‡SiáÓTÖ( IWÐÔçÉäÔîàÌý–ìfº0Ó/ˆ%üª­Ô¾I¤¿ÙªhÍh:„ÕzΛõéF+¶þëPʨ“ðx'}ËÀ¼`Òqú7«âÃð·–pˆ -ëÇ*[*­|Rµ÷­àŽúÖ®?¦uºS¿“4T“ñª7j\ÐÛ$ú&UQgì?Ûëé­ÕVÚ^R—óJìÈ¥cWÈA÷€Éɲe¨}ψg³’‰TÛ€ -8NK‘•™cA…aYQÀÙsOPQå%Žáû¹gdQY˜‰ŒÊ‰`‡C «Z³VrTBs¦²³Y+“Š\%i -“l|É4àИ,ò’¼ø…"QÏ8II#)0uÐÒô3À`Ý »£ë•­[ìeO‘<8@# 2–5Ý@2¾4ªK¥¥ŒÖUê~£­(š_ÒÀª²èT]`d*N=«Då‰ìOå¨wŒ$óT$ãb.oX?‰yê1ÃÁgYë8F°Õ /l6ÂPY$ŒTˆ*^¬.8X]`ðÖwif0ÁÖ'K´­k>à ¸ðèô 9S5gíç8Ž~à©VxÕ±àà5ÁÁj‚ƒÕ$o|•Œà°KÐAGr·(æšÃ¨óôˆáƒÀ6¸NQ lvÒDpðšà`5ÁÁzt¦ •ˆàÈÝ2Dpô'uQõÊÛ1W£8‚cØ×(ŠÍNGŒ&78M¾ -d+«"š~ögŠâ±rNãð6{_‡›úƒ§fxá‘œÊ †DGÂ#IÁèKE\äŒÍ â¢i •ÒÛ4³Ó¦= »¸ ¶A5‰â`“œŠ †¤Gróh¼@û[’ÂŽ·Á%Eb¶(nškjæ¨Ã/)ƒmp¢(Ø$§’‚,‰ÎJÝÍ/r Ó¾F_RäÏ¡­ ;Ø¢è\ãÊŸ¹ìfð0“B?àôφ -ïTNh¦…HRA$ ÁëKFN9#1ˆœèGÂÇKó Á®1 ¿œ¶Aµ‡â`ãÊ Íª=ÚV•Æ ´¿%"'ì -ƒÊ‰~ä+²RÇË5ö·i¦¦ÅŽƒœ¶Au‡â`ãÊ ¿¹çœëÓÁxUŽc6Eä9– /itgEÉôÑм¦Y:ó&˜û!v%ÄÜaµ\hŸ=:ecу5¾8c‹ŸõTwSgk«7õ3v²±kkß®Õ7q gÙñ.¬eÕiù¶r9ë²Äs§¡=µHrþú)Ll<GZÌQƒ*E¼ÂÞ. Úö»T9j‡ †ša†Á¶P*pÇÊyݰ9`ñ Í@×Òÿð^±=2éî¶ôÒ£:Z[Y Θ"œ®YÃéšÖ DtÛé0QgAIY\H  [‘B‡kr³e:I$èÕõ'Œ‚ÚJ¯á®«j6dzašeº–,Zm[%’Õ–QfuóhEfSÆëTý³OF£—¨f3pF‰½Ñj>ÊÐO«_ -žŒŠª4Å:‡]SSÝÚÚÛ٘Κù ²½¦gêüt¶1њδSÓhŽöàKâÖ+ñäÃÃ/ óÚê9³u6ØÔžÎt±ä‰(hÛÒ -ÕsÔè®/Û—J´X¯¶‘.¾1Ô†ü•+ÞÃ'µd -œ%(&Ùáh3"(.F„öŒì•è³ÀB³Yd#M« +Òk Ã…Na&*&=IA a=N£CAnÕ¨ +ùÓ¢¶R)˜;F‰„Ѩ¥d’’ S>nœ¹•…"h L?]]eÌU! g^Û¶œîpËÙ%y×''• ŒZì»G†o 'GÙGGUP¨TNy6×#†ƒasÅÄQÞ†Ž»üÓ†X5÷u¬ær2‚ÀÕ +p²¦} -jÞÛ֮Żüd~rÝÚ‚‹›`ÁŽ|þÔYYÀÄ,–e²¹<6XÀ*í’ÝbŸý–òâ|n]ÀÑáò6a”"S†H™|nÛ/ÎçÒ–p0J -ù|¾Jàä4É Lœµb ÅŸ>Ç(,ŸËú@ÑV8Å“»>އÇI·øœ¨² qq–ƒŒŽrV0ªÄðïðu’ÂW‹ó¹oÓXø‚V3¬ Éšð)|1ñœ“%_/F5ÈA);£²­Gà]…%ì)<#¡s:žá©.Ê‚ÂH®FÀ_‘9VžcÈ)l^–•€ZÄ Œ—3ÿ%¡e ƒ«°:Wé¬ä ÖÆšŒ†Aû‘žKõS¥n`Mß Á•yÌG޼ -Ð"k~‘ -¢•ß!¤YÉTçÑMÞ~ à£Ø½ùÐðeyŒ[ÈB]ŽNÓàF>§àÁt½¨Î* -dQgVì§ÈªØNÆ8F_`T…LÐé´ƒQ„B`©6ëU0úIa‰Qm@ @Ðg˜Ðï 㯬 º§B‡q°W90XY…U -d!yeáDIbU•ëEQ‘yV•Éw›<Ü€QJ¬¤à)J•G¡ÊòÈ($'„I–æ)ËSì Ñ‹Ë> -9^Õbš8z•€’–çX˜Ø -ù{HiERYÔaM×Ç )Ð`2+Q4Ñ+p²( Ј «Îáb`º¨xJÅ~#d  ó°bF’Y²W†à)‰…ÖxRAD–gN”e•ÅåzGï’T;É -§ -¢îÈšȲ¶Ö6lX”T`òG™çYc\Åv$d£ˆÅYæ9_‹õÀ„¦Î‹÷,¦+s¥kF²çx[ÞXm*ÙÝ \$7Ô%»φn¢ -0i'µôÂ?Šó=1͸!NÐï¡ r-Ð31³Iø%–$)hŸ'4 -¢&­£ – §žfŽzãæ@™]° ±ÑSÛ›à˜-õ¶íÆàŠ¢dð» ±9´—i@ - ¾‘·!B@–$È9(½¢¢ÚÑUWI±KašØjŠ^ýÕ­ÆmÍ" ¶"ÑlØÄ‚ùzúÌnÚðgcÖ´Ö·ø+ÀáIãOÚñg/ÓIÛ ²T°ct!wÞàt!œƒ?ãÙÊ6R…™K­Öí%­2 …ö2ÓlÜÄ„Ù;—1ºjç2@—16¸Œ­Àä2ùØBr6äè(´Œ¨\(¢ ¬×ݹŒ×ñùœbä ŽWlS8§DÇŸ­ÌÄ_N‚h5n`Áê‚…?³§úLhŒ" ^­eû½Ž»,!ê@ä«R.êìEž-ˆvL‰ð -AÊá~HKtù³aŽPÞ†8Þ+ ª`ã -ömV‘‰5{‚f¶kÀn¾ÛB™ÙC e&F‘§Ö®ý^GYve -pNÌö"‚L±±J‚]&YI±£Lör¼ÌÛ1&ƒ:!ÛE¡äU@Ù­ví:Ƭ"cö"„Ìl×Ýxµ…0³ÂLŒ" J­Yû½Ž°Ü´eµ ¹6„Ù‹0–µD·6=YÐa•ñÀâür0†oæíL»F͆m:Ƭ"cö"Íl×€Ý|·mZ=´PfBaV3áÔÛµÝë(+ÀŽ&tµ…â’+²]ÃSAyTt=€T"Õ zb)xƽM¿3ŠlêUKWÒ¬võãÝ6åŽ LI¶ëv,g˜­zÃð-ȺÀ¡—–bg”Øô:«–¹Ù®U@ï®-Ä¡ÌPOl(3ŠLÐ ÍÇ^׎l(3t(Ê Eˬe¨bf»F ef‘…2[‘šÑ° ¼ñrÊôÚPfaÖ2!7Úµ(ËÇNŽîfC™Qd‚f(;&ð†FdÙ¡8ÙpfhWf5]ý2ÛÕïm3J,„Y%\F£&䯋mø2ºgC˜‚YÍ„ÛhØV` ,79Êš}ZêEÖôÑå¬5Átõdž0CK²!ÌP¥Ìj†²e6lØPfY8³i° ›Ð/·ÏK½‹ö‰©ƒaMLvsbZæÄÌÃ];³pÆ™Ò 3´tCá±fªEÂLÝÉ(2µ+£Y³ÀB˜Ud"Ì^Dp™ ›/·fôЗƒQÂYè£Vm÷:²òñbWÇ,\%P†c@mh:® uÈB•¡1%†Fe´iÜ[x2KL4ÙJ£M^ã­ŽŒžY82ún”˜ÐêmÚîuåãîY82J x“íkðÊ…#]²Pd¨HF‰¡BM÷ŠÌE¶ÇhÓW©…!£_†‹qS‰ «Þ¤í^ÇP>6ì -—…!£ÄÇPŢë2† …ÇB‘¡™utÉlS¿·Pd–˜(²•hËÚz›¼Æ[m3Mï™…#£ïfZ£Më^ÇQ>>ŽZó¸n3Ú¶Á°íS aÉÓŒEy¦ÿ}`ó,ÒžÓþ:؆=Öm`}«Êøÿ¬ûcý±"÷ãÊý¸óÓ U õ üãP?Çk³•Õâ<“µV{G{‹æ¬= ªŽÇºÆöT-£íM¶7Ú:j¤PU(†¨O±dà7&„Ãrû‡_†Q^e=\¥Ð;áKK‰ÁW1(xÌ -ÚU -ÁQ¥PçÍ_l ÊÑ¢—:Îh„ɱòyEÉIQ¬U{l=¹,Û‚k9™sByæ…5ÕcâTÙCè‚¥À åuxP°µS˜oúxÃV3¬°Iª-½GQlõr¢éÉÖekâÅhÉ&s¨°ŠÈÐ"6xª4ê±¾LBµ‘o]ÛÿZÏX5×ÚÓ©Üö^[wt?ÖTéý%áÒ×3Ÿ ²ŸµOÿPðmÕ¨)p‘§¤‘ö‡Tléâ_§PB3[ît)?ïq‡®f˜¡c,Ò¥¸éöðìÒoi-fóHoâ¼ -%MÝO[àpµÞø\Ne=Úo”~Ú¸‚_x o]WÐÔQC:É€[UqÒ©ÊhÐxA§ùª~úÓO¯­‡ -š:J9<µÍªÂ±„b‡ñ ¾þG(½@ËÇW«Ät¢¦»ýÝšFx´`ÒCˆ"mÓâ)Ì!²Š¢wt “‹·.9ó²ÊöDpN™¥›*Ãucöæ­vö/É›Ÿ®èTè´ÊX—šd1\¤qUgvK»G1‡Üä´¡7][i¼®®ÒÖ´±ôŠØE; †*‰¨âUj¥S¿ÒBÒk—=·lyŒËx 0è÷Îé—:’XÆÄ‘~©W¤zئbè¶úk±+fÌ'ÎC5iÎì:½Òjœãs®´n˜«³ -£!‘ÚÃ; :ìŠv­Ñ‘c×f ]ʦpñœ¶Ec‹¯p¹xy…E1˜¤X‘êJõ`kHÌK,Á²`l³ø6ÑÖ”Ì åm,ÊLÁŠŠ/ ùy%Ž7h5à š`茪¸4«qòQUY;ýtÚ ËFn Zti#W‹ì ª3¨Û ~kÎå¥\m9v…ÕP–ì•–ûÀ^Rÿ:–$©¶”ò’)lqŠ‚BõxÁ aˆ¯c%´µDÑžÆ!ßÖ:ÞÐÕ ;tfE_gW˜sl-‹ïvVæ1äË8ÊÐmŽcõPeè+À;pSr8UÔì) iޥɧi#xÀF„v´˜b€SZ…)!Jš/ oa¥sµ•³heÄú×Nçt‚Ný“¬x;´†‘»{ð䄳I’È,—IkCMDzyòg„o‰jëç~Íø P… àL¥Ð^@™Q`¾Ðš!U〽ãt¥³Fñ*mM•‰"úð¨8ðÍ£5–e9Þ -ã5F¢0Kp:H n±È€hÉ[TKl Ã- ®…[¢hyjù ÕrÉ+ˆ¼zž¦ƒ“K&T"¿íô›¨9Xkuð… sÔ£nàÇHK,zÐ~ÍóGˆ´"IcªÈÐXkD -­¶pîâ‰~0P,F.wàã PÞð<yŒ*#ب†‚åÊ«@ž~µÕNdËQg\”¦ÀMžÚx樋’¥¶Éz5o~t ÔhVKÈÌpÆ :šk)œ¬¹a³¸ÚÎgv^ÅÍðB§jWRTðЖ(´²H;>8aÌ"dZP9(A6€þÊH œªß£c^ÌS ,У‘j3Jêl%´#!E,nIAƒ`1i+hªˆ[³ðJ=ªO¨26p׊Pc–àÌIW)2LpÀ¡´Œ¹l”Œ‘”i³z„œÇj†Œf´W÷Úò¨†`¾]/Âå1ýV;å+‘€¥‘t’Ðãu÷5–î5©¤µv èÖ»¡èÝ„)†¡dÞòôÒÖJãÞŽ‡=ÍÊåäQ­¢QåxbøŒ¦¼ 7&˜êxfÄ ,jÎÎZ ‘‘3™^¯°Äl ¹›¤ûÆsȵeEem5­/îiqŒõjZ2M‘³—™q¡Ñ«…GÆ, Rí+zk e™üèÍ"«³F½Â£%#/É/«ûfN+hÕF˹ýÛ'£Õ|AK:ë¯RôÙI*²‘8O{¬/Æ‹¸çÙ&K$¨ô{¦šKzb¼Ao€¨Ÿ4íú=­ÉȘüÅx€Eí5˜-Ö;Œ£zF'óÀÀå)¨,‹6À ªÊ3fÔúatŒ[ãÆ½Þ%£²Þe½m"Üĵh½€géFeãÖhÛ¸×_mTÖ;–ÛïÖáXy¦8PÉDP³d\æíAdh!XŸ ÅhS|aMÔ0ð|?´ã \ÍñNóÁ`[¦åŒ;ÅSU99·ËµFîâ§›š€ -³Rñ¬ñ<C} tQÎõ‹â™Öt<å©ò4$ºZ“)ãqj¢M{4§B<{m\wuô&ŒgõaÊožš€*u (ôøñΩS<^ ß0@9ØæQ+è:Œ‹½ïp‹ÐQ ×þñèÉŠK%èL橞ÓR“y‘JP uÉ…0…Zj}ð¤Ô‚hm!èÒèé8B 0â‰>ð †þ×þYs´¾éÕ|Þ›ÁöÎy/sœÞ+Ò{q$èµ`jÓ‹TúßÁK‡s`ú›ZHnùs Ê€z Xžê1þƒÎN¥Ašêј-aÄšW ÑêË#×óá°Ïé<°´çóyÄþ - ,IÃÐ Ì@˜f$¨Ú/0¾l_*ÑS9unWziÝ€àœ\êë鉷ÌöMñL½!4µ$ë’„ñÈÔÚtg7΂YÉÆ]ŸFãŸìòhh¥š¡3UäP§’=InØ`a ¾l¼uq-ÔÄ{’­öê™ôâ„óúýªÏè¡E»þ §³‰Ö4ˆ¹6üQ{LÇ€ÇñΆ¾e5uF¢Ý3ÝSé™lkÅût½Ö3½Ò3µ!žÉöYmº«­7™uÔQZA`‹ÀîQqmY˜¨7HfJá2ž(‹«Út%ʼì%¬/ ñd¡ÙÓí|¯ÌÁ¨Ùħ¹ èïIÌ\’èªoksˆæã‰ ”¸Œ" Ï¢f2’«ŒÊ‹’¨ -Z‰(³Ú¢ 1"ñxtÔyQÒC2Ó•¡â“Ÿ¡ÙÓ–œPÔÎÛpaó(ˆ­I%ºÚ† ³ÔXѳÐϪ? •Sg.K´öbèª[À$»pwº”ùã±÷!o59©³ËúööžDv - Àõõ -sR©^²¹Òo¼Ôõ©šÃ,A:ú&ç4ê©Tzf¶·ƒ€ƒ§›’ÙRbØ“ë{³=`œÙœf${ºSñ>í6gÚhu5°ætiÕ1£r›3Ã-¼†x+w§…^Ud•ŵAŠÒl"z4¸ñ˜!§1“c±âQ9É-®hqE‹+ZJÆCÏ•L®dÒ=ôŸdêW*Ðr«§6éJdz†K*ä5jJ‚£ŽëeÑWOÏ9ˆ;ú½=‘¹»¾5fÖ·†Š w%¥Æ¢”¶ÊëÎÆ™¨1¼ÌŠÊp¼Ä‰èûàe8‘QDŒ*±èÔO é‚ʰª©(9*)±ÅTMÄÙáM Òsš¹ã'û…³´Ý-§B=Ÿ@ 5ïM~Ø—ê²/—}••2QœDÁÓ‹.'Ñ9IMª7ᙟ(õ}¥Qf%è ‰aöd‘YNäðP9ãeeNVyVÀ€“¬ ¯GHÙò‚ÄÅ‘þöNó\#Y –\#%±Ð-’=v†5øIæq= ãRdNæ‰Å¤h<è=ˆQòãV$ö²Äëú“‡,†N(k+N¨4a4DÅØ«FܺšødÇ>% ð ­ œJ‘~D³`¸ Y’ ï\ÞŽ>žœñòWíd5·d üa Ʊ‚>Y‘ß8{½‡é”[*ž -ÐÁÇCõv?fDŸ}‰S¦.å,rˆ?Œå1f¨È<¯0à -ðG%ÄÀä•…¦¨Êzø#šÁî$²5}‘ðD˜0<ØöEÂQ™ï¼$ò #°’ -œ%‡ZlQYâ8–“Ežø'È$•Ž*ðÚüÏ#NJÏ`1iñÚãsÿÕh‡‚Á¸ŸV³Áz8RмÂSæºL›ƒ ê¾ø1îúø® ç¿}äÌÇËù÷(Ý>`COtnT±T'0èócï" -æE?ø]<ˆžÐ>…EøýA0¼iŸ?€=fÞ3_˜ú/òL‹®_ºœeÿ-&7ölD%J—»VTŽ Km‡Þ#g-³%ºU]ÚÍþ¼ïöV†L0‹}­ö\õ¿f›aÉ‹-#Kqù€ÿlÔ·‰+nØgü—nÿYa»FŒ$û@—„òuAèÊ™ÿ \Jx›Ó©äJT–;üßC$¾k"ÁÀ{ÿú%þ¿æ‹Io×›ÛÆ´7\ÿã?Ê óßà­¿‹ÿç8G•X@Á×1Á„L¡Éóqjë°·£¹pÖ×£-¶¾¸‹®»Q­QN.Œ¾î :j›Þ€mŠ•Üþb5äì¶§ÏvÂõ½éÍðÃW¿ï§Á»Áb+ÀÐt½ý Ï‚>šJx©˜H»ÛÌ?7=¼ÉÑx½ݶFÛk -ü_‘+‚lþïÍ4ÿ•ךo¦A#y/ ºéÄQYqÒ‡JA+”Áï"I"øàZp¨êI ¯—É›R´Õ°÷xý¾'9<‘{•L! Ca®ÍÿÏÿ[Áø_U“ü«ÐÐs‹õ?ÐÕ‡ÿYLJÿ•ƒÿÕ[Ù£ŽŠ¯vrÀëQc2¯v•”©¤g*è‚Æù_S“€}…_{‡Åþ'Z³åfÁ‰VöÆN§ ™õùwçK¡d½~Ï›¾ì1³ž®zT½/²Ö[Œöûža­å9Y^ù0¿[1Ÿÿºÿ~Sœ£ØÒžÎö#æÙµÙ ȶ¶#\åËœ,õ\ò¶>²#!hTÊ–ôzª½„ß§}¤7à =ž «—Œòy|»3Z IÅt€Â†½¨ú å#‚~ÿíɳwz!·Vl{ -ê¦¡ß ¨¬^|6ï")Œ˜öø`¦{^Dz?õgïøz à¡‘>ç%¼ÒçÇ!óA’&½02é½=aþø:ÊLb_§h©ïó£coœé€*uO c'|§¡ŸÞ®ô&£Õ¾Çv -'` L’ ÒLÆ­Þõ© X…ÇžE“~/sY¢–0à÷Áè=~|ŽàS#$œ%÷¢èj<¢(ôÜæ¢ðJ2êõW`û|´…Õúƒæ&tT @¢˜ã ƒ„~²ë#4ãDW5=èVK¹ EpOá\%Q¼%3* -p‘‹R•‡æ(Ñ^F¯‚JNQ¦­€•ôó ZÚA&S‡ ) -臄yñ(„aþ8å 7Ò£€™æ¢A‚7 -Ô? EÒ¨ -(“µËˀʡyÃÄ€öR´ÿÈêÑî¤p‰¸Q \ð†Aœ†A‘èÞCÐ>|ï¥ø<àC=QNþøIáÃI_ÐÏŒ" ¹@rAàíÁq±¼Dà8 -ÂJ+IF}Áã(¼>ð¨ ÁC"¦Âñ’¨`Uœª²€ÿfZ!­¡Rˆ<˜L‹Æà÷…(í ø$?lBXÔ 0  ÉGl"*( ”öÁ˜¬D—Omƒ‰OtOOÜ‹H>’,@B„-M2Y'^¿X1…cþaÛqŒ$¬¦vІ§^Øñ¼ˆ™</!&Jt©,o"ßQPúAxû‚ð"*#ˆ…”!†Û*‹w¤3r?Ç·8‰ -kzÄ7Ir`^/ìY0Xä…ÀK€ý݇‘c´|~Ÿíù>?tèeȦ² Ø’ð3òà<)”–Ÿ;6 ØíŽ[õ¿ô..êe$š;Eå/ìzÚ‹Ò@¨Ê.""Àˆz:àEBá¿.ov–ÝušéAs ŽÔÙ ‚Dxfö; `älù0v¼ß¶ |AXyàŒa\ÝÈ;@q -)L`B¿Ô%Áìäi–cÜËÌkM@Á ‰i -@y)Ü!Êf@y–,ñ+N<#ph¬œÃbív(Ôâ(_v h(DŒdõ¡Z+°ç“ÌÞ³1Äæ…ßx@v°:>Bë'^ ýEŠÒ9G ™sCS?’<`Õ ¼A`@zQI@Œƒ¬gT$%U< 0*‰(mWjÓ=SDi¨Géë?êI Þ²£ò ' rN|ÌúÀK¨8Ò Q5_¼ Z¢Q{}¨À/æ1~^+#"<‚q‘G¨ÀW¹(Z’ ·û‘Àý„4$вQvm‡ ˆ½Afæ?(ÿ ŽÁRø1‰¶u)²¡â¸ýQGº'«À¶?2'*âCŠ!}P(<É*ç - HÅAÁ¤Âô¾èÁÄH‘Gu›B™70iP‡؆ꡪ…“Á°åƒjzSH惪ê§)ç?ãBZ †â_8}8ˆ¥NË:n¡<Ðk‘–{u¡s  û~x†wP)Äù¨¨vшi”CŽ6% -mˆ -nÇ×°¬æ3¬[{¤™“/–ý~Nïð *ÀH ÍU¿†U'1bšF%Å(\bÎÇì„Ð;`í‡`a¥à<÷Õs¦¥‰3´ÙqÁ¦Z1â„7*?²"A+§G™!løçEuÉñæ*²'àEÃ@*Þ¢Hô•ÁC¦ VÌÏPCíÍâÜ+<¦BÞ)hG, ž€^IL` JY¨ HNzð˜hT1l`Ø=i,º€½`“Qkí¡$Õ³óäB/õù9RBÌ øÅõ¨¸ IF/2ÚªAÞaEAGÃyït}  ot’B‹êCÒ ²ó«ð½¢M¡SBʃ¢‚F…µÙuh ¾@3`vU?ò ŒÒƒ ]°û!ÃŽšö2 ˜þG‹´HKj·ž3‹C¬|òµ[¬Ür†I“ Æm0Àð êló@e4Íè^`?ƒ¾ï%±!;’ú@nFž˜½n+fiÄš?¶y8èì`–Èú5N6EZ Û(ÜœZ‘B ‡@|#½ŒNÞ)†Š<çj¿x[ -%ƒhª:•×j Èk¶^LBè®°Î=H1ÇòØÌ‡ŠÛ#Ÿ ¦cäò@ -p³GPg˜[DÈæíã1a¢ò`%Š‘ÖLèöR9n‡χ%²%l|ê£1ÿSõUÔæôFu;˜Î†ª/±ÍØ÷ŽŽžä=,—G®\¦™d¹õb8ZÝÖq(´J?ü¶¨3ù“Z^èD–iˆ_Q*;"z‰mÊh•–ܶ÷'¾K´6ù8mäœNI!-,@’ÎîÆfj‘‡‘µ|è¶ äA`µm?(3$ÊåÁ6IøEÓ/¬rˆ•B Ä™4º*'Ì 1{° ’¸Hûeø±Ž$xÑ;Hܬ¦÷cä vf^Š=îÑî÷ùÎ<ãÌT @Þ-¬1„úYK³`HRàÂZ ð¨€†B8ôœ&´a`dP/½Œ’¢À?ÇÈ ¯¨Úìù}‚¹PXVø¢I;°­™t4ã'÷ƒT¹Lhü‰ôaìß ÊÊd}âK,¤<ìZ‚'&Àµ$w6z<½¤ˆ^y¶Ûó…´çq;üÛþ$n8:òËñçb¨?)HüBĨ›ÿŒè°ß¯Wë?p]×f¯Ÿìmû^ŸûET­ØR[ož6·ЬaÆÜ÷Zo5Z|¤ë݈iXeÛõö£ìl´fg T[±Þ@SnŒz ¨"ÄlGÃÙþ6ÕÛ¢‚›éz³AYwðá(HÃÕi‡·ÙÞë->¶à©ZÅ…r™9ÊãŠ]Ï4Lm9Zía|=TUøøý6„¿ »Ÿ+å‡õp$ù0|kùçr±‚ÇÎÞ~¿õØ‚¾îÄôÏKWèŸ× -Œ‡Åp;Z1mŽa1ǧèÏž«ml1­vô¶»0¯œ ¿é=tªÌ´E¿ïdÚ¡L¦;’àÛ(vVëÕHbëÁ|4Ô‚™cKÇß;¯þl5„’æÄÑíð$ÔçÇo}¥åÿ%&HELhšÿ ÕúÖBøª«ú73:lûõò_ÅêÿIR,ô‡æÉ¡¦ÚIù_G‡¡]¸¡=XL+9þËù¢Š€ýÊÿ.Ýÿñ?x7þ›Ù`·˜ þÓe1E{\dì°îqب,7ç鈽„Lu©-ÿ^qL{)—׃OhÐIµùýc6ÄWɨNmø÷ÎŽ I—›N &Ô²<ï«ÛX+ZfvþÎß;É€ÇE!×D_÷¨-á?5 ¢¿{VNŠö»<¾qœ˜Ú´þÔ2­?ÿGèX06Ö‡í`”D A»‚ÛØß=„åhß‚¾ôÛq9ÃuPh!'^c‡ƒx™Ök&cÄøááÈxÓ²¶%—´Û¬ÙŽüGÞnf.Q«%®,"ø©·˜”†Dá6qدoë½Ý~´ý5â3€“‹Ñhˆ¤Wë4ëã=H©ízƒRLêÛ¹²!š -9¿õIvר­g«=B²¥~XŒ¶|éxºh _îTaÓÚß‰í¾¿îm‡·äùUP'Û”Û—j‰:»Î4qëôÑt}´h®ë X<ŒÚz7CãÅO©ãH´¿BŠv‘Âî8ZÖ-ùpN•Çk¢uJUG’¹íÖ‹Þ~tÛG‰6ì]W‚ÆÁÛMo3ÚÞîfË»³J¶¿ùj=˜¯ûÛ s<€·wºòšMS‚{GlðAy»=z8T[NpÆ„¶¶}޲PÜR@¾)ÅïVµíÝró¢x­öÛÞj·é¬ü €gC@í_' -“é}N£xìc›£3Õ[ýÑÛ5ø½ð–¦¶íFÛ?F·ÈÑ{›Îö½þl1Ûÿ)d -Ü–ó‹‚etØÜ–{«É¡7ÝÖÖ›ãbò;÷ß6› ô¿»Å!·È ¼ÁŽZA`à8¥Úh»ÛŒ0Kç`Òˆù“*ñÙ£LËìb½ÞÖ9Tžî¥7̯AÒ¬WyžNKúä§F‹E -ö½ãPe{Åà«›Þ€C™—·Jèú¸ýh…$Å㡇Ðz[ý1Zœ#‹¸3m™€A³Õèv‡sR›¾ØÞ(Ñ"ßÛÃèѶÞñx[¦ey=è-tà·å7h"#AeÅ éu.‚·çÌ…ìa±8’›HOÏeÍ›^oµŸÝ2zìÌ<²ÈE«ÐàoŠèÚ‹…¤>°eá3ÉÊz8R[N¬2 VS–Dꈎ²½Áˆ»Ë·¢€šZoËÜØ·«¥³(¯Ä#Ÿµ”ˆ÷;‰ã„Ýf–ýѰ¶]g‹Qiô§ÚÔpŸ‚¹I 1-'ËU¹ïĨ”Ô8ùÓ³q× óÏ=§²JH:ÁæK|ɦu±¼·jòŒ²3}AܸÜ#©·$±íÅÓ\¦ŠÇÅŸ«W¾mk6ú°¨'ûÞjp4¬ÐϺ¯6Ü}Ó”Ñ - -Îþ„Qù|Â'M‘^…†7}`ŽìzµßÕ‘àd´œ~²9êŒë£BÇîä8˜]Ëâžp$^]ÿIiÀÜbSÑùtÊ3pßIÊ s°˜m@=F§ÿe{œº;®¿ÓGªƒdo5Ƭx q³“ä]Ëke4œ–·õ˜W6+žÓª¤Tí,7)¬¯ïoyfçiÇGge´›rv5ù<0G}KðFõ°ß€E¦üN½Á]Ü ÒFÅ÷:ˆmŒL­ `%­Á×iÕ1AÝ& -J³ê˜È¯€”ËR.9s•?ÜŸäXÎZ¥ù¤Xò© ÉG¦Ã&§òÉ7aÐën1ô›ѯ iUÄUZè¡X‰HÎÖC~v$ߺ_­OL~;[avBîIô£~¥ñçW]…ô9ž˜) J…è¸H¬Ûö¨ïn͆£µ»²ö½ŸûmÜ'§ªLèÅ÷,À¿Ýn¿p !#Öб(w^cÛŸ{Ì Ô#nˆ I íz»þl¿ìm4ñzK°ç³^l]KÎ… ×Ftÿ)ò“+̵ääjŸÉÂGI¶Þ]ë-ºZèa•l8Á~¼_›,’­6¬Y‰0Ô‰K‘øØ6œi˜âV;d.ûRm÷‡òwƒÍbð§¼TbÚ V;%"†6{PÍxNm™ùÁ:-zu<°íƾ™,ç®Ñ -ùÕ”ä.jµ;Þj¥J¹¸9#§OŒ¡å ù=º4 *¯(%íPSñHÁÊ"é÷‘å¬Òf°=ŠcÙ&¯³Õx­ÒlË»BJ (òö{ÛÂ:žf2·½hh¼çMI­-o¡e[/{ÛùN8 ¹ahhˆW{×p¡,ò˜6›íx½R’w¨ÙÌLšGjv0Q¾k\ªE†”?……Þ¹V£Iït2(Óh öqʶƒíf¥Üׂ`çî™q%j·›ö†£íHK¨Ñh ØcÞ©¢¨¡°•_JÎÿsãØÉxhR­¶[‘µ‡mJ©–qK™vì.xî‘—nÇt(·\ÌD4@§ -=Ý!Óp½(HÜ`§°â¸Áð ¯Ð@ƒ{îõtìudH3NAJCOÊ*Év¸Ý©ï'¸Õø°(PÓ†5 T¥²‰àwz«Õ1"àd’žµR3#KžjeÙ¡ ä -™º?„vR.‰cwÑË›-O)”Zhƒ °“/LºÍѳ5Xþ9—G(¯áz?må["­’QB%Gm—à[¤9¿¹¤øt~ØÒëvsóã2ð‰0²õÇoO'€„¬WçäøP±Ñ¥i«ì°áƒI1QÑì‘­ÎyÒ¤¦‰íæ³ hÕ+…5DͶ°ßlw#4:m–Â} —Œrx<¦)zî‹·Þ¿­ðÁlÆ_3ŸƒB} ã¯IO |¾V™ÆÍ—A}௉À£g,zÔw$¨}á“5о6oŒ9³+á€Ï6ÔH_Ïçøäx@ogR³]Ó¾âúÒ®ºsœ$~šM¶ßèëúêÌ|ƾ-èCþ}IjÚßâ¯x.Aí[žžgSã÷è_ô ½™fúMBŸ¤ —§|oó$ÝÎZ¢ù½3f3I¸¶¼gúw¡×ôØœ7¦KO£ #ÓscÄÈ·' º)•.x*Túî5D|¶Èú_™6wÛ8Mgºéì¼P3éž.cöãzÜÑ_¼ÄhñžÆìâÙæ/̼§w[@AðlÿÀ?ÂÛðs¦i.uáçùìØVB«Sý€'…úi´~L-ÉÇÆ}Àóöà"sÉÎK=QÞ›’·Á‹ÆcqM¾»ötl͘Ö϶\òþLÎCCGü»3KòHéÔkè õË›þÐ4ÿN,דC6’-Tiº4h¥fÑ|Èž©”Éø÷ýÀoÏ”³´çî0øë/÷¼XÒÙcû­ŸÅЪJ4ñUj6îoŒþå[Ì•íîý™—q6=|ÍÝ¥±Ýë_¾’O¢ÑTÂ…]¾šéŽC¢Ô1Œa%¿ìIgðñ5]Ì7Æä"¾ð$>cßïwïÆžÄvP íóà;býc —׉ÆA7µ'3Ô8— ·N{=v¾yÒÉJ%&^Rf-ÿÂ4ü—Î`%:ìx:ý0ÿ¥Ó¥Û^ ÙmJ§»/îÑ8õìZYmïzõáù[g m˜ÆñºB –c-ïè›!kYˆ¿è¶saﬓzäD´­3éô¦÷ÎàH?èî({_gô뚢Uо9Dät–ûūΚi¬u¶RØ¥³?ê“:G«ÛÒ9ß2_:WßiÕ¹'³¨ŽXÖuäÎ?Òy û;çðDë|¦HQG; ]ŸüØêñŠGÌzóºÐ“®« °Bº¨©í×ÅbŪî¾èâ+Ò®K†li]êÕð¡Ë˜¶wºlí;®Ë7oºBucЕœ‡„®Ü3~èîíV]ÍDtýÄL×(T¼º'âùI×:|éuÏkGF÷ò”·ç'¿®û¸xÓ}6}]¿Uoè†Ï›;Ýx+ë¦ëÞ^77yÝ2ÔùÖ­«®œî{ÐþÖíT^¯+ôzÃ&YÑ›’“Þ2}~ÒÛS÷„Þ¹3~ê‰J/¬÷•åQïû -õ³E­Þô1s/¢o;ßúÔ´ÞÐg»%¯¾ð^XèËoùª¾:¬xõõÅãJÿ´o5õúyK,ôú†îCß_äq¸@égOÐÁÒ°y×oj@Ù›Ÿhƒ¾±½3˜¼÷SƒuÖoœ :o =€ÁgòØ eogˆ|†Ç†xýëÅ~(V ù‘5”Ûó¨¡ööè54¿¢NCÇ`5Þƒ½¡Wëm £Iciø¢J_7Fêžšv¦ÄäN_½ß™©É½››ÞáÒ×O÷´¼ ¾}|ßÅJÝ]*Mšïòž„ó®boûîêŽ]ô®í -åîÞÜ­Ú]/dx½WJÓ»ùçîp·Ùç\F]ø½1MÏe£ý`~3’½•‘Þ'ìÆÈƒ)fLã†17}œ+¥¨ÕØð»âÆŽ~ÿlì.æßÆá׌6~}|ÖŒ›ñ`iÒ {^“y>|4¹LËÉëׇM¡ùjŠÏ–£)G·J¦Êó|ejšQÓËc®oê3¯i2ò½šVé¶ËtpZÛfÓ®í4;Gîg³·õî2‡Ãoædií5ª¡¹ö»7·g–¹{˜VÌcºc7/Ë…ó~¿ùgŽEu×8øl¡ƒtÈý -ì-™løÙR©hi®&ËÛ[o`7eË"IЖ}²¤·š“£Õ²×¬þr9f½ïî\ÖÜwzg­¹æCës1Õ¶~®u%ë,Ö(ÖïEÀg3¦¿í6—éÕ`£ßÓß¶û¼wnË{îF¶GÓºgë¬G](co¶ùìýÕ¶_¼Ú­ÖÉ» -¬?ìá¼¾oOcûƒ#½°·+Ï[{O¿3Ú¿*—}¯¯ûoŒˇ!é ²…GĹ~udvÙ™£:Ø÷šÇ1øôdËþ¼íÔ¯šs§Ó³;ý!g™xøn;K‹ñÚÙò½yœŸoíŠsîªO‡É á²'_+.ÚÔ_¸âÓ @q•Z–¶«UŽÜ¹z¥§¼kQ\-Üú¢'âvÖë}w`hð¹S‡|×] í=î—§b× „ès׺}ÂbIDÏ“aNÜûzY¢¸¯ˆÖ$Ý&ú±¸¤±`)ßIòÁê&£ ë”,ôˆ -ù´öSdŸL­ÉU¾Ö¢Œß³EEÍv*¶Î,¨RªÛ¡žm®ú¨Ÿú.Ìkº±òÐ^ë§'åû|òÔüÉ¢ç=x÷|•'¯¾]%nŒ^÷>e÷F#~“·Ø±ë½Ï¶»½wÔ¹Ûywž»Ï>·í}Á¶_ïË¥RFß“»jõ œÂ÷í°ùi›-yOÈÏOxz¯³DfØ™$Ú“ö8ñeîM“æÈü+|<,“¥ ±Mv“9Cr³ØoŒ)׃͓JPåXª±ßSã~®•¾{> ÓþêÃ.]¬º\é÷ö4‘Þ|V·)6Ë$6kæéM—ÈÌlËNÖÜþÚeÃîi0û0š?eûÕý.§ Y£9Ÿ3Ðͬ%÷nTrßvë6OK©|º¶çŸ§™X~i[L -Žf)VHX­_…§×AªðÌm‹ÖõPŒ öb£9}/N[£XÉR}Ý•¢/ÝV ,Ï ÈËÙ¾l l;å蕼1–æ„­$èÌëCÛgxxXFÞÒUW%®¦»U}ÕÕïÌÜ\£¦=C­pÿv¨}ì»ûGÝûøðÈ®õÕ Åxc|ÛikÝâ®õ{Ï—¿Þ -¸ï롧bÃ=2=5rîz¿Ñ­Z7MþÍÞ 4ï#ÍZÈRmNöãþ“mÐ2<%_K¡§—FüñiÛ Ï[¾n”lU¦±JklÊ|µ­É†÷ÆØNLÆOí—€QßÞŽc™g:ÿþõ\µ[ÂÏ“yeбÞù;é÷§~çý• -¼èz³ñKhZ¾i:Bë—eÆZ~%Ç;ÛkÉ3é¾»ýØ›5:н¥Œ³—··þ&ö®{w™nŒïá‡Pÿýé±Q~_7þ®·GºUÝ˸;óÛž>\OO™‚…ô ž§öO«·pøL­Èùg÷u?èÝúo½ûx«Ý{‰×½C¡öØ×kµ~kتõ·¶~}xØ·nŒƒÆŽ|¬K…ÞvL¾†b;\¶^­#o‘ðjÑ—äh‘ -×Çžü÷`\m?ÆóqÜ3ñPžÂ¤Ú0}L滵nêy\…§5÷²5]Ì·Û™÷Íž=>…^g«‡2hŸ_tmPøj¼Ù—_›I!:šÃy+ðÏw_›Þ"’y ,:r´Ô?/cËx¤±\v©lqe¶Í«Œ™|[ ÜDtíð»öëbÞÓ^Oû±È†"ª†M­ññ¹YÛuÅãwà3æûnzú­Îãmã®÷ÖöÃæÏí¬Æqðÿ‰qf2ųoWÐm'ê`¿'é=ÅdK5=…«FðÊÒÜòІ\!¸ ­–Î~0á8(Œ{µgˆ^¬­³ã‘—´#™ï¨ƒÊzµà»eÒ묘,oq8ÌðûÇŒÞTQZL,ÕÛ0ɳ‘’ßY{ä–Ô9ÀqÓJ£F—ûæ[šÃöHE\Bßpäë?ôÑ*€š°(‚¸tÙÕ|Ú°§)C·»Ã`ІWX¥q¤æ©Ú -Hä£[Oàg»ÛÃjŽª'º4+Gƒíl£rò-X(Í;þ‰­B˜ß±1(wHýQ -þŒ/GÔ[7•âÙ¸$~A1¤M¬¬Ž‚áWFuIqæ¤úa¬÷¾jzµGÚQs¸÷ì(zLUg2¾Í-§¡ÉJWÌêsjÖsíîè§|†6„âO¹XÅ{*¿™+ñíaàÏf¨JÀæ³ vé¯ôÄAÜÅÃ]—-qlvñ]‰rßãá²n{lTÜ''ùÇr<â5R³hlv¹Ì“3PåaàùÓYcÈÿ’Û§¿Þ“Þ§#±\—w‰Bc?µÇhÃ!›öÞµ“_ sûƘždgwþàØßz|}K4S®–Ñ,îçSa–‡‡ãBMdßâL‘ÏH6 ÔasØ“ë`W¼VBÌòö¸ åÜOwŒ%˜ OÅr.ñQ$1ÅDì›ðgÖ2.¹D¤ùBYïºf BtЇzp”µ˜6ÖÔ”®Ï3ö²+{¢T`€ÎI˜Ffˆ(4Lµ4ÁÔ ÖÔdšÙùçzÂÿBµÅkPË/Z‚¾õ¹ŒÓÑJ-Ip>*¥nŒ‰feh  ¦“åÎ\j´¸%¯]®ãÓd(‚Êy+申¯e­µE8›ö½PöXîÓyc<Í f5g3iŸ?I;«-,p\d¾åÀ@ÓîÏ-ùµ.“‹UkhNŸï ‹’ë`“q¬¨¬ÉéMÔÇS3¼önJÒöò”‘–VNBÃh×SF -fZÏù£¥÷¦'ŸDŸ‘€ÿL÷½ÓvâÉ8Ø Û™õæë"ðµpF°D;måô|]$"ɹe3ËFr¤…'Û_ê¶'°—ð„5IôKô»}ÚiDO’-{ÿ†7jœ=|ÚÃ…Ý$öÀàK’‡Åk¢ñYL±Oƒ‰Ïx$ŸrA“ÏH²)I¾>CÓ{zŠƒƒ–ñí dbV‹ÏŸîN侚Zùë㉅ìwŸ“î.ƒh:EæRå8ú#Š92JŒú¡{ÒaIÝs¿ÅNoÜO-ñ¯èk‰Â~¥eê=2o¤ÐoI¦³DÄ™õûœé:õñ²É &Ü}Mß¹á%Q£‡S? OØEœ|Œ{#Œ› ÑÔð¸é&ð@nŒxšÌ„Ñ üµ|¥‰~ ãÎNPpb‡,Š¿rý5X(ÜÛø0zާqB%nއÇ`q5 ?r(h`|rP"¢¥ƒÕ.”ÄÒþ`!DËÀBaÞAÈ:õ§ñ$DGÏêôwÆAÎIŒ!.9—˜ú’0CÆŸ¸ Â¯ Y€ä—# Y²@ËܬN¤"‰,ü(ùYQf®˜sŽèˆžæŒW¥*âTQc¢ibœ„„]Ü G“â 34-ŠŸ¸(ù´Z‚U¨7G˜HH°J˜a ‘â,ïãn/Gµ2½`”c,âžY“€xjk^F†Ì’p<ÄHK<Æ: ­Uü‰A?š<úó"Týl‰f«´ÊÆÍ£&húcŠ¿a+Ø+'åìg¥Êêl.ØÅмÇÝÞyšKzož&©Y÷#žÌ¿MÌVÆS'|ûš¼9ÃW;ìml΀-&4hð@Ó§õžQýjëÛiX[„!Þ2[‚©é¡þ’.•¾“ü %?F‰ú*]7ºÛ>=\’B(vl;„ˆÅGÄù™]‹ŸºõÖW0B[›ÌÀÑt'iåäÙd²?Il™üI·BšRñÆ_mÉGãû«ÃHTø%ðÄ·E0ÙÇè’+]øò÷NhË!ŽEb•÷·åf¢úTrîdˆó49£‚ÁgŒ¦mä’ zòеÿãIÿ?訚ÎÍ#`¯Çrj à“cŸÛèûÁ =ì}v[–1R"fFÂäEÜoO¾ÉAý¾JÅŸtAÖRmÚF€¬¹WÅè§^æ†ÔôM‚|WÿÝÓuï'ç;"µ±—c2 ºÉ9ÕpÄN„†Ë–©(°‘éd6’ysq½ø³Ýw›!›Y€+)cp`(Ëqç~ øåbò±‡Ý¢³|`zè²µÚ_ÇkáŸú5¢¼q-r»êh+‚Ìr¥öµ!ß9’ÌÆ·Ûé“7Tißcaâ>ü‰¬»1¦ -¼¾«›d>é=$ Òñ´Ó Ö൛†KNîAÓûíš%°-–qÄ·úb>k³:¼ ®Ú`ß8†+ØêÙì‡U7E3õÄ#ýî*Þ~´›BS{c›_ð Ó9O:Ÿ90òÎtqkûdhìœbt™Ó’ã_AgÚ¸—¢&¼"?ŒÿzNNGeîå q/˜‚ëqj¶›ÑÈ«à|­ÅÌwJÔ£+Ÿ×í£vî#÷z@})-p“ÐΟµvjûD©C™eŒ–†éá2è8ŸEvú=‘Nå Ìfä\ëb.ÆÀxÏÚQ_hôi±xÊ×ÜÉ…«NB§V;nŒ ć§À{æ£k|…ÁOtñïd×ÂíXSŽî@êÒwFÀD°€öœI¦ï~™ u,±_±íÎî×å hJþveÓîÝLKÄ“eºÕþè&a$pÆÖÌÀN¼%¼–à#ˆ¿v€ÑXðC‘Xðg‰¦£Ùï|$½(ûNJ0»ˆ]ƒ.=n|®S3ýÛ[M¬b…µ ¡uADW]6ÁÊØM&ª¡L)Nnøš7;²ˆ%¾uH&Çþ÷áCzütg^F{“ŸÁ¯­¹ û~·“XO«6À˜X8u }; u_àQI,J{¤$8Odš °ŽÕÆôøq;2#*ØÑæ ÙTâ}’MÅ'õü]”,$‚îyBºIÂöo5 ½l$½ç$±AµG“x`³ýÀ~És(`ÐÙðZÕ¦ZgʨyÂ^"¹EeiùsyØ_¾_Ân¡< (3;ä¦êø2Å[ãæ×wŒ.Ò®úЉ¶xÊ9üiÒúì*Žpìú@Ökr »Ÿýæ…{:ê~Q=òòÑ‘¯Òùîn—vô³™ˆõÎø´ØùN.«1ß9½<êaûš¿ M)LZ@Îy ª5Ýéqs Æ1^ò8°°{ÿ̳ºR|kèîÓãõÖ%A°AØ5'Vt¶óœMï='öaí¤ø‘#–Q±²wÏ_3‚òͧé\Ì8#H3>ØAëeÇuÎZ -Ã62.ߌxN"]d*ì'ðxÊã±Y¬ß6Ü­(÷•¨’I˜Ù÷óx$¶1ðyñ¨Á§¡›‡Ebçx¡cOÞLÂç,="AAžCÁð@»Yª)¹'é³åUfà[d§Ë*,sÂߨda :µÄ:1¶HCÌ—r]X@{"&¡ŠÝ;iÓ¤ÓÄ©²gÖEŽð9ç;±&n®uŸ}¢ú$2ƒÎÖ—Žç7ßÇÆŽ5Rèh†rø²Ú…=Z|)ò°»Î{ráßaS‚=ȤÑá‚ßv@ò¢rŽ#[n¦|D%o%’‹ÅæSdÀŸhŒ·m÷3}"bækðl4ó ±èЩ„Ö‰úº¼O;ªßã¦4?p£æï/Š)3ÐÓï`Éè¶ÙL ž+ßùzÊáñÒd³ý‹>éB@$vÆ… (èávÆ^5Û]§R»Xذt³.)È7Fv;Yd­|\ÜYCžï §2ÁO¼¡Øc»—àI8‚´DSŠZ­d¡<¸g†P„Uh² 7 2’^ÄýÏ“L"ÛíÑÑ·3k):[)òi¹ B¦%̹nåCŽ}/±‰dòý`$”–‡D ¿™ð¶,p_{yÐõÖDx|mÅ¢wmK»yopØhnŒô7l€¾ÝÈfã òÆ¡9T§_½È¨ù´)ÐG"•cz¯mŇ‚‰338è?˜\[PiyÁv´%½óán=½·þûT>5}ê‘…¥G=Ýt©Ñs‡Åâ×@ËöL™xøý ÔNÿ£ ßò/sØsÇ›D}ák „pï9¾³>ëÓ¥¢ÈÞÜH Ôã©}íÅßü8¬nŒÐ2MO|´>â8¼ÍèØ·-Ví;ÉXjää'šŽ2‰•c;Ö¨¨™ìѸ_ŸÆ±0÷”¿1\G@ßÜu'çfh84CTÏVK.œd3÷üò¼‚uÙ'OÞ<¦ÉC·È~¾¦8)ÛFΕ£éÅ Á_lUve3ŸÝÎ6,ü“%±êOvœlôØ¥–xäÅXºmòÚ=;Fk‡ÓS†ÆÚ‰æ“¿yÂ]pÿ*ÃÌ—mËaù³ [Ô†Ø%ˆÈÆçÅÈJš#Í´mæDR2pP¦Ìó*§Éaþ¸8¬†—e*9HTKyt\:é -¶±Œ«)„Çõb‹¿ôCóhú}Ö1ðë›õ°ç,åºð<¦¦ñ¡3]X¤Ú¢-Ÿ ß YK)€u©½8Ö¼ù üà4'fÈþôeúÍŒï$_âb‡õÑCòÄ>d#{ˆ¡ÐçÊô>¿‰Õ½®–ý´¼SˆÞÒEݘ8 ïØ÷G7\¨æëtèù©seYH•Eb«jž¼ñ}õtÈð®)´Èü°g*ö pÝ<ÔÜe±úýÂ[xù‹-§ÈL&ÂÝ‹·fš‰ï"æ÷pvâƒE×§lP%lm©eÿßÿ«O9[Í»½k7ØŽ·ßò!„l³Á©vÉñ"™Âj~‹ -bK]ès†Äéúùïâ·ãM2Þ£Êa±Ÿm£„ðÂÁEÔÌMƹmoˆ®­¼í­†l†‡Ò]ÔÌKe/}ã—pUš³@g$æö›KA1o©Ã -Ÿ/U˜+É.,Žze -Š£žŽÏnpT'ÿÉXM{Ì÷é·ß·únÂm¯8í÷Ó½}¢¼‘LJ{ðÈ}žûæ> šgnž7Ô£=d2Ƹ§”=Z§§:«'Õ9ÝæúQgÍ#:ëÃKPç˜ÎàÑçØ¥³B £òœÖ9‰ -E¸£ ïÓ¥¬Þµ…Ç—ž{﫟1O2à €x[¾`)–C§§Dþc”º1n·±h?áØ<ã¥à.ÈGÚ®ìúÅÛÊlß^ˆôK¶ÓÌFÑ šéŠpWGOöXç"еzŠÈúÜÔ§._%æi‹?¯£Ž>%áµ7ì‹°±`þîK4€îÝœ¦Ì1}ZÔÄåÞrÔ½!ß…¯¹14uÒG|–wÛmx×Ú¾-%Âím0(À1´Çn9ã³'þh±À‹ä - ¥zÂòö=e‹»<åÀÁËéL'´a Þu½±’ÚŒ½L'° ÑOß·mCHíÒ/59 yâï~9ŒñÀFt¯;C«S“ú5ÇB©×¢P{xàÈõg»»÷V¤çêí<YÂV‘ªÏé;ؤ€Ùf;} -ëÂKŒµF"!ô“È^ž¤æœqs¡ïz– -ëòöÕ£Y°5³Y´ªžð~1Ä@$ûáªv¶ïTñµž¯©ëÕ­¤ìÔ»¾1ž‘R7’•ê[Tõ{9 ½m×dlI½1»Ù½2Ó V t—x÷ÈÍ{ׯµ4Ј޲3ûM[ јìöðI­–û×w) öH¸.7SÚ`ø>¼ø¥€" ãí¼ÙR¤&‰`}v4zÒR@‰ìzV”jªTG9 ôÆx6WogDä /Ò«úÐ&Œsw«@ýÐ9÷qDoÇi9½1b°¾ïy£ÎÌ5ó6Ï -€¾Äˆr!èA@mg3ÍÏ¿ýÞä½W -(Q^ŽG(’–°h ’éöå€v‰ê¢ÚZ2¿”\®õVyŠØFÅã—š+ZÎyK^ ¯^¢YhXe€örîÕc”œk‹ØÏd6Gî©ÐÑêšc" …[š[Ýý$ж³e’ÚNXÂ9 3âÅÉ/=ׇÂèK7°Y$¾÷õY óÐÂ\EP°o÷D·›ðJ­ÚõˆwI Ÿžg‹,P}§ksãYb®n»ÍÖæ¨ýŒiªTÜ®D4ô-–IrÕb΃6 ”Ý÷1Øïÿr‹ÂnoÉ l­ÙCë}uœsjÓm¬Î*u߉gšyØÀ• Øý½]$ -ÄÝÃ4Ôû>TЇG"“yÊ" ®sAhÔ™G€f(ìb'Qu;Û Ð{²äÕ7‹MFPj¿ÒQ©ý%ÎfÚò¼Ý¿žÓ€-êÄÞn3öã®Z[Šžê¨`a,ÿÔ3(8OOÏv1{,º^Ⱦ ¢×´•}Jd"CÇñicu.aÊñüëñyëLÀ—ëÍ…§ÃÏüÓŠn1áV_ê¹÷Î%ÿ´z˜É?m´‚ÁÓÓ3Œi&)ÿv³¾®Ê>ÝîÔqSËu$drëÉÿ}|þ&f4¢5I䟶ïjw -Oé7Ë cÏóÓ´üÓß«]þéûÜR===ÇX×â}–»;éŽdŸÂæ‹I=e1Fz[ΞüÛQ×øIþi2èõÊ?}ˆyÖ -#«ß¡°ìÓi³þ}ª3ÙS¾ãÓíÆtw•Øüø¼/–}:ŠH/…O7" ‰™:g„šX+)¶±F6 Ÿ*+VøôêIöÓgñž³òÑfzN¦’îb;mé{{£pêLø”«ÅÝ{s*ûü–ž¬7èÀ`>íb<ØàžEûVXF}$ú}] û¶zÊ­9Ý Ù9¼™Æ 3ô]\bÑŠìœ_sW+3XÁÏ´ òG¤€‚D‘²@±#”6Ü‘¥ó~+Úy“ -ªíÆ#Ù9J‚E–Îä4·àè¬| Þƽ5Å:4™ ' `Y ýŸëõM‘ö¿êµ¾ËÕg{.>&‹µ `‚öÿ)´ó! æ¢ÏÝѲsÅÚ¿ PP @§èÉ­Ÿ€2ZŸÁ¥–¢ßê'n¤ú¬öäz÷ÀŒ>¥‘ß ƒ!‹€ªÁW“ëüÛ£³xã©™6Ç&8ß÷B(úŒÆÓŸØÆ2l²3î…ïS‚æ0Ðø7ÓHà×ÃCNº§£´ý1pرIyæ`¯i²wgÎs¤NÞ4äXÆÈþqTÖRƒ )»S’t<‘ôç•ÕùYŸ ;²*é÷–LIéìŸÞsúdU‹æû š¡ç.\*Ÿf(=?ôGmýÌz©õC«/XAÄŸm¾M#1?¤¼^´~¬‡Dj‰Ñרu ²ä‰å›ìæmµÎ4ûšÌ¼ïrRx¿1^JYa—Îá‡1!æ?¶×ábœr)ùȉžÌ[Ì&=™“è9ò>7ÿ W£ãØ -È X€@´ú5—‰QÊÎq—AÖt÷¶x43ÈöŠƒÃäyæÊn†z?$KÒ‚[’+œÄÔœz©©q¥ÊÔîC…©1£ì™ äÖ?£ý“ûld}U’`{ú -%;I÷tmžt°Æ–„ÑK’SÓ¢‡Ñ“%…4æH[ò++­pÊ¢¬Æ(ØÅæ½òƤa}qc|÷ µ-á8í3ýIQ{ʉåô9²lüm—=“ÔH/·WƹÑhRèd÷Êj*›^?e…NUçç5Ÿ?\?ቃ¬–ójÄÐbl½þ¾3·ò¸n.ꌸ&ÆÈëaŒº&Æ<¿Ã»-³„æ87\'ybhîe”­’-Ú1•|JJ)…VNŽíïušli®œä…–øo¸rw¡¡ŒÏc%i,ù¼7þ;h4&Ñh¤õ1eì£ÞÇ“FS¡.;—NÖ4‡´ Õ¡H D…qE‘Ò-a("ÝòGáq*{ƧböôûœÄ•Ç®k ¤‚tK–ÒíaFl÷–ôXü5Åíûn²×J‹Œ#éÖì|dkiÓúÈ "Â\Þwß²{¼”=,?$YÀÙûè -*Û²”ÑaÞ÷Óuæç¹o5+̺ü -é€ò©êŽ,¦Z]¾€õ~8?~4ž!16?_àϱÉö÷'·âѲø9²¼ˆáF#²4±¸41ƒ ÎÅîÉâNÄâž»àæ n¤©x—°‡dY²ø| ž»åNv47ÆKŒŠ¢Ø%+í8sÉJIþeQ¨Áÿlj^Ëij®”spH D¼-+º7¸¹ˆÈ,„&å&üöˆ4Xi/¢ß§ˆw5ø}nŒ*ˆ‡,/| Êþ¤Ãv<6R¢@àiªÒîsUzSBã+ÓªdTiÏý“Ý Â/êDµ))œI©nƒâ}èѬÁo+¥ ŸO-ô{~Ù”ð¨•Î¥wdŠ‘Ô2+%:/ö=c?šxË“7Fy',“NxŒöh¡oŒ£®Ë–Î6:9J6hÑeÑa•0~ã‘ùM‘ën4óÂöRÏo‰r¼Ê²Oën‡º -í´ð‹+ê,ºÿµL~nüðB´jè”ç‚MO¶ñI¡°—£æ~4r T/ÇØ¦Ÿ_ŸTà^Î÷=.gä‚í,åzÕº‰â}_Á-ŽŽy-"}ýæRæ‘£ -ÍEÆï…:#®³Ý ûÙÔ6BñŸ,*+)TJ¬ _U”h­õ¹Dƒß$$Gchˆ7ħxÊMò´:uTñs‰]•7Fu1¤E¢ÁƒšîךÒóÓo$Ú‰÷aÝ® ÑP/çMŠÆTû¹X¢qš’¨ŸßK4ÔËQ¢q~KþÑËãéGZ.˜’Ír¾qi-eÃg•O«ý\¡ni8€Õs•ël~cF£`AU$£ÖÃÔ•ø¸Tæ|_]̢ζ5ì†Ê{¡ðŒïÓê”Ø Ÿµ†#Éî…'Méc«°òã°4èÏÈQ—œ$òGÆGæ‰!å<)Ú—×(O¼j.¨r7t6ÕÀò¼Í÷*@gsy/ú%bûYÄà"Œ]d\~l5é¼\”š¤Ï 1ƒKÁu}Ad¶+aP -*«ºª)Þ–ú;Ѷ„¡ôw×q÷"“RÒÉj}¢Ø5Õ%éçÌÅø”d‰¥sÅh[èìg§7’ãº'KåëxHú;MþäãJ"(2Qˆh-Ýš‚oqg2*Š' |°Š>® I–"p<Œ*{1ŒË²Zˆ²_Ú²dËùǯcú%ÛjÜãî}²œÙv£¿É¡SΠÝÞðã:å :æ„÷÷9tÊt8¿ò -9tÊtÂlÁŸçÐ)gÐݯ“C§œAw–-øÃ:å :–WÉ¡SΠ;ÏüYr Šà9tÊt“DöÓrèTÏ+ŸC' -H>߯1ð¶Dt£nöòõ:ù ¬Ž3'’pSÔqH)å|"ƒ@¼û72Q±šiw`X O¯:ždlÛ´x·.ÝÑ § O å831ždÎÄQf™p£?-‚ÑhKÂk¬„g|¿¡'µ8,f~ê9#J™sZçÇø”Ògž« .’TpŸðdD3ÒUw/S¥ùjã¥dKg ˜]¦ µl9Qçbû{É»Dø]ÔžIüGE:'Ÿ¿ï„§¢?6öòÊÆÞñ4AÉ…šŸaÊ›úrœG(¬´lZ˜J‚ ^!öŒOŽNv -yâB•FšÃP‚›:ï«£C“ §pÊ#Ê’SßÞäÎ$&yàJU>·iÔ#%Î:¿ -X‹Ṯê‘ò™>jzƉ’UÒTÒã„RçLänŸ³dä÷óËô±÷½QÌ<}ì"Ž/hàxáù‹,žövóoðtÊ»1^æÞùYfÜñ¢A]æ‘á†$ðô²ƒºÈ#£0$ñ*¿À“&ŒŒ•$ôÈxî‚s·Ð#S¼È#ÃÝ8-™ó¥ÿ­ÛbYäY?HÏá¯Y2ió]hHϹ ‘æNídW.‹¿öÈ 44IÇÃe÷)è‘e¤¢4´ßzdpvžÐ##wÇb|%çÜå‚]ŠÊé9%ç ¹„j{qêý“Q%šF‹² ºœá÷9‰%­‘ ¼˜+9«eSúõ½aÜŽz´ü> M.d{5RhèQ§)táœ>ù‘ÃhÍ5+åÕÍJjªyu—Æ®Ÿ[I1šRHTc1nüš(YcغEⵡ~_Ÿ¶³2­ùp*÷õ])Ž9KgÄ];îrûI>œT„*Êd»n>Üo"TµçÃ)e¤^/Y|×ÈW·JK¹Î~›Çݪ¡1Uãgùp21ðW·;·ÄUCú~§žY¯éX'uv_ñOóÅ~)Ò-QòÙµb"ŸNfôox¿µÖª¿+Åô‚²ÿPõ‚*ýòZ ÜrÖö~~‘c´_P?òTï"ÅÉu&ݦuyÄsgsΆ𛠥¢´±á%1 ²7N£ô£k„&ã®”k±aK*4ùRmáû‡f´ vqÇïÙõ"bŸX¯L?—$BÊer¡~~{ÕîEÝ£Mµg:“;v•»‰BÁ/m–¸¥x•UTiÑò©oßWÉH%õ*—¨hÏH%õb»ñ©¤Þ«ÕUÊHíéG’n”Õ…ö•2RÛWÊHm_)#µ}•ŒÔ¶Ô5Ð<‹OCþšpÁD×@ $‚ŒÎ²9Dl(q 4ÊÅzRÞÀ´FÛ^7Ž™K^f»V*Üî‚þA*W¿R²³k¥Âa¿¥ºõþËT8I»òê©pR^…ë§Â1{¥P5TO…Ó¦ž.–Ì­¾ìFx¤«Ü/u°B–Ø/T“ZèìJ…'PöºÆð*:LÊå×t–¤A£ã~•;d¯ æe£w7½Ë64$E#".‰A=q/ª'IÎì -0Õ~©ÝDç\=~è­nFçLxº:g1˜AåÌSèSGç˜~5ÑŸ¸Î>puŽt=…þ ’šÁ;n9M¢³Ÿ>¶z¬õ“{v¤qËçZA†’WO…‚Òyg½I©\œË©agP“G ´Áð´Y¼Ê%»½(dØíôÙ/¥ »ñCC¨‰,~ 䀅vâl¬dƒT”ìf˜ŽNBQœû¾[r3gØy­Y €à¨|†‘ 2@q=¾ú’êÊå)fØí¼ò@sŽÏÖ èy=¾‘Å?•«ÇçRZ6Ë~Ù=Åt²sÕÅßMÁªŽ‚Gðø»ÖÔËp)Ûóþ±e÷°\©öH¾»™çªj;ß”¥;îž^”tô–©¢Ç#Ëù•†Ùƒ|•$©Û³»Ô„¬ÄÑkZíÚÿóýZ®ŽUÍœåñçE¿°|AÌ•|jPV¹ºF%9)í—w–t¥Jr1‰:r?õÂ¥µ‡H*Çàºh6Y“K"®O¹îÛÕŠÈÉOsÚ¸æ”Á°jE•óùIÅ'£bmʵ´É-:Gþ1Ò5„Rjå—°j‰ˆfî8Õú®˜M'!ò;ÿÚs–M'e-‹ëeÓI9¼µ8¯’M'år–¸yò—ÙtR âÅßgÓIåÒÉÝuóól:í^ëßdÓItEþl:©\:åÅŸdÓIÓ0^ëkfÓIÙͽòÙtùTèîiJL™»_{5•¹»Ñ†òÛ2w\,ûŽd¡»_{0Z_Iì7ø1„å`æYxîŸü’_Å*·ä¹XI6ø’©Yb.H¤jÞ?е†5]z ¿TøŒï‡ê´dÀªd¥•dÃ/ -"Ã:?J3¼ Â–Z>QïÃ,2”™ZiVåYkÛèPz  ×]^[^1 -:»V4Tm©1J9Í£÷¡¥6¤†ÌG믓{S8›Ãjûu?®s¤"-5öãøáhDu­Zª“iˆìB]¹4IK‰µÖó}ï¹yÅ[¡3ù&72Nš…ï¢R°.C¥©NÏTLdà®bæC_CÊÇ{Ú\¹–èžÚŸe¦Àö¦2gµ¨agšJËj«`¸›Ë‡±j®Z$¾÷øÇ™¨òQO×8ÜŽ\á–ÜÏ…‰ RѸéâZ?Hd°%Ââj© *lxW2ñRûE#ªU¸Ó–_ùÛ -wâÜ7Mœsq…»Ÿjã—U¸SÌ|ü9 -zA¹Õ×èG-ŸHk¥¼ßå*åɳáï+ÜIJ¬µW¸ûÁ­æ(û©®ár 59Ö¾^bm«9~ùybm[ÙªÖZëùíû7÷Sñ2WH¬…^¤¼YÆ\1ý\ìÁ<ó3ýü>±zQ¼î²üvT.Oþ š ­a"U4¦1}lÏÙ~S÷kÝ5°!ÌêU¶Ðº–$&á.²h¼6]CÓÇV¼.?¾xw¦n¶ßh4Ü?¶šÜÔ²~K!ÆèëØ•°’-çv¥Œàz¾(‰‰…¢8¨ß_¤Ï³’ÌTò¹ã縊/:þ‘bÈVÊ»^ŽkG*ÃõdY\šãš|ž+ÍòNlØu‘ÏqGmüèj*öž+èl¯A3Ó Ãt¤2\\)Ok¹GÅÛPEº«”{|„ûyîg7žèzÎÜÑ»tÊœBÙ‚E¾ø[ æ&øø–¹3ß­7üNP‡ÍÒ¿«Ïù–¸05íM©â\×) ”È&éªÐ#Sènå È¥áu€æt>y ¹Ü¶Ãó\‰Óð ßôáM.5M!.ð¯ó€r©i€1œå^<É¥áù¦¶xÛ¶‘K“ÏüôNÁ.&Îý{ÏË%ÒãÜÝêËíIÅ™õÁDHj®lé¤hª{3ÐOrèu` ¼ ná\ &Ѫ"ÖtbðøÓ1ó0ÔÐîÆ¸ T #-=ê«Q†vÛÃÇÜÈóŸ0”|¦vYÞvXD[§’ùT­Kìv¢Š"mµfZŠÎƒÎ|§¿¨b¶¹0dH>û‡µšd3­U¾T+ƺ˜SùÔ¦‹B«d5]|߸I%ÀT«' ðT“ @“Œ„TÄ“Yµvƒæ¬´ËB«ÀìjYiÐSØ¡¿ºœ§ð¸Í~@0ÌIݺ òókÍn ÈWéÕtG/øXì­üy"Ùùýc¿H?’UÞø÷(ž|x -Ù‰ûû¢Ü¦¦AJ ïURïÔó÷5§r®Tr¨X߸¦TN™D Ä ÎàÎÙ…••¢È9Påë‹]ÒYG¹~÷eSËå¹c*'——L’•h×ÁØHVFÄùç/Lgòú¡L Vcó˳µæjºUC® Íõ¸úÈ?ʼ̟üÓ,@žJ °û¥Y€ZsoŒ¿ÉÔšxó«,@­øÄ;ò³µæŠmä˲”EÙÓ7å,@v4ç³ÒP”O\à_S”OHÉ*Y[?.Ê'°,þeEù$½pW/ʧVçý:Eùð íé½Ð4½zQ>Y/ÜU‹òIæŒ\½(ßUêWªåÝ7®4(Ý™êÝP¿®ë§\Õï -™\W»J½®Ÿö»¡~S×ï4µ+Ü %[×OÙ+$Ö“Z×O¹ªß¨ë§ì.“˯¼´®ŸrU?-”¬)dQ±ªŸä-Í?¨ë÷ÛL®kD+²™\WJD’«êwYýJùº~ø-Q×O¸æ«3\\×ïòÕŸÔõ“JGT…»´®Ÿ%_§®ŸòFw£r´¦µ®Ÿ†¬´+Ôõ;æoIWõûùZ×ïrûI]?©tÄkä¼ ëú)÷¢^ï·¥lõø®Q×O9ñ;±úe]?å07é[h.¯ë§l©ÇZÿ¬®Ÿ4G«ú©ç½j«ë§ŒÊÓIâïêú)\ßœ™)?«ëwIVÚµòÄUýduË ëúý†÷µ×õSL“´ó2RÕò-Ôã»B«Ñ/ëúz‘:¶â¬¤_ÖõS®êÇðþïëú)û -nŒ×©ë'GìLU?ÅŒ¡ êú)Ÿ7KʱÔõ»$ŠàçuýøÔçUý~^ï’âšJõø~Á†¼^þòö®®Ÿ‚ÿë´¿(«öêú]v£ÎOëú)Ôœ„ùe]?.K2Á„o½juIKÕõSVsp¼åêú)Wõ»N=>µ,\­õø~çÍ:Õãû]]¿c/ÒY¸Å\IÔõÓ– /éÿA]?ådx¦^ÒïëúÉìÜlU?99vi]?åª~¼“÷_ÕõS6Û¥×åòº~ÊUý~á·bL[$ä/ëúIå<Éç$þ´®Ÿä8ë[í¶y­uýÎC~U?Ù\Ñ ëúI,,OÜe£ëø¨T­ë§œ+ÒÇ~\×O*íä>Vô(^P×O=»öuý”ø÷öü¦®ÇŸ’Uýäâ-/­ë§D<ï¨bÑ×ó+ˆSðÛD>«›a\.âƒ'-E®]BµûªäÚU¼gü–ÂÄŬ(J8Å÷a}¶G*CÌfÖZ°-V[Ÿ0*²EQî[>àÔ™™v²­ƒß¶ÉÇ(µÝF©dìé½cÑW~¯Î"²:Ûºñ¨£BŠ=¼%í±èÅó?•¦f"ó°ñÙ`&NdßßóDÎq¨eò•(ÿÿÛ;óõ¨ueÑ?AÞ¡h2»ev!ó! C BÈÐ ! gßýÏ}ö[%ɶìnµÌ -ë;YßõúÎa§»«e©TªAúÙýaÿ„¼˜¸ŽÈëÇ£‚¼>|ºHv¿Ÿ’·£_ÉÛÍøyûóÙCòîéñ29ØþþœÜD{äpcú‚|žxÕ&Ÿg?ãý•[Ó£W× òêúòÑÆÕíÌ͇ë?ÿŠØfrkïìür¹3'G‡_ì.¶©;íîËÞ½»tüì<ž<ç/K?¹y­Eprvvz¢X?eiuÀ€‘Ï/Æ^éäãß%OçÈê›w«díÁåÎÕuòîTßIšß‘ÊÇßL>éLë_£1÷$®¬|ë\]¼|Œï=¨$ìf•ËgîÉ϶³³ªOìnëfZª_úibâ`õsÏü|æÔ‹w{ÃcÓG#x‹í3üç1þ¤æÎðtçÑ'TÛþÖæGü!Í;WxûGÞ½™Oôl-ü¸Ü¼^xþîݧÉå©öíêØúÆT ?>®Žxkú½ÀŒã!z(¸??˜6•Óœøx/;Ö‹õÑü/üu†¹ÕÛsÜ ÂŸÕYŸ0÷ýBĞ—SöåRáË(ÿbgråíÞ:öæ#{úöçâÒÙQ'&9>¶ºB_`‡ŸÝĬ/½9š¼9|…M:#˜Úœ<É?˜v?ø¤ºùÅõ Ò|YÈ®·jÑ™RûœtÖžLïÆKñc+¾¶4å|pôpéIöÁF„7GN€î>N¢²ÆÁƒ~»…^Åú%{º; /wæ'†Úy‡:$»«Zß°|º‹ÚlÐ&h1 ,Ÿí+Ùîà£å¦4' /wu³ìaúã^~`¯¿3øî›Éɹ³ôXL¢¤ó~s:¿èçì*ŸAËrz¹s4ûhæËÅèîêì -ÿVÄë»×ö^ºGÙîQ~šV }¼Xú3-êöèèÜÈrÖÞø³¡vò2MÖVçG»o–7Ní­0ª½83–7´˜x:~~ø`åäû¯DŽx>ð#¸ÊMj'ìx{4JUðr·cOÞáï=onŒÃ_bã;ÇŸè\ºAa®ŽXö×)×MØ©ýþJ·8­0x¹×±ßýþd}ŠÙ?†TlsÎöçû)s>ø4ÌͪüüâWÛŽåû©# [LXò¸ûiü¯¥¯ru{ñ' Å=¨Å„^Ï;éÒ#q¹ê¤•ú½‘¥…øÚ«~[zʃi`\7`Ÿ«0ühêl¥ÒÄäÒç&'Ö &Kß³"‰ÐïŒÌ=]#§í‹eÈ2/'ÜD2OHºVÛ¶FÖâ¤;":•&öövò&ÎÆœb@[<䙃•§Ù£Çb°ƒå)œ!S¬ë÷ ½ "ëw®™Î2s?¼)iþÁhñ‹ÙùÓ7ŠÜ -’²í¤³ÝéùÅh½s•ëD?pâÈùõhü5rýÁøØÓh°| >ˆ£R2y‘ÍËí0^tØÌ¿þŽ~õp/º§òºÞ‡^˜{|­ÆÇŸçYïúA4òmW§»úÇÂuÑ÷æ¼z³¢ù­çÉÙåë×¥GäJ¸ý°+a¯¬„IG®Øq¦‚™ØQÁÒþé'­È`u\%àŠ(aâ¡£‚§K¿.]*nlùʨÀ^Ô>í$›’° ɪ/ÊÔöw«z¶Ç'wе±7|ÙY1J¸Z|ÿ¡P>òå£ÇÆ'-¶g‡?†¤m¬N“w±Eó\ë)o/jöazpv^6ÝqIgUþ½Ù˜ªcÓCíª{mzjÊÓD]UNE®·ôƒÍ¿³M=Ý.7×èƒV%xKO/hÖ„|PÌÆõÈÚó¥’\g¢Ãg íd˜ùA«66vW¿»uîÚ‡øî66~w›¨ÑÄÀ¦`"nÕaÔV¥ßÆÈg£ã,ס¶W›ø=ϧ£Xµ‰é;ÎF'ª˜”}6ÔoUçov™…ûÜ!wFÜoeàÎUýaпه"Oî°ðú\çO^,Mš&®æ+õúc€‘i‚NÝ¥Ú[Ò»[D oIë$7ƒâ%¥<ùï,q—_ÒòKV™}ÊKŸ‹©ò˲ŠDùR¢S~IÊ/ãÊzå®T¬HðbÊÌy¨Å“)wC~îÕÙê›§3û+WŸ¢ý…u¹µ¾tôåÙ7³« èâþîS[³Š¥È”Š˜ágš¹Š'¿+|èÛûOÙŽâ‹‹b/ß[ü •ý¹.å§²ßä²;¸±”í Ø}fÅcúÑj¶jBWN¶‡™ÍŽW¦›ök«]u™]ân}Ž~ýaw*¥~±—Y©÷‹½L(ú‹ -á®õÜF'ßžu¯7ýpãk¦˜­q[ÇoŽä¶[î†-Ôù†í–»a •¿±ä­|«y‹è½’x]n¢%o™ÇJÆÇŸÚyÛ/'ÈñÏóËé¼hxHGçÆ%x‘¹„­¼$æþÊ«ød}[¿a›=ÙÿÛ¹z¿:™ï¨šMl:.gN³‹¾‰ÌUÈøÃ„Ðó×í•©tlƒ¼}8™ãÚÃd -f+½çT4ß“xÓ©Ñb¿ö†¼-§Å¸óàzvr÷ñ•œÛå[ êàtLï¾Ðñý×ÃÙfé‡b›ï3{8;ûÙìAŽßž~jgC7ålµ.¯?A›~-ïo˜º|²mO–Ïw©ýëöÃ'}JGWÆí_ô î ¾º¡6=ÜŸÇ÷#üÍúKzx¾IÌ·o_Ù¶?ïåÖ¶ïnü~~|ú-ÿ€ç«òØËçwÃKæìõ1{úææÕâyôebaçä¯Íåçï‹-¡üY‡K9þóÈ¡;òSHÖ¾ÝÈ:zìÝ円zˆ[&Âþµ|t–K2+ùöÇBµ7ÛKoV—ÏGN^½ù8ºr<=ÿÕ,þHe¶©|óSfkßì宊ìüI?wµóÈî瘅ôâÂ~q»;a´8úäõ„õT«·çØ6>ܱî×Ów+Gf#²{t3fö-»×ßõÙNqÔÓ¡ËÓ&µ§Êw=§õA®vWx®»g víù¸EöÀ{ù~ýGlì”ÓŒ2ÕÇCøøæˆœŽÍdîjFc,^ù43›½7?eö-Í^5¸-"ŽŸãÄ>DZ8ŽòçY~6{I*GAÆŒfמLÄë¿Í?fœ‹9ÖѱbkÊú»/ w+²– ß™ïØ¶×¶‰9rŽžÖv©ÞOÖ»TæìãòÿÎ )Ç-•Â?W·çÝ«í«³/g­©¡ÇC…8Þ½8½\½êvßtÿÏÍòåÉíîÅMk¦ÕYx½´±‘ˆåîÉåi·¥ï»Ÿ•ó3»kÎ|ÛéÚ—ÿJ×¾¯?xõähù/ò~®ºÙ>úóÍ/Ül_jãzüaxŠ®¾[¿žÂ—ïÍF“ÖÌÑÃáÕxmét‘üu8Œ ½’ñúüì3¿_íÈPÛß•q¶þ÷ø_áöþìp»?Çž½Æ—«Y~¶«ðƒslŸñ»O%Թ؜l/Ý.ï¯v÷–œÞ®,¬½Ú“[K§#ó›ÙgóëÓÇ«éƒï;+ïæÙ§Çû›skço÷>BŽ1| ­¼ýUvÙ&‡jÿ~ñû9^åw³ˆ>9Äa~|:î~Äš€¿s[Z€_òb7Xü…å÷ÖDi½®íŽç¹Ã”ûÁžg\‚àÒpšØ¯O¯b$ߊA®?}…/_N”N˜¿L¢n_Úõ|òPÍX -ŽÌUœL?ÁºàeÇæO7Pm/m³'/wu³LŸÀšó×õÃ+èø4ŸÖ{3ížU>üÛѨ]e óhDÇ×WgÿF|ÔâËÍ'Å‚7;»kûÉ—¡öÂëÛ‡g+û§;XÒ¾‰ û¥·Ÿæ­›{ÿ‰å‡´ÜÍžªÜTÞMÛôáåÖBï:™Ù¿Óùàñî弋³XöNSH—øËÿ⦉•Ç?MÙ·-žè‰ßÏÊ}’ÿ»³O?ÓOypÞgnR±üýavûMdcÙ—¿Ÿ® µó ø¨7];ˆŠ‹²GãÛ¨Ôøçý;ÜÑ;ˆó¿¨+÷â Ç÷xÑXûY^®~~û~iy2_]]yñ6ÉŽ}Ò=ž‘h¡Qží‡‹Q.ÒÅ÷“+ùdÙY[s=U£3.)_y·øë-xˉåɲ“Ìoþ| -¼x¶|{´³ |uºtðìÁúܯ‡?6³ã<—3GHvÊžý°> úköÑȳq½Ð2‘·¿Ð°#Ô1*+#WrØÄ‡€·Ô¿Ôÿ<ùYñ–¯¹n)Ö_vâÅü´~¬7>3vüÁÛ«ì\UÍîì¯Ý™}¡Ç¿>Íì}ü=l§sìãU§CÕnfêË“,¯˜[-ðð”å|¨mŽi+Z‡=m݉lº¶6?YÒÆ+ç!][[6øŠÉœÖ6óÌi‹Xç)7¿Õ€S‘MW€½2dûÈEµöÜaBÝvôÃR¾ß`ȺηbŸ¤ßéf›o-¿ÌN7¯&+¤WW³O_; l|œŠÜ{"õÉÜîáÄJ~’»Ûç$÷{¼OŸUÎqÉÊìvÑÀË¢Í|é&nKM¬?Z/°FÔ‰yð¼ž0´-Š¿d‡¹ôú$þåïuò÷`^¦^#‘1Ù,‹ö+<ÃßßÒ. dn‡³ß˜}üãU~Šú~Àª~¨ûïž¡9ù9¿ß>@ÌUàßȯ»×ÈåJøTœ¡Úcm«‚}WЛÒséÌÃ+áhv«Pûp'… - ¥;ð,®2H ÕíïßÝüž¿Õ*ÀæA§éìÀÜm´øÑÕ¢kH¦¾¿A‘ßÕéZãoÚ¢ùU:Ûsòïï…§‰Ã«ºÃÈç¥Ú„¾á.Ãøz[9ÔÏè’Ú³±óñçïÛtééDs;‡žeQW•;Ýë~lÔ•u鄹Ëápúª2cðçv®2|‡¿ÿQ4AÖ_¼?)± sû}ïL|ù7K¨y<Ã]mìõÅm¬{ó[Mô6p>|g{{qg{y× _õkyWûƒ†ñõ者°±ï·w›÷‡þå:Ô®×Äñ¯»ôA?¹¿ÛW™õgãý×¾+¾0)ÃàÆ÷;öû‹[}·â]†qU]¿O–ÝŽÜ­û„#2½þX41<úöëk·‰ããÚ1 È•^w…4èÃWǤÊÞ²®&Ž¿_ßÕ[_Ü't`:þU]à}óäAvy|;쾿<ùþŸ³ëîojÑr§¸Ûü±;ô›ýŽéïßmLôcú­nZ<6b›gÿÓ}ýõ[Ù9º:úqm»Qj¢gœ¯®]œžw¯¶Ž~tû·î8ëÍE7 ŠhÏ>=Ý7ŽÄy!@bšèpÒHbHâú$HˆHºC·æ&ôÿÞ÷˜BU¥ÐXÊIš*Æ[ÓqG^ɘÆBA|ø1D !cAeÊxRbL`D(„!RQˆ -„ iˆ 0z6ŠËRZR ‰’·Oþø2-#š°8‘¡£gnb÷4“M8MÒHÊTKJ«=§ ?Ð&#$‚QÇi¬„H«ÚóHax,&yK•VF+ªds ˜¥O"žH«’¤j¼I -~¸"Äz–äÃZ(ŸÙë瘀Y) ygî¾Ú\ª¢âV -ã—……•Á·Ø\Ê# Õ‚Š!Ä%¢"$á­K)Ô ¨j^‚+#:‹Á/)A9Šü|Hخդ€«²ß­“!È–#ˆ:pXá0”°˜ÄðehÞ`‘w¡˜‚ØÃ…™ÿ”Æ`pip§àÁ &î&QXÀDCPD©4ÑWb‘´ãD7¥„ þ.†É…vh$80 %ŠÀ<ÃrÁi‡KI‰#°0xƒJ0aSÌ"•€ÛäÐ4F¼‰ÀZ`…Àècm°1¸Ö8Áê FÍHØCk¨=’fªiRB`g¬éJá+°(ZKC®é]®ØkÊ"¦®‹¸G`@e!JS=åp9ÆaQB’+¸*Ä T˜U -Rn E¤ÄtH‚ôj%Wb³A“i ­‹rFªj/´·R"9ê„pK`HÆÌœBðMc0§­ -/“D¡º`†`VÁñ;Ö®Ò´*9Õ—J"Rô’ »œF?„>öö†€-¶8ä¨TŸQÁ¦p)‚ö$OpE;°º¤n'Eÿ–)TUÇ ^áÕ¹’à€À4\¡^ÓÐílq4^»üzc‰¹ªI0k×E -é -A ([t,°%A¢W²š—–…I” Ì§Â¯¬.ú@êoë…´UØvòU*`d ´CÀ=ƒ++_^ë°,Añ0ÄÌ!+>„ôlâL¦p±´ây0ˆB32"™sªú/0Nƒ" rb{¥7(¹s‰³0=N{Ü)TÚ! àhú~ªŽãi ß~r?£§ kXGà.ÁÛĘÀ€BŒb¡A &j*ãëhR•IM2è -õX}.Ä&G`c¬×!&½xYˆ’ž.eBLFœêI\‚@Y–éÍ–bÈ;P&?Å -¬"cXPE÷4ãà–}ªM¹7ï„™˜q@‰ ‹$ÆD°§Ö¿bB % úÁ2,i $æo\B1 z…ÿú¨ú ´„ pJõM¨u8a #PÚŒv\À -„á2ôFJU„ 5Ý'AÐ Š€WúÙŠÔ—cåÄ1æ XU„$(A·ÔÓŸšá¸µ *€ŽÛË‰ÅÆak3…ñÁpõš q¨Dsþ …hDŒï‚ô85z7s©0¯´”(j4¼Ü=µ_‚ÊR).>HøyO¹C°‡øÊ”b¤”ãº. Ab©••ÊAB„CL|ÒD°¹„§ÚîPLÃÅ„£% ¸3”Á}L-@U‡äfK€§8U&6%JÏ -‰Ó]ÈeÀ¨ q†@é­î ¸LRSš&‡AD׺ÂRݪ' -]”u 4³A¶Ï­ùán3ÔÏD˜N,Ñö NL -n€áT¥E;¸3 -B}J̳!.cj “ʼnI„2ðФ·³›í -™$Æ2Sj&Ôìf»—ƒ²¯"îLçøN·yOKàƒ°ÛÅà!¶1ãšÁš¹LÒlðA%þ©ŠÊÄlfVr–éAÙé2{ }d@9hÐV0Ú㼕?TYĉ°ø3×­EpíB±Ápq›M -ú´ª±ûPX¥Æf~ݧ;O½œ'³_Ü#¤xÅ,8¤3åq÷Z…G÷8¿„˜áúƒ€ÁÜV²Bf)̾ èp!€­öÉT2¢#ÀìNUj],6-õî5à· e! á\Q¹BUçXç¼zBCÕ5RÑÝÓ¹€jÑéÖd•ƒ¡a‘$$$…´koX-Ü LaõîÊ@S¥â=rÂ<ü1LVDàý´"C«®OéÝUs-¦0`Š^' -™¢.$!XÕD–ö‰4Õ¦{9N«BP‡WûÔkL²èS¦H%ªBÜ,aW¨zÜW9SÒ+„[å!ϼÝ3‹ó´b­‘´öN‡dkl¼µ÷®U@J\Ä,Š:[M)Ę3SÜ#N G‚w–ÀSD‰¹‹¦ÀŸrºƒØ üž* ,HúS - |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ÷jnø ø ø ø ø ø ø ø ø DÔ}"A˜Eøß|bB@Ö!?˜@ê€ ŽL¨öéžÄ0Áé¹Lp„ü`‚ª&-ùÁGÆ&Ó2Lp„¼`n „À]³†À·!?˜à˜“Lp„ü`Buæî©Íõ9Þv'Ø &8B^0AÕò† ŽL(¦e˜àØœLpLÅ &86ç܆ü`‚Ó%?˜àùÁ„êÌÝW›ë=¼"uÀHL 5Àpþƒ ¸ÙpÛ.&`¥°R ˜bÀ„8 ‚ ¸‘Üåê!/˜€— ‚ ¸Ê`‚Þ7 &èÁ‡ÀÜÇ€ (\/˜Pê&¸½ñ€ `‚«˜àêØ&¸såœY÷ƒ ŽL(,q˜àX´Lp–…LpW—LpV©LpÖºLp}†Lp=L a0ÔHL a0¡êÛÿ=`‚ª&¨:`BaÐÀGÈ&¨:`‚ª& …Lpd|`‚ú·‚ ޶ý`‚#ä -- UzÁtA0Áòƒ Îåü`‚#äªzúgÁtØA0϶ƒ`‚Û’Lè¹Ü=µ_˜PÌÍ0Áòƒ ®La0AÖdLa0AÖdLa0AÖdLPa0AÕTLPa0AÕTLPa0AÕTLPa0A…Á(²B`ŠÀÜb‚ è¦`"80œ ˜€NLÀ >&è: &`ѯ € ÏÁÌ©ƒ xÚ0¥ ˜R‡ÀH0„Á'¡ð ®ˆLp/˜P!ÿ0˜ ê€ * &¨0˜ ê€ ª˜ ê€ ª˜ Â`‚ -ƒ U%þc`®ä˜P’é &húc0˜€®'&`É4‹8Lp%¼`BIÈ&¸ãö =ú»ÇùeŸ£{Ç7øÁ„BÈ& Á„Bh˜;µA`‚ãùü`But÷tnúp;*÷ƒ ŽLPa0AÕT0AÕœ=D?˜à -yÁט¼`‚+ä‹óƒ ®YzÁ„ê¼Ý3‹û÷?¡ø ø ÕÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ­>hàƒ>hàƒ>hàƒÿõü²îçÜ4ðAÜ ø ÿê§"ð:`‚#äôÃ-B`‚+äª}ºg1Lpzî!?˜ ê€ EK~0Á‘ñ‚ δøÁWÈ&È`‚ª&È`‚kN^0Áòƒ Õ™»§6×çxÛ`/˜àyÁQLÈ&8B^0Á™?˜àÚœL5ÀUL5À·K^0Áòƒ Õ™»¯6×sxe÷pƒ ®LÐŒ & &C`‚Þš -€ *&¨:`‚ -ƒ * &¨`‚ -ƒ 2 &È:`‚»\½`‚#äd0A†Ád0A…ÁT0A…Ád0A†Ád0Á™u?˜àùÁYLA0A…ÁULPa0A…ÁULPA0Áñ_>0Áuƒ^0Áu§ýÁ„’ãî&ôøö˜ j€ ¢˜Pô0Áòƒ ¢˜ Â`‚“PxÁWÆ&ˆ+˜àhÛ&8B^0ÁÑ’LpUéT0AÕÜËyÁWÈ&Tõôƒ ²˜ ë€ ²˜P½Ü=µ_˜PÌÍ0Áòƒ ®Làa0×xLàa0×xLàa0×xLa0AÔDLa0AÔDLa0AÔDLa0AÔdLa0AÖdLa0AÖdLa0AÖTLPa0AÕTLPa0AÕTLÀ”:&ÄI 0ƒnLp -˜Pñ ¥ÄÄ &TcÈ? &ˆ:`‚ƒ " &ˆ:`‚¨&ˆ:`‚¨&ˆ0˜ Â`BU‰ÿ˜ j€ *&¨0˜ ë€ 2 &È ˜ ë€ ²˜ j€ UýÝãü²Ïѽãü`B!4LPuÀUL(œÚ0Áõ|~0¡:º{:7}¸•ûÁGÈ&ˆ0˜ ê€ ¢˜ ê€ ²˜ ë€ ª˜ j€ ®ÅyÁ„’YzÁ„ê¼Ý3‹û÷?¡ø ø ÕÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ |ÐÀ­>hàƒ>hàƒ>hàƒÿõü²îçÜ4ðAÜ ø JZ¤Ek?¿Y?î¨@õ€³ ïàÑÁ“UI1ÅÖìAêb¥¨tqdhâ¾Eë<Ö!?ˆ 뀎D¨öéžÀÁé¹Dp„ü «"-ùAGÆ"Ó2Dp„ü ¯"ˆ: ¯"8æä!?ˆP¹{js}Ž³Ý ö‚ŽD`u@„¼¡A ‚#äŠi"86çx AÔxÁé’Dp„ü Buæî«ÍõVÉ: ‚ ƒ2 "È ‚ ƒ""ˆ: ‚ƒ" "ˆ ‚ƒ< "ð: ‚»\½ ‚#äx‡AxA„ADA„Ax‡AxÁ™u?ˆàùA^DàAA„AQDaA„AQDaA†AYDAA†A„ªoÿ÷€¬ˆÀꀅA!?ˆÀꀬˆP$~Á‘ñìß -"8ÚöƒŽD(´4DpTéDAÔœËùAGÈ"Tõôƒ¼ˆÀ뀼ˆP½Ü=µ_ˆPÌÍÁòƒ®D aÖhD aÖhD aÖhD`aÕXD`aÕXD`aÕXD`aÕxDàa×xDàa×xDàa×DDaAÔDDaAÔDDaAÖdDp -ˆàŠxA71ñ‚Õòƒ¬ˆÀ  ƒ¬ˆÀꀬˆÀê€, "°0ˆPUâ?"ˆ ‚‚" "ð: ƒ<"ð: ¯"ˆ BU÷8¿ìsTïø?ˆP DAÔr§6Dp<ŸD¨ŽîžÎMŸmGå~Áò, "°: «"°: ¯"ð: ‚¨"ˆ: ‚cq~Á5K/ˆP·{fqƒ@„Ôƒ@ê'¡cx΋'„€ûó 0Lºð1 -|1nspΨÄwD .Q¡§¡ô؆ìAϯ4¸¯AÊó$„ÿŸL²(þ(ä‡&)¶'xÚ‚ -pD8Ó;»TÚJSŸéê^«|hP)Ud(+2R/E÷Rú„7Ø›{fónlø‹†¿¨·ä 5µ6n¬bä:ÓÿáÊàé¡vÿ)n=`ÚžêÀYV%„NeaiÊô„™ ~Fyn'([j)Á­—²þN¹K`FFävÂ+k“ãqMYeÉ @J ¾Ò#Qñ ”ˆ¸26)Í–¬ˆR³ËƒyŽÍÕÆrK‰”Ú¡âÏ4Ú–©^2ôªP"* -|—¯æ™·{ìR§!ujy'†÷ñY¨†`.a½j;)d`Ÿ¢·J˪ä²â0±×ƒS$7<Ý.µ¤ÀѱŠP"ô^£Ó'¨èPœ -ª—!Òã0 bˆ«—ëqø[_¬:ºXôþIÒÌR=õ¸CÂtEÄp7ضTM@HTeª©‡T®ÕÞî³wj˜®†éj˜®†éj˜®†éºcþâ\¦ÝÞ7Oíl±Ø†’x€§˜1ä"4±7úgæœ@ñ슘³tm‚Yn -ÙZªa!ÔSíàŽïM¬ÇŒ{ò¨@«B‚«Êå¤Ù©v… $ZJ«rŽ'ÒØ„£Hïvâv'MíA‚;à’DÆèæÓˆeÖ,~rdf,ѱ •&¾WAb•˜ -ܦ‚ÉåÒøÝlgúiŸOdþS)w¾âë ÑmØÍgÎD„Ú ‘àè ž…•zMƒÏˆÈ± “‰¬ŒŠ€Óԗ†q› -OaªÚ—í¨Â«0VÑ1î2–Dôé}i®(ä"ÚB=‰¦Ê°#è×~`-ëÁêµDd)ÊB},ZP)½ë<¢hÕX_÷ÑÔTƒiÞLSò3‚Á¯ß[¶1<¡Á)„ —:„P••’·èôðS„MtjA{„p‡¹"Ôãhq[@ Q‚*á<í³‹¥ÀȪ¬^²?#„„ ÉÝy´(*B0Š - ô›Ñõt뻆 ½Ÿ-R]÷T ¨Z¤ËJ´@-€5ÑÅ¥yV+„„Þ÷„ø-‡´ŒÓb…nìk!Èn-@ٳʺ%¼½;†¹¶ž>1ø®Öä'ˆS2L^++ÌÂ40Sà -•è^aͦzZ¸€ -Á2Ì,ª}Jˆq-a=ý©i1«¥`–íFGá5„f–qµ@gG§ì󡍯³¸dÌnøàÜ%FOȹV„0YÒz -^®Á¶l»Á¶l»Á¶l»Á¶l{0¶ õ,Ö` ïa b½n~h:×®Ö#“(Xú¨D¸ÉÁÛÛí‹PŸFhogö±°ÑÌip#Æk3½Åa U%ÆP³éŠgÊ&Ðæscîvs)Ö¬CIæÇ,·!HÀŠLÀÞKÄ6Ø!7î6  fF_*É šÓ0;e¾2®wØp› Ñ?#’årX¼ã 2§Þ#1ñ!³u°&¦½6É—`šÆ†PdwÐ)ÖZ}Y~‘QpozaáÒÖ"™G!D—«õXlCT÷v¦3Ê¡=êSôþ4Ò! -ª])jj;d>iI$†×ä™×Ödº¹T.$2B—ef¬l;Äîüâ£ôa{>™¨ T ·Yƒ5 -Hr²hŽþDOTv!žÔ$T9¢° &›µep@Y.½`u¦-ÇMà¾fEÚD"r×Õ+Ä 0îõ8jyñ°Sú£\"‹%Ñc§Úãý( Ã9eWœˆJ¿¡Ò« -As¦öèó!ÝîÓ’~ˆÎ^Xß»ÂuóJ…]¤°pÍâRF×`¾±±ŽÌñÀ&^“—ö´¯L†›eÊܘPœ»A3›á“¼&Dв¯šsJÍ…eÒEä`ôv¾m¥èŠ‚.ÚÄ4µK»â jäĬbÔƒvqŒ*kÎV5uo`¾†5rL´j -÷Î'®–’9÷º¦8aÆœƒvñ§Ìнh=Û¦·•„7³§ÝÙœíÄ8‘%rÂÔ= %–¹Y ‹@;_¶äK4x¡Ÿ`n½nýà´gGù‰ 6öåF -nUOÆ &Ò,Oeª„5ö,N€7F(«²Ò•3n±3‹JAœqYDô¤)àóí¥r¡Ô¸ŒÁg€!ëÜ»œmhÒžì>ÅßÔÖnÐ`nl7ülÍÂ9OìTáM \ ÇM†–eDû¥fiqÛN¢m´\ì#‚6°TÇÞ›{›{›{›{›{ïâùn4Ú>± -)SÐêÒ•agL‘ÞÔºŒ¡ 2w¸%=Búl¯,ÄH¥ú 5æHz…¸¹°êí7Ç-‡Íc»ÏVÞÜéÙÜéYcýâï­X6°jãP’p<‰/Éô,M‚ÛIÐoó;!X´²"„gi“)áÒ Ü}I%>yšUw¢*yZŠ ÉJ²b¨EÓ´z9YJ ¹áAðª”ËœrÃQA¯CP¶*Ôãx |6zùüöº0¦ô]5®Põþ#¼T•¯æ™¹{æêܼ¹8Ô^؇+§›Gÿí^MOµÛ;G_ºo®ŽÎλWC_®þ§Û:º¸Àö»?á“Ö—«îõÍåU·uýõò?ø|%o·W¶W‡þ£÷H• endstream endobj 21 0 obj [/ICCBased 27 0 R] endobj 7 0 obj [6 0 R 5 0 R] endobj 40 0 obj <> endobj xref 0 41 0000000000 65535 f -0000000016 00000 n -0000000156 00000 n -0000038280 00000 n -0000000000 00000 f -0000053108 00000 n -0000053178 00000 n -0000378446 00000 n -0000038331 00000 n -0000038793 00000 n -0000041265 00000 n -0000053839 00000 n -0000050299 00000 n -0000050186 00000 n -0000053480 00000 n -0000053603 00000 n -0000053716 00000 n -0000042272 00000 n -0000044889 00000 n -0000047506 00000 n -0000041327 00000 n -0000378411 00000 n -0000041711 00000 n -0000041759 00000 n -0000053045 00000 n -0000052982 00000 n -0000050123 00000 n -0000050334 00000 n -0000053364 00000 n -0000053395 00000 n -0000053248 00000 n -0000053279 00000 n -0000053913 00000 n -0000054175 00000 n -0000055286 00000 n -0000067808 00000 n -0000133396 00000 n -0000198984 00000 n -0000264572 00000 n -0000330160 00000 n -0000378475 00000 n -trailer <<0C9D12E6EE994682A6EAD56912419B86>]>> startxref 378666 %%EOF \ No newline at end of file diff --git a/resources/identity.svg b/resources/identity.svg deleted file mode 100644 index b363971cef..0000000000 --- a/resources/identity.svg +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/jestPreprocessor.js b/resources/jestPreprocessor.js deleted file mode 100644 index 5ea6aa5036..0000000000 --- a/resources/jestPreprocessor.js +++ /dev/null @@ -1,71 +0,0 @@ -var typescript = require('typescript'); -const makeSynchronous = require('make-synchronous'); - -const TYPESCRIPT_OPTIONS = { - noEmitOnError: true, - target: typescript.ScriptTarget.ES2015, - module: typescript.ModuleKind.CommonJS, - strictNullChecks: true, - sourceMap: true, - inlineSourceMap: true, -}; - -function transpileTypeScript(src, path) { - return typescript.transpile(src, TYPESCRIPT_OPTIONS, path, []); -} - -function transpileJavaScript(src, path) { - // Need to make this sync by calling `makeSynchronous` - // while https://github.com/facebook/jest/issues/9504 is not resolved - const fn = makeSynchronous(async (path) => { - const rollup = require('rollup'); - const buble = require('@rollup/plugin-buble'); - const commonjs = require('@rollup/plugin-commonjs'); - const json = require('@rollup/plugin-json'); - const typescript = require('@rollup/plugin-typescript'); - - // same input options as in rollup-config.js - const inputOptions = { - input: path, - onwarn: () => {}, - plugins: [commonjs(), json(), typescript(), buble()], - }; - - const bundle = await rollup.rollup(inputOptions); - - const { output } = await bundle.generate({ - file: path, - format: 'cjs', - sourcemap: true, - }); - - await bundle.close(); - - const { code, map } = output[0]; - - if (!code) { - throw new Error( - 'Unable to get code from rollup output in jestPreprocessor. Did rollup version changed ?' - ); - } - - return { code, map }; - }); - - return fn(path); -} - -module.exports = { - process(src, path) { - if (path.endsWith('.ts') || path.endsWith('.tsx')) { - return { code: transpileTypeScript(src, path) }; - } - - return transpileJavaScript(src, path); - }, - - getCacheKey() { - // ignore cache, as there is a conflict between rollup compile and jest preprocessor. - return Date.now().toString(); - }, -}; diff --git a/resources/jestResolver.js b/resources/jestResolver.js deleted file mode 100644 index a379bc4421..0000000000 --- a/resources/jestResolver.js +++ /dev/null @@ -1,17 +0,0 @@ -const path = require('path'); -const pkg = require('../package.json'); - -module.exports = (request, options) => { - if (request === 'immutable') { - if (process.env.CI) { - // In CI environment, test the real built file to be sure that the build is not broken - return path.resolve(options.rootDir, pkg.main); - } - - // In development mode, we want sourcemaps, live reload, etc., so point to the src/ directory - return `${options.rootDir}/src/Immutable.js`; - } - - // Call the defaultResolver, if we want to load non-immutable - return options.defaultResolver(request, options); -}; diff --git a/resources/prepare-dist.sh b/resources/prepare-dist.sh deleted file mode 100755 index d8d86a0573..0000000000 --- a/resources/prepare-dist.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -e - -# This script prepares an npm directory with files safe to publish to npm or the -# npm git branch: -# -# "immutable": "git://github.com/immutable-js/immutable-js.git#npm" -# - -# Create empty npm directory -rm -rf npm -mkdir -p npm - -# Copy over necessary files -cp -r dist npm/ -cp README.md npm/ -cp LICENSE npm/ - -# Ensure a vanilla package.json before deploying so other tools do not interpret -# The built output as requiring any further transformation. -node -e "var package = require('./package.json'); \ - package = Object.fromEntries(Object.entries(package).filter(([key]) => package.publishKeys.includes(key))); \ - require('fs').writeFileSync('./npm/package.json', JSON.stringify(package, null, 2));" - -# Retain marginal support for bower on the npm branch -cp npm/package.json npm/bower.json diff --git a/resources/react-global.js b/resources/react-global.js deleted file mode 100644 index 45b0fd0871..0000000000 --- a/resources/react-global.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = global.React; diff --git a/resources/rollup-config.mjs b/resources/rollup-config.mjs deleted file mode 100644 index 6963235c5d..0000000000 --- a/resources/rollup-config.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import path from 'path'; -import buble from '@rollup/plugin-buble'; -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import terser from '@rollup/plugin-terser'; -// TODO replace @rollup/plugin-typescript with babel after babel migration -import typescript from '@rollup/plugin-typescript'; -import copyright from './copyright.mjs'; - -const SRC_DIR = path.resolve('src'); -const DIST_DIR = path.resolve('dist'); - -export default [ - { - input: path.join(SRC_DIR, 'Immutable.js'), - plugins: [commonjs(), json(), typescript(), buble()], - output: [ - // umd build - { - banner: copyright, - name: 'Immutable', - exports: 'named', - file: path.join(DIST_DIR, 'immutable.js'), - format: 'umd', - sourcemap: false, - }, - // minified build for browsers - { - banner: copyright, - name: 'Immutable', - exports: 'named', - file: path.join(DIST_DIR, 'immutable.min.js'), - format: 'umd', - sourcemap: false, - plugins: [terser()], - }, - // es build for bundlers and node - { - banner: copyright, - name: 'Immutable', - file: path.join(DIST_DIR, 'immutable.es.js'), - format: 'es', - sourcemap: false, - }, - ], - }, -]; diff --git a/src/Collection.js b/src/Collection.js deleted file mode 100644 index 650ff654ff..0000000000 --- a/src/Collection.js +++ /dev/null @@ -1,37 +0,0 @@ -import { Seq, KeyedSeq, IndexedSeq, SetSeq } from './Seq'; -import { isCollection } from './predicates/isCollection'; -import { isKeyed } from './predicates/isKeyed'; -import { isIndexed } from './predicates/isIndexed'; -import { isAssociative } from './predicates/isAssociative'; - -export class Collection { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return isCollection(value) ? value : Seq(value); - } -} - -export class KeyedCollection extends Collection { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return isKeyed(value) ? value : KeyedSeq(value); - } -} - -export class IndexedCollection extends Collection { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return isIndexed(value) ? value : IndexedSeq(value); - } -} - -export class SetCollection extends Collection { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return isCollection(value) && !isAssociative(value) ? value : SetSeq(value); - } -} - -Collection.Keyed = KeyedCollection; -Collection.Indexed = IndexedCollection; -Collection.Set = SetCollection; diff --git a/src/CollectionImpl.js b/src/CollectionImpl.js deleted file mode 100644 index befb3dadc2..0000000000 --- a/src/CollectionImpl.js +++ /dev/null @@ -1,789 +0,0 @@ -import { - Collection, - KeyedCollection, - IndexedCollection, - SetCollection, -} from './Collection'; -import { IS_COLLECTION_SYMBOL } from './predicates/isCollection'; -import { isKeyed, IS_KEYED_SYMBOL } from './predicates/isKeyed'; -import { isIndexed, IS_INDEXED_SYMBOL } from './predicates/isIndexed'; -import { isOrdered, IS_ORDERED_SYMBOL } from './predicates/isOrdered'; -import { is } from './is'; -import { - NOT_SET, - ensureSize, - wrapIndex, - returnTrue, - resolveBegin, -} from './TrieUtils'; -import { hash } from './Hash'; -import { imul, smi } from './Math'; -import { - Iterator, - ITERATOR_SYMBOL, - ITERATE_KEYS, - ITERATE_VALUES, - ITERATE_ENTRIES, -} from './Iterator'; - -import arrCopy from './utils/arrCopy'; -import assertNotInfinite from './utils/assertNotInfinite'; -import deepEqual from './utils/deepEqual'; -import mixin from './utils/mixin'; -import quoteString from './utils/quoteString'; - -import { toJS } from './toJS'; -import { Map } from './Map'; -import { OrderedMap } from './OrderedMap'; -import { List } from './List'; -import { Set } from './Set'; -import { OrderedSet } from './OrderedSet'; -import { Stack } from './Stack'; -import { Range } from './Range'; -import { KeyedSeq, IndexedSeq, SetSeq, ArraySeq } from './Seq'; -import { - reify, - ToKeyedSequence, - ToIndexedSequence, - ToSetSequence, - FromEntriesSequence, - flipFactory, - mapFactory, - reverseFactory, - filterFactory, - countByFactory, - groupByFactory, - sliceFactory, - takeWhileFactory, - skipWhileFactory, - concatFactory, - flattenFactory, - flatMapFactory, - interposeFactory, - sortFactory, - maxFactory, - zipWithFactory, - partitionFactory, -} from './Operations'; -import { getIn } from './methods/getIn'; -import { hasIn } from './methods/hasIn'; -import { toObject } from './methods/toObject'; - -export { Collection, CollectionPrototype, IndexedCollectionPrototype }; - -Collection.Iterator = Iterator; - -mixin(Collection, { - // ### Conversion to other types - - toArray() { - assertNotInfinite(this.size); - const array = new Array(this.size || 0); - const useTuples = isKeyed(this); - let i = 0; - this.__iterate((v, k) => { - // Keyed collections produce an array of tuples. - array[i++] = useTuples ? [k, v] : v; - }); - return array; - }, - - toIndexedSeq() { - return new ToIndexedSequence(this); - }, - - toJS() { - return toJS(this); - }, - - toKeyedSeq() { - return new ToKeyedSequence(this, true); - }, - - toMap() { - // Use Late Binding here to solve the circular dependency. - return Map(this.toKeyedSeq()); - }, - - toObject: toObject, - - toOrderedMap() { - // Use Late Binding here to solve the circular dependency. - return OrderedMap(this.toKeyedSeq()); - }, - - toOrderedSet() { - // Use Late Binding here to solve the circular dependency. - return OrderedSet(isKeyed(this) ? this.valueSeq() : this); - }, - - toSet() { - // Use Late Binding here to solve the circular dependency. - return Set(isKeyed(this) ? this.valueSeq() : this); - }, - - toSetSeq() { - return new ToSetSequence(this); - }, - - toSeq() { - return isIndexed(this) - ? this.toIndexedSeq() - : isKeyed(this) - ? this.toKeyedSeq() - : this.toSetSeq(); - }, - - toStack() { - // Use Late Binding here to solve the circular dependency. - return Stack(isKeyed(this) ? this.valueSeq() : this); - }, - - toList() { - // Use Late Binding here to solve the circular dependency. - return List(isKeyed(this) ? this.valueSeq() : this); - }, - - // ### Common JavaScript methods and properties - - toString() { - return '[Collection]'; - }, - - __toString(head, tail) { - if (this.size === 0) { - return head + tail; - } - return ( - head + - ' ' + - this.toSeq().map(this.__toStringMapper).join(', ') + - ' ' + - tail - ); - }, - - // ### ES6 Collection methods (ES6 Array and Map) - - concat(...values) { - return reify(this, concatFactory(this, values)); - }, - - includes(searchValue) { - return this.some((value) => is(value, searchValue)); - }, - - entries() { - return this.__iterator(ITERATE_ENTRIES); - }, - - every(predicate, context) { - assertNotInfinite(this.size); - let returnValue = true; - this.__iterate((v, k, c) => { - if (!predicate.call(context, v, k, c)) { - returnValue = false; - return false; - } - }); - return returnValue; - }, - - filter(predicate, context) { - return reify(this, filterFactory(this, predicate, context, true)); - }, - - partition(predicate, context) { - return partitionFactory(this, predicate, context); - }, - - find(predicate, context, notSetValue) { - const entry = this.findEntry(predicate, context); - return entry ? entry[1] : notSetValue; - }, - - forEach(sideEffect, context) { - assertNotInfinite(this.size); - return this.__iterate(context ? sideEffect.bind(context) : sideEffect); - }, - - join(separator) { - assertNotInfinite(this.size); - separator = separator !== undefined ? '' + separator : ','; - let joined = ''; - let isFirst = true; - this.__iterate((v) => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - isFirst ? (isFirst = false) : (joined += separator); - joined += v !== null && v !== undefined ? v.toString() : ''; - }); - return joined; - }, - - keys() { - return this.__iterator(ITERATE_KEYS); - }, - - map(mapper, context) { - return reify(this, mapFactory(this, mapper, context)); - }, - - reduce(reducer, initialReduction, context) { - return reduce( - this, - reducer, - initialReduction, - context, - arguments.length < 2, - false - ); - }, - - reduceRight(reducer, initialReduction, context) { - return reduce( - this, - reducer, - initialReduction, - context, - arguments.length < 2, - true - ); - }, - - reverse() { - return reify(this, reverseFactory(this, true)); - }, - - slice(begin, end) { - return reify(this, sliceFactory(this, begin, end, true)); - }, - - some(predicate, context) { - assertNotInfinite(this.size); - let returnValue = false; - this.__iterate((v, k, c) => { - if (predicate.call(context, v, k, c)) { - returnValue = true; - return false; - } - }); - return returnValue; - }, - - sort(comparator) { - return reify(this, sortFactory(this, comparator)); - }, - - values() { - return this.__iterator(ITERATE_VALUES); - }, - - // ### More sequential methods - - butLast() { - return this.slice(0, -1); - }, - - isEmpty() { - return this.size !== undefined ? this.size === 0 : !this.some(() => true); - }, - - count(predicate, context) { - return ensureSize( - predicate ? this.toSeq().filter(predicate, context) : this - ); - }, - - countBy(grouper, context) { - return countByFactory(this, grouper, context); - }, - - equals(other) { - return deepEqual(this, other); - }, - - entrySeq() { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const collection = this; - if (collection._cache) { - // We cache as an entries array, so we can just return the cache! - return new ArraySeq(collection._cache); - } - const entriesSequence = collection.toSeq().map(entryMapper).toIndexedSeq(); - entriesSequence.fromEntrySeq = () => collection.toSeq(); - return entriesSequence; - }, - - filterNot(predicate, context) { - return this.filter(not(predicate), context); - }, - - findEntry(predicate, context, notSetValue) { - let found = notSetValue; - this.__iterate((v, k, c) => { - if (predicate.call(context, v, k, c)) { - found = [k, v]; - return false; - } - }); - return found; - }, - - findKey(predicate, context) { - const entry = this.findEntry(predicate, context); - return entry && entry[0]; - }, - - findLast(predicate, context, notSetValue) { - return this.toKeyedSeq().reverse().find(predicate, context, notSetValue); - }, - - findLastEntry(predicate, context, notSetValue) { - return this.toKeyedSeq() - .reverse() - .findEntry(predicate, context, notSetValue); - }, - - findLastKey(predicate, context) { - return this.toKeyedSeq().reverse().findKey(predicate, context); - }, - - first(notSetValue) { - return this.find(returnTrue, null, notSetValue); - }, - - flatMap(mapper, context) { - return reify(this, flatMapFactory(this, mapper, context)); - }, - - flatten(depth) { - return reify(this, flattenFactory(this, depth, true)); - }, - - fromEntrySeq() { - return new FromEntriesSequence(this); - }, - - get(searchKey, notSetValue) { - return this.find((_, key) => is(key, searchKey), undefined, notSetValue); - }, - - getIn: getIn, - - groupBy(grouper, context) { - return groupByFactory(this, grouper, context); - }, - - has(searchKey) { - return this.get(searchKey, NOT_SET) !== NOT_SET; - }, - - hasIn: hasIn, - - isSubset(iter) { - iter = typeof iter.includes === 'function' ? iter : Collection(iter); - return this.every((value) => iter.includes(value)); - }, - - isSuperset(iter) { - iter = typeof iter.isSubset === 'function' ? iter : Collection(iter); - return iter.isSubset(this); - }, - - keyOf(searchValue) { - return this.findKey((value) => is(value, searchValue)); - }, - - keySeq() { - return this.toSeq().map(keyMapper).toIndexedSeq(); - }, - - last(notSetValue) { - return this.toSeq().reverse().first(notSetValue); - }, - - lastKeyOf(searchValue) { - return this.toKeyedSeq().reverse().keyOf(searchValue); - }, - - max(comparator) { - return maxFactory(this, comparator); - }, - - maxBy(mapper, comparator) { - return maxFactory(this, comparator, mapper); - }, - - min(comparator) { - return maxFactory( - this, - comparator ? neg(comparator) : defaultNegComparator - ); - }, - - minBy(mapper, comparator) { - return maxFactory( - this, - comparator ? neg(comparator) : defaultNegComparator, - mapper - ); - }, - - rest() { - return this.slice(1); - }, - - skip(amount) { - return amount === 0 ? this : this.slice(Math.max(0, amount)); - }, - - skipLast(amount) { - return amount === 0 ? this : this.slice(0, -Math.max(0, amount)); - }, - - skipWhile(predicate, context) { - return reify(this, skipWhileFactory(this, predicate, context, true)); - }, - - skipUntil(predicate, context) { - return this.skipWhile(not(predicate), context); - }, - - sortBy(mapper, comparator) { - return reify(this, sortFactory(this, comparator, mapper)); - }, - - take(amount) { - return this.slice(0, Math.max(0, amount)); - }, - - takeLast(amount) { - return this.slice(-Math.max(0, amount)); - }, - - takeWhile(predicate, context) { - return reify(this, takeWhileFactory(this, predicate, context)); - }, - - takeUntil(predicate, context) { - return this.takeWhile(not(predicate), context); - }, - - update(fn) { - return fn(this); - }, - - valueSeq() { - return this.toIndexedSeq(); - }, - - // ### Hashable Object - - hashCode() { - return this.__hash || (this.__hash = hashCollection(this)); - }, - - // ### Internal - - // abstract __iterate(fn, reverse) - - // abstract __iterator(type, reverse) -}); - -const CollectionPrototype = Collection.prototype; -CollectionPrototype[IS_COLLECTION_SYMBOL] = true; -CollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.values; -CollectionPrototype.toJSON = CollectionPrototype.toArray; -CollectionPrototype.__toStringMapper = quoteString; -CollectionPrototype.inspect = CollectionPrototype.toSource = function () { - return this.toString(); -}; -CollectionPrototype.chain = CollectionPrototype.flatMap; -CollectionPrototype.contains = CollectionPrototype.includes; - -mixin(KeyedCollection, { - // ### More sequential methods - - flip() { - return reify(this, flipFactory(this)); - }, - - mapEntries(mapper, context) { - let iterations = 0; - return reify( - this, - this.toSeq() - .map((v, k) => mapper.call(context, [k, v], iterations++, this)) - .fromEntrySeq() - ); - }, - - mapKeys(mapper, context) { - return reify( - this, - this.toSeq() - .flip() - .map((k, v) => mapper.call(context, k, v, this)) - .flip() - ); - }, -}); - -const KeyedCollectionPrototype = KeyedCollection.prototype; -KeyedCollectionPrototype[IS_KEYED_SYMBOL] = true; -KeyedCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.entries; -KeyedCollectionPrototype.toJSON = toObject; -KeyedCollectionPrototype.__toStringMapper = (v, k) => - quoteString(k) + ': ' + quoteString(v); - -mixin(IndexedCollection, { - // ### Conversion to other types - - toKeyedSeq() { - return new ToKeyedSequence(this, false); - }, - - // ### ES6 Collection methods (ES6 Array and Map) - - filter(predicate, context) { - return reify(this, filterFactory(this, predicate, context, false)); - }, - - findIndex(predicate, context) { - const entry = this.findEntry(predicate, context); - return entry ? entry[0] : -1; - }, - - indexOf(searchValue) { - const key = this.keyOf(searchValue); - return key === undefined ? -1 : key; - }, - - lastIndexOf(searchValue) { - const key = this.lastKeyOf(searchValue); - return key === undefined ? -1 : key; - }, - - reverse() { - return reify(this, reverseFactory(this, false)); - }, - - slice(begin, end) { - return reify(this, sliceFactory(this, begin, end, false)); - }, - - splice(index, removeNum /*, ...values*/) { - const numArgs = arguments.length; - removeNum = Math.max(removeNum || 0, 0); - if (numArgs === 0 || (numArgs === 2 && !removeNum)) { - return this; - } - // If index is negative, it should resolve relative to the size of the - // collection. However size may be expensive to compute if not cached, so - // only call count() if the number is in fact negative. - index = resolveBegin(index, index < 0 ? this.count() : this.size); - const spliced = this.slice(0, index); - return reify( - this, - numArgs === 1 - ? spliced - : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum)) - ); - }, - - // ### More collection methods - - findLastIndex(predicate, context) { - const entry = this.findLastEntry(predicate, context); - return entry ? entry[0] : -1; - }, - - first(notSetValue) { - return this.get(0, notSetValue); - }, - - flatten(depth) { - return reify(this, flattenFactory(this, depth, false)); - }, - - get(index, notSetValue) { - index = wrapIndex(this, index); - return index < 0 || - this.size === Infinity || - (this.size !== undefined && index > this.size) - ? notSetValue - : this.find((_, key) => key === index, undefined, notSetValue); - }, - - has(index) { - index = wrapIndex(this, index); - return ( - index >= 0 && - (this.size !== undefined - ? this.size === Infinity || index < this.size - : this.indexOf(index) !== -1) - ); - }, - - interpose(separator) { - return reify(this, interposeFactory(this, separator)); - }, - - interleave(/*...collections*/) { - const collections = [this].concat(arrCopy(arguments)); - const zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, collections); - const interleaved = zipped.flatten(true); - if (zipped.size) { - interleaved.size = zipped.size * collections.length; - } - return reify(this, interleaved); - }, - - keySeq() { - return Range(0, this.size); - }, - - last(notSetValue) { - return this.get(-1, notSetValue); - }, - - skipWhile(predicate, context) { - return reify(this, skipWhileFactory(this, predicate, context, false)); - }, - - zip(/*, ...collections */) { - const collections = [this].concat(arrCopy(arguments)); - return reify(this, zipWithFactory(this, defaultZipper, collections)); - }, - - zipAll(/*, ...collections */) { - const collections = [this].concat(arrCopy(arguments)); - return reify(this, zipWithFactory(this, defaultZipper, collections, true)); - }, - - zipWith(zipper /*, ...collections */) { - const collections = arrCopy(arguments); - collections[0] = this; - return reify(this, zipWithFactory(this, zipper, collections)); - }, -}); - -const IndexedCollectionPrototype = IndexedCollection.prototype; -IndexedCollectionPrototype[IS_INDEXED_SYMBOL] = true; -IndexedCollectionPrototype[IS_ORDERED_SYMBOL] = true; - -mixin(SetCollection, { - // ### ES6 Collection methods (ES6 Array and Map) - - get(value, notSetValue) { - return this.has(value) ? value : notSetValue; - }, - - includes(value) { - return this.has(value); - }, - - // ### More sequential methods - - keySeq() { - return this.valueSeq(); - }, -}); - -const SetCollectionPrototype = SetCollection.prototype; -SetCollectionPrototype.has = CollectionPrototype.includes; -SetCollectionPrototype.contains = SetCollectionPrototype.includes; -SetCollectionPrototype.keys = SetCollectionPrototype.values; - -// Mixin subclasses - -mixin(KeyedSeq, KeyedCollectionPrototype); -mixin(IndexedSeq, IndexedCollectionPrototype); -mixin(SetSeq, SetCollectionPrototype); - -// #pragma Helper functions - -function reduce(collection, reducer, reduction, context, useFirst, reverse) { - assertNotInfinite(collection.size); - collection.__iterate((v, k, c) => { - if (useFirst) { - useFirst = false; - reduction = v; - } else { - reduction = reducer.call(context, reduction, v, k, c); - } - }, reverse); - return reduction; -} - -function keyMapper(v, k) { - return k; -} - -function entryMapper(v, k) { - return [k, v]; -} - -function not(predicate) { - return function () { - return !predicate.apply(this, arguments); - }; -} - -function neg(predicate) { - return function () { - return -predicate.apply(this, arguments); - }; -} - -function defaultZipper() { - return arrCopy(arguments); -} - -function defaultNegComparator(a, b) { - return a < b ? 1 : a > b ? -1 : 0; -} - -function hashCollection(collection) { - if (collection.size === Infinity) { - return 0; - } - const ordered = isOrdered(collection); - const keyed = isKeyed(collection); - let h = ordered ? 1 : 0; - - collection.__iterate( - keyed - ? ordered - ? (v, k) => { - h = (31 * h + hashMerge(hash(v), hash(k))) | 0; - } - : (v, k) => { - h = (h + hashMerge(hash(v), hash(k))) | 0; - } - : ordered - ? (v) => { - h = (31 * h + hash(v)) | 0; - } - : (v) => { - h = (h + hash(v)) | 0; - } - ); - - return murmurHashOfSize(collection.size, h); -} - -function murmurHashOfSize(size, h) { - h = imul(h, 0xcc9e2d51); - h = imul((h << 15) | (h >>> -15), 0x1b873593); - h = imul((h << 13) | (h >>> -13), 5); - h = ((h + 0xe6546b64) | 0) ^ size; - h = imul(h ^ (h >>> 16), 0x85ebca6b); - h = imul(h ^ (h >>> 13), 0xc2b2ae35); - h = smi(h ^ (h >>> 16)); - return h; -} - -function hashMerge(a, b) { - return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; // int -} diff --git a/src/Hash.js b/src/Hash.js deleted file mode 100644 index d1c65f7978..0000000000 --- a/src/Hash.js +++ /dev/null @@ -1,237 +0,0 @@ -import { smi } from './Math'; - -const defaultValueOf = Object.prototype.valueOf; - -export function hash(o) { - // eslint-disable-next-line eqeqeq - if (o == null) { - return hashNullish(o); - } - - if (typeof o.hashCode === 'function') { - // Drop any high bits from accidentally long hash codes. - return smi(o.hashCode(o)); - } - - const v = valueOf(o); - - // eslint-disable-next-line eqeqeq - if (v == null) { - return hashNullish(v); - } - - switch (typeof v) { - case 'boolean': - // The hash values for built-in constants are a 1 value for each 5-byte - // shift region expect for the first, which encodes the value. This - // reduces the odds of a hash collision for these common values. - return v ? 0x42108421 : 0x42108420; - case 'number': - return hashNumber(v); - case 'string': - return v.length > STRING_HASH_CACHE_MIN_STRLEN - ? cachedHashString(v) - : hashString(v); - case 'object': - case 'function': - return hashJSObj(v); - case 'symbol': - return hashSymbol(v); - default: - if (typeof v.toString === 'function') { - return hashString(v.toString()); - } - throw new Error('Value type ' + typeof v + ' cannot be hashed.'); - } -} - -function hashNullish(nullish) { - return nullish === null ? 0x42108422 : /* undefined */ 0x42108423; -} - -// Compress arbitrarily large numbers into smi hashes. -function hashNumber(n) { - if (n !== n || n === Infinity) { - return 0; - } - let hash = n | 0; - if (hash !== n) { - hash ^= n * 0xffffffff; - } - while (n > 0xffffffff) { - n /= 0xffffffff; - hash ^= n; - } - return smi(hash); -} - -function cachedHashString(string) { - let hashed = stringHashCache[string]; - if (hashed === undefined) { - hashed = hashString(string); - if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) { - STRING_HASH_CACHE_SIZE = 0; - stringHashCache = {}; - } - STRING_HASH_CACHE_SIZE++; - stringHashCache[string] = hashed; - } - return hashed; -} - -// http://jsperf.com/hashing-strings -function hashString(string) { - // This is the hash from JVM - // The hash code for a string is computed as - // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1], - // where s[i] is the ith character of the string and n is the length of - // the string. We "mod" the result to make it between 0 (inclusive) and 2^31 - // (exclusive) by dropping high bits. - let hashed = 0; - for (let ii = 0; ii < string.length; ii++) { - hashed = (31 * hashed + string.charCodeAt(ii)) | 0; - } - return smi(hashed); -} - -function hashSymbol(sym) { - let hashed = symbolMap[sym]; - if (hashed !== undefined) { - return hashed; - } - - hashed = nextHash(); - - symbolMap[sym] = hashed; - - return hashed; -} - -function hashJSObj(obj) { - let hashed; - if (usingWeakMap) { - hashed = weakMap.get(obj); - if (hashed !== undefined) { - return hashed; - } - } - - hashed = obj[UID_HASH_KEY]; - if (hashed !== undefined) { - return hashed; - } - - if (!canDefineProperty) { - hashed = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY]; - if (hashed !== undefined) { - return hashed; - } - - hashed = getIENodeHash(obj); - if (hashed !== undefined) { - return hashed; - } - } - - hashed = nextHash(); - - if (usingWeakMap) { - weakMap.set(obj, hashed); - } else if (isExtensible !== undefined && isExtensible(obj) === false) { - throw new Error('Non-extensible objects are not allowed as keys.'); - } else if (canDefineProperty) { - Object.defineProperty(obj, UID_HASH_KEY, { - enumerable: false, - configurable: false, - writable: false, - value: hashed, - }); - } else if ( - obj.propertyIsEnumerable !== undefined && - obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable - ) { - // Since we can't define a non-enumerable property on the object - // we'll hijack one of the less-used non-enumerable properties to - // save our hash on it. Since this is a function it will not show up in - // `JSON.stringify` which is what we want. - obj.propertyIsEnumerable = function () { - return this.constructor.prototype.propertyIsEnumerable.apply( - this, - arguments - ); - }; - obj.propertyIsEnumerable[UID_HASH_KEY] = hashed; - } else if (obj.nodeType !== undefined) { - // At this point we couldn't get the IE `uniqueID` to use as a hash - // and we couldn't use a non-enumerable property to exploit the - // dontEnum bug so we simply add the `UID_HASH_KEY` on the node - // itself. - obj[UID_HASH_KEY] = hashed; - } else { - throw new Error('Unable to set a non-enumerable property on object.'); - } - - return hashed; -} - -// Get references to ES5 object methods. -const isExtensible = Object.isExtensible; - -// True if Object.defineProperty works as expected. IE8 fails this test. -const canDefineProperty = (function () { - try { - Object.defineProperty({}, '@', {}); - return true; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (e) { - return false; - } -})(); - -// IE has a `uniqueID` property on DOM nodes. We can construct the hash from it -// and avoid memory leaks from the IE cloneNode bug. -function getIENodeHash(node) { - if (node && node.nodeType > 0) { - switch (node.nodeType) { - case 1: // Element - return node.uniqueID; - case 9: // Document - return node.documentElement && node.documentElement.uniqueID; - } - } -} - -function valueOf(obj) { - return obj.valueOf !== defaultValueOf && typeof obj.valueOf === 'function' - ? obj.valueOf(obj) - : obj; -} - -function nextHash() { - const nextHash = ++_objHashUID; - if (_objHashUID & 0x40000000) { - _objHashUID = 0; - } - return nextHash; -} - -// If possible, use a WeakMap. -const usingWeakMap = typeof WeakMap === 'function'; -let weakMap; -if (usingWeakMap) { - weakMap = new WeakMap(); -} - -const symbolMap = Object.create(null); - -let _objHashUID = 0; - -let UID_HASH_KEY = '__immutablehash__'; -if (typeof Symbol === 'function') { - UID_HASH_KEY = Symbol(UID_HASH_KEY); -} - -const STRING_HASH_CACHE_MIN_STRLEN = 16; -const STRING_HASH_CACHE_MAX_SIZE = 255; -let STRING_HASH_CACHE_SIZE = 0; -let stringHashCache = {}; diff --git a/src/Immutable.js b/src/Immutable.js deleted file mode 100644 index 98945f762e..0000000000 --- a/src/Immutable.js +++ /dev/null @@ -1,103 +0,0 @@ -import { Seq } from './Seq'; -import { OrderedMap } from './OrderedMap'; -import { List } from './List'; -import { Map } from './Map'; -import { Stack } from './Stack'; -import { OrderedSet } from './OrderedSet'; -import { PairSorting } from './PairSorting'; -import { Set } from './Set'; -import { Record } from './Record'; -import { Range } from './Range'; -import { Repeat } from './Repeat'; -import { is } from './is'; -import { fromJS } from './fromJS'; - -import isPlainObject from './utils/isPlainObj'; - -// Functional predicates -import { isImmutable } from './predicates/isImmutable'; -import { isCollection } from './predicates/isCollection'; -import { isKeyed } from './predicates/isKeyed'; -import { isIndexed } from './predicates/isIndexed'; -import { isAssociative } from './predicates/isAssociative'; -import { isOrdered } from './predicates/isOrdered'; -import { isValueObject } from './predicates/isValueObject'; -import { isSeq } from './predicates/isSeq'; -import { isList } from './predicates/isList'; -import { isMap } from './predicates/isMap'; -import { isOrderedMap } from './predicates/isOrderedMap'; -import { isStack } from './predicates/isStack'; -import { isSet } from './predicates/isSet'; -import { isOrderedSet } from './predicates/isOrderedSet'; -import { isRecord } from './predicates/isRecord'; - -import { Collection } from './CollectionImpl'; -import { hash } from './Hash'; - -// Functional read/write API -import { get } from './functional/get'; -import { getIn } from './functional/getIn'; -import { has } from './functional/has'; -import { hasIn } from './functional/hasIn'; -import { merge, mergeDeep, mergeWith, mergeDeepWith } from './functional/merge'; -import { remove } from './functional/remove'; -import { removeIn } from './functional/removeIn'; -import { set } from './functional/set'; -import { setIn } from './functional/setIn'; -import { update } from './functional/update'; -import { updateIn } from './functional/updateIn'; - -import { version } from '../package.json'; - -// Note: Iterable is deprecated -const Iterable = Collection; - -export { - version, - Collection, - Iterable, - Seq, - Map, - OrderedMap, - List, - Stack, - Set, - OrderedSet, - PairSorting, - Record, - Range, - Repeat, - is, - fromJS, - hash, - isImmutable, - isCollection, - isKeyed, - isIndexed, - isAssociative, - isOrdered, - isPlainObject, - isValueObject, - isSeq, - isList, - isMap, - isOrderedMap, - isStack, - isSet, - isOrderedSet, - isRecord, - get, - getIn, - has, - hasIn, - merge, - mergeDeep, - mergeWith, - mergeDeepWith, - remove, - removeIn, - set, - setIn, - update, - updateIn, -}; diff --git a/src/Iterator.js b/src/Iterator.js deleted file mode 100644 index 1954a3661c..0000000000 --- a/src/Iterator.js +++ /dev/null @@ -1,84 +0,0 @@ -export const ITERATE_KEYS = 0; -export const ITERATE_VALUES = 1; -export const ITERATE_ENTRIES = 2; - -const REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; -const FAUX_ITERATOR_SYMBOL = '@@iterator'; - -export const ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL; - -export class Iterator { - constructor(next) { - this.next = next; - } - - toString() { - return '[Iterator]'; - } -} - -Iterator.KEYS = ITERATE_KEYS; -Iterator.VALUES = ITERATE_VALUES; -Iterator.ENTRIES = ITERATE_ENTRIES; - -Iterator.prototype.inspect = Iterator.prototype.toSource = function () { - return this.toString(); -}; -Iterator.prototype[ITERATOR_SYMBOL] = function () { - return this; -}; - -export function iteratorValue(type, k, v, iteratorResult) { - const value = - type === ITERATE_KEYS ? k : type === ITERATE_VALUES ? v : [k, v]; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - iteratorResult - ? (iteratorResult.value = value) - : (iteratorResult = { - value: value, - done: false, - }); - return iteratorResult; -} - -export function iteratorDone() { - return { value: undefined, done: true }; -} - -export function hasIterator(maybeIterable) { - if (Array.isArray(maybeIterable)) { - // IE11 trick as it does not support `Symbol.iterator` - return true; - } - - return !!getIteratorFn(maybeIterable); -} - -export function isIterator(maybeIterator) { - return maybeIterator && typeof maybeIterator.next === 'function'; -} - -export function getIterator(iterable) { - const iteratorFn = getIteratorFn(iterable); - return iteratorFn && iteratorFn.call(iterable); -} - -function getIteratorFn(iterable) { - const iteratorFn = - iterable && - ((REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) || - iterable[FAUX_ITERATOR_SYMBOL]); - if (typeof iteratorFn === 'function') { - return iteratorFn; - } -} - -export function isEntriesIterable(maybeIterable) { - const iteratorFn = getIteratorFn(maybeIterable); - return iteratorFn && iteratorFn === maybeIterable.entries; -} - -export function isKeysIterable(maybeIterable) { - const iteratorFn = getIteratorFn(maybeIterable); - return iteratorFn && iteratorFn === maybeIterable.keys; -} diff --git a/src/List.js b/src/List.js deleted file mode 100644 index 966b9e1b2c..0000000000 --- a/src/List.js +++ /dev/null @@ -1,700 +0,0 @@ -import { - DELETE, - SHIFT, - SIZE, - MASK, - OwnerID, - MakeRef, - SetRef, - wrapIndex, - wholeSlice, - resolveBegin, - resolveEnd, -} from './TrieUtils'; -import { IS_LIST_SYMBOL, isList } from './predicates/isList'; -import { IndexedCollection } from './Collection'; -import { hasIterator, Iterator, iteratorValue, iteratorDone } from './Iterator'; -import { setIn } from './methods/setIn'; -import { deleteIn } from './methods/deleteIn'; -import { update } from './methods/update'; -import { updateIn } from './methods/updateIn'; -import { mergeIn } from './methods/mergeIn'; -import { mergeDeepIn } from './methods/mergeDeepIn'; -import { withMutations } from './methods/withMutations'; -import { asMutable } from './methods/asMutable'; -import { asImmutable } from './methods/asImmutable'; -import { wasAltered } from './methods/wasAltered'; -import assertNotInfinite from './utils/assertNotInfinite'; - -export class List extends IndexedCollection { - // @pragma Construction - - constructor(value) { - const empty = emptyList(); - if (value === undefined || value === null) { - // eslint-disable-next-line no-constructor-return - return empty; - } - if (isList(value)) { - // eslint-disable-next-line no-constructor-return - return value; - } - const iter = IndexedCollection(value); - const size = iter.size; - if (size === 0) { - // eslint-disable-next-line no-constructor-return - return empty; - } - assertNotInfinite(size); - if (size > 0 && size < SIZE) { - // eslint-disable-next-line no-constructor-return - return makeList(0, size, SHIFT, null, new VNode(iter.toArray())); - } - // eslint-disable-next-line no-constructor-return - return empty.withMutations((list) => { - list.setSize(size); - iter.forEach((v, i) => list.set(i, v)); - }); - } - - static of(/*...values*/) { - return this(arguments); - } - - toString() { - return this.__toString('List [', ']'); - } - - // @pragma Access - - get(index, notSetValue) { - index = wrapIndex(this, index); - if (index >= 0 && index < this.size) { - index += this._origin; - const node = listNodeFor(this, index); - return node && node.array[index & MASK]; - } - return notSetValue; - } - - // @pragma Modification - - set(index, value) { - return updateList(this, index, value); - } - - remove(index) { - return !this.has(index) - ? this - : index === 0 - ? this.shift() - : index === this.size - 1 - ? this.pop() - : this.splice(index, 1); - } - - insert(index, value) { - return this.splice(index, 0, value); - } - - clear() { - if (this.size === 0) { - return this; - } - if (this.__ownerID) { - this.size = this._origin = this._capacity = 0; - this._level = SHIFT; - this._root = this._tail = this.__hash = undefined; - this.__altered = true; - return this; - } - return emptyList(); - } - - push(/*...values*/) { - const values = arguments; - const oldSize = this.size; - return this.withMutations((list) => { - setListBounds(list, 0, oldSize + values.length); - for (let ii = 0; ii < values.length; ii++) { - list.set(oldSize + ii, values[ii]); - } - }); - } - - pop() { - return setListBounds(this, 0, -1); - } - - unshift(/*...values*/) { - const values = arguments; - return this.withMutations((list) => { - setListBounds(list, -values.length); - for (let ii = 0; ii < values.length; ii++) { - list.set(ii, values[ii]); - } - }); - } - - shift() { - return setListBounds(this, 1); - } - - shuffle(random = Math.random) { - return this.withMutations((mutable) => { - // implementation of the Fisher-Yates shuffle: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle - let current = mutable.size; - let destination; - let tmp; - - while (current) { - destination = Math.floor(random() * current--); - - tmp = mutable.get(destination); - mutable.set(destination, mutable.get(current)); - mutable.set(current, tmp); - } - }); - } - - // @pragma Composition - - concat(/*...collections*/) { - const seqs = []; - for (let i = 0; i < arguments.length; i++) { - const argument = arguments[i]; - const seq = IndexedCollection( - typeof argument !== 'string' && hasIterator(argument) - ? argument - : [argument] - ); - if (seq.size !== 0) { - seqs.push(seq); - } - } - if (seqs.length === 0) { - return this; - } - if (this.size === 0 && !this.__ownerID && seqs.length === 1) { - return this.constructor(seqs[0]); - } - return this.withMutations((list) => { - seqs.forEach((seq) => seq.forEach((value) => list.push(value))); - }); - } - - setSize(size) { - return setListBounds(this, 0, size); - } - - map(mapper, context) { - return this.withMutations((list) => { - for (let i = 0; i < this.size; i++) { - list.set(i, mapper.call(context, list.get(i), i, this)); - } - }); - } - - // @pragma Iteration - - slice(begin, end) { - const size = this.size; - if (wholeSlice(begin, end, size)) { - return this; - } - return setListBounds( - this, - resolveBegin(begin, size), - resolveEnd(end, size) - ); - } - - __iterator(type, reverse) { - let index = reverse ? this.size : 0; - const values = iterateList(this, reverse); - return new Iterator(() => { - const value = values(); - return value === DONE - ? iteratorDone() - : iteratorValue(type, reverse ? --index : index++, value); - }); - } - - __iterate(fn, reverse) { - let index = reverse ? this.size : 0; - const values = iterateList(this, reverse); - let value; - while ((value = values()) !== DONE) { - if (fn(value, reverse ? --index : index++, this) === false) { - break; - } - } - return index; - } - - __ensureOwner(ownerID) { - if (ownerID === this.__ownerID) { - return this; - } - if (!ownerID) { - if (this.size === 0) { - return emptyList(); - } - this.__ownerID = ownerID; - this.__altered = false; - return this; - } - return makeList( - this._origin, - this._capacity, - this._level, - this._root, - this._tail, - ownerID, - this.__hash - ); - } -} - -List.isList = isList; - -const ListPrototype = List.prototype; -ListPrototype[IS_LIST_SYMBOL] = true; -ListPrototype[DELETE] = ListPrototype.remove; -ListPrototype.merge = ListPrototype.concat; -ListPrototype.setIn = setIn; -ListPrototype.deleteIn = ListPrototype.removeIn = deleteIn; -ListPrototype.update = update; -ListPrototype.updateIn = updateIn; -ListPrototype.mergeIn = mergeIn; -ListPrototype.mergeDeepIn = mergeDeepIn; -ListPrototype.withMutations = withMutations; -ListPrototype.wasAltered = wasAltered; -ListPrototype.asImmutable = asImmutable; -ListPrototype['@@transducer/init'] = ListPrototype.asMutable = asMutable; -ListPrototype['@@transducer/step'] = function (result, arr) { - return result.push(arr); -}; -ListPrototype['@@transducer/result'] = function (obj) { - return obj.asImmutable(); -}; - -class VNode { - constructor(array, ownerID) { - this.array = array; - this.ownerID = ownerID; - } - - // TODO: seems like these methods are very similar - - removeBefore(ownerID, level, index) { - if ( - (index & ((1 << (level + SHIFT)) - 1)) === 0 || - this.array.length === 0 - ) { - return this; - } - const originIndex = (index >>> level) & MASK; - if (originIndex >= this.array.length) { - return new VNode([], ownerID); - } - const removingFirst = originIndex === 0; - let newChild; - if (level > 0) { - const oldChild = this.array[originIndex]; - newChild = - oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index); - if (newChild === oldChild && removingFirst) { - return this; - } - } - if (removingFirst && !newChild) { - return this; - } - const editable = editableVNode(this, ownerID); - if (!removingFirst) { - for (let ii = 0; ii < originIndex; ii++) { - editable.array[ii] = undefined; - } - } - if (newChild) { - editable.array[originIndex] = newChild; - } - return editable; - } - - removeAfter(ownerID, level, index) { - if ( - index === (level ? 1 << (level + SHIFT) : SIZE) || - this.array.length === 0 - ) { - return this; - } - const sizeIndex = ((index - 1) >>> level) & MASK; - if (sizeIndex >= this.array.length) { - return this; - } - - let newChild; - if (level > 0) { - const oldChild = this.array[sizeIndex]; - newChild = - oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index); - if (newChild === oldChild && sizeIndex === this.array.length - 1) { - return this; - } - } - - const editable = editableVNode(this, ownerID); - editable.array.splice(sizeIndex + 1); - if (newChild) { - editable.array[sizeIndex] = newChild; - } - return editable; - } -} - -const DONE = {}; - -function iterateList(list, reverse) { - const left = list._origin; - const right = list._capacity; - const tailPos = getTailOffset(right); - const tail = list._tail; - - return iterateNodeOrLeaf(list._root, list._level, 0); - - function iterateNodeOrLeaf(node, level, offset) { - return level === 0 - ? iterateLeaf(node, offset) - : iterateNode(node, level, offset); - } - - function iterateLeaf(node, offset) { - const array = offset === tailPos ? tail && tail.array : node && node.array; - let from = offset > left ? 0 : left - offset; - let to = right - offset; - if (to > SIZE) { - to = SIZE; - } - return () => { - if (from === to) { - return DONE; - } - const idx = reverse ? --to : from++; - return array && array[idx]; - }; - } - - function iterateNode(node, level, offset) { - let values; - const array = node && node.array; - let from = offset > left ? 0 : (left - offset) >> level; - let to = ((right - offset) >> level) + 1; - if (to > SIZE) { - to = SIZE; - } - return () => { - while (true) { - if (values) { - const value = values(); - if (value !== DONE) { - return value; - } - values = null; - } - if (from === to) { - return DONE; - } - const idx = reverse ? --to : from++; - values = iterateNodeOrLeaf( - array && array[idx], - level - SHIFT, - offset + (idx << level) - ); - } - }; - } -} - -function makeList(origin, capacity, level, root, tail, ownerID, hash) { - const list = Object.create(ListPrototype); - list.size = capacity - origin; - list._origin = origin; - list._capacity = capacity; - list._level = level; - list._root = root; - list._tail = tail; - list.__ownerID = ownerID; - list.__hash = hash; - list.__altered = false; - return list; -} - -export function emptyList() { - return makeList(0, 0, SHIFT); -} - -function updateList(list, index, value) { - index = wrapIndex(list, index); - - if (index !== index) { - return list; - } - - if (index >= list.size || index < 0) { - return list.withMutations((list) => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - index < 0 - ? setListBounds(list, index).set(0, value) - : setListBounds(list, 0, index + 1).set(index, value); - }); - } - - index += list._origin; - - let newTail = list._tail; - let newRoot = list._root; - const didAlter = MakeRef(); - if (index >= getTailOffset(list._capacity)) { - newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter); - } else { - newRoot = updateVNode( - newRoot, - list.__ownerID, - list._level, - index, - value, - didAlter - ); - } - - if (!didAlter.value) { - return list; - } - - if (list.__ownerID) { - list._root = newRoot; - list._tail = newTail; - list.__hash = undefined; - list.__altered = true; - return list; - } - return makeList(list._origin, list._capacity, list._level, newRoot, newTail); -} - -function updateVNode(node, ownerID, level, index, value, didAlter) { - const idx = (index >>> level) & MASK; - const nodeHas = node && idx < node.array.length; - if (!nodeHas && value === undefined) { - return node; - } - - let newNode; - - if (level > 0) { - const lowerNode = node && node.array[idx]; - const newLowerNode = updateVNode( - lowerNode, - ownerID, - level - SHIFT, - index, - value, - didAlter - ); - if (newLowerNode === lowerNode) { - return node; - } - newNode = editableVNode(node, ownerID); - newNode.array[idx] = newLowerNode; - return newNode; - } - - if (nodeHas && node.array[idx] === value) { - return node; - } - - if (didAlter) { - SetRef(didAlter); - } - - newNode = editableVNode(node, ownerID); - if (value === undefined && idx === newNode.array.length - 1) { - newNode.array.pop(); - } else { - newNode.array[idx] = value; - } - return newNode; -} - -function editableVNode(node, ownerID) { - if (ownerID && node && ownerID === node.ownerID) { - return node; - } - return new VNode(node ? node.array.slice() : [], ownerID); -} - -function listNodeFor(list, rawIndex) { - if (rawIndex >= getTailOffset(list._capacity)) { - return list._tail; - } - if (rawIndex < 1 << (list._level + SHIFT)) { - let node = list._root; - let level = list._level; - while (node && level > 0) { - node = node.array[(rawIndex >>> level) & MASK]; - level -= SHIFT; - } - return node; - } -} - -function setListBounds(list, begin, end) { - // Sanitize begin & end using this shorthand for ToInt32(argument) - // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 - if (begin !== undefined) { - begin |= 0; - } - if (end !== undefined) { - end |= 0; - } - const owner = list.__ownerID || new OwnerID(); - let oldOrigin = list._origin; - let oldCapacity = list._capacity; - let newOrigin = oldOrigin + begin; - let newCapacity = - end === undefined - ? oldCapacity - : end < 0 - ? oldCapacity + end - : oldOrigin + end; - if (newOrigin === oldOrigin && newCapacity === oldCapacity) { - return list; - } - - // If it's going to end after it starts, it's empty. - if (newOrigin >= newCapacity) { - return list.clear(); - } - - let newLevel = list._level; - let newRoot = list._root; - - // New origin might need creating a higher root. - let offsetShift = 0; - while (newOrigin + offsetShift < 0) { - newRoot = new VNode( - newRoot && newRoot.array.length ? [undefined, newRoot] : [], - owner - ); - newLevel += SHIFT; - offsetShift += 1 << newLevel; - } - if (offsetShift) { - newOrigin += offsetShift; - oldOrigin += offsetShift; - newCapacity += offsetShift; - oldCapacity += offsetShift; - } - - const oldTailOffset = getTailOffset(oldCapacity); - const newTailOffset = getTailOffset(newCapacity); - - // New size might need creating a higher root. - while (newTailOffset >= 1 << (newLevel + SHIFT)) { - newRoot = new VNode( - newRoot && newRoot.array.length ? [newRoot] : [], - owner - ); - newLevel += SHIFT; - } - - // Locate or create the new tail. - const oldTail = list._tail; - let newTail = - newTailOffset < oldTailOffset - ? listNodeFor(list, newCapacity - 1) - : newTailOffset > oldTailOffset - ? new VNode([], owner) - : oldTail; - - // Merge Tail into tree. - if ( - oldTail && - newTailOffset > oldTailOffset && - newOrigin < oldCapacity && - oldTail.array.length - ) { - newRoot = editableVNode(newRoot, owner); - let node = newRoot; - for (let level = newLevel; level > SHIFT; level -= SHIFT) { - const idx = (oldTailOffset >>> level) & MASK; - node = node.array[idx] = editableVNode(node.array[idx], owner); - } - node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail; - } - - // If the size has been reduced, there's a chance the tail needs to be trimmed. - if (newCapacity < oldCapacity) { - newTail = newTail && newTail.removeAfter(owner, 0, newCapacity); - } - - // If the new origin is within the tail, then we do not need a root. - if (newOrigin >= newTailOffset) { - newOrigin -= newTailOffset; - newCapacity -= newTailOffset; - newLevel = SHIFT; - newRoot = null; - newTail = newTail && newTail.removeBefore(owner, 0, newOrigin); - - // Otherwise, if the root has been trimmed, garbage collect. - } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) { - offsetShift = 0; - - // Identify the new top root node of the subtree of the old root. - while (newRoot) { - const beginIndex = (newOrigin >>> newLevel) & MASK; - if ((beginIndex !== newTailOffset >>> newLevel) & MASK) { - break; - } - if (beginIndex) { - offsetShift += (1 << newLevel) * beginIndex; - } - newLevel -= SHIFT; - newRoot = newRoot.array[beginIndex]; - } - - // Trim the new sides of the new root. - if (newRoot && newOrigin > oldOrigin) { - newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift); - } - if (newRoot && newTailOffset < oldTailOffset) { - newRoot = newRoot.removeAfter( - owner, - newLevel, - newTailOffset - offsetShift - ); - } - if (offsetShift) { - newOrigin -= offsetShift; - newCapacity -= offsetShift; - } - } - - if (list.__ownerID) { - list.size = newCapacity - newOrigin; - list._origin = newOrigin; - list._capacity = newCapacity; - list._level = newLevel; - list._root = newRoot; - list._tail = newTail; - list.__hash = undefined; - list.__altered = true; - return list; - } - return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail); -} - -function getTailOffset(size) { - return size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT; -} diff --git a/src/Map.js b/src/Map.js deleted file mode 100644 index 672e70cac4..0000000000 --- a/src/Map.js +++ /dev/null @@ -1,805 +0,0 @@ -import { is } from './is'; -import { Collection, KeyedCollection } from './Collection'; -import { IS_MAP_SYMBOL, isMap } from './predicates/isMap'; -import { isOrdered } from './predicates/isOrdered'; -import { - DELETE, - SHIFT, - SIZE, - MASK, - NOT_SET, - OwnerID, - MakeRef, - SetRef, -} from './TrieUtils'; -import { hash } from './Hash'; -import { Iterator, iteratorValue, iteratorDone } from './Iterator'; -import { sortFactory } from './Operations'; -import arrCopy from './utils/arrCopy'; -import assertNotInfinite from './utils/assertNotInfinite'; -import { setIn } from './methods/setIn'; -import { deleteIn } from './methods/deleteIn'; -import { update } from './methods/update'; -import { updateIn } from './methods/updateIn'; -import { merge, mergeWith } from './methods/merge'; -import { mergeDeep, mergeDeepWith } from './methods/mergeDeep'; -import { mergeIn } from './methods/mergeIn'; -import { mergeDeepIn } from './methods/mergeDeepIn'; -import { withMutations } from './methods/withMutations'; -import { asMutable } from './methods/asMutable'; -import { asImmutable } from './methods/asImmutable'; -import { wasAltered } from './methods/wasAltered'; - -import { OrderedMap } from './OrderedMap'; - -export class Map extends KeyedCollection { - // @pragma Construction - - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptyMap() - : isMap(value) && !isOrdered(value) - ? value - : emptyMap().withMutations((map) => { - const iter = KeyedCollection(value); - assertNotInfinite(iter.size); - iter.forEach((v, k) => map.set(k, v)); - }); - } - - toString() { - return this.__toString('Map {', '}'); - } - - // @pragma Access - - get(k, notSetValue) { - return this._root - ? this._root.get(0, undefined, k, notSetValue) - : notSetValue; - } - - // @pragma Modification - - set(k, v) { - return updateMap(this, k, v); - } - - remove(k) { - return updateMap(this, k, NOT_SET); - } - - deleteAll(keys) { - const collection = Collection(keys); - - if (collection.size === 0) { - return this; - } - - return this.withMutations((map) => { - collection.forEach((key) => map.remove(key)); - }); - } - - clear() { - if (this.size === 0) { - return this; - } - if (this.__ownerID) { - this.size = 0; - this._root = null; - this.__hash = undefined; - this.__altered = true; - return this; - } - return emptyMap(); - } - - // @pragma Composition - - sort(comparator) { - // Late binding - return OrderedMap(sortFactory(this, comparator)); - } - - sortBy(mapper, comparator) { - // Late binding - return OrderedMap(sortFactory(this, comparator, mapper)); - } - - map(mapper, context) { - return this.withMutations((map) => { - map.forEach((value, key) => { - map.set(key, mapper.call(context, value, key, this)); - }); - }); - } - - // @pragma Mutability - - __iterator(type, reverse) { - return new MapIterator(this, type, reverse); - } - - __iterate(fn, reverse) { - let iterations = 0; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - this._root && - this._root.iterate((entry) => { - iterations++; - return fn(entry[1], entry[0], this); - }, reverse); - return iterations; - } - - __ensureOwner(ownerID) { - if (ownerID === this.__ownerID) { - return this; - } - if (!ownerID) { - if (this.size === 0) { - return emptyMap(); - } - this.__ownerID = ownerID; - this.__altered = false; - return this; - } - return makeMap(this.size, this._root, ownerID, this.__hash); - } -} - -Map.isMap = isMap; - -const MapPrototype = Map.prototype; -MapPrototype[IS_MAP_SYMBOL] = true; -MapPrototype[DELETE] = MapPrototype.remove; -MapPrototype.removeAll = MapPrototype.deleteAll; -MapPrototype.setIn = setIn; -MapPrototype.removeIn = MapPrototype.deleteIn = deleteIn; -MapPrototype.update = update; -MapPrototype.updateIn = updateIn; -MapPrototype.merge = MapPrototype.concat = merge; -MapPrototype.mergeWith = mergeWith; -MapPrototype.mergeDeep = mergeDeep; -MapPrototype.mergeDeepWith = mergeDeepWith; -MapPrototype.mergeIn = mergeIn; -MapPrototype.mergeDeepIn = mergeDeepIn; -MapPrototype.withMutations = withMutations; -MapPrototype.wasAltered = wasAltered; -MapPrototype.asImmutable = asImmutable; -MapPrototype['@@transducer/init'] = MapPrototype.asMutable = asMutable; -MapPrototype['@@transducer/step'] = function (result, arr) { - return result.set(arr[0], arr[1]); -}; -MapPrototype['@@transducer/result'] = function (obj) { - return obj.asImmutable(); -}; - -// #pragma Trie Nodes - -class ArrayMapNode { - constructor(ownerID, entries) { - this.ownerID = ownerID; - this.entries = entries; - } - - get(shift, keyHash, key, notSetValue) { - const entries = this.entries; - for (let ii = 0, len = entries.length; ii < len; ii++) { - if (is(key, entries[ii][0])) { - return entries[ii][1]; - } - } - return notSetValue; - } - - update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { - const removed = value === NOT_SET; - - const entries = this.entries; - let idx = 0; - const len = entries.length; - for (; idx < len; idx++) { - if (is(key, entries[idx][0])) { - break; - } - } - const exists = idx < len; - - if (exists ? entries[idx][1] === value : removed) { - return this; - } - - SetRef(didAlter); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - (removed || !exists) && SetRef(didChangeSize); - - if (removed && entries.length === 1) { - return; // undefined - } - - if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) { - return createNodes(ownerID, entries, key, value); - } - - const isEditable = ownerID && ownerID === this.ownerID; - const newEntries = isEditable ? entries : arrCopy(entries); - - if (exists) { - if (removed) { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - idx === len - 1 - ? newEntries.pop() - : (newEntries[idx] = newEntries.pop()); - } else { - newEntries[idx] = [key, value]; - } - } else { - newEntries.push([key, value]); - } - - if (isEditable) { - this.entries = newEntries; - return this; - } - - return new ArrayMapNode(ownerID, newEntries); - } -} - -class BitmapIndexedNode { - constructor(ownerID, bitmap, nodes) { - this.ownerID = ownerID; - this.bitmap = bitmap; - this.nodes = nodes; - } - - get(shift, keyHash, key, notSetValue) { - if (keyHash === undefined) { - keyHash = hash(key); - } - const bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK); - const bitmap = this.bitmap; - return (bitmap & bit) === 0 - ? notSetValue - : this.nodes[popCount(bitmap & (bit - 1))].get( - shift + SHIFT, - keyHash, - key, - notSetValue - ); - } - - update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { - if (keyHash === undefined) { - keyHash = hash(key); - } - const keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; - const bit = 1 << keyHashFrag; - const bitmap = this.bitmap; - const exists = (bitmap & bit) !== 0; - - if (!exists && value === NOT_SET) { - return this; - } - - const idx = popCount(bitmap & (bit - 1)); - const nodes = this.nodes; - const node = exists ? nodes[idx] : undefined; - const newNode = updateNode( - node, - ownerID, - shift + SHIFT, - keyHash, - key, - value, - didChangeSize, - didAlter - ); - - if (newNode === node) { - return this; - } - - if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) { - return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode); - } - - if ( - exists && - !newNode && - nodes.length === 2 && - isLeafNode(nodes[idx ^ 1]) - ) { - return nodes[idx ^ 1]; - } - - if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) { - return newNode; - } - - const isEditable = ownerID && ownerID === this.ownerID; - const newBitmap = exists ? (newNode ? bitmap : bitmap ^ bit) : bitmap | bit; - const newNodes = exists - ? newNode - ? setAt(nodes, idx, newNode, isEditable) - : spliceOut(nodes, idx, isEditable) - : spliceIn(nodes, idx, newNode, isEditable); - - if (isEditable) { - this.bitmap = newBitmap; - this.nodes = newNodes; - return this; - } - - return new BitmapIndexedNode(ownerID, newBitmap, newNodes); - } -} - -class HashArrayMapNode { - constructor(ownerID, count, nodes) { - this.ownerID = ownerID; - this.count = count; - this.nodes = nodes; - } - - get(shift, keyHash, key, notSetValue) { - if (keyHash === undefined) { - keyHash = hash(key); - } - const idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; - const node = this.nodes[idx]; - return node - ? node.get(shift + SHIFT, keyHash, key, notSetValue) - : notSetValue; - } - - update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { - if (keyHash === undefined) { - keyHash = hash(key); - } - const idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; - const removed = value === NOT_SET; - const nodes = this.nodes; - const node = nodes[idx]; - - if (removed && !node) { - return this; - } - - const newNode = updateNode( - node, - ownerID, - shift + SHIFT, - keyHash, - key, - value, - didChangeSize, - didAlter - ); - if (newNode === node) { - return this; - } - - let newCount = this.count; - if (!node) { - newCount++; - } else if (!newNode) { - newCount--; - if (newCount < MIN_HASH_ARRAY_MAP_SIZE) { - return packNodes(ownerID, nodes, newCount, idx); - } - } - - const isEditable = ownerID && ownerID === this.ownerID; - const newNodes = setAt(nodes, idx, newNode, isEditable); - - if (isEditable) { - this.count = newCount; - this.nodes = newNodes; - return this; - } - - return new HashArrayMapNode(ownerID, newCount, newNodes); - } -} - -class HashCollisionNode { - constructor(ownerID, keyHash, entries) { - this.ownerID = ownerID; - this.keyHash = keyHash; - this.entries = entries; - } - - get(shift, keyHash, key, notSetValue) { - const entries = this.entries; - for (let ii = 0, len = entries.length; ii < len; ii++) { - if (is(key, entries[ii][0])) { - return entries[ii][1]; - } - } - return notSetValue; - } - - update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { - if (keyHash === undefined) { - keyHash = hash(key); - } - - const removed = value === NOT_SET; - - if (keyHash !== this.keyHash) { - if (removed) { - return this; - } - SetRef(didAlter); - SetRef(didChangeSize); - return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]); - } - - const entries = this.entries; - let idx = 0; - const len = entries.length; - for (; idx < len; idx++) { - if (is(key, entries[idx][0])) { - break; - } - } - const exists = idx < len; - - if (exists ? entries[idx][1] === value : removed) { - return this; - } - - SetRef(didAlter); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - (removed || !exists) && SetRef(didChangeSize); - - if (removed && len === 2) { - return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]); - } - - const isEditable = ownerID && ownerID === this.ownerID; - const newEntries = isEditable ? entries : arrCopy(entries); - - if (exists) { - if (removed) { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - idx === len - 1 - ? newEntries.pop() - : (newEntries[idx] = newEntries.pop()); - } else { - newEntries[idx] = [key, value]; - } - } else { - newEntries.push([key, value]); - } - - if (isEditable) { - this.entries = newEntries; - return this; - } - - return new HashCollisionNode(ownerID, this.keyHash, newEntries); - } -} - -class ValueNode { - constructor(ownerID, keyHash, entry) { - this.ownerID = ownerID; - this.keyHash = keyHash; - this.entry = entry; - } - - get(shift, keyHash, key, notSetValue) { - return is(key, this.entry[0]) ? this.entry[1] : notSetValue; - } - - update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { - const removed = value === NOT_SET; - const keyMatch = is(key, this.entry[0]); - if (keyMatch ? value === this.entry[1] : removed) { - return this; - } - - SetRef(didAlter); - - if (removed) { - SetRef(didChangeSize); - return; // undefined - } - - if (keyMatch) { - if (ownerID && ownerID === this.ownerID) { - this.entry[1] = value; - return this; - } - return new ValueNode(ownerID, this.keyHash, [key, value]); - } - - SetRef(didChangeSize); - return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]); - } -} - -// #pragma Iterators - -ArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = - function (fn, reverse) { - const entries = this.entries; - for (let ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) { - if (fn(entries[reverse ? maxIndex - ii : ii]) === false) { - return false; - } - } - }; - -BitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = - function (fn, reverse) { - const nodes = this.nodes; - for (let ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) { - const node = nodes[reverse ? maxIndex - ii : ii]; - if (node && node.iterate(fn, reverse) === false) { - return false; - } - } - }; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -ValueNode.prototype.iterate = function (fn, reverse) { - return fn(this.entry); -}; - -class MapIterator extends Iterator { - constructor(map, type, reverse) { - this._type = type; - this._reverse = reverse; - this._stack = map._root && mapIteratorFrame(map._root); - } - - next() { - const type = this._type; - let stack = this._stack; - while (stack) { - const node = stack.node; - const index = stack.index++; - let maxIndex; - if (node.entry) { - if (index === 0) { - return mapIteratorValue(type, node.entry); - } - } else if (node.entries) { - maxIndex = node.entries.length - 1; - if (index <= maxIndex) { - return mapIteratorValue( - type, - node.entries[this._reverse ? maxIndex - index : index] - ); - } - } else { - maxIndex = node.nodes.length - 1; - if (index <= maxIndex) { - const subNode = node.nodes[this._reverse ? maxIndex - index : index]; - if (subNode) { - if (subNode.entry) { - return mapIteratorValue(type, subNode.entry); - } - stack = this._stack = mapIteratorFrame(subNode, stack); - } - continue; - } - } - stack = this._stack = this._stack.__prev; - } - return iteratorDone(); - } -} - -function mapIteratorValue(type, entry) { - return iteratorValue(type, entry[0], entry[1]); -} - -function mapIteratorFrame(node, prev) { - return { - node: node, - index: 0, - __prev: prev, - }; -} - -function makeMap(size, root, ownerID, hash) { - const map = Object.create(MapPrototype); - map.size = size; - map._root = root; - map.__ownerID = ownerID; - map.__hash = hash; - map.__altered = false; - return map; -} - -let EMPTY_MAP; -export function emptyMap() { - return EMPTY_MAP || (EMPTY_MAP = makeMap(0)); -} - -function updateMap(map, k, v) { - let newRoot; - let newSize; - if (!map._root) { - if (v === NOT_SET) { - return map; - } - newSize = 1; - newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]); - } else { - const didChangeSize = MakeRef(); - const didAlter = MakeRef(); - newRoot = updateNode( - map._root, - map.__ownerID, - 0, - undefined, - k, - v, - didChangeSize, - didAlter - ); - if (!didAlter.value) { - return map; - } - newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0); - } - if (map.__ownerID) { - map.size = newSize; - map._root = newRoot; - map.__hash = undefined; - map.__altered = true; - return map; - } - return newRoot ? makeMap(newSize, newRoot) : emptyMap(); -} - -function updateNode( - node, - ownerID, - shift, - keyHash, - key, - value, - didChangeSize, - didAlter -) { - if (!node) { - if (value === NOT_SET) { - return node; - } - SetRef(didAlter); - SetRef(didChangeSize); - return new ValueNode(ownerID, keyHash, [key, value]); - } - return node.update( - ownerID, - shift, - keyHash, - key, - value, - didChangeSize, - didAlter - ); -} - -function isLeafNode(node) { - return ( - node.constructor === ValueNode || node.constructor === HashCollisionNode - ); -} - -function mergeIntoNode(node, ownerID, shift, keyHash, entry) { - if (node.keyHash === keyHash) { - return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]); - } - - const idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK; - const idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; - - let newNode; - const nodes = - idx1 === idx2 - ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] - : ((newNode = new ValueNode(ownerID, keyHash, entry)), - idx1 < idx2 ? [node, newNode] : [newNode, node]); - - return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes); -} - -function createNodes(ownerID, entries, key, value) { - if (!ownerID) { - ownerID = new OwnerID(); - } - let node = new ValueNode(ownerID, hash(key), [key, value]); - for (let ii = 0; ii < entries.length; ii++) { - const entry = entries[ii]; - node = node.update(ownerID, 0, undefined, entry[0], entry[1]); - } - return node; -} - -function packNodes(ownerID, nodes, count, excluding) { - let bitmap = 0; - let packedII = 0; - const packedNodes = new Array(count); - for (let ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) { - const node = nodes[ii]; - if (node !== undefined && ii !== excluding) { - bitmap |= bit; - packedNodes[packedII++] = node; - } - } - return new BitmapIndexedNode(ownerID, bitmap, packedNodes); -} - -function expandNodes(ownerID, nodes, bitmap, including, node) { - let count = 0; - const expandedNodes = new Array(SIZE); - for (let ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) { - expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined; - } - expandedNodes[including] = node; - return new HashArrayMapNode(ownerID, count + 1, expandedNodes); -} - -function popCount(x) { - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0f0f0f0f; - x += x >> 8; - x += x >> 16; - return x & 0x7f; -} - -function setAt(array, idx, val, canEdit) { - const newArray = canEdit ? array : arrCopy(array); - newArray[idx] = val; - return newArray; -} - -function spliceIn(array, idx, val, canEdit) { - const newLen = array.length + 1; - if (canEdit && idx + 1 === newLen) { - array[idx] = val; - return array; - } - const newArray = new Array(newLen); - let after = 0; - for (let ii = 0; ii < newLen; ii++) { - if (ii === idx) { - newArray[ii] = val; - after = -1; - } else { - newArray[ii] = array[ii + after]; - } - } - return newArray; -} - -function spliceOut(array, idx, canEdit) { - const newLen = array.length - 1; - if (canEdit && idx === newLen) { - array.pop(); - return array; - } - const newArray = new Array(newLen); - let after = 0; - for (let ii = 0; ii < newLen; ii++) { - if (ii === idx) { - after = 1; - } - newArray[ii] = array[ii + after]; - } - return newArray; -} - -const MAX_ARRAY_MAP_SIZE = SIZE / 4; -const MAX_BITMAP_INDEXED_SIZE = SIZE / 2; -const MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4; diff --git a/src/Math.js b/src/Math.js deleted file mode 100644 index 0075e73cd3..0000000000 --- a/src/Math.js +++ /dev/null @@ -1,19 +0,0 @@ -export const imul = - typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 - ? Math.imul - : function imul(a, b) { - a |= 0; // int - b |= 0; // int - const c = a & 0xffff; - const d = b & 0xffff; - // Shift by 0 fixes the sign on the high part. - return (c * d + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0)) | 0; // int - }; - -// v8 has an optimization for storing 31-bit signed numbers. -// Values which have either 00 or 11 as the high order bits qualify. -// This function drops the highest order bit in a signed number, maintaining -// the sign bit. -export function smi(i32) { - return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff); -} diff --git a/src/Operations.js b/src/Operations.js deleted file mode 100644 index bb3b16568d..0000000000 --- a/src/Operations.js +++ /dev/null @@ -1,985 +0,0 @@ -import { - NOT_SET, - ensureSize, - wrapIndex, - wholeSlice, - resolveBegin, - resolveEnd, -} from './TrieUtils'; -import { - Collection, - KeyedCollection, - SetCollection, - IndexedCollection, -} from './Collection'; -import { isCollection } from './predicates/isCollection'; -import { IS_KEYED_SYMBOL, isKeyed } from './predicates/isKeyed'; -import { IS_INDEXED_SYMBOL, isIndexed } from './predicates/isIndexed'; -import { isOrdered, IS_ORDERED_SYMBOL } from './predicates/isOrdered'; -import { isSeq } from './predicates/isSeq'; -import { - getIterator, - Iterator, - iteratorValue, - iteratorDone, - ITERATE_KEYS, - ITERATE_VALUES, - ITERATE_ENTRIES, -} from './Iterator'; -import { - Seq, - KeyedSeq, - SetSeq, - IndexedSeq, - keyedSeqFromValue, - indexedSeqFromValue, - ArraySeq, -} from './Seq'; - -import { Map } from './Map'; -import { OrderedMap } from './OrderedMap'; - -export class ToKeyedSequence extends KeyedSeq { - constructor(indexed, useKeys) { - this._iter = indexed; - this._useKeys = useKeys; - this.size = indexed.size; - } - - get(key, notSetValue) { - return this._iter.get(key, notSetValue); - } - - has(key) { - return this._iter.has(key); - } - - valueSeq() { - return this._iter.valueSeq(); - } - - reverse() { - const reversedSequence = reverseFactory(this, true); - if (!this._useKeys) { - reversedSequence.valueSeq = () => this._iter.toSeq().reverse(); - } - return reversedSequence; - } - - map(mapper, context) { - const mappedSequence = mapFactory(this, mapper, context); - if (!this._useKeys) { - mappedSequence.valueSeq = () => this._iter.toSeq().map(mapper, context); - } - return mappedSequence; - } - - __iterate(fn, reverse) { - return this._iter.__iterate((v, k) => fn(v, k, this), reverse); - } - - __iterator(type, reverse) { - return this._iter.__iterator(type, reverse); - } -} -ToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true; - -export class ToIndexedSequence extends IndexedSeq { - constructor(iter) { - this._iter = iter; - this.size = iter.size; - } - - includes(value) { - return this._iter.includes(value); - } - - __iterate(fn, reverse) { - let i = 0; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - reverse && ensureSize(this); - return this._iter.__iterate( - (v) => fn(v, reverse ? this.size - ++i : i++, this), - reverse - ); - } - - __iterator(type, reverse) { - const iterator = this._iter.__iterator(ITERATE_VALUES, reverse); - let i = 0; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - reverse && ensureSize(this); - return new Iterator(() => { - const step = iterator.next(); - return step.done - ? step - : iteratorValue( - type, - reverse ? this.size - ++i : i++, - step.value, - step - ); - }); - } -} - -export class ToSetSequence extends SetSeq { - constructor(iter) { - this._iter = iter; - this.size = iter.size; - } - - has(key) { - return this._iter.includes(key); - } - - __iterate(fn, reverse) { - return this._iter.__iterate((v) => fn(v, v, this), reverse); - } - - __iterator(type, reverse) { - const iterator = this._iter.__iterator(ITERATE_VALUES, reverse); - return new Iterator(() => { - const step = iterator.next(); - return step.done - ? step - : iteratorValue(type, step.value, step.value, step); - }); - } -} - -export class FromEntriesSequence extends KeyedSeq { - constructor(entries) { - this._iter = entries; - this.size = entries.size; - } - - entrySeq() { - return this._iter.toSeq(); - } - - __iterate(fn, reverse) { - return this._iter.__iterate((entry) => { - // Check if entry exists first so array access doesn't throw for holes - // in the parent iteration. - if (entry) { - validateEntry(entry); - const indexedCollection = isCollection(entry); - return fn( - indexedCollection ? entry.get(1) : entry[1], - indexedCollection ? entry.get(0) : entry[0], - this - ); - } - }, reverse); - } - - __iterator(type, reverse) { - const iterator = this._iter.__iterator(ITERATE_VALUES, reverse); - return new Iterator(() => { - while (true) { - const step = iterator.next(); - if (step.done) { - return step; - } - const entry = step.value; - // Check if entry exists first so array access doesn't throw for holes - // in the parent iteration. - if (entry) { - validateEntry(entry); - const indexedCollection = isCollection(entry); - return iteratorValue( - type, - indexedCollection ? entry.get(0) : entry[0], - indexedCollection ? entry.get(1) : entry[1], - step - ); - } - } - }); - } -} - -ToIndexedSequence.prototype.cacheResult = - ToKeyedSequence.prototype.cacheResult = - ToSetSequence.prototype.cacheResult = - FromEntriesSequence.prototype.cacheResult = - cacheResultThrough; - -export function flipFactory(collection) { - const flipSequence = makeSequence(collection); - flipSequence._iter = collection; - flipSequence.size = collection.size; - flipSequence.flip = () => collection; - flipSequence.reverse = function () { - const reversedSequence = collection.reverse.apply(this); // super.reverse() - reversedSequence.flip = () => collection.reverse(); - return reversedSequence; - }; - flipSequence.has = (key) => collection.includes(key); - flipSequence.includes = (key) => collection.has(key); - flipSequence.cacheResult = cacheResultThrough; - flipSequence.__iterateUncached = function (fn, reverse) { - return collection.__iterate((v, k) => fn(k, v, this) !== false, reverse); - }; - flipSequence.__iteratorUncached = function (type, reverse) { - if (type === ITERATE_ENTRIES) { - const iterator = collection.__iterator(type, reverse); - return new Iterator(() => { - const step = iterator.next(); - if (!step.done) { - const k = step.value[0]; - step.value[0] = step.value[1]; - step.value[1] = k; - } - return step; - }); - } - return collection.__iterator( - type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES, - reverse - ); - }; - return flipSequence; -} - -export function mapFactory(collection, mapper, context) { - const mappedSequence = makeSequence(collection); - mappedSequence.size = collection.size; - mappedSequence.has = (key) => collection.has(key); - mappedSequence.get = (key, notSetValue) => { - const v = collection.get(key, NOT_SET); - return v === NOT_SET - ? notSetValue - : mapper.call(context, v, key, collection); - }; - mappedSequence.__iterateUncached = function (fn, reverse) { - return collection.__iterate( - (v, k, c) => fn(mapper.call(context, v, k, c), k, this) !== false, - reverse - ); - }; - mappedSequence.__iteratorUncached = function (type, reverse) { - const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); - return new Iterator(() => { - const step = iterator.next(); - if (step.done) { - return step; - } - const entry = step.value; - const key = entry[0]; - return iteratorValue( - type, - key, - mapper.call(context, entry[1], key, collection), - step - ); - }); - }; - return mappedSequence; -} - -export function reverseFactory(collection, useKeys) { - const reversedSequence = makeSequence(collection); - reversedSequence._iter = collection; - reversedSequence.size = collection.size; - reversedSequence.reverse = () => collection; - if (collection.flip) { - reversedSequence.flip = function () { - const flipSequence = flipFactory(collection); - flipSequence.reverse = () => collection.flip(); - return flipSequence; - }; - } - reversedSequence.get = (key, notSetValue) => - collection.get(useKeys ? key : -1 - key, notSetValue); - reversedSequence.has = (key) => collection.has(useKeys ? key : -1 - key); - reversedSequence.includes = (value) => collection.includes(value); - reversedSequence.cacheResult = cacheResultThrough; - reversedSequence.__iterate = function (fn, reverse) { - let i = 0; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - reverse && ensureSize(collection); - return collection.__iterate( - (v, k) => fn(v, useKeys ? k : reverse ? this.size - ++i : i++, this), - !reverse - ); - }; - reversedSequence.__iterator = (type, reverse) => { - let i = 0; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - reverse && ensureSize(collection); - const iterator = collection.__iterator(ITERATE_ENTRIES, !reverse); - return new Iterator(() => { - const step = iterator.next(); - if (step.done) { - return step; - } - const entry = step.value; - return iteratorValue( - type, - useKeys ? entry[0] : reverse ? this.size - ++i : i++, - entry[1], - step - ); - }); - }; - return reversedSequence; -} - -export function filterFactory(collection, predicate, context, useKeys) { - const filterSequence = makeSequence(collection); - if (useKeys) { - filterSequence.has = (key) => { - const v = collection.get(key, NOT_SET); - return v !== NOT_SET && !!predicate.call(context, v, key, collection); - }; - filterSequence.get = (key, notSetValue) => { - const v = collection.get(key, NOT_SET); - return v !== NOT_SET && predicate.call(context, v, key, collection) - ? v - : notSetValue; - }; - } - filterSequence.__iterateUncached = function (fn, reverse) { - let iterations = 0; - collection.__iterate((v, k, c) => { - if (predicate.call(context, v, k, c)) { - iterations++; - return fn(v, useKeys ? k : iterations - 1, this); - } - }, reverse); - return iterations; - }; - filterSequence.__iteratorUncached = function (type, reverse) { - const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); - let iterations = 0; - return new Iterator(() => { - while (true) { - const step = iterator.next(); - if (step.done) { - return step; - } - const entry = step.value; - const key = entry[0]; - const value = entry[1]; - if (predicate.call(context, value, key, collection)) { - return iteratorValue(type, useKeys ? key : iterations++, value, step); - } - } - }); - }; - return filterSequence; -} - -export function countByFactory(collection, grouper, context) { - const groups = Map().asMutable(); - collection.__iterate((v, k) => { - groups.update(grouper.call(context, v, k, collection), 0, (a) => a + 1); - }); - return groups.asImmutable(); -} - -export function groupByFactory(collection, grouper, context) { - const isKeyedIter = isKeyed(collection); - const groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable(); - collection.__iterate((v, k) => { - groups.update( - grouper.call(context, v, k, collection), - (a) => ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a) - ); - }); - const coerce = collectionClass(collection); - return groups.map((arr) => reify(collection, coerce(arr))).asImmutable(); -} - -export function partitionFactory(collection, predicate, context) { - const isKeyedIter = isKeyed(collection); - const groups = [[], []]; - collection.__iterate((v, k) => { - groups[predicate.call(context, v, k, collection) ? 1 : 0].push( - isKeyedIter ? [k, v] : v - ); - }); - const coerce = collectionClass(collection); - return groups.map((arr) => reify(collection, coerce(arr))); -} - -export function sliceFactory(collection, begin, end, useKeys) { - const originalSize = collection.size; - - if (wholeSlice(begin, end, originalSize)) { - return collection; - } - - // begin or end can not be resolved if they were provided as negative numbers and - // this collection's size is unknown. In that case, cache first so there is - // a known size and these do not resolve to NaN. - if (typeof originalSize === 'undefined' && (begin < 0 || end < 0)) { - return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys); - } - - const resolvedBegin = resolveBegin(begin, originalSize); - const resolvedEnd = resolveEnd(end, originalSize); - - // Note: resolvedEnd is undefined when the original sequence's length is - // unknown and this slice did not supply an end and should contain all - // elements after resolvedBegin. - // In that case, resolvedSize will be NaN and sliceSize will remain undefined. - const resolvedSize = resolvedEnd - resolvedBegin; - let sliceSize; - if (resolvedSize === resolvedSize) { - sliceSize = resolvedSize < 0 ? 0 : resolvedSize; - } - - const sliceSeq = makeSequence(collection); - - // If collection.size is undefined, the size of the realized sliceSeq is - // unknown at this point unless the number of items to slice is 0 - sliceSeq.size = - sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined; - - if (!useKeys && isSeq(collection) && sliceSize >= 0) { - sliceSeq.get = function (index, notSetValue) { - index = wrapIndex(this, index); - return index >= 0 && index < sliceSize - ? collection.get(index + resolvedBegin, notSetValue) - : notSetValue; - }; - } - - sliceSeq.__iterateUncached = function (fn, reverse) { - if (sliceSize === 0) { - return 0; - } - if (reverse) { - return this.cacheResult().__iterate(fn, reverse); - } - let skipped = 0; - let isSkipping = true; - let iterations = 0; - collection.__iterate((v, k) => { - if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) { - iterations++; - return ( - fn(v, useKeys ? k : iterations - 1, this) !== false && - iterations !== sliceSize - ); - } - }); - return iterations; - }; - - sliceSeq.__iteratorUncached = function (type, reverse) { - if (sliceSize !== 0 && reverse) { - return this.cacheResult().__iterator(type, reverse); - } - // Don't bother instantiating parent iterator if taking 0. - if (sliceSize === 0) { - return new Iterator(iteratorDone); - } - const iterator = collection.__iterator(type, reverse); - let skipped = 0; - let iterations = 0; - return new Iterator(() => { - while (skipped++ < resolvedBegin) { - iterator.next(); - } - if (++iterations > sliceSize) { - return iteratorDone(); - } - const step = iterator.next(); - if (useKeys || type === ITERATE_VALUES || step.done) { - return step; - } - if (type === ITERATE_KEYS) { - return iteratorValue(type, iterations - 1, undefined, step); - } - return iteratorValue(type, iterations - 1, step.value[1], step); - }); - }; - - return sliceSeq; -} - -export function takeWhileFactory(collection, predicate, context) { - const takeSequence = makeSequence(collection); - takeSequence.__iterateUncached = function (fn, reverse) { - if (reverse) { - return this.cacheResult().__iterate(fn, reverse); - } - let iterations = 0; - collection.__iterate( - (v, k, c) => - predicate.call(context, v, k, c) && ++iterations && fn(v, k, this) - ); - return iterations; - }; - takeSequence.__iteratorUncached = function (type, reverse) { - if (reverse) { - return this.cacheResult().__iterator(type, reverse); - } - const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); - let iterating = true; - return new Iterator(() => { - if (!iterating) { - return iteratorDone(); - } - const step = iterator.next(); - if (step.done) { - return step; - } - const entry = step.value; - const k = entry[0]; - const v = entry[1]; - if (!predicate.call(context, v, k, this)) { - iterating = false; - return iteratorDone(); - } - return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); - }); - }; - return takeSequence; -} - -export function skipWhileFactory(collection, predicate, context, useKeys) { - const skipSequence = makeSequence(collection); - skipSequence.__iterateUncached = function (fn, reverse) { - if (reverse) { - return this.cacheResult().__iterate(fn, reverse); - } - let isSkipping = true; - let iterations = 0; - collection.__iterate((v, k, c) => { - if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) { - iterations++; - return fn(v, useKeys ? k : iterations - 1, this); - } - }); - return iterations; - }; - skipSequence.__iteratorUncached = function (type, reverse) { - if (reverse) { - return this.cacheResult().__iterator(type, reverse); - } - const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); - let skipping = true; - let iterations = 0; - return new Iterator(() => { - let step; - let k; - let v; - do { - step = iterator.next(); - if (step.done) { - if (useKeys || type === ITERATE_VALUES) { - return step; - } - if (type === ITERATE_KEYS) { - return iteratorValue(type, iterations++, undefined, step); - } - return iteratorValue(type, iterations++, step.value[1], step); - } - const entry = step.value; - k = entry[0]; - v = entry[1]; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - skipping && (skipping = predicate.call(context, v, k, this)); - } while (skipping); - return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); - }); - }; - return skipSequence; -} - -class ConcatSeq extends Seq { - constructor(iterables) { - this._wrappedIterables = iterables.flatMap((iterable) => { - if (iterable._wrappedIterables) { - return iterable._wrappedIterables; - } - return [iterable]; - }); - this.size = this._wrappedIterables.reduce((sum, iterable) => { - if (sum !== undefined) { - const size = iterable.size; - if (size !== undefined) { - return sum + size; - } - } - }, 0); - this[IS_KEYED_SYMBOL] = this._wrappedIterables[0][IS_KEYED_SYMBOL]; - this[IS_INDEXED_SYMBOL] = this._wrappedIterables[0][IS_INDEXED_SYMBOL]; - this[IS_ORDERED_SYMBOL] = this._wrappedIterables[0][IS_ORDERED_SYMBOL]; - } - - __iterateUncached(fn, reverse) { - if (this._wrappedIterables.length === 0) { - return; - } - - if (reverse) { - return this.cacheResult().__iterate(fn, reverse); - } - - let iterableIndex = 0; - const useKeys = isKeyed(this); - const iteratorType = useKeys ? ITERATE_ENTRIES : ITERATE_VALUES; - let currentIterator = this._wrappedIterables[iterableIndex].__iterator( - iteratorType, - reverse - ); - - let keepGoing = true; - let index = 0; - while (keepGoing) { - let next = currentIterator.next(); - while (next.done) { - iterableIndex++; - if (iterableIndex === this._wrappedIterables.length) { - return index; - } - currentIterator = this._wrappedIterables[iterableIndex].__iterator( - iteratorType, - reverse - ); - next = currentIterator.next(); - } - const fnResult = useKeys - ? fn(next.value[1], next.value[0], this) - : fn(next.value, index, this); - keepGoing = fnResult !== false; - index++; - } - return index; - } - - __iteratorUncached(type, reverse) { - if (this._wrappedIterables.length === 0) { - return new Iterator(iteratorDone); - } - - if (reverse) { - return this.cacheResult().__iterator(type, reverse); - } - - let iterableIndex = 0; - let currentIterator = this._wrappedIterables[iterableIndex].__iterator( - type, - reverse - ); - return new Iterator(() => { - let next = currentIterator.next(); - while (next.done) { - iterableIndex++; - if (iterableIndex === this._wrappedIterables.length) { - return next; - } - currentIterator = this._wrappedIterables[iterableIndex].__iterator( - type, - reverse - ); - next = currentIterator.next(); - } - return next; - }); - } -} - -export function concatFactory(collection, values) { - const isKeyedCollection = isKeyed(collection); - const iters = [collection] - .concat(values) - .map((v) => { - if (!isCollection(v)) { - v = isKeyedCollection - ? keyedSeqFromValue(v) - : indexedSeqFromValue(Array.isArray(v) ? v : [v]); - } else if (isKeyedCollection) { - v = KeyedCollection(v); - } - return v; - }) - .filter((v) => v.size !== 0); - - if (iters.length === 0) { - return collection; - } - - if (iters.length === 1) { - const singleton = iters[0]; - if ( - singleton === collection || - (isKeyedCollection && isKeyed(singleton)) || - (isIndexed(collection) && isIndexed(singleton)) - ) { - return singleton; - } - } - - return new ConcatSeq(iters); -} - -export function flattenFactory(collection, depth, useKeys) { - const flatSequence = makeSequence(collection); - flatSequence.__iterateUncached = function (fn, reverse) { - if (reverse) { - return this.cacheResult().__iterate(fn, reverse); - } - let iterations = 0; - let stopped = false; - function flatDeep(iter, currentDepth) { - iter.__iterate((v, k) => { - if ((!depth || currentDepth < depth) && isCollection(v)) { - flatDeep(v, currentDepth + 1); - } else { - iterations++; - if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) { - stopped = true; - } - } - return !stopped; - }, reverse); - } - flatDeep(collection, 0); - return iterations; - }; - flatSequence.__iteratorUncached = function (type, reverse) { - if (reverse) { - return this.cacheResult().__iterator(type, reverse); - } - let iterator = collection.__iterator(type, reverse); - const stack = []; - let iterations = 0; - return new Iterator(() => { - while (iterator) { - const step = iterator.next(); - if (step.done !== false) { - iterator = stack.pop(); - continue; - } - let v = step.value; - if (type === ITERATE_ENTRIES) { - v = v[1]; - } - if ((!depth || stack.length < depth) && isCollection(v)) { - stack.push(iterator); - iterator = v.__iterator(type, reverse); - } else { - return useKeys ? step : iteratorValue(type, iterations++, v, step); - } - } - return iteratorDone(); - }); - }; - return flatSequence; -} - -export function flatMapFactory(collection, mapper, context) { - const coerce = collectionClass(collection); - return collection - .toSeq() - .map((v, k) => coerce(mapper.call(context, v, k, collection))) - .flatten(true); -} - -export function interposeFactory(collection, separator) { - const interposedSequence = makeSequence(collection); - interposedSequence.size = collection.size && collection.size * 2 - 1; - interposedSequence.__iterateUncached = function (fn, reverse) { - let iterations = 0; - collection.__iterate( - (v) => - (!iterations || fn(separator, iterations++, this) !== false) && - fn(v, iterations++, this) !== false, - reverse - ); - return iterations; - }; - interposedSequence.__iteratorUncached = function (type, reverse) { - const iterator = collection.__iterator(ITERATE_VALUES, reverse); - let iterations = 0; - let step; - return new Iterator(() => { - if (!step || iterations % 2) { - step = iterator.next(); - if (step.done) { - return step; - } - } - return iterations % 2 - ? iteratorValue(type, iterations++, separator) - : iteratorValue(type, iterations++, step.value, step); - }); - }; - return interposedSequence; -} - -export function sortFactory(collection, comparator, mapper) { - if (!comparator) { - comparator = defaultComparator; - } - const isKeyedCollection = isKeyed(collection); - let index = 0; - const entries = collection - .toSeq() - .map((v, k) => [k, v, index++, mapper ? mapper(v, k, collection) : v]) - .valueSeq() - .toArray(); - entries - .sort((a, b) => comparator(a[3], b[3]) || a[2] - b[2]) - .forEach( - isKeyedCollection - ? (v, i) => { - entries[i].length = 2; - } - : (v, i) => { - entries[i] = v[1]; - } - ); - return isKeyedCollection - ? KeyedSeq(entries) - : isIndexed(collection) - ? IndexedSeq(entries) - : SetSeq(entries); -} - -export function maxFactory(collection, comparator, mapper) { - if (!comparator) { - comparator = defaultComparator; - } - if (mapper) { - const entry = collection - .toSeq() - .map((v, k) => [v, mapper(v, k, collection)]) - .reduce((a, b) => (maxCompare(comparator, a[1], b[1]) ? b : a)); - return entry && entry[0]; - } - return collection.reduce((a, b) => (maxCompare(comparator, a, b) ? b : a)); -} - -function maxCompare(comparator, a, b) { - const comp = comparator(b, a); - // b is considered the new max if the comparator declares them equal, but - // they are not equal and b is in fact a nullish value. - return ( - (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || - comp > 0 - ); -} - -export function zipWithFactory(keyIter, zipper, iters, zipAll) { - const zipSequence = makeSequence(keyIter); - const sizes = new ArraySeq(iters).map((i) => i.size); - zipSequence.size = zipAll ? sizes.max() : sizes.min(); - // Note: this a generic base implementation of __iterate in terms of - // __iterator which may be more generically useful in the future. - zipSequence.__iterate = function (fn, reverse) { - /* generic: - var iterator = this.__iterator(ITERATE_ENTRIES, reverse); - var step; - var iterations = 0; - while (!(step = iterator.next()).done) { - iterations++; - if (fn(step.value[1], step.value[0], this) === false) { - break; - } - } - return iterations; - */ - // indexed: - const iterator = this.__iterator(ITERATE_VALUES, reverse); - let step; - let iterations = 0; - while (!(step = iterator.next()).done) { - if (fn(step.value, iterations++, this) === false) { - break; - } - } - return iterations; - }; - zipSequence.__iteratorUncached = function (type, reverse) { - const iterators = iters.map( - (i) => ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)) - ); - let iterations = 0; - let isDone = false; - return new Iterator(() => { - let steps; - if (!isDone) { - steps = iterators.map((i) => i.next()); - isDone = zipAll - ? steps.every((s) => s.done) - : steps.some((s) => s.done); - } - if (isDone) { - return iteratorDone(); - } - return iteratorValue( - type, - iterations++, - zipper.apply( - null, - steps.map((s) => s.value) - ) - ); - }); - }; - return zipSequence; -} - -// #pragma Helper Functions - -export function reify(iter, seq) { - return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq); -} - -function validateEntry(entry) { - if (entry !== Object(entry)) { - throw new TypeError('Expected [K, V] tuple: ' + entry); - } -} - -function collectionClass(collection) { - return isKeyed(collection) - ? KeyedCollection - : isIndexed(collection) - ? IndexedCollection - : SetCollection; -} - -function makeSequence(collection) { - return Object.create( - (isKeyed(collection) - ? KeyedSeq - : isIndexed(collection) - ? IndexedSeq - : SetSeq - ).prototype - ); -} - -function cacheResultThrough() { - if (this._iter.cacheResult) { - this._iter.cacheResult(); - this.size = this._iter.size; - return this; - } - return Seq.prototype.cacheResult.call(this); -} - -function defaultComparator(a, b) { - if (a === undefined && b === undefined) { - return 0; - } - - if (a === undefined) { - return 1; - } - - if (b === undefined) { - return -1; - } - - return a > b ? 1 : a < b ? -1 : 0; -} diff --git a/src/OrderedMap.js b/src/OrderedMap.js deleted file mode 100644 index c6867b6c83..0000000000 --- a/src/OrderedMap.js +++ /dev/null @@ -1,164 +0,0 @@ -import { KeyedCollection } from './Collection'; -import { IS_ORDERED_SYMBOL } from './predicates/isOrdered'; -import { isOrderedMap } from './predicates/isOrderedMap'; -import { Map, emptyMap } from './Map'; -import { emptyList } from './List'; -import { DELETE, NOT_SET, SIZE } from './TrieUtils'; -import assertNotInfinite from './utils/assertNotInfinite'; - -export class OrderedMap extends Map { - // @pragma Construction - - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptyOrderedMap() - : isOrderedMap(value) - ? value - : emptyOrderedMap().withMutations((map) => { - const iter = KeyedCollection(value); - assertNotInfinite(iter.size); - iter.forEach((v, k) => map.set(k, v)); - }); - } - - static of(/*...values*/) { - return this(arguments); - } - - toString() { - return this.__toString('OrderedMap {', '}'); - } - - // @pragma Access - - get(k, notSetValue) { - const index = this._map.get(k); - return index !== undefined ? this._list.get(index)[1] : notSetValue; - } - - // @pragma Modification - - clear() { - if (this.size === 0) { - return this; - } - if (this.__ownerID) { - this.size = 0; - this._map.clear(); - this._list.clear(); - this.__altered = true; - return this; - } - return emptyOrderedMap(); - } - - set(k, v) { - return updateOrderedMap(this, k, v); - } - - remove(k) { - return updateOrderedMap(this, k, NOT_SET); - } - - __iterate(fn, reverse) { - return this._list.__iterate( - (entry) => entry && fn(entry[1], entry[0], this), - reverse - ); - } - - __iterator(type, reverse) { - return this._list.fromEntrySeq().__iterator(type, reverse); - } - - __ensureOwner(ownerID) { - if (ownerID === this.__ownerID) { - return this; - } - const newMap = this._map.__ensureOwner(ownerID); - const newList = this._list.__ensureOwner(ownerID); - if (!ownerID) { - if (this.size === 0) { - return emptyOrderedMap(); - } - this.__ownerID = ownerID; - this.__altered = false; - this._map = newMap; - this._list = newList; - return this; - } - return makeOrderedMap(newMap, newList, ownerID, this.__hash); - } -} - -OrderedMap.isOrderedMap = isOrderedMap; - -OrderedMap.prototype[IS_ORDERED_SYMBOL] = true; -OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove; - -function makeOrderedMap(map, list, ownerID, hash) { - const omap = Object.create(OrderedMap.prototype); - omap.size = map ? map.size : 0; - omap._map = map; - omap._list = list; - omap.__ownerID = ownerID; - omap.__hash = hash; - omap.__altered = false; - return omap; -} - -let EMPTY_ORDERED_MAP; -export function emptyOrderedMap() { - return ( - EMPTY_ORDERED_MAP || - (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList())) - ); -} - -function updateOrderedMap(omap, k, v) { - const map = omap._map; - const list = omap._list; - const i = map.get(k); - const has = i !== undefined; - let newMap; - let newList; - if (v === NOT_SET) { - // removed - if (!has) { - return omap; - } - if (list.size >= SIZE && list.size >= map.size * 2) { - newList = list.filter((entry, idx) => entry !== undefined && i !== idx); - newMap = newList - .toKeyedSeq() - .map((entry) => entry[0]) - .flip() - .toMap(); - if (omap.__ownerID) { - newMap.__ownerID = newList.__ownerID = omap.__ownerID; - } - } else { - newMap = map.remove(k); - newList = i === list.size - 1 ? list.pop() : list.set(i, undefined); - } - } else if (has) { - if (v === list.get(i)[1]) { - return omap; - } - newMap = map; - newList = list.set(i, [k, v]); - } else { - newMap = map.set(k, list.size); - newList = list.set(list.size, [k, v]); - } - if (omap.__ownerID) { - omap.size = newMap.size; - omap._map = newMap; - omap._list = newList; - omap.__hash = undefined; - omap.__altered = true; - return omap; - } - return makeOrderedMap(newMap, newList); -} diff --git a/src/OrderedSet.js b/src/OrderedSet.js deleted file mode 100644 index 98da36416f..0000000000 --- a/src/OrderedSet.js +++ /dev/null @@ -1,62 +0,0 @@ -import { SetCollection, KeyedCollection } from './Collection'; -import { IS_ORDERED_SYMBOL } from './predicates/isOrdered'; -import { isOrderedSet } from './predicates/isOrderedSet'; -import { IndexedCollectionPrototype } from './CollectionImpl'; -import { Set } from './Set'; -import { emptyOrderedMap } from './OrderedMap'; -import assertNotInfinite from './utils/assertNotInfinite'; - -export class OrderedSet extends Set { - // @pragma Construction - - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptyOrderedSet() - : isOrderedSet(value) - ? value - : emptyOrderedSet().withMutations((set) => { - const iter = SetCollection(value); - assertNotInfinite(iter.size); - iter.forEach((v) => set.add(v)); - }); - } - - static of(/*...values*/) { - return this(arguments); - } - - static fromKeys(value) { - return this(KeyedCollection(value).keySeq()); - } - - toString() { - return this.__toString('OrderedSet {', '}'); - } -} - -OrderedSet.isOrderedSet = isOrderedSet; - -const OrderedSetPrototype = OrderedSet.prototype; -OrderedSetPrototype[IS_ORDERED_SYMBOL] = true; -OrderedSetPrototype.zip = IndexedCollectionPrototype.zip; -OrderedSetPrototype.zipWith = IndexedCollectionPrototype.zipWith; -OrderedSetPrototype.zipAll = IndexedCollectionPrototype.zipAll; - -OrderedSetPrototype.__empty = emptyOrderedSet; -OrderedSetPrototype.__make = makeOrderedSet; - -function makeOrderedSet(map, ownerID) { - const set = Object.create(OrderedSetPrototype); - set.size = map ? map.size : 0; - set._map = map; - set.__ownerID = ownerID; - return set; -} - -let EMPTY_ORDERED_SET; -function emptyOrderedSet() { - return ( - EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap())) - ); -} diff --git a/src/PairSorting.js b/src/PairSorting.js deleted file mode 100644 index a8d6e4e240..0000000000 --- a/src/PairSorting.js +++ /dev/null @@ -1,4 +0,0 @@ -export const PairSorting = { - LeftThenRight: -1, - RightThenLeft: +1, -}; diff --git a/src/Range.js b/src/Range.js deleted file mode 100644 index a7ac912aed..0000000000 --- a/src/Range.js +++ /dev/null @@ -1,137 +0,0 @@ -import { wrapIndex, wholeSlice, resolveBegin, resolveEnd } from './TrieUtils'; -import { IndexedSeq } from './Seq'; -import { Iterator, iteratorValue, iteratorDone } from './Iterator'; - -import invariant from './utils/invariant'; -import deepEqual from './utils/deepEqual'; - -/** - * Returns a lazy seq of nums from start (inclusive) to end - * (exclusive), by step, where start defaults to 0, step to 1, and end to - * infinity. When start is equal to end, returns empty list. - */ -export class Range extends IndexedSeq { - constructor(start, end, step = 1) { - if (!(this instanceof Range)) { - // eslint-disable-next-line no-constructor-return - return new Range(start, end, step); - } - invariant(step !== 0, 'Cannot step a Range by 0'); - invariant( - start !== undefined, - 'You must define a start value when using Range' - ); - invariant( - end !== undefined, - 'You must define an end value when using Range' - ); - - step = Math.abs(step); - if (end < start) { - step = -step; - } - this._start = start; - this._end = end; - this._step = step; - this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1); - if (this.size === 0) { - if (EMPTY_RANGE) { - // eslint-disable-next-line no-constructor-return - return EMPTY_RANGE; - } - // eslint-disable-next-line @typescript-eslint/no-this-alias - EMPTY_RANGE = this; - } - } - - toString() { - return this.size === 0 - ? 'Range []' - : `Range [ ${this._start}...${this._end}${this._step !== 1 ? ' by ' + this._step : ''} ]`; - } - - get(index, notSetValue) { - return this.has(index) - ? this._start + wrapIndex(this, index) * this._step - : notSetValue; - } - - includes(searchValue) { - const possibleIndex = (searchValue - this._start) / this._step; - return ( - possibleIndex >= 0 && - possibleIndex < this.size && - possibleIndex === Math.floor(possibleIndex) - ); - } - - slice(begin, end) { - if (wholeSlice(begin, end, this.size)) { - return this; - } - begin = resolveBegin(begin, this.size); - end = resolveEnd(end, this.size); - if (end <= begin) { - return new Range(0, 0); - } - return new Range( - this.get(begin, this._end), - this.get(end, this._end), - this._step - ); - } - - indexOf(searchValue) { - const offsetValue = searchValue - this._start; - if (offsetValue % this._step === 0) { - const index = offsetValue / this._step; - if (index >= 0 && index < this.size) { - return index; - } - } - return -1; - } - - lastIndexOf(searchValue) { - return this.indexOf(searchValue); - } - - __iterate(fn, reverse) { - const size = this.size; - const step = this._step; - let value = reverse ? this._start + (size - 1) * step : this._start; - let i = 0; - while (i !== size) { - if (fn(value, reverse ? size - ++i : i++, this) === false) { - break; - } - value += reverse ? -step : step; - } - return i; - } - - __iterator(type, reverse) { - const size = this.size; - const step = this._step; - let value = reverse ? this._start + (size - 1) * step : this._start; - let i = 0; - return new Iterator(() => { - if (i === size) { - return iteratorDone(); - } - const v = value; - value += reverse ? -step : step; - return iteratorValue(type, reverse ? size - ++i : i++, v); - }); - } - - equals(other) { - return other instanceof Range - ? this._start === other._start && - this._end === other._end && - this._step === other._step - : deepEqual(this, other); - } -} - -let EMPTY_RANGE; diff --git a/src/Record.js b/src/Record.js deleted file mode 100644 index 89100a6410..0000000000 --- a/src/Record.js +++ /dev/null @@ -1,269 +0,0 @@ -import { toJS } from './toJS'; -import { KeyedCollection } from './Collection'; -import { keyedSeqFromValue } from './Seq'; -import { List } from './List'; -import { ITERATE_ENTRIES, ITERATOR_SYMBOL } from './Iterator'; -import { isRecord, IS_RECORD_SYMBOL } from './predicates/isRecord'; -import { CollectionPrototype } from './CollectionImpl'; -import { DELETE } from './TrieUtils'; -import { getIn } from './methods/getIn'; -import { setIn } from './methods/setIn'; -import { deleteIn } from './methods/deleteIn'; -import { update } from './methods/update'; -import { updateIn } from './methods/updateIn'; -import { merge, mergeWith } from './methods/merge'; -import { mergeDeep, mergeDeepWith } from './methods/mergeDeep'; -import { mergeIn } from './methods/mergeIn'; -import { mergeDeepIn } from './methods/mergeDeepIn'; -import { withMutations } from './methods/withMutations'; -import { asMutable } from './methods/asMutable'; -import { asImmutable } from './methods/asImmutable'; - -import invariant from './utils/invariant'; -import quoteString from './utils/quoteString'; -import { isImmutable } from './predicates/isImmutable'; - -function throwOnInvalidDefaultValues(defaultValues) { - if (isRecord(defaultValues)) { - throw new Error( - 'Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.' - ); - } - - if (isImmutable(defaultValues)) { - throw new Error( - 'Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.' - ); - } - - if (defaultValues === null || typeof defaultValues !== 'object') { - throw new Error( - 'Can not call `Record` with a non-object as default values. Use a plain javascript object instead.' - ); - } -} - -export class Record { - constructor(defaultValues, name) { - let hasInitialized; - - throwOnInvalidDefaultValues(defaultValues); - - const RecordType = function Record(values) { - if (values instanceof RecordType) { - return values; - } - if (!(this instanceof RecordType)) { - return new RecordType(values); - } - if (!hasInitialized) { - hasInitialized = true; - const keys = Object.keys(defaultValues); - const indices = (RecordTypePrototype._indices = {}); - // Deprecated: left to attempt not to break any external code which - // relies on a ._name property existing on record instances. - // Use Record.getDescriptiveName() instead - RecordTypePrototype._name = name; - RecordTypePrototype._keys = keys; - RecordTypePrototype._defaultValues = defaultValues; - for (let i = 0; i < keys.length; i++) { - const propName = keys[i]; - indices[propName] = i; - if (RecordTypePrototype[propName]) { - /* eslint-disable no-console */ - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - typeof console === 'object' && - console.warn && - console.warn( - 'Cannot define ' + - recordName(this) + - ' with property "' + - propName + - '" since that property name is part of the Record API.' - ); - /* eslint-enable no-console */ - } else { - setProp(RecordTypePrototype, propName); - } - } - } - this.__ownerID = undefined; - this._values = List().withMutations((l) => { - l.setSize(this._keys.length); - KeyedCollection(values).forEach((v, k) => { - l.set(this._indices[k], v === this._defaultValues[k] ? undefined : v); - }); - }); - return this; - }; - - const RecordTypePrototype = (RecordType.prototype = - Object.create(RecordPrototype)); - RecordTypePrototype.constructor = RecordType; - - if (name) { - RecordType.displayName = name; - } - - // eslint-disable-next-line no-constructor-return - return RecordType; - } - - toString() { - let str = recordName(this) + ' { '; - const keys = this._keys; - let k; - for (let i = 0, l = keys.length; i !== l; i++) { - k = keys[i]; - str += (i ? ', ' : '') + k + ': ' + quoteString(this.get(k)); - } - return str + ' }'; - } - - equals(other) { - return ( - this === other || - (isRecord(other) && recordSeq(this).equals(recordSeq(other))) - ); - } - - hashCode() { - return recordSeq(this).hashCode(); - } - - // @pragma Access - - has(k) { - return this._indices.hasOwnProperty(k); - } - - get(k, notSetValue) { - if (!this.has(k)) { - return notSetValue; - } - const index = this._indices[k]; - const value = this._values.get(index); - return value === undefined ? this._defaultValues[k] : value; - } - - // @pragma Modification - - set(k, v) { - if (this.has(k)) { - const newValues = this._values.set( - this._indices[k], - v === this._defaultValues[k] ? undefined : v - ); - if (newValues !== this._values && !this.__ownerID) { - return makeRecord(this, newValues); - } - } - return this; - } - - remove(k) { - return this.set(k); - } - - clear() { - const newValues = this._values.clear().setSize(this._keys.length); - - return this.__ownerID ? this : makeRecord(this, newValues); - } - - wasAltered() { - return this._values.wasAltered(); - } - - toSeq() { - return recordSeq(this); - } - - toJS() { - return toJS(this); - } - - entries() { - return this.__iterator(ITERATE_ENTRIES); - } - - __iterator(type, reverse) { - return recordSeq(this).__iterator(type, reverse); - } - - __iterate(fn, reverse) { - return recordSeq(this).__iterate(fn, reverse); - } - - __ensureOwner(ownerID) { - if (ownerID === this.__ownerID) { - return this; - } - const newValues = this._values.__ensureOwner(ownerID); - if (!ownerID) { - this.__ownerID = ownerID; - this._values = newValues; - return this; - } - return makeRecord(this, newValues, ownerID); - } -} - -Record.isRecord = isRecord; -Record.getDescriptiveName = recordName; -const RecordPrototype = Record.prototype; -RecordPrototype[IS_RECORD_SYMBOL] = true; -RecordPrototype[DELETE] = RecordPrototype.remove; -RecordPrototype.deleteIn = RecordPrototype.removeIn = deleteIn; -RecordPrototype.getIn = getIn; -RecordPrototype.hasIn = CollectionPrototype.hasIn; -RecordPrototype.merge = merge; -RecordPrototype.mergeWith = mergeWith; -RecordPrototype.mergeIn = mergeIn; -RecordPrototype.mergeDeep = mergeDeep; -RecordPrototype.mergeDeepWith = mergeDeepWith; -RecordPrototype.mergeDeepIn = mergeDeepIn; -RecordPrototype.setIn = setIn; -RecordPrototype.update = update; -RecordPrototype.updateIn = updateIn; -RecordPrototype.withMutations = withMutations; -RecordPrototype.asMutable = asMutable; -RecordPrototype.asImmutable = asImmutable; -RecordPrototype[ITERATOR_SYMBOL] = RecordPrototype.entries; -RecordPrototype.toJSON = RecordPrototype.toObject = - CollectionPrototype.toObject; -RecordPrototype.inspect = RecordPrototype.toSource = function () { - return this.toString(); -}; - -function makeRecord(likeRecord, values, ownerID) { - const record = Object.create(Object.getPrototypeOf(likeRecord)); - record._values = values; - record.__ownerID = ownerID; - return record; -} - -function recordName(record) { - return record.constructor.displayName || record.constructor.name || 'Record'; -} - -function recordSeq(record) { - return keyedSeqFromValue(record._keys.map((k) => [k, record.get(k)])); -} - -function setProp(prototype, name) { - try { - Object.defineProperty(prototype, name, { - get: function () { - return this.get(name); - }, - set: function (value) { - invariant(this.__ownerID, 'Cannot set on an immutable record.'); - this.set(name, value); - }, - }); - // eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO enable eslint here - } catch (error) { - // Object.defineProperty failed. Probably IE8. - } -} diff --git a/src/Repeat.js b/src/Repeat.js deleted file mode 100644 index 0fb106156c..0000000000 --- a/src/Repeat.js +++ /dev/null @@ -1,101 +0,0 @@ -import { wholeSlice, resolveBegin, resolveEnd } from './TrieUtils'; -import { IndexedSeq } from './Seq'; -import { is } from './is'; -import { Iterator, iteratorValue, iteratorDone } from './Iterator'; - -import deepEqual from './utils/deepEqual'; - -/** - * Returns a lazy Seq of `value` repeated `times` times. When `times` is - * undefined, returns an infinite sequence of `value`. - */ -export class Repeat extends IndexedSeq { - constructor(value, times) { - if (!(this instanceof Repeat)) { - // eslint-disable-next-line no-constructor-return - return new Repeat(value, times); - } - this._value = value; - this.size = times === undefined ? Infinity : Math.max(0, times); - if (this.size === 0) { - if (EMPTY_REPEAT) { - // eslint-disable-next-line no-constructor-return - return EMPTY_REPEAT; - } - // eslint-disable-next-line @typescript-eslint/no-this-alias - EMPTY_REPEAT = this; - } - } - - toString() { - if (this.size === 0) { - return 'Repeat []'; - } - return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]'; - } - - get(index, notSetValue) { - return this.has(index) ? this._value : notSetValue; - } - - includes(searchValue) { - return is(this._value, searchValue); - } - - slice(begin, end) { - const size = this.size; - return wholeSlice(begin, end, size) - ? this - : new Repeat( - this._value, - resolveEnd(end, size) - resolveBegin(begin, size) - ); - } - - reverse() { - return this; - } - - indexOf(searchValue) { - if (is(this._value, searchValue)) { - return 0; - } - return -1; - } - - lastIndexOf(searchValue) { - if (is(this._value, searchValue)) { - return this.size; - } - return -1; - } - - __iterate(fn, reverse) { - const size = this.size; - let i = 0; - while (i !== size) { - if (fn(this._value, reverse ? size - ++i : i++, this) === false) { - break; - } - } - return i; - } - - __iterator(type, reverse) { - const size = this.size; - let i = 0; - return new Iterator(() => - i === size - ? iteratorDone() - : iteratorValue(type, reverse ? size - ++i : i++, this._value) - ); - } - - equals(other) { - return other instanceof Repeat - ? is(this._value, other._value) - : deepEqual(this, other); - } -} - -let EMPTY_REPEAT; diff --git a/src/Seq.js b/src/Seq.js deleted file mode 100644 index fd2a1dea58..0000000000 --- a/src/Seq.js +++ /dev/null @@ -1,343 +0,0 @@ -import { wrapIndex } from './TrieUtils'; -import { Collection } from './Collection'; -import { IS_SEQ_SYMBOL, isSeq } from './predicates/isSeq'; -import { isImmutable } from './predicates/isImmutable'; -import { isCollection } from './predicates/isCollection'; -import { isKeyed } from './predicates/isKeyed'; -import { isAssociative } from './predicates/isAssociative'; -import { isRecord } from './predicates/isRecord'; -import { IS_ORDERED_SYMBOL } from './predicates/isOrdered'; -import { - Iterator, - iteratorValue, - iteratorDone, - hasIterator, - isIterator, - getIterator, - isEntriesIterable, - isKeysIterable, -} from './Iterator'; - -import hasOwnProperty from './utils/hasOwnProperty'; -import isArrayLike from './utils/isArrayLike'; - -export class Seq extends Collection { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptySequence() - : isImmutable(value) - ? value.toSeq() - : seqFromValue(value); - } - - toSeq() { - return this; - } - - toString() { - return this.__toString('Seq {', '}'); - } - - cacheResult() { - if (!this._cache && this.__iterateUncached) { - this._cache = this.entrySeq().toArray(); - this.size = this._cache.length; - } - return this; - } - - // abstract __iterateUncached(fn, reverse) - - __iterate(fn, reverse) { - const cache = this._cache; - if (cache) { - const size = cache.length; - let i = 0; - while (i !== size) { - const entry = cache[reverse ? size - ++i : i++]; - if (fn(entry[1], entry[0], this) === false) { - break; - } - } - return i; - } - return this.__iterateUncached(fn, reverse); - } - - // abstract __iteratorUncached(type, reverse) - - __iterator(type, reverse) { - const cache = this._cache; - if (cache) { - const size = cache.length; - let i = 0; - return new Iterator(() => { - if (i === size) { - return iteratorDone(); - } - const entry = cache[reverse ? size - ++i : i++]; - return iteratorValue(type, entry[0], entry[1]); - }); - } - return this.__iteratorUncached(type, reverse); - } -} - -export class KeyedSeq extends Seq { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptySequence().toKeyedSeq() - : isCollection(value) - ? isKeyed(value) - ? value.toSeq() - : value.fromEntrySeq() - : isRecord(value) - ? value.toSeq() - : keyedSeqFromValue(value); - } - - toKeyedSeq() { - return this; - } -} - -export class IndexedSeq extends Seq { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptySequence() - : isCollection(value) - ? isKeyed(value) - ? value.entrySeq() - : value.toIndexedSeq() - : isRecord(value) - ? value.toSeq().entrySeq() - : indexedSeqFromValue(value); - } - - static of(/*...values*/) { - return IndexedSeq(arguments); - } - - toIndexedSeq() { - return this; - } - - toString() { - return this.__toString('Seq [', ']'); - } -} - -export class SetSeq extends Seq { - constructor(value) { - // eslint-disable-next-line no-constructor-return - return ( - isCollection(value) && !isAssociative(value) ? value : IndexedSeq(value) - ).toSetSeq(); - } - - static of(/*...values*/) { - return SetSeq(arguments); - } - - toSetSeq() { - return this; - } -} - -Seq.isSeq = isSeq; -Seq.Keyed = KeyedSeq; -Seq.Set = SetSeq; -Seq.Indexed = IndexedSeq; - -Seq.prototype[IS_SEQ_SYMBOL] = true; - -// #pragma Root Sequences - -export class ArraySeq extends IndexedSeq { - constructor(array) { - this._array = array; - this.size = array.length; - } - - get(index, notSetValue) { - return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue; - } - - __iterate(fn, reverse) { - const array = this._array; - const size = array.length; - let i = 0; - while (i !== size) { - const ii = reverse ? size - ++i : i++; - if (fn(array[ii], ii, this) === false) { - break; - } - } - return i; - } - - __iterator(type, reverse) { - const array = this._array; - const size = array.length; - let i = 0; - return new Iterator(() => { - if (i === size) { - return iteratorDone(); - } - const ii = reverse ? size - ++i : i++; - return iteratorValue(type, ii, array[ii]); - }); - } -} - -class ObjectSeq extends KeyedSeq { - constructor(object) { - const keys = Object.keys(object).concat( - Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : [] - ); - this._object = object; - this._keys = keys; - this.size = keys.length; - } - - get(key, notSetValue) { - if (notSetValue !== undefined && !this.has(key)) { - return notSetValue; - } - return this._object[key]; - } - - has(key) { - return hasOwnProperty.call(this._object, key); - } - - __iterate(fn, reverse) { - const object = this._object; - const keys = this._keys; - const size = keys.length; - let i = 0; - while (i !== size) { - const key = keys[reverse ? size - ++i : i++]; - if (fn(object[key], key, this) === false) { - break; - } - } - return i; - } - - __iterator(type, reverse) { - const object = this._object; - const keys = this._keys; - const size = keys.length; - let i = 0; - return new Iterator(() => { - if (i === size) { - return iteratorDone(); - } - const key = keys[reverse ? size - ++i : i++]; - return iteratorValue(type, key, object[key]); - }); - } -} -ObjectSeq.prototype[IS_ORDERED_SYMBOL] = true; - -class CollectionSeq extends IndexedSeq { - constructor(collection) { - this._collection = collection; - this.size = collection.length || collection.size; - } - - __iterateUncached(fn, reverse) { - if (reverse) { - return this.cacheResult().__iterate(fn, reverse); - } - const collection = this._collection; - const iterator = getIterator(collection); - let iterations = 0; - if (isIterator(iterator)) { - let step; - while (!(step = iterator.next()).done) { - if (fn(step.value, iterations++, this) === false) { - break; - } - } - } - return iterations; - } - - __iteratorUncached(type, reverse) { - if (reverse) { - return this.cacheResult().__iterator(type, reverse); - } - const collection = this._collection; - const iterator = getIterator(collection); - if (!isIterator(iterator)) { - return new Iterator(iteratorDone); - } - let iterations = 0; - return new Iterator(() => { - const step = iterator.next(); - return step.done ? step : iteratorValue(type, iterations++, step.value); - }); - } -} - -// # pragma Helper functions - -let EMPTY_SEQ; - -function emptySequence() { - return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([])); -} - -export function keyedSeqFromValue(value) { - const seq = maybeIndexedSeqFromValue(value); - if (seq) { - return seq.fromEntrySeq(); - } - if (typeof value === 'object') { - return new ObjectSeq(value); - } - throw new TypeError( - 'Expected Array or collection object of [k, v] entries, or keyed object: ' + - value - ); -} - -export function indexedSeqFromValue(value) { - const seq = maybeIndexedSeqFromValue(value); - if (seq) { - return seq; - } - throw new TypeError( - 'Expected Array or collection object of values: ' + value - ); -} - -function seqFromValue(value) { - const seq = maybeIndexedSeqFromValue(value); - if (seq) { - return isEntriesIterable(value) - ? seq.fromEntrySeq() - : isKeysIterable(value) - ? seq.toSetSeq() - : seq; - } - if (typeof value === 'object') { - return new ObjectSeq(value); - } - throw new TypeError( - 'Expected Array or collection object of values, or keyed object: ' + value - ); -} - -function maybeIndexedSeqFromValue(value) { - return isArrayLike(value) - ? new ArraySeq(value) - : hasIterator(value) - ? new CollectionSeq(value) - : undefined; -} diff --git a/src/Set.js b/src/Set.js deleted file mode 100644 index cc42bc10f7..0000000000 --- a/src/Set.js +++ /dev/null @@ -1,235 +0,0 @@ -import { Collection, SetCollection, KeyedCollection } from './Collection'; -import { isOrdered } from './predicates/isOrdered'; -import { IS_SET_SYMBOL, isSet } from './predicates/isSet'; -import { emptyMap } from './Map'; -import { DELETE } from './TrieUtils'; -import { sortFactory } from './Operations'; -import assertNotInfinite from './utils/assertNotInfinite'; -import { asImmutable } from './methods/asImmutable'; -import { asMutable } from './methods/asMutable'; -import { withMutations } from './methods/withMutations'; - -import { OrderedSet } from './OrderedSet'; - -export class Set extends SetCollection { - // @pragma Construction - - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptySet() - : isSet(value) && !isOrdered(value) - ? value - : emptySet().withMutations((set) => { - const iter = SetCollection(value); - assertNotInfinite(iter.size); - iter.forEach((v) => set.add(v)); - }); - } - - static of(/*...values*/) { - return this(arguments); - } - - static fromKeys(value) { - return this(KeyedCollection(value).keySeq()); - } - - static intersect(sets) { - sets = Collection(sets).toArray(); - return sets.length - ? SetPrototype.intersect.apply(Set(sets.pop()), sets) - : emptySet(); - } - - static union(sets) { - sets = Collection(sets).toArray(); - return sets.length - ? SetPrototype.union.apply(Set(sets.pop()), sets) - : emptySet(); - } - - toString() { - return this.__toString('Set {', '}'); - } - - // @pragma Access - - has(value) { - return this._map.has(value); - } - - // @pragma Modification - - add(value) { - return updateSet(this, this._map.set(value, value)); - } - - remove(value) { - return updateSet(this, this._map.remove(value)); - } - - clear() { - return updateSet(this, this._map.clear()); - } - - // @pragma Composition - - map(mapper, context) { - // keep track if the set is altered by the map function - let didChanges = false; - - const newMap = updateSet( - this, - this._map.mapEntries(([, v]) => { - const mapped = mapper.call(context, v, v, this); - - if (mapped !== v) { - didChanges = true; - } - - return [mapped, mapped]; - }, context) - ); - - return didChanges ? newMap : this; - } - - union(...iters) { - iters = iters.filter((x) => x.size !== 0); - if (iters.length === 0) { - return this; - } - if (this.size === 0 && !this.__ownerID && iters.length === 1) { - return this.constructor(iters[0]); - } - return this.withMutations((set) => { - for (let ii = 0; ii < iters.length; ii++) { - if (typeof iters[ii] === 'string') { - set.add(iters[ii]); - } else { - SetCollection(iters[ii]).forEach((value) => set.add(value)); - } - } - }); - } - - intersect(...iters) { - if (iters.length === 0) { - return this; - } - iters = iters.map((iter) => SetCollection(iter)); - const toRemove = []; - this.forEach((value) => { - if (!iters.every((iter) => iter.includes(value))) { - toRemove.push(value); - } - }); - return this.withMutations((set) => { - toRemove.forEach((value) => { - set.remove(value); - }); - }); - } - - subtract(...iters) { - if (iters.length === 0) { - return this; - } - iters = iters.map((iter) => SetCollection(iter)); - const toRemove = []; - this.forEach((value) => { - if (iters.some((iter) => iter.includes(value))) { - toRemove.push(value); - } - }); - return this.withMutations((set) => { - toRemove.forEach((value) => { - set.remove(value); - }); - }); - } - - sort(comparator) { - // Late binding - return OrderedSet(sortFactory(this, comparator)); - } - - sortBy(mapper, comparator) { - // Late binding - return OrderedSet(sortFactory(this, comparator, mapper)); - } - - wasAltered() { - return this._map.wasAltered(); - } - - __iterate(fn, reverse) { - return this._map.__iterate((k) => fn(k, k, this), reverse); - } - - __iterator(type, reverse) { - return this._map.__iterator(type, reverse); - } - - __ensureOwner(ownerID) { - if (ownerID === this.__ownerID) { - return this; - } - const newMap = this._map.__ensureOwner(ownerID); - if (!ownerID) { - if (this.size === 0) { - return this.__empty(); - } - this.__ownerID = ownerID; - this._map = newMap; - return this; - } - return this.__make(newMap, ownerID); - } -} - -Set.isSet = isSet; - -const SetPrototype = Set.prototype; -SetPrototype[IS_SET_SYMBOL] = true; -SetPrototype[DELETE] = SetPrototype.remove; -SetPrototype.merge = SetPrototype.concat = SetPrototype.union; -SetPrototype.withMutations = withMutations; -SetPrototype.asImmutable = asImmutable; -SetPrototype['@@transducer/init'] = SetPrototype.asMutable = asMutable; -SetPrototype['@@transducer/step'] = function (result, arr) { - return result.add(arr); -}; -SetPrototype['@@transducer/result'] = function (obj) { - return obj.asImmutable(); -}; - -SetPrototype.__empty = emptySet; -SetPrototype.__make = makeSet; - -function updateSet(set, newMap) { - if (set.__ownerID) { - set.size = newMap.size; - set._map = newMap; - return set; - } - return newMap === set._map - ? set - : newMap.size === 0 - ? set.__empty() - : set.__make(newMap); -} - -function makeSet(map, ownerID) { - const set = Object.create(SetPrototype); - set.size = map ? map.size : 0; - set._map = map; - set.__ownerID = ownerID; - return set; -} - -let EMPTY_SET; -function emptySet() { - return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap())); -} diff --git a/src/Stack.js b/src/Stack.js deleted file mode 100644 index 32414fa3a0..0000000000 --- a/src/Stack.js +++ /dev/null @@ -1,227 +0,0 @@ -import { wholeSlice, resolveBegin, resolveEnd, wrapIndex } from './TrieUtils'; -import { IndexedCollection } from './Collection'; -import { ArraySeq } from './Seq'; -import { Iterator, iteratorValue, iteratorDone } from './Iterator'; -import { IS_STACK_SYMBOL, isStack } from './predicates/isStack'; -import assertNotInfinite from './utils/assertNotInfinite'; -import { asImmutable } from './methods/asImmutable'; -import { asMutable } from './methods/asMutable'; -import { wasAltered } from './methods/wasAltered'; -import { withMutations } from './methods/withMutations'; - -export class Stack extends IndexedCollection { - // @pragma Construction - - constructor(value) { - // eslint-disable-next-line no-constructor-return - return value === undefined || value === null - ? emptyStack() - : isStack(value) - ? value - : emptyStack().pushAll(value); - } - - static of(/*...values*/) { - return this(arguments); - } - - toString() { - return this.__toString('Stack [', ']'); - } - - // @pragma Access - - get(index, notSetValue) { - let head = this._head; - index = wrapIndex(this, index); - while (head && index--) { - head = head.next; - } - return head ? head.value : notSetValue; - } - - peek() { - return this._head && this._head.value; - } - - // @pragma Modification - - push(/*...values*/) { - if (arguments.length === 0) { - return this; - } - const newSize = this.size + arguments.length; - let head = this._head; - for (let ii = arguments.length - 1; ii >= 0; ii--) { - head = { - value: arguments[ii], - next: head, - }; - } - if (this.__ownerID) { - this.size = newSize; - this._head = head; - this.__hash = undefined; - this.__altered = true; - return this; - } - return makeStack(newSize, head); - } - - pushAll(iter) { - iter = IndexedCollection(iter); - if (iter.size === 0) { - return this; - } - if (this.size === 0 && isStack(iter)) { - return iter; - } - assertNotInfinite(iter.size); - let newSize = this.size; - let head = this._head; - iter.__iterate((value) => { - newSize++; - head = { - value: value, - next: head, - }; - }, /* reverse */ true); - if (this.__ownerID) { - this.size = newSize; - this._head = head; - this.__hash = undefined; - this.__altered = true; - return this; - } - return makeStack(newSize, head); - } - - pop() { - return this.slice(1); - } - - clear() { - if (this.size === 0) { - return this; - } - if (this.__ownerID) { - this.size = 0; - this._head = undefined; - this.__hash = undefined; - this.__altered = true; - return this; - } - return emptyStack(); - } - - slice(begin, end) { - if (wholeSlice(begin, end, this.size)) { - return this; - } - let resolvedBegin = resolveBegin(begin, this.size); - const resolvedEnd = resolveEnd(end, this.size); - if (resolvedEnd !== this.size) { - // super.slice(begin, end); - return IndexedCollection.prototype.slice.call(this, begin, end); - } - const newSize = this.size - resolvedBegin; - let head = this._head; - while (resolvedBegin--) { - head = head.next; - } - if (this.__ownerID) { - this.size = newSize; - this._head = head; - this.__hash = undefined; - this.__altered = true; - return this; - } - return makeStack(newSize, head); - } - - // @pragma Mutability - - __ensureOwner(ownerID) { - if (ownerID === this.__ownerID) { - return this; - } - if (!ownerID) { - if (this.size === 0) { - return emptyStack(); - } - this.__ownerID = ownerID; - this.__altered = false; - return this; - } - return makeStack(this.size, this._head, ownerID, this.__hash); - } - - // @pragma Iteration - - __iterate(fn, reverse) { - if (reverse) { - return new ArraySeq(this.toArray()).__iterate( - (v, k) => fn(v, k, this), - reverse - ); - } - let iterations = 0; - let node = this._head; - while (node) { - if (fn(node.value, iterations++, this) === false) { - break; - } - node = node.next; - } - return iterations; - } - - __iterator(type, reverse) { - if (reverse) { - return new ArraySeq(this.toArray()).__iterator(type, reverse); - } - let iterations = 0; - let node = this._head; - return new Iterator(() => { - if (node) { - const value = node.value; - node = node.next; - return iteratorValue(type, iterations++, value); - } - return iteratorDone(); - }); - } -} - -Stack.isStack = isStack; - -const StackPrototype = Stack.prototype; -StackPrototype[IS_STACK_SYMBOL] = true; -StackPrototype.shift = StackPrototype.pop; -StackPrototype.unshift = StackPrototype.push; -StackPrototype.unshiftAll = StackPrototype.pushAll; -StackPrototype.withMutations = withMutations; -StackPrototype.wasAltered = wasAltered; -StackPrototype.asImmutable = asImmutable; -StackPrototype['@@transducer/init'] = StackPrototype.asMutable = asMutable; -StackPrototype['@@transducer/step'] = function (result, arr) { - return result.unshift(arr); -}; -StackPrototype['@@transducer/result'] = function (obj) { - return obj.asImmutable(); -}; - -function makeStack(size, head, ownerID, hash) { - const map = Object.create(StackPrototype); - map.size = size; - map._head = head; - map.__ownerID = ownerID; - map.__hash = hash; - map.__altered = false; - return map; -} - -let EMPTY_STACK; -function emptyStack() { - return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); -} diff --git a/src/TrieUtils.ts b/src/TrieUtils.ts deleted file mode 100644 index d5c75c179b..0000000000 --- a/src/TrieUtils.ts +++ /dev/null @@ -1,105 +0,0 @@ -import type { Collection } from '../type-definitions/immutable'; - -// Used for setting prototype methods that IE8 chokes on. -export const DELETE = 'delete'; - -// Constants describing the size of trie nodes. -export const SHIFT = 5; // Resulted in best performance after ______? -export const SIZE = 1 << SHIFT; -export const MASK = SIZE - 1; - -// A consistent shared value representing "not set" which equals nothing other -// than itself, and nothing that could be provided externally. -export const NOT_SET = {}; - -type Ref = { value: boolean }; - -// Boolean references, Rough equivalent of `bool &`. -export function MakeRef(): Ref { - return { value: false }; -} - -export function SetRef(ref: Ref): void { - if (ref) { - ref.value = true; - } -} - -// A function which returns a value representing an "owner" for transient writes -// to tries. The return value will only ever equal itself, and will not equal -// the return of any subsequent call of this function. -export function OwnerID() {} - -export function ensureSize(iter: Collection): number { - // @ts-expect-error size should exists on Collection - if (iter.size === undefined) { - // @ts-expect-error size should exists on Collection, __iterate does exist on Collection - iter.size = iter.__iterate(returnTrue); - } - // @ts-expect-error size should exists on Collection - return iter.size; -} - -export function wrapIndex( - iter: Collection, - index: number -): number { - // This implements "is array index" which the ECMAString spec defines as: - // - // A String property name P is an array index if and only if - // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal - // to 2^32−1. - // - // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects - if (typeof index !== 'number') { - const uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32 - if ('' + uint32Index !== index || uint32Index === 4294967295) { - return NaN; - } - index = uint32Index; - } - return index < 0 ? ensureSize(iter) + index : index; -} - -export function returnTrue(): true { - return true; -} - -export function wholeSlice(begin: number, end: number, size: number): boolean { - return ( - ((begin === 0 && !isNeg(begin)) || - (size !== undefined && begin <= -size)) && - (end === undefined || (size !== undefined && end >= size)) - ); -} - -export function resolveBegin(begin: number, size: number): number { - return resolveIndex(begin, size, 0); -} - -export function resolveEnd(end: number, size: number): number { - return resolveIndex(end, size, size); -} - -function resolveIndex( - index: number, - size: number, - defaultIndex: number -): number { - // Sanitize indices using this shorthand for ToInt32(argument) - // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 - return index === undefined - ? defaultIndex - : isNeg(index) - ? size === Infinity - ? size - : Math.max(0, size + index) | 0 - : size === undefined || size === index - ? index - : Math.min(size, index) | 0; -} - -function isNeg(value: number): boolean { - // Account for -0 which is negative, but not less than 0. - return value < 0 || (value === 0 && 1 / value === -Infinity); -} diff --git a/src/fromJS.js b/src/fromJS.js deleted file mode 100644 index 7586c12a58..0000000000 --- a/src/fromJS.js +++ /dev/null @@ -1,51 +0,0 @@ -import { Seq } from './Seq'; -import { hasIterator } from './Iterator'; -import { isImmutable } from './predicates/isImmutable'; -import { isIndexed } from './predicates/isIndexed'; -import { isKeyed } from './predicates/isKeyed'; -import isArrayLike from './utils/isArrayLike'; -import isPlainObj from './utils/isPlainObj'; - -export function fromJS(value, converter) { - return fromJSWith( - [], - converter || defaultConverter, - value, - '', - converter && converter.length > 2 ? [] : undefined, - { '': value } - ); -} - -function fromJSWith(stack, converter, value, key, keyPath, parentValue) { - if ( - typeof value !== 'string' && - !isImmutable(value) && - (isArrayLike(value) || hasIterator(value) || isPlainObj(value)) - ) { - if (~stack.indexOf(value)) { - throw new TypeError('Cannot convert circular structure to Immutable'); - } - stack.push(value); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - keyPath && key !== '' && keyPath.push(key); - const converted = converter.call( - parentValue, - key, - Seq(value).map((v, k) => - fromJSWith(stack, converter, v, k, keyPath, value) - ), - keyPath && keyPath.slice() - ); - stack.pop(); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - keyPath && keyPath.pop(); - return converted; - } - return value; -} - -function defaultConverter(k, v) { - // Effectively the opposite of "Collection.toSeq()" - return isIndexed(v) ? v.toList() : isKeyed(v) ? v.toMap() : v.toSet(); -} diff --git a/src/functional/get.ts b/src/functional/get.ts deleted file mode 100644 index e6306b8f58..0000000000 --- a/src/functional/get.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { Collection, Record } from '../../type-definitions/immutable'; -import { isImmutable } from '../predicates/isImmutable'; -import { has } from './has'; - -/** - * Returns the value within the provided collection associated with the - * provided key, or notSetValue if the key is not defined in the collection. - * - * A functional alternative to `collection.get(key)` which will also work on - * plain Objects and Arrays as an alternative for `collection[key]`. - * - * - * ```js - * import { get } from 'immutable'; - * - * get([ 'dog', 'frog', 'cat' ], 1) // 'frog' - * get({ x: 123, y: 456 }, 'x') // 123 - * get({ x: 123, y: 456 }, 'z', 'ifNotSet') // 'ifNotSet' - * ``` - */ -export function get(collection: Collection, key: K): V | undefined; -export function get( - collection: Collection, - key: K, - notSetValue: NSV -): V | NSV; -export function get( - record: Record, - key: K, - notSetValue: unknown -): TProps[K]; -export function get(collection: Array, key: number): V | undefined; -export function get( - collection: Array, - key: number, - notSetValue: NSV -): V | NSV; -export function get( - object: C, - key: K, - notSetValue: unknown -): C[K]; -export function get( - collection: { [key: string]: V }, - key: string -): V | undefined; -export function get( - collection: { [key: string]: V }, - key: string, - notSetValue: NSV -): V | NSV; -export function get( - collection: Collection | Array | { [key: string]: V }, - key: K, - notSetValue?: NSV -): V | NSV; -export function get( - collection: Collection | Array | { [key: string]: V }, - key: K, - notSetValue?: NSV -): V | NSV { - return isImmutable(collection) - ? collection.get(key, notSetValue) - : !has(collection, key) - ? notSetValue - : // @ts-expect-error weird "get" here, - typeof collection.get === 'function' - ? // @ts-expect-error weird "get" here, - collection.get(key) - : // @ts-expect-error key is unknown here, - collection[key]; -} diff --git a/src/functional/getIn.ts b/src/functional/getIn.ts deleted file mode 100644 index 11f9cdf384..0000000000 --- a/src/functional/getIn.ts +++ /dev/null @@ -1,41 +0,0 @@ -import coerceKeyPath from '../utils/coerceKeyPath'; -import { NOT_SET } from '../TrieUtils'; -import { get } from './get'; -import type { KeyPath } from '../../type-definitions/immutable'; - -type GetType = typeof get; -type GetTypeParameters = Parameters; -type CollectionType = GetTypeParameters[0]; -type Key = GetTypeParameters[1]; - -/** - * Returns the value at the provided key path starting at the provided - * collection, or notSetValue if the key path is not defined. - * - * A functional alternative to `collection.getIn(keypath)` which will also - * work with plain Objects and Arrays. - * - * - * ```js - * import { getIn } from 'immutable'; - * - * getIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // 123 - * getIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p'], 'ifNotSet') // 'ifNotSet' - * ``` - */ -export function getIn( - collection: CollectionType, - searchKeyPath: KeyPath, - notSetValue?: GetTypeParameters[2] -): ReturnType { - const keyPath = coerceKeyPath(searchKeyPath); - let i = 0; - while (i !== keyPath.length) { - // @ts-expect-error keyPath[i++] can not be undefined by design - collection = get(collection, keyPath[i++], NOT_SET); - if (collection === NOT_SET) { - return notSetValue; - } - } - return collection; -} diff --git a/src/functional/has.ts b/src/functional/has.ts deleted file mode 100644 index 322370314e..0000000000 --- a/src/functional/has.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { isImmutable } from '../predicates/isImmutable'; -import hasOwnProperty from '../utils/hasOwnProperty'; -import isDataStructure from '../utils/isDataStructure'; - -/** - * Returns true if the key is defined in the provided collection. - * - * A functional alternative to `collection.has(key)` which will also work with - * plain Objects and Arrays as an alternative for - * `collection.hasOwnProperty(key)`. - * - * - * ```js - * import { has } from 'immutable'; - * - * has([ 'dog', 'frog', 'cat' ], 2) // true - * has([ 'dog', 'frog', 'cat' ], 5) // false - * has({ x: 123, y: 456 }, 'x') // true - * has({ x: 123, y: 456 }, 'z') // false - * ``` - */ -export function has(collection: object, key: unknown): boolean { - return isImmutable(collection) - ? // @ts-expect-error key might be a number or symbol, which is not handled be Record key type - collection.has(key) - : // @ts-expect-error key might be anything else than PropertyKey, and will return false in that case but runtime is OK - isDataStructure(collection) && hasOwnProperty.call(collection, key); -} diff --git a/src/functional/hasIn.ts b/src/functional/hasIn.ts deleted file mode 100644 index 28041a7323..0000000000 --- a/src/functional/hasIn.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { getIn } from './getIn'; -import { NOT_SET } from '../TrieUtils'; - -type GetInParameters = Parameters; - -/** - * Returns true if the key path is defined in the provided collection. - * - * A functional alternative to `collection.hasIn(keypath)` which will also - * work with plain Objects and Arrays. - * - * - * ```js - * import { hasIn } from 'immutable'; - * - * hasIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // true - * hasIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p']) // false - * ``` - */ -export function hasIn( - collection: GetInParameters[0], - keyPath: GetInParameters[1] -): boolean { - return getIn(collection, keyPath, NOT_SET) !== NOT_SET; -} diff --git a/src/functional/merge.js b/src/functional/merge.js deleted file mode 100644 index b2d231a0c9..0000000000 --- a/src/functional/merge.js +++ /dev/null @@ -1,99 +0,0 @@ -import { isImmutable } from '../predicates/isImmutable'; -import { isIndexed } from '../predicates/isIndexed'; -import { isKeyed } from '../predicates/isKeyed'; -import { IndexedCollection, KeyedCollection } from '../Collection'; -import { Seq } from '../Seq'; -import hasOwnProperty from '../utils/hasOwnProperty'; -import isDataStructure from '../utils/isDataStructure'; -import shallowCopy from '../utils/shallowCopy'; - -export function merge(collection, ...sources) { - return mergeWithSources(collection, sources); -} - -export function mergeWith(merger, collection, ...sources) { - return mergeWithSources(collection, sources, merger); -} - -export function mergeDeep(collection, ...sources) { - return mergeDeepWithSources(collection, sources); -} - -export function mergeDeepWith(merger, collection, ...sources) { - return mergeDeepWithSources(collection, sources, merger); -} - -export function mergeDeepWithSources(collection, sources, merger) { - return mergeWithSources(collection, sources, deepMergerWith(merger)); -} - -export function mergeWithSources(collection, sources, merger) { - if (!isDataStructure(collection)) { - throw new TypeError( - 'Cannot merge into non-data-structure value: ' + collection - ); - } - if (isImmutable(collection)) { - return typeof merger === 'function' && collection.mergeWith - ? collection.mergeWith(merger, ...sources) - : collection.merge - ? collection.merge(...sources) - : collection.concat(...sources); - } - const isArray = Array.isArray(collection); - let merged = collection; - const Collection = isArray ? IndexedCollection : KeyedCollection; - const mergeItem = isArray - ? (value) => { - // Copy on write - if (merged === collection) { - merged = shallowCopy(merged); - } - merged.push(value); - } - : (value, key) => { - const hasVal = hasOwnProperty.call(merged, key); - const nextVal = - hasVal && merger ? merger(merged[key], value, key) : value; - if (!hasVal || nextVal !== merged[key]) { - // Copy on write - if (merged === collection) { - merged = shallowCopy(merged); - } - merged[key] = nextVal; - } - }; - for (let i = 0; i < sources.length; i++) { - Collection(sources[i]).forEach(mergeItem); - } - return merged; -} - -function deepMergerWith(merger) { - function deepMerger(oldValue, newValue, key) { - return isDataStructure(oldValue) && - isDataStructure(newValue) && - areMergeable(oldValue, newValue) - ? mergeWithSources(oldValue, [newValue], deepMerger) - : merger - ? merger(oldValue, newValue, key) - : newValue; - } - return deepMerger; -} - -/** - * It's unclear what the desired behavior is for merging two collections that - * fall into separate categories between keyed, indexed, or set-like, so we only - * consider them mergeable if they fall into the same category. - */ -function areMergeable(oldDataStructure, newDataStructure) { - const oldSeq = Seq(oldDataStructure); - const newSeq = Seq(newDataStructure); - // This logic assumes that a sequence can only fall into one of the three - // categories mentioned above (since there's no `isSetLike()` method). - return ( - isIndexed(oldSeq) === isIndexed(newSeq) && - isKeyed(oldSeq) === isKeyed(newSeq) - ); -} diff --git a/src/functional/remove.ts b/src/functional/remove.ts deleted file mode 100644 index 60aff0fa36..0000000000 --- a/src/functional/remove.ts +++ /dev/null @@ -1,83 +0,0 @@ -import type { Collection, Record } from '../../type-definitions/immutable'; -import { isImmutable } from '../predicates/isImmutable'; -import hasOwnProperty from '../utils/hasOwnProperty'; -import isDataStructure from '../utils/isDataStructure'; -import shallowCopy from '../utils/shallowCopy'; - -/** - * Returns a copy of the collection with the value at key removed. - * - * A functional alternative to `collection.remove(key)` which will also work - * with plain Objects and Arrays as an alternative for - * `delete collectionCopy[key]`. - * - * - * ```js - * import { remove } from 'immutable'; - * - * const originalArray = [ 'dog', 'frog', 'cat' ] - * remove(originalArray, 1) // [ 'dog', 'cat' ] - * console.log(originalArray) // [ 'dog', 'frog', 'cat' ] - * const originalObject = { x: 123, y: 456 } - * remove(originalObject, 'x') // { y: 456 } - * console.log(originalObject) // { x: 123, y: 456 } - * ``` - */ -export function remove>( - collection: C, - key: K -): C; -export function remove< - TProps extends object, - C extends Record, - K extends keyof TProps, ->(collection: C, key: K): C; -export function remove>(collection: C, key: number): C; -export function remove(collection: C, key: K): C; -export function remove< - C extends { [key: PropertyKey]: unknown }, - K extends keyof C, ->(collection: C, key: K): C; -export function remove< - K, - C extends - | Collection - | Array - | { [key: PropertyKey]: unknown }, ->(collection: C, key: K): C; -export function remove( - collection: - | Collection - | Array - | { [key: PropertyKey]: unknown }, - key: K -) { - if (!isDataStructure(collection)) { - throw new TypeError( - 'Cannot update non-data-structure value: ' + collection - ); - } - if (isImmutable(collection)) { - // @ts-expect-error weird "remove" here, - if (!collection.remove) { - throw new TypeError( - 'Cannot update immutable value without .remove() method: ' + collection - ); - } - // @ts-expect-error weird "remove" here, - return collection.remove(key); - } - // @ts-expect-error assert that key is a string, a number or a symbol here - if (!hasOwnProperty.call(collection, key)) { - return collection; - } - const collectionCopy = shallowCopy(collection); - if (Array.isArray(collectionCopy)) { - // @ts-expect-error assert that key is a number here - collectionCopy.splice(key, 1); - } else { - // @ts-expect-error assert that key is a string, a number or a symbol here - delete collectionCopy[key]; - } - return collectionCopy; -} diff --git a/src/functional/removeIn.ts b/src/functional/removeIn.ts deleted file mode 100644 index 3b97be0dcd..0000000000 --- a/src/functional/removeIn.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { updateIn, type PossibleCollection } from './updateIn'; -import { NOT_SET } from '../TrieUtils'; -import type { KeyPath } from '../../type-definitions/immutable'; - -/** - * Returns a copy of the collection with the value at the key path removed. - * - * A functional alternative to `collection.removeIn(keypath)` which will also - * work with plain Objects and Arrays. - * - * - * ```js - * import { removeIn } from 'immutable'; - * - * const original = { x: { y: { z: 123 }}} - * removeIn(original, ['x', 'y', 'z']) // { x: { y: {}}} - * console.log(original) // { x: { y: { z: 123 }}} - * ``` - */ -export function removeIn< - K extends PropertyKey, - V, - TProps extends object, - C extends PossibleCollection, ->(collection: C, keyPath: KeyPath): C { - return updateIn(collection, keyPath, () => NOT_SET); -} diff --git a/src/functional/set.ts b/src/functional/set.ts deleted file mode 100644 index e8e688abd0..0000000000 --- a/src/functional/set.ts +++ /dev/null @@ -1,76 +0,0 @@ -import type { Collection, Record } from '../../type-definitions/immutable'; -import { isImmutable } from '../predicates/isImmutable'; -import hasOwnProperty from '../utils/hasOwnProperty'; -import isDataStructure from '../utils/isDataStructure'; -import shallowCopy from '../utils/shallowCopy'; - -/** - * Returns a copy of the collection with the value at key set to the provided - * value. - * - * A functional alternative to `collection.set(key, value)` which will also - * work with plain Objects and Arrays as an alternative for - * `collectionCopy[key] = value`. - * - * - * ```js - * import { set } from 'immutable'; - * - * const originalArray = [ 'dog', 'frog', 'cat' ] - * set(originalArray, 1, 'cow') // [ 'dog', 'cow', 'cat' ] - * console.log(originalArray) // [ 'dog', 'frog', 'cat' ] - * const originalObject = { x: 123, y: 456 } - * set(originalObject, 'x', 789) // { x: 789, y: 456 } - * console.log(originalObject) // { x: 123, y: 456 } - * ``` - */ -export function set>( - collection: C, - key: K, - value: V -): C; -export function set< - TProps extends object, - C extends Record, - K extends keyof TProps, ->(record: C, key: K, value: TProps[K]): C; -export function set>( - collection: C, - key: number, - value: V -): C; -export function set(object: C, key: K, value: C[K]): C; -export function set( - collection: C, - key: string, - value: V -): C; -export function set | { [key: string]: V }>( - collection: C, - key: K | string, - value: V -): C { - if (!isDataStructure(collection)) { - throw new TypeError( - 'Cannot update non-data-structure value: ' + collection - ); - } - if (isImmutable(collection)) { - // @ts-expect-error weird "set" here, - if (!collection.set) { - throw new TypeError( - 'Cannot update immutable value without .set() method: ' + collection - ); - } - // @ts-expect-error weird "set" here, - return collection.set(key, value); - } - // @ts-expect-error mix of key and string here. Probably need a more fine type here - if (hasOwnProperty.call(collection, key) && value === collection[key]) { - return collection; - } - const collectionCopy = shallowCopy(collection); - // @ts-expect-error mix of key and string here. Probably need a more fine type here - collectionCopy[key] = value; - return collectionCopy; -} diff --git a/src/functional/setIn.ts b/src/functional/setIn.ts deleted file mode 100644 index 7955e3e38d..0000000000 --- a/src/functional/setIn.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { updateIn, type PossibleCollection } from './updateIn'; -import { NOT_SET } from '../TrieUtils'; -import type { KeyPath } from '../../type-definitions/immutable'; - -/** - * Returns a copy of the collection with the value at the key path set to the - * provided value. - * - * A functional alternative to `collection.setIn(keypath)` which will also - * work with plain Objects and Arrays. - * - * - * ```js - * import { setIn } from 'immutable'; - * - * const original = { x: { y: { z: 123 }}} - * setIn(original, ['x', 'y', 'z'], 456) // { x: { y: { z: 456 }}} - * console.log(original) // { x: { y: { z: 123 }}} - * ``` - */ -export function setIn< - K extends PropertyKey, - V, - TProps extends object, - C extends PossibleCollection, ->(collection: C, keyPath: KeyPath, value: unknown): C { - return updateIn(collection, keyPath, NOT_SET, () => value); -} diff --git a/src/functional/update.ts b/src/functional/update.ts deleted file mode 100644 index 81d5426539..0000000000 --- a/src/functional/update.ts +++ /dev/null @@ -1,112 +0,0 @@ -import type { Collection, Record } from '../../type-definitions/immutable'; -import { updateIn, type PossibleCollection } from './updateIn'; - -type UpdaterFunction = (value: V | undefined) => V | undefined; -type UpdaterFunctionWithNSV = (value: V | NSV) => V; - -/** - * Returns a copy of the collection with the value at key set to the result of - * providing the existing value to the updating function. - * - * A functional alternative to `collection.update(key, fn)` which will also - * work with plain Objects and Arrays as an alternative for - * `collectionCopy[key] = fn(collection[key])`. - * - * - * ```js - * import { update } from 'immutable'; - * - * const originalArray = [ 'dog', 'frog', 'cat' ] - * update(originalArray, 1, val => val.toUpperCase()) // [ 'dog', 'FROG', 'cat' ] - * console.log(originalArray) // [ 'dog', 'frog', 'cat' ] - * const originalObject = { x: 123, y: 456 } - * update(originalObject, 'x', val => val * 6) // { x: 738, y: 456 } - * console.log(originalObject) // { x: 123, y: 456 } - * ``` - */ -export function update>( - collection: C, - key: K, - updater: (value: V | undefined) => V | undefined -): C; -export function update, NSV>( - collection: C, - key: K, - notSetValue: NSV, - updater: (value: V | NSV) => V -): C; -export function update< - TProps extends object, - C extends Record, - K extends keyof TProps, ->(record: C, key: K, updater: (value: TProps[K]) => TProps[K]): C; -export function update< - TProps extends object, - C extends Record, - K extends keyof TProps, - NSV, ->( - record: C, - key: K, - notSetValue: NSV, - updater: (value: TProps[K] | NSV) => TProps[K] -): C; -export function update>( - collection: C, - key: number, - updater: UpdaterFunction -): C; -export function update, NSV>( - collection: C, - key: number, - notSetValue: NSV, - updater: (value: V | NSV) => V -): C; -export function update( - object: C, - key: K, - updater: (value: C[K]) => C[K] -): C; -export function update( - object: C, - key: K, - notSetValue: NSV, - updater: (value: C[K] | NSV) => C[K] -): C; -export function update( - collection: C, - key: K, - updater: (value: V) => V -): { [key: string]: V }; -export function update< - V, - C extends { [key: string]: V }, - K extends keyof C, - NSV, ->( - collection: C, - key: K, - notSetValue: NSV, - updater: (value: V | NSV) => V -): { [key: string]: V }; - -export function update< - K, - V, - TProps extends object, - C extends PossibleCollection, - NSV, ->( - collection: C, - key: K, - notSetValue: NSV | UpdaterFunction, - updater?: UpdaterFunctionWithNSV -) { - return updateIn( - // @ts-expect-error Index signature for type string is missing in type V[] - collection, - [key], - notSetValue, - updater - ); -} diff --git a/src/functional/updateIn.ts b/src/functional/updateIn.ts deleted file mode 100644 index 99eed7980e..0000000000 --- a/src/functional/updateIn.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { isImmutable } from '../predicates/isImmutable'; -import coerceKeyPath from '../utils/coerceKeyPath'; -import isDataStructure from '../utils/isDataStructure'; -import quoteString from '../utils/quoteString'; -import { NOT_SET } from '../TrieUtils'; -import { emptyMap } from '../Map'; -import { get } from './get'; -import { remove } from './remove'; -import { set } from './set'; -import type { - Collection, - KeyPath, - Record, - RetrievePath, -} from '../../type-definitions/immutable'; - -/** - * Returns a copy of the collection with the value at key path set to the - * result of providing the existing value to the updating function. - * - * A functional alternative to `collection.updateIn(keypath)` which will also - * work with plain Objects and Arrays. - * - * - * ```js - * import { updateIn } from 'immutable' - * - * const original = { x: { y: { z: 123 }}} - * updateIn(original, ['x', 'y', 'z'], val => val * 6) // { x: { y: { z: 738 }}} - * console.log(original) // { x: { y: { z: 123 }}} - * ``` - */ - -export type PossibleCollection = - | Collection - | Record - | Array; - -type UpdaterFunction = ( - value: RetrievePath> | undefined -) => unknown | undefined; -type UpdaterFunctionWithNSV = ( - value: RetrievePath> | NSV -) => unknown; - -export function updateIn>( - collection: C, - keyPath: KeyPath, - updater: UpdaterFunction -): C; -export function updateIn, NSV>( - collection: C, - keyPath: KeyPath, - notSetValue: NSV, - updater: UpdaterFunctionWithNSV -): C; -export function updateIn< - TProps extends object, - C extends Record, - K extends keyof TProps, ->(record: C, keyPath: KeyPath, updater: UpdaterFunction): C; -export function updateIn< - TProps extends object, - C extends Record, - K extends keyof TProps, - NSV, ->( - record: C, - keyPath: KeyPath, - notSetValue: NSV, - updater: UpdaterFunctionWithNSV -): C; -export function updateIn>( - collection: C, - keyPath: KeyPath, - updater: UpdaterFunction -): Array; -export function updateIn, NSV>( - collection: C, - keyPath: KeyPath, - notSetValue: NSV, - updater: UpdaterFunctionWithNSV -): Array; -export function updateIn( - object: C, - keyPath: KeyPath, - updater: UpdaterFunction -): C; -export function updateIn( - object: C, - keyPath: KeyPath, - notSetValue: NSV, - updater: UpdaterFunctionWithNSV -): C; -export function updateIn( - collection: C, - keyPath: KeyPath, - updater: UpdaterFunction -): { [key: PropertyKey]: V }; -export function updateIn( - collection: C, - keyPath: KeyPath, - notSetValue: NSV, - updater: UpdaterFunction -): { [key: PropertyKey]: V }; - -export function updateIn< - K, - V, - TProps extends object, - C extends PossibleCollection, - NSV, ->( - collection: C, - keyPath: KeyPath, - notSetValue: NSV | UpdaterFunction | undefined, - updater?: UpdaterFunctionWithNSV -): C { - if (!updater) { - // handle the fact that `notSetValue` is optional here, in that case `updater` is the updater function - // @ts-expect-error updater is a function here - updater = notSetValue as UpdaterFunction; - notSetValue = undefined; - } - const updatedValue = updateInDeeply( - isImmutable(collection), - // @ts-expect-error type issues with Record and mixed types - collection, - coerceKeyPath(keyPath), - 0, - notSetValue, - updater - ); - // @ts-expect-error mixed return type - return updatedValue === NOT_SET ? notSetValue : updatedValue; -} - -function updateInDeeply< - K, - TProps extends object, - C extends PossibleCollection, - NSV, ->( - inImmutable: boolean, - existing: C, - keyPath: Array, - i: number, - notSetValue: NSV | undefined, - updater: UpdaterFunctionWithNSV | UpdaterFunction -): C { - const wasNotSet = existing === NOT_SET; - if (i === keyPath.length) { - const existingValue = wasNotSet ? notSetValue : existing; - // @ts-expect-error mixed type with optional value - const newValue = updater(existingValue); - // @ts-expect-error mixed type - return newValue === existingValue ? existing : newValue; - } - if (!wasNotSet && !isDataStructure(existing)) { - throw new TypeError( - 'Cannot update within non-data-structure value in path [' + - Array.from(keyPath).slice(0, i).map(quoteString) + - ']: ' + - existing - ); - } - const key = keyPath[i]; - - const nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET); - const nextUpdated = updateInDeeply( - nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting), - // @ts-expect-error mixed type - nextExisting, - keyPath, - i + 1, - notSetValue, - updater - ); - - return nextUpdated === nextExisting - ? existing - : nextUpdated === NOT_SET - ? remove(existing, key) - : set( - wasNotSet ? (inImmutable ? emptyMap() : {}) : existing, - key, - nextUpdated - ); -} diff --git a/src/is.ts b/src/is.ts deleted file mode 100644 index f4430c52fd..0000000000 --- a/src/is.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { isValueObject } from './predicates/isValueObject'; - -/** - * An extension of the "same-value" algorithm as [described for use by ES6 Map - * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality) - * - * NaN is considered the same as NaN, however -0 and 0 are considered the same - * value, which is different from the algorithm described by - * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). - * - * This is extended further to allow Objects to describe the values they - * represent, by way of `valueOf` or `equals` (and `hashCode`). - * - * Note: because of this extension, the key equality of Immutable.Map and the - * value equality of Immutable.Set will differ from ES6 Map and Set. - * - * ### Defining custom values - * - * The easiest way to describe the value an object represents is by implementing - * `valueOf`. For example, `Date` represents a value by returning a unix - * timestamp for `valueOf`: - * - * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ... - * var date2 = new Date(1234567890000); - * date1.valueOf(); // 1234567890000 - * assert( date1 !== date2 ); - * assert( Immutable.is( date1, date2 ) ); - * - * Note: overriding `valueOf` may have other implications if you use this object - * where JavaScript expects a primitive, such as implicit string coercion. - * - * For more complex types, especially collections, implementing `valueOf` may - * not be performant. An alternative is to implement `equals` and `hashCode`. - * - * `equals` takes another object, presumably of similar type, and returns true - * if it is equal. Equality is symmetrical, so the same result should be - * returned if this and the argument are flipped. - * - * assert( a.equals(b) === b.equals(a) ); - * - * `hashCode` returns a 32bit integer number representing the object which will - * be used to determine how to store the value object in a Map or Set. You must - * provide both or neither methods, one must not exist without the other. - * - * Also, an important relationship between these methods must be upheld: if two - * values are equal, they *must* return the same hashCode. If the values are not - * equal, they might have the same hashCode; this is called a hash collision, - * and while undesirable for performance reasons, it is acceptable. - * - * if (a.equals(b)) { - * assert( a.hashCode() === b.hashCode() ); - * } - * - * All Immutable collections are Value Objects: they implement `equals()` - * and `hashCode()`. - */ -export function is(valueA: unknown, valueB: unknown): boolean { - if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { - return true; - } - if (!valueA || !valueB) { - return false; - } - if ( - typeof valueA.valueOf === 'function' && - typeof valueB.valueOf === 'function' - ) { - valueA = valueA.valueOf(); - valueB = valueB.valueOf(); - if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { - return true; - } - if (!valueA || !valueB) { - return false; - } - } - return !!( - isValueObject(valueA) && - isValueObject(valueB) && - valueA.equals(valueB) - ); -} diff --git a/src/methods/README.md b/src/methods/README.md deleted file mode 100644 index df2d26482f..0000000000 --- a/src/methods/README.md +++ /dev/null @@ -1,5 +0,0 @@ -These files represent common methods on Collection types, each will contain -references to "this" - expecting to be called as a prototypal method. - -They are separated into individual files to avoid circular dependencies when -possible, and to allow their use in multiple different Collections. diff --git a/src/methods/asImmutable.js b/src/methods/asImmutable.js deleted file mode 100644 index 71ba0d2bf5..0000000000 --- a/src/methods/asImmutable.js +++ /dev/null @@ -1,3 +0,0 @@ -export function asImmutable() { - return this.__ensureOwner(); -} diff --git a/src/methods/asMutable.js b/src/methods/asMutable.js deleted file mode 100644 index 2e7abf576a..0000000000 --- a/src/methods/asMutable.js +++ /dev/null @@ -1,5 +0,0 @@ -import { OwnerID } from '../TrieUtils'; - -export function asMutable() { - return this.__ownerID ? this : this.__ensureOwner(new OwnerID()); -} diff --git a/src/methods/deleteIn.js b/src/methods/deleteIn.js deleted file mode 100644 index 5a312ce8f9..0000000000 --- a/src/methods/deleteIn.js +++ /dev/null @@ -1,5 +0,0 @@ -import { removeIn } from '../functional/removeIn'; - -export function deleteIn(keyPath) { - return removeIn(this, keyPath); -} diff --git a/src/methods/getIn.js b/src/methods/getIn.js deleted file mode 100644 index e202bae92c..0000000000 --- a/src/methods/getIn.js +++ /dev/null @@ -1,5 +0,0 @@ -import { getIn as _getIn } from '../functional/getIn'; - -export function getIn(searchKeyPath, notSetValue) { - return _getIn(this, searchKeyPath, notSetValue); -} diff --git a/src/methods/hasIn.js b/src/methods/hasIn.js deleted file mode 100644 index 704dc5c80f..0000000000 --- a/src/methods/hasIn.js +++ /dev/null @@ -1,5 +0,0 @@ -import { hasIn as _hasIn } from '../functional/hasIn'; - -export function hasIn(searchKeyPath) { - return _hasIn(this, searchKeyPath); -} diff --git a/src/methods/merge.js b/src/methods/merge.js deleted file mode 100644 index 427f7c466c..0000000000 --- a/src/methods/merge.js +++ /dev/null @@ -1,51 +0,0 @@ -import { KeyedCollection } from '../Collection'; -import { NOT_SET } from '../TrieUtils'; -import { update } from '../functional/update'; -import { isRecord } from '../predicates/isRecord'; - -export function merge(...iters) { - return mergeIntoKeyedWith(this, iters); -} - -export function mergeWith(merger, ...iters) { - if (typeof merger !== 'function') { - throw new TypeError('Invalid merger function: ' + merger); - } - return mergeIntoKeyedWith(this, iters, merger); -} - -function mergeIntoKeyedWith(collection, collections, merger) { - const iters = []; - for (let ii = 0; ii < collections.length; ii++) { - const collection = KeyedCollection(collections[ii]); - if (collection.size !== 0) { - iters.push(collection); - } - } - if (iters.length === 0) { - return collection; - } - if ( - collection.toSeq().size === 0 && - !collection.__ownerID && - iters.length === 1 - ) { - return isRecord(collection) - ? collection // Record is empty and will not be updated: return the same instance - : collection.constructor(iters[0]); - } - return collection.withMutations((collection) => { - const mergeIntoCollection = merger - ? (value, key) => { - update(collection, key, NOT_SET, (oldVal) => - oldVal === NOT_SET ? value : merger(oldVal, value, key) - ); - } - : (value, key) => { - collection.set(key, value); - }; - for (let ii = 0; ii < iters.length; ii++) { - iters[ii].forEach(mergeIntoCollection); - } - }); -} diff --git a/src/methods/mergeDeep.js b/src/methods/mergeDeep.js deleted file mode 100644 index e2238f664c..0000000000 --- a/src/methods/mergeDeep.js +++ /dev/null @@ -1,9 +0,0 @@ -import { mergeDeepWithSources } from '../functional/merge'; - -export function mergeDeep(...iters) { - return mergeDeepWithSources(this, iters); -} - -export function mergeDeepWith(merger, ...iters) { - return mergeDeepWithSources(this, iters, merger); -} diff --git a/src/methods/mergeDeepIn.js b/src/methods/mergeDeepIn.js deleted file mode 100644 index 119369b7ba..0000000000 --- a/src/methods/mergeDeepIn.js +++ /dev/null @@ -1,9 +0,0 @@ -import { mergeDeepWithSources } from '../functional/merge'; -import { updateIn } from '../functional/updateIn'; -import { emptyMap } from '../Map'; - -export function mergeDeepIn(keyPath, ...iters) { - return updateIn(this, keyPath, emptyMap(), (m) => - mergeDeepWithSources(m, iters) - ); -} diff --git a/src/methods/mergeIn.js b/src/methods/mergeIn.js deleted file mode 100644 index 9af239c4d0..0000000000 --- a/src/methods/mergeIn.js +++ /dev/null @@ -1,7 +0,0 @@ -import { mergeWithSources } from '../functional/merge'; -import { updateIn } from '../functional/updateIn'; -import { emptyMap } from '../Map'; - -export function mergeIn(keyPath, ...iters) { - return updateIn(this, keyPath, emptyMap(), (m) => mergeWithSources(m, iters)); -} diff --git a/src/methods/setIn.js b/src/methods/setIn.js deleted file mode 100644 index 3ea05b89d6..0000000000 --- a/src/methods/setIn.js +++ /dev/null @@ -1,5 +0,0 @@ -import { setIn as _setIn } from '../functional/setIn'; - -export function setIn(keyPath, v) { - return _setIn(this, keyPath, v); -} diff --git a/src/methods/toObject.js b/src/methods/toObject.js deleted file mode 100644 index fb927f0e48..0000000000 --- a/src/methods/toObject.js +++ /dev/null @@ -1,10 +0,0 @@ -import assertNotInfinite from '../utils/assertNotInfinite'; - -export function toObject() { - assertNotInfinite(this.size); - const object = {}; - this.__iterate((v, k) => { - object[k] = v; - }); - return object; -} diff --git a/src/methods/update.js b/src/methods/update.js deleted file mode 100644 index 0d533f7037..0000000000 --- a/src/methods/update.js +++ /dev/null @@ -1,7 +0,0 @@ -import { update as _update } from '../functional/update'; - -export function update(key, notSetValue, updater) { - return arguments.length === 1 - ? key(this) - : _update(this, key, notSetValue, updater); -} diff --git a/src/methods/updateIn.js b/src/methods/updateIn.js deleted file mode 100644 index 8df1860868..0000000000 --- a/src/methods/updateIn.js +++ /dev/null @@ -1,5 +0,0 @@ -import { updateIn as _updateIn } from '../functional/updateIn'; - -export function updateIn(keyPath, notSetValue, updater) { - return _updateIn(this, keyPath, notSetValue, updater); -} diff --git a/src/methods/wasAltered.js b/src/methods/wasAltered.js deleted file mode 100644 index 165a3e3ab2..0000000000 --- a/src/methods/wasAltered.js +++ /dev/null @@ -1,3 +0,0 @@ -export function wasAltered() { - return this.__altered; -} diff --git a/src/methods/withMutations.js b/src/methods/withMutations.js deleted file mode 100644 index 59c5cc83dc..0000000000 --- a/src/methods/withMutations.js +++ /dev/null @@ -1,5 +0,0 @@ -export function withMutations(fn) { - const mutable = this.asMutable(); - fn(mutable); - return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this; -} diff --git a/src/predicates/isAssociative.ts b/src/predicates/isAssociative.ts deleted file mode 100644 index e174616f7b..0000000000 --- a/src/predicates/isAssociative.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { isKeyed } from './isKeyed'; -import { isIndexed } from './isIndexed'; -import type { Collection } from '../../type-definitions/immutable'; - -/** - * True if `maybeAssociative` is either a Keyed or Indexed Collection. - * - * ```js - * import { isAssociative, Map, List, Stack, Set } from 'immutable'; - * - * isAssociative([]); // false - * isAssociative({}); // false - * isAssociative(Map()); // true - * isAssociative(List()); // true - * isAssociative(Stack()); // true - * isAssociative(Set()); // false - * ``` - */ -export function isAssociative( - maybeAssociative: unknown -): maybeAssociative is - | Collection.Keyed - | Collection.Indexed { - return isKeyed(maybeAssociative) || isIndexed(maybeAssociative); -} diff --git a/src/predicates/isCollection.ts b/src/predicates/isCollection.ts deleted file mode 100644 index 738a4614e0..0000000000 --- a/src/predicates/isCollection.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Collection } from '../../type-definitions/immutable'; - -// Note: value is unchanged to not break immutable-devtools. -export const IS_COLLECTION_SYMBOL = '@@__IMMUTABLE_ITERABLE__@@'; - -/** - * True if `maybeCollection` is a Collection, or any of its subclasses. - * - * ```js - * import { isCollection, Map, List, Stack } from 'immutable'; - * - * isCollection([]); // false - * isCollection({}); // false - * isCollection(Map()); // true - * isCollection(List()); // true - * isCollection(Stack()); // true - * ``` - */ -export function isCollection( - maybeCollection: unknown -): maybeCollection is Collection { - return Boolean( - maybeCollection && - // @ts-expect-error: maybeCollection is typed as `{}`, need to change in 6.0 to `maybeCollection && typeof maybeCollection === 'object' && IS_COLLECTION_SYMBOL in maybeCollection` - maybeCollection[IS_COLLECTION_SYMBOL] - ); -} diff --git a/src/predicates/isImmutable.ts b/src/predicates/isImmutable.ts deleted file mode 100644 index d01bd03afb..0000000000 --- a/src/predicates/isImmutable.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Collection, Record } from '../../type-definitions/immutable'; -import { isCollection } from './isCollection'; -import { isRecord } from './isRecord'; - -/** - * True if `maybeImmutable` is an Immutable Collection or Record. - * - * Note: Still returns true even if the collections is within a `withMutations()`. - * - * ```js - * import { isImmutable, Map, List, Stack } from 'immutable'; - * isImmutable([]); // false - * isImmutable({}); // false - * isImmutable(Map()); // true - * isImmutable(List()); // true - * isImmutable(Stack()); // true - * isImmutable(Map().asMutable()); // true - * ``` - */ -export function isImmutable( - maybeImmutable: unknown -): maybeImmutable is Collection | Record { - return isCollection(maybeImmutable) || isRecord(maybeImmutable); -} diff --git a/src/predicates/isIndexed.ts b/src/predicates/isIndexed.ts deleted file mode 100644 index 3e20595af5..0000000000 --- a/src/predicates/isIndexed.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Collection } from '../../type-definitions/immutable'; - -export const IS_INDEXED_SYMBOL = '@@__IMMUTABLE_INDEXED__@@'; - -/** - * True if `maybeIndexed` is a Collection.Indexed, or any of its subclasses. - * - * ```js - * import { isIndexed, Map, List, Stack, Set } from 'immutable'; - * - * isIndexed([]); // false - * isIndexed({}); // false - * isIndexed(Map()); // false - * isIndexed(List()); // true - * isIndexed(Stack()); // true - * isIndexed(Set()); // false - * ``` - */ -export function isIndexed( - maybeIndexed: unknown -): maybeIndexed is Collection.Indexed { - return Boolean( - maybeIndexed && - // @ts-expect-error: maybeIndexed is typed as `{}`, need to change in 6.0 to `maybeIndexed && typeof maybeIndexed === 'object' && IS_INDEXED_SYMBOL in maybeIndexed` - maybeIndexed[IS_INDEXED_SYMBOL] - ); -} diff --git a/src/predicates/isKeyed.ts b/src/predicates/isKeyed.ts deleted file mode 100644 index 35f7b7e9c8..0000000000 --- a/src/predicates/isKeyed.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Collection } from '../../type-definitions/immutable'; - -export const IS_KEYED_SYMBOL = '@@__IMMUTABLE_KEYED__@@'; - -/** - * True if `maybeKeyed` is a Collection.Keyed, or any of its subclasses. - * - * ```js - * import { isKeyed, Map, List, Stack } from 'immutable'; - * - * isKeyed([]); // false - * isKeyed({}); // false - * isKeyed(Map()); // true - * isKeyed(List()); // false - * isKeyed(Stack()); // false - * ``` - */ -export function isKeyed( - maybeKeyed: unknown -): maybeKeyed is Collection.Keyed { - return Boolean( - maybeKeyed && - // @ts-expect-error: maybeKeyed is typed as `{}`, need to change in 6.0 to `maybeKeyed && typeof maybeKeyed === 'object' && IS_KEYED_SYMBOL in maybeKeyed` - maybeKeyed[IS_KEYED_SYMBOL] - ); -} diff --git a/src/predicates/isList.ts b/src/predicates/isList.ts deleted file mode 100644 index 080427eb2a..0000000000 --- a/src/predicates/isList.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { List } from '../../type-definitions/immutable'; - -export const IS_LIST_SYMBOL = '@@__IMMUTABLE_LIST__@@'; - -/** - * True if `maybeList` is a List. - */ -export function isList(maybeList: unknown): maybeList is List { - return Boolean( - maybeList && - // @ts-expect-error: maybeList is typed as `{}`, need to change in 6.0 to `maybeList && typeof maybeList === 'object' && IS_LIST_SYMBOL in maybeList` - maybeList[IS_LIST_SYMBOL] - ); -} diff --git a/src/predicates/isMap.ts b/src/predicates/isMap.ts deleted file mode 100644 index ef96c7e138..0000000000 --- a/src/predicates/isMap.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Map } from '../../type-definitions/immutable'; - -export const IS_MAP_SYMBOL = '@@__IMMUTABLE_MAP__@@'; - -/** - * True if `maybeMap` is a Map. - * - * Also true for OrderedMaps. - */ -export function isMap(maybeMap: unknown): maybeMap is Map { - return Boolean( - maybeMap && - // @ts-expect-error: maybeMap is typed as `{}`, need to change in 6.0 to `maybeMap && typeof maybeMap === 'object' && IS_MAP_SYMBOL in maybeMap` - maybeMap[IS_MAP_SYMBOL] - ); -} diff --git a/src/predicates/isOrdered.ts b/src/predicates/isOrdered.ts deleted file mode 100644 index 2e20d415ff..0000000000 --- a/src/predicates/isOrdered.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { OrderedCollection } from '../../type-definitions/immutable'; - -export const IS_ORDERED_SYMBOL = '@@__IMMUTABLE_ORDERED__@@'; - -/** - * True if `maybeOrdered` is a Collection where iteration order is well - * defined. True for Collection.Indexed as well as OrderedMap and OrderedSet. - * - * ```js - * import { isOrdered, Map, OrderedMap, List, Set } from 'immutable'; - * - * isOrdered([]); // false - * isOrdered({}); // false - * isOrdered(Map()); // false - * isOrdered(OrderedMap()); // true - * isOrdered(List()); // true - * isOrdered(Set()); // false - * ``` - */ -export function isOrdered( - maybeOrdered: Iterable -): maybeOrdered is OrderedCollection; -export function isOrdered( - maybeOrdered: unknown -): maybeOrdered is OrderedCollection { - return Boolean( - maybeOrdered && - // @ts-expect-error: maybeOrdered is typed as `{}`, need to change in 6.0 to `maybeOrdered && typeof maybeOrdered === 'object' && IS_ORDERED_SYMBOL in maybeOrdered` - maybeOrdered[IS_ORDERED_SYMBOL] - ); -} diff --git a/src/predicates/isOrderedMap.ts b/src/predicates/isOrderedMap.ts deleted file mode 100644 index ac56e200b5..0000000000 --- a/src/predicates/isOrderedMap.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { OrderedMap } from '../../type-definitions/immutable'; -import { isMap } from './isMap'; -import { isOrdered } from './isOrdered'; - -/** - * True if `maybeOrderedMap` is an OrderedMap. - */ -export function isOrderedMap( - maybeOrderedMap: unknown -): maybeOrderedMap is OrderedMap { - return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap); -} diff --git a/src/predicates/isOrderedSet.ts b/src/predicates/isOrderedSet.ts deleted file mode 100644 index 8ac58beb96..0000000000 --- a/src/predicates/isOrderedSet.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { isSet } from './isSet'; -import { isOrdered } from './isOrdered'; -import type { OrderedSet } from '../../type-definitions/immutable'; - -/** - * True if `maybeOrderedSet` is an OrderedSet. - */ -export function isOrderedSet( - maybeOrderedSet: unknown -): maybeOrderedSet is OrderedSet { - return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet); -} diff --git a/src/predicates/isRecord.ts b/src/predicates/isRecord.ts deleted file mode 100644 index ff9b1cdde8..0000000000 --- a/src/predicates/isRecord.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Record } from '../../type-definitions/immutable'; - -export const IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@'; - -/** - * True if `maybeRecord` is a Record. - */ -export function isRecord(maybeRecord: unknown): maybeRecord is Record { - return Boolean( - maybeRecord && - // @ts-expect-error: maybeRecord is typed as `{}`, need to change in 6.0 to `maybeRecord && typeof maybeRecord === 'object' && IS_RECORD_SYMBOL in maybeRecord` - maybeRecord[IS_RECORD_SYMBOL] - ); -} diff --git a/src/predicates/isSeq.ts b/src/predicates/isSeq.ts deleted file mode 100644 index 1b0f26f04a..0000000000 --- a/src/predicates/isSeq.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Seq } from '../../type-definitions/immutable'; - -export const IS_SEQ_SYMBOL = '@@__IMMUTABLE_SEQ__@@'; - -/** - * True if `maybeSeq` is a Seq. - */ -export function isSeq( - maybeSeq: unknown -): maybeSeq is - | Seq.Indexed - | Seq.Keyed - | Seq.Set { - return Boolean( - maybeSeq && - // @ts-expect-error: maybeSeq is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSeq === 'object' && MAYBE_SEQ_SYMBOL in maybeSeq` - maybeSeq[IS_SEQ_SYMBOL] - ); -} diff --git a/src/predicates/isSet.ts b/src/predicates/isSet.ts deleted file mode 100644 index a9a59fe71c..0000000000 --- a/src/predicates/isSet.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Set } from '../../type-definitions/immutable'; - -export const IS_SET_SYMBOL = '@@__IMMUTABLE_SET__@@'; - -/** - * True if `maybeSet` is a Set. - * - * Also true for OrderedSets. - */ -export function isSet(maybeSet: unknown): maybeSet is Set { - return Boolean( - maybeSet && - // @ts-expect-error: maybeSet is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSet === 'object' && MAYBE_SET_SYMBOL in maybeSet` - maybeSet[IS_SET_SYMBOL] - ); -} diff --git a/src/predicates/isStack.ts b/src/predicates/isStack.ts deleted file mode 100644 index b62768f88e..0000000000 --- a/src/predicates/isStack.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Stack } from '../../type-definitions/immutable'; - -export const IS_STACK_SYMBOL = '@@__IMMUTABLE_STACK__@@'; - -/** - * True if `maybeStack` is a Stack. - */ -export function isStack(maybeStack: unknown): maybeStack is Stack { - return Boolean( - maybeStack && - // @ts-expect-error: maybeStack is typed as `{}`, need to change in 6.0 to `maybeStack && typeof maybeStack === 'object' && MAYBE_STACK_SYMBOL in maybeStack` - maybeStack[IS_STACK_SYMBOL] - ); -} diff --git a/src/predicates/isValueObject.ts b/src/predicates/isValueObject.ts deleted file mode 100644 index f603b517ea..0000000000 --- a/src/predicates/isValueObject.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { ValueObject } from '../../type-definitions/immutable'; - -/** - * True if `maybeValue` is a JavaScript Object which has *both* `equals()` - * and `hashCode()` methods. - * - * Any two instances of *value objects* can be compared for value equality with - * `Immutable.is()` and can be used as keys in a `Map` or members in a `Set`. - */ -export function isValueObject(maybeValue: unknown): maybeValue is ValueObject { - return Boolean( - maybeValue && - // @ts-expect-error: maybeValue is typed as `{}` - typeof maybeValue.equals === 'function' && - // @ts-expect-error: maybeValue is typed as `{}` - typeof maybeValue.hashCode === 'function' - ); -} diff --git a/src/toJS.js b/src/toJS.js deleted file mode 100644 index 2d820416c8..0000000000 --- a/src/toJS.js +++ /dev/null @@ -1,28 +0,0 @@ -import { Seq } from './Seq'; -import { isCollection } from './predicates/isCollection'; -import { isKeyed } from './predicates/isKeyed'; -import isDataStructure from './utils/isDataStructure'; - -export function toJS(value) { - if (!value || typeof value !== 'object') { - return value; - } - if (!isCollection(value)) { - if (!isDataStructure(value)) { - return value; - } - value = Seq(value); - } - if (isKeyed(value)) { - const result = {}; - value.__iterate((v, k) => { - result[k] = toJS(v); - }); - return result; - } - const result = []; - value.__iterate((v) => { - result.push(toJS(v)); - }); - return result; -} diff --git a/src/utils/arrCopy.ts b/src/utils/arrCopy.ts deleted file mode 100644 index e6cc653f98..0000000000 --- a/src/utils/arrCopy.ts +++ /dev/null @@ -1,12 +0,0 @@ -// http://jsperf.com/copy-array-inline - -export default function arrCopy(arr: Array, offset?: number): Array { - offset = offset || 0; - const len = Math.max(0, arr.length - offset); - const newArr: Array = new Array(len); - for (let ii = 0; ii < len; ii++) { - // @ts-expect-error We may want to guard for undefined values with `if (arr[ii + offset] !== undefined`, but ths should not happen by design - newArr[ii] = arr[ii + offset]; - } - return newArr; -} diff --git a/src/utils/assertNotInfinite.ts b/src/utils/assertNotInfinite.ts deleted file mode 100644 index 52abc8fc4c..0000000000 --- a/src/utils/assertNotInfinite.ts +++ /dev/null @@ -1,8 +0,0 @@ -import invariant from './invariant'; - -export default function assertNotInfinite(size: number): void { - invariant( - size !== Infinity, - 'Cannot perform this action with an infinite size.' - ); -} diff --git a/src/utils/coerceKeyPath.ts b/src/utils/coerceKeyPath.ts deleted file mode 100644 index 843981f0ea..0000000000 --- a/src/utils/coerceKeyPath.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { KeyPath } from '../../type-definitions/immutable'; -import { isOrdered } from '../predicates/isOrdered'; -import isArrayLike from './isArrayLike'; - -export default function coerceKeyPath(keyPath: KeyPath): ArrayLike { - if (isArrayLike(keyPath) && typeof keyPath !== 'string') { - return keyPath; - } - if (isOrdered(keyPath)) { - return keyPath.toArray(); - } - throw new TypeError( - 'Invalid keyPath: expected Ordered Collection or Array: ' + keyPath - ); -} diff --git a/src/utils/deepEqual.ts b/src/utils/deepEqual.ts deleted file mode 100644 index c76d62c840..0000000000 --- a/src/utils/deepEqual.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { is } from '../is'; -import { NOT_SET } from '../TrieUtils'; -import { isCollection } from '../predicates/isCollection'; -import { isKeyed } from '../predicates/isKeyed'; -import { isIndexed } from '../predicates/isIndexed'; -import { isAssociative } from '../predicates/isAssociative'; -import { isOrdered } from '../predicates/isOrdered'; -import type { Collection } from '../../type-definitions/immutable'; -import type { Repeat } from '../Repeat'; -import type { Range } from '../Range'; - -export default function deepEqual( - a: Range | Repeat | Collection, - b: unknown -): boolean { - if (a === b) { - return true; - } - - if ( - !isCollection(b) || - // @ts-expect-error size should exists on Collection - (a.size !== undefined && b.size !== undefined && a.size !== b.size) || - // @ts-expect-error __hash exists on Collection - (a.__hash !== undefined && - // @ts-expect-error __hash exists on Collection - b.__hash !== undefined && - // @ts-expect-error __hash exists on Collection - a.__hash !== b.__hash) || - isKeyed(a) !== isKeyed(b) || - isIndexed(a) !== isIndexed(b) || - // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid - isOrdered(a) !== isOrdered(b) - ) { - return false; - } - - // @ts-expect-error size should exists on Collection - if (a.size === 0 && b.size === 0) { - return true; - } - - const notAssociative = !isAssociative(a); - - // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid - if (isOrdered(a)) { - const entries = a.entries(); - // @ts-expect-error need to cast as boolean - return ( - b.every((v, k) => { - const entry = entries.next().value; - return entry && is(entry[1], v) && (notAssociative || is(entry[0], k)); - }) && entries.next().done - ); - } - - let flipped = false; - - if (a.size === undefined) { - // @ts-expect-error size should exists on Collection - if (b.size === undefined) { - if (typeof a.cacheResult === 'function') { - a.cacheResult(); - } - } else { - flipped = true; - const _ = a; - a = b; - b = _; - } - } - - let allEqual = true; - const bSize: number = - // @ts-expect-error b is Range | Repeat | Collection as it may have been flipped, and __iterate is valid - b.__iterate((v, k) => { - if ( - notAssociative - ? // @ts-expect-error has exists on Collection - !a.has(v) - : flipped - ? // @ts-expect-error type of `get` does not "catch" the version with `notSetValue` - !is(v, a.get(k, NOT_SET)) - : // @ts-expect-error type of `get` does not "catch" the version with `notSetValue` - !is(a.get(k, NOT_SET), v) - ) { - allEqual = false; - return false; - } - }); - - return ( - allEqual && - // @ts-expect-error size should exists on Collection - a.size === bSize - ); -} diff --git a/src/utils/hasOwnProperty.ts b/src/utils/hasOwnProperty.ts deleted file mode 100644 index cb5ba22368..0000000000 --- a/src/utils/hasOwnProperty.ts +++ /dev/null @@ -1 +0,0 @@ -export default Object.prototype.hasOwnProperty; diff --git a/src/utils/invariant.ts b/src/utils/invariant.ts deleted file mode 100644 index 958e6c977b..0000000000 --- a/src/utils/invariant.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default function invariant( - condition: unknown, - error: string -): asserts condition { - if (!condition) throw new Error(error); -} diff --git a/src/utils/isArrayLike.ts b/src/utils/isArrayLike.ts deleted file mode 100644 index 82659d6c54..0000000000 --- a/src/utils/isArrayLike.ts +++ /dev/null @@ -1,25 +0,0 @@ -export default function isArrayLike( - value: unknown -): value is ArrayLike { - if (Array.isArray(value) || typeof value === 'string') { - return true; - } - - // @ts-expect-error "Type 'unknown' is not assignable to type 'boolean'" : convert to Boolean - return ( - value && - typeof value === 'object' && - // @ts-expect-error check that `'length' in value &&` - Number.isInteger(value.length) && - // @ts-expect-error check that `'length' in value &&` - value.length >= 0 && - // @ts-expect-error check that `'length' in value &&` - (value.length === 0 - ? // Only {length: 0} is considered Array-like. - Object.keys(value).length === 1 - : // An object is only Array-like if it has a property where the last value - // in the array-like may be found (which could be undefined). - // @ts-expect-error check that `'length' in value &&` - value.hasOwnProperty(value.length - 1)) - ); -} diff --git a/src/utils/isDataStructure.ts b/src/utils/isDataStructure.ts deleted file mode 100644 index e71c55bb7d..0000000000 --- a/src/utils/isDataStructure.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Collection, Record } from '../../type-definitions/immutable'; -import { isImmutable } from '../predicates/isImmutable'; -import isPlainObj from './isPlainObj'; - -/** - * Returns true if the value is a potentially-persistent data structure, either - * provided by Immutable.js or a plain Array or Object. - */ -export default function isDataStructure( - value: unknown -): value is - | Collection - | Record - | Array - | object { - return ( - typeof value === 'object' && - (isImmutable(value) || Array.isArray(value) || isPlainObj(value)) - ); -} diff --git a/src/utils/isPlainObj.ts b/src/utils/isPlainObj.ts deleted file mode 100644 index 07e73e208a..0000000000 --- a/src/utils/isPlainObj.ts +++ /dev/null @@ -1,26 +0,0 @@ -const toString = Object.prototype.toString; - -export default function isPlainObject(value: unknown): value is object { - // The base prototype's toString deals with Argument objects and native namespaces like Math - if ( - !value || - typeof value !== 'object' || - toString.call(value) !== '[object Object]' - ) { - return false; - } - - const proto = Object.getPrototypeOf(value); - if (proto === null) { - return true; - } - - // Iteratively going up the prototype chain is needed for cross-realm environments (differing contexts, iframes, etc) - let parentProto = proto; - let nextProto = Object.getPrototypeOf(proto); - while (nextProto !== null) { - parentProto = nextProto; - nextProto = Object.getPrototypeOf(parentProto); - } - return parentProto === proto; -} diff --git a/src/utils/mixin.ts b/src/utils/mixin.ts deleted file mode 100644 index 3d4cee5fc6..0000000000 --- a/src/utils/mixin.ts +++ /dev/null @@ -1,20 +0,0 @@ -type Constructor = new (...args: unknown[]) => T; - -/** - * Contributes additional methods to a constructor - */ -export default function mixin( - ctor: C, - // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type - methods: Record -): C { - const keyCopier = (key: string | symbol): void => { - // @ts-expect-error how to handle symbol ? - ctor.prototype[key] = methods[key]; - }; - Object.keys(methods).forEach(keyCopier); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here - Object.getOwnPropertySymbols && - Object.getOwnPropertySymbols(methods).forEach(keyCopier); - return ctor; -} diff --git a/src/utils/quoteString.ts b/src/utils/quoteString.ts deleted file mode 100644 index 8d9b825a38..0000000000 --- a/src/utils/quoteString.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Converts a value to a string, adding quotes if a string was provided. - */ -export default function quoteString(value: unknown): string { - try { - return typeof value === 'string' ? JSON.stringify(value) : String(value); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (_ignoreError) { - return JSON.stringify(value); - } -} diff --git a/src/utils/shallowCopy.ts b/src/utils/shallowCopy.ts deleted file mode 100644 index 37aad28015..0000000000 --- a/src/utils/shallowCopy.ts +++ /dev/null @@ -1,19 +0,0 @@ -import arrCopy from './arrCopy'; -import hasOwnProperty from './hasOwnProperty'; - -export default function shallowCopy(from: Array): Array; -export default function shallowCopy(from: O): O; -export default function shallowCopy( - from: Array | O -): Array | O { - if (Array.isArray(from)) { - return arrCopy(from); - } - const to: Partial = {}; - for (const key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - return to as O; -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index b0fa1baad1..0000000000 --- a/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - /* Base Options: */ - "esModuleInterop": true, - "skipLibCheck": true, - "target": "es2022", - "allowJs": true, - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": true, - /* Strictness */ - "strict": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - /* If NOT transpiling with TypeScript: */ - "module": "ESNext", - "moduleResolution": "bundler", - "noEmit": true, - /* If your code runs in the DOM: */ - "lib": ["es2022", "dom", "dom.iterable"] - } -} diff --git a/tsconfig.src.json b/tsconfig.src.json deleted file mode 100644 index ae550d9ff2..0000000000 --- a/tsconfig.src.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/Immutable.js"] -} diff --git a/tstyche.config.json b/tstyche.config.json deleted file mode 100644 index 903317e015..0000000000 --- a/tstyche.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://tstyche.org/schemas/config.json", - "testFileMatch": [ - "type-definitions/ts-tests/*.ts" - ] -} diff --git a/type-definitions/flow-tests/.flowconfig b/type-definitions/flow-tests/.flowconfig deleted file mode 100644 index 8bacb74638..0000000000 --- a/type-definitions/flow-tests/.flowconfig +++ /dev/null @@ -1,9 +0,0 @@ -[include] -../../ - -[options] -module.name_mapper='^immutable$' -> '../../type-definitions/immutable.js.flow' - -[ignore] -💩 Only interested in testing these files directly in this repo. -.*/node_modules/.* diff --git a/type-definitions/flow-tests/covariance.js b/type-definitions/flow-tests/covariance.js deleted file mode 100644 index 6f325f4bae..0000000000 --- a/type-definitions/flow-tests/covariance.js +++ /dev/null @@ -1,55 +0,0 @@ -//@flow - -import { List, Map, Set, Stack, OrderedMap, OrderedSet } from 'immutable'; - -class A { - x: number; -} -class B extends A { - y: string; -} -class C { - z: string; -} - -// List covariance -declare var listOfB: List; -var listOfA: List = listOfB; -listOfA = List([new B()]); -// $FlowExpectedError[incompatible-type-arg] -var listOfC: List = listOfB; - -// Map covariance -declare var mapOfB: Map; -var mapOfA: Map = mapOfB; -mapOfA = Map({ b: new B() }); -// $FlowExpectedError[incompatible-type-arg] -var mapOfC: Map = mapOfB; - -// Set covariance -declare var setOfB: Set; -var setOfA: Set = setOfB; -setOfA = Set([new B()]); -// $FlowExpectedError[incompatible-type-arg] -var setOfC: Set = setOfB; - -// Stack covariance -declare var stackOfB: Stack; -var stackOfA: Stack = stackOfB; -stackOfA = Stack([new B()]); -// $FlowExpectedError[incompatible-type-arg] -var stackOfC: Stack = stackOfB; - -// OrderedMap covariance -declare var orderedMapOfB: OrderedMap; -var orderedMapOfA: OrderedMap = orderedMapOfB; -orderedMapOfA = OrderedMap({ b: new B() }); -// $FlowExpectedError[incompatible-type-arg] -var orderedMapOfC: OrderedMap = orderedMapOfB; - -// OrderedSet covariance -declare var orderedSetOfB: OrderedSet; -var orderedSetOfA: OrderedSet = orderedSetOfB; -orderedSetOfA = OrderedSet([new B()]); -// $FlowExpectedError[incompatible-type-arg] -var orderedSetOfC: OrderedSet = orderedSetOfB; diff --git a/type-definitions/flow-tests/es6-collections.js b/type-definitions/flow-tests/es6-collections.js deleted file mode 100644 index a763d6bf75..0000000000 --- a/type-definitions/flow-tests/es6-collections.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable'; - -// Immutable.js collections -var mapImmutable: ImmutableMap = ImmutableMap(); -var setImmutable: ImmutableSet = ImmutableSet(); -var deleteResultImmutable: ImmutableMap = mapImmutable.delete( - 'foo' -); - -// ES6 collections -var mapES6: Map = new Map(); -var setES6: Set = new Set(); -var deleteResultES6: boolean = mapES6.delete('foo'); diff --git a/type-definitions/flow-tests/immutable-flow.js b/type-definitions/flow-tests/immutable-flow.js deleted file mode 100644 index c203962052..0000000000 --- a/type-definitions/flow-tests/immutable-flow.js +++ /dev/null @@ -1,1341 +0,0 @@ -// @flow -// Some tests look like they are repeated in order to avoid false positives. -// Flow might not complain about an instance of (what it thinks is) T to be assigned to T - -import Immutable, { - List, - Map, - Stack, - Set, - Seq, - Range, - Repeat, - Record, - OrderedMap, - OrderedSet, - get, - getIn, - has, - hasIn, - merge, - mergeDeep, - mergeWith, - mergeDeepWith, - remove, - removeIn, - set, - setIn, - update, - updateIn, -} from 'immutable'; -import * as Immutable2 from 'immutable'; - -import type { - KeyedCollection, - IndexedCollection, - SetCollection, - KeyedSeq, - IndexedSeq, - SetSeq, - RecordFactory, - RecordOf, -} from 'immutable'; - -/** - * Although this looks like dead code, importing `Immutable` and - * `Immutable2` tests: - * - * 1. that default import works -- `import Immutable, {...} from 'immutable' - * 2. that importing everything works -- `import * as X from 'immutable'` - * 3. that individual imports are supported - */ -const ImmutableList = Immutable.List; -const ImmutableMap = Immutable.Map; -const ImmutableStack = Immutable.Stack; -const ImmutableSet = Immutable.Set; -const ImmutableKeyedCollection: KeyedCollection< - *, - * -> = Immutable.Collection.Keyed(); -const ImmutableRange = Immutable.Range; -const ImmutableRepeat = Immutable.Repeat; -const ImmutableIndexedSeq: IndexedSeq<*> = Immutable.Seq.Indexed(); - -const Immutable2List = Immutable2.List; -const Immutable2Map = Immutable2.Map; -const Immutable2Stack = Immutable2.Stack; -const Immutable2Set = Immutable2.Set; -const Immutable2KeyedCollection: Immutable2.KeyedCollection< - *, - * -> = Immutable2.Collection.Keyed(); -const Immutable2Range = Immutable2.Range; -const Immutable2Repeat = Immutable2.Repeat; -const Immutable2IndexedSeq: Immutable2.IndexedSeq<*> = Immutable2.Seq.Indexed(); - -var defaultExport: List<*> = Immutable.List(); -var moduleExport: List<*> = Immutable2.List(); - -var numberList: List = List(); -var numberOrStringList: List = List(); -var nullableNumberList: List = List(); -var stringToNumber: Map = Map(); -var orderedStringToNumber: OrderedMap = OrderedMap(); -var orderedStringToString: OrderedMap = OrderedMap(); -var orderedStringToNumberOrString: OrderedMap< - string, - string | number -> = OrderedMap(); -var orderedNumberToString: OrderedMap = OrderedMap(); -var orderedNumberToNumber: OrderedMap = OrderedMap(); -var stringToNumberOrString: Map = Map(); -var numberToString: Map = Map(); -var stringOrNumberToNumberOrString: Map< - string | number, - string | number -> = Map(); -var anyMap: Map = Map(); -var numberSet: Set = Set(); -var orderedStringSet: OrderedSet = OrderedSet(); -var orderedNumberSet: OrderedSet = OrderedSet(); -var orderedNumberOrStringSet: OrderedSet = OrderedSet(); -var numberOrStringSet: Set = Set(); -var stringSet: Set = Set(); -var numberStack: Stack = Stack(); -var numberOrStringStack: Stack = Stack(); -var number: number = 0; -var stringToNumberCollection: KeyedCollection = stringToNumber; -var numberToStringCollection: KeyedCollection = numberToString; -var partitions: [List, List]; - -numberList = List([1, 2]); -var numberListSize: number = numberList.size; -numberOrStringList = List(['a', 1]); -// $FlowExpectedError[incompatible-call] -numberList = List(['a', 'b']); - -numberList = List.of(1, 2); -numberOrStringList = List.of('a', 1); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a', 1); - -numberList = List().set(0, 0); -numberOrStringList = List.of(0).set(1, 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List().set(0, 'a'); - -numberList = List.of(1, 2, 3); -// $FlowExpectedError[incompatible-type] -var item: number = numberList.get(4); -var nullableItem: ?number = numberList.get(4); -var itemOrDefault: number = numberList.get(4, 10); - -// $FlowExpectedError[incompatible-type] -var item: number = numberList.first(); -// $FlowExpectedError[incompatible-type] -var func: () => number = () => numberList.first(); - -// $FlowExpectedError[incompatible-type] -var item: number = numberList.last(); -// $FlowExpectedError[incompatible-type] -var func: () => number = () => numberList.last(); - -numberList = List().insert(0, 0); -numberOrStringList = List.of(0).insert(1, 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List().insert(0, 'a'); - -numberList = List().push(1, 1); -numberOrStringList = List().push(1, 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List().push(0, 'a'); - -numberList = List().unshift(1, 1); -numberOrStringList = List().unshift(1, 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List().unshift(0, 'a'); - -numberList = List.of(1).delete(0); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a').delete(0); - -numberList = List.of(1).remove(0); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a').remove(0); - -numberList = List.of(1).clear(); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a').clear(); - -numberList = List.of(1).pop(); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a').pop(); - -numberList = List.of(1).shift(); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a').shift(); - -numberList = List.of('a').update((value) => List.of(1)); -// $FlowExpectedError[incompatible-call] -numberList = List.of(1).update((value) => List.of('a')); - -numberOrStringList = List.of('a').update(0, (value) => 1); -// $FlowExpectedError[incompatible-call] -numberList = List.of(1).update(0, (value) => 'a'); - -numberOrStringList = List.of(1).update(1, 0, (value) => 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List.of(1).update(1, 0, (value) => 'a'); - -numberList = List.of(1).merge(List.of(2)); -numberOrStringList = List.of('a').merge(List.of(1)); -// $FlowExpectedError[incompatible-call] -numberList = List.of('a').merge(List.of(1)); - -// Functional API - -numberList = merge(List([1]), List([2])); -numberOrStringList = merge>(List(['a']), List([1])); -// $FlowExpectedError[incompatible-call] -numberList = merge(List(['a']), List([1])); - -nullableNumberList = List.of(1).setSize(2); - -// $FlowExpectedError[incompatible-type] setIn [] replaces the top-most value. number ~> List -numberList = List([1]).setIn([], 0); -{ - const x: number = List([1]).setIn([], 0); -} -// $FlowExpectedError[incompatible-call] "a" is not a valid key for List. -numberList = List([1]).setIn(['a'], 0); -// $FlowExpectedError[incompatible-type-arg] "a" is not a valid value for List of number. -numberList = List([1]).setIn([0], 'a'); -numberList = List([1]).setIn([0], 0); - -// $FlowExpectedError[incompatible-call] "a" is not a valid key for List. -List([List([List([1])])]).setIn([0, 0, 'a'], 'a'); -// $FlowExpectedError[incompatible-call] "a" is not a valid value for List of number. -List([List([List([1])])]).setIn([0, 0, 0], 'a'); -List([List([List([1])])]).setIn([0, 0, 0], 123); - -// $FlowExpectedError[incompatible-type] deleteIn [] replaces the top-most value. void ~> List -numberList = List([1]).deleteIn([]); -{ - const x: void = List([1]).deleteIn([]); -} -// $FlowExpectedError[incompatible-type] -numberList = List([1]).removeIn([]); -// $FlowExpectedError[incompatible-call] "a" is not a valid key for List. -numberList = List([1]).deleteIn(['a']); -// $FlowExpectedError[incompatible-call] -numberList = List([1]).removeIn(['a']); -numberList = List([1]).deleteIn([0]); -numberList = List([1]).removeIn([0]); - -// Functional API - -// $FlowExpectedError[incompatible-type] deleteIn [] replaces the top-most value. void ~> List -numberList = removeIn(List([1]), []); -{ - const x: void = removeIn(List([1]), []); -} -// $FlowExpectedError[incompatible-call] "a" is not a valid key for List. -numberList = removeIn(List([1]), ['a']); -numberList = removeIn(List([1]), [0]); - -// $FlowExpectedError[incompatible-type] updateIn [] replaces the top-most value. number ~> List -numberList = List([1]).updateIn([], () => 123); -{ - const x: number = List([1]).updateIn([], () => 123); -} -// $FlowExpectedError[incompatible-call] - 'a' is not a number -numberList = List([1]).updateIn([0], (val) => 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List([1]).updateIn([0], 0, (val) => 'a'); -// $FlowExpectedError[incompatible-call] - 'a' in an invalid argument -numberList = List([1]).updateIn([0], 'a'); -// $FlowExpectedError[incompatible-call] -numberList = List([1]).updateIn([0], 0, 'a'); -numberList = List([1]).updateIn([0], (val) => val + 1); -numberList = List([1]).updateIn([0], 0, (val) => val + 1); - -numberList = List.of(1).mergeIn([], []); -numberList = List.of(1).mergeDeepIn([], []); - -numberList = List.of(1).withMutations((mutable) => mutable); - -numberList = List.of(1).asMutable(); -numberList = List.of(1).asImmutable(); - -numberList = List.of(1).map((value, index, iter) => 1); -// $FlowExpectedError[incompatible-call] -numberList = List.of(1).map((value, index, iter) => 'a'); - -numberList = List.of(1).flatMap((value, index, iter) => [1]); -// $FlowExpectedError[incompatible-call] -numberList = List.of(1).flatMap((value, index, iter) => ['a']); - -numberList = List.of(1).flatten(); - -// Specific type for filter(Boolean) which removes nullability. -numberList = nullableNumberList.filter(Boolean); - -partitions = List([1,2,3]).partition(value => value % 2); - -/* Map */ - -stringToNumber = Map(); -let stringToNumberSize: number = stringToNumber.size; -stringToNumberOrString = Map(); -numberToString = Map(); - -stringToNumber = Map({ a: 1 }); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 'a' }); - -stringToNumber = Map([['a', 1]]); -stringToNumber = Map(List([['a', 1]])); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map([['a', 'b']]); -// $FlowExpectedError[incompatible-call] -- this is actually a Map -stringToNumber = Map(List([['a', 'a']])); -// $FlowFixMe[incompatible-call] - This is Iterable>, ideally it could be interpreted as Iterable<[string, string]> -stringToNumber = Map(List([List(['a', 'a'])])); - -stringOrNumberToNumberOrString = Map({ a: 'a' }).set('b', 1).set(2, 'c'); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 0 }).set('b', ''); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map().set(1, ''); - -// Functional API - -stringToNumber = set(set(Map({ a: 0 }), 'b', 1), 'c', 2); -// $FlowExpectedError[incompatible-call] - Functional API currently requires arguments to have the same value types. -stringOrNumberToNumberOrString = set(set(Map({ a: 'a' }), 'b', 1), 2, 'c'); -// $FlowExpectedError[incompatible-call] -stringToNumber = set(Map({ a: 0 }), 'b', ''); -// $FlowExpectedError[incompatible-call] -stringToNumber = set(Map(), 1, ''); - -stringToNumber = Map({ a: 0 }).delete('a'); -stringToNumber = Map({ a: 0 }).remove('a'); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 0 }).delete(1); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 0 }).remove(1); - -stringToNumber = Map({ a: 0 }).deleteAll(['a']); -stringToNumber = Map({ a: 0 }).removeAll(['a']); -// $FlowExpectedError[prop-missing] -stringToNumber = Map({ a: 0 }).deleteAll(1); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 0 }).deleteAll([1]); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 0 }).removeAll([1]); - -stringToNumber = Map({ a: 0 }).clear(); - -stringToNumber = Map({ a: 1 }).update((value) => Map({ a: 1 })); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).update((value) => Map({ '1': 'a' })); - -stringToNumberOrString = Map({ a: 1 }).update('a', (value) => 'a'); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).update('a', (value) => 'a'); - -stringToNumberOrString = Map({ a: 1 }).update('a', 'b', (value) => 'a'); -// $FlowExpectedError[incompatible-type-arg] -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).update('a', 'b', (value) => 'a'); -// $FlowExpectedError[incompatible-type-arg] -stringToNumberOrString = Map({ a: 1 }).merge({ a: { a: '1' } }); -// $FlowExpectedError[incompatible-type-arg] -stringToNumberOrString = Map({ a: 1 }).update('a', 'b', (value) => { - a: '1'; -}); - -stringToNumber = Map({ a: 1 }).merge(Map({ a: 1 })); -stringToNumberOrString = Map({ a: 1 }).merge({ a: 'b' }); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).merge({ a: 'b' }); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).merge([[1, 'a']]); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).merge(numberToString); - -// Functional API -stringToNumber = merge(Map({ a: 1 }), Map({ a: 1 })); -// $FlowExpectedError[incompatible-call] - Functional API currently requires arguments to have the same value types. -stringToNumberOrString = merge(Map({ a: 1 }), { a: 'b' }); -// $FlowExpectedError[incompatible-call] -stringToNumber = merge(Map({ a: 1 }), { a: 'b' }); -// $FlowExpectedError[incompatible-call] -stringToNumber = merge(Map({ a: 1 }), [[1, 'a']]); -// $FlowExpectedError[incompatible-call] -stringToNumber = merge(Map({ a: 1 }), numberToString); - -stringToNumber = Map({ a: 1 }).mergeWith((previous, next, key) => 1, { - a: 2, - b: 2, -}); -stringToNumber = Map({ a: 1 }).mergeWith( - // $FlowExpectedError[incompatible-call] - (previous, next, key) => previous + next, - // $FlowExpectedError[incompatible-type-arg] - { a: '2', b: '2' } -); -stringToNumberOrString = Map({ a: 1 }).mergeWith( - (previous, next, key) => previous + next, - { a: '2', b: '2' } -); -// $FlowExpectedError[incompatible-call] - the array [1] is not a valid argument -stringToNumber = Map({ a: 1 }).mergeWith((previous, next, key) => 1, [1]); - -stringToNumberOrString = Map({ a: 1 }).mergeDeep({ a: 'b' }); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).mergeDeep({ a: 'b' }); - -stringToNumber = Map({ a: 1 }).mergeDeepWith((previous, next, key) => 1, { - a: 2, - b: 2, -}); -stringToNumber = Map({ a: 1 }).mergeDeepWith( - (previous, next, key) => 1, - // $FlowExpectedError[incompatible-type-arg] - { a: '2', b: '2' } -); -stringToNumberOrString = Map({ a: 1 }).mergeDeepWith( - (previous, next, key) => 1, - { a: '2', b: '2' } -); -// $FlowExpectedError[incompatible-call] - the array [1] is not a valid argument -stringToNumber = Map({ a: 1 }).mergeDeepWith((previous, next, key) => 1, [1]); - -// KeyedSeq can merge into Map -var stringToStringSeq: KeyedSeq = Seq({ b: 'B' }); -stringToNumberOrString = Map({ a: 1 }).merge(stringToStringSeq); - -// $FlowExpectedError[incompatible-type] -stringToNumber = Map({ a: 1 }).setIn([], 0); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).setIn(['a'], 'a'); -stringToNumber = Map({ a: 1 }).setIn(['a'], 0); - -// $FlowExpectedError[incompatible-type] -stringToNumber = Map({ a: 1 }).deleteIn([]); -// $FlowExpectedError[incompatible-type] -stringToNumber = Map({ a: 1 }).removeIn([]); -stringToNumber = Map({ a: 1 }).deleteIn(['a']); -stringToNumber = Map({ a: 1 }).removeIn(['a']); - -// $FlowExpectedError[incompatible-type] -Map({ a: 1 }).updateIn([], (v) => v + 1); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).updateIn(['a'], (v) => 'a'); -stringToNumber = Map({ a: 1 }).updateIn(['a'], (v) => v + 1); -stringToNumber = Map({ a: 1 }).updateIn(['a'], 0, (v) => v + 1); - -Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn(['x', 'y', 'z'], (v) => v + 1); -Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn( - ['x', 'y', 'z'], - 0, - (v) => v + 1 -); - -// $FlowExpectedError[incompatible-call] -Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn(['x', 'y', 1], (v) => v + 1); -// $FlowExpectedError[incompatible-call] -Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn(['x', 'y', 'z'], (v) => 'a'); - -stringToNumber = Map({ a: 1 }).mergeIn([], []); -stringToNumber = Map({ a: 1 }).mergeDeepIn([], []); - -anyMap = Map({ a: {} }).mergeIn(['a'], Map({ b: 2 })); -anyMap = Map({ a: {} }).mergeDeepIn(['a'], Map({ b: 2 })); -anyMap = Map({ a: {} }).mergeIn(['a'], List([1, 2])); -anyMap = Map({ a: {} }).mergeDeepIn(['a'], List([1, 2])); -anyMap = Map({ a: {} }).mergeIn(['a'], { b: 2 }); -anyMap = Map({ a: {} }).mergeDeepIn(['a'], { b: 2 }); -// $FlowExpectedError[incompatible-call]: not iterable / object -anyMap = Map({ a: {} }).mergeIn(['a'], 1); -// $FlowExpectedError[incompatible-call]: not iterable / object -anyMap = Map({ a: {} }).mergeDeepIn(['a'], 1); -// $FlowExpectedError[incompatible-type-arg]: bad key type -stringToNumber = Map({ a: {} }).mergeIn([1], { b: 2 }); -// $FlowExpectedError[incompatible-type-arg]: bad key type -stringToNumber = Map({ a: {} }).mergeDeepIn([1], { b: 2 }); - -stringToNumber = Map({ a: 1 }).withMutations((mutable) => mutable); - -stringToNumber = Map({ a: 1 }).asMutable(); -stringToNumber = Map({ a: 1 }).asImmutable(); - -stringToNumber = Map({ a: 1 }).map((value, index, iter) => 1); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).map((value, index, iter) => 'a'); - -stringToNumber = Map({ a: 1 }).flatMap((value, index, iter) => [['b', 1]]); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).flatMap((value, index, iter) => [['a', 'a']]); -// $FlowExpectedError[incompatible-call] -stringToNumber = Map({ a: 1 }).flatMap((value, index, iter) => Map({ a: 'a' })); - -numberToString = Map({ a: 1 }).flip(); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).flip(); - -numberToString = Map({ a: 'a' }).mapKeys((key, value, iter) => 1); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = Map({ a: 1 }).mapKeys((key, value, iter) => 1); - -anyMap = Map({ a: 1 }).flatten(); - -var stringToNullableNumber = Map({ a: 1, b: null }); -// $FlowExpectedError[incompatible-type-arg] -stringToNumber = stringToNullableNumber; -// Specific type for filter(Boolean) which removes nullability. -stringToNumber = stringToNullableNumber.filter(Boolean); - -[anyMap, ] = Map({ "a": 1, "b": 2}).partition((key, index, iter) => key % 2) - -/* OrderedMap */ - -orderedStringToNumber = Map({ a: 1 }).toOrderedMap(); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap -orderedStringToNumber = Map({ a: 'b' }).toOrderedMap(); -orderedStringToString = Map({ a: 'b' }).toOrderedMap(); - -orderedStringToNumber = OrderedMap({ a: 1 }); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: '1' }); -orderedStringToString = OrderedMap({ a: '1' }); - -orderedStringToNumber = OrderedMap(Map({ a: 1 })); -// $FlowExpectedError[incompatible-type-arg] - it's actually an OrderedMap -orderedStringToNumber = OrderedMap(Map({ a: '1' })); - -orderedStringToNumber = OrderedMap(); - -orderedStringToNumber = OrderedMap().set('b', 2); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap().set('b', '2'); -orderedStringToString = OrderedMap().set('b', '2'); - -orderedStringToNumber = OrderedMap({ a: 1 }).delete('a'); -orderedStringToNumber = OrderedMap({ a: 1 }).remove('a'); -orderedStringToNumber = OrderedMap({ a: 1 }).clear(); - -orderedStringToNumber = OrderedMap({ a: 1 }).update(() => OrderedMap({ b: 1 })); -/** - * TODO: the following is valid but I question if it should be valid: - * - * ``` - * const x: OrderedMap = OrderedMap({'a': 1}) - * .update(() => OrderedMap({'b': '1'})) - * ``` - * - * In the above example, `update` is changing an OrderedMap to an OrderedMap - * This seems inconsistent with the typescript signature of - * - * ``` - * update(updater: (value: Map) => Map): Map - * ``` - */ -orderedStringToNumber = OrderedMap({ a: 1 }).update(() => - // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap - OrderedMap({ b: '1' }) -); -orderedStringToString = OrderedMap({ a: 1 }).update(() => - OrderedMap({ b: '1' }) -); - -orderedStringToNumber = OrderedMap({ a: 1 }).update('a', (value) => value + 1); -/** - * TODO: is the below the intended functionality? The typescript signature looks like - * - * ``` - * update(key: K, updater: (value: V) => V): Map; - * ``` - * - * so it seems like in this case the updater should only be able to return numbers. - * This comment applies to all of the update / merge functions in Map and OrderedMap - */ -// $FlowExpectedError[incompatible-call] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).update('a', () => 'b'); -orderedStringToNumberOrString = OrderedMap({ a: 1 }).update('a', () => 'b'); - -orderedStringToNumber = OrderedMap({ a: 1 }).update( - 'a', - 0, - (value) => value + 1 -); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).update('a', 0, () => 'b'); -orderedStringToNumberOrString = OrderedMap({ a: 1 }).update('a', 0, () => 'b'); - -orderedStringToNumber = OrderedMap({ a: 1 }).merge({ b: 2 }); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).merge({ b: '2' }); -orderedStringToNumberOrString = OrderedMap({ a: 1 }).merge({ b: '2' }); - -orderedStringToNumber = OrderedMap({ a: 1 }).mergeWith( - (prev, next) => next, - { a: 2, b: 3 } -); -orderedStringToNumber = OrderedMap({ a: 1 }).mergeWith( - // $FlowExpectedError[incompatible-call] - (prev, next) => next, - // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap - { a: '2', b: '3' } -); -orderedStringToNumberOrString = OrderedMap({ a: 1 }).mergeWith( - (prev, next) => next, - { a: '2', b: '3' } -); -// $FlowExpectedError[incompatible-call] - the array [1] is not a valid argument -orderedStringToNumber = OrderedMap({ a: 1 }).mergeWith((prev, next) => next, [ - 1, -]); - -orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeep({ a: 2 }); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeep({ a: '2' }); -orderedStringToNumberOrString = OrderedMap({ a: 1 }).mergeDeep({ a: '2' }); - -orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepWith( - (prev, next) => next, - { a: 2, b: 3 } -); -orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepWith( - (prev, next) => next, - // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap - { a: '2', b: '3' } -); -orderedStringToNumberOrString = OrderedMap({ a: 1 }).mergeDeepWith( - (prev, next) => next, - { a: '2', b: '3' } -); -orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepWith( - (prev, next) => next, - // $FlowExpectedError[incompatible-call] - the array [1] is an invalid argument - [1] -); - -// $FlowExpectedError[incompatible-type] -orderedStringToNumber = OrderedMap({ a: 1 }).setIn([], 3); -// $FlowExpectedError[incompatible-type-arg] -orderedStringToNumber = OrderedMap({ a: 1 }).setIn([1], 3); -orderedStringToNumber = OrderedMap({ a: 1 }).setIn(['a'], 3); -// $FlowExpectedError[incompatible-type] -orderedStringToNumber = OrderedMap({ a: 1 }).deleteIn([]); -// $FlowExpectedError[incompatible-type] -orderedStringToNumber = OrderedMap({ a: 1 }).removeIn([]); -// $FlowExpectedError[incompatible-type-arg] -orderedStringToNumber = OrderedMap({ a: 1 }).deleteIn([1]); -// $FlowExpectedError[incompatible-type-arg] -orderedStringToNumber = OrderedMap({ a: 1 }).removeIn([1]); -orderedStringToNumber = OrderedMap({ a: 1 }).deleteIn(['b']); -orderedStringToNumber = OrderedMap({ a: 1 }).removeIn(['b']); - -// $FlowExpectedError[incompatible-type] -orderedStringToNumber = OrderedMap({ a: 1 }).updateIn([], (v) => v + 1); -// $FlowExpectedError[incompatible-type-arg] -orderedStringToNumber = OrderedMap({ a: 1 }).updateIn([1], (v) => v + 1); -// $FlowExpectedError[incompatible-call] -orderedStringToNumber = OrderedMap({ a: 1 }).updateIn(['a'], (v) => 'a'); -orderedStringToNumber = OrderedMap({ a: 1 }).updateIn(['a'], (v) => v + 1); -orderedStringToNumber = OrderedMap({ a: 1 }).updateIn(['a'], 0, (v) => v + 1); - -// $FlowExpectedError[incompatible-call] -OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 1], (v) => v + 1); -// $FlowExpectedError[incompatible-call] -OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 'y'], (v) => 'a'); -OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 'y'], (v) => v + 1); -OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 'y'], 0, (v) => v + 1); - -orderedStringToNumber = OrderedMap({ a: 1 }).mergeIn([], { b: 2 }); -orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepIn([], { b: 2 }); -orderedStringToNumber = OrderedMap({ a: 1 }).withMutations((mutable) => - mutable.set('b', 2) -); -orderedStringToNumber = OrderedMap({ a: 1 }).asMutable(); -orderedStringToNumber = OrderedMap({ a: 1 }).asImmutable(); - -orderedStringToNumber = OrderedMap({ a: 1 }).map((v) => v + 1); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).map(() => 'a'); -orderedStringToString = OrderedMap({ a: 1 }).map(() => 'a'); - -orderedStringToNumber = OrderedMap({ a: 1 }).flatMap((v, k) => - OrderedMap({ [k]: v + 1 }) -); -orderedStringToNumber = OrderedMap({ a: 1 }).flatMap((v, k) => - // $FlowExpectedError[incompatible-call] - string "a" is not a number - OrderedMap({ [k]: 'a' }) -); - -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).flip(); -orderedNumberToString = OrderedMap({ a: 1 }).flip(); - -orderedStringToNumber = OrderedMap({ a: 1 }).mapKeys((x) => x); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap -orderedStringToNumber = OrderedMap({ a: 1 }).mapKeys((x) => 1); -orderedNumberToNumber = OrderedMap({ a: 1 }).mapKeys((x) => 1); - -orderedStringToNumber = OrderedMap({ a: 1 }).flatten(); -orderedStringToNumber = OrderedMap({ a: 1 }).flatten(1); -orderedStringToNumber = OrderedMap({ a: 1 }).flatten(true); -// $FlowExpectedError[incompatible-call] - 'a' is an invalid argument -orderedStringToNumber = OrderedMap({ a: 1 }).flatten('a'); - -/* Set */ - -numberSet = Set(); -numberOrStringSet = Set(); -stringSet = Set(); - -numberSet = Set([1, 2, 3]); -// $FlowExpectedError[incompatible-call] -numberSet = Set(['a', 'b']); - -numberSet = Set.of(1, 2); -// $FlowExpectedError[incompatible-call] -numberSet = Set.of('a', 'b'); - -numberSet = Set.fromKeys(Map().set(1, '')); -stringSet = Set.fromKeys({ a: '' }); -// $FlowExpectedError[incompatible-type-arg] -numberSet = Set.fromKeys(Map({ a: 1 })); -// $FlowExpectedError[incompatible-type-arg] -numberSet = Set.fromKeys({ a: 1 }); - -numberOrStringSet = Set([1]).add('a'); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).add('s'); - -numberSet = Set([1]).delete(1); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).delete('a'); -// $FlowExpectedError[incompatible-call] -numberSet = Set(['a']).delete('a'); - -numberSet = Set([1]).remove(1); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).remove('a'); -// $FlowExpectedError[incompatible-call] -numberSet = Set(['a']).remove('a'); - -numberSet = Set([1]).clear(); -// $FlowExpectedError[incompatible-call] -numberSet = Set(['a']).clear(); - -numberOrStringSet = Set(['a']).union([1]); -numberOrStringSet = Set(['a']).union(Set([1])); -numberSet = Set([1]).union([1]); -numberSet = Set([1]).union(Set([1])); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).union(['a']); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).union(Set(['a'])); - -numberOrStringSet = Set(['a']).merge([1]); -numberOrStringSet = Set(['a']).merge(Set([1])); -numberSet = Set([1]).merge([1]); -numberSet = Set([1]).merge(Set([1])); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).merge(['a']); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).merge(Set(['a'])); - -numberSet = Set([1]).intersect(Set([1])); -numberSet = Set([1]).intersect([1]); -numberSet = Set([1]).intersect(Set(['a'])); -numberSet = Set([1]).intersect(['a']); - -numberSet = Set([1]).subtract(Set([1])); -numberSet = Set([1]).subtract([1]); -numberSet = Set([1]).subtract(Set(['a'])); -numberSet = Set([1]).subtract(['a']); - -numberSet = Set([1]).withMutations((mutable) => mutable); -// $FlowExpectedError[incompatible-call] -stringSet = Set([1]).withMutations((mutable) => mutable); - -numberSet = Set([1]).asMutable(); -// $FlowExpectedError[incompatible-call] -stringSet = Set([1]).asMutable(); - -numberSet = Set([1]).asImmutable(); -// $FlowExpectedError[incompatible-call] -stringSet = Set([1]).asImmutable(); - -stringSet = Set([1]).map((value, index, iter) => 'a'); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).map((value, index, iter) => 'a'); - -stringSet = Set([1]).flatMap((value, index, iter) => ['a']); -// $FlowExpectedError[incompatible-call] -numberSet = Set([1]).flatMap((value, index, iter) => ['a']); - -numberSet = Set([1]).flatten(); - -/* OrderedSet */ - -orderedStringSet = Set(['a']).toOrderedSet(); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = Set([1]).toOrderedSet(); -orderedNumberSet = Set([1]).toOrderedSet(); - -orderedStringSet = OrderedSet(['a']); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = OrderedSet([1]); -orderedNumberSet = OrderedSet([1]); - -orderedStringSet = OrderedSet(List.of('a')); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = OrderedSet(List.of(1)); -orderedNumberSet = OrderedSet(List.of(1)); - -orderedStringSet = OrderedSet.of('a', 'b', 'c'); -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = OrderedSet.of(1); -orderedNumberSet = OrderedSet.of(1); - -orderedStringSet = OrderedSet.fromKeys(Map({ a: 1 })); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedSet -orderedNumberSet = OrderedSet.fromKeys(Map({ a: 1 })); - -orderedStringSet = OrderedSet.fromKeys({ a: 1 }); -// $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedSet -orderedNumberSet = OrderedSet.fromKeys({ a: 1 }); - -orderedStringSet = OrderedSet(); - -orderedStringSet = OrderedSet.of('a').add('b'); -/** - * TODO: in typescript definitions, add looks like - * - * ``` - * add(value: T): Set - * ``` - * - * so we shouldn't be able to add a number to a set of strings - */ -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = OrderedSet('a').add(1); -orderedNumberOrStringSet = OrderedSet('a').add(1); - -orderedStringSet = OrderedSet.of('a').delete('a'); -// $FlowExpectedError[incompatible-call] - 1 is an invalid arg -orderedStringSet = OrderedSet.of('a').delete(1); - -orderedStringSet = OrderedSet.of('a').remove('a'); -// $FlowExpectedError[incompatible-call] - 1 is an invalid arg -orderedStringSet = OrderedSet.of('a').remove(1); - -orderedStringSet = OrderedSet.of('a').clear(); - -orderedStringSet = OrderedSet.of('a').union(OrderedSet.of('b')); -/** - * TODO: typescript def looks like - * - * ``` - * union(...iterables: Array[]): Set - * ``` - * - * so we shouldn't be able to merge strings and numbers - */ -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = OrderedSet.of('a').union(OrderedSet.of(1)); -orderedNumberOrStringSet = OrderedSet.of('a').union(OrderedSet.of(1)); - -orderedStringSet = OrderedSet.of('a').merge(OrderedSet.of('b')); -/** - * TODO: typescript def looks like - * - * ``` - * merge(...iterables: Array[]): Set - * ``` - * - * so we shouldn't be able to merge strings and numbers - */ -// $FlowExpectedError[incompatible-call] - this is actually an OrderedSet -orderedStringSet = OrderedSet.of('a').merge(OrderedSet.of(1)); -orderedNumberOrStringSet = OrderedSet.of('a').merge(OrderedSet.of(1)); - -orderedStringSet = OrderedSet.of('a', 'b').intersect(OrderedSet.of('a')); -/** - * TODO: typescript def looks like - * - * ``` - * intersect(...iterables: Array[]): Set - * ``` - * - * so we shouldn't be able to intersect strings and numbers - */ -orderedStringSet = OrderedSet.of('a', 'b').intersect(OrderedSet.of(1)); - -orderedStringSet = OrderedSet.of('a', 'b').subtract(OrderedSet.of('a')); -/** - * TODO: typescript def looks like - * - * ``` - * subtract(...iterables: Array[]): Set - * ``` - * - * so we shouldn't be able to intersect strings and numbers - */ -orderedStringSet = OrderedSet.of('a', 'b').subtract(OrderedSet.of(1)); - -orderedStringSet = OrderedSet().withMutations((mutable) => mutable.add('a')); -orderedStringSet = OrderedSet.of('a').asMutable(); -orderedStringSet = OrderedSet.of('a').asImmutable(); - -orderedStringSet = OrderedSet.of('a', 'b').map((m) => m); -// $FlowExpectedError[incompatible-call] - this is an OrderedSet -orderedStringSet = OrderedSet.of('a', 'b').map(() => 1); -orderedNumberSet = OrderedSet.of('a', 'b').map(() => 1); - -orderedStringSet = OrderedSet.of('a', 'b').flatMap((m) => [m]); -// $FlowExpectedError[incompatible-call] - this is an OrderedSet -orderedStringSet = OrderedSet.of('a', 'b').flatMap((m) => [1]); -orderedNumberSet = OrderedSet.of('a', 'b').flatMap((m) => [1]); - -orderedStringSet = OrderedSet.of('a', 'b').flatten(1); -orderedStringSet = OrderedSet.of('a', 'b').flatten(false); -// $FlowExpectedError[incompatible-call] - invalid arg for flatten -orderedStringSet = OrderedSet.of('a', 'b').flatten('a'); - -/* Stack */ - -numberStack = Stack([1, 2]); -let numberStackSize: number = numberStack.size; -numberOrStringStack = Stack(['a', 1]); -// $FlowExpectedError[incompatible-call] -numberStack = Stack(['a', 'b']); - -numberStack = Stack.of(1, 2); -numberOrStringStack = Stack.of('a', 1); -// $FlowExpectedError[incompatible-call] -numberStack = Stack.of('a', 1); - -number = Stack([1]).peek(); -// $FlowExpectedError[incompatible-type] -number = Stack(['a']).peek(); - -numberStack = Stack([1]).unshift(1); -numberOrStringStack = Stack([1]).unshift('a'); -// $FlowExpectedError[incompatible-call] -numberStack = Stack([1]).unshift('a'); - -numberStack = Stack([1]).unshiftAll([1]); -numberOrStringStack = Stack([1]).unshiftAll(['a']); -// $FlowExpectedError[incompatible-call] -numberStack = Stack([1]).unshiftAll(['a']); - -numberStack = Stack.of(1).shift(); -// $FlowExpectedError[incompatible-call] -numberStack = Stack.of('a').shift(); - -numberStack = Stack().push(1); -numberOrStringStack = Stack([1]).push('a'); -// $FlowExpectedError[incompatible-call] -numberStack = Stack().push('a'); - -numberStack = Stack().pushAll([1]); -numberOrStringStack = Stack([1]).pushAll(['a']); -// $FlowExpectedError[incompatible-call] -numberStack = Stack().push(['a']); - -numberStack = Stack.of(1).pop(); -// $FlowExpectedError[incompatible-call] -numberStack = Stack.of('a').pop(); - -numberStack = Stack([1]).withMutations((mutable) => mutable); -// $FlowExpectedError[incompatible-call] -numberStack = Stack(['a']).withMutations((mutable) => mutable); - -numberStack = Stack([1]).asMutable(); -// $FlowExpectedError[incompatible-call] -numberStack = Stack(['a']).asMutable(); - -numberStack = Stack([1]).asImmutable(); -// $FlowExpectedError[incompatible-call] -numberStack = Stack(['a']).asImmutable(); - -numberStack = Stack([1]).map((value, index, iter) => 1); -// $FlowExpectedError[incompatible-call] -numberStack = Stack([1]).map((value, index, iter) => 'a'); - -numberStack = Stack([1]).flatMap((value, index, iter) => [1]); -// $FlowExpectedError[incompatible-call] -numberStack = Stack([1]).flatMap((value, index, iter) => ['a']); - -numberStack = Stack([1]).flatten(); -numberStack = Stack(['a']).flatten(); - -/* Range & Repeat */ - -// `{}` provide namespaces -{ - const numberSequence: IndexedSeq = Range(0, 0, 0); -} -{ - const numberSequence: IndexedSeq = Repeat(1, 5); -} - -{ - const stringSequence: IndexedSeq = Repeat('a', 5); -} -{ - // $FlowExpectedError[incompatible-call] - const stringSequence: IndexedSeq = Repeat(0, 1); -} -{ - // $FlowExpectedError[incompatible-type-arg] - const stringSequence: IndexedSeq = Range(0, 0, 0); -} - -/* Seq */ - -let numberSeq = Seq([1, 2, 3]); -// $FlowExpectedError[incompatible-type] -let numberSeqSize: number = numberSeq.size; -let maybeNumberSeqSize: ?number = numberSeq.size; - -/* Record */ - -type PersonRecordFields = { age: number, name: string }; -type PersonRecord = RecordOf; -const makePersonRecord: RecordFactory = Record({ - age: 900, - name: 'Yoda', -}); - -const personRecordInstance: PersonRecord = makePersonRecord({ age: 25 }); - -{ - // $FlowExpectedError[incompatible-type] - const age: string = personRecordInstance.get('age'); -} -{ - // $FlowExpectedError[incompatible-type] - const age: string = personRecordInstance.age; -} -{ - const age: number = personRecordInstance.get('age'); -} -{ - const age: number = personRecordInstance.age; -} - -// $FlowExpectedError[incompatible-call] -personRecordInstance.set('invalid', 25); -personRecordInstance.set('name', '25'); -personRecordInstance.set('age', 33); - -// FixMe: The first should be FlowExpectedError[incompatible-call], and the second two should be correct, -// however all three produce a hard to understand error because there is a bug -// with Flow's $Call utility type. -// set(personRecordInstance, 'invalid', 25) -// set(personRecordInstance, 'name', '25') -// set(personRecordInstance, 'age', 33) - -// Create a Map from a non-prototype "plain" Object -let someObj = Object.create(null); -someObj.x = 1; -someObj.y = 2; -let mapOfSomeObj: Map = Map(someObj); -// $FlowExpectedError[incompatible-call] - someObj is string -> number -let mapOfSomeObjMistake: Map = Map(someObj); - -// getIn() type - -// Deep nested -const deepData1: List> = List([Map([['apple', 'sauce']])]); -const deepNestedString1 = deepData1.getIn([0, 'apple']); -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = deepNestedString1; -} -{ - // $FlowExpectedError[incompatible-type] getIn can return undefined - const fail: string = deepNestedString1; -} -{ - const success: ?string = deepNestedString1; -} - -const listOfListOfNumber: List> = List([List([1, 2, 3])]); -const nestedNum = listOfListOfNumber.getIn([0, 1]); -{ - // $FlowExpectedError[incompatible-type] number is not string - const fail: ?string = nestedNum; -} -{ - // $FlowExpectedError[incompatible-type] getIn can return undefined - const fail: number = nestedNum; -} -{ - const success: ?number = nestedNum; -} -// $FlowExpectedError[incompatible-call] expected a number 1st key -listOfListOfNumber.getIn(['whoops', 1]); -// $FlowExpectedError[incompatible-call] expected a number 2nd key -listOfListOfNumber.getIn([0, 'whoops']); -// $FlowExpectedError[incompatible-call] too many keys! -listOfListOfNumber.getIn([0, 0, 'whoops']); - -// Deep nested -const deepData: List>> = List([ - Map([['apple', List(['sauce'])]]), -]); -const deepNestedString = deepData.getIn([0, 'apple', 0]); -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = deepNestedString; -} -{ - // $FlowExpectedError[incompatible-type] getIn can return undefined - const fail: string = deepNestedString; -} -{ - const success: ?string = deepNestedString; -} -// $FlowExpectedError[incompatible-call] expected a string 2nd key -deepData.getIn([0, 0, 0]); -// $FlowExpectedError[incompatible-call] expected a number 3rd key -deepData.getIn([0, 'apple', 'whoops']); - -// Containing Records -const listOfPersonRecord: List = List([personRecordInstance]); -const firstAge = listOfPersonRecord.getIn([0, 'age']); -{ - // $FlowExpectedError[incompatible-type] expected a string key - const age: string = firstAge; -} -{ - // $FlowExpectedError[incompatible-type] getIn can return undefined - const age: number = firstAge; -} -{ - const age: ?number = firstAge; -} -// $FlowExpectedError[incompatible-call] - the first key is not an index -listOfPersonRecord.getIn(['wrong', 'age']); -// $FlowExpectedError[incompatible-call] - the second key is not an record key -listOfPersonRecord.getIn([0, 'mispeld']); -// $FlowExpectedError[incompatible-call] - the second key is not an record key -listOfPersonRecord.getIn([0, 0]); -// $FlowExpectedError[incompatible-call] -listOfPersonRecord.setIn([0, 'age'], 'Thirteen'); -listOfPersonRecord.setIn([0, 'age'], 13); -// $FlowExpectedError[prop-missing] -listOfPersonRecord.updateIn([0, 'age'], (value) => value.unknownFunction()); -listOfPersonRecord.updateIn([0, 'age'], (value) => value + 1); -listOfPersonRecord.updateIn([0, 'age'], 0, (value) => value + 1); - -// Recursive Records -type PersonRecord2Fields = { name: string, friends: List }; -type PersonRecord2 = RecordOf; -const makePersonRecord2: RecordFactory = Record({ - name: 'Adam', - friends: List(), -}); -const friendly: PersonRecord2 = makePersonRecord2(); -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = friendly.getIn(['friends', 0, 'name']); -} -// notSetValue provided -{ - const success: string = friendly.getIn(['friends', 0, 'name'], 'Abbie'); -} -{ - const success: ?string = friendly.getIn(['friends', 0, 'name']); -} - -// Functional API - -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = getIn(friendly, ['friends', 0, 'name']); -} -// notSetValue provided -{ - const success: string = getIn(friendly, ['friends', 0, 'name'], 'Abbie'); -} -{ - const success: ?string = getIn(friendly, ['friends', 0, 'name']); -} - -// Deep nested containing recursive Records -const friendlies: List = List([makePersonRecord2()]); -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = friendlies.getIn([0, 'friends', 0, 'name']); -} -// notSetValue provided -{ - const success: string = friendlies.getIn([0, 'friends', 0, 'name'], 'Abbie'); -} -{ - const success: ?string = friendlies.getIn([0, 'friends', 0, 'name']); -} -// $FlowExpectedError[incompatible-call] -friendlies.setIn([0, 'friends', 0, 'name'], 123); -friendlies.setIn([0, 'friends', 0, 'name'], 'Sally'); -friendlies.updateIn([0, 'friends', 0, 'name'], (value) => - // $FlowExpectedError[prop-missing] - value.unknownFunction() -); -friendlies.updateIn([0, 'friends', 0, 'name'], (value) => value.toUpperCase()); -friendlies.updateIn([0, 'friends', 0, 'name'], 'Unknown Name', (value) => - value.toUpperCase() -); - -// Nested plain JS values -type PlainPerson = { name: string, friends: Array }; -const plainFriendly: PlainPerson = { name: 'Bobbie', friends: [] }; -const plainFriendlies: List = List([plainFriendly]); - -{ - // $FlowExpectedError[incompatible-call] 'fraaands' is an unknown key in PlainPerson - const fail: ?number = plainFriendlies.getIn([0, 'fraaands', 0, 'name']); -} -{ - // $FlowExpectedError[incompatible-call] 0 is an unknown key in PlainPerson - const fail: ?number = plainFriendlies.getIn([0, 'fraaands', 0, 0]); -} -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = plainFriendlies.getIn([0, 'friends', 0, 'name']); -} -{ - // $FlowExpectedError[incompatible-type] can return undefined - const fail: string = plainFriendlies.getIn([0, 'friends', 0, 'name']); -} -{ - const success: ?string = plainFriendlies.getIn([0, 'friends', 0, 'name']); -} - -// $FlowExpectedError[incompatible-call] number is not a string -plainFriendlies.setIn([0, 'friends', 0, 'name'], 123); -plainFriendlies.setIn([0, 'friends', 0, 'name'], 'Morgan'); - -plainFriendlies.updateIn([0, 'friends', 0, 'name'], (value) => - // $FlowExpectedError[prop-missing] value is a string, this is an unknown function - value.unknownFunction() -); -plainFriendlies.updateIn([0, 'friends', 0, 'name'], (value) => - value.toUpperCase() -); - -// $FlowExpectedError[incompatible-call] number is not a string -plainFriendlies.updateIn([0, 'friends', 0, 'name'], () => 123); -plainFriendlies.updateIn([0, 'friends', 0, 'name'], () => 'Whitney'); - -// Functional API - -{ - // $FlowExpectedError[incompatible-call] 'fraaands' is an unknown key in PlainPerson - const fail: ?number = getIn(plainFriendlies, [0, 'fraaands', 0, 'name']); -} -{ - // $FlowExpectedError[incompatible-call] 0 is an unknown key in PlainPerson - const fail: ?number = getIn(plainFriendlies, [0, 'fraaands', 0, 0]); -} -{ - // $FlowExpectedError[incompatible-type] string is not a number - const fail: ?number = getIn(plainFriendlies, [0, 'friends', 0, 'name']); -} -{ - // $FlowExpectedError[incompatible-type] can return undefined - const fail: string = getIn(plainFriendlies, [0, 'friends', 0, 'name']); -} -{ - const success: ?string = getIn(plainFriendlies, [0, 'friends', 0, 'name']); -} - -// $FlowExpectedError[incompatible-call] number is not a string -setIn(plainFriendlies, [0, 'friends', 0, 'name'], 123); -setIn(plainFriendlies, [0, 'friends', 0, 'name'], 'Morgan'); - -updateIn(plainFriendlies, [0, 'friends', 0, 'name'], (value) => - // $FlowExpectedError[prop-missing] value is a string, this is an unknown function - value.unknownFunction() -); -updateIn(plainFriendlies, [0, 'friends', 0, 'name'], (value) => - value.toUpperCase() -); - -// $FlowExpectedError[incompatible-call] number is not a string -updateIn(plainFriendlies, [0, 'friends', 0, 'name'], () => 123); -updateIn(plainFriendlies, [0, 'friends', 0, 'name'], () => 'Whitney'); - -// Plain JS values - -{ - const success: number | void = get([1, 2, 3], 0); -} -{ - const success: number | string = get([1, 2, 3], 0, 'missing'); -} -{ - // $FlowExpectedError[incompatible-call] - string is not an array index - const success: number = get([1, 2, 3], 'z'); -} -// Note: does not return null since x is known to exist in {x,y} -{ - const success: number = get({ x: 10, y: 10 }, 'x'); -} -{ - // $FlowExpectedError[incompatible-call] - z is not in {x,y} - const success: number | void = get({ x: 10, y: 10 }, 'z'); -} -{ - const objMap: { [string]: number } = { x: 10, y: 10 }; - const success: number | void = get(objMap, 'z'); -} -{ - const success: number = get({ x: 10, y: 10 }, 'x', 'missing'); -} -{ - const objMap: { [string]: number } = { x: 10, y: 10 }; - const success: number | string = get(objMap, 'z', 'missing'); -} - -// Deeply nested records - -type DeepNestFields = { - foo: number, -}; -type DeepNest = RecordOf; -const deepNest: RecordFactory = Record({ - foo: 0, -}); - -type NestFields = { - deepNest: DeepNest, -}; -type Nest = RecordOf; -const nest: RecordFactory = Record({ - deepNest: deepNest(), -}); - -type StateFields = { - nest: Nest, -}; -type State = RecordOf; -const initialState: RecordFactory = Record({ - nest: nest(), -}); - -const state = initialState(); -(state.setIn(['nest', 'deepNest', 'foo'], 5): State); -// $FlowExpectedError[incompatible-call] -(state.setIn(['nest', 'deepNest', 'foo'], 'string'): State); -// $FlowExpectedError[incompatible-call] -(state.setIn(['nest', 'deepNest', 'unknownField'], 5): State); diff --git a/type-definitions/flow-tests/merge.js b/type-definitions/flow-tests/merge.js deleted file mode 100644 index ad4cc4b21f..0000000000 --- a/type-definitions/flow-tests/merge.js +++ /dev/null @@ -1,138 +0,0 @@ -// @flow -import { - List, - Map, - Record, - type RecordOf, - type RecordFactory, - get, - getIn, - has, - hasIn, - merge, - mergeDeep, - mergeWith, - mergeDeepWith, - remove, - removeIn, - set, - setIn, - update, - updateIn, -} from 'immutable'; - -// merge: Objects as Maps - -type ObjMap = { [key: string]: T }; -const objMap: ObjMap = { x: 12, y: 34 }; -(merge(objMap, { x: 321 }): ObjMap); -(merge(objMap, { z: 321 }): ObjMap); -// $FlowExpectedError[incompatible-call] -(merge(objMap, { x: 'abc' }): ObjMap); -(merge(objMap, [['x', 321]]): ObjMap); -(merge(objMap, [['z', 321]]): ObjMap); -// $FlowExpectedError[incompatible-call] -(merge(objMap, [['x', 'abc']]): ObjMap); -// $FlowExpectedError[incompatible-call] -(merge(objMap, [321]): ObjMap); -(merge(objMap, Map({ x: 123 })): ObjMap); -(merge(objMap, Map({ z: 123 })): ObjMap); -(merge(objMap, Map([['x', 123]])): ObjMap); -(merge(objMap, Map([['z', 123]])): ObjMap); -// $FlowExpectedError[incompatible-call] -(merge(objMap, List([123])): ObjMap); - -// merge: Maps - -const map = Map({ key: 'value' }); -(merge(map, { key: 'alternate' }): Map); -(merge(map, { otherKey: 'value' }): Map); -(merge(map, Map({ key: 'alternate' })): Map); -(merge(map, Map({ otherKey: 'value' })): Map); -(merge(map, [['otherKey', 'value']]): Map); -// $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) -(merge(map, Map({ otherKey: 123 })): Map); -// $FlowExpectedError[incompatible-call] -(merge(map, [4, 5, 6]): Map); -// $FlowExpectedError[incompatible-call] -(merge(map, 123): Map); -// $FlowExpectedError[incompatible-call] -(merge(map, { '0': 123 }): Map); -// $FlowExpectedError[incompatible-call] -(merge(map, [ - [0, 4], - [1, 5], - [1, 6], -]): Map); - -// merge: Lists - -const list = List([1, 2, 3]); -(merge(list, [4, 5, 6]): List); -(merge(list, List([4, 5, 6])): List); -// $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) -(merge(list, ['a', 'b', 'c']): List); -// $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) -(merge(list, List(['a', 'b', 'c'])): List); -// $FlowExpectedError[incompatible-call] -(merge(list, 123): List); -// $FlowExpectedError[incompatible-call] -(merge(list, { '0': 123 }): List); -// $FlowExpectedError[incompatible-call] -(merge(list, Map({ '0': 123 })): List); -// $FlowExpectedError[incompatible-call] -(merge(list, [ - [0, 4], - [1, 5], - [1, 6], -]): List); - -// merge: Objects as Records - -type XYPoint = { x: number, y: number }; -const objRecord: XYPoint = { x: 12, y: 34 }; -(merge(objRecord, { x: 321 }): XYPoint); -(merge(objRecord, [['x', 321]]): XYPoint); -(merge(objRecord, Map({ x: 123 })): XYPoint); -(merge(objRecord, Map([['x', 123]])): XYPoint); -const xyPointRecord = Record({ x: 0, y: 0 }); -(merge(objRecord, xyPointRecord({ x: 321 })): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge(objRecord, { x: 'abc' }): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge({ x: 12, y: 34 }, [['x', 'abc']]): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge(objRecord, { z: 321 }): XYPoint); -// $FlowExpectedError[prop-missing]] -// $FlowExpectedError[invalid-call-util]] -(merge(objRecord, [['z', 321]]): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge(objRecord, Map({ z: 123 })): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge(objRecord, Map([['z', 123]])): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge(objRecord, [321]): XYPoint); -// $FlowExpectedError[incompatible-call] -(merge(objRecord, List([123])): XYPoint); - -// merge: Arrays - -const arr = [1, 2, 3]; -(merge(arr, [4, 5, 6]): Array); -(merge(arr, List([4, 5, 6])): Array); -// $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) -(merge(arr, ['a', 'b', 'c']): Array); -// $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) -(merge(arr, List(['a', 'b', 'c'])): Array); -// $FlowExpectedError[incompatible-call] -(merge(arr, 123): Array); -// $FlowExpectedError[incompatible-call] -(merge(arr, { '0': 123 }): Array); -// $FlowExpectedError[incompatible-call] -(merge(arr, Map({ '0': 123 })): Array); -// $FlowExpectedError[incompatible-call] -(merge(arr, [ - [0, 4], - [1, 5], - [1, 6], -]): Array); diff --git a/type-definitions/flow-tests/predicates.js b/type-definitions/flow-tests/predicates.js deleted file mode 100644 index a72072bb96..0000000000 --- a/type-definitions/flow-tests/predicates.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow -import { List } from 'immutable'; - -declare var mystery: mixed; - -// $FlowExpectedError[cannot-resolve-name] -maybe.push('3'); - -if (mystery instanceof List) { - maybe.push('3'); -} - -// Note: Flow's support for %checks is still experimental. -// Support this in the future. -// if (List.isList(mystery)) { -// mystery.push('3'); -// } diff --git a/type-definitions/flow-tests/record.js b/type-definitions/flow-tests/record.js deleted file mode 100644 index d820608d92..0000000000 --- a/type-definitions/flow-tests/record.js +++ /dev/null @@ -1,217 +0,0 @@ -// @flow -// Some tests look like they are repeated in order to avoid false positives. -// Flow might not complain about an instance of (what it thinks is) T to be assigned to T - -import { Record, type RecordFactory, type RecordOf, Map, List, merge } from 'immutable'; - -// Use the RecordFactory type to annotate -const Point2: RecordFactory<{ x: number, y: number }> = Record({ x: 0, y: 0 }); -const Point3: RecordFactory<{ x: number, y: number, z: number }> = Record({ - x: 0, - y: 0, - z: 0, -}); -type TGeoPoint = { lat: ?number, lon: ?number }; -const GeoPoint: RecordFactory = Record({ lat: null, lon: null }); - -// TODO: this should be FlowExpectedError - 'abc' is not a number -// However, due to support for the brittle support for subclassing, Flow -// cannot also type check default values in this position. -const PointWhoops: RecordFactory<{ x: number, y: number }> = Record({ - x: 0, - y: 'abc', -}); - -let origin2 = Point2({}); -let origin3 = Point3({}); -let geo = GeoPoint({ lat: 34 }); -// $FlowExpectedError[incompatible-call] -const mistake = Point2({ x: 'string' }); -origin3 = GeoPoint({ lat: 34 }); -geo = Point3({}); - -// Use RecordOf to type the return value of a Record factory function. -let geoPointExpected1: RecordOf = GeoPoint({}); - -// $FlowExpectedError[prop-missing] - Point2 does not return GeoPoint. -let geoPointExpected2: RecordOf = Point2({}); - -const px = origin2.get('x'); -const px2: number = origin2.x; -// $FlowExpectedError[incompatible-type] -const px3: number = origin2.get('x', 'not set value'); -const px4: number | string = origin2.get('x', 'not set value'); -// $FlowExpectedError[incompatible-call] -const pz = origin2.get('z'); -// $FlowExpectedError[incompatible-use] -const pz2 = origin2.z; - -origin2.set('x', 4); -// $FlowExpectedError[incompatible-call] -origin2.set('x', 'not-a-number'); -// $FlowExpectedError[incompatible-call] -origin2.set('z', 3); - -const name: string = Record.getDescriptiveName(origin2); -// $FlowExpectedError[incompatible-call] -const name2: string = Record.getDescriptiveName({}); - -// Note: need to cast through any when extending Records as if they ere classes -class ABClass extends (Record({ a: 1, b: 2 }): any) { - setA(a: number) { - return this.set('a', a); - } - - setB(b: number) { - return this.set('b', b); - } -} - -var t1 = new ABClass({ a: 1 }); -var t2 = t1.setA(3); -var t3 = t2.setB(10); -// Note: flow does not check extended Record classes yet -var t4 = t2.setC(10); - -// Note: flow does not check extended Record classes yet -var t1a: string = t1.a; -// Note: flow does not check extended Record classes yet -var t1c = t1.c; - -// Use of new to create record factories (supported, but discouraged) -type TPointNew = { x: number, y: number }; -type PointNew = RecordOf; -const MakePointNew: RecordFactory = new Record({ x: 0, y: 0 }); -// Not using new allows returning a record. -const origin: PointNew = MakePointNew(); -// Both get and prop access are supported with RecordOf -{ - const x: number = origin.get('x'); -} -{ - const x: number = origin.x; -} -{ - // $FlowExpectedError[incompatible-type] number is not a string - const x: string = origin.x; -} -// Can use the Record constructor type as an alternative, -// it just doesn't support property access. -const originAlt1: MakePointNew = MakePointNew(); -// Both get and prop access are supported with RecordOf -{ - const x: number = originAlt1.get('x'); -} -{ - // $FlowExpectedError[prop-missing] cannot use property access for this alternative annotation - const x: number = originAlt1.x; -} -// Can also sort of use the inner Record values type as an alternative, -// however it does not have the immutable record API, though useful for flowing -// immutable Records where plain objects are expected. -// Remember that Records are *read only*, and using the $ReadOnly helper type -// can ensure correct types. -const originAlt2: $ReadOnly = MakePointNew(); -{ - // $FlowExpectedError[prop-missing] cannot use Record API for this alternative annotation - const x: number = originAlt2.get('x'); -} -{ - const x: number = originAlt2.x; -} - -// Use of new may only return a class instance, not a record -// (supported but discouraged) -// $FlowExpectedError[class-object-subtyping] -// $FlowExpectedError[prop-missing] -const mistakeOriginNew: PointNew = new MakePointNew(); -// An alternative type strategy is instance based -const originNew: MakePointNew = new MakePointNew(); -// Only get, but not prop access are supported with class instances -{ - const x: number = originNew.get('x'); -} -{ - // $FlowExpectedError[prop-missing] property `x`. Property not found in RecordInstance - const x: number = originNew.x; -} - -// $FlowExpectedError[incompatible-call] instantiated with invalid type -const mistakeNewRecord = MakePointNew({ x: 'string' }); -// $FlowExpectedError[incompatible-call] instantiated with invalid type -const mistakeNewInstance = new MakePointNew({ x: 'string' }); - -// Subclassing - -// Note use of + for Read Only. -type TPerson = { +name: string, +age: number }; -const defaultValues: TPerson = { name: 'Aristotle', age: 2400 }; -const PersonRecord = Record(defaultValues); - -class Person extends PersonRecord { - getName(): string { - return this.get('name'); - } - - setName(name: string): this & TPerson { - return this.set('name', name); - } -} - -const person = new Person(); -(person.setName('Thales'): Person); -(person.getName(): string); -(person.setName('Thales').getName(): string); -(person.setName('Thales').name: string); -person.get('name'); -person.set('name', 'Thales'); -// $FlowExpectedError[incompatible-call] -person.get('unknown'); -// $FlowExpectedError[prop-missing] -person.set('unknown', 'Thales'); - -// Note: not -class PersonWithoutTypes extends PersonRecord { - getName(): string { - return this.get('name'); - } - - setName(name: string): this & TPerson { - return this.set('name', name); - } -} - -const person2 = new PersonWithoutTypes(); - -person2.get('name'); -// Note: no error -person2.get('unknown'); - - -// Functional Merge - -type XYPoint = { x: number, y: number }; -type XYPointRecord = RecordOf; -const xyRecord: RecordFactory = Record({ x: 0, y: 0 }); -const record = xyRecord(); -(merge(record, { x: 321 }): XYPointRecord); -(merge(record, xyRecord({ x: 321 })): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, { z: 321 }): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, { x: 'abc' }): XYPointRecord); -(merge(record, [['x', 321]]): XYPointRecord); -// $FlowExpectedError[prop-missing]] -(merge(record, [['z', 321]]): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, [['x', 'abc']]): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, [321]): XYPointRecord); -(merge(record, Map({ x: 123 })): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, Map({ z: 123 })): XYPointRecord); -(merge(record, Map([['x', 123]])): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, Map([['z', 123]])): XYPointRecord); -// $FlowExpectedError[incompatible-call] -(merge(record, List([123])): XYPointRecord); diff --git a/type-definitions/ts-tests/covariance.ts b/type-definitions/ts-tests/covariance.ts deleted file mode 100644 index b4c01e50e9..0000000000 --- a/type-definitions/ts-tests/covariance.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { expect, test } from 'tstyche'; -import { - List, - Map, - MapOf, - OrderedMap, - OrderedSet, - Set, - Stack, -} from 'immutable'; - -class A { - x: number; - - constructor() { - this.x = 1; - } -} - -class B extends A { - y: string; - - constructor() { - super(); - this.y = 'B'; - } -} - -class C { - z: string; - - constructor() { - this.z = 'C'; - } -} - -test('List covariance', () => { - expect>().type.toBeAssignableWith(List()); - - expect(List([new B()])).type.toBe>(); - - expect>().type.not.toBeAssignableWith(List()); -}); - -test('Map covariance', () => { - expect>().type.toBeAssignableWith>(); - - expect(Map({ b: new B() })).type.toBe>(); - - expect>().type.not.toBeAssignableWith>(); -}); - -test('Set covariance', () => { - expect>().type.toBeAssignableWith>(); - - expect(Set([new B()])).type.toBe>(); - - expect>().type.not.toBeAssignableWith>(); -}); - -test('Stack covariance', () => { - expect>().type.toBeAssignableWith>(); - - expect(Stack([new B()])).type.toBe>(); - - expect>().type.not.toBeAssignableWith>(); -}); - -test('OrderedMap covariance', () => { - expect>().type.toBeAssignableWith< - OrderedMap - >(); - - expect(OrderedMap({ b: new B() })).type.toBe>(); - - expect>().type.not.toBeAssignableWith< - OrderedMap - >(); -}); - -test('OrderedSet covariance', () => { - expect>().type.toBeAssignableWith>(); - - expect(OrderedSet([new B()])).type.toBe>(); - - expect>().type.not.toBeAssignableWith>(); -}); diff --git a/type-definitions/ts-tests/deepCopy.ts b/type-definitions/ts-tests/deepCopy.ts deleted file mode 100644 index 25e262fd81..0000000000 --- a/type-definitions/ts-tests/deepCopy.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { describe, expect, test } from 'tstyche'; -import { List, Map, Record, Set, Seq, DeepCopy, Collection } from 'immutable'; - -describe('DeepCopy', () => { - test('basic types', () => { - expect< - DeepCopy<{ - a: number; - b: number; - }> - >().type.toBe<{ - a: number; - b: number; - }>(); - }); - - test('iterables', () => { - expect>().type.toBe(); - - expect>>().type.toBe(); - }); - - test('immutable first-level types', () => { - expect>>().type.toBe<{ - [x: string]: string; - }>(); - - // should be `{ [x: string]: object }`, but there is an issue with circular references - expect>>().type.toBe<{ - [x: string]: unknown; - }>(); - - // should be `{ [x: string]: object; [x: number]: object }`, but there is an issue with circular references - expect>>().type.toBe<{ - [x: string]: unknown; - [x: number]: unknown; - }>(); - - expect>>().type.toBe(); - - expect>>().type.toBe(); - }); - - test('keyed', () => { - expect>>().type.toBe<{ - [x: string]: number; - }>(); - - expect>>().type.toBe<{ - [x: string]: number; - [x: number]: number; - }>(); - - expect>>().type.toBe<{ - [x: string]: number; - [x: number]: number; - }>(); - - expect>>().type.toBe<{ - [x: string]: number; - [x: number]: number; - }>(); - }); - - test('nested', () => { - // should be `{ map: { [x: string]: string }; list: string[]; set: string[] }`, but there is an issue with circular references - expect< - DeepCopy<{ - map: Map; - list: List; - set: Set; - }> - >().type.toBe<{ map: unknown; list: unknown; set: unknown }>(); - - // should be `{ map: { [x: string]: string } }`, but there is an issue with circular references - expect>>>().type.toBe<{ - map: unknown; - }>(); - }); - - test('circular references', () => { - type Article = Record<{ title: string; tag: Tag }>; - type Tag = Record<{ name: string; article: Article }>; - - // should handle circular references here somehow - expect>().type.toBe<{ title: string; tag: unknown }>(); - }); - - test('circular references #1957', () => { - class Foo1 extends Record<{ foo: undefined | Foo1 }>({ - foo: undefined, - }) {} - - class Foo2 extends Record<{ foo?: Foo2 }>({ - foo: undefined, - }) {} - - class Foo3 extends Record<{ foo: null | Foo3 }>({ - foo: null, - }) {} - - expect>().type.toBe<{ foo: unknown }>(); - expect>().type.toBe<{ foo?: unknown }>(); - expect>().type.toBe<{ foo: unknown }>(); - - class FooWithList extends Record<{ foo: undefined | List }>({ - foo: undefined, - }) {} - - expect>().type.toBe<{ foo: unknown }>(); - }); -}); diff --git a/type-definitions/ts-tests/empty.ts b/type-definitions/ts-tests/empty.ts deleted file mode 100644 index e9425c6eb5..0000000000 --- a/type-definitions/ts-tests/empty.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { expect, test } from 'tstyche'; -import { Seq, Collection } from 'immutable'; - -test('typed empty Seq', () => { - expect(Seq()).type.toBe>(); - - expect(Seq()).type.toBe>(); - - expect(Seq.Indexed()).type.toBe>(); - - expect(Seq.Indexed()).type.toBe>(); - - expect(Seq.Keyed()).type.toBe>(); - - expect(Seq.Keyed()).type.toBe>(); - - expect(Seq.Set()).type.toBe>(); - - expect(Seq.Set()).type.toBe>(); -}); - -test('typed empty Collection', () => { - expect(Collection()).type.toBe>(); - - expect(Collection()).type.toBe>(); - - expect(Collection.Indexed()).type.toBe>(); - - expect(Collection.Indexed()).type.toBe>(); - - expect(Collection.Keyed()).type.toBe>(); - - expect(Collection.Keyed()).type.toBe< - Collection.Keyed - >(); - - expect(Collection.Set()).type.toBe>(); - - expect(Collection.Set()).type.toBe>(); -}); diff --git a/type-definitions/ts-tests/es6-collections.ts b/type-definitions/ts-tests/es6-collections.ts deleted file mode 100644 index 790bc3cf2b..0000000000 --- a/type-definitions/ts-tests/es6-collections.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { expect, test } from 'tstyche'; -import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable'; - -test('immutable.js collections', () => { - const mapImmutable: ImmutableMap = ImmutableMap< - string, - number - >(); - const setImmutable: ImmutableSet = ImmutableSet(); - - expect(mapImmutable.delete('foo')).type.toBe>(); - expect(setImmutable.delete('bar')).type.toBe>(); -}); - -test('ES6 collections', () => { - const mapES6: Map = new Map(); - const setES6: Set = new Set(); - - expect(mapES6.delete('foo')).type.toBe(); - expect(setES6.delete('bar')).type.toBe(); -}); diff --git a/type-definitions/ts-tests/exports.ts b/type-definitions/ts-tests/exports.ts deleted file mode 100644 index 39f9d2fe49..0000000000 --- a/type-definitions/ts-tests/exports.ts +++ /dev/null @@ -1,112 +0,0 @@ -// Some tests look like they are repeated in order to avoid false positives. - -import { expect, test } from 'tstyche'; -import * as Immutable from 'immutable'; -import { - List, - Map, - OrderedMap, - OrderedSet, - Range, - Repeat, - Seq, - Set, - Stack, - Collection, -} from 'immutable'; - -test('named imports', () => { - expect(List).type.toBe(); - - expect(Map).type.toBe(); - - expect(OrderedMap).type.toBe(); - - expect(OrderedSet).type.toBe(); - - expect(Range).type.toBe< - ( - start: number, - end: number, - step?: number | undefined - ) => Seq.Indexed - >(); - - expect(Repeat).type.toBe< - (value: T, times?: number | undefined) => Seq.Indexed - >(); - - expect(Seq).type.toBe(); - - expect(Set).type.toBe(); - - expect(Stack).type.toBe(); - - expect(Collection).type.toBe(); - - expect(Collection.Set).type.toBe< - ( - collection?: Iterable | ArrayLike | undefined - ) => Collection.Set - >(); - - expect(Collection.Keyed).type.toBe<{ - (collection?: Iterable<[K, V]> | undefined): Collection.Keyed; - (obj: { [key: string]: V }): Collection.Keyed; - }>(); - - expect(Collection.Indexed).type.toBe< - ( - collection?: Iterable | ArrayLike | undefined - ) => Collection.Indexed - >(); -}); - -test('namespace import', () => { - expect(Immutable.List).type.toBe(); - - expect(Immutable.Map).type.toBe(); - - expect(Immutable.OrderedMap).type.toBe(); - - expect(Immutable.OrderedSet).type.toBe(); - - expect(Immutable.Range).type.toBe< - ( - start: number, - end: number, - step?: number | undefined - ) => Immutable.Seq.Indexed - >(); - - expect(Immutable.Repeat).type.toBe< - (value: T, times?: number | undefined) => Immutable.Seq.Indexed - >(); - - expect(Immutable.Seq).type.toBe(); - - expect(Immutable.Set).type.toBe(); - - expect(Immutable.Stack).type.toBe(); - - expect(Immutable.Collection).type.toBe(); - - expect(Immutable.Collection.Set).type.toBe< - ( - collection?: Iterable | ArrayLike | undefined - ) => Immutable.Collection.Set - >(); - - expect(Immutable.Collection.Keyed).type.toBe<{ - ( - collection?: Iterable<[K, V]> | undefined - ): Immutable.Collection.Keyed; - (obj: { [key: string]: V }): Immutable.Collection.Keyed; - }>(); - - expect(Immutable.Collection.Indexed).type.toBe< - ( - collection?: Iterable | ArrayLike | undefined - ) => Immutable.Collection.Indexed - >(); -}); diff --git a/type-definitions/ts-tests/from-js.ts b/type-definitions/ts-tests/from-js.ts deleted file mode 100644 index f04a1e78f8..0000000000 --- a/type-definitions/ts-tests/from-js.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { expect, test } from 'tstyche'; -import { fromJS, Collection, List, Map, MapOf } from 'immutable'; - -test('fromJS', () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - expect(fromJS({}, (a: any, b: any) => b)).type.toBe< - Collection - >(); - - expect(fromJS('abc')).type.toBe(); - - expect(fromJS([0, 1, 2])).type.toBe>(); - - expect(fromJS(List([0, 1, 2]))).type.toBe>(); - - expect(fromJS({ a: 0, b: 1, c: 2 })).type.toBe< - Map<'b' | 'a' | 'c', number> - >(); - - expect(fromJS(Map({ a: 0, b: 1, c: 2 }))).type.toBe< - MapOf<{ a: number; b: number; c: number }> - >(); - - expect(fromJS([{ a: 0 }])).type.toBe>>(); - - expect(fromJS({ a: [0] })).type.toBe>>(); - - expect(fromJS([[[0]]])).type.toBe>>>(); - - expect(fromJS({ a: { b: { c: 0 } } })).type.toBe< - Map<'a', Map<'b', Map<'c', number>>> - >(); -}); - -test('fromJS in an array of function', () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const create = [(data: any) => data, fromJS][1]; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - expect(create({ a: 'A' })).type.toBe(); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const createConst = ([(data: any) => data, fromJS] as const)[1]; - - expect(createConst({ a: 'A' })).type.toBe>(); -}); diff --git a/type-definitions/ts-tests/functional.ts b/type-definitions/ts-tests/functional.ts deleted file mode 100644 index 01a8636c50..0000000000 --- a/type-definitions/ts-tests/functional.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { expect, test } from 'tstyche'; -import { - get, - getIn, - has, - hasIn, - set, - remove, - update, - Map, - List, - MapOf, -} from 'immutable'; - -test('get', () => { - expect(get([1, 2, 3], 0)).type.toBe(); - - expect(get([1, 2, 3], 0, 'a')).type.toBe(); - - expect(get({ x: 10, y: 20 }, 'x')).type.toBe(); - - expect(get({ x: 10, y: 20 }, 'z', 'missing')).type.toBe(); -}); - -test('getIn', () => { - expect(getIn('a', ['length' as const])).type.toBe(); - - expect(getIn([1, 2, 3], [0])).type.toBe(); - - // first parameter type is Array so we can not detect that the number will be invalid - expect(getIn([1, 2, 3], [99])).type.toBe(); - - // We do not handle List in getIn TS type yet (hard to convert to a tuple) - expect(getIn([1, 2, 3], List([0]))).type.toBe(); - - expect(getIn([1, 2, 3], [0], 'a' as const)).type.toBe(); - - expect(getIn(List([1, 2, 3]), [0])).type.toBe(); - - // first parameter type is Array so we can not detect that the number will be invalid - expect(getIn(List([1, 2, 3]), [99])).type.toBe(); - - expect(getIn(List([1, 2, 3]), ['a' as const])).type.toBe(); - - expect( - getIn(List([1, 2, 3]), ['a' as const], 'missing') - ).type.toBe<'missing'>(); - - expect(getIn({ x: 10, y: 20 }, ['x' as const])).type.toBe(); - - expect( - getIn({ x: 10, y: 20 }, ['z' as const], 'missing') - ).type.toBe<'missing'>(); - - expect(getIn({ x: { y: 20 } }, ['x' as const])).type.toBe<{ y: number }>(); - - expect(getIn({ x: { y: 20 } }, ['z' as const])).type.toBe(); - - expect( - getIn({ x: { y: 20 } }, ['x' as const, 'y' as const]) - ).type.toBe(); - - expect( - getIn({ x: Map({ y: 20 }) }, ['x' as const, 'y' as const]) - ).type.toBe(); - - expect( - getIn(Map({ x: Map({ y: 20 }) }), ['x' as const, 'y' as const]) - ).type.toBe(); - - const o = Map({ x: List([Map({ y: 20 })]) }); - - expect(getIn(o, ['x' as const, 'y' as const])).type.toBe(); - - expect(getIn(o, ['x' as const])).type.toBe>>(); - - expect(getIn(o, ['x' as const, 0])).type.toBe>(); - - expect(getIn(o, ['x' as const, 0, 'y' as const])).type.toBe(); -}); - -test('has', () => { - expect(has([1, 2, 3], 0)).type.toBe(); - - expect(has({ x: 10, y: 20 }, 'x')).type.toBe(); -}); - -test('hasIn', () => { - expect(hasIn('a', ['length' as const])).type.toBe(); - - expect(hasIn(123, [])).type.toBe(); - - expect(hasIn(true, [])).type.toBe(); - - expect(hasIn([1, 2, 3], [0])).type.toBe(); - - // first parameter type is Array so we can not detect that the number will be invalid - expect(hasIn([1, 2, 3], [99])).type.toBe(); - - // We do not handle List in hasIn TS type yet (hard to convert to a tuple) - expect(hasIn([1, 2, 3], List([0]))).type.toBe(); - - expect(hasIn(List([1, 2, 3]), [0])).type.toBe(); - - // first parameter type is Array so we can not detect that the number will be invalid - expect(hasIn(List([1, 2, 3]), [99])).type.toBe(); - - expect(hasIn(List([1, 2, 3]), ['a' as const])).type.toBe(); - - expect(hasIn({ x: 10, y: 20 }, ['x' as const])).type.toBe(); - - expect(hasIn({ x: { y: 20 } }, ['z' as const])).type.toBe(); - - expect( - hasIn({ x: { y: 20 } }, ['x' as const, 'y' as const]) - ).type.toBe(); - - expect( - hasIn({ x: Map({ y: 20 }) }, ['x' as const, 'y' as const]) - ).type.toBe(); - - expect( - hasIn(Map({ x: Map({ y: 20 }) }), ['x' as const, 'y' as const]) - ).type.toBe(); - - const o = Map({ x: List([Map({ y: 20 })]) }); - - expect(hasIn(o, ['x' as const, 'y' as const])).type.toBe(); - - expect(hasIn(o, ['x' as const, 0, 'y' as const])).type.toBe(); -}); - -test('set', () => { - expect(set([1, 2, 3], 0, 10)).type.toBe(); - - expect(set([1, 2, 3], 0, 'a')).type.toRaiseError(); - - expect(set([1, 2, 3], 'a', 0)).type.toRaiseError(); - - expect(set({ x: 10, y: 20 }, 'x', 100)).type.toBe<{ - x: number; - y: number; - }>(); - - expect(set({ x: 10, y: 20 }, 'x', 'a')).type.toRaiseError(); -}); - -test('remove', () => { - expect(remove([1, 2, 3], 0)).type.toBe(); - - expect(remove({ x: 10, y: 20 }, 'x')).type.toBe<{ - x: number; - y: number; - }>(); -}); - -test('update', () => { - expect(update([1, 2, 3], 0, (v: number) => v + 1)).type.toBe(); - - expect(update([1, 2, 3], 0, 1)).type.toRaiseError(); - - expect(update([1, 2, 3], 0, (v: string) => v + 'a')).type.toRaiseError(); - - expect(update([1, 2, 3], 'a', (v: number) => v + 1)).type.toRaiseError(); - - expect(update({ x: 10, y: 20 }, 'x', (v: number) => v + 1)).type.toBe<{ - x: number; - y: number; - }>(); - - expect( - update({ x: 10, y: 20 }, 'x', (v: string) => v + 'a') - ).type.toRaiseError(); -}); diff --git a/type-definitions/ts-tests/groupBy.ts b/type-definitions/ts-tests/groupBy.ts deleted file mode 100644 index 141bfc2912..0000000000 --- a/type-definitions/ts-tests/groupBy.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { expect, test } from 'tstyche'; -import { - Collection, - List, - Map, - OrderedMap, - Set, - OrderedSet, - Seq, - Stack, - MapOf, -} from 'immutable'; - -test('groupBy', () => { - expect(Collection(['a', 'b', 'c', 'a']).groupBy((v) => v)).type.toBe< - Map> - >(); - - expect( - Collection({ a: 1, b: 2, c: 3, d: 1 }).groupBy((v) => `key-${v}`) - ).type.toBe>>(); - - expect(List(['a', 'b', 'c', 'a']).groupBy((v) => v)).type.toBe< - Map> - >(); - - expect(Seq(['a', 'b', 'c', 'a']).groupBy((v) => v)).type.toBe< - Map> - >(); - - expect(Seq({ a: 1, b: 2, c: 3, d: 1 }).groupBy((v) => `key-${v}`)).type.toBe< - Map> - >(); - - expect(Set(['a', 'b', 'c', 'a']).groupBy((v) => v)).type.toBe< - Map> - >(); - - expect(Stack(['a', 'b', 'c', 'a']).groupBy((v) => v)).type.toBe< - Map> - >(); - - expect(OrderedSet(['a', 'b', 'c', 'a']).groupBy((v) => v)).type.toBe< - Map> - >(); - - expect( - Map({ a: 1, b: 2, c: 3, d: 1 }).groupBy((v) => `key-${v}`) - ).type.toBe>>(); - - // type should be something like Map>> but groupBy returns a wrong type with `this` - expect(Map({ a: 1, b: 2, c: 3, d: 1 }).groupBy((v) => `key-${v}`)).type.toBe< - Map> - >(); - - expect( - OrderedMap({ a: 1, b: 2, c: 3, d: 1 }).groupBy((v) => `key-${v}`) - ).type.toBe>>(); -}); diff --git a/type-definitions/ts-tests/list.ts b/type-definitions/ts-tests/list.ts deleted file mode 100644 index 2b86dca369..0000000000 --- a/type-definitions/ts-tests/list.ts +++ /dev/null @@ -1,403 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { - List, - get, - set, - remove, - update, - setIn, - removeIn, - updateIn, - merge, -} from 'immutable'; - -test('#constructor', () => { - expect(List()).type.toBe>(); - - expect>().type.toBeAssignableWith(List()); - - expect>().type.toBeAssignableWith(List([1, 'a'])); - expect>().type.not.toBeAssignableWith(List([1, 'a'])); -}); - -test('#size', () => { - expect(pick(List(), 'size')).type.toBe<{ readonly size: number }>(); -}); - -test('#setSize', () => { - expect(List().setSize(10)).type.toBe>(); - - expect(List().setSize('foo')).type.toRaiseError(); -}); - -test('.of', () => { - expect(List.of(1, 2, 3)).type.toBe>(); - - expect(List.of('a', 1)).type.toRaiseError(); - - expect(List.of('a', 1)).type.toBe>(); -}); - -test('#get', () => { - expect(List().get(4)).type.toBe(); - - expect(List().get(4, 'a')).type.toBe(); - - expect(List().get(4, 'a')).type.toRaiseError(); - - expect(get(List(), 4)).type.toBe(); - - expect(get(List(), 4, 'a')).type.toBe(); -}); - -test('#set', () => { - expect(List().set(0, 0)).type.toBe>(); - - expect(List().set(1, 'a')).type.toRaiseError(); - - expect(List().set('a', 1)).type.toRaiseError(); - - expect(List().set(0, 1)).type.toBe>(); - - expect(List().set(0, 'a')).type.toBe< - List - >(); - - expect(set(List(), 0, 0)).type.toBe>(); -}); - -test('#first', () => { - const a = List().first(); - // ^? - expect(List().first()).type.toBe(); - expect(List().first('first')).type.toBe(); -}); - -test('#last', () => { - expect(List().last()).type.toBe(); - expect(List().last('last')).type.toBe(); -}); - -test('#set', () => { - expect(set(List(), 1, 'a')).type.toRaiseError(); - - expect(set(List(), 'a', 1)).type.toRaiseError(); -}); - -test('#setIn', () => { - expect(List().setIn([], 0)).type.toBe>(); - - expect(setIn(List(), [], 0)).type.toBe>(); -}); - -test('#insert', () => { - expect(List().insert(0, 0)).type.toBe>(); - - expect(List().insert(1, 'a')).type.toRaiseError(); - - expect(List().insert('a', 1)).type.toRaiseError(); - - expect(List().insert(0, 1)).type.toBe< - List - >(); - - expect(List().insert(0, 'a')).type.toBe< - List - >(); -}); - -test('#push', () => { - expect(List().push(0, 0)).type.toBe>(); - - expect(List().push(1, 'a')).type.toRaiseError(); - - expect(List().push('a', 1)).type.toRaiseError(); - - expect(List().push(0, 1)).type.toBe>(); - - expect(List().push(0, 'a')).type.toBe< - List - >(); -}); - -test('#unshift', () => { - expect(List().unshift(0, 0)).type.toBe>(); - - expect(List().unshift(1, 'a')).type.toRaiseError(); - - expect(List().unshift('a', 1)).type.toRaiseError(); - - expect(List().unshift(0, 1)).type.toBe< - List - >(); - - expect(List().unshift(0, 'a')).type.toBe< - List - >(); -}); - -test('#delete', () => { - expect(List().delete(0)).type.toBe>(); - - expect(List().delete('a')).type.toRaiseError(); -}); - -test('#deleteIn', () => { - expect(List().deleteIn([])).type.toBe>(); -}); - -test('#remove', () => { - expect(List().remove(0)).type.toBe>(); - - expect(List().remove('a')).type.toRaiseError(); - - expect(remove(List(), 0)).type.toBe>(); -}); - -test('#removeIn', () => { - expect(List().removeIn([])).type.toBe>(); - - expect(removeIn(List(), [])).type.toBe>(); -}); - -test('#clear', () => { - expect(List().clear()).type.toBe>(); - - expect(List().clear(10)).type.toRaiseError(); -}); - -test('#pop', () => { - expect(List().pop()).type.toBe>(); - - expect(List().pop(10)).type.toRaiseError(); -}); - -test('#shift', () => { - expect(List().shift()).type.toBe>(); - - expect(List().shift(10)).type.toRaiseError(); -}); - -test('#update', () => { - expect(List().update((v) => 1)).type.toBe(); - - expect( - List().update((v: List | undefined) => v) - ).type.toRaiseError(); - - expect(List().update(0, (v: number | undefined) => 0)).type.toBe< - List - >(); - - expect( - List().update(0, (v: number | undefined) => v + 'a') - ).type.toRaiseError(); - - expect(List().update(1, 10, (v: number | undefined) => 0)).type.toBe< - List - >(); - - expect( - List().update(1, 'a', (v: number | undefined) => 0) - ).type.toRaiseError(); - - expect( - List().update(1, 10, (v: number | undefined) => v + 'a') - ).type.toRaiseError(); - - expect(List().update(1, (v) => v?.toUpperCase())).type.toBe< - List - >(); - - expect(update(List(), 0, (v: number | undefined) => 0)).type.toBe< - List - >(); - - expect( - update(List(), 1, 10, (v: number) => v + 'a') - ).type.toRaiseError(); -}); - -test('#updateIn', () => { - expect(List().updateIn([], (v) => v)).type.toBe>(); - - expect(List().updateIn([], 10)).type.toRaiseError(); - - expect(updateIn(List(), [], (v) => v)).type.toBe>(); -}); - -test('#map', () => { - expect( - List().map((value: number, key: number, iter: List) => 1) - ).type.toBe>(); - - expect( - List().map((value: number, key: number, iter: List) => 'a') - ).type.toBe>(); - - expect( - List().map( - (value: number, key: number, iter: List) => 1 - ) - ).type.toBe>(); - - expect( - List().map( - (value: number, key: number, iter: List) => 1 - ) - ).type.toRaiseError(); - - expect( - List().map( - (value: string, key: number, iter: List) => 1 - ) - ).type.toRaiseError(); - - expect( - List().map( - (value: number, key: string, iter: List) => 1 - ) - ).type.toRaiseError(); - - expect( - List().map( - (value: number, key: number, iter: List) => 1 - ) - ).type.toRaiseError(); - - expect( - List().map( - (value: number, key: number, iter: List) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatMap', () => { - expect( - List().flatMap((value: number, key: number, iter: List) => [ - 1, - ]) - ).type.toBe>(); - - expect( - List().flatMap((value: number, key: number, iter: List) => [ - 'a', - ]) - ).type.toBe>(); - - expect(List>().flatMap((list) => list)).type.toBe< - List - >(); - - expect( - List().flatMap( - (value: number, key: number, iter: List) => [1] - ) - ).type.toBe>(); - - expect( - List().flatMap( - (value: number, key: number, iter: List) => [1] - ) - ).type.toRaiseError(); - - expect( - List().flatMap( - (value: string, key: number, iter: List) => [1] - ) - ).type.toRaiseError(); - - expect( - List().flatMap( - (value: number, key: string, iter: List) => [1] - ) - ).type.toRaiseError(); - - expect( - List().flatMap( - (value: number, key: number, iter: List) => [1] - ) - ).type.toRaiseError(); - - expect( - List().flatMap( - (value: number, key: number, iter: List) => ['a'] - ) - ).type.toRaiseError(); -}); - -test('#merge', () => { - expect(List().merge(List())).type.toBe>(); - - expect(List().merge(List())).type.toBe< - List - >(); - - expect(List().merge(List())).type.toBe< - List - >(); - - expect(List().merge(List())).type.toBe< - List - >(); - - expect(merge(List(), List())).type.toBe>(); -}); - -test('#mergeIn', () => { - expect(List().mergeIn([], [])).type.toBe>(); -}); - -test('#mergeDeepIn', () => { - expect(List().mergeDeepIn([], [])).type.toBe>(); -}); - -test('#flatten', () => { - expect(List().flatten()).type.toBe< - Immutable.Collection - >(); - - expect(List().flatten(10)).type.toBe< - Immutable.Collection - >(); - - expect(List().flatten(false)).type.toBe< - Immutable.Collection - >(); - - expect(List().flatten('a')).type.toRaiseError(); -}); - -test('#withMutations', () => { - expect(List().withMutations((mutable) => mutable)).type.toBe< - List - >(); - - expect( - List().withMutations((mutable: List) => mutable) - ).type.toRaiseError(); -}); - -test('#asMutable', () => { - expect(List().asMutable()).type.toBe>(); -}); - -test('#asImmutable', () => { - expect(List().asImmutable()).type.toBe>(); -}); - -test('#toJS', () => { - expect(List>().toJS()).type.toBe(); -}); - -test('#toJSON', () => { - expect(List>().toJSON()).type.toBe[]>(); -}); - -test('for of loops', () => { - const list = List([1, 2, 3, 4]); - - for (const val of list) { - expect(val).type.toBe(); - } -}); diff --git a/type-definitions/ts-tests/map.ts b/type-definitions/ts-tests/map.ts deleted file mode 100644 index 59f39eb36c..0000000000 --- a/type-definitions/ts-tests/map.ts +++ /dev/null @@ -1,668 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { Map, List, MapOf, OrderedMap } from 'immutable'; - -test('#constructor', () => { - expect(Map()).type.toBe>(); - - expect(Map()).type.toBe>(); - - expect(Map([[1, 'a']])).type.toBe>(); - - expect(Map([['a', 'a']])).type.toBe>(); - - expect(Map(List<[number, string]>([[1, 'a']]))).type.toBe< - Map - >(); - - expect(Map({ a: 1 })).type.toBe>(); - - expect(Map({ a: 1, b: 'b' })).type.toBe>(); - - expect(Map({ a: Map({ b: Map({ c: 3 }) }) })).type.toBe< - MapOf<{ a: MapOf<{ b: MapOf<{ c: number }> }> }> - >(); - - expect(Map<{ a: string }>({ a: 1 })).type.toRaiseError(); - - expect(Map<{ a: string }>({ a: 'a', b: 'b' })).type.toRaiseError(); - - // TODO this type is really weird, it should be `Map` or MapOf<{ a: string }> See https://github.com/immutable-js/immutable-js/pull/1991#discussion_r1510863932 - expect(Map(List([List(['a', 'b'])]))).type.toBe>>>(); - - expect(Map([[1, 'a']])).type.not.toBeAssignableTo>(); - - expect(Map<'status', string>({ status: 'paid' })).type.toBe< - Map<'status', string> - >(); - - expect(Map<'status' | 'amount', string>({ status: 'paid' })).type.toBe< - Map<'status' | 'amount', string> - >(); - - expect( - Map<'status', string>({ status: 'paid', amount: 10 }) - ).type.toRaiseError(); -}); - -test('#size', () => { - expect(pick(Map(), 'size')).type.toBe<{ readonly size: number }>(); -}); - -test('#get', () => { - expect(Map().get(4)).type.toBe(); - - expect(Map().get(4, 'a')).type.toBe(); - - expect(Map().get(4, 'a')).type.toRaiseError(); - - expect(Map({ a: 4, b: true }).get('a')).type.toBe(); - - expect(Map({ a: 4, b: true }).get('b')).type.toBe(); - - expect( - Map({ a: Map({ b: true }) }) - .get('a') - .get('b') - ).type.toBe(); - - expect(Map({ a: 4 }).get('b')).type.toRaiseError(); - - expect(Map({ a: 4 }).get('b', undefined)).type.toBe(); - - expect(Map({ 1: 4 }).get(1)).type.toBe(); - - expect(Map({ 1: 4 }).get(2)).type.toRaiseError(); - - expect(Map({ 1: 4 }).get(2, 3)).type.toBe<3>(); - - const s1 = Symbol('s1'); - - expect(Map({ [s1]: 4 }).get(s1)).type.toBe(); - - const s2 = Symbol('s2'); - - expect(Map({ [s2]: 4 }).get(s1)).type.toRaiseError(); -}); - -test('#getIn', () => { - const result = Map({ a: 4, b: true }).getIn(['a']); - - expect(result).type.toBe(); - - expect(Map({ a: 4, b: true }).getIn(['a' as const])).type.toBe(); - - expect( - Map({ a: Map({ b: Map({ c: Map({ d: 4 }) }) }) }).getIn([ - 'a' as const, - 'b' as const, - 'c' as const, - 'd' as const, - ]) - ).type.toBe(); - - expect(Map({ a: [1] }).getIn(['a' as const, 0])).type.toBe(); - - expect(Map({ a: List([1]) }).getIn(['a' as const, 0])).type.toBe(); -}); - -test('#set', () => { - expect(Map().set(0, 0)).type.toBe>(); - - expect(Map().set(1, 'a')).type.toRaiseError(); - - expect(Map().set('a', 1)).type.toRaiseError(); - - expect(Map().set(0, 1)).type.toBe< - Map - >(); - - expect(Map().set(0, 'a')).type.toBe< - Map - >(); - - expect(Map({ a: 1 }).set('b', 'b')).type.toRaiseError(); - - expect(Map<{ a: number; b?: string }>({ a: 1 }).set('b', 'b')).type.toBe< - MapOf<{ a: number; b?: string | undefined }> - >(); - - expect( - Map<{ a: number; b?: string }>({ a: 1 }).set('b', undefined) - ).type.toBe>(); - - expect( - Map<{ a: number; b?: string }>({ a: 1 }).set('b', 'b').get('a') - ).type.toBe(); - - expect( - Map<{ a: number; b?: string }>({ a: 1 }).set('b', 'b').get('b') - ).type.toBe(); - - const customer = Map<{ phone: string | number }>({ - phone: 'bar', - }); - - expect(customer).type.toBeAssignableWith(customer.set('phone', 8)); -}); - -test('#setIn', () => { - expect(Map().setIn([], 0)).type.toBe>(); -}); - -test('#delete', () => { - expect(Map().delete(0)).type.toBe>(); - - expect(Map().delete('a')).type.toRaiseError(); - - expect(Map({ a: 1, b: 'b' }).delete('b')).type.toBe(); - - expect( - Map<{ a: number; b?: string }>({ a: 1, b: 'b' }).delete('b') - ).type.toBe>(); - - expect( - Map<{ a?: number; b?: string }>({ a: 1, b: 'b' }).remove('b').delete('a') - ).type.toBe>(); - - expect( - Map<{ a: number; b?: string }>({ a: 1, b: 'b' }).remove('b').get('a') - ).type.toBe(); - - expect( - Map<{ a: number; b?: string }>({ a: 1, b: 'b' }).remove('b').get('b') - ).type.toBe(); -}); - -test('#deleteAll', () => { - expect(Map().deleteAll([0])).type.toBe>(); - - expect(Map().deleteAll([0, 'a'])).type.toRaiseError(); -}); - -test('#deleteIn', () => { - expect(Map().deleteIn([])).type.toBe>(); -}); - -test('#remove', () => { - expect(Map().remove(0)).type.toBe>(); - - expect(Map().remove('a')).type.toRaiseError(); -}); - -test('#removeAll', () => { - expect(Map().removeAll([0])).type.toBe>(); - - expect(Map().removeAll([0, 'a'])).type.toRaiseError(); -}); - -test('#removeIn', () => { - expect(Map().removeIn([])).type.toBe>(); -}); - -test('#clear', () => { - expect(Map().clear()).type.toBe>(); - - expect(Map().clear(10)).type.toRaiseError(); -}); - -test('#update', () => { - expect(Map().update((v) => 1)).type.toBe(); - - expect( - Map().update((v: Map | undefined) => v) - ).type.toRaiseError(); - - expect( - Map().update(0, (v: number | undefined) => 0) - ).type.toBe>(); - - expect( - Map().update(0, (v: number | undefined) => v + 'a') - ).type.toRaiseError(); - - expect( - Map().update(1, 10, (v: number | undefined) => 0) - ).type.toBe>(); - - expect( - Map().update(1, 'a', (v: number | undefined) => 0) - ).type.toRaiseError(); - - expect( - Map().update(1, 10, (v: number | undefined) => v + 'a') - ).type.toRaiseError(); - - expect(Map({ a: 1, b: 'b' }).update('c', (v) => v)).type.toRaiseError(); - - expect(Map({ a: 1, b: 'b' }).update('b', (v) => v.toUpperCase())).type.toBe< - MapOf<{ a: number; b: string }> - >(); - - expect( - Map({ a: 1, b: 'b' }).update('b', 'NSV', (v) => v.toUpperCase()) - ).type.toBe>(); - - expect(Map({ a: 1, b: 'b' }).update((v) => ({ a: 'a' }))).type.toRaiseError(); - - expect( - Map({ a: 1, b: 'b' }).update((v) => v.set('a', 2).set('b', 'B')) - ).type.toBe>(); - - expect( - Map({ a: 1, b: 'b' }).update((v) => v.set('c', 'c')) - ).type.toRaiseError(); - - expect( - Map().update('noKey', (ls) => ls?.toUpperCase()) - ).type.toBe>(); -}); - -test('#updateIn', () => { - expect(Map().updateIn([], (v) => v)).type.toBe< - Map - >(); - - expect(Map().updateIn([], 10)).type.toRaiseError(); -}); - -test('#map', () => { - expect( - Map().map( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toBe>(); - - expect( - Map().map( - (value: number, key: number, iter: Map) => 'a' - ) - ).type.toBe>(); - - expect( - Map().map( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toBe>(); - - expect( - Map().map( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().map( - (value: string, key: number, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().map( - (value: number, key: string, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().map( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().map( - (value: number, key: number, iter: Map) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#mapKeys', () => { - expect( - Map().mapKeys( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toBe>(); - - expect( - Map().mapKeys( - (value: number, key: number, iter: Map) => 'a' - ) - ).type.toBe>(); - - expect( - Map().mapKeys( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toBe>(); - - expect( - Map().mapKeys( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().mapKeys( - (value: string, key: number, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().mapKeys( - (value: number, key: string, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().mapKeys( - (value: number, key: number, iter: Map) => 1 - ) - ).type.toRaiseError(); - - expect( - Map().mapKeys( - (value: number, key: number, iter: Map) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatMap', () => { - expect( - Map().flatMap( - (value: number, key: number, iter: Map) => [[0, 1]] - ) - ).type.toBe>(); - - expect( - Map().flatMap( - (value: number, key: number, iter: Map) => [['a', 'b']] - ) - ).type.toBe>(); - - expect( - Map().flatMap( - (value: number, key: number, iter: Map) => [[0, 1]] - ) - ).type.toBe>(); - - expect( - Map().flatMap( - (value: number, key: number, iter: Map) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - Map().flatMap( - (value: string, key: number, iter: Map) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - Map().flatMap( - (value: number, key: string, iter: Map) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - Map().flatMap( - (value: number, key: number, iter: Map) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - Map().flatMap( - (value: number, key: number, iter: Map) => [[0, 'a']] - ) - ).type.toRaiseError(); -}); - -test('#merge', () => { - expect(Map().merge({ a: 1 })).type.toBe< - Map - >(); - - expect(Map().merge({ a: { b: 1 } })).type.toBe< - Map - >(); - - expect(Map().merge(Map())).type.toBe< - Map - >(); - - expect(Map().merge(Map())).type.toBe< - Map - >(); - - expect(Map().merge(Map())).type.toBe< - Map - >(); - - expect(Map().merge(Map())).type.toBe< - Map - >(); - - expect(Map({ a: 1 }).merge(Map({ b: 2 }))).type.toBe< - Map<'b' | 'a', number> - >(); -}); - -test('#mergeIn', () => { - expect(Map().mergeIn([], [])).type.toBe< - Map - >(); -}); - -test('#mergeWith', () => { - expect( - Map().mergeWith( - (prev: number, next: number, key: number) => 1, - Map() - ) - ).type.toBe>(); - - expect( - Map().mergeWith( - (prev: string, next: number, key: number) => 1, - Map() - ) - ).type.toRaiseError(); - - expect( - Map().mergeWith( - (prev: number, next: string, key: number) => 1, - Map() - ) - ).type.toRaiseError(); - - expect( - Map().mergeWith( - (prev: number, next: number, key: string) => 1, - Map() - ) - ).type.toRaiseError(); - - expect( - Map().mergeWith( - (prev: number, next: number, key: number) => 'a', - Map() - ) - ).type.toBe>(); - - expect( - Map().mergeWith( - (prev: number, next: number, key: number) => 1, - Map() - ) - ).type.toRaiseError(); - - expect( - Map().mergeWith( - (prev: number, next: number, key: string) => 1, - { a: 1 } - ) - ).type.toBe>(); - - expect( - Map().mergeWith( - (prev: number, next: number, key: string) => 1, - { a: 'a' } - ) - ).type.toRaiseError(); - - expect( - Map().mergeWith( - (prev: number, next: number | string, key: string) => 1, - { a: 'a' } - ) - ).type.toBe>(); - - expect( - Map().mergeWith( - (prev: number | string, next: number | string, key: number) => 1, - Map() - ) - ).type.toBe>(); -}); - -test('#mergeDeep', () => { - expect(Map().mergeDeep({ a: 1 })).type.toBe< - Map - >(); - - expect(Map().mergeDeep({ a: { b: 1 } })).type.toBe< - Map - >(); - - expect(Map().mergeDeep(Map({ a: { b: 1 } }))).type.toBe< - Map - >(); - - expect(Map().mergeDeep(Map())).type.toBe< - Map - >(); - - expect(Map().mergeDeep(Map())).type.toBe< - Map - >(); - - expect( - Map().mergeDeep(Map()) - ).type.toBe>(); - - expect( - Map().mergeDeep(Map()) - ).type.toBe>(); -}); - -test('#mergeDeepIn', () => { - expect(Map().mergeDeepIn([], [])).type.toBe< - Map - >(); -}); - -test('#mergeDeepWith', () => { - expect( - Map().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - Map() - ) - ).type.toBe>(); - - expect( - Map().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - Map() - ) - ).type.toRaiseError(); - - expect( - Map().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - { a: 1 } - ) - ).type.toBe>(); - - expect( - Map().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - { a: 'a' } - ) - ).type.toRaiseError(); - - expect( - Map().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - Map() - ) - ).type.toBe>(); -}); - -test('#flip', () => { - expect(Map().flip()).type.toBe>(); -}); - -test('#sort', () => { - expect(Map().sort()).type.toBe< - Map & OrderedMap - >(); - expect(Map().sort((a, b) => 1)).type.toBe< - Map & OrderedMap - >(); - - expect(Map({ a: 'a' }).sort()).type.toBe< - MapOf<{ a: string }> & OrderedMap<'a', string> - >(); -}); - -test('#sortBy', () => { - expect(Map().sortBy((v) => v)).type.toBe< - Map & OrderedMap - >(); - - expect( - Map().sortBy( - (v) => v, - (a, b) => 1 - ) - ).type.toBe & OrderedMap>(); - expect(Map({ a: 'a' }).sortBy((v) => v)).type.toBe< - MapOf<{ a: string }> & OrderedMap<'a', string> - >(); -}); - -test('#withMutations', () => { - expect(Map().withMutations((mutable) => mutable)).type.toBe< - Map - >(); - - expect( - Map().withMutations((mutable: Map) => mutable) - ).type.toRaiseError(); -}); - -test('#asMutable', () => { - expect(Map().asMutable()).type.toBe>(); -}); - -test('#asImmutable', () => { - expect(Map().asImmutable()).type.toBe>(); -}); - -test('#toJS', () => { - expect(Map().toJS()).type.toBe<{ - [x: string]: number; - [x: number]: number; - [x: symbol]: number; - }>(); - - expect(Map({ a: 'A' }).toJS()).type.toBe<{ a: string }>(); - - expect(Map({ a: Map({ b: 'b' }) }).toJS()).type.toBe<{ - a: { b: string }; - }>(); -}); - -test('#toJSON', () => { - expect(Map({ a: Map({ b: 'b' }) }).toJSON()).type.toBe<{ - a: MapOf<{ b: string }>; - }>(); -}); diff --git a/type-definitions/ts-tests/ordered-map.ts b/type-definitions/ts-tests/ordered-map.ts deleted file mode 100644 index 56341ff76e..0000000000 --- a/type-definitions/ts-tests/ordered-map.ts +++ /dev/null @@ -1,504 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { OrderedMap, List } from 'immutable'; - -test('#constructor', () => { - expect(OrderedMap()).type.toBe>(); - - expect(OrderedMap()).type.toBe>(); - - expect(OrderedMap([[1, 'a']])).type.toBe>(); - - expect(OrderedMap(List<[number, string]>([[1, 'a']]))).type.toBe< - OrderedMap - >(); - - expect(OrderedMap({ a: 1 })).type.toBe>(); - - // No longer works in typescript@>=3.9 - // // $ExpectError - TypeScript does not support Lists as tuples - // OrderedMap(List([List(['a', 'b'])])); -}); - -test('#size', () => { - expect(pick(OrderedMap(), 'size')).type.toBe<{ readonly size: number }>(); -}); - -test('#get', () => { - expect(OrderedMap().get(4)).type.toBe(); - - expect(OrderedMap().get(4, 'a')).type.toBe(); - - expect(OrderedMap().get(4, 'a')).type.toRaiseError(); -}); - -test('#set', () => { - expect(OrderedMap().set(0, 0)).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().set(1, 'a')).type.toRaiseError(); - - expect(OrderedMap().set('a', 1)).type.toRaiseError(); - - expect(OrderedMap().set(0, 1)).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().set(0, 'a')).type.toBe< - OrderedMap - >(); -}); - -test('#setIn', () => { - expect(OrderedMap().setIn([], 0)).type.toBe< - OrderedMap - >(); -}); - -test('#delete', () => { - expect(OrderedMap().delete(0)).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().delete('a')).type.toRaiseError(); -}); - -test('#deleteAll', () => { - expect(OrderedMap().deleteAll([0])).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().deleteAll([0, 'a'])).type.toRaiseError(); -}); - -test('#deleteIn', () => { - expect(OrderedMap().deleteIn([])).type.toBe< - OrderedMap - >(); -}); - -test('#remove', () => { - expect(OrderedMap().remove(0)).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().remove('a')).type.toRaiseError(); -}); - -test('#removeAll', () => { - expect(OrderedMap().removeAll([0])).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().removeAll([0, 'a'])).type.toRaiseError(); -}); - -test('#removeIn', () => { - expect(OrderedMap().removeIn([])).type.toBe< - OrderedMap - >(); -}); - -test('#clear', () => { - expect(OrderedMap().clear()).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().clear(10)).type.toRaiseError(); -}); - -test('#update', () => { - expect(OrderedMap().update((v) => 1)).type.toBe(); - - expect( - OrderedMap().update( - (v: OrderedMap | undefined) => v - ) - ).type.toRaiseError(); - - expect( - OrderedMap().update(0, (v: number | undefined) => 0) - ).type.toBe>(); - - expect( - OrderedMap().update(0, (v: number | undefined) => v + 'a') - ).type.toRaiseError(); - - expect( - OrderedMap().update(1, 10, (v: number | undefined) => 0) - ).type.toBe>(); - - expect( - OrderedMap().update(1, 'a', (v: number | undefined) => 0) - ).type.toRaiseError(); - - expect( - OrderedMap().update( - 1, - 10, - (v: number | undefined) => v + 'a' - ) - ).type.toRaiseError(); -}); - -test('#updateIn', () => { - expect(OrderedMap().updateIn([], (v) => v)).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().updateIn([], 10)).type.toRaiseError(); -}); - -test('#map', () => { - expect( - OrderedMap().map( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toBe>(); - - expect( - OrderedMap().map( - (value: number, key: number, iter: OrderedMap) => 'a' - ) - ).type.toBe>(); - - expect( - OrderedMap().map( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toBe>(); - - expect( - OrderedMap().map( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().map( - (value: string, key: number, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().map( - (value: number, key: string, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().map( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().map( - (value: number, key: number, iter: OrderedMap) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#mapKeys', () => { - expect( - OrderedMap().mapKeys( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toBe>(); - - expect( - OrderedMap().mapKeys( - (value: number, key: number, iter: OrderedMap) => 'a' - ) - ).type.toBe>(); - - expect( - OrderedMap().mapKeys( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toBe>(); - - expect( - OrderedMap().mapKeys( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mapKeys( - (value: string, key: number, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mapKeys( - (value: number, key: string, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mapKeys( - (value: number, key: number, iter: OrderedMap) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mapKeys( - (value: number, key: number, iter: OrderedMap) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatMap', () => { - expect( - OrderedMap().flatMap( - (value: number, key: number, iter: OrderedMap) => [[0, 1]] - ) - ).type.toBe>(); - - expect( - OrderedMap().flatMap( - (value: number, key: number, iter: OrderedMap) => [ - ['a', 'b'], - ] - ) - ).type.toBe>(); - - expect( - OrderedMap().flatMap( - (value: number, key: number, iter: OrderedMap) => [[0, 1]] - ) - ).type.toBe>(); - - expect( - OrderedMap().flatMap( - (value: number, key: number, iter: OrderedMap) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - OrderedMap().flatMap( - (value: string, key: number, iter: OrderedMap) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - OrderedMap().flatMap( - (value: number, key: string, iter: OrderedMap) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - OrderedMap().flatMap( - (value: number, key: number, iter: OrderedMap) => [[0, 1]] - ) - ).type.toRaiseError(); - - expect( - OrderedMap().flatMap( - (value: number, key: number, iter: OrderedMap) => [ - [0, 'a'], - ] - ) - ).type.toRaiseError(); -}); - -test('#merge', () => { - expect(OrderedMap().merge({ a: 1 })).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().merge({ a: { b: 1 } })).type.toBe< - OrderedMap - >(); - - expect( - OrderedMap().merge(OrderedMap()) - ).type.toBe>(); - - expect( - OrderedMap().merge(OrderedMap()) - ).type.toBe>(); - - expect( - OrderedMap().merge(OrderedMap()) - ).type.toBe>(); - - expect( - OrderedMap().merge(OrderedMap()) - ).type.toBe>(); -}); - -test('#mergeIn', () => { - expect(OrderedMap().mergeIn([], [])).type.toBe< - OrderedMap - >(); -}); - -test('#mergeWith', () => { - expect( - OrderedMap().mergeWith( - (prev: number, next: number, key: number) => 1, - OrderedMap() - ) - ).type.toBe>(); - - expect( - OrderedMap().mergeWith( - (prev: string, next: number, key: number) => 1, - OrderedMap() - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeWith( - (prev: number, next: string, key: number) => 1, - OrderedMap() - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeWith( - (prev: number, next: number, key: string) => 1, - OrderedMap() - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeWith( - (prev: number, next: number, key: number) => 'a', - OrderedMap() - ) - ).type.toBe>(); - - expect( - OrderedMap().mergeWith( - (prev: number, next: number, key: number) => 1, - OrderedMap() - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeWith( - (prev: number, next: number, key: string) => 1, - { a: 1 } - ) - ).type.toBe>(); - - expect( - OrderedMap().mergeWith( - (prev: number, next: number, key: string) => 1, - { a: 'a' } - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeWith( - (prev: number | string, next: number | string, key: number) => 1, - OrderedMap() - ) - ).type.toBe>(); -}); - -test('#mergeDeep', () => { - expect(OrderedMap().mergeDeep({ a: 1 })).type.toBe< - OrderedMap - >(); - - expect(OrderedMap().mergeDeep({ a: { b: 1 } })).type.toBe< - OrderedMap - >(); - - expect( - OrderedMap().mergeDeep(OrderedMap()) - ).type.toBe>(); - - expect( - OrderedMap().mergeDeep(OrderedMap()) - ).type.toBe>(); - - expect( - OrderedMap().mergeDeep( - OrderedMap() - ) - ).type.toBe>(); - - expect( - OrderedMap().mergeDeep( - OrderedMap() - ) - ).type.toBe>(); -}); - -test('#mergeDeepIn', () => { - expect(OrderedMap().mergeDeepIn([], [])).type.toBe< - OrderedMap - >(); -}); - -test('#mergeDeepWith', () => { - expect( - OrderedMap().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - OrderedMap() - ) - ).type.toBe>(); - - expect( - OrderedMap().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - OrderedMap() - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - { a: 1 } - ) - ).type.toBe>(); - - expect( - OrderedMap().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - { a: 'a' } - ) - ).type.toRaiseError(); - - expect( - OrderedMap().mergeDeepWith( - (prev: unknown, next: unknown, key: unknown) => 1, - OrderedMap() - ) - ).type.toBe>(); -}); - -test('#flip', () => { - expect(OrderedMap().flip()).type.toBe< - OrderedMap - >(); -}); - -test('#withMutations', () => { - expect( - OrderedMap().withMutations((mutable) => mutable) - ).type.toBe>(); - - expect( - OrderedMap().withMutations( - (mutable: OrderedMap) => mutable - ) - ).type.toRaiseError(); -}); - -test('#asMutable', () => { - expect(OrderedMap().asMutable()).type.toBe< - OrderedMap - >(); -}); - -test('#asImmutable', () => { - expect(OrderedMap().asImmutable()).type.toBe< - OrderedMap - >(); -}); diff --git a/type-definitions/ts-tests/ordered-set.ts b/type-definitions/ts-tests/ordered-set.ts deleted file mode 100644 index b753c09a53..0000000000 --- a/type-definitions/ts-tests/ordered-set.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { Collection, OrderedSet, Map } from 'immutable'; - -test('#constructor', () => { - expect(OrderedSet()).type.toBe>(); - - expect(OrderedSet()).type.toBe>(); - - expect(OrderedSet([1, 'a'])).type.toBe>(); - - expect(OrderedSet([1, 'a'])).type.not.toBeAssignableTo(OrderedSet()); -}); - -test('#size', () => { - expect(pick(OrderedSet(), 'size')).type.toBe<{ readonly size: number }>(); -}); - -test('.of', () => { - expect(OrderedSet.of(1, 2, 3)).type.toBe>(); - - expect(OrderedSet.of('a', 1)).type.toRaiseError(); - - expect(OrderedSet.of('a', 1)).type.toBe< - OrderedSet - >(); -}); - -test('.fromKeys', () => { - expect(OrderedSet.fromKeys(Map())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet.fromKeys(Map())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet.fromKeys({ a: 1 })).type.toBe>(); - - expect( - OrderedSet.fromKeys(Map()) - ).type.toRaiseError(); - - expect( - OrderedSet.fromKeys(Map()) - ).type.toBe>(); -}); - -test('#get', () => { - expect(OrderedSet().get(4)).type.toBe(); - - expect(OrderedSet().get(4, 'a')).type.toBe(); - - expect(OrderedSet().get(4, 'a')).type.toRaiseError(); -}); - -test('#delete', () => { - expect(OrderedSet().delete(0)).type.toBe>(); - - expect(OrderedSet().delete('a')).type.toRaiseError(); -}); - -test('#remove', () => { - expect(OrderedSet().remove(0)).type.toBe>(); - - expect(OrderedSet().remove('a')).type.toRaiseError(); -}); - -test('#clear', () => { - expect(OrderedSet().clear()).type.toBe>(); - - expect(OrderedSet().clear(10)).type.toRaiseError(); -}); - -test('#map', () => { - expect( - OrderedSet().map( - (value: number, key: number, iter: OrderedSet) => 1 - ) - ).type.toBe>(); - - expect( - OrderedSet().map( - (value: number, key: number, iter: OrderedSet) => 'a' - ) - ).type.toBe>(); - - expect( - OrderedSet().map( - (value: number, key: number, iter: OrderedSet) => 1 - ) - ).type.toBe>(); - - expect( - OrderedSet().map( - (value: number, key: number, iter: OrderedSet) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedSet().map( - (value: string, key: number, iter: OrderedSet) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedSet().map( - (value: number, key: string, iter: OrderedSet) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedSet().map( - (value: number, key: number, iter: OrderedSet) => 1 - ) - ).type.toRaiseError(); - - expect( - OrderedSet().map( - (value: number, key: number, iter: OrderedSet) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatMap', () => { - expect( - OrderedSet().flatMap( - (value: number, key: number, iter: OrderedSet) => [1] - ) - ).type.toBe>(); - - expect( - OrderedSet().flatMap( - (value: number, key: number, iter: OrderedSet) => ['a'] - ) - ).type.toBe>(); - - expect( - OrderedSet().flatMap( - (value: number, key: number, iter: OrderedSet) => [1] - ) - ).type.toBe>(); - - expect( - OrderedSet().flatMap( - (value: number, key: number, iter: OrderedSet) => [1] - ) - ).type.toRaiseError(); - - expect( - OrderedSet().flatMap( - (value: string, key: number, iter: OrderedSet) => [1] - ) - ).type.toRaiseError(); - - expect( - OrderedSet().flatMap( - (value: number, key: string, iter: OrderedSet) => [1] - ) - ).type.toRaiseError(); - - expect( - OrderedSet().flatMap( - (value: number, key: number, iter: OrderedSet) => [1] - ) - ).type.toRaiseError(); - - expect( - OrderedSet().flatMap( - (value: number, key: number, iter: OrderedSet) => ['a'] - ) - ).type.toRaiseError(); -}); - -test('#union', () => { - expect(OrderedSet().union(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet().union(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet().union(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet().union(OrderedSet())).type.toBe< - OrderedSet - >(); -}); - -test('#merge', () => { - expect(OrderedSet().merge(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet().merge(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet().merge(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect(OrderedSet().merge(OrderedSet())).type.toBe< - OrderedSet - >(); -}); - -test('#intersect', () => { - expect(OrderedSet().intersect(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect( - OrderedSet().intersect(OrderedSet()) - ).type.toRaiseError(); - - expect( - OrderedSet().intersect(OrderedSet()) - ).type.toBe>(); - - expect( - OrderedSet().intersect(OrderedSet()) - ).type.toBe>(); -}); - -test('#subtract', () => { - expect(OrderedSet().subtract(OrderedSet())).type.toBe< - OrderedSet - >(); - - expect( - OrderedSet().subtract(OrderedSet()) - ).type.toRaiseError(); - - expect( - OrderedSet().subtract(OrderedSet()) - ).type.toBe>(); - - expect( - OrderedSet().subtract(OrderedSet()) - ).type.toBe>(); -}); - -test('#flatten', () => { - expect(OrderedSet().flatten()).type.toBe< - Collection - >(); - - expect(OrderedSet().flatten(10)).type.toBe< - Collection - >(); - - expect(OrderedSet().flatten(false)).type.toBe< - Collection - >(); - - expect(OrderedSet().flatten('a')).type.toRaiseError(); -}); - -test('#withMutations', () => { - expect(OrderedSet().withMutations((mutable) => mutable)).type.toBe< - OrderedSet - >(); - - expect( - OrderedSet().withMutations((mutable: OrderedSet) => mutable) - ).type.toRaiseError(); -}); - -test('#asMutable', () => { - expect(OrderedSet().asMutable()).type.toBe>(); -}); - -test('#asImmutable', () => { - expect(OrderedSet().asImmutable()).type.toBe>(); -}); diff --git a/type-definitions/ts-tests/partition.ts b/type-definitions/ts-tests/partition.ts deleted file mode 100644 index a9d4871e94..0000000000 --- a/type-definitions/ts-tests/partition.ts +++ /dev/null @@ -1,184 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-expressions */ -import { expect, test } from 'tstyche'; -import { - Collection, - List, - Map, - OrderedMap, - OrderedSet, - Seq, - Set, -} from 'immutable'; - -abstract class A {} -class B extends A {} - -test('Collection', () => { - type Indexed = Collection.Indexed; - type Keyed = Collection.Keyed; - type Set = Collection.Set; - - (c: Collection) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Collection, Collection] - >(); - }; - - (c: Collection) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Collection, Collection] - >(); - }; - - (c: Keyed) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Keyed, Keyed] - >(); - }; - - (c: Keyed) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Keyed, Keyed] - >(); - }; - - (c: Indexed) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Indexed, Indexed] - >(); - }; - - (c: Indexed) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Indexed, Indexed] - >(); - }; - - (c: Set) => { - expect(c.partition((x) => x % 2)).type.toBe<[Set, Set]>(); - }; - - (c: Set) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Set, Set] - >(); - }; -}); - -test('Seq', () => { - type Indexed = Seq.Indexed; - type Keyed = Seq.Keyed; - type Set = Seq.Set; - - (c: Seq) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Seq, Seq] - >(); - }; - - (c: Seq) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Seq, Seq] - >(); - }; - - (c: Keyed) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Keyed, Keyed] - >(); - }; - - (c: Keyed) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Keyed, Keyed] - >(); - }; - - (c: Indexed) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Indexed, Indexed] - >(); - }; - - (c: Indexed) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Indexed, Indexed] - >(); - }; - - (c: Set) => { - expect(c.partition((x) => x % 2)).type.toBe<[Set, Set]>(); - }; - - (c: Set) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Set, Set] - >(); - }; -}); - -test('Map', () => { - (c: Map) => { - expect(c.partition((x) => x % 2)).type.toBe< - [Map, Map] - >(); - }; - - (c: Map) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Map, Map] - >(); - }; -}); - -test('OrderedMap', () => { - (c: OrderedMap) => { - expect(c.partition((x) => x % 2)).type.toBe< - [OrderedMap, OrderedMap] - >(); - }; - - (c: OrderedMap) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [OrderedMap, OrderedMap] - >(); - }; -}); - -test('List', () => { - (c: List) => { - expect(c.partition((x) => x % 2)).type.toBe<[List, List]>(); - }; - - (c: List) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [List, List] - >(); - }; -}); - -test('Set', () => { - (c: Set) => { - expect(c.partition((x) => x % 2)).type.toBe<[Set, Set]>(); - }; - - (c: Set) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [Set, Set] - >(); - }; -}); - -test('OrderedSet', () => { - (c: OrderedSet) => { - expect(c.partition((x) => x % 2)).type.toBe< - [OrderedSet, OrderedSet] - >(); - }; - - (c: OrderedSet) => { - expect(c.partition((x): x is B => x instanceof B)).type.toBe< - [OrderedSet, OrderedSet] - >(); - }; -}); diff --git a/type-definitions/ts-tests/range.ts b/type-definitions/ts-tests/range.ts deleted file mode 100644 index 79db184113..0000000000 --- a/type-definitions/ts-tests/range.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { expect, test } from 'tstyche'; -import { Range, Seq } from 'immutable'; - -test('#constructor', () => { - expect(Range(0, 0, 1)).type.toBe>(); - - expect(Range('a', 0, 0)).type.toRaiseError(); - - expect(Range()).type.toRaiseError(); - - expect(Range(1)).type.toRaiseError(); -}); diff --git a/type-definitions/ts-tests/record.ts b/type-definitions/ts-tests/record.ts deleted file mode 100644 index bb2db4ee3a..0000000000 --- a/type-definitions/ts-tests/record.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { List, Map, MapOf, Record, RecordOf, Set } from 'immutable'; - -test('Factory', () => { - const PointXY = Record({ x: 0, y: 0 }); - - expect(PointXY).type.toBe>(); - - expect(PointXY({ x: 'a' })).type.toRaiseError(); - - const pointXY = PointXY(); - - expect(pointXY).type.toBe< - Record<{ x: number; y: number }> & Readonly<{ x: number; y: number }> - >(); - - expect(pick(pointXY, 'x')).type.toBe<{ readonly x: number }>(); - - expect(pick(pointXY, 'y')).type.toBe<{ readonly y: number }>(); - - expect(pointXY.toJS()).type.toBe<{ x: number; y: number }>(); - - class PointClass extends PointXY { - setX(x: number) { - return this.set('x', x); - } - - setY(y: number) { - return this.set('y', y); - } - } - - const point = new PointClass(); - - expect(point).type.toBe(); - - expect(point.x).type.toBe(); - - expect(point.y).type.toBe(); - - expect(point.setX(10)).type.toBe(); - - expect(point.setY(10)).type.toBe(); - - expect(point.toJSON()).type.toBe<{ x: number; y: number }>(); - - expect(point.toJS()).type.toBe<{ x: number; y: number }>(); -}); - -test('.getDescriptiveName', () => { - const PointXY = Record({ x: 0, y: 0 }); - - expect(Record.getDescriptiveName(PointXY())).type.toBe(); - - expect(Record.getDescriptiveName({})).type.toRaiseError(); -}); - -test('Factory', () => { - const WithMap = Record({ - map: Map({ a: 'A' }), - list: List(['a']), - set: Set(['a']), - }); - - const withMap = WithMap(); - - expect(withMap.toJSON()).type.toBe<{ - map: MapOf<{ a: string }>; - list: List; - set: Set; - }>(); - - // should be `{ map: { a: string; }; list: string[]; set: string[]; }` but there is an issue with circular references - expect(withMap.toJS()).type.toBe<{ - map: unknown; - list: unknown; - set: unknown; - }>(); -}); - -test('optional properties', () => { - interface Size { - distance: string; - } - - const Line = Record<{ size?: Size; color?: string }>({ - size: undefined, - color: 'red', - }); - - const line = Line({}); - - // should be { size?: { distance: string; } | undefined; color?: string | undefined; } but there is an issue with circular references - expect(line.toJS()).type.toBe<{ - size?: unknown; - color?: string | undefined; - }>(); -}); - -test('similar properties, but one is optional', () => { - // see https://github.com/immutable-js/immutable-js/issues/1930 - - interface Id { - value: string; - } - - expect>().type.toBeAssignableWith< - RecordOf<{ id: Id }> - >(); -}); diff --git a/type-definitions/ts-tests/repeat.ts b/type-definitions/ts-tests/repeat.ts deleted file mode 100644 index 9506b753f1..0000000000 --- a/type-definitions/ts-tests/repeat.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { expect, test } from 'tstyche'; -import { Repeat, Seq } from 'immutable'; - -test('#constructor', () => { - expect(Repeat(0, 0)).type.toBe>(); - - expect(Repeat('a', 0)).type.toBe>(); - - expect(Repeat('a', 'b')).type.toRaiseError(); -}); diff --git a/type-definitions/ts-tests/seq.ts b/type-definitions/ts-tests/seq.ts deleted file mode 100644 index d967acaade..0000000000 --- a/type-definitions/ts-tests/seq.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { Seq } from 'immutable'; - -test('#constructor', () => { - expect(Seq([1, 2, 3])).type.toBe>(); -}); - -test('#size', () => { - expect(pick(Seq(), 'size')).type.toBe<{ - readonly size: number | undefined; - }>(); -}); - -test('Set.Indexed concat', () => { - const s: Seq.Indexed = Seq([1]); - expect(s).type.toBe>(); - expect(s.concat([4, 5, 6])).type.toBe>(); - expect(s.concat(Seq([4, 5, 6]))).type.toBe>(); -}); - -test('Set concat', () => { - const s: Seq = Seq([1]); - expect(s).type.toBe>(); - expect(s.concat([4, 5, 6])).type.toBe>(); - expect(s.concat(Seq([4, 5, 6]))).type.toBe>(); -}); diff --git a/type-definitions/ts-tests/set.ts b/type-definitions/ts-tests/set.ts deleted file mode 100644 index 9149417986..0000000000 --- a/type-definitions/ts-tests/set.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { Set, Map, Collection, OrderedSet } from 'immutable'; - -test('#constructor', () => { - expect(Set()).type.toBe>(); - - expect(Set()).type.toBe>(); - - expect(Set([1, 'a'])).type.toBe>(); - - expect>().type.not.toBeAssignableWith(Set([1, 'a'])); -}); - -test('#size', () => { - expect(pick(Set(), 'size')).type.toBe<{ readonly size: number }>(); -}); - -test('.of', () => { - expect(Set.of(1, 2, 3)).type.toBe>(); - - expect(Set.of('a', 1)).type.toRaiseError(); - - expect(Set.of('a', 1)).type.toBe>(); -}); - -test('.fromKeys', () => { - expect(Set.fromKeys(Map())).type.toBe>(); - - expect(Set.fromKeys(Map())).type.toBe>(); - - expect(Set.fromKeys({ a: 1 })).type.toBe>(); - - expect(Set.fromKeys(Map())).type.toRaiseError(); - - expect( - Set.fromKeys(Map()) - ).type.toBe>(); -}); - -test('#get', () => { - expect(Set().get(4)).type.toBe(); - - expect(Set().get(4, 'a')).type.toBe(); - - expect(Set().get(4, 'a')).type.toRaiseError(); -}); - -test('#delete', () => { - expect(Set().delete(0)).type.toBe>(); - - expect(Set().delete('a')).type.toRaiseError(); -}); - -test('#remove', () => { - expect(Set().remove(0)).type.toBe>(); - - expect(Set().remove('a')).type.toRaiseError(); -}); - -test('#clear', () => { - expect(Set().clear()).type.toBe>(); - - expect(Set().clear(10)).type.toRaiseError(); -}); - -test('#map', () => { - expect( - Set().map((value: number, key: number, iter: Set) => 1) - ).type.toBe>(); - - expect( - Set().map((value: number, key: number, iter: Set) => 'a') - ).type.toBe>(); - - expect( - Set().map( - (value: number, key: number, iter: Set) => 1 - ) - ).type.toBe>(); - - expect( - Set().map( - (value: number, key: number, iter: Set) => 1 - ) - ).type.toRaiseError(); - - expect( - Set().map( - (value: string, key: number, iter: Set) => 1 - ) - ).type.toRaiseError(); - - expect( - Set().map( - (value: number, key: string, iter: Set) => 1 - ) - ).type.toRaiseError(); - - expect( - Set().map( - (value: number, key: number, iter: Set) => 1 - ) - ).type.toRaiseError(); - - expect( - Set().map( - (value: number, key: number, iter: Set) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatMap', () => { - expect( - Set().flatMap((value: number, key: number, iter: Set) => [ - 1, - ]) - ).type.toBe>(); - - expect( - Set().flatMap((value: number, key: number, iter: Set) => [ - 'a', - ]) - ).type.toBe>(); - - expect( - Set().flatMap( - (value: number, key: number, iter: Set) => [1] - ) - ).type.toBe>(); - - expect( - Set().flatMap( - (value: number, key: number, iter: Set) => [1] - ) - ).type.toRaiseError(); - - expect( - Set().flatMap( - (value: string, key: number, iter: Set) => [1] - ) - ).type.toRaiseError(); - - expect( - Set().flatMap( - (value: number, key: string, iter: Set) => [1] - ) - ).type.toRaiseError(); - - expect( - Set().flatMap( - (value: number, key: number, iter: Set) => [1] - ) - ).type.toRaiseError(); - - expect( - Set().flatMap( - (value: number, key: number, iter: Set) => ['a'] - ) - ).type.toRaiseError(); -}); - -test('#union', () => { - expect(Set().union(Set())).type.toBe>(); - - expect(Set().union(Set())).type.toBe>(); - - expect(Set().union(Set())).type.toBe< - Set - >(); - - expect(Set().union(Set())).type.toBe< - Set - >(); -}); - -test('#merge', () => { - expect(Set().merge(Set())).type.toBe>(); - - expect(Set().merge(Set())).type.toBe>(); - - expect(Set().merge(Set())).type.toBe< - Set - >(); - - expect(Set().merge(Set())).type.toBe< - Set - >(); -}); - -test('#intersect', () => { - expect(Set().intersect(Set())).type.toBe>(); - - expect(Set().intersect(Set())).type.toRaiseError(); - - expect(Set().intersect(Set())).type.toBe< - Set - >(); - - expect(Set().intersect(Set())).type.toBe< - Set - >(); -}); - -test('#subtract', () => { - expect(Set().subtract(Set())).type.toBe>(); - - expect(Set().subtract(Set())).type.toRaiseError(); - - expect(Set().subtract(Set())).type.toBe< - Set - >(); - - expect(Set().subtract(Set())).type.toBe< - Set - >(); -}); - -test('#flatten', () => { - expect(Set().flatten()).type.toBe>(); - - expect(Set().flatten(10)).type.toBe>(); - - expect(Set().flatten(false)).type.toBe< - Collection - >(); - - expect(Set().flatten('a')).type.toRaiseError(); -}); - -test('#sort', () => { - expect(Set().sort()).type.toBe & OrderedSet>(); - expect(Set().sort((a, b) => 1)).type.toBe< - Set & OrderedSet - >(); -}); - -test('#sortBy', () => { - expect(Set().sortBy((v) => v)).type.toBe< - Set & OrderedSet - >(); - - expect( - Set().sortBy( - (v) => v, - (a, b) => 1 - ) - ).type.toBe & OrderedSet>(); -}); - -test('#withMutations', () => { - expect(Set().withMutations((mutable) => mutable)).type.toBe< - Set - >(); - - expect( - Set().withMutations((mutable: Set) => mutable) - ).type.toRaiseError(); -}); - -test('#asMutable', () => { - expect(Set().asMutable()).type.toBe>(); -}); - -test('#asImmutable', () => { - expect(Set().asImmutable()).type.toBe>(); -}); - -test('#toJS', () => { - expect(Set>().toJS()).type.toBe(); -}); - -test('#toJSON', () => { - expect(Set>().toJSON()).type.toBe[]>(); -}); diff --git a/type-definitions/ts-tests/stack.ts b/type-definitions/ts-tests/stack.ts deleted file mode 100644 index d261b1152a..0000000000 --- a/type-definitions/ts-tests/stack.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { expect, pick, test } from 'tstyche'; -import { Collection, Stack } from 'immutable'; - -test('#constructor', () => { - expect(Stack()).type.toBe>(); - - expect(Stack()).type.toBe>(); - - expect(Stack([1, 'a'])).type.toBe>(); -}); - -test('#size', () => { - expect(pick(Stack(), 'size')).type.toBe<{ readonly size: number }>(); -}); - -test('.of', () => { - expect(Stack.of(1, 2, 3)).type.toBe>(); - - expect(Stack.of('a', 1)).type.toRaiseError(); - - expect(Stack.of('a', 1)).type.toBe>(); -}); - -test('#peek', () => { - expect(Stack().peek()).type.toBe(); -}); - -test('#push', () => { - expect(Stack().push(0)).type.toBe>(); - - expect(Stack().push('a')).type.toRaiseError(); - - expect(Stack().push(0)).type.toBe>(); - - expect(Stack().push('a')).type.toBe< - Stack - >(); -}); - -test('#pushAll', () => { - expect(Stack().pushAll([0])).type.toBe>(); - - expect(Stack().pushAll(['a'])).type.toRaiseError(); - - expect(Stack().pushAll([0])).type.toBe< - Stack - >(); - - expect(Stack().pushAll(['a'])).type.toBe< - Stack - >(); -}); - -test('#unshift', () => { - expect(Stack().unshift(0)).type.toBe>(); - - expect(Stack().unshift('a')).type.toRaiseError(); - - expect(Stack().unshift(0)).type.toBe< - Stack - >(); - - expect(Stack().unshift('a')).type.toBe< - Stack - >(); -}); - -test('#unshiftAll', () => { - expect(Stack().unshiftAll([0])).type.toBe>(); - - expect(Stack().unshiftAll(['a'])).type.toRaiseError(); - - expect(Stack().unshiftAll([1])).type.toBe< - Stack - >(); - - expect(Stack().unshiftAll(['a'])).type.toBe< - Stack - >(); -}); - -test('#clear', () => { - expect(Stack().clear()).type.toBe>(); - - expect(Stack().clear(10)).type.toRaiseError(); -}); - -test('#pop', () => { - expect(Stack().pop()).type.toBe>(); - - expect(Stack().pop(10)).type.toRaiseError(); -}); - -test('#shift', () => { - expect(Stack().shift()).type.toBe>(); - - expect(Stack().shift(10)).type.toRaiseError(); -}); - -test('#map', () => { - expect( - Stack().map((value: number, key: number, iter: Stack) => 1) - ).type.toBe>(); - - expect( - Stack().map( - (value: number, key: number, iter: Stack) => 'a' - ) - ).type.toBe>(); - - expect( - Stack().map( - (value: number, key: number, iter: Stack) => 1 - ) - ).type.toBe>(); - - expect( - Stack().map( - (value: number, key: number, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().map( - (value: string, key: number, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().map( - (value: number, key: string, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().map( - (value: number, key: number, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().map( - (value: number, key: number, iter: Stack) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatMap', () => { - expect( - Stack().flatMap( - (value: number, key: number, iter: Stack) => [1] - ) - ).type.toBe>(); - - expect( - Stack().flatMap( - (value: number, key: number, iter: Stack) => 'a' - ) - ).type.toBe>(); - - expect( - Stack().flatMap( - (value: number, key: number, iter: Stack) => [1] - ) - ).type.toBe>(); - - expect( - Stack().flatMap( - (value: number, key: number, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().flatMap( - (value: string, key: number, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().flatMap( - (value: number, key: string, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().flatMap( - (value: number, key: number, iter: Stack) => 1 - ) - ).type.toRaiseError(); - - expect( - Stack().flatMap( - (value: number, key: number, iter: Stack) => 'a' - ) - ).type.toRaiseError(); -}); - -test('#flatten', () => { - expect(Stack().flatten()).type.toBe>(); - - expect(Stack().flatten(10)).type.toBe>(); - - expect(Stack().flatten(false)).type.toBe< - Collection - >(); - - expect(Stack().flatten('a')).type.toRaiseError(); -}); - -test('#withMutations', () => { - expect(Stack().withMutations((mutable) => mutable)).type.toBe< - Stack - >(); - - expect( - Stack().withMutations((mutable: Stack) => mutable) - ).type.toRaiseError(); -}); - -test('#asMutable', () => { - expect(Stack().asMutable()).type.toBe>(); -}); - -test('#asImmutable', () => { - expect(Stack().asImmutable()).type.toBe>(); -}); diff --git a/type-definitions/ts-tests/tsconfig.json b/type-definitions/ts-tests/tsconfig.json deleted file mode 100644 index 12fa9cfb76..0000000000 --- a/type-definitions/ts-tests/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "es2015", - "module": "commonjs", - "sourceMap": true, - "strict": true, - "types": [], - "noEmit": true, - "lib": ["es2015"], - "baseUrl": "./", - "paths": { - "immutable": ["../immutable.d.ts"] - } - }, - "exclude": ["node_modules"] -} diff --git a/type-definitions/tsconfig.json b/type-definitions/tsconfig.json deleted file mode 100644 index 18735e2da8..0000000000 --- a/type-definitions/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "es2015", - "module": "commonjs", - "sourceMap": true, - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "lib": ["es2015"], - "types": [] - }, - "files": ["immutable.d.ts"] -} diff --git a/website/.eslintrc b/website/.eslintrc deleted file mode 100644 index 97a2bb84ef..0000000000 --- a/website/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["next", "next/core-web-vitals"] -} diff --git a/website/next-env.d.ts b/website/next-env.d.ts deleted file mode 100644 index 1b3be0840f..0000000000 --- a/website/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/website/next-sitemap.config.js b/website/next-sitemap.config.js deleted file mode 100644 index e4cc9ee5dd..0000000000 --- a/website/next-sitemap.config.js +++ /dev/null @@ -1,16 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef -const { getVersions } = require('./src/static/getVersions'); - -/** @type {import('next-sitemap').IConfig} */ -// eslint-disable-next-line no-undef -module.exports = { - siteUrl: 'https://immutable-js.com', - generateRobotsTxt: true, - outDir: './out', - exclude: [ - '/docs', - ...getVersions() - .slice(1) - .map((version) => `/docs/${version}/*`), - ], -}; diff --git a/website/next.config.js b/website/next.config.js deleted file mode 100644 index 61576f7219..0000000000 --- a/website/next.config.js +++ /dev/null @@ -1,6 +0,0 @@ -// eslint-disable-next-line no-undef -module.exports = { - reactStrictMode: true, - trailingSlash: true, - output: 'export', -}; diff --git a/website/public/Immutable-Data-and-React-YouTube.png b/website/public/Immutable-Data-and-React-YouTube.png deleted file mode 100644 index fd5354bd80..0000000000 Binary files a/website/public/Immutable-Data-and-React-YouTube.png and /dev/null differ diff --git a/website/public/favicon.png b/website/public/favicon.png deleted file mode 100644 index 405ac768e2..0000000000 Binary files a/website/public/favicon.png and /dev/null differ diff --git a/website/src/ArrowDown.tsx b/website/src/ArrowDown.tsx deleted file mode 100644 index 662f63466c..0000000000 --- a/website/src/ArrowDown.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import type { JSX } from 'react'; - -export function ArrowDown({ isActive }: { isActive: boolean }): JSX.Element { - return ( - - - - - - ); -} diff --git a/website/src/Defs.tsx b/website/src/Defs.tsx deleted file mode 100644 index a8a464643d..0000000000 --- a/website/src/Defs.tsx +++ /dev/null @@ -1,428 +0,0 @@ -import type { FocusEvent, JSX, MouseEvent, ReactNode } from 'react'; -import { Fragment, useCallback, useState } from 'react'; -import Link from 'next/link'; -import { - TypeKind, - Type, - InterfaceDefinition, - ObjectMember, - CallSignature, - CallParam, -} from './TypeDefs'; - -export function InterfaceDef({ - name, - def, -}: { - name: string; - def: InterfaceDefinition; -}) { - return ( - - type - {name} - {def.typeParams && ( - <> - {'<'} - {interpose( - ', ', - def.typeParams.map((t, i) => ( - - {t} - - )) - )} - {'>'} - - )} - {def.extends && ( - <> - extends - {interpose( - ', ', - def.extends.map((e, i) => ) - )} - - )} - {def.implements && ( - <> - implements - {interpose( - ', ', - def.implements.map((e, i) => ) - )} - - )} - - ); -} - -export function CallSigDef({ - name, - callSig, -}: { - name: string; - callSig?: CallSignature; -}) { - const shouldWrap = callSigLength(name, callSig) > 80; - - return ( - - {name} - {callSig?.typeParams && ( - <> - {'<'} - {interpose( - ', ', - callSig.typeParams.map((t, i) => ( - - {t} - - )) - )} - {'>'} - - )} - {'('} - {callSig && functionParams(callSig.params, shouldWrap)} - {')'} - {callSig?.type && ( - <> - {': '} - - - )} - - ); -} - -export function TypeDef({ type, prefix }: { type: Type; prefix?: number }) { - switch (type.k) { - case TypeKind.Never: - return wrap('primitive', 'never'); - case TypeKind.Any: - return wrap('primitive', 'any'); - case TypeKind.Unknown: - return wrap('primitive', 'unknown'); - case TypeKind.This: - return wrap('primitive', 'this'); - case TypeKind.Undefined: - return wrap('primitive', 'undefined'); - case TypeKind.Boolean: - return wrap('primitive', 'boolean'); - case TypeKind.Number: - return wrap('primitive', 'number'); - case TypeKind.String: - return wrap('primitive', 'string'); - case TypeKind.Union: - return wrap( - 'union', - interpose( - ' | ', - type.types.map((t, i) => ) - ) - ); - case TypeKind.Intersection: - return wrap( - 'intersection', - interpose( - ' & ', - type.types.map((t, i) => ) - ) - ); - case TypeKind.Tuple: - return wrap( - 'tuple', - <> - {'['} - {interpose( - ', ', - type.types.map((t, i) => ) - )} - {']'} - - ); - case TypeKind.Object: - if (!type.members) { - return wrap('primitive', 'object'); - } - return wrap( - 'object', - <> - {'{'} - {interpose( - ', ', - type.members.map((t, i) => ) - )} - {'}'} - - ); - case TypeKind.Indexed: - return wrap( - 'indexed', - <> - ,{'['} - - {']'} - - ); - case TypeKind.Operator: - return wrap( - 'operator', - <> - {wrap('primitive', type.operator)} - - ); - case TypeKind.Array: - return wrap( - 'array', - <> - - {'[]'} - - ); - case TypeKind.Function: { - const shouldWrap = (prefix || 0) + funcLength(type) > 78; - return wrap( - 'function', - <> - {type.typeParams && ( - <> - {'<'} - {interpose( - ', ', - type.typeParams.map((t, i) => ( - - {t} - - )) - )} - {'>'} - - )} - {'('} - {functionParams(type.params, shouldWrap)} - {') => '} - - - ); - } - case TypeKind.Param: - return wrap('typeParam', type.param); - case TypeKind.Type: { - return wrap( - 'type', - <> - {type.url ? ( - - {type.name} - - ) : ( - {type.name} - )} - {type.args && ( - <> - {'<'} - {interpose( - ', ', - type.args.map((a, i) => ) - )} - {'>'} - - )} - - ); - } - } - throw new Error('Type with unknown kind ' + JSON.stringify(type)); -} - -function wrap(className: string, child: ReactNode) { - return {child}; -} - -function Hover({ - className, - children, -}: { - className?: string; - children: ReactNode; -}) { - const [isOver, setIsOver] = useState(false); - const mouseOver = useCallback( - (event: MouseEvent | FocusEvent) => { - event.stopPropagation(); - setIsOver(true); - }, - [setIsOver] - ); - const mouseOut = useCallback(() => { - setIsOver(false); - }, [setIsOver]); - return ( - - {children} - - ); -} - -export function MemberDef({ member }: { member: ObjectMember }) { - return ( - - {member.index ? ( - <>[{functionParams(member.params, false)}] - ) : ( - {member.name} - )} - {member.type && ( - <> - : - - )} - - ); -} - -function functionParams( - params: Array | undefined, - shouldWrap: boolean -) { - const elements = interpose( - shouldWrap ? ( - <> - {','} -
- - ) : ( - ', ' - ), - (params ?? []).map((t, i) => ( - - {t.varArgs ? '...' : null} - {t.name} - {t.optional ? '?: ' : ': '} - - - )) - ); - - return shouldWrap ? ( -
{elements}
- ) : ( - elements - ); -} - -function callSigLength(name: string, sig?: CallSignature): number { - return name.length + (sig ? funcLength(sig) : 2); -} - -function funcLength(sig: CallSignature): number { - return ( - (sig.typeParams ? 2 + sig.typeParams.join(', ').length : 0) + - 2 + - (sig.params ? paramLength(sig.params) : 0) + - (sig.type ? 2 + typeLength(sig.type) : 0) - ); -} - -function paramLength(params: Array): number { - return params.reduce( - (s, p) => - s + - (p.varArgs ? 3 : 0) + - p.name.length + - (p.optional ? 3 : 2) + - typeLength(p.type), - (params.length - 1) * 2 - ); -} - -function memberLength(members: Array): number { - return members.reduce( - (s, m) => - s + - (m.index ? paramLength(m.params || []) + 2 : m.name!.length) + - (m.type ? typeLength(m.type) + 2 : 0), - (members.length - 1) * 2 - ); -} - -function typeLength(type: Type): number { - if (!type) { - throw new Error('Expected type'); - } - switch (type.k) { - case TypeKind.Never: - return 5; - case TypeKind.Any: - return 3; - case TypeKind.Unknown: - return 7; - case TypeKind.This: - return 4; - case TypeKind.Undefined: - return 9; - case TypeKind.Boolean: - return 7; - case TypeKind.Number: - return 6; - case TypeKind.String: - return 6; - case TypeKind.Union: - case TypeKind.Intersection: - return ( - type.types.reduce((s, t) => s + typeLength(t), 0) + - (type.types.length - 1) * 3 - ); - case TypeKind.Tuple: - return ( - 2 + - type.types.reduce((s, t) => s + typeLength(t), 0) + - (type.types.length - 1) * 2 - ); - case TypeKind.Object: - return type.members ? 2 + memberLength(type.members) : 6; - case TypeKind.Indexed: - return 2 + typeLength(type.type) + typeLength(type.index); - case TypeKind.Operator: - return 1 + type.operator.length + typeLength(type.type); - case TypeKind.Array: - return typeLength(type.type) + 2; - case TypeKind.Function: - return 2 + funcLength(type); - case TypeKind.Param: - return type.param.length; - case TypeKind.Type: - return ( - type.name.length + - (!type.args - ? 0 - : type.args.reduce((s, a) => s + typeLength(a), type.args.length * 2)) - ); - } - throw new Error('Type with unknown kind ' + JSON.stringify(type)); -} - -function interpose( - between: ReactNode, - array: Array -): Array { - const result: Array = []; - let i = 0; - for (const value of array) { - result.push(value, {between}); - } - result.pop(); - - return result; -} diff --git a/website/src/DocHeader.tsx b/website/src/DocHeader.tsx deleted file mode 100644 index b57499a864..0000000000 --- a/website/src/DocHeader.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { HeaderLinks, HeaderLogoLink } from './Header'; - -export function DocHeader({ - versions, - currentVersion, -}: { - versions: Array; - currentVersion?: string; -}) { - return ( -
-
-
- - -
-
-
- ); -} diff --git a/website/src/DocOverview.tsx b/website/src/DocOverview.tsx deleted file mode 100644 index 71a62ce155..0000000000 --- a/website/src/DocOverview.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import Link from 'next/link'; -import { MarkdownContent } from './MarkdownContent'; -import type { TypeDefs, TypeDoc } from './TypeDefs'; - -export type OverviewData = { - doc: TypeDoc | null; - api: Array; -}; - -type APIMember = { - label: string; - url: string; - synopsis?: string; -}; - -// Static use only -export function getOverviewData(defs: TypeDefs): OverviewData { - return { - doc: defs.doc || null, - api: Object.values(defs.types).map((def) => { - const member: APIMember = { label: def.label, url: def.url }; - const doc = def.doc || def.call?.doc; - if (doc?.synopsis) { - member.synopsis = doc?.synopsis; - } - return member; - }), - }; -} - -export function DocOverview({ data }: { data: OverviewData }) { - return ( -
- {data.doc && ( -
- - {data.doc.description && ( - - )} -
- )} - -

API

- - {data.api.map((member) => ( -
-

- {member.label} -

- {member.synopsis && ( - - )} -
- ))} -
- ); -} diff --git a/website/src/DocSearch.tsx b/website/src/DocSearch.tsx deleted file mode 100644 index 82e07cf313..0000000000 --- a/website/src/DocSearch.tsx +++ /dev/null @@ -1,53 +0,0 @@ -'use client'; - -import { useEffect, useState } from 'react'; - -export function DocSearch() { - const [enabled, setEnabled] = useState(null); - - useEffect(() => { - const script = document.createElement('script'); - const firstScript = document.getElementsByTagName('script')[0]; - script.src = - 'https://cdn.jsdelivr.net/npm/docsearch.js@2.5.2/dist/cdn/docsearch.min.js'; - script.addEventListener( - 'load', - () => { - // Initialize Algolia search. - // @ts-expect-error -- algolia is set on windows, need proper type - if (window.docsearch) { - // @ts-expect-error -- algolia is set on windows, need proper type - window.docsearch({ - apiKey: '83f61f865ef4cb682e0432410c2f7809', - indexName: 'immutable_js', - inputSelector: '#algolia-docsearch', - }); - setEnabled(true); - } else { - setEnabled(false); - } - }, - false - ); - firstScript?.parentNode?.insertBefore(script, firstScript); - - const link = document.createElement('link'); - const firstLink = document.getElementsByTagName('link')[0]; - link.rel = 'stylesheet'; - link.href = - 'https://cdn.jsdelivr.net/npm/docsearch.js@2.5.2/dist/cdn/docsearch.min.css'; - firstLink?.parentNode?.insertBefore(link, firstLink); - }, []); - - if (enabled === false) return null; - - return ( - - ); -} diff --git a/website/src/Header.tsx b/website/src/Header.tsx deleted file mode 100644 index b8e8b67d9e..0000000000 --- a/website/src/Header.tsx +++ /dev/null @@ -1,198 +0,0 @@ -'use client'; - -import { useState, useEffect } from 'react'; -import Link from 'next/link'; - -import { SVGSet } from './SVGSet'; -import { Logo } from './Logo'; -import { StarBtn } from './StarBtn'; -import { isMobile } from './isMobile'; - -export function Header({ - versions, - currentVersion, -}: { - versions: Array; - currentVersion?: string; -}) { - const [scroll, setScroll] = useState(0); - - useEffect(() => { - let _pending = false; - function handleScroll() { - if (!_pending) { - const headerHeight = Math.min( - 800, - Math.max(260, document.documentElement.clientHeight * 0.7) - ); - if (window.scrollY < headerHeight) { - _pending = true; - window.requestAnimationFrame(() => { - _pending = false; - setScroll(window.scrollY); - }); - } - } - } - - window.addEventListener('scroll', handleScroll); - return () => { - window.removeEventListener('scroll', handleScroll); - }; - }, []); - - const neg = scroll < 0; - const s = neg ? 0 : scroll; - const sp = isMobile() ? 35 : 70; - - return ( -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
- {[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].map((_, i) => ( - - - - - ))} - - - - -
-
-
- -
-
-
-
-
- ); -} - -export function HeaderLogoLink() { - return ( - - - - - - - ); -} - -export function HeaderLinks({ - versions, - currentVersion, -}: { - versions: Array; - currentVersion?: string; -}) { - return ( -
- ); -} - -function DocsDropdown({ - versions, - currentVersion, -}: { - versions: Array; - currentVersion?: string; -}) { - return ( -
- -
- - Docs{currentVersion && ` (${currentVersion})`} - -
-
    - {versions.map((v) => ( -
  • - {v} -
  • - ))} -
-
- ); -} - -function ty(s: number, p: number) { - return (p < s ? p : s) * -0.55; -} - -function o(s: number, p: number) { - return Math.max(0, s > p ? 1 - (s - p) / 350 : 1); -} - -function tz(s: number, p: number) { - return Math.max(0, s > p ? 1 - (s - p) / 20000 : 1); -} - -function t(y: number, z: number) { - return { transform: 'translate3d(0, ' + y + 'px, 0) scale(' + z + ')' }; -} diff --git a/website/src/ImmutableConsole.tsx b/website/src/ImmutableConsole.tsx deleted file mode 100644 index 4875a22058..0000000000 --- a/website/src/ImmutableConsole.tsx +++ /dev/null @@ -1,69 +0,0 @@ -'use client'; - -import { useEffect } from 'react'; - -type InstallSpace = { - Immutable?: unknown; - module?: unknown; - exports?: unknown; -}; - -let installingVersion: string | undefined; - -export function ImmutableConsole({ version }: { version: string }) { - useEffect(() => { - const installSpace = global as unknown as InstallSpace; - if (installingVersion === version) { - return; - } - installingVersion = version; - installUMD(installSpace, getSourceURL(version)).then((Immutable) => { - installSpace.Immutable = Immutable; - - console.log( - '\n' + - ' ▄▟████▙▄ _ __ __ __ __ _ _ _______ ____ _ _____ \n' + - ' ▟██████████▙ | | | \\ / | \\ / | | | |__ __|/\\ | _ \\| | | ___|\n' + - '██████████████ | | | \\/ | \\/ | | | | | | / \\ | |_) | | | |__ \n' + - '██████████████ | | | |\\ /| | |\\ /| | | | | | | / /\\ \\ | _ <| | | __| \n' + - ' ▜██████████▛ | | | | \\/ | | | \\/ | | |__| | | |/ ____ \\| |_) | |___| |___ \n' + - ' ▀▜████▛▀ |_| |_| |_|_| |_|\\____/ |_/_/ \\_\\____/|_____|_____|\n' + - '\n' + - `Version: ${version}\n` + - '> console.log(Immutable);' - ); - console.log(Immutable); - }); - }, [version]); - return null; -} - -function getSourceURL(version: string) { - if (version === 'latest@main') { - return `https://cdn.jsdelivr.net/gh/immutable-js/immutable-js@npm/dist/immutable.js`; - } - const semver = version[0] === 'v' ? version.slice(1) : version; - return `https://cdn.jsdelivr.net/npm/immutable@${semver}/dist/immutable.js`; -} - -function installUMD(installSpace: InstallSpace, src: string): Promise { - return new Promise((resolve) => { - const installedModule = (installSpace.module = { - exports: (installSpace.exports = {}), - }); - const script = document.createElement('script'); - const firstScript = document.getElementsByTagName('script')[0]; - script.src = src; - script.addEventListener( - 'load', - () => { - installSpace.module = undefined; - installSpace.exports = undefined; - script.remove(); - resolve(installedModule.exports); - }, - false - ); - firstScript?.parentNode?.insertBefore(script, firstScript); - }); -} diff --git a/website/src/Logo.tsx b/website/src/Logo.tsx deleted file mode 100644 index b9c0bb5e7c..0000000000 --- a/website/src/Logo.tsx +++ /dev/null @@ -1,74 +0,0 @@ -type Props = { - opacity?: number; - inline?: boolean; - color: string; -}; - -export function Logo({ opacity = 1, inline, color }: Props) { - return !inline ? ( - - - - - - - - - - - - ) : ( - - - - - - - - - - - - ); -} diff --git a/website/src/MarkdownContent.tsx b/website/src/MarkdownContent.tsx deleted file mode 100644 index 7f90fca400..0000000000 --- a/website/src/MarkdownContent.tsx +++ /dev/null @@ -1,33 +0,0 @@ -'use client'; - -import { memo, MouseEvent } from 'react'; -import { useRouter } from 'next/navigation'; - -type Props = { - contents: string; - className?: string; -}; - -// eslint-disable-next-line prefer-arrow-callback -export const MarkdownContent = memo(function MarkdownContent({ - contents, - className, -}) { - const router = useRouter(); - - const handleClick = (event: MouseEvent) => { - const link = event.target as HTMLAnchorElement; - if (link.tagName === 'A' && link.target !== '_blank') { - event.preventDefault(); - router.push(link.href); - } - }; - - return ( -
- ); -}); diff --git a/website/src/MemberDoc.tsx b/website/src/MemberDoc.tsx deleted file mode 100644 index 7d36ff2c52..0000000000 --- a/website/src/MemberDoc.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import Link from 'next/link'; -import { Fragment } from 'react'; -import { CallSigDef, MemberDef } from './Defs'; -import { MarkdownContent } from './MarkdownContent'; -import type { MemberDefinition } from './TypeDefs'; - -export function MemberDoc({ member }: { member: MemberDefinition }) { - return ( -
-

- {member.label} -

-
- {member.doc && ( - - )} - {!member.signatures ? ( - - - - ) : ( - - {member.signatures.map((callSig, i) => ( - - - {'\n'} - - ))} - - )} - {member.inherited && ( -
-

Inherited from

- - - {member.inherited.interface}#{member.inherited.label} - - -
- )} - {member.overrides && ( -
-

Overrides

- - - {member.overrides.interface}#{member.overrides.label} - - -
- )} - {member.doc?.notes.map((note, i) => ( -
-

{note.name}

- {note.name === 'alias' ? ( - - - - ) : ( - - )} -
- ))} - {member.doc?.description && ( -
-

- {member.doc.description.slice(0, 5) === ' - -

- )} -
-
- ); -} - -// export type ParamTypeMap = { [param: string]: Type }; - -// function getParamTypeMap( -// interfaceDef: InterfaceDefinition | undefined, -// member: MemberDefinition -// ): ParamTypeMap | undefined { -// if (!member.inherited || !interfaceDef?.typeParamsMap) return; -// const defining = member.inherited.split('#')[0] + '>'; -// const paramTypeMap: ParamTypeMap = {}; -// // Filter typeParamsMap down to only those relevant to the defining interface. -// for (const [path, type] of Object.entries(interfaceDef.typeParamsMap)) { -// if (path.startsWith(defining)) { -// paramTypeMap[path.slice(defining.length)] = type; -// } -// } -// return paramTypeMap; -// } diff --git a/website/src/RunkitEmbed.tsx b/website/src/RunkitEmbed.tsx deleted file mode 100644 index 8b394671c1..0000000000 --- a/website/src/RunkitEmbed.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import Script from 'next/script'; - -export function RunkitEmbed() { - return