diff --git a/.editorconfig b/.editorconfig index bab4e5467..62db4248f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,7 +9,7 @@ end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -max_line_length = 120 +max_line_length = 140 [*.{js,ts}] block_comment_start = /** diff --git a/.eslintignore b/.eslintignore index 21ddf2ab5..3a47a9fce 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,4 @@ *.js *.d.ts -/demo/es-bench/ -/uniquely/flight-finder-pwa node_modules _data diff --git a/.eslintrc.json b/.eslintrc.json index 9ce8e5a38..4682a3d51 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,69 +1,4 @@ { "root": true, - "extends": [ - "eslint:recommended", - "google", - "plugin:@typescript-eslint/strict", - "plugin:@typescript-eslint/stylistic", - // "plugin:@typescript-eslint/strict-type-checked", - // "plugin:@typescript-eslint/stylistic-type-checked", - "plugin:import/recommended", - "plugin:import/typescript", - "plugin:wc/best-practice", - "plugin:lit/recommended" - ], - "env": { - "shared-node-browser": true, - "es2022": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": true, - "ecmaVersion": 2021, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint", "import", "wc"], - "settings": { - "import/resolver": { - "typescript": { - "alwaysTryTypes": true, - "project": ["**/tsconfig.json"], - "projectFolderIgnoreList": ["**/node_modules/**"] - }, - "node": true - }, - "wc": { - "elementBaseClasses": ["LitElement"] - } - }, - "rules": { - "max-len": ["error", {"code": 300}], - "no-eval": ["error", {"allowIndirect": true}], - "no-floating-decimal": "error", - "space-infix-ops": "error", - "new-cap": ["error", {"capIsNewExceptionPattern": "Mixin$"}], - "brace-style": ["error", "stroustrup", {"allowSingleLine": true}], - "operator-linebreak": ["error", "after", {"overrides": {"?": "before", ":": "before"}}], - "import/order": [ - "error", - { - "groups": ["builtin", "external", "internal", ["parent", "sibling", "index"], "object", "unknown", "type"], - "newlines-between": "always", - "warnOnUnassignedImports": true, - "alphabetize": { - "order": "asc", - "caseInsensitive": true - } - } - ], - "@typescript-eslint/prefer-string-starts-ends-with": "off", - "lit/attribute-value-entities": "off", - "@typescript-eslint/no-dynamic-delete": "off", - "import/no-unresolved": "off", - "wc/guard-super-call": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "no-throw-literal": "off", - "require-jsdoc": "off", - "valid-jsdoc": "off" - } + "extends": "@alwatr/eslint-config" } diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 6ffa62576..000000000 --- a/.gitattributes +++ /dev/null @@ -1,5 +0,0 @@ -cloud/classic/lib/* filter=crypt diff=crypt merge=crypt -ssh-* filter=crypt diff=crypt merge=crypt -**/secret/** filter=crypt diff=crypt merge=crypt -*.env filter=crypt diff=crypt merge=crypt -*.http filter=crypt diff=crypt merge=crypt diff --git a/.gitconfig b/.gitconfig deleted file mode 100644 index 17e5b8363..000000000 --- a/.gitconfig +++ /dev/null @@ -1,101 +0,0 @@ -[user] - # name = Ali Mihandoost - # email = ali.mihandoost@gmail.com - -[alias] - c = commit -m - ca = commit -am - cl = clone - cl1 = clone --depth=1 - pl = pull --prune --progress --autostash --rebase=true - plm = pull --prune --progress --autostash --rebase=false - p = push - pp = push --prune - pa = push --all - pt = push --tags - b = branch - ba = branch -avv - bd = push origin --delete - s = status -s - st = stash -u - sp = stash pop - m = merge - r = rebase - rc = rebase --continue - ra = rebase --abort - rs = rebase --skip - co = checkout - sw = switch - f = fetch - chp = cherry-pick - d = diff --color --color-words --abbrev - rn = !"git pl && git rebase origin/${1:-next} && git push -f #" - feat = !"git fetch && git switch -c feat/$1 origin/next && git push -u #" - sep = !"git fetch && git switch -c feat/$1 origin/v2 && shift && git cherry-pick $@ && git push -u && gh pr create --assignee @me --base v2 --fill --web #" - l = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -- - # Show the diff between the latest commit and the current state - df = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat" - ru = rebase-update # depot_tools specific - t = tag -ln3 - - hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short - type = cat-file -t - dump = cat-file -p - -[help] - autocorrect = 1 - -[push] - default = current - -[pull] - rebase = false - -# so much color -[color] - ui = always - -[color "diff"] - meta = yellow bold - commit = green bold - frag = magenta bold - old = red bold - new = green bold - whitespace = red reverse - -[color "diff-highlight"] - oldNormal = red bold - oldHighlight = "red bold 52" - newNormal = "green bold" - newHighlight = "green bold 22" - -[color "branch"] - current = yellow reverse - local = yellow - remote = green - -[color "status"] - added = yellow - changed = green - untracked = cyan - -[http] - sslVerify = false - -# [credential] -# helper = manager - -[core] - autocrlf = input - -[init] - defaultBranch = main - -[commit] - gpgsign = true - -[filter "lfs"] - process = git-lfs filter-process - required = true - clean = git-lfs clean -- %f - smudge = git-lfs smudge -- %f diff --git a/.github/copilot-instruction.md b/.github/copilot-instruction.md new file mode 100644 index 000000000..a185ef543 --- /dev/null +++ b/.github/copilot-instruction.md @@ -0,0 +1,44 @@ +# Instruction + +As an advanced web developer, prioritize code maintainability, readability, and performance. Write clean, efficient, and well-documented code. Adhere to instructions without adding extra code or features. Identify and report bugs and mistakes for correction. Carefully review prompts and provide detailed feedback if something is incorrect. + +## General Rules + +- Follow JAMstack architecture principles. +- Write minimal and clear descriptions and if possible don't write anything and just send code. +- Fully optimize JavaScript code for best performance. +- Ensure clear separation of concerns. +- Do not use extra packages unless explicitly required; prefer vanilla JavaScript. +- Use modern TypeScript; avoid outdated versions and polyfills. Add TODO comments if polyfills are needed. + +## Technologies + +- Use Lit for web components with light DOM. +- Use Tailwind CSS for styling; avoid additional CSS. +- Use the latest TypeScript features for type safety and improved code quality. +- Use Nunjucks templating engine in the 11ty static site generator. +- Utilize in-ecosystem packages developed by our team. +- Use the NoSQL database developed by our team. +- Alpine Store for state management. +- Use FSM for state machines by our team for many part of client-side logics. +- Use logger for logging by our team for each function. + +## Commenting + +1. Comments should not duplicate the code, if duplicate, don't write it. +2. Rewrite unclear code instead of adding comments to explain it. +3. If a comment is unclear, there may be an issue with the code itself. +4. Comments should clarify, not confuse. Remove comments that cause confusion. +5. Explain non-standard code with comments. +6. Provide links to the original source of copied code. +7. Include links to external references where helpful. +8. Add comments when fixing bugs. +9. Use comments to mark incomplete implementations. +10. minimize usage of jsdoc comments. + +## Other + +1. call me `bro`. +2. Please consider the logic and if my opinion is against your opinion, please don't accept it immediately and just check it again and give reasons. +3. Do not speak too formally and sloppily, Feel like you're talking to your friend. +4. Explain with simple english. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..12361eb0c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,71 @@ +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + open-pull-requests-limit: 20 + commit-message: + prefix: deps + include: scope + reviewers: + - AliMD + schedule: + interval: weekly + time: '10:30' + day: thursday + labels: + - ci + - priority-low + - maintenance + groups: + github-actions: + patterns: + - '*' + + - package-ecosystem: npm + directory: / + versioning-strategy: increase + open-pull-requests-limit: 20 + commit-message: + prefix: deps + include: scope + reviewers: + - AliMD + schedule: + interval: weekly + time: '10:30' + day: thursday + labels: + - dependencies + - ci + - priority-low + - maintenance + groups: + production-dependencies: + dependency-type: 'production' + exclude-patterns: + - '@alwatr/*' + - 'fract' + development-dependencies: + dependency-type: 'development' + exclude-patterns: + - '@alwatr/*' + - 'fract' + alwatr-dependencies: + patterns: + - '@alwatr/*' + - 'fract' + + - package-ecosystem: docker + directory: /packages/alwatr + reviewers: + - AliMD + schedule: + interval: weekly + time: '10:30' + day: thursday + labels: + - ci + - priority-low + - maintenance diff --git a/.github/dependabot.yml.disabled b/.github/dependabot.yml.disabled deleted file mode 100644 index fc4cdd373..000000000 --- a/.github/dependabot.yml.disabled +++ /dev/null @@ -1,54 +0,0 @@ -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - - package-ecosystem: github-actions - directory: / - open-pull-requests-limit: 20 - reviewers: - - AliMD - schedule: - interval: daily - labels: - - ci - - priority-low - - maintenance - groups: - github-actions: - patterns: - - "*" - - - - package-ecosystem: npm - directory: / - versioning-strategy: increase - open-pull-requests-limit: 20 - reviewers: - - AliMD - schedule: - interval: daily - labels: - - dependencies - - ci - - priority-low - - maintenance - groups: - production-dependencies: - dependency-type: "production" - exclude-patterns: - - "@alwatr/*" - - "fract" - development-dependencies: - dependency-type: "development" - exclude-patterns: - - "*lint*" - - "@alwatr/*" - - "fract" - lint-dependencies: - patterns: - - "*lint*" - alwatr-dependencies: - patterns: - - "@alwatr/*" - - "fract" diff --git a/.github/labels.yml b/.github/labels.yml index 1dc512a1b..ec0533157 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -19,7 +19,7 @@ description: 'Enhancement of the code, not introducing new features.' - name: 'refactor' color: 1d76db - description: 'Updating the code with simpler, easier to understand or more efficient syntax or methods, but not introducing new features.' + description: 'Updating the code with simpler, easier to understand or more efficient syntax or methods.' - name: 'performance' color: 1d76db description: 'Improving performance of the project, not introducing new features.' diff --git a/.github/workflows/build-lint.yaml b/.github/workflows/build-lint.yaml index 73fde2aaf..e08831b6a 100644 --- a/.github/workflows/build-lint.yaml +++ b/.github/workflows/build-lint.yaml @@ -5,12 +5,12 @@ name: Build & Lint on: workflow_dispatch: - # pull_request: + pull_request: - # push: - # branches: - # - next - # - main + push: + branches: + - next + - main env: NODE_VERSION: lts/* @@ -25,24 +25,34 @@ jobs: steps: - name: ⤵️ Checkout repository - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.2.1 - name: 🏗 Setup nodejs - uses: actions/setup-node@v4.0.0 + uses: actions/setup-node@v4.0.4 with: node-version: ${{ env.NODE_VERSION }} - cache: yarn + + - name: 🏗 Setup nodejs corepack + run: corepack enable + + - name: 🏗 Get yarn config + id: yarn_config + run: echo "cache_folder=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT + + - name: 🏗 Cache Layer + uses: actions/cache@v4.1.1 + # id: yarn_cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) + with: + path: ${{ steps.yarn_config.outputs.cache_folder }} + key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- - name: 🏗 Install dependencies - run: yarn install --frozen-lockfile + run: yarn install --immutable - name: 🚀 Build Typescript run: yarn build - - name: 🚀 Extra Packages Build - run: yarn build:r - - name: 🚀 Run ESLint - run: yarn lint:ts - env: - NODE_OPTIONS: "--max-old-space-size=4096 --max-semi-space-size=64" + run: yarn lint diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index 6cbdd30ff..b2dd80da4 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -5,18 +5,14 @@ name: CodeQL on: workflow_dispatch: - # push: - # branches: - # - main - # schedule: # - cron: '0 7 * */2 *' - # │ │ │ │ │ - # │ │ │ │ └─── day of the week (0 - 6 or SUN-SAT) - # │ │ │ └────── month (1 - 12 or JAN-DEC) - # │ │ └───────── day of the month (1 - 31) - # │ └─────────── hour (0 - 23) - # └───────────── minute (0 - 59) + # │ │ │ │ │ + # │ │ │ │ └─── day of the week (0 - 6 or SUN-SAT) + # │ │ │ └────── month (1 - 12 or JAN-DEC) + # │ │ └───────── day of the month (1 - 31) + # │ └─────────── hour (0 - 23) + # └───────────── minute (0 - 59) jobs: analyze-code-ql: @@ -36,17 +32,17 @@ jobs: steps: - name: ⤵️ Checkout repository - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.2.1 - name: 🏗 Initialize CodeQL - uses: github/codeql-action/init@v2.22.5 + uses: github/codeql-action/init@v3.26.12 with: languages: ${{ matrix.language }} # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality - name: 🏗 Auto build - uses: github/codeql-action/autobuild@v2.22.5 + uses: github/codeql-action/autobuild@v3.26.12 - name: 🚀 Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2.22.5 + uses: github/codeql-action/analyze@v3.26.12 diff --git a/.github/workflows/dependency-review.yaml b/.github/workflows/dependency-review.yaml index ad2c62589..d92db4136 100644 --- a/.github/workflows/dependency-review.yaml +++ b/.github/workflows/dependency-review.yaml @@ -5,6 +5,7 @@ name: Dependency Review on: workflow_dispatch: + # disable on private repository # pull_request: jobs: @@ -17,7 +18,7 @@ jobs: steps: - name: ⤵️ Checkout repository - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.2.1 - name: 🚀 Dependency Review - uses: actions/dependency-review-action@v3.1.2 + uses: actions/dependency-review-action@v4.3.4 diff --git a/.github/workflows/lock-closed.yml b/.github/workflows/lock-closed.yml deleted file mode 100644 index cff409100..000000000 --- a/.github/workflows/lock-closed.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: Lock closed - -on: - workflow_dispatch: - - # schedule: - # - cron: '5 8 * * *' - # * * * * * - # │ │ │ │ │ - # │ │ │ │ └───── day of the week (0 - 6 or SUN-SAT) - # │ │ │ └─────── month (1 - 12 or JAN-DEC) - # │ │ └───────── day of the month (1 - 31) - # │ └─────────── hour (0 - 23) - # └───────────── minute (0 - 59) - -jobs: - lock: - name: Lock closed issues and PRs - runs-on: ubuntu-latest - - permissions: - issues: write - pull-requests: write - - concurrency: - group: lock-closed - - steps: - - name: 🔒 Lock closed issues and PRs - uses: dessant/lock-threads@v4.0.1 - with: - github-token: ${{ github.token }} - issue-inactive-days: 7 - pr-inactive-days: 1 - pr-lock-reason: resolved - issue-comment: > - Issue closed and locked due to lack of activity. - - If you encounter this same issue, please open a new issue and refer - to this closed one. - # pr-comment: > - # Pull Request closed and locked due to lack of activity. diff --git a/.github/workflows/pr-labels.yml b/.github/workflows/pr-labels.yml deleted file mode 100644 index 7f672dda3..000000000 --- a/.github/workflows/pr-labels.yml +++ /dev/null @@ -1,26 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: PR Labels - -on: - workflow_dispatch: - # pull_request: - # types: [opened, labeled, unlabeled, synchronize] - -jobs: - pr_labels: - name: PR Labels Verify - runs-on: ubuntu-latest - - permissions: - pull-requests: read - - steps: - - name: 🏷 Verify PR has a valid label - uses: jesusvasquez333/verify-pr-label-action@v1.4.0 - with: - github-token: '${{ secrets.GITHUB_TOKEN }}' - valid-labels: >- - breaking-change, bugfix, documentation, enhancement, - refactor, release, performance, new-feature, maintenance, ci, dependencies - disable-reviews: true diff --git a/.github/workflows/publish-alwatr-container.yml b/.github/workflows/publish-alwatr-container.yml deleted file mode 100644 index 18aec0a93..000000000 --- a/.github/workflows/publish-alwatr-container.yml +++ /dev/null @@ -1,159 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: Publish Alwatr Containers - -on: - workflow_dispatch: - - # push: - # tags: - # - 'v*.*.*' - # branches: - # - next - # - main - - # pull_request: - # paths: - # - 'cloud/container/alwatr-*.dockerfile' - # - '.github/workflows/publish-alwatr-container.yml' - -env: - REGISTRY: ghcr.io - USERNAME: ${{github.repository_owner}} - # USERNAME: ${{github.actor}} - # USERNAME: Alwatr - -jobs: - build: - if: github.repository_owner == 'AliMD' - - name: Build Container - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - include: - # services - - image: comment - source: services/comment - dockerfile: cloud/container/alwatr-services.dockerfile - description: Alwatr Comment API Nanoservice, Distributed simple and fast comment nanoservice. - - - image: flight-crawler - source: services/flight-crawler - dockerfile: cloud/container/alwatr-services.dockerfile - description: Alwatr Flight Crawler Nanoservice, Distributed simple and fast flight crawler nanoservice. - - - image: form-registration - source: services/form-registration - dockerfile: cloud/container/alwatr-services.dockerfile - description: Alwatr Form Registration API Nanoservice, Distributed simple and fast nanoservice for registering form information. - - - image: storage-server - source: services/storage-server - dockerfile: cloud/container/alwatr-services.dockerfile - description: Alwatr Storage Server, Elegant micro in-memory json-like storage nanoservice with disk backed, Fastest NoSQL Database. - - - image: telegram-notifier - source: services/telegram-notifier - dockerfile: cloud/container/alwatr-services.dockerfile - description: Alwatr Telegram Notify Microservice, Distributed simple and fast telegram notify nanoservice. - - # uniquely - - image: soffit-pwa - source: uniquely/soffit-pwa - dockerfile: cloud/container/alwatr-pwa.dockerfile - description: Soffit PWA. - - - image: com-pwa - source: uniquely/com-pwa - dockerfile: cloud/container/alwatr-pwa.dockerfile - description: Customer Order Management PWA. - - - image: keep-pwa - source: uniquely/keep-pwa - dockerfile: cloud/container/alwatr-pwa.dockerfile - description: Keep PWA. - - - image: com-api - source: uniquely/com-api - dockerfile: cloud/container/alwatr-services.dockerfile - description: Customer Order Management API. - - - image: flight-finder-api - source: uniquely/flight-finder-api - dockerfile: cloud/container/alwatr-services.dockerfile - description: Alwatr Flight Finder Application API. - - # - image: flight-finder-pwa - # source: uniquely/flight-finder-pwa - # dockerfile: cloud/container/alwatr-pwa.dockerfile - # description: Alwatr Flight Finder PWA. - - - permissions: - contents: read - packages: write - # This is used to complete the identity challenge - # with sigstore/fulcio when running outside of PRs. - id-token: write - - steps: - - name: ⤵️ Checkout repository - uses: actions/checkout@v4.1.1 - - - name: 🏗 Setup Docker Buildx - uses: docker/setup-buildx-action@v3.0.0 - - - name: 🏗 Log into registry ${{ env.REGISTRY }} - if: ${{ github.event_name != 'pull_request' }} - uses: docker/login-action@v3.0.0 - with: - registry: ${{ env.REGISTRY }} - username: ${{ env.USERNAME }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: 🏗 Extract metadata - id: meta - uses: docker/metadata-action@v5.0.0 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - images: name=${{ env.REGISTRY }}/${{ env.USERNAME }}/${{ matrix.image }},enable=true - - labels: | - org.opencontainers.image.authors=Ali.Mihandoost@gmail.com - org.opencontainers.image.title=@alwatr/${{ matrix.image }} - org.opencontainers.image.description=${{ matrix.description }} - - tags: | - type=semver,enable=true,pattern={{major}} - type=semver,enable=true,pattern={{major}}.{{minor}} - type=semver,enable=true,pattern={{version}} - type=ref,enable=true,event=pr - type=ref,enable=true,event=branch - - - name: 🚀 Build and push container image - id: build-and-push - uses: docker/build-push-action@v5.0.0 - with: - push: ${{ github.event_name != 'pull_request' }} - github-token: ${{ secrets.GITHUB_TOKEN }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - context: . - file: ${{ matrix.dockerfile }} - build-args: | - PACKAGE_SOURCE=${{ matrix.source }} - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: 🏗 Install cosign - if: ${{ github.event_name != 'pull_request' }} - uses: sigstore/cosign-installer@v3.2.0 - - - name: 🏗 Sign the published container image - if: ${{github.event_name != 'pull_request'}} - env: - COSIGN_EXPERIMENTAL: 'true' - run: echo "${{steps.meta.outputs.tags}}" | xargs -I {} cosign sign --yes {}@${{steps.build-and-push.outputs.digest}} diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml deleted file mode 100644 index 7ff8171c3..000000000 --- a/.github/workflows/publish-npm.yml +++ /dev/null @@ -1,49 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: Publish NPM - -on: - workflow_dispatch: - - # release: - # types: - # - created - -env: - NODE_VERSION: lts/* - -jobs: - publish-npm: - if: github.repository_owner == 'AliMD' - - name: Publish NPM - runs-on: ubuntu-latest - - permissions: - contents: read - security-events: write - - steps: - - name: ⤵️ Checkout repository - uses: actions/checkout@v4.1.1 - - - name: 🏗 Setup nodejs - uses: actions/setup-node@v4.0.0 - with: - node-version: ${{env.NODE_VERSION}} - registry-url: https://registry.npmjs.org/ - cache: yarn - - - name: 🏗 Install dependencies - run: yarn install --frozen-lockfile - - - name: 🏗 Build Typescript - run: yarn build - - # - name: 🚀 Extra Packages Build - # run: yarn build:r - - - name: 🚀 Publish - run: yarn run publish --yes - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/.github/workflows/publish-special-container.yml b/.github/workflows/publish-special-container.yml deleted file mode 100644 index 883e4ad57..000000000 --- a/.github/workflows/publish-special-container.yml +++ /dev/null @@ -1,201 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: Publish Special Containers - -on: - workflow_dispatch: - - # push: - # branches: - # - next - # - main - - # pull_request: - # paths: - # - 'cloud/container/**' - # - '.github/workflows/publish-special-container.yml' - -env: - REGISTRY: ghcr.io - -jobs: - build: - if: github.repository_owner == 'AliMD' - - name: Build & Publish Containers - runs-on: ubuntu-latest - - strategy: - fail-fast: true - max-parallel: 1 - matrix: - include: - - image: traefik - path: cloud/container/traefik - description: Clone of Traefik. - version: - short: 1 - full: 1.7-alpine - - - image: alpine - path: cloud/container/alpine - description: A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size! - version: - short: 3 - full: 3.17 - - - image: nginx - path: cloud/container/nginx - description: High performance Accelerated NGINX optimized for serve static content like CDN. - version: - short: 1 - full: 1.9.2-1.25-alpine - - - image: nginx-pwa - path: cloud/container/nginx-pwa - description: High performance Accelerated NGINX optimized for serve progressive web applications. - version: - short: 1 - full: 1.9.2-1.25-alpine - - - image: nginx-ws - path: cloud/container/nginx-ws - description: High performance Accelerated NGINX optimized for serve static website. - version: - short: 1 - full: 1.9.2-1.25-alpine - - - image: nginx-storage - path: cloud/container/nginx-storage - description: High performance Accelerated NGINX optimized for serve alwatr storage server json. - version: - short: 1 - full: 1.9.2-1.25-alpine - - - image: adminer - path: cloud/container/adminer - description: Clone of Adminer. - version: - short: 4 - full: 4 - - - image: mariadb - path: cloud/container/mariadb - description: Clone of Mariadb. - version: - short: 10 - full: 10.9 - - - image: nocodb - path: cloud/container/nocodb - description: Clone of Nocodb. - version: - short: 0.109 - full: 0.109.2 - - - image: php - path: cloud/container/php/7.4-apache - description: Clone of PHP Apache. - version: - short: 7-apache - full: 7.4-apache - - - image: php - path: cloud/container/php/7.4-fpm - description: Clone of PHP FPM. - version: - short: 7-fpm - full: 7.4-fpm - - - image: php - path: cloud/container/php/8.2-fpm - description: Clone of PHP FPM. - version: - short: 8-fpm - full: 8.2-fpm - - - image: wordpress - path: cloud/container/wordpress/php7.4 - description: Clone of Wordpress. - version: - short: 6-php7 - full: 6.1-php7.4-fpm # latest version support php 7.4 is 6.1 - - - image: wordpress - path: cloud/container/wordpress/php8.2 - description: Clone of Wordpress. - version: - short: 6 - full: 6.2-php8.2-fpm - - # - image: tdlib - # path: cloud/container/tdlib - # description: Cross-platform library for building Telegram clients. - # version: - # short: 1 - # full: 1.8 - - permissions: - contents: read - packages: write - # This is used to complete the identity challenge - # with sigstore/fulcio when running outside of PRs. - id-token: write - - steps: - - name: ⤵️ Checkout repository - uses: actions/checkout@v4.1.1 - - - name: 🏗 Extract Docker metadata - id: meta - uses: docker/metadata-action@v5.0.0 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - images: | - name=${{env.REGISTRY}}/alwatr/${{matrix.image}},enable=false - name=${{env.REGISTRY}}/${{github.repository_owner}}/${{matrix.image}},enable=true - - labels: | - org.opencontainers.image.authors=Ali.Mihandoost@gmail.com - org.opencontainers.image.title=@Alwatr/${{matrix.image}} - org.opencontainers.image.description=${{matrix.description}} - - tags: | - type=ref,event=branch - type=ref,event=pr - type=raw,value=${{matrix.version.short}} - type=raw,value=${{matrix.version.full}} - # type=semver,pattern={{version}},prefix=alwatr- - # type=semver,pattern={{major}}.{{minor}},prefix=alwatr- - - - name: 🏗 Install cosign - if: ${{ github.event_name != 'pull_request' }} - uses: sigstore/cosign-installer@v3.2.0 - - - name: 🏗 Setup Docker Buildx - uses: docker/setup-buildx-action@v3.0.0 - - - name: 🏗 Log into registry ${{env.REGISTRY}} - if: ${{ github.event_name != 'pull_request' }} - uses: docker/login-action@v3.0.0 - with: - registry: ${{env.REGISTRY}} - username: ${{github.repository_owner}} - password: ${{secrets.GITHUB_TOKEN}} - - - name: 🚀 Build and push container image - id: build-and-push - uses: docker/build-push-action@v5.0.0 - with: - context: ${{matrix.path}} - push: ${{github.event_name != 'pull_request'}} - tags: ${{steps.meta.outputs.tags}} - labels: ${{steps.meta.outputs.labels}} - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: 🏗 Sign the published container image - if: ${{github.event_name != 'pull_request'}} - env: - COSIGN_EXPERIMENTAL: 'true' - run: echo "${{steps.meta.outputs.tags}}" | xargs -I {} cosign sign --yes {}@${{steps.build-and-push.outputs.digest}} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 8f915ec12..000000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,52 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: Stale - -on: - workflow_dispatch: - # schedule: - # - cron: '2 8 * * *' - -jobs: - stale: - name: Clean up stale issues and PRs - runs-on: ubuntu-latest - - permissions: - issues: write - pull-requests: write - - steps: - - name: 🧹 Clean up stale issues and PRs - uses: actions/stale@v8.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - days-before-stale: 60 - days-before-close: 7 - remove-stale-when-updated: true - stale-issue-label: stale - stale-pr-label: stale - exempt-issue-labels: 'no-stale,help-wanted,good first issue' - exempt-pr-labels: no-stale - close-issue-label: auto-closed - close-pr-label: auto-closed - stale-issue-message: > - There hasn't been any activity on this issue recently, and in order - to prioritize active issues, it will be marked as stale. - - Please make sure to update to the latest version and - check if that solves the issue. Let us know if that works for you - by leaving a 👍 - - Because this issue is marked as stale, it will be closed and locked - in 7 days if no further activity occurs. - - Thank you for your contributions! - stale-pr-message: > - There hasn't been any activity on this pull request recently, and in - order to prioritize active work, it has been marked as stale. - - This PR will be closed and locked in 7 days if no further activity - occurs. - - Thank you for your contributions! diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml index 76930e6c0..c29c0770f 100644 --- a/.github/workflows/sync-labels.yml +++ b/.github/workflows/sync-labels.yml @@ -4,12 +4,12 @@ name: Sync labels on: workflow_dispatch: - # push: - # branches: - # - main - # - next - # paths: - # - .github/labels.yml + push: + branches: + - main + - next + paths: + - .github/labels.yml jobs: labels: @@ -22,7 +22,7 @@ jobs: steps: - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.2.1 - name: 🚀 Run Label Syncer uses: micnncim/action-label-syncer@v1.3.0 diff --git a/.gitignore b/.gitignore index 5f28a2e2f..8da54f49c 100644 --- a/.gitignore +++ b/.gitignore @@ -13,32 +13,29 @@ Desktop.ini # Logs *.log* +# package managers +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions +#!.yarn/cache +.pnp.* +node_modules +package-lock.json + # Build -.tsbuildinfo +dist +*.tsbuildinfo *.map *.d.ts -*.js -!*.config.js -!**/res/*.js -dist -build - -# Dependencies -node_modules -package-lock.json # Output of 'npm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # dotenv environment variables file .env -# *.env -# !example.env -temp -_data -db -chrome-profile +# deploy data backup +deploy/_data diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..c4ddcb959 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +.yarn +CHANGELOG.md +deploy/_data +.pnp.* +dist diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 6fd3ed293..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "singleQuote": true, - "bracketSpacing": false, - "plugins": ["prettier-plugin-tailwindcss"] -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 7becb2597..614a7c512 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,20 +1,26 @@ { "recommendations": [ + "arcanis.vscode-zipfs", + "bbugh.change-color-format", + "bradlc.vscode-tailwindcss", + "cardinal90.multi-cursor-case-preserve", "christian-kohler.path-intellisense", + "csstools.postcss", "davidanson.vscode-markdownlint", "dbaeumer.vscode-eslint", + "redhat.vscode-xml", "editorconfig.editorconfig", "esbenp.prettier-vscode", + "foxundermoon.shell-format", + "ginfuru.better-nunjucks", + "guapibai.nunjucks-prettier", "humao.rest-client", "irongeek.vscode-env", "jgclark.vscode-todo-highlight", - "redhat.vscode-yaml", - "runem.lit-plugin", - "william-voyek.vscode-nginx", "streetsidesoftware.code-spell-checker-persian", "streetsidesoftware.code-spell-checker", "stylelint.vscode-stylelint", - "csstools.postcss", - "bradlc.vscode-tailwindcss" + "yzhang.markdown-all-in-one", + "runem.lit-plugin" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 69ee44836..88dab7852 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,66 +1,82 @@ { - "eslint.packageManager": "yarn", - "npm.packageManager": "yarn", - "lit-plugin.strict": true, - "editor.wordWrapColumn": 120, - "editor.formatOnPaste": false, - "editor.formatOnSave": false, + "cSpell.language": "en,fa,fa-IR", "editor.codeActionsOnSave": { - "source.fixAll": true + "source.fixAll": "explicit" }, + "js/ts.implicitProjectConfig.checkJs": true, "editor.defaultFormatter": "esbenp.prettier-vscode", - "prettier.useEditorConfig": true, + "editor.formatOnPaste": false, + "editor.formatOnSave": false, + "editor.wordWrapColumn": 120, + "eslint.nodePath": ".yarn/sdks", + "explorer.fileNesting.enabled": true, + "explorer.fileNesting.expand": false, + "explorer.fileNesting.patterns": { + "*.js": "${capture}.js.map, ${capture}.min.js, ${capture}.d.ts, ${capture}.d.ts.map, ${capture}.js.LEGAL.txt", + "*.mjs": "${capture}.mjs.map, ${capture}.min.mjs, ${capture}.d.ts, ${capture}.d.ts.map, ${capture}.mjs.LEGAL.txt, ${capture}.cjs", + "*.cjs": "${capture}.cjs.map, ${capture}.min.cjs, ${capture}.d.ts, ${capture}.d.ts.map, ${capture}.cjs.LEGAL.txt", + "*.ts": "${capture}.js, ${capture}.js.map, ${capture}.d.ts, ${capture}.d.ts.map", + "tsconfig.json": "tsconfig.*.json, *.tsbuildinfo" + }, + "files.associations": { + "*.ajs": "json", + "*.ajs.bk": "json", + "*.conf.template": "nginx", + "*.njk": "html" + }, "files.exclude": { - "**/*.map": true, - "**/*.d.ts": true, - "**/*.tsbuildinfo": true + // "**/*.map": true, + // "**/*.d.ts": true, + // "**/*.tsbuildinfo": true }, - "cSpell.language": "en,fa,fa-IR", + "git.autoStash": true, + "git.branchProtection": [ + "main", + "next" + ], + "githubPullRequests.ignoredPullRequestBranches": [ + "main", + "next" + ], + "markdownlint.ignore": [ + "**/CHANGELOG.md" + ], + "npm.packageManager": "yarn", + "prettier.prettierPath": ".yarn/sdks/prettier/index.cjs", + "prettier.useEditorConfig": true, + "search.exclude": { + "**/.pnp.*": true, + "**/.yarn": true, + "**/*.lock": true + }, + "typescript.enablePromptUseWorkspaceTsdk": true, + "typescript.tsdk": ".yarn/sdks/typescript/lib", "cSpell.words": [ - "alimd", + "alpinejs", "alwatr", - "bottomness", - "calt", - "chatbox", - "checkmark", - "cssprop", - "currentcolor", - "datetime", - "Disconnectable", - "esbuild", - "Fatemeh", - "Fract", - "kubernetes", - "mastmalize", - "metafile", - "mihandoost", - "nanoserver", - "nanoservice", - "noncallable", - "outbase", - "outdir", - "preconnect", - "preload", - "publistore", - "requestable", - "roundot", - "securage", - "Stringifyable", - "Superfast", + "colspan", + "cssnano", + "fract", + "Mihandoost", + "nanolib", + "nanotron", + "nitrobase", + "nowrap", + "shortcode", + "stringifyable", "tailwindcss", - "tnum", - "topness", + "tbody", + "thead", "tsbuildinfo", - "typescale", "vazirmatn", - "videocam", - "xlarge", - "xsmall", - "zindex" + "windstyle" ], - "typescript.tsdk": "node_modules/typescript/lib", - "githubPullRequests.ignoredPullRequestBranches": [ - "main", - "next" + "css.customData": [ + ".vscode/tailwind.json" + ], + "github.copilot.chat.experimental.codeGeneration.instructions": [ + { + "file": ".github/copilot-instruction.md" + } ] } diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json new file mode 100644 index 000000000..96a1f5797 --- /dev/null +++ b/.vscode/tailwind.json @@ -0,0 +1,55 @@ +{ + "version": 1.1, + "atDirectives": [ + { + "name": "@tailwind", + "description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#tailwind" + } + ] + }, + { + "name": "@apply", + "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that you’d like to extract to a new component.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#apply" + } + ] + }, + { + "name": "@responsive", + "description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#responsive" + } + ] + }, + { + "name": "@screen", + "description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\n…gets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#screen" + } + ] + }, + { + "name": "@variants", + "description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#variants" + } + ] + } + ] +} diff --git a/.yarn/sdks/eslint/bin/eslint.js b/.yarn/sdks/eslint/bin/eslint.js new file mode 100755 index 000000000..e6604ff59 --- /dev/null +++ b/.yarn/sdks/eslint/bin/eslint.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/bin/eslint.js + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real eslint/bin/eslint.js your application uses +module.exports = wrapWithUserWrapper(absRequire(`eslint/bin/eslint.js`)); diff --git a/.yarn/sdks/eslint/lib/api.js b/.yarn/sdks/eslint/lib/api.js new file mode 100644 index 000000000..8addf97fb --- /dev/null +++ b/.yarn/sdks/eslint/lib/api.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real eslint your application uses +module.exports = wrapWithUserWrapper(absRequire(`eslint`)); diff --git a/.yarn/sdks/eslint/lib/unsupported-api.js b/.yarn/sdks/eslint/lib/unsupported-api.js new file mode 100644 index 000000000..c2b464ce6 --- /dev/null +++ b/.yarn/sdks/eslint/lib/unsupported-api.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/use-at-your-own-risk + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real eslint/use-at-your-own-risk your application uses +module.exports = wrapWithUserWrapper(absRequire(`eslint/use-at-your-own-risk`)); diff --git a/.yarn/sdks/eslint/package.json b/.yarn/sdks/eslint/package.json new file mode 100644 index 000000000..4110fb08c --- /dev/null +++ b/.yarn/sdks/eslint/package.json @@ -0,0 +1,14 @@ +{ + "name": "eslint", + "version": "8.57.1-sdk", + "main": "./lib/api.js", + "type": "commonjs", + "bin": { + "eslint": "./bin/eslint.js" + }, + "exports": { + "./package.json": "./package.json", + ".": "./lib/api.js", + "./use-at-your-own-risk": "./lib/unsupported-api.js" + } +} diff --git a/.yarn/sdks/integrations.yml b/.yarn/sdks/integrations.yml new file mode 100644 index 000000000..aa9d0d0ad --- /dev/null +++ b/.yarn/sdks/integrations.yml @@ -0,0 +1,5 @@ +# This file is automatically generated by @yarnpkg/sdks. +# Manual changes might be lost! + +integrations: + - vscode diff --git a/.yarn/sdks/prettier/bin/prettier.cjs b/.yarn/sdks/prettier/bin/prettier.cjs new file mode 100755 index 000000000..9a4098f7d --- /dev/null +++ b/.yarn/sdks/prettier/bin/prettier.cjs @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/bin/prettier.cjs + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real prettier/bin/prettier.cjs your application uses +module.exports = wrapWithUserWrapper(absRequire(`prettier/bin/prettier.cjs`)); diff --git a/.yarn/sdks/prettier/index.cjs b/.yarn/sdks/prettier/index.cjs new file mode 100644 index 000000000..57cb2ab17 --- /dev/null +++ b/.yarn/sdks/prettier/index.cjs @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real prettier your application uses +module.exports = wrapWithUserWrapper(absRequire(`prettier`)); diff --git a/.yarn/sdks/prettier/package.json b/.yarn/sdks/prettier/package.json new file mode 100644 index 000000000..cf1b58d43 --- /dev/null +++ b/.yarn/sdks/prettier/package.json @@ -0,0 +1,7 @@ +{ + "name": "prettier", + "version": "3.3.3-sdk", + "main": "./index.cjs", + "type": "commonjs", + "bin": "./bin/prettier.cjs" +} diff --git a/.yarn/sdks/typescript/bin/tsc b/.yarn/sdks/typescript/bin/tsc new file mode 100755 index 000000000..867a7bdfe --- /dev/null +++ b/.yarn/sdks/typescript/bin/tsc @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsc + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real typescript/bin/tsc your application uses +module.exports = wrapWithUserWrapper(absRequire(`typescript/bin/tsc`)); diff --git a/.yarn/sdks/typescript/bin/tsserver b/.yarn/sdks/typescript/bin/tsserver new file mode 100755 index 000000000..3fc5aa31c --- /dev/null +++ b/.yarn/sdks/typescript/bin/tsserver @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsserver + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real typescript/bin/tsserver your application uses +module.exports = wrapWithUserWrapper(absRequire(`typescript/bin/tsserver`)); diff --git a/.yarn/sdks/typescript/lib/tsc.js b/.yarn/sdks/typescript/lib/tsc.js new file mode 100644 index 000000000..da411bdba --- /dev/null +++ b/.yarn/sdks/typescript/lib/tsc.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsc.js + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real typescript/lib/tsc.js your application uses +module.exports = wrapWithUserWrapper(absRequire(`typescript/lib/tsc.js`)); diff --git a/.yarn/sdks/typescript/lib/tsserver.js b/.yarn/sdks/typescript/lib/tsserver.js new file mode 100644 index 000000000..6249c4675 --- /dev/null +++ b/.yarn/sdks/typescript/lib/tsserver.js @@ -0,0 +1,248 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserver.js + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +const moduleWrapper = exports => { + return wrapWithUserWrapper(moduleWrapperFn(exports)); +}; + +const moduleWrapperFn = tsserver => { + if (!process.versions.pnp) { + return tsserver; + } + + const {isAbsolute} = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; + + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } + }); + + return tsserver; +}; + +const [major, minor] = absRequire(`typescript/package.json`).version.split(`.`, 2).map(value => parseInt(value, 10)); +// In TypeScript@>=5.5 the tsserver uses the public TypeScript API so that needs to be patched as well. +// Ref https://github.com/microsoft/TypeScript/pull/55326 +if (major > 5 || (major === 5 && minor >= 5)) { + moduleWrapper(absRequire(`typescript`)); +} + +// Defer to the real typescript/lib/tsserver.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`)); diff --git a/.yarn/sdks/typescript/lib/tsserverlibrary.js b/.yarn/sdks/typescript/lib/tsserverlibrary.js new file mode 100644 index 000000000..0e50e0a2b --- /dev/null +++ b/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -0,0 +1,248 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserverlibrary.js + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +const moduleWrapper = exports => { + return wrapWithUserWrapper(moduleWrapperFn(exports)); +}; + +const moduleWrapperFn = tsserver => { + if (!process.versions.pnp) { + return tsserver; + } + + const {isAbsolute} = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; + + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } + }); + + return tsserver; +}; + +const [major, minor] = absRequire(`typescript/package.json`).version.split(`.`, 2).map(value => parseInt(value, 10)); +// In TypeScript@>=5.5 the tsserver uses the public TypeScript API so that needs to be patched as well. +// Ref https://github.com/microsoft/TypeScript/pull/55326 +if (major > 5 || (major === 5 && minor >= 5)) { + moduleWrapper(absRequire(`typescript`)); +} + +// Defer to the real typescript/lib/tsserverlibrary.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`)); diff --git a/.yarn/sdks/typescript/lib/typescript.js b/.yarn/sdks/typescript/lib/typescript.js new file mode 100644 index 000000000..7b6cc2207 --- /dev/null +++ b/.yarn/sdks/typescript/lib/typescript.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); +const absRequire = createRequire(absPnpApiPath); + +const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`); +const isPnpLoaderEnabled = existsSync(absPnpLoaderPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript + require(absPnpApiPath).setup(); + if (isPnpLoaderEnabled && register) { + register(pathToFileURL(absPnpLoaderPath)); + } + } +} + +const wrapWithUserWrapper = existsSync(absUserWrapperPath) + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; + +// Defer to the real typescript your application uses +module.exports = wrapWithUserWrapper(absRequire(`typescript`)); diff --git a/.yarn/sdks/typescript/package.json b/.yarn/sdks/typescript/package.json new file mode 100644 index 000000000..a9c9401bc --- /dev/null +++ b/.yarn/sdks/typescript/package.json @@ -0,0 +1,10 @@ +{ + "name": "typescript", + "version": "5.6.3-sdk", + "main": "./lib/typescript.js", + "type": "commonjs", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + } +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..20d299a3b --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,5 @@ +checksumBehavior: reset + +enableTelemetry: false + +preferInteractive: true diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 3def1f06f..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,2669 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/monorepo - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **cloud:** last deploys issues ([f803903](https://github.com/AliMD/alwatr/commit/f8039030b468b92dd5f903f5c153209eadc70f6f)) -- **com-api:** default storage token in config ([67259e4](https://github.com/AliMD/alwatr/commit/67259e40d42a504bb72a0396dbf674ef2bafafdf)) -- **com-api:** rollback config ([4e936d6](https://github.com/AliMD/alwatr/commit/4e936d69696ef3778cc3337cb5faaec8215e4e4a)) -- **com-api:** user-list-inc-order permission ([91beb27](https://github.com/AliMD/alwatr/commit/91beb27cbe372e6b66c99928e26fa4679b751c23)) -- **com-pwa/admin-order-list:** show admin in user list ([343b7e8](https://github.com/AliMD/alwatr/commit/343b7e8c7aa4fa363537df34bb72ee69a5eca739)) -- **com-pwa/admin-order:** load userListIncOrderStorageContextConsumer ([002e6b5](https://github.com/AliMD/alwatr/commit/002e6b58f08f9aa69eece179499994a9c60c6569)) -- **com-pwa/admin-order:** use backToAdminOrderList page ([82e4c78](https://github.com/AliMD/alwatr/commit/82e4c787dd36913671f5e3cab578d3be3f2e6169)) -- **com-pwa:** 404 page text ([9bc2f23](https://github.com/AliMD/alwatr/commit/9bc2f23f40c0bd88a9d20e26a345df401c987f17)) -- **com-pwa:** add `a` link ([bd431bf](https://github.com/AliMD/alwatr/commit/bd431bff66ce51081bbbb41ac52e7f3948ea9a41)) -- **com-pwa:** admin sort ([f4050a3](https://github.com/AliMD/alwatr/commit/f4050a3c37480a9e78f3e332bc7f4d27956b653e)) -- **com-pwa:** back to `admin-order-list` & add the missing `this` param ([23bb08f](https://github.com/AliMD/alwatr/commit/23bb08f70c34657acd64b62a448bd9144ffe0606)) -- **com-pwa:** remove extra import ([c562cda](https://github.com/AliMD/alwatr/commit/c562cda67e664ffca1fb180ec69c68eff50198c3)) -- **com-pwa:** rename the page ([0b454fe](https://github.com/AliMD/alwatr/commit/0b454fe781f78d352b0e3aac4083634f8036cbd8)) -- **com-pwa:** set receivePrevious to no for button ([b046740](https://github.com/AliMD/alwatr/commit/b046740bd86ddba9a4d8fa3a9c7f3d67c885d6ca)) -- **com-pwa:** set receivePrevious: 'No' for button ([3398aae](https://github.com/AliMD/alwatr/commit/3398aaefcf7200deb46b0b7cb282998dd3fe1c44)) -- **com-pwa:** user-inc-order-box tag name ([0bbb9ba](https://github.com/AliMD/alwatr/commit/0bbb9ba7123bafb5f71f0fe45e6e91c51dbdd69b)) -- **demo/finite-state-machine2:** update based on its module ([46ee950](https://github.com/AliMD/alwatr/commit/46ee9508c72ba575fd593dcf4ae98ae8f7555c52)) -- **demo/signal2:** add `event` demo & sort folders ([20d6c31](https://github.com/AliMD/alwatr/commit/20d6c314dc624f657ad191c740fb7a422ee1a79b)) -- **demo/signal2:** use new classes ([07083d1](https://github.com/AliMD/alwatr/commit/07083d130d736bbef7c0c2afd84c95e99acd8d50)) -- **demo:** use `AlwatrApiRequest` ([5092c95](https://github.com/AliMD/alwatr/commit/5092c9505ea433c7918fd3925439a085c489d4fa)) -- **es-bench:** bench calc issue ([ef9a6e1](https://github.com/AliMD/alwatr/commit/ef9a6e15490e272e7ebdba23782c607bad2ee13a)) -- **fsm2:** add `name` to `config` & remove `context` ([593fde4](https://github.com/AliMD/alwatr/commit/593fde418de223a2b942d7a63a665b9074939b24)) -- **fsm2:** convert `config` to an object ([42a34cb](https://github.com/AliMD/alwatr/commit/42a34cb3c26db823e1e6b51ae497a43ed24ab8c2)) -- **fsm2:** types ([8543edf](https://github.com/AliMD/alwatr/commit/8543edfe3688b2ccf207de136d29f272d7e1ab44)) -- **fsm:** make it private ([70b9644](https://github.com/AliMD/alwatr/commit/70b96441f205a3e287928997ca427e1851dfebf8)) -- **i18n2:** return '' if key not exists ([2e68d1a](https://github.com/AliMD/alwatr/commit/2e68d1a082fb837b04fc8fe450626b507b0f2463)) -- **i18n2:** return loadingStr if resource not eixsts ([aff42e1](https://github.com/AliMD/alwatr/commit/aff42e18ddc61949f20cf13475520658ac1a5eb1)) -- **i18n2:** some issues & export an instacne ([b5874f3](https://github.com/AliMD/alwatr/commit/b5874f35051927815070a00e86c585f0e3dd291e)) -- **keep-pwa:** add media print to style ([6b96004](https://github.com/AliMD/alwatr/commit/6b96004319c40e3473ead569dd2801494ec92f75)) -- **keep-pwa:** cdn url ([9e4f2e3](https://github.com/AliMD/alwatr/commit/9e4f2e34fa1041b276494ef928fc78aa5fa1f42d)) -- **keep-pwa:** color ([85c82c3](https://github.com/AliMD/alwatr/commit/85c82c3e83df29000645fcdfcb2a921b2ea525b5)) -- **keep-pwa:** home page content type ([817345f](https://github.com/AliMD/alwatr/commit/817345fd8e5317508083171db945900ff641fe47)) -- **keep-pwa:** i18n key ([22e5130](https://github.com/AliMD/alwatr/commit/22e5130a08e747592163c7ca1702e6d1cc49ae87)) -- **keep-pwa:** pwa name, description on html and manifest ([54686a2](https://github.com/AliMD/alwatr/commit/54686a270ae741db0654712453df885d2334bae9)) -- **keep-pwa:** review issue ([097125b](https://github.com/AliMD/alwatr/commit/097125b3cb25747b497dc69c9af59e5e7138d3c8)) -- **keep-pwa:** select product price ([8bdfea9](https://github.com/AliMD/alwatr/commit/8bdfea96e8279cdabd0f5f375ffa22222446e903)) -- **keep-pwa:** use LocalizeMixin for app-footer ([72a8afe](https://github.com/AliMD/alwatr/commit/72a8afe4df7bc8a3716953eba62fd9751dd1d3ca)) -- **keep:** color palette ([3cc5566](https://github.com/AliMD/alwatr/commit/3cc5566ffdd849fe930eb85b5be05bf0e75771af)) -- **keep:** config.js ([e8f8d7e](https://github.com/AliMD/alwatr/commit/e8f8d7edb0e7ffd1adb41d5ff8a6131ceb0e99a5)) -- **keep:** import issue ([9bc4984](https://github.com/AliMD/alwatr/commit/9bc4984e36827582b2785254478cc2f1aed8cca4)) -- **keep:** packages.json ([ac5bb5e](https://github.com/AliMD/alwatr/commit/ac5bb5e2ed3051e5fd0c12d725c0bee502f094a5)) -- **keep:** product image ([e437db0](https://github.com/AliMD/alwatr/commit/e437db0dcb9966d9975711c88dc572b0921dbf25)) -- **keep:** remove buttons file ([6c67558](https://github.com/AliMD/alwatr/commit/6c675583ebc3fabb3753a29e70486bf933d6393b)) -- **lerna:** version behavior ([c921bc7](https://github.com/AliMD/alwatr/commit/c921bc745d86e5e5fb3cefc1509d8d8150a5be99)) -- **pwa:** build clean flag ([ca324ef](https://github.com/AliMD/alwatr/commit/ca324ef4270e43b2dc4e51574e01aad77ae4abf8)) -- **server-context:** add `_request` & `_actionRecord` ([5037fec](https://github.com/AliMD/alwatr/commit/5037fecf68fc59727c7d66afdc2accce4d78f107)) -- **server-context:** arg of `request` in `AlwatrApiRequest` ([d1835eb](https://github.com/AliMD/alwatr/commit/d1835eba2ac024d297b439721a57515eca798f32)) -- **server-context:** export `api-request` ([b91fe96](https://github.com/AliMD/alwatr/commit/b91fe964a14e75aa0d544437e6aa4de1e990272d)) -- **server-context:** review and fix runtime issues ([e2f6814](https://github.com/AliMD/alwatr/commit/e2f6814a0ad8d2da8f2b76a9c10706234364c3c9)) -- **server-context:** tsconfig ([b200a21](https://github.com/AliMD/alwatr/commit/b200a2171fe68f04e7dd839c1746160281ff847b)) -- **server-request:** review and enhance ([ae3b530](https://github.com/AliMD/alwatr/commit/ae3b5301da7a0de76ed1eafbeca62fa34695892f)) -- **signal2:** build issue ([5bd3894](https://github.com/AliMD/alwatr/commit/5bd3894e6187c63b70e7108953d388197e016ae7)) -- **signal2:** export `base` ([562e887](https://github.com/AliMD/alwatr/commit/562e887ed45422c266a14a8735ba1c77623a8bfa)) -- **signal2:** index.ts ([c9c51e2](https://github.com/AliMD/alwatr/commit/c9c51e2f29413a2e1e448ab108b8618e937455f0)) -- **signal2:** root exports and reg alwatr module ([19a2124](https://github.com/AliMD/alwatr/commit/19a21249c308efea330d6bcc46989173f7a312c2)) -- **signal:** AlwatrMultithreadContextSignal issue ([0a69993](https://github.com/AliMD/alwatr/commit/0a69993b311f6d707361d8b86f66952a26c50f0b)) -- **storage-server/link:** make dest folder if not exist ([b71acb4](https://github.com/AliMD/alwatr/commit/b71acb40e1ac07668a825703253b5c205f106bb4)) -- **storage-server:** remove json extension ([8d70704](https://github.com/AliMD/alwatr/commit/8d707046aeb35e4ebcfc0ea0e257ea29653fad34)) -- **storage-server:** rollback json extension as correct way ([47e6bc2](https://github.com/AliMD/alwatr/commit/47e6bc22076fd4835a1604370318792985472233)) -- **type/photo:** make meta optional ([5cea716](https://github.com/AliMD/alwatr/commit/5cea716d77bfe4db57c8f25307c4ee18862bb716)) -- **util/fs:** makeLinkForce throw error ([8bfcc80](https://github.com/AliMD/alwatr/commit/8bfcc80b11ad59538478440fe6e88cc9ee12df77)) -- **workflow:** mariadb full version ([87a3418](https://github.com/AliMD/alwatr/commit/87a3418d1e1cbd3f644b02253b84b9644bdc484a)) -- **workflows:** build ([cafab33](https://github.com/AliMD/alwatr/commit/cafab335d98c8ed018afad39068fed755eba2229)) -- **workflows:** build job name ([f8fd30b](https://github.com/AliMD/alwatr/commit/f8fd30bff97c3398eb5873e3516d8eaa763e0045)) -- **workflows:** dep review ([84f07f3](https://github.com/AliMD/alwatr/commit/84f07f3f016229076e28c5398f3c4ec999a3770e)) -- **workflows:** node version ([be2a5e3](https://github.com/AliMD/alwatr/commit/be2a5e36b9080242a34269c0e05448260c9797b5)) -- **wp:** limit memory ([72bd252](https://github.com/AliMD/alwatr/commit/72bd252a243396f31138bcd8ff798354251946bc)) -- **yarn:** conflict ([e86c96f](https://github.com/AliMD/alwatr/commit/e86c96f269e7eac3b80130cd77a2c3fc1149b692)) - -### Features - -- add chrome-profile to gitignore ([d936ab9](https://github.com/AliMD/alwatr/commit/d936ab9009c425e64fdecaf2bcb73ae92ef5f3e0)) -- **api-request:** base on server-request ([8cfd0d9](https://github.com/AliMD/alwatr/commit/8cfd0d971e9b06c3859db3bdaac3afb43ed996ab)) -- **cloud/container:** clone adminer image o ghcr ([bc79266](https://github.com/AliMD/alwatr/commit/bc79266b853d94b71d937a5b76f6b3503c0de8c7)) -- **cloud/container:** clone mariadb image to ghcr ([e420d8d](https://github.com/AliMD/alwatr/commit/e420d8d017ca861f85122a6616eae86cbb6af093)) -- **cloud/container:** clone traefik image o ghcr ([b37f64d](https://github.com/AliMD/alwatr/commit/b37f64da6fea2b247bf6c7fac8b9d17a2d4b9c49)) -- **cloud/keep:** add cdn ([6bbc2ec](https://github.com/AliMD/alwatr/commit/6bbc2ec39e78a526d3483a60c3c5deacc5844c58)) -- **cloud/keep:** add form-registration ([25d7ef5](https://github.com/AliMD/alwatr/commit/25d7ef545a3908a0018dae489a127ec34a12f53f)) -- **cloud/keep:** api access token ([cbdda1e](https://github.com/AliMD/alwatr/commit/cbdda1e234e7d195cf3ded0df8b124938f8ea555)) -- **cloud:** comment ALWATR_DEBUG ([a5119da](https://github.com/AliMD/alwatr/commit/a5119da0a6db8076714ee82472e65f5d57236932)) -- **cloud:** nocodb ([c40992a](https://github.com/AliMD/alwatr/commit/c40992ae0e7633f2ae0140ea48917386c179b709)) -- **cloud:** update manage script based deploy ([318734a](https://github.com/AliMD/alwatr/commit/318734a80c57774902781f2a3dbcd9cd12a1146f)) -- **com-api:** admin user-list-inc-order route ([852d7cc](https://github.com/AliMD/alwatr/commit/852d7ccf4278adda574db211ed5ae0baa632e28a)) -- **com-pwa/admin-order-list:** reload button ([b967be3](https://github.com/AliMD/alwatr/commit/b967be3cd66b2cadad12307d574441d2a90f1072)) -- **com-pwa/admin-order:** retry button ([b4c06d7](https://github.com/AliMD/alwatr/commit/b4c06d7b880c57fb2fe2ffe9cbe76ab57fc6ac80)) -- **com-pwa/user-info-box:** improve style ([268803e](https://github.com/AliMD/alwatr/commit/268803ebaf36041c4d4dae1b5fac0ae03a0f8858)) -- **com-pwa:** add `admin-order` page ([ccd340f](https://github.com/AliMD/alwatr/commit/ccd340fdffc8675ed9995ba9391abf14ccbd84ea)) -- **com-pwa:** add `admin-order` route ([7bb5ade](https://github.com/AliMD/alwatr/commit/7bb5adea863fec4170877f096a1da4519b853c36)) -- **com-pwa:** admin sort ([9c5d8cd](https://github.com/AliMD/alwatr/commit/9c5d8cd67e9b0f79509a24e3339004d019f3d57d)) -- **com-pwa:** admin-order-list page ([f8d7249](https://github.com/AliMD/alwatr/commit/f8d72494e11276ed74296313c391bf925ab4c55b)) -- **com-pwa:** bold text for count ([3da1259](https://github.com/AliMD/alwatr/commit/3da12595307a1cad8d58e43fb3af3adf1602a9de)) -- **com-pwa:** improve admin-order-list page ([6633d36](https://github.com/AliMD/alwatr/commit/6633d36197d1d796a633860fc7a2d9f5fd8d1139)) -- **com-pwa:** set redirect on profile icon for admin ([6c668cc](https://github.com/AliMD/alwatr/commit/6c668cc5abd832cc9cdf91b5e5e3209986fd07ae)) -- **com-pwa:** user-info-box ([2805908](https://github.com/AliMD/alwatr/commit/28059087a5aa58699e9ac227f2db0b1f03c2077a)) -- **demo/fsm2:** rewrite with abstract for base class ([71e8f27](https://github.com/AliMD/alwatr/commit/71e8f27d0391f1500f2054b33fb5b77a6d5a82d2)) -- **demo/i18n:** relativeTime ([bc52a19](https://github.com/AliMD/alwatr/commit/bc52a19b86fb859dc480c0ef3bd0cfc2698a4d01)) -- **demo/i18n:** test loading ([71edb52](https://github.com/AliMD/alwatr/commit/71edb529826954638e7fabef43b975c2dc7fad32)) -- **demo/signal2:** add context example ([36dd28d](https://github.com/AliMD/alwatr/commit/36dd28d59eb491f08bfdb356dd2be2feba244cc5)) -- **demo/signal2:** add demo ([ddf083e](https://github.com/AliMD/alwatr/commit/ddf083ebac677361c0d72084f96a3f63eeaba5ef)) -- **demo/signal2:** simple signal ([9312b65](https://github.com/AliMD/alwatr/commit/9312b65868c8add8a336b0e800519d05d1f003b3)) -- **demo:** add `i18n` ([aa5e83e](https://github.com/AliMD/alwatr/commit/aa5e83eece3e4564770470cd0cd3d3ed056b3fb9)) -- **demo:** add `server-context` demo ([d4c60e3](https://github.com/AliMD/alwatr/commit/d4c60e38f3ed03d9e488f3e7fbbf1a921e8fc7a5)) -- **demo:** new `fsm` ([c5a725a](https://github.com/AliMD/alwatr/commit/c5a725a5c2769ba8a7cd6268104457ca41bbcc62)) -- **es-bench:** compare bench ([805d9b2](https://github.com/AliMD/alwatr/commit/805d9b2e71c4d4170ebecefe6d58d3adf616366f)) -- **es-bench:** worker ([528fea6](https://github.com/AliMD/alwatr/commit/528fea61fbf7c49346b3bea26d466b150a180692)) -- **fsm2:** base class ([db13f5c](https://github.com/AliMD/alwatr/commit/db13f5c95524b16dc0dc003096f555988d5ef379)) -- **fsm2:** review and cleanup ([6349f33](https://github.com/AliMD/alwatr/commit/6349f3338beccdca4b2a29adc3dc3feef8888492)) -- **fsm2:** rewrite from scratch. ([5b7a6cf](https://github.com/AliMD/alwatr/commit/5b7a6cfd41eae2b73f1469a80ecc24d7063e58c3)) -- **fsm2:** simple FiniteStateMachine and base ([30c7ba0](https://github.com/AliMD/alwatr/commit/30c7ba0f78f1df97de0d411c4707c1f1ed8b4d16)) -- **fsm2:** StateRecord conf ([e193097](https://github.com/AliMD/alwatr/commit/e193097cd98cb636c4379c8e07ce4e4cd4cfc75c)) -- **fsm2:** update demo ([206f2ed](https://github.com/AliMD/alwatr/commit/206f2ed9bf7dde8fd0519001a591258ac26ad1d5)) -- **fsm2:** use abstract for base class ([8bdd9a3](https://github.com/AliMD/alwatr/commit/8bdd9a3f9067f4583674498a26fa5572879541d7)) -- **i18n2:** add `i18n2` class base ([4783d6b](https://github.com/AliMD/alwatr/commit/4783d6b7410e452a3458d72dc5ebaead62d08b2f)) -- **keep-pwa:** add product page link to home ([ad86633](https://github.com/AliMD/alwatr/commit/ad8663326f71c53544497ad1182b6e265b911ea1)) -- **keep-pwa:** add svg logo ([fb95f07](https://github.com/AliMD/alwatr/commit/fb95f076ff358f62733d9654c96862718d6c8b7c)) -- **keep-pwa:** change language ([d55ec91](https://github.com/AliMD/alwatr/commit/d55ec912aa6be5a3434998c1b14d4057222cf081)) -- **keep-pwa:** collaboration form ([7f941be](https://github.com/AliMD/alwatr/commit/7f941be801f2860b867e7207575bda03f68faea8)) -- **keep-pwa:** content ([e37cd99](https://github.com/AliMD/alwatr/commit/e37cd9945cac3e4376bcc3de41dc2ecea2a091ff)) -- **keep-pwa:** deploy ([a13dbe8](https://github.com/AliMD/alwatr/commit/a13dbe88a175ff1e9e0022581f144fae50c546cd)) -- **keep-pwa:** home page ([523b329](https://github.com/AliMD/alwatr/commit/523b32949ec0bbec3d824484056dcfdd5d03b608)) -- **keep-pwa:** l18e ([149591d](https://github.com/AliMD/alwatr/commit/149591ded37ef5976fd128e6db615fd12eeb816e)) -- **keep-pwa:** product card ([2c3c41f](https://github.com/AliMD/alwatr/commit/2c3c41f848e608a1d8ed23a07fa11fc21ee0d109)) -- **keep-pwa:** product pgae ([82fe29d](https://github.com/AliMD/alwatr/commit/82fe29de016ce5a1d5ffdff3dc4d4c655e2b71c2)) -- **keep-pwa:** select product ([884e28e](https://github.com/AliMD/alwatr/commit/884e28e5d7684a79f69b7170c10401a179d6ad69)) -- **keep-pwa:** submit-form-command-handler ([6c49126](https://github.com/AliMD/alwatr/commit/6c491265b6b3e0407c2796af9c7173cc6e13f090)) -- **keep-pwa:** token ([88dafd9](https://github.com/AliMD/alwatr/commit/88dafd91817bbf8953c270d495a5cc68e523c294)) -- **keep-pwa:** update config ([e9f78a5](https://github.com/AliMD/alwatr/commit/e9f78a5dd21ec31b70d6f213eb5b4f490f886f17)) -- **keep-pwa:** update config ([1141714](https://github.com/AliMD/alwatr/commit/1141714676fab0b3dd9675d178397c47883a8097)) -- **keep-pwa:** update social media link ([8371e95](https://github.com/AliMD/alwatr/commit/8371e95838c7f41857b502d359ee9b5bdfd6a07a)) -- **keep:** add cdn to config ([6cd497d](https://github.com/AliMD/alwatr/commit/6cd497d845b92d9ff285db8d4d032fee125eda66)) -- **keep:** app footer ([bff053d](https://github.com/AliMD/alwatr/commit/bff053dcbc00f2d5a1d46c9745987d06192e079b)) -- **keep:** base pwa ([4f7e23b](https://github.com/AliMD/alwatr/commit/4f7e23b67fef391b0a842e4b521ef90e0f2ea2cd)) -- **keep:** config ([3f83c78](https://github.com/AliMD/alwatr/commit/3f83c787a5564a7502ea39215ca88d797a49c092)) -- **keep:** manifest icon ([377cca6](https://github.com/AliMD/alwatr/commit/377cca6aa9a236a4fc64a69c8f92e8820c7069fe)) -- **keep:** theme ([7cf958a](https://github.com/AliMD/alwatr/commit/7cf958a9c17aefde8ba52fb24c5db0b7d0243434)) -- **keep:** update home content ([63c830c](https://github.com/AliMD/alwatr/commit/63c830c170f537274c9d3ef3873f6b743645c8f0)) -- **lerna:** migrate to 7 ([12b796f](https://github.com/AliMD/alwatr/commit/12b796fbfc2c1be32bb29fc4ba2fcc1fb9c8991c)) -- **nginx:** config NGINX_OUTPUT_BUFFERS ([577ca80](https://github.com/AliMD/alwatr/commit/577ca8084ab76ac1e2c859cb1d0504177e58b59d)) -- **nginx:** refactor and optimize open_file_cache ([ddaf0a2](https://github.com/AliMD/alwatr/commit/ddaf0a2ad994704757f54ed89ab198ab3dadef74)) -- review and cleanup all workflows ([fff7e92](https://github.com/AliMD/alwatr/commit/fff7e92c5d85a79adcc975802b949a9dc61d2ba3)) -- **server-context:** add new module ([01d843c](https://github.com/AliMD/alwatr/commit/01d843c4fb6a363dedb6c1fa23d8fa5f87b50cef)) -- **signal2/context:** base class ([5ae487a](https://github.com/AliMD/alwatr/commit/5ae487abbd0ae24fa137e095130bfeb176b7b117)) -- **signal2:** add `event` signal class ([7e2db81](https://github.com/AliMD/alwatr/commit/7e2db8119c47e590a48f26695eae639f9548ab00)) -- **signal2:** add multi-thread functionality ([cff2626](https://github.com/AliMD/alwatr/commit/cff26264903aafbc51ff1f11888987d7cc1f459f)) -- **signal2:** AlwatrContext ([56278a2](https://github.com/AliMD/alwatr/commit/56278a2068119e757180c5a32ac289b546c804b6)) -- **signal2:** base package ([10be43a](https://github.com/AliMD/alwatr/commit/10be43ab8972fe158896e9570257e8eb275d767e)) -- **signal2:** external types ([bb19b41](https://github.com/AliMD/alwatr/commit/bb19b4127ec977f549488300c872c9f03ac30f9a)) -- **signal2:** new AlwatrContextSignal extends AlwatrBaseSignal ([9ecdb56](https://github.com/AliMD/alwatr/commit/9ecdb56423a169b6225a8f51228e009158c050f6)) -- **signal2:** new AlwatrEventSignal extends AlwatrBaseSignal ([cedfe31](https://github.com/AliMD/alwatr/commit/cedfe318a5f6d97f8a198c676f520b846d9f70ae)) -- **signal2:** new AlwatrMultithreadContextSignal extends AlwatrBaseSignal ([7320764](https://github.com/AliMD/alwatr/commit/7320764f25d89540fba44826ce64bf1894f2d875)) -- **signal2:** new AlwatrSimpleSignal extends AlwatrBaseSignal ([1e258ba](https://github.com/AliMD/alwatr/commit/1e258bac1a9afc64c7b9eee9f515db2ad69ec1af)) -- **signal2:** new base class for handle all features ([68b62cc](https://github.com/AliMD/alwatr/commit/68b62cce8b41f0067bc09f44097d2fee1cae1327)) -- **signal2:** new context ([966fb63](https://github.com/AliMD/alwatr/commit/966fb6384a378d13692436fcb4a083c9dc778701)) -- **signal2:** update demo ([bd24c35](https://github.com/AliMD/alwatr/commit/bd24c356eee00b79cbf70605cd1b3e9cebdf26bf)) -- **soffit-order:** upgrade to v2 ([ecc840c](https://github.com/AliMD/alwatr/commit/ecc840ca61b6dd43dba067ac2e9d4d7f41466144)) -- **type/com:** ComUserIncOrder ([8ddf5bf](https://github.com/AliMD/alwatr/commit/8ddf5bf0b75b601582751f017f293a26c74b1815)) -- **ui/theme:** 20 palette ([41a86a2](https://github.com/AliMD/alwatr/commit/41a86a24a77aa92799b88b3fec19e28b02b3d917)) -- **util/fs:** existFile option option ([c8c2020](https://github.com/AliMD/alwatr/commit/c8c202097f6a1fb568993f7987977a140dde5273)) -- **util:** add string capitalize ([c499456](https://github.com/AliMD/alwatr/commit/c4994562f75471184d49f46ba3c6d7acdb4ab796)) -- **workflow.publish-alwatr-container:** add keep-pwa ([958b336](https://github.com/AliMD/alwatr/commit/958b336d9375636d7d9f16233e05a8cb5f16aa25)) -- **workflow:** remove njfamirm from reviewer ([794afe9](https://github.com/AliMD/alwatr/commit/794afe9b5c4a04b508f03f0fca089627b1b78e1e)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **cloud/alwatr:** envs ([bec87dc](https://github.com/AliMD/alwatr/commit/bec87dc7ec9ddead90718411027c3aee6e06f91d)) -- **cloud/com-pwa:** remove api storage direct access ([59cb077](https://github.com/AliMD/alwatr/commit/59cb077fbf0b9722d6736d0aa69897b2d53ee745)) -- **cloud/deploy:** rsync symlinks ([2d0af39](https://github.com/AliMD/alwatr/commit/2d0af399291a9d174de5ae6b3a1fb19cd3c50504)) -- **cloud/mashin:** remove dependencies ([5f67d48](https://github.com/AliMD/alwatr/commit/5f67d486b6b824318a6c92752a3a1ae1c0f0b5cc)) -- **cloud/order:** TOKEN_GENERATOR_SECRET ([a09b759](https://github.com/AliMD/alwatr/commit/a09b7595a525c5a513e67d6b71445f086c8d3504)) -- **cloud:** deploys path ([f6751df](https://github.com/AliMD/alwatr/commit/f6751dfbf6327e59f5c280474406353682aee707)) -- **com-api:** `patch-user`route ([d8523ec](https://github.com/AliMD/alwatr/commit/d8523ec469d69ea7eb487ff278a858f7329530a9)) -- **com-api:** build issue ([4e02a3b](https://github.com/AliMD/alwatr/commit/4e02a3beae16eebdada7c9a9b88b2fa1eeb1601b)) -- **com-api:** new `api` side effects ([877534e](https://github.com/AliMD/alwatr/commit/877534e2e685afaf4afa81e63b816b85caba67b9)) -- **com-api:** remove admin/access token ([f56e2c2](https://github.com/AliMD/alwatr/commit/f56e2c2a2c3eb2edefa61135e1bab4c181d1a27b)) -- **com-api:** remove allowAllOrigin ([9f478ad](https://github.com/AliMD/alwatr/commit/9f478adb00808cf213c2a486d6599ee71833c524)) -- **com-api:** TOKEN_SECRET ([ea140cc](https://github.com/AliMD/alwatr/commit/ea140cc3996710cdcb36b962c33751c18b6a1b37)) -- **com-api:** use 'validateUserAuth' to check the user authentication & authorization ([49223f5](https://github.com/AliMD/alwatr/commit/49223f5c642448789b6d7bdc39ec59f9042acba2)) -- **com-api:** use `validateUserAuth` when getting the list of users ([297f71e](https://github.com/AliMD/alwatr/commit/297f71e74ebb4e2fa46221ddf999a0e4a9e0ed0a)) -- **com-api:** user list return data ([163a122](https://github.com/AliMD/alwatr/commit/163a122fe806383a3dc4dd86fd845a7f91c9ae5e)) -- **com-api:** user list return data ([490d7ea](https://github.com/AliMD/alwatr/commit/490d7ea1215120b929fe52919ad90304a985a5a8)) -- **com-api:** user new crypto pre configs and new env names ([244b418](https://github.com/AliMD/alwatr/commit/244b418edc01561f43860eb90aaf111a12dc8a7d)) -- **com-api:** user-list permission ([e622354](https://github.com/AliMD/alwatr/commit/e622354924dd7a8e8dc8ff69bab9bc827aec103d)) -- **com-api:** user-list route ([4cccd35](https://github.com/AliMD/alwatr/commit/4cccd3580f9ada0e4262072dddc483d5c204b170)) -- **com-pwa/user0info-box:** import issues ([1390b6a](https://github.com/AliMD/alwatr/commit/1390b6a097270635e24975aa79cd9b48d8584297)) -- **com-pwa:** `productFinalPriceStorageContextConsumer` ([390ebfb](https://github.com/AliMD/alwatr/commit/390ebfb9890af75c1148264d2778628caa320bc4)) -- **com-pwa:** `url`s based on latest `api` ([a9d95cb](https://github.com/AliMD/alwatr/commit/a9d95cbec0e8fb3caae976de688618bca71d26dc)) -- **com-pwa:** a temporary solution to prevent compile error ([8135e21](https://github.com/AliMD/alwatr/commit/8135e21d20b25fb0385b84aa813404ee70eb7bde)) -- **com-pwa:** add `serverContextConsumer` to get `order`s(not completed) ([2cb5fb0](https://github.com/AliMD/alwatr/commit/2cb5fb0400aba4b8849bb34f06e14a38007a9712)) -- **com-pwa:** fix some issues based on latest `api` changes(not completed) ([1363794](https://github.com/AliMD/alwatr/commit/1363794b0b3e9f7b6db0b82d8d4a9713b63bf204)) -- **com-pwa:** import src ([641159b](https://github.com/AliMD/alwatr/commit/641159b55fbeafbc61923390edab036c4afd1aba)) -- **com-pwa:** order_item_qty_add round to 80 ([3a43034](https://github.com/AliMD/alwatr/commit/3a430340c1f81581f66ca34d263fa97e3e3a40c0)) -- **com-pwa:** pre-load images of products ([698305d](https://github.com/AliMD/alwatr/commit/698305dc28d64ec2b42dcd691ed1312076a3243e)) -- **com-pwa:** remove an incorrect `import` ([82f7bc7](https://github.com/AliMD/alwatr/commit/82f7bc7ac953054a70f1abc1a16e28d1ad8d0500)) -- **com-pwa:** remove extra `url` ([1876166](https://github.com/AliMD/alwatr/commit/1876166bb135dface2873d1ea22be97336ccf504)) -- **com-pwa:** update `config`s based on last `api` changes ([535c08b](https://github.com/AliMD/alwatr/commit/535c08b2945579346d2b740f87efc380ece44167)) -- **com-pwa:** use `userProfileContext` only & fix some `path`s based on latest `api` changes ([1443e83](https://github.com/AliMD/alwatr/commit/1443e83ca58e4a14cddfb9652ad0c14f979f4fad)) -- **com-pwa:** use `userProfileContextConsumer` to update options of some requests ([025507a](https://github.com/AliMD/alwatr/commit/025507a0a5499330067b8c4a72a848c6dc2fae4e)) -- **com-pwa:** use correct config for api ([ea5c463](https://github.com/AliMD/alwatr/commit/ea5c463348345290948b39639225a49d91744fec)) -- **context:** compatible with new storage api ([5251ff0](https://github.com/AliMD/alwatr/commit/5251ff005624720e091cdbc40e6b0142743428cb)) -- **fetch:** serviceRequest type ([44c1086](https://github.com/AliMD/alwatr/commit/44c10866e1c630bc3cf85b3e9be38b268b5b0c31)) -- **fetch:** userAuth in StringifyableFetchOptions ([f554b57](https://github.com/AliMD/alwatr/commit/f554b575584cb1464d48fbe8a8c4006125365853)) -- import util/node ([ca9e995](https://github.com/AliMD/alwatr/commit/ca9e995567ad267c1730e1c98f9dbbd03ab90331)) -- **nano-server:** `data` type ([f629f3b](https://github.com/AliMD/alwatr/commit/f629f3b7952b775ead78119c699ce93c119b8164)) -- **nginx-storage:** content of static files ([1c0c3e0](https://github.com/AliMD/alwatr/commit/1c0c3e0fa4819ca1e70769902aae48572e02dbd7)) -- **nginx-storage:** dockerignore ([cee2a90](https://github.com/AliMD/alwatr/commit/cee2a90bd63ca71432eb95ffd0a916a48c96823d)) -- **nginx-storage:** secure auth paths with token ([36ded21](https://github.com/AliMD/alwatr/commit/36ded21427b9d0e755c829a02f54fa3c32f668e6)) -- **nginx:** serve the content of symbolic links based on the last modified time of the original file ([4c52d03](https://github.com/AliMD/alwatr/commit/4c52d036ea1902f39965576ea5d58ede67890d2d)) -- **soffit-order:** storage path ([eb9909d](https://github.com/AliMD/alwatr/commit/eb9909d721923f131ac9a369547845b22b33bf7c)) -- **storage-client:** `get` return type ([dfe9728](https://github.com/AliMD/alwatr/commit/dfe9728b033d74f25891cab02fc19a153f760896)) -- **storage-client:** remove some extra types ([017b8ed](https://github.com/AliMD/alwatr/commit/017b8ed262cf009a7ce3eeb9c141761d3d32ba81)) -- **storage-server:** link delay issue ([6498852](https://github.com/AliMD/alwatr/commit/6498852e406252b387f7e8ecaea1c9e74501f53d)) -- **storage-server:** return value ([6e31502](https://github.com/AliMD/alwatr/commit/6e3150296af8b0e6f45969686c21fba6c5a98d80)) -- **type/com:** import issue ([2523ed4](https://github.com/AliMD/alwatr/commit/2523ed440a71cf9a2804e519785314cb78ff5b12)) -- **type/com:** orderInfoSchema ([b90d872](https://github.com/AliMD/alwatr/commit/b90d87268429fc802fb9966fd6efd43912bc851a)) -- **type:** `data` type ([0601384](https://github.com/AliMD/alwatr/commit/06013843612fb2400d664a4dd084f70278a5eaa4)) -- **type:** `orderInfoSchema` ([47ca524](https://github.com/AliMD/alwatr/commit/47ca5243f6de3c966c3fb3bd10256134d100e4e9)) -- **wp:** mdpedia-en ([cc72c9e](https://github.com/AliMD/alwatr/commit/cc72c9e02c2b909299a3d41e480ddb9f3f0161a6)) - -### Features - -- **cloud/adminer:** PHP_MAX_EXECUTION_TIME ([6cab079](https://github.com/AliMD/alwatr/commit/6cab07936a1beb1490014c5683f67df9035bbe10)) -- **cloud/md-pedia:** add ar env ([82e3326](https://github.com/AliMD/alwatr/commit/82e3326ab57bc6d7df9143b0a6737830a5612f08)) -- **cloud/wp:** add new sites ([e645327](https://github.com/AliMD/alwatr/commit/e645327ddc2f33d71afcf3678d7adc8541d1cd0e)) -- **cloud:** update alwatr pwa versions ([089206b](https://github.com/AliMD/alwatr/commit/089206b2df105dc0b0ef0d49ba9c7c75c5d3dbee)) -- **cloud:** upgrade mariadb:10.9 ([978011c](https://github.com/AliMD/alwatr/commit/978011c1eaec2c9b0c5c056dfcdbfc41a717c838)) -- **com-api:** `user-list` route ([c2481b7](https://github.com/AliMD/alwatr/commit/c2481b765544c3b3dbbbc4ff5314c35c63fd798d)) -- **com-api:** compatible with nginx-storage 1.6 ([3220f5d](https://github.com/AliMD/alwatr/commit/3220f5d6804119b6457c7aa9c6d9e110a893f138)) -- **com-api:** make root user in first time ([3e15c35](https://github.com/AliMD/alwatr/commit/3e15c3509b59152892d692cf0c8b5b37068460ad)) -- **com-api:** refactor new patch user and admin strategy ([e38c9ae](https://github.com/AliMD/alwatr/commit/e38c9aead8102d66557f3ec4a2960a0459646bab)) -- **com-api:** refactor storage path and auth ([a8e79c5](https://github.com/AliMD/alwatr/commit/a8e79c5b58a6a1f35b1e9f77933b59ef2327c54b)) -- **com-api:** review and refactor type and admin permission ([3689d2b](https://github.com/AliMD/alwatr/commit/3689d2b2cbd31bf39f24e3209c7101f148f9c527)) -- **com-pwa:** `user-list` page(not-completed) ([203d9bb](https://github.com/AliMD/alwatr/commit/203d9bb5a3b26e11e7cf50e1049f4a78c77e7248)) -- **com-pwa:** car count ([d2ea9c1](https://github.com/AliMD/alwatr/commit/d2ea9c12863d214afe5daa7d07997175c19ca859)) -- **com-pwa:** order config ([5de4545](https://github.com/AliMD/alwatr/commit/5de454521012419a7dae9599f4274b98469015aa)) -- **com-pwa:** review and fix issues ([b78d679](https://github.com/AliMD/alwatr/commit/b78d6790836853839e937aa26e71a43b24bb59e0)) -- **com-pwa:** updateOrderCalculate ([4c17096](https://github.com/AliMD/alwatr/commit/4c17096f9fa5c429ccba4895fab29526409a8bc9)) -- **com-pwa:** validateUserAuth root support ([5f7d058](https://github.com/AliMD/alwatr/commit/5f7d05866e0b162d262b08363e33bca6bd6657b0)) -- **crypto:** add some pre config ([4b960c5](https://github.com/AliMD/alwatr/commit/4b960c5cb3f7495c0689adcb65c62a1032ae2650)) -- **es-bench:** enhance with optional count and warning ([0d21ee7](https://github.com/AliMD/alwatr/commit/0d21ee79210cf86b6b94904afdac09d5698c3cec)) -- **es-bench:** test flatStr ([961fe4e](https://github.com/AliMD/alwatr/commit/961fe4edb9bb686cc5da8325726eb19099149173)) -- **flight-crawler:** don't notify if flight not found ([c6b17d5](https://github.com/AliMD/alwatr/commit/c6b17d5f091cd7914cc64ef023eb2923587e6dd6)) -- **nginx-storage:** change NGINX_OPEN_FILE_CACHE ([829cd1d](https://github.com/AliMD/alwatr/commit/829cd1db9c5f62569de9e1740c64befcf79c8e77)) -- **nginx-storage:** fix doc root and 404 and index ([85a1894](https://github.com/AliMD/alwatr/commit/85a18941acc30caefbfdb7c5b96bfe8444f3d547)) -- **nginx-storage:** new strategy for private storage behind auth token ([e27242e](https://github.com/AliMD/alwatr/commit/e27242e8ec1de48dc5e9150d5f08b5b08849bc31)) -- **nginx:** add hub and vault folder ([dabe96b](https://github.com/AliMD/alwatr/commit/dabe96b6a23e5be5dd6e3be6501099f223ea2897)) -- **nginx:** dynamic NGINX_DOCUMENT_ROOT ([478c258](https://github.com/AliMD/alwatr/commit/478c258e51676b4076c0dd930d03877ba1e11bec)) -- **soffit-order:** update beta ([2b65013](https://github.com/AliMD/alwatr/commit/2b65013f3dbdf8b4192742e234f86959f448fb19)) -- **storage-client:** compatibel with new storage server response types ([9b88472](https://github.com/AliMD/alwatr/commit/9b88472ce4f037010c291f5e15b2a480a8439fdf)) -- **storage-server:** nre api response types ([8bb9408](https://github.com/AliMD/alwatr/commit/8bb94085584acf6b6a86b0a9bd82e060ae5b7f33)) -- **traefik:** enhance acme ([64be209](https://github.com/AliMD/alwatr/commit/64be209302a5138e66436462cc55c7e469278a10)) -- **type/com:** rewrite ([1829673](https://github.com/AliMD/alwatr/commit/1829673cf63746d4356aaa3673aefc001b042258)) -- **type/user:** add token! ([de23795](https://github.com/AliMD/alwatr/commit/de237957a7a045c1998cf43b585125027fad5d7d)) -- **type:** add `priceListName` to `ComUser` ([b22555e](https://github.com/AliMD/alwatr/commit/b22555ebe508cc0d732e6af0e1bbf99f99eaca16)) -- **type:** user permissions ([e3d7091](https://github.com/AliMD/alwatr/commit/e3d70916fb7e93f8daf51a8c4aaf856f109b01be)) -- **type:** user permissions ([6bb0aac](https://github.com/AliMD/alwatr/commit/6bb0aacb991e11a930a30dc9071a5de0edf77368)) -- **util:** flatStr ([09462ec](https://github.com/AliMD/alwatr/commit/09462ec88082a2339e633975c346f2fa17997400)) -- **wp:** enhance rate limit ([9d60a95](https://github.com/AliMD/alwatr/commit/9d60a95f7a3d50934469c14025129b7f0537af11)) -- **wp:** new website ([475a7e8](https://github.com/AliMD/alwatr/commit/475a7e89a8e1e38af0630af5f34f94e27e89a1b5)) -- **wp:** update all memory limits ([139c040](https://github.com/AliMD/alwatr/commit/139c040ae64bd3ab22e90ab9df13bb7ee5edb31f)) - -### Performance Improvements - -- **crypto/hash:** enhance crc generator ([ba8c4bc](https://github.com/AliMD/alwatr/commit/ba8c4bcf8f9ec9767b0bd3b6c3fd5c4f503a84dd)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- build issues ([e1060bc](https://github.com/AliMD/alwatr/commit/e1060bccbfe3c775c32b85e9b8eb601e48b2998c)) -- build issues ([d3708e3](https://github.com/AliMD/alwatr/commit/d3708e34330871daea85851b54f37462c6773fc4)) -- **button:** disabled issue ([7f9b457](https://github.com/AliMD/alwatr/commit/7f9b457dabec82636b7fb158206c70f2e150fefd)) -- **cloud-com:** cdn network ([3ac4972](https://github.com/AliMD/alwatr/commit/3ac49723fe393a265fabf1efbce1101826502734)) -- **cloud/classic:** update `env`s ([51905b5](https://github.com/AliMD/alwatr/commit/51905b5422fd57b629aeb7ce1eafa4371d771baa)) -- **cloud/ff:** move to srv1 ([38f1453](https://github.com/AliMD/alwatr/commit/38f145382f08f15d1a3e637dcb70ac59404a8814)) -- **cloud/wp:** mashin-ro ([08d3fb2](https://github.com/AliMD/alwatr/commit/08d3fb2345a8cfafebcfaf51fe12e8ea23a35f38)) -- **cloud:** deploy doc ([9f1b23a](https://github.com/AliMD/alwatr/commit/9f1b23a8d02636b01329ebc392cd8ce7453f0926)) -- **cloud:** exclude deploy backup ([310f7b6](https://github.com/AliMD/alwatr/commit/310f7b64fd04523d4acd874453f5e537137ea21d)) -- **com-api:** build issue ([0fd8e35](https://github.com/AliMD/alwatr/commit/0fd8e35546ebb5f45155286fd89270d2dc07bcb7)) -- **com-api:** import route ([4f6f9e0](https://github.com/AliMD/alwatr/commit/4f6f9e01777ef89db2e0e7b623a17da00154f0fe)) -- **com-api:** remove require token ([08a741e](https://github.com/AliMD/alwatr/commit/08a741ef925cf3d13d788cca33143d3a212bb5d3)) -- **com-api:** set duration for token ([b26f0c4](https://github.com/AliMD/alwatr/commit/b26f0c404130b11f8871bf8b51347b4b3ababeeb)) -- **com-pwa:** \_addSignalListeners ([536e52e](https://github.com/AliMD/alwatr/commit/536e52edb2f10008ba7f10a2af6bce29c97be501)) -- **com-pwa/buttons:** detail label key ([8213869](https://github.com/AliMD/alwatr/commit/8213869b8446fd20f77a6b6264204fa079ff7ea5)) -- **com-pwa/chat-storage:** remove get_chat_storage signal ([2712438](https://github.com/AliMD/alwatr/commit/2712438d7dced33e2eed83164d59cd25d7c50c14)) -- **com-pwa/context-provider:** path ([bfa1086](https://github.com/AliMD/alwatr/commit/bfa1086d613363cb0f53ac7ce347c49c3ae1a6a7)) -- **com-pwa/new-order:** context state listener ([26b81fb](https://github.com/AliMD/alwatr/commit/26b81fb23fe9319d8f5b0dfcea3c222b1c81faf0)) -- **com-pwa/new-order:** debugging ([9027eb0](https://github.com/AliMD/alwatr/commit/9027eb013e6803b1f77dc7cbf4cc14704f49557d)) -- **com-pwa/new-order:** import icon box ([073b913](https://github.com/AliMD/alwatr/commit/073b91358a1fdca88dc635ce7bc9645d828d2f7d)) -- **com-pwa/new-order:** set empty shippingInfo ([d74bfa3](https://github.com/AliMD/alwatr/commit/d74bfa38adfaddbc3d5098b0065c25518c8b0a6b)) -- **com-pwa/new-order:** set gotState ([1c6be87](https://github.com/AliMD/alwatr/commit/1c6be87421ae304b227ec669fb6d87124e2ec451)) -- **com-pwa/new-order:** set select product context property ([4f7f5ac](https://github.com/AliMD/alwatr/commit/4f7f5ac30dab3419acfcb5d5552b93badd03c1f0)) -- **com-pwa/new-order:** set select product context property ([04e9809](https://github.com/AliMD/alwatr/commit/04e9809741ea970e79b71bba0e9403d5c27e65bb)) -- **com-pwa/new-order:** validate ([e76d7ac](https://github.com/AliMD/alwatr/commit/e76d7acd1d7e0119200a44eaaa8718985074829b)) -- **com-pwa/order-detail:** fetch product storage on request update ([28b07ac](https://github.com/AliMD/alwatr/commit/28b07acc0cc14562747da6a6cd6c97ed20ef404a)) -- **com-pwa/order-detail:** import issue ([99f2d01](https://github.com/AliMD/alwatr/commit/99f2d01dde7a8cb915cf910464e7527fdd2d8381)) -- **com-pwa/order-detail:** set order detail on fsm context ([aa68c39](https://github.com/AliMD/alwatr/commit/aa68c39d1ee0534c9e4ae372128c154cf98a7bde)) -- **com-pwa/order-list:** retry button ([831be0c](https://github.com/AliMD/alwatr/commit/831be0cb78b9b5cfed1358f700244c7de55deea9)) -- **com-pwa/order-list:** state machine id ([cc524b8](https://github.com/AliMD/alwatr/commit/cc524b8c6e25abd53ff436e342317d83c5dd7838)) -- **com-pwa/order:** reload button content ([44917d8](https://github.com/AliMD/alwatr/commit/44917d8e296e6096f54805cfba46941e691de22b)) -- **com-pwa/select-product:** zero qty ([9f60692](https://github.com/AliMD/alwatr/commit/9f6069223df5d3c34d9d2cd68ddeb68da02466eb)) -- **com-pwa/sign-in:** add /user to url ([e1ac5e1](https://github.com/AliMD/alwatr/commit/e1ac5e144e9cb84357907d1184cb38438d821dad)) -- **com-pwa/sign-in:** i18n key ([0fec07d](https://github.com/AliMD/alwatr/commit/0fec07d96313413e8f6c3f6ba5486ecb6c8a0822)) -- **com-pwa/sign-in:** loading failed render state ([ce7e862](https://github.com/AliMD/alwatr/commit/ce7e8620e5e4be8ef2fb83cd2ffbbbf0eec9d1ed)) -- **com-pwa/sign-in:** page height ([283df4f](https://github.com/AliMD/alwatr/commit/283df4f87a0585728dcfe77842d2112fea3e0157)) -- **com-pwa/sign-in:** redirect if signed before ([d0ad8b5](https://github.com/AliMD/alwatr/commit/d0ad8b55f580a7fa087c92f33737b304d34d79b1)) -- **com-pwa/sign-in:** styles ([0fc755e](https://github.com/AliMD/alwatr/commit/0fc755efe3b0a2d18767753178bc8d793ba6d38d)) -- **com-pwa/sign-in:** use user token for check login status ([c662f60](https://github.com/AliMD/alwatr/commit/c662f60f65042395dc167a95c28223418a7b8287)) -- **com-pwa/signIn:** import type ([7155847](https://github.com/AliMD/alwatr/commit/7155847bcddf0bd815a63593499e80e2f2cf9223)) -- **com-pwa/signIn:** rename sing to sign ([e00d193](https://github.com/AliMD/alwatr/commit/e00d193b12f83bcd4e994064ebdab8200832ae06)) -- **com-pwa/status-box:** order date ([a9bdb39](https://github.com/AliMD/alwatr/commit/a9bdb39b0a3cd2bcf8ab688acc8fb1b75a6a5c53)) -- **com-pwa/ui:** fix errors base on last changes in `FSM` ([f7f4301](https://github.com/AliMD/alwatr/commit/f7f43016480e7045ec316bef611f0bc01944b4d4)) -- **com-pwa:** `retry` button signal ([51d16bc](https://github.com/AliMD/alwatr/commit/51d16bc5f96d2019f17577320dd89fb3df2b5b08)) -- **com-pwa:** add `/` after `config.cdn` when use ([407739e](https://github.com/AliMD/alwatr/commit/407739e6b2e39df6c8204397327955a61eb922ca)) -- **com-pwa:** button width ([2f80fdb](https://github.com/AliMD/alwatr/commit/2f80fdb5c6da2a053783f071c48bc4ca36f02769)) -- **com-pwa:** cdn address ([0a0ce7d](https://github.com/AliMD/alwatr/commit/0a0ce7da11e24481cef6b8afac049e59f19871fb)) -- **com-pwa:** cleanup ([adabe19](https://github.com/AliMD/alwatr/commit/adabe196882540cbe2c5901a6ac7cc9e33af5ea7)) -- **com-pwa:** color theme ([0f62608](https://github.com/AliMD/alwatr/commit/0f626080b764f79af84c53f2508e6a988340e9f7)) -- **com-pwa:** description item in shippingInfo state ([2c23599](https://github.com/AliMD/alwatr/commit/2c23599e21bd740dc8f5ce565dad5627fcc6a94d)) -- **com-pwa:** display `reloadingFailed` with a correct condition ([c6cf963](https://github.com/AliMD/alwatr/commit/c6cf9637c4f2c0f079336d0d3989303f511b9333)) -- **com-pwa:** final price storage ([9356171](https://github.com/AliMD/alwatr/commit/93561714b726100d3f26dd33d30dac382c17d085)) -- **com-pwa:** fix a text format issue ([e34beff](https://github.com/AliMD/alwatr/commit/e34beff33fc00a1d0bc60136afdcbfe67c7f9d48)) -- **com-pwa:** fix some `lint` issues ([1e9cf7e](https://github.com/AliMD/alwatr/commit/1e9cf7e7b732a2ab580e555589235708ba18a6ab)) -- **com-pwa:** fix some bugs of `sign-in` process ([96890f3](https://github.com/AliMD/alwatr/commit/96890f3e4665da4b3bcf79b836a45ef106322586)) -- **com-pwa:** fix some issues ([c19754d](https://github.com/AliMD/alwatr/commit/c19754d9be66bf3a909a74668c415e997a9a2ab6)) -- **com-pwa:** fix some sections of login(not completed) ([7dd3d3e](https://github.com/AliMD/alwatr/commit/7dd3d3ed0411f0d874cbe7773a0e590b28089990)) -- **com-pwa:** fix the initial value of `qty` ([fe80b99](https://github.com/AliMD/alwatr/commit/fe80b99d23a09f6af3ba1f67d59d7059f4b65f19)) -- **com-pwa:** fix the rendering issue after registering a new order and then go to show its details ([f35593f](https://github.com/AliMD/alwatr/commit/f35593fe1bbdf51549d95407ebe78c92c5c119cf)) -- **com-pwa:** get local storage for token ([554a004](https://github.com/AliMD/alwatr/commit/554a0046ac28ca43ccf79f37f6d101f93b64f7dd)) -- **com-pwa:** handle null created ([118fef1](https://github.com/AliMD/alwatr/commit/118fef1277dc876247d9cc62f9a6a2512ebecd3e)) -- **com-pwa:** import issue ([3fdeaf1](https://github.com/AliMD/alwatr/commit/3fdeaf15d7402898b6733bcb44572b78000fb090)) -- **com-pwa:** import issue ([c733c9d](https://github.com/AliMD/alwatr/commit/c733c9d73d90cbec98c4eb0dc367e5f7229c9162)) -- **com-pwa:** import issue ([a86fc2c](https://github.com/AliMD/alwatr/commit/a86fc2c385a9e8ff113a2f991273e348e5c545c9)) -- **com-pwa:** import price storage context provider ([a8d80d1](https://github.com/AliMD/alwatr/commit/a8d80d1d7b3fb15d490eb7c3ddd1e021973678f6)) -- **com-pwa:** import type ([09abab2](https://github.com/AliMD/alwatr/commit/09abab28f890fb9da791aa29f377753e77dd9cec)) -- **com-pwa:** nullStr on empty string shipping form ([cf3554f](https://github.com/AliMD/alwatr/commit/cf3554fbd49c8d8cad9f0ae308ff195df893d4d8)) -- **com-pwa:** order status box date for new order ([8e5b698](https://github.com/AliMD/alwatr/commit/8e5b69847860af12f2bb6bb8a9fdd1e240918211)) -- **com-pwa:** order_shipping_info_empty_description ([87e99cc](https://github.com/AliMD/alwatr/commit/87e99ccad1647d117c78b634e811f064f0ebda50)) -- **com-pwa:** orderId property ([ea19700](https://github.com/AliMD/alwatr/commit/ea197001e4c653fe4f22d2dcbcaeaf0eabda5110)) -- **com-pwa:** reload button ([dc3fda0](https://github.com/AliMD/alwatr/commit/dc3fda042ec296a91e43e867a1893d3dad160c2f)) -- **com-pwa:** remove style ([85a28ac](https://github.com/AliMD/alwatr/commit/85a28ac5e90d5ab7205713d5b1f9fae1b1d9432f)) -- **com-pwa:** remove token from config ([52e37e7](https://github.com/AliMD/alwatr/commit/52e37e76c423cdd82715f620dcf699495c29c734)) -- **com-pwa:** rename `signInContextConsumer` to `signInServerContext` ([9a809f4](https://github.com/AliMD/alwatr/commit/9a809f4b5dfb499bbc8f9ff6bb7c6a039618a83b)) -- **com-pwa:** review and fix many errors ([98ed4fe](https://github.com/AliMD/alwatr/commit/98ed4feab2a05d4cca950651c7856a6115a56d0a)) -- **com-pwa:** routeId ([1d926e3](https://github.com/AliMD/alwatr/commit/1d926e3223f80869149df00e119f4119be5977b5)) -- **com-pwa:** routeId ([94d12f3](https://github.com/AliMD/alwatr/commit/94d12f3ad8c3b1271db8ff108e6ced4585a189ba)) -- **com-pwa:** set qty ([1714314](https://github.com/AliMD/alwatr/commit/17143143b4cccb0803050717dd67f0cd8baeab02)) -- **com-pwa:** set soffit.co href ([e136417](https://github.com/AliMD/alwatr/commit/e1364170fa4cf35df24c421788f9266c093da5f8)) -- **com-pwa:** show a propely message when there isn't any orders ([bd4245e](https://github.com/AliMD/alwatr/commit/bd4245ef051db37c0a09770f56b00b0c3ec03b62)) -- **com-pwa:** sign-in issue ([52ecf62](https://github.com/AliMD/alwatr/commit/52ecf62809c4a1ffbfa1d698c2972cf2b93bbe93)) -- **com-pwa:** submit validation ([96adccc](https://github.com/AliMD/alwatr/commit/96adccca49289f3248c2c979f21e62d4d50b6b28)) -- **com-pwa:** undefined route on check signed in ([828e788](https://github.com/AliMD/alwatr/commit/828e788d7e866e303bf5a73985690b7db41f0582)) -- **com-pwa:** use service response type for sign in context type ([c6b2ce1](https://github.com/AliMD/alwatr/commit/c6b2ce1baa297eb348f309d99310ed3a7615b6bf)) -- **com-wa:** sings ([85efb75](https://github.com/AliMD/alwatr/commit/85efb7531a62e784ede9a7aeda122614c10ee49f)) -- **com/manger:** fix `signalId` value ([ad83bcb](https://github.com/AliMD/alwatr/commit/ad83bcb2e3f637f4e961f29cc258e5669bef5b0e)) -- **com/select-product:** product path ([fbbd900](https://github.com/AliMD/alwatr/commit/fbbd9007945b1d2c997f621fa44a48fc0bf81c4e)) -- **com/ui:** fix `qtyInputChange` & some other issues ([26aed31](https://github.com/AliMD/alwatr/commit/26aed3152d7d1899aebbefeeedb9bb44ef16a8aa)) -- **com/user:** localStorageSuffixKey ([29eb0c3](https://github.com/AliMD/alwatr/commit/29eb0c3c5c5d672aabd0bcf561b030dafe9291e8)) -- **com:** clean order-list ols controller ([78c6211](https://github.com/AliMD/alwatr/commit/78c6211e57a00b8dd9396c85019f28168585494a)) -- **com:** global `fetchContextOptions` ([9901fa2](https://github.com/AliMD/alwatr/commit/9901fa28e37460202000f23522001324660ce071)) -- **com:** import issue ([589a6f2](https://github.com/AliMD/alwatr/commit/589a6f27b0b328cf0c3b0676c3ccebaf84d80db1)) -- **com:** imports ([3c13f4e](https://github.com/AliMD/alwatr/commit/3c13f4ea45c31ecf70cfc08d53c51790f5859aec)) -- **com:** order status box render ([8942f29](https://github.com/AliMD/alwatr/commit/8942f29aa3e061465453b3dc5d68c0f889f4363b)) -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- **com:** separate `complete` render content ([06a94f1](https://github.com/AliMD/alwatr/commit/06a94f1e0f20d16b95e7c3b6816e6adb070ce138)) -- **container/nginx-pwa:** config js envsubst ([b046826](https://github.com/AliMD/alwatr/commit/b046826f6be9487736484aea6d6d453e1f004ca7)) -- **container/nginx-pwa:** create tmp file and move them ([21742c7](https://github.com/AliMD/alwatr/commit/21742c7221742aacb71bcd0d05cbe6d70329a981)) -- **context:** merge request option issue ([e24e695](https://github.com/AliMD/alwatr/commit/e24e695a8c25ab1dcb1c351a3ae0434e921610d0)) -- **crypto/hash:** params issue ([8a81adb](https://github.com/AliMD/alwatr/commit/8a81adb31a7e9f0baa04864eb1586cdf1fa00aaa)) -- **crypto:** package ([866c5f4](https://github.com/AliMD/alwatr/commit/866c5f490ea2eaa75bf177f35b3f4711931e13d2)) -- **demo/crypto:** `logger`s & `token` ([3a777fb](https://github.com/AliMD/alwatr/commit/3a777fb8c7d4deba682c1a84c472c502604f1d2b)) -- **demo/crypto:** log ([0e12cfd](https://github.com/AliMD/alwatr/commit/0e12cfd5fc97a4099353bc12a32d1db179be4720)) -- **demo/crypto:** revert last demo ([8a350a5](https://github.com/AliMD/alwatr/commit/8a350a5554907329cf2c6efc61ea8fef23a0a548)) -- **demo/crypto:** use all token status ([66ae2b7](https://github.com/AliMD/alwatr/commit/66ae2b7286bd8b422e31296f2c17fc477656ab29)) -- **demo/fsm:** new demo for new fsm ([32fa215](https://github.com/AliMD/alwatr/commit/32fa2155d73be3c1328b4926273176ee47505c39)) -- **demo/icon:** remove preloadIcon in demo ([72fe224](https://github.com/AliMD/alwatr/commit/72fe224aeebe4abd6508d0132e4f1943efbd9123)) -- **demo/storage-engine:** use save ([b21408f](https://github.com/AliMD/alwatr/commit/b21408f430608249bb82c418fcaf08b35f4d166e)) -- **demo/token:** import type ([046403a](https://github.com/AliMD/alwatr/commit/046403ab5e3a01642e9a171e2953f087d35c15c5)) -- **demo:** fix demo based on latest `fsm`s changes ([551e5fe](https://github.com/AliMD/alwatr/commit/551e5fe75fa106bc3252bbbbf108a68bf0dc19e7)) -- **demo:** token ([ad03a19](https://github.com/AliMD/alwatr/commit/ad03a19fc4970c01c39ac1b40e8d933a8d0539a0)) -- **element/fsmc:** all render state must defined ([93f8ea3](https://github.com/AliMD/alwatr/commit/93f8ea31b8fa4f8845871a795eb2de107797f669)) -- **element/fsm:** compatible old mixins ([fe4427e](https://github.com/AliMD/alwatr/commit/fe4427ef62c2fd1680bcb3212feed681add4c2d4)) -- **element:** build issue ([224799c](https://github.com/AliMD/alwatr/commit/224799c5c664bcc11dac8061048c85708b3ba5ef)) -- **element:** check type of `actions` ([f39d617](https://github.com/AliMD/alwatr/commit/f39d617f106e03748d8ed9f539a77f4e810765b5)) -- **element:** remove old fsm mixin ([23efdf2](https://github.com/AliMD/alwatr/commit/23efdf25d2bbb768b70fd65f45f9fed3affcbd15)) -- **es-bench:** logger dev mode ([c2d6cf3](https://github.com/AliMD/alwatr/commit/c2d6cf3753d28cd3c760ab9cd34efa3d3cc50232)) -- **es-bench:** remove `stat` ([9dc52c7](https://github.com/AliMD/alwatr/commit/9dc52c7801cde62d90e962c69635162c416e55ee)) -- **fetch.ts:** compatible with node ([c3acb53](https://github.com/AliMD/alwatr/commit/c3acb53effd4a79e389bc4de1567b0285c03d71d)) -- **fetch:** bodyJson type ([5740467](https://github.com/AliMD/alwatr/commit/57404673e7f031a73d1cf23501e6fa8d89759769)) -- **fetch:** check node_mode before use navigator.online ([a688f48](https://github.com/AliMD/alwatr/commit/a688f48e9ce4b103c25ffd50f1b8c96e89c205d1)) -- **fetch:** serviceRequest generic type ([074ef38](https://github.com/AliMD/alwatr/commit/074ef3876086f93486753559d8e3db0b60c52a0e)) -- **fetch:** suppress fetch_cache_not_found extra error ([c04f609](https://github.com/AliMD/alwatr/commit/c04f60944106dbd8d1bf2fb5ce0e7be644c3abc6)) -- **ff:** cpu_shares ([8b3a86a](https://github.com/AliMD/alwatr/commit/8b3a86ada99b0ef5c1d942001b5527399c34898e)) -- **ff:** stable version ([dbf07de](https://github.com/AliMD/alwatr/commit/dbf07de290eb63e2a070a462b44081f79de5bd6c)) -- **fms:** import path ([f6770a0](https://github.com/AliMD/alwatr/commit/f6770a07fdf6855ccd63a85822d44d5ef9c72dee)) -- **fsm/demo:** signalList ([d53202c](https://github.com/AliMD/alwatr/commit/d53202c7daf3f55682e47e78f9a8a1b8bc70441d)) -- **fsm:** action maybe async ([50efffa](https://github.com/AliMD/alwatr/commit/50efffa34a2ea5a3515561d7425da0c109631f36)) -- **fsm:** autoSignalUnsubscribe type ([f7db30b](https://github.com/AliMD/alwatr/commit/f7db30bf5a90ff3d163f036b313a412a5149ff2b)) -- **fsm:** call render states function in there own this ([a950478](https://github.com/AliMD/alwatr/commit/a95047811366e375785b2cd8fb176b1176638cab)) -- **fsm:** cleanup old ([aa43264](https://github.com/AliMD/alwatr/commit/aa432644d76a0f81ea6e5c3b93da63f998ab159c)) -- **fsm:** fix order of `initFsmInstance` args ([3b60138](https://github.com/AliMD/alwatr/commit/3b60138ecebcbcb4d732e4d1a3e79f5b8661ae47)) -- **fsm:** initial exec actions ([e7dd5c8](https://github.com/AliMD/alwatr/commit/e7dd5c8aaf9760c9856e4392cc899020f7e796d9)) -- **fsm:** last reported bugs in set state ([e7435c8](https://github.com/AliMD/alwatr/commit/e7435c870a054b0ec3e4004f13c6db7610610be0)) -- **fsm:** review reset process ([af6e81c](https://github.com/AliMD/alwatr/commit/af6e81c068b467d8b3aa96f2431e13ac479f018c)) -- **fsm:** run init entry actions ([777ae45](https://github.com/AliMD/alwatr/commit/777ae459f2b77f79696daf3a0ca355d6d78e57d3)) -- **icon-button:** disable bug ([a92fee4](https://github.com/AliMD/alwatr/commit/a92fee48bfdf2cf92aa30e8b0fb506ac0fab5c64)) -- **icon:** 404 cache issue ([5fbc7d8](https://github.com/AliMD/alwatr/commit/5fbc7d87dcb6a82e8cb72e689730db1660c7aa58)) -- **icon:** build issue ([42d3914](https://github.com/AliMD/alwatr/commit/42d39140ca43602c8e30d676bcd9af4b4f62998e)) -- **icon:** render delay on icon change ([9b4bafb](https://github.com/AliMD/alwatr/commit/9b4bafbb23c613c32c35ae3a0c83c1fdd38b8ac4)) -- **lint:** ignore es-bench ([a6f59e4](https://github.com/AliMD/alwatr/commit/a6f59e433f6104b934b24ae90676fd0273eea3e8)) -- logger new api ([fd86f32](https://github.com/AliMD/alwatr/commit/fd86f324b98dc1d22654f4597a033e8ff10c4dad)) -- **logger:** logMethod args type ([66338b7](https://github.com/AliMD/alwatr/commit/66338b7ba1d4b15af78f9f604f7be0a7e483413d)) -- **logger:** logMethod args type ([1983b3d](https://github.com/AliMD/alwatr/commit/1983b3d2fe260226ca2660e33b9bd924facdf776)) -- **nano-server:** path prefix ([83995f7](https://github.com/AliMD/alwatr/commit/83995f7bc9748ecb632d6f8dbea5e2f96fa59c41)) -- **nano-server:** prefixPattern, logger ([f9d203e](https://github.com/AliMD/alwatr/commit/f9d203e65955629f6dd5c468867f20ce578337eb)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **nginx-pwa:** build issue ([e9170b2](https://github.com/AliMD/alwatr/commit/e9170b284cc267f6ecb7606780ea65bb00035fd8)) -- **nginx-pwa:** fix a typo ([e025d27](https://github.com/AliMD/alwatr/commit/e025d277b1383aa53e0bdc322391c2747c5dadec)) -- **nginx-pwa:** override file ([ce4723b](https://github.com/AliMD/alwatr/commit/ce4723bc219802bccb7832de980c6b42bb055cf1)) -- **nginx-storage:** ignore `index.json` ([38dea7a](https://github.com/AliMD/alwatr/commit/38dea7a464fc1b9a65e97a53733b678b2130b390)) -- **nginx-storage:** ssi syntax error ([ee09edf](https://github.com/AliMD/alwatr/commit/ee09edf69c95fb6be25fd714bfa904f90ae4e04c)) -- **nginx-storage:** ssi types ([e041128](https://github.com/AliMD/alwatr/commit/e04112855564412923c82c49799d91b3f6b3af9f)) -- **nginx:** NGINX_ACCESS_LOG default value ([0299a8d](https://github.com/AliMD/alwatr/commit/0299a8d44763ae8431e3241623eada72e909a92a)) -- **nginx:** NGINX_LIMIT_REQ_RATE env name ([5f341b8](https://github.com/AliMD/alwatr/commit/5f341b8ca26d0a234783ed77a557011a5d7d756f)) -- **nginx:** NGINX_OPEN_FILE_CACHE_INACTIVE issue ([41e0831](https://github.com/AliMD/alwatr/commit/41e0831ac93c6c832062baa7254885664f3fb64f)) -- **nginx:** pwa filename ([554cd37](https://github.com/AliMD/alwatr/commit/554cd373dcb29f5c73369d9ed64a4c109ab2481a)) -- packages and refs ([eea2382](https://github.com/AliMD/alwatr/commit/eea2382e459ccaa3e7b4b329d9c196eda146a08e)) -- **pwa-element:** scroll issue ([136dbd0](https://github.com/AliMD/alwatr/commit/136dbd07592fdae28bbe0969a38e82fd2f49c144)) -- **pwa-helper/esbuild:** hash entryNames ([0394a26](https://github.com/AliMD/alwatr/commit/0394a26d9f72d21ca762af3c04f5521e6e600f28)) -- **pwa-helper:** disable auto scroll on page changes temporary ([d2cc128](https://github.com/AliMD/alwatr/commit/d2cc12889664fbd324c53ecc00582995fd2ab552)) -- **pwa-helper:** render routerOutlet to this ([e06bc3a](https://github.com/AliMD/alwatr/commit/e06bc3ac95a9f640ff7e8d912328e4c2e3a64b21)) -- **pwa-helper:** show user notify version ([7a01234](https://github.com/AliMD/alwatr/commit/7a01234a5e05cbc66438c589c8783be2e2d8adf4)) -- **signal:** dont receivePrevious when listener is disabled ([68ae207](https://github.com/AliMD/alwatr/commit/68ae207ce9ecf104922b24910d8dfcedb13acde7)) -- **signal:** requestableContextProvider.getValue ([0a7111d](https://github.com/AliMD/alwatr/commit/0a7111da7b8eb004566922dc9b35edfc02a55147)) -- **soffit-pwa:** text-field width ([ca3d03b](https://github.com/AliMD/alwatr/commit/ca3d03babe4f2428414819cde884e696ecbed3b1)) -- **storage-client:** serviceRequest type ([66758e1](https://github.com/AliMD/alwatr/commit/66758e12a6da369f9d2ff90b57a470ff08413f7b)) -- **storage-engine:** dev mode ([65491ce](https://github.com/AliMD/alwatr/commit/65491ce7b7ff0756d8e475442d175b880b9894db)) -- **storage-engine:** new \_$save method ([21cdf51](https://github.com/AliMD/alwatr/commit/21cdf5138bfced0177af4538d80f88fe2d415f67)) -- **storage-server/cache-api-response:** resolve path ([dba3a76](https://github.com/AliMD/alwatr/commit/dba3a76bdcb4ec1732d71fb1ca7e94e44e3458fb)) -- **storage-server/cache-api-response:** resolve path ([ae10ebd](https://github.com/AliMD/alwatr/commit/ae10ebd584ff0047508aa175b3dc46e1cfc585e1)) -- **storage-server/cache-api-response:** resolve path and check not outside of base ([5f80d61](https://github.com/AliMD/alwatr/commit/5f80d6128d55fea52c2a5a28debfe8039ebd0e44)) -- **storage-server/link:** resolve and security check paths ([c4db8f4](https://github.com/AliMD/alwatr/commit/c4db8f4f0aabb7a83a6081776e992bc75a34f5f7)) -- **storage-server/touch:** remove id query params ([f6c9671](https://github.com/AliMD/alwatr/commit/f6c96719b00d8d6014a566396e06cfd6ef950454)) -- **storage-server:** import cache-api-response ([1ffa5b3](https://github.com/AliMD/alwatr/commit/1ffa5b3b8fb276b2af99af41af8270182f7de0b0)) -- **storage-server:** import route ([78fff6e](https://github.com/AliMD/alwatr/commit/78fff6e464535cadcd28411f82b1a8e0b370fa2e)) -- **storage-server:** routes ([3e162d1](https://github.com/AliMD/alwatr/commit/3e162d10daabdfbe91f4273bdc032031bd87cdf9)) -- **surface:** disabled color issue ([01a8140](https://github.com/AliMD/alwatr/commit/01a8140ef1f2f86920483e4ee4936dda5a155b9b)) -- **telegram-notifier:** escaping send message ([a9814bf](https://github.com/AliMD/alwatr/commit/a9814bfca41c1260d5de7ec75e2356b3cdcbbc9d)) -- **tsconfig:** re-enable com-pwa ([cc54759](https://github.com/AliMD/alwatr/commit/cc54759292d5863b4ada009bf5ac44bfa5c5c4c2)) -- **type/com:** qty input border-radius ([0aaf019](https://github.com/AliMD/alwatr/commit/0aaf0194ba35051baece92c327c8a775dab59a37)) -- **type/service-response:** default generics ([04dfe54](https://github.com/AliMD/alwatr/commit/04dfe549c272878756544481f0a0d301d6e3c228)) -- **type:** fix `ComUser` ([670660f](https://github.com/AliMD/alwatr/commit/670660fb3b18e63ad54d22a76297b982c77533be)) -- **type:** Stringifyable ([058381b](https://github.com/AliMD/alwatr/commit/058381b50641ba44f4ac60e2173b5b91449e58cd)) -- **ui/icon-button:** default content value ([4303620](https://github.com/AliMD/alwatr/commit/4303620c26a34999db2ad7098c417e1c8f00414b)) -- **ui/snackbar:** check `actionLabelKey` ([9788f53](https://github.com/AliMD/alwatr/commit/9788f53a469db7cc677f30a5c62a68478018a832)) -- **ui/snackbar:** use label for action button content ([68beefa](https://github.com/AliMD/alwatr/commit/68beefa82532159225dbf5468255dff3adaba43a)) -- **ui/surface:** box sizing ([6ef9a45](https://github.com/AliMD/alwatr/commit/6ef9a45301a699875477f659447001ed5e4ab1c3)) -- **ui/text-field:** fix default of `value` & handle its `click` event ([a685899](https://github.com/AliMD/alwatr/commit/a685899f60f83ed26f43ec7a8f2ca16ec37c1078)) -- **ui/text-field:** set empty string for undefined value ([3efad6b](https://github.com/AliMD/alwatr/commit/3efad6b639ffad06bccb25d48de3fbe6fe2f7abb)) -- **validator:** add 98 in start of phone number ([a26b6ae](https://github.com/AliMD/alwatr/commit/a26b6ae63e20e4d2c1f69951f244b8f430e6a755)) -- **validator:** array schema f\*\*ing issue! ([f38a4a5](https://github.com/AliMD/alwatr/commit/f38a4a55d93f885f60b3c2a4678e80b4682af039)) -- **validator:** array support ([08f5215](https://github.com/AliMD/alwatr/commit/08f521534a0e937e5cf0f92bf5ca274838f41f93)) -- **validator:** improve `sanitizePhoneNumber` structure ([fb90f2f](https://github.com/AliMD/alwatr/commit/fb90f2ffcef7bf0d2c4a41a9fd0d578e3b9d40a7)) -- **validator:** local country code issue ([07e9cc0](https://github.com/AliMD/alwatr/commit/07e9cc08bd6067580dc33f839bdc842e178f7e5b)) -- **validator:** remove an unused expression ([d1fe2b4](https://github.com/AliMD/alwatr/commit/d1fe2b4cb3e8f44d37bd681b04c51d35e932268a)) -- **vscode:** re-enable lit-plugin.rules.no-missing-import ([3e2d538](https://github.com/AliMD/alwatr/commit/3e2d5384bb110701226f6001eb778ab4df8260b8)) -- **workflow/pwa:** add git to docker ([c584ea0](https://github.com/AliMD/alwatr/commit/c584ea001e476c50fdae0a0d4095c18045ea060a)) -- **workflow:** publish container signing ([69ee4f1](https://github.com/AliMD/alwatr/commit/69ee4f12bb83182c558431a1a18844bdb12310b5)) - -### Features - -- **bench:** improve bench mark logs ([8d3121b](https://github.com/AliMD/alwatr/commit/8d3121be52493440906c9788a90c69e4c8d05789)) -- **bench:** test logger benchmark impact ([8ed98d8](https://github.com/AliMD/alwatr/commit/8ed98d8764834431c6806545660ba3a77eadc9c6)) -- **bench:** test object vs map ([f60a9fc](https://github.com/AliMD/alwatr/commit/f60a9fce1ca9491e3916fd40fb7a1443927f9d65)) -- **cloud/com:** add chat service ([feee585](https://github.com/AliMD/alwatr/commit/feee5856ca4e28e5e09d88042ac800e02e3ea88c)) -- **cloud/com:** cdn ([a94fa3f](https://github.com/AliMD/alwatr/commit/a94fa3fb83b73ffec9e428709a014fd5d3987c2e)) -- **cloud:** baran demo ([270d81f](https://github.com/AliMD/alwatr/commit/270d81fcda80f3104e688f42bfd8e56e1cc01d25)) -- **cloud:** new servers ([03838b1](https://github.com/AliMD/alwatr/commit/03838b1e2763e7345d4ba8075906b742064e944e)) -- **com-api:** add some new functions & edit config ([09e887b](https://github.com/AliMD/alwatr/commit/09e887b608f5ffc97b2ac52d9196a8756125a9c8)) -- **com-api:** demo user ([64c3909](https://github.com/AliMD/alwatr/commit/64c3909f53fd6a363e5523560abc0250feb4c396)) -- **com-api:** make user by admin ([9fc8b98](https://github.com/AliMD/alwatr/commit/9fc8b987cc32a29e1b4de273694a592a8acec1ff)) -- **com-api:** set user info in user-list patch ([4530d98](https://github.com/AliMD/alwatr/commit/4530d982459a2ac10e51c73d5306ae8424fff07b)) -- **com-api:** update price ([4b8eb4e](https://github.com/AliMD/alwatr/commit/4b8eb4e17a2aa562c0ad856bfc957a2099583c2f)) -- **com-pwa/buttons:** print button ([6237fc5](https://github.com/AliMD/alwatr/commit/6237fc544bbbd23f6305465e8a2fccf336e0355e)) -- **com-pwa/config:** absolute url path ([ac8f33c](https://github.com/AliMD/alwatr/commit/ac8f33cbcf17a5f4e82d2b69549eeaa69147de62)) -- **com-pwa/new-order:** edit button on review state ([abb1706](https://github.com/AliMD/alwatr/commit/abb17065fa15df97132d4ff27e34e93759c48e00)) -- **com-pwa/new-order:** get and set content ([fa27738](https://github.com/AliMD/alwatr/commit/fa2773861f7ecc61a2278397286cb85b66480650)) -- **com-pwa/new-order:** orderId context ([88afae3](https://github.com/AliMD/alwatr/commit/88afae3c61de0aa488331bce9e1c7748ca380d67)) -- **com-pwa/new-order:** upgrade to new fsm api ([e2a5f51](https://github.com/AliMD/alwatr/commit/e2a5f51c5a190316172ccaa9312fa77247ef3518)) -- **com-pwa/new-order:** use new fsm ([560dd34](https://github.com/AliMD/alwatr/commit/560dd343c688d6545f1d0a64a87fb829eb68252e)) -- **com-pwa/order-detail-base:** use alwatr-icon-box for render_part_message ([d793b31](https://github.com/AliMD/alwatr/commit/d793b31ecaa76d2e1ca7f73d25a39f851955c62d)) -- **com-pwa/order-detail:** lower opacity on reloading state ([ad3d145](https://github.com/AliMD/alwatr/commit/ad3d145a6a66c41c863c1e80dccec6451fa3ccbf)) -- **com-pwa/order-detail:** use new fsm ([1623a6e](https://github.com/AliMD/alwatr/commit/1623a6e58c6606c113c96fd34892e7dbc6dc3db7)) -- **com-pwa/order-list:** refactor with new fsm ([1005db3](https://github.com/AliMD/alwatr/commit/1005db318ebef14ae6caf28a18fb0d928f6c4788)) -- **com-pwa/order-list:** refactor woth new fsm ([3bf753b](https://github.com/AliMD/alwatr/commit/3bf753bdd4e56098633d67a63cf2c741a8ff0ccf)) -- **com-pwa/order-tracking:** upgrade to new fsm api ([8abb5de](https://github.com/AliMD/alwatr/commit/8abb5de0931778e382ba5bb568aca5ba88fc393c)) -- **com-pwa/order:** use print button in order detail top-app-bar ([9ea55f6](https://github.com/AliMD/alwatr/commit/9ea55f69ec6360769098d77c686da661d9703cd6)) -- **com-pwa/select-product:** upgrade to new fsm api ([c5f5f3c](https://github.com/AliMD/alwatr/commit/c5f5f3ccd7e53ea4633214b95f68def52470bddf)) -- **com-pwa/sign-in:** use simple hash for phoneNumber ([4b88494](https://github.com/AliMD/alwatr/commit/4b884940a536f02928692fbf8686c5ca04dea23a)) -- **com-pwa/sign-in:** auto set userInfo and userToken in local storage ([6b4c3b4](https://github.com/AliMD/alwatr/commit/6b4c3b49a15bfa91360d77191bbfa4b50a08e298)) -- **com-pwa/sign-in:** form login ([6ae0be2](https://github.com/AliMD/alwatr/commit/6ae0be2262583132979d6f7ab47bd0593c286f7c)) -- **com-pwa/sign-in:** handler invalid phone number ([49c88bf](https://github.com/AliMD/alwatr/commit/49c88bf17fdab517b7c42f947ac5f0f4b058f1b5)) -- **com-pwa/sign-in:** null link pass state ([4c03aa9](https://github.com/AliMD/alwatr/commit/4c03aa9cc7755e1600e0a8e759ede4d5c07cac18)) -- **com-pwa/sign-in:** onSignInClick handler ([b4d8aa2](https://github.com/AliMD/alwatr/commit/b4d8aa29d21c0f13f84a0cf983cb108ed3ea17cb)) -- **com-pwa/sign-in:** sanitized phone number ([25c77ae](https://github.com/AliMD/alwatr/commit/25c77aef89f5a891275a5265cac2354ac13d0217)) -- **com-pwa/sign-in:** top-app-bar ([b46f6df](https://github.com/AliMD/alwatr/commit/b46f6dfd3214e23ccd1767a809ddd95405222a27)) -- **com-pwa:** `sing-in` process ([407e9c6](https://github.com/AliMD/alwatr/commit/407e9c640899efdd2bc4633bb966665c6f9b00be)) -- **com-pwa:** change order_shipping_car i18n key ([b8f7daa](https://github.com/AliMD/alwatr/commit/b8f7daa2622506d45e85274db38dbe20a2518f1f)) -- **com-pwa:** chat storage context provider ([8015f1d](https://github.com/AliMD/alwatr/commit/8015f1d531ebb7cc43f25cc14dac403f2d5fe989)) -- **com-pwa:** check signed in ([1fa6db7](https://github.com/AliMD/alwatr/commit/1fa6db78f6fe91b1663d1e48f27ee778e06879ea)) -- **com-pwa:** editable qty text-field ([cc88f53](https://github.com/AliMD/alwatr/commit/cc88f5384a2201728a0ed489abfa77c091378085)) -- **com-pwa:** form validator ([55a06b2](https://github.com/AliMD/alwatr/commit/55a06b2cbcb4b796e14f720845f7809ca482d254)) -- **com-pwa:** link-pass context ([6a2f1b8](https://github.com/AliMD/alwatr/commit/6a2f1b8915e258989189491c9efbaae3e6336e19)) -- **com-pwa:** merge new-order with order detail! ([7546fe3](https://github.com/AliMD/alwatr/commit/7546fe3fca9b0611c6c71d2af9c103cda97cef79)) -- **com-pwa:** nginx storage server ([c13ca89](https://github.com/AliMD/alwatr/commit/c13ca894b15d04e6426aafd6dae3bcc1c2b71fb5)) -- **com-pwa:** NGINX_ACCESS_LOG config ([dfef6ec](https://github.com/AliMD/alwatr/commit/dfef6ec9eb07191c06315cf7d3d32ef4c17efa49)) -- **com-pwa:** order created date in status box ([8945b97](https://github.com/AliMD/alwatr/commit/8945b97a36dd231cbd3bb31565afd5997876cd03)) -- **com-pwa:** order created date in status box ([77f85cd](https://github.com/AliMD/alwatr/commit/77f85cdb4301b2f09a0495acc593016c4277ddf4)) -- **com-pwa:** qty input ([62f33af](https://github.com/AliMD/alwatr/commit/62f33afc9565fd6ece0d8f32d408bb830974f74d)) -- **com-pwa:** reloading failed box ([3c7ba3c](https://github.com/AliMD/alwatr/commit/3c7ba3c14c97d5ad41f1c704bd398cdc9f5d6def)) -- **com-pwa:** show a message when successfully `sign-in` ([2bfa42d](https://github.com/AliMD/alwatr/commit/2bfa42d74132d82555c547e67346882cb32c93e8)) -- **com-pwa:** upgrade to new fsm api ([cc6cb4c](https://github.com/AliMD/alwatr/commit/cc6cb4c69e54a757ec57be5a5d6c51a2feb42640)) -- **com-pwa:** use alwatr-icon-box for render_part_message ([7ab5c15](https://github.com/AliMD/alwatr/commit/7ab5c15c08aebb63c50a0772743715cc23fd606d)) -- **com-pwa:** user context consumer ([a8e1f87](https://github.com/AliMD/alwatr/commit/a8e1f87b68f15ceb941baab96f722b7f1d067791)) -- **com-pwa:** userProfile and userToken context consumer ([2c83dc9](https://github.com/AliMD/alwatr/commit/2c83dc96d1239403e6961e10ecb9caf0f75bdeb2)) -- **com-pwa:** validate order ([f83d93c](https://github.com/AliMD/alwatr/commit/f83d93cc1689a065c0396955a2593e33f47d5bba)) -- **com-pwa:** validate shipping form and item list before enable submit ([9af59d7](https://github.com/AliMD/alwatr/commit/9af59d72a2678249776d738ea79e4f248a442c5c)) -- **com/order-list:** contextError state render ([8f286d2](https://github.com/AliMD/alwatr/commit/8f286d295abd01e70539fd5dcba46ff1691c72d8)) -- **com/order-list:** new state config ([c7c5423](https://github.com/AliMD/alwatr/commit/c7c542331ba2e1c86b372948a393d237f93293c8)) -- **com/order-list:** new topAppBar change model ([d84f2ad](https://github.com/AliMD/alwatr/commit/d84f2add50f3440b1802c66a8440e1373e0c3402)) -- **com/page:** handle `contextError` ([42f6a3d](https://github.com/AliMD/alwatr/commit/42f6a3d52ffe5e5cbdcf66163dfb854f08e076ab)) -- **com/provider/storage:** new provider base on new context state ([045afa8](https://github.com/AliMD/alwatr/commit/045afa8de341bd6b1389da1e03bd439c517f8383)) -- **com/sign-in:** enhance errors ([1fe2532](https://github.com/AliMD/alwatr/commit/1fe2532a4128f30f812d05b821fb167c3070d33d)) -- **com/sign-in:** enhance style ([e5a61ea](https://github.com/AliMD/alwatr/commit/e5a61eaef7d9042a13b1a4693fcb9731ed3374dd)) -- **com:** add beta and canary ([310b0d3](https://github.com/AliMD/alwatr/commit/310b0d3a0bb32807b2b7398d5668bdc850260a1e)) -- **com:** new order storage provider base on new context ([9129aad](https://github.com/AliMD/alwatr/commit/9129aad052f49afbca13a80e3e5b92127bfabc3e)) -- **com:** order storage provider refresh by user signal ([7138ae0](https://github.com/AliMD/alwatr/commit/7138ae06db7aa7a8058e9fb40f8d62fd79f1e221)) -- **com:** share buttons ([823a26a](https://github.com/AliMD/alwatr/commit/823a26aedf4fe7da57ef0ecd5bbd42de3a20fc24)) -- **com:** sign-in method ([db3a31b](https://github.com/AliMD/alwatr/commit/db3a31bbb2ac00398b3042f347bab4b7a5e4bc38)) -- **container/nginx-pwa:** envsubst config js ([55812ea](https://github.com/AliMD/alwatr/commit/55812eafa94c424af45f16e43bb9812bdbe31c5e)) -- **container/nginx-storage:** error.json for error ([90152b4](https://github.com/AliMD/alwatr/commit/90152b49e5881b33156f46857a5165b64c78073b)) -- **container/pwa:** use nginx-pwa ([24a0b93](https://github.com/AliMD/alwatr/commit/24a0b9376e455fe065939735628325f7c7966554)) -- **context:** add `requestIfNotComplete` ([580d5c9](https://github.com/AliMD/alwatr/commit/580d5c9c74f1c8921b45d402641df9444f438547)) -- **context:** awesome server context ([c001c58](https://github.com/AliMD/alwatr/commit/c001c58a2b1b4e13fd1c34b5128031fd640a98e1)) -- **context:** new package ([98ee43d](https://github.com/AliMD/alwatr/commit/98ee43d83b1ad5b3806ec6053c5cac70912000b3)) -- **context:** simple context api ([2a1b152](https://github.com/AliMD/alwatr/commit/2a1b152380f267a6b173f08bbbe10295325b1fd8)) -- **crypto/hash:** new crc length strategy ([7a6c27e](https://github.com/AliMD/alwatr/commit/7a6c27e2f1b78df4aaa03a764f1b57477f1220fc)) -- **crypto/user:** crcLength ([89afd7f](https://github.com/AliMD/alwatr/commit/89afd7f9a3c89f5c626d83210bef3d6c1af863b3)) -- **crypto:** add `user factory` demo ([94236c8](https://github.com/AliMD/alwatr/commit/94236c8ece66a1ced6cbf3f35603d2716ab1d5c1)) -- **crypto:** make prefix for userId ([5baa00a](https://github.com/AliMD/alwatr/commit/5baa00aafb16a4c6ed1d77913edddd090f732dad)) -- **demo/crypto:** random ([d820445](https://github.com/AliMD/alwatr/commit/d8204451e356c60572df3862edbdb02c06bf6b9f)) -- **demo/fsm:** new demo for state machine ([136b563](https://github.com/AliMD/alwatr/commit/136b563220310d8ec637b4e776c48c1d3bb62ecc)) -- **demo/fsm:** update ([6080469](https://github.com/AliMD/alwatr/commit/60804694ccab53b5c22ea636992f54ef1dde6a4b)) -- **demo/fsm:** update with new api ([9170694](https://github.com/AliMD/alwatr/commit/917069457630eecfa24c6fe83b7d34fb281a9d2d)) -- **demo:** crypto hash ([445b865](https://github.com/AliMD/alwatr/commit/445b8650a1abd98696b7fe954bcfca23f76afba8)) -- **element/fsm:** rewrite state machine for lit ([592fc8d](https://github.com/AliMD/alwatr/commit/592fc8dd586255e719a31785d3989a348f63cce8)) -- **element/logger:** log remove ([f6dc4c6](https://github.com/AliMD/alwatr/commit/f6dc4c65292f7a491007f445749b798c4551ebfc)) -- **element/mixins/signal:** \_addSignalListener ([fc987b3](https://github.com/AliMD/alwatr/commit/fc987b32db20975354e406ae89d4b4c006bf798d)) -- **element:** add reactive controller ([7d7d6cb](https://github.com/AliMD/alwatr/commit/7d7d6cb6e473177aa2062d5a57490a57e6b027ff)) -- **element:** export from `ref` ([bbaaca4](https://github.com/AliMD/alwatr/commit/bbaaca4bb19efa29f80c4206eff5985a2d86f62c)) -- **element:** export lit guard ([b51627f](https://github.com/AliMD/alwatr/commit/b51627fbd63f401aa4404ebb1d59281216247d80)) -- **element:** refactor fsm controller with new fsm api ([e51aaa2](https://github.com/AliMD/alwatr/commit/e51aaa241ea21a91df4e7399a4c7801be41ded49)) -- **element:** register and remove necessary listeners ([833e9cc](https://github.com/AliMD/alwatr/commit/833e9cc58a5515edcc1c1c72b2761c124557201d)) -- **element:** ScheduleUpdateToFrameMixin ([8a4307d](https://github.com/AliMD/alwatr/commit/8a4307dd3a6cc58f826e6faaa261cb3cb9e13d22)) -- **element:** use the new logger functions(time & timeEnd) ([2c4d919](https://github.com/AliMD/alwatr/commit/2c4d9191e2b296e17e86f20eebcf61523f1e0e3b)) -- **es-bench:** compare `bind` vs `class` ([b949f87](https://github.com/AliMD/alwatr/commit/b949f87234353cd7238730aa26c353422fb06951)) -- **es-bench:** date locale ([7591331](https://github.com/AliMD/alwatr/commit/7591331f08adf1cad855cfcaeca98122d3045009)) -- **es-bench:** new bench model ([3ef68b0](https://github.com/AliMD/alwatr/commit/3ef68b034562a96a927d969d35a54966997aff6e)) -- **es-bench:** test node exist methods ([73bb495](https://github.com/AliMD/alwatr/commit/73bb495deea5df537e42f7c604ab262dba17026a)) -- **fetch:** add user auth ([811fbc0](https://github.com/AliMD/alwatr/commit/811fbc018c2b4e3b808704e8623bd5dff2b2f3f7)) -- **fetch:** StringifyableFetchOptions type ([e13fdb2](https://github.com/AliMD/alwatr/commit/e13fdb2550cf3a2102c331aa7980234ca6f86e08)) -- **fms:** complete new FSM api base on signal! ([5d8173a](https://github.com/AliMD/alwatr/commit/5d8173a467ef96b3a23654623afd80904770ddd4)) -- **fsm:** add `signalRecord` to config ([1a35291](https://github.com/AliMD/alwatr/commit/1a352915fba978da141513517655d1e07350c3ec)) -- **fsm:** add unsubscribe ([85ed3c3](https://github.com/AliMD/alwatr/commit/85ed3c3439e1f40c2760f6011df112242f10be06)) -- **fsm:** callback in provider signals ([772818b](https://github.com/AliMD/alwatr/commit/772818baa7953b6fbb4d4128fcee76733f42cc2d)) -- **fsm:** custom signal callback ([47c22e9](https://github.com/AliMD/alwatr/commit/47c22e92a8a8085148b44b316d649b695ff8071a)) -- **fsm:** destroy and expire api ([e1a1c15](https://github.com/AliMD/alwatr/commit/e1a1c150d81f4428718bd18f039235c7fce9caf2)) -- **fsm:** new types ([2866e3b](https://github.com/AliMD/alwatr/commit/2866e3bd5ff56fd2b5bddcaed3673a5868bae4bb)) -- **fsm:** rewrite state machine ([7f24695](https://github.com/AliMD/alwatr/commit/7f246959e5a80b21c1c4b21e895e75f8fbe56798)) -- **fsm:** subscribe ([2af4f44](https://github.com/AliMD/alwatr/commit/2af4f44f0e8a2dee39cde10dcaa3281075632e6a)) -- **i18n:** date method for convert date to active locale ([8b51a97](https://github.com/AliMD/alwatr/commit/8b51a97c780ffd3ed653124f64c0752af779f41c)) -- **logger:** add `duration time` to logger time label ([ef188c4](https://github.com/AliMD/alwatr/commit/ef188c41a02789e1b35ab424bab24a393a03a3b0)) -- **logger:** add `time` & `timeEnd` ([0bd4ec5](https://github.com/AliMD/alwatr/commit/0bd4ec5dbd185b17cfb8656a84a782e848ade138)) -- **logger:** optional devMode per package ([cc1eb87](https://github.com/AliMD/alwatr/commit/cc1eb879832807d55ad4cf268a54b2d5e4346fff)) -- **math:** generateHash ([0ec8473](https://github.com/AliMD/alwatr/commit/0ec8473fb5ec636093e3fb09e2115ce356dee7b1)) -- **math:** simpleHashNumber ([dffb285](https://github.com/AliMD/alwatr/commit/dffb285e11cd9652d54d2d22956fc22177d16699)) -- **nano-server:** add getUserAuth ([615266f](https://github.com/AliMD/alwatr/commit/615266f06ef47a7a5b36fe3d6abee1653703bf6f)) -- **nano-server:** prefix pattern ([ad5e1b5](https://github.com/AliMD/alwatr/commit/ad5e1b56651c96cb825187604f877fee396b3ec4)) -- **nginx-pwa:** new nginx container, optimized for pwa ([2205401](https://github.com/AliMD/alwatr/commit/22054017b4d3813c743db7ebe666214aa485a21a)) -- **nginx-storage:** new nginx container, optimized for storage ([8e9e500](https://github.com/AliMD/alwatr/commit/8e9e5009b0314ce9e23848d4a26c59fe83c898ce)) -- **nginx:** add NGINX_DISABLE_SYMLINKS env ([c875f4e](https://github.com/AliMD/alwatr/commit/c875f4efdebc9f5481297d6d401c68b3a3aef12e)) -- **nginx:** enhance and dynamic request limit rate ([f38f43e](https://github.com/AliMD/alwatr/commit/f38f43e7f1ccb64b3c2b17b8ec401352c7af11e8)) -- **nginx:** optimize base for cdn and enhance performance ([6a62f5b](https://github.com/AliMD/alwatr/commit/6a62f5ba8c8b5224b78e8cdb5093e58112a32638)) -- **nginx:** optimize pwa spa serve ([9f181ab](https://github.com/AliMD/alwatr/commit/9f181abeb183f6d4e8fb0464450f7ac0cf12ae44)) -- **nginx:** update version to 1.24 ([0257f1e](https://github.com/AliMD/alwatr/commit/0257f1ecfbc29d6d97baf1c77efb5dbd6d8f3fe1)) -- **pwa-helper:** add build short sha to alwatr version ([0411b9c](https://github.com/AliMD/alwatr/commit/0411b9c7e92b243ed4f24337432c2f0412817920)) -- **router:** add thisArg for routerOutlet ([2bfd1f5](https://github.com/AliMD/alwatr/commit/2bfd1f5b8593f7107b4e84b35600cc07ca3d6c6c)) -- **service:** `link` route ([eeb3275](https://github.com/AliMD/alwatr/commit/eeb3275160df0f5a307aa21d3406930d3ec24506)) -- **signal:** new RequestableContext with state ([b8a8e55](https://github.com/AliMD/alwatr/commit/b8a8e550d3952863d85ba9d9d87513a668a9430d)) -- **soffit-pwa:** add agency card in homePage ([423c71a](https://github.com/AliMD/alwatr/commit/423c71afce1ea66c567a49c960c7199e0f981bd9)) -- **soffit-pwa:** page agency list ([8a4c18f](https://github.com/AliMD/alwatr/commit/8a4c18f7f5163b7c6699b23b09193deca7295d2b)) -- **storage-client:** `cacheApiResponse` method ([4d6ca79](https://github.com/AliMD/alwatr/commit/4d6ca793ef46f1eabed7ed5e07a2fa3234811a1b)) -- **storage-client:** `link` method ([25e2250](https://github.com/AliMD/alwatr/commit/25e22507004d230f809884bbb88d02410571db53)) -- **storage-client:** add touch method ([5a347b3](https://github.com/AliMD/alwatr/commit/5a347b316408c53ed3f5947fed9c1fff41c0c13c)) -- **storage-engine:** none blocking save storage ([f668ba0](https://github.com/AliMD/alwatr/commit/f668ba0232c0b3372ee14c40d35b1f7e577b15c7)) -- **storage-engine:** save new empty storage after open ([85bb855](https://github.com/AliMD/alwatr/commit/85bb8551e2dfe976d191d7c7243c29fe71433e54)) -- **storage-server/cache-api-response:** demo ([8ad9193](https://github.com/AliMD/alwatr/commit/8ad9193cdacf7806486ead9e00da1bf0c199b932)) -- **storage-server/link:** make dest folder if not exist ([a68a442](https://github.com/AliMD/alwatr/commit/a68a442423e42dd1820c7e95140c05581accf380)) -- **storage-server:** `cache-api-response` route ([666b255](https://github.com/AliMD/alwatr/commit/666b2557aaccc256c7f8e89f117207fa1da21b81)) -- **storage-server:** add touch method ([a99ae5d](https://github.com/AliMD/alwatr/commit/a99ae5df13f909eba4ad5cbf6d7d04cb2a98b6f6)) -- **storage-server:** demo for link and touch ([4a59530](https://github.com/AliMD/alwatr/commit/4a595305bfde7127f32ee8096479d55c9d3b4490)) -- **token/user:** AlwatrUserFactory ([7b53487](https://github.com/AliMD/alwatr/commit/7b534876ada337c4137eda64c8f569c3ce1e426a)) -- **token/user:** base userFactory ([0ef465d](https://github.com/AliMD/alwatr/commit/0ef465d679616119ac1d5b15488d16957cb111a8)) -- **token:** hash ([324151b](https://github.com/AliMD/alwatr/commit/324151bd29428094679ee8e1125d70c580fb48f4)) -- **token:** index.js ([dbac3ed](https://github.com/AliMD/alwatr/commit/dbac3ed4766184327f4c4d696323facccad422d3)) -- **token:** random hash ([89bf7c5](https://github.com/AliMD/alwatr/commit/89bf7c5289003e1f87c56063364618b8c1edf809)) -- **token:** use hash for user ([5b91d40](https://github.com/AliMD/alwatr/commit/5b91d400bf346c388096a2d725ae165e71c92928)) -- **type/com:** ComUser/permissions ([a962366](https://github.com/AliMD/alwatr/commit/a9623669a83f1cce0f96428d5c2d126ad3e5984b)) -- **type/com:** order schema ([d1aacdb](https://github.com/AliMD/alwatr/commit/d1aacdb56cb9995bc05d54bb78bc67e3f629e12c)) -- **type/com:** qtyStep const ([3c928d4](https://github.com/AliMD/alwatr/commit/3c928d406859c85cf939827ece98db6fc39ff914)) -- **type:** ArrayItems ([4f20d8a](https://github.com/AliMD/alwatr/commit/4f20d8ab312787d3073a43594e813bcddeb99aeb)) -- **type:** crypto ([065f825](https://github.com/AliMD/alwatr/commit/065f825e8d7baf2407696f3b9cff5e1aa178b436)) -- **type:** MaybeArray ([0c61708](https://github.com/AliMD/alwatr/commit/0c6170890faad306a052c3d8242df21f780ef1c3)) -- **type:** SingleOrArray, Prop, Values, Merge ([c3d2a86](https://github.com/AliMD/alwatr/commit/c3d2a8669f4ae83abeb69a1cfef51ecc23c76a10)) -- **type:** user permissions ([aff0853](https://github.com/AliMD/alwatr/commit/aff08538d183e3f6b2d637e56fe2f2281c4da768)) -- **type:** UserAuth ([c902144](https://github.com/AliMD/alwatr/commit/c9021444743c5a0a5a333688830cd0a7dd7d9867)) -- **ui-kit/snackbar:** message/actionLabelMessage l10n key ([e09f3e1](https://github.com/AliMD/alwatr/commit/e09f3e170998902e218e1d23a0d3b5ceabc55dc9)) -- **ui-kit/style:** add --sys-surface-reloading-opacity ([2ba6367](https://github.com/AliMD/alwatr/commit/2ba6367058290f8bfdf1eabe1d0cd3a634a7d9db)) -- **ui/button:** label on content ([df010a8](https://github.com/AliMD/alwatr/commit/df010a8ccb49759e5638eb5992898549ce3f55b0)) -- **ui/icon:** svg property ([7815917](https://github.com/AliMD/alwatr/commit/7815917546be016387d9c0a30a60821d541a0bce)) -- **ui/text-field:** readonly prop ([02a785e](https://github.com/AliMD/alwatr/commit/02a785ef8f842cdb86aea259e8019f01d7ba9e4e)) -- use button content ([a3f3872](https://github.com/AliMD/alwatr/commit/a3f3872c16e2bf5ad99c90cd03563007271fc530)) -- **util/node:** makeLinkForce ([f0c091e](https://github.com/AliMD/alwatr/commit/f0c091e454c1cb0b47b5126bd025b450e05b81fb)) -- **util:** generic types ([7a69fa7](https://github.com/AliMD/alwatr/commit/7a69fa78b6b36834816fcdb4376f9d53d3243713)) -- **util:** readJsonFile ([940cba6](https://github.com/AliMD/alwatr/commit/940cba67d2e56c6292aba02d01d0395edfa1b217)) -- **util:** readJsonFileSync ([659b2ea](https://github.com/AliMD/alwatr/commit/659b2ead425264073d53b561c0a7f6e2476ff8cc)) -- **util:** setLocalStorageItem ([46e248c](https://github.com/AliMD/alwatr/commit/46e248cb79b7846f568eadc5a6d5a2214fe4faf3)) -- **util:** writeJsonFile ([3707070](https://github.com/AliMD/alwatr/commit/3707070ef0c7716718e84ccfb6c44e316983e2f2)) -- **util:** writeJsonFileSync ([230f415](https://github.com/AliMD/alwatr/commit/230f4157a19ea539f6c245ef77e02512b7c9c91a)) -- **validator:** add `phone` validation ([e5c19ca](https://github.com/AliMD/alwatr/commit/e5c19ca67e7c804cf3e63841890e68c11620d796)) -- **validator:** add some new functions to validate ([aea3ec1](https://github.com/AliMD/alwatr/commit/aea3ec1a242d5577d0e93895724dcacfce48532d)) -- **validator:** array in JsonSchema ([58c9c56](https://github.com/AliMD/alwatr/commit/58c9c56f47b18db5d1aa128b35d0e6c8352d2492)) -- **validator:** fix default value of `replaceNumberToLang` ([0345add](https://github.com/AliMD/alwatr/commit/0345addfa9d03acdc4113a07caf8ee3f1ccdddf9)) -- **validator:** sanitizePhoneNumber ([41f2050](https://github.com/AliMD/alwatr/commit/41f2050269bd74ff9c4908f984bfe3716fc01bc7)) -- **validator:** support array ([b632a7a](https://github.com/AliMD/alwatr/commit/b632a7a6b752fcd8666e6d42da64ebf3b0917c8d)) -- **workflow:** add nginx-storage to ci/cd ([b071d34](https://github.com/AliMD/alwatr/commit/b071d3497b0c6c8ba0b1a41aee1f979bc3010a81)) - -### Performance Improvements - -- **com/order-list:** refactor repeat mode ([b88fb50](https://github.com/AliMD/alwatr/commit/b88fb5047b004539e1995cab02da8a938b70b26f)) -- **i18n:** use toLocaleDateString for convert date ([f1efcec](https://github.com/AliMD/alwatr/commit/f1efcecb2480e310d289333d840a0dd27fa3881d)) -- make google lighthouse happy ([c025dea](https://github.com/AliMD/alwatr/commit/c025dea4a937ee07411b1605ced8d51cd3bc4ce0)) -- **pwa:** optimize downloading performance ([39ef8b4](https://github.com/AliMD/alwatr/commit/39ef8b45065cbfff45273441cca527a1195d9750)) -- **pwa:** optimize first load and rendering ([343d757](https://github.com/AliMD/alwatr/commit/343d757eefab6572df54fb4f7624698e9a9f9e11)) -- **pwa:** optimize index.html ([e9c2613](https://github.com/AliMD/alwatr/commit/e9c2613d1526f2bc0f2cf4fdd34d276286995197)) -- **soffit-pwa:** import home page without lazy ([f1b37a2](https://github.com/AliMD/alwatr/commit/f1b37a2107eff7a93a6eff4398c08b88159fb84b)) - -### Reverts - -- **math:** crypto ([fbc4246](https://github.com/AliMD/alwatr/commit/fbc4246d61fbf0c26e43933d209ad4809b6af14c)) -- **type:** crypto ([5c6b4db](https://github.com/AliMD/alwatr/commit/5c6b4db1b073b974a9942401b68786f81827f96b)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- build issue ([2f928d2](https://github.com/AliMD/alwatr/commit/2f928d28262f73843ce62c71ec0fd9ba3332ee05)) -- **cloud:** prevent to cat env ([441afc1](https://github.com/AliMD/alwatr/commit/441afc16fc5a8b8e527027b8d84dc02f1ed3e867)) -- **com-api:** add product method on demo.http ([2d67d67](https://github.com/AliMD/alwatr/commit/2d67d67faa806f1fb89dd5279757852f57d7114b)) -- **com-api:** demo.http ([a2eba5c](https://github.com/AliMD/alwatr/commit/a2eba5ce13e14eeb58e3efefbbda764c4166251d)) -- **com-api:** demo.http tokens ([f5c27ca](https://github.com/AliMD/alwatr/commit/f5c27ca7190baf2e0a05d33b3e4fbeca18ad804d)) -- **com-api:** image name in deployment ([a1bf84f](https://github.com/AliMD/alwatr/commit/a1bf84f15ddb13f3e221eff209f09124e650e422)) -- **com-api:** imports path ([4120038](https://github.com/AliMD/alwatr/commit/4120038483e9f89fb23c00ea6042df65140beb8d)) -- **com-api:** improve demo-http data ([71debc0](https://github.com/AliMD/alwatr/commit/71debc0838595878fe11f6b42f423dd2c8abcf69)) -- **com-api:** name of product list on demo-data.http ([9340b3c](https://github.com/AliMD/alwatr/commit/9340b3c578a4340ec6b4a0a4ef1adb6bb67e16b1)) -- **com-api:** patch-product-list storage param ([20ef97e](https://github.com/AliMD/alwatr/commit/20ef97eb20840e91f12c80798bd26b227239518a)) -- **com-api:** put order storage path prefix ([63b4179](https://github.com/AliMD/alwatr/commit/63b41799d09a19d8b75474f9d3a1ce7b40a97f48)) -- **com-api:** remove image cdn path ([659485e](https://github.com/AliMD/alwatr/commit/659485ece4dcaa084474a6b80ed943cbb9ce090b)) -- **com-pwa:** calculations ([483b79a](https://github.com/AliMD/alwatr/commit/483b79a1e337d2ea0fae62e469a7afddadf79910)) -- **com-pwa/new-order-controller:** orderId on redirect ([531b159](https://github.com/AliMD/alwatr/commit/531b159ff72d696873b6746f35b86b337e80bff6)) -- **com-pwa/order-item-box:** class name ([6d005fc](https://github.com/AliMD/alwatr/commit/6d005fc80baede12a70705a2db26abab20f73e5d)) -- **com-pwa/page-404:** back btn to home ([481627f](https://github.com/AliMD/alwatr/commit/481627f302f9369610f839099a624152016acf9d)) -- **com-pwa/page-detail:** replace number ([a158f05](https://github.com/AliMD/alwatr/commit/a158f0539233fd629fea77a7fe5ffb158619d8c7)) -- **com-pwa:** build issue ([3b51506](https://github.com/AliMD/alwatr/commit/3b51506fdbfd1d8e586e7cca60f39d2d17980cb5)) -- **com-pwa:** card for form ([accd4fb](https://github.com/AliMD/alwatr/commit/accd4fb3a9998115769f4c2c6e6559a2c5ecbe2b)) -- **com-pwa:** content order links ([e6fc81f](https://github.com/AliMD/alwatr/commit/e6fc81f30cb35773dd3c8e602fbf524edb61eb88)) -- **com-pwa:** context duplicate name ([a20603e](https://github.com/AliMD/alwatr/commit/a20603e1aca084647ba6ea88f606b7409b22646f)) -- **com-pwa:** director imports ([8523674](https://github.com/AliMD/alwatr/commit/852367438c746b726b79cfc744d4cb83555cc5e7)) -- **com-pwa:** extra UnresolvedMixin ([ae12d9b](https://github.com/AliMD/alwatr/commit/ae12d9bfdea9390549ab92a94d4d3e4ac9c962cd)) -- **com-pwa:** form ([6137da1](https://github.com/AliMD/alwatr/commit/6137da1243d574749af025cdafa23ecee2911fd1)) -- **com-pwa:** home top-app-bar icons ([66c726c](https://github.com/AliMD/alwatr/commit/66c726c88902621a69591d3bec1919661be39705)) -- **com-pwa:** home-page content ([031e1cb](https://github.com/AliMD/alwatr/commit/031e1cb483b53100857dabcea3205b810a3e2324)) -- **com-pwa:** imports path ([cff96f9](https://github.com/AliMD/alwatr/commit/cff96f9b0ab69fa8d3f7e4b65e6b2ecebe342afa)) -- **com-pwa:** order form page top-app-bar headline ([abf2bc1](https://github.com/AliMD/alwatr/commit/abf2bc1d79290c26626940344f6a4d325437f113)) -- **com-pwa:** order list and detail state issues ([00752a6](https://github.com/AliMD/alwatr/commit/00752a6b0adb95c285bc419dfded711a174aeed9)) -- **com-pwa:** order list state machine issues ([a9524b1](https://github.com/AliMD/alwatr/commit/a9524b130819327b10543eb67ba25330f8f37406)) -- **com-pwa:** order shipping key ([b6c75b0](https://github.com/AliMD/alwatr/commit/b6c75b0ed873750be97e6b67e070a70fc4ede3c3)) -- **com-pwa:** order shipping key ([c9cb4f7](https://github.com/AliMD/alwatr/commit/c9cb4f7ac24006ee7c041198e126e3d906d509f2)) -- **com-pwa:** order status key ([a4f8338](https://github.com/AliMD/alwatr/commit/a4f83382434622fb16bdf053bf6c6b79b0e82737)) -- **com-pwa:** page detail ([3b49c50](https://github.com/AliMD/alwatr/commit/3b49c503592633c0f3262451f78b68e8c29f38c1)) -- **com-pwa:** page order list layout ([3b8e836](https://github.com/AliMD/alwatr/commit/3b8e836b87535294ef4144541a007a5d58458131)) -- **com-pwa:** remove deselect product from itemList ([83e5ea6](https://github.com/AliMD/alwatr/commit/83e5ea6dce2f56f7ef678316d33467aebfd4c9d1)) -- **com-pwa:** remove disabled attribute on deselect ([dbb89b3](https://github.com/AliMD/alwatr/commit/dbb89b3b0256e66e23a596d369b8351f621a6d23)) -- **com-pwa:** remove item on deselect ([086e7c6](https://github.com/AliMD/alwatr/commit/086e7c6fd35e926648bd283a377ccbb401f9abd2)) -- **com-pwa:** remove order list page content! ([855c547](https://github.com/AliMD/alwatr/commit/855c5477b579bb8f22064ee9ed275113eea7f734)) -- **com-pwa:** remove reset form on submit ([f5cac63](https://github.com/AliMD/alwatr/commit/f5cac63135d9a43e574ca003b8690ddb2d2dcd8d)) -- **com-pwa:** remove tracking button on submit success state ([6021c0a](https://github.com/AliMD/alwatr/commit/6021c0ac6347e82c90990782bca649ff6fb2694e)) -- **com-pwa:** request-redirect for shipping page ([4a421e5](https://github.com/AliMD/alwatr/commit/4a421e5e153fe1ca602e5e926d83654053754f56)) -- **com-pwa:** review ([ba664de](https://github.com/AliMD/alwatr/commit/ba664deb284961ade2deb665d454adfa8d2b7090)) -- **com-pwa:** review ([b1fc421](https://github.com/AliMD/alwatr/commit/b1fc4218410d83792c0791b4f627f4e0dccef72f)) -- **com-pwa:** review ([8c1b2aa](https://github.com/AliMD/alwatr/commit/8c1b2aac3288eac5259aef4a4a79cb7bb5107d3e)) -- **com-pwa:** review ([c77a79e](https://github.com/AliMD/alwatr/commit/c77a79e26755cddb105cc7018e9c981af46aec7a)) -- **com-pwa:** send deliver property odf order in form ([9b1d142](https://github.com/AliMD/alwatr/commit/9b1d142753f0b9c2ef55e08eb938ea9ee4aac9ea)) -- **com-pwa:** set localStorage shippingInfo value in undefined shippingInfo ([a23dcfd](https://github.com/AliMD/alwatr/commit/a23dcfdc98412576380172504839fc020792381f)) -- **com-pwa:** set name prop ([8d18120](https://github.com/AliMD/alwatr/commit/8d1812059d1870e4c0d6fb196322ce6136e9e476)) -- **com-pwa:** sub routing issues ([a77eeb8](https://github.com/AliMD/alwatr/commit/a77eeb8d968bc382f0bd54ba267e36f8887840b4)) -- **com-pwa:** submit form director ([62df659](https://github.com/AliMD/alwatr/commit/62df65959b60ea30708ff60b5fd836e67e58522e)) -- **com-pwa:** submit-order-shipping command ([164ad7c](https://github.com/AliMD/alwatr/commit/164ad7c54101dea0ce412de97e996a09ad5e84a0)) -- **com-pwa:** update based other packages ([d0a96e9](https://github.com/AliMD/alwatr/commit/d0a96e93f542ce0c9f5863f60fefdd09c3d00e2f)) -- **com-pwa:** use state.to ([b72baea](https://github.com/AliMD/alwatr/commit/b72baea8a073e58621998acfe90fb701566cfed8)) -- **com-pwa:** validate form ([d0cb51a](https://github.com/AliMD/alwatr/commit/d0cb51a70ec33a68703e0bbc178eb925d2ed174c)) -- **com-pwa:** web-dev-server config ([67963a1](https://github.com/AliMD/alwatr/commit/67963a1f84f50a08b98dbd284a0d26c670d6ab96)) -- configs ([00f85f5](https://github.com/AliMD/alwatr/commit/00f85f525f07334544cc9e007c49f2343ba8cec3)) -- **demo-pwa:** remove page products ([6790010](https://github.com/AliMD/alwatr/commit/679001038141837fb45caed56d685b4c718dc58b)) -- **demo/fsm:** context object ([1fa8aac](https://github.com/AliMD/alwatr/commit/1fa8aac30ca6b1e15fd29309384466962b4b9f64)) -- **demo/math:** remove getClientId ([8be5a4a](https://github.com/AliMD/alwatr/commit/8be5a4a5c85c1129387667f4f6ceab56ebfb97e6)) -- **element/router-mixin:** prevent to duplicate first render ([453403e](https://github.com/AliMD/alwatr/commit/453403e8d42902ff2fe5391513dbecb8cc8a9948)) -- **element:** null able mapIterable items ([7bb7f01](https://github.com/AliMD/alwatr/commit/7bb7f01a5381389a9264005927e460725e4db842)) -- **element:** router mixin error ([c890b69](https://github.com/AliMD/alwatr/commit/c890b69feb6f7ea68d1a565bf9fadb55a55da90e)) -- **element:** state machine tender names ([c9b806a](https://github.com/AliMD/alwatr/commit/c9b806a983f38f7c438f709b8929f23d9c8164fb)) -- **fetch:** fetchContext duplicate setSignalValue ([8aa9b00](https://github.com/AliMD/alwatr/commit/8aa9b003a2d7b7ffc8243ff7092d9560763d7273)) -- **fetch:** getClientId in nodejs ([c99e41c](https://github.com/AliMD/alwatr/commit/c99e41c9e9a979ca50cc01aeb5371a3487d9da2e)) -- **ff-api:** imports path ([cdb0a51](https://github.com/AliMD/alwatr/commit/cdb0a51726da71efa511928cb8e7549132184eda)) -- **ff-pwa:** current year ([4f70ad2](https://github.com/AliMD/alwatr/commit/4f70ad25d21144cc38c21d81acf8b4e8d8f986c2)) -- **fsm:** demo ([079abf9](https://github.com/AliMD/alwatr/commit/079abf9b46bd0a271a30b942dcb0405993010be6)) -- **fsm:** every signal mather ([0dc504d](https://github.com/AliMD/alwatr/commit/0dc504dacbb1ec68f154244619d644ff8e43cc04)) -- **fsm:** remove additional import ([231337b](https://github.com/AliMD/alwatr/commit/231337b95ee7b046fe35429f50931ddf85be291f)) -- **fsm:** update context in transition bug ([28a21d0](https://github.com/AliMD/alwatr/commit/28a21d00d903b6189d814303c72ba6e784852f33)) -- **icon:** fill color ([fa1c280](https://github.com/AliMD/alwatr/commit/fa1c280e0385f3acbf456204f47d6e627371e130)) -- **icon:** fix all svg currentcolor ([f06c795](https://github.com/AliMD/alwatr/commit/f06c795f36c5b05c8c2e17e8b80e1e5dd72613c6)) -- **icon:** vertical-align style ([d449498](https://github.com/AliMD/alwatr/commit/d4494981d00a46aa512b6d892286f9f24aeaa0ff)) -- **math:** remove getClientId ([b5894d6](https://github.com/AliMD/alwatr/commit/b5894d6cf75798d35773dcc048e9dd21fa44199d)) -- **new-order:** scrollToTop issue ([d4f108f](https://github.com/AliMD/alwatr/commit/d4f108f37c3ee575b5b0248a89c036bf695ae984)) -- **new-order:** transitions ([c2f51e9](https://github.com/AliMD/alwatr/commit/c2f51e9b2707c01b899f0e583c9979edc64eab22)) -- **pwa-helper:** build banner ([359fe73](https://github.com/AliMD/alwatr/commit/359fe73eec0fa50299b07525684e4a5fa84cd3a6)) -- **pwa-helper:** dereference on copy ([7bd54eb](https://github.com/AliMD/alwatr/commit/7bd54eb775708ea625406268aa47735e7eb1f4a5)) -- **pwa-helper:** getConfKey type ([0b8901c](https://github.com/AliMD/alwatr/commit/0b8901cc74ba54d81b740a21b29e439513cc2a45)) -- **pwa-helper:** pwa version ([5a35f00](https://github.com/AliMD/alwatr/commit/5a35f00ec452726cb63f81e02d1387453af30ae8)) -- **router:** add \_routeContextUpdated to interface ([72865b8](https://github.com/AliMD/alwatr/commit/72865b808db4c2267dac07347e26dc8914f7c3f0)) -- **router:** home page for sub page routes ([af737f3](https://github.com/AliMD/alwatr/commit/af737f3451fd057f0a2a574be05c34bd06c0f7c0)) -- **router:** make url from router respect empty sectionList ([1fb62f7](https://github.com/AliMD/alwatr/commit/1fb62f774bf5e9e6b68c04d756b32177697e55e8)) -- **signal:** NextCycle with own detail ([01f3c79](https://github.com/AliMD/alwatr/commit/01f3c79500927f6384a33abcc9b0cb2355794b3e)) -- **signal:** nodejs compatibility ([69d8a60](https://github.com/AliMD/alwatr/commit/69d8a60ad64d44ee7c3ced002e702f13408a5a50)) -- **signal:** requestableContextConsumer bind issue ([66467f6](https://github.com/AliMD/alwatr/commit/66467f6e5681d84d7f2e0b353206d4bb579b26f2)) -- **signal:** requestContext dispatch issue ([e937ebd](https://github.com/AliMD/alwatr/commit/e937ebd3a90fc6a9946f5c35ef4f6f40b6ab4b00)) -- **soffit-pwa:** dependencies ([8bc3eee](https://github.com/AliMD/alwatr/commit/8bc3eeebb7e04ca9041239d545db3804268f2282)) -- **soffit-pwa:** deploy env ([91d1594](https://github.com/AliMD/alwatr/commit/91d1594e0b3081ab0a460fd34f2b5cb58b7e2628)) -- **soffit-pwa:** import path ([ed03cf9](https://github.com/AliMD/alwatr/commit/ed03cf99e413e6060fad1215bafd86f97e127caa)) -- **soffit-pwa:** issues ([09f0b8a](https://github.com/AliMD/alwatr/commit/09f0b8a0fcfff37ee1e163fd679a3fc4830e90a8)) -- **soffit-pwa:** product-storage-context-provider snackbar message ([9f2fb60](https://github.com/AliMD/alwatr/commit/9f2fb60955f9825de5fc6e5bd7429db9abaaae61)) -- **soffit-pwa:** remove some import ([efb1af9](https://github.com/AliMD/alwatr/commit/efb1af99ba760aba723d11cc9e5c9b5a8df9a792)) -- **soffit-pwa:** set name prop ([2ddb008](https://github.com/AliMD/alwatr/commit/2ddb008510438f9e80642ae72eb28df796629fb6)) -- **soffit-pwa:** set value on radio group option ([17a691a](https://github.com/AliMD/alwatr/commit/17a691ae702400982f56e0167483066e4b34c251)) -- **soffit, com:** tint and elevate ([cb49f18](https://github.com/AliMD/alwatr/commit/cb49f18ecd9ea57918f54a513627e1cb9a58afa6)) -- **soffit:** home page logo ([95868da](https://github.com/AliMD/alwatr/commit/95868da89b55df0f8a46e2dd28ce743542a72d22)) -- **telegram-notifier:** escaping special characters on sendMessage ([5507d6d](https://github.com/AliMD/alwatr/commit/5507d6dd460201979b7ee3bb1ae255e572b7cf0d)) -- **text-field:** make it inline ([72320b7](https://github.com/AliMD/alwatr/commit/72320b74608902c1ee9525b5b93e3774732d7492)) -- **top-app-bar:** style shrink ([a398821](https://github.com/AliMD/alwatr/commit/a398821690ae6d81814b5920a3d4496ccef5fe32)) -- **type:** com orderStatusCS ([b789640](https://github.com/AliMD/alwatr/commit/b789640b01165e403e9e12a014c9c777b61689b7)) -- **type:** export user and photo ([27e352e](https://github.com/AliMD/alwatr/commit/27e352e231aed966d4d049cc2f1f93781f386952)) -- **ui-kit/button:** elevated ([2865804](https://github.com/AliMD/alwatr/commit/2865804b6c5970492ef490deba9f867ed5eddad5)) -- **ui-kit/chat:** footer icon button height ([8353fbc](https://github.com/AliMD/alwatr/commit/8353fbcec9cd2f982468ebf2bd949a76cb8f5e1d)) -- **ui-kit:** clean olds ([5afe3fa](https://github.com/AliMD/alwatr/commit/5afe3fa506e5a1301cbbda9a54ab7992947122aa)) -- **ui-kit:** rename signalId to clickSignalId ([d8addc7](https://github.com/AliMD/alwatr/commit/d8addc7776e2f002f81207d6bcdc1c28d1568400)) -- **ui/icon-button:** remove bind \_click ([b678434](https://github.com/AliMD/alwatr/commit/b6784340e8dc669fe8b572c3d8c4fdb604f2f42a)) -- **ui/product-card:** toman icon ([8a6ddae](https://github.com/AliMD/alwatr/commit/8a6ddae2000639223d505fc67cf2d5f3738fa80e)) -- **ui/text-field:** width problem ([baf53a2](https://github.com/AliMD/alwatr/commit/baf53a279e311dba91bfbf029744993c8f8754e4)) -- **ui:** surface tinted attrib ([56310b0](https://github.com/AliMD/alwatr/commit/56310b04734d51841863cd03eb37e3b5c51957fc)) -- **validator:** change ValidType to StringifyableRecord ([ca1e191](https://github.com/AliMD/alwatr/commit/ca1e19166edfd206a3901a2a3390d4be3daaa7bc)) - -### Features - -- Alwatr Finite State Machines ([d5900b4](https://github.com/AliMD/alwatr/commit/d5900b4ee8685b120188888871405853f5a69417)) -- **button:** add icon ([476a14f](https://github.com/AliMD/alwatr/commit/476a14fea2cbab4bef5b0fd764fa83e82784c358)) -- **button:** add signalId for click event ([fdde714](https://github.com/AliMD/alwatr/commit/fdde714b40ca24526d60f7c590dcce3861e4a97d)) -- **button:** click signal with detail ([03c2dc1](https://github.com/AliMD/alwatr/commit/03c2dc1e64562815505b468c761ac245554470ed)) -- **button:** icon style ([11b736d](https://github.com/AliMD/alwatr/commit/11b736d8c518ff773e2dcb4ab34e8a20641960ff)) -- **cloud/deploy:** backup command and up -b switch ([44865af](https://github.com/AliMD/alwatr/commit/44865af7ff32499234587580bfd177c78266e376)) -- **cloud/wp:** optimize nginx ([2d844d1](https://github.com/AliMD/alwatr/commit/2d844d16f1cbeeb37b2ef5d002d1f2447f017367)) -- **cloud:** deploy com pwa ([63201ce](https://github.com/AliMD/alwatr/commit/63201ce69dfdaf4daaa0dfece168a120b7a03b58)) -- **com-api:** add product route ([487a2c0](https://github.com/AliMD/alwatr/commit/487a2c0fa46933ce8efa9325fbc6802e372ff236)) -- **com-api:** admin token on deployment ([ad07d9c](https://github.com/AliMD/alwatr/commit/ad07d9c6cc35a5bb6f88576355b4ff113da2c700)) -- **com-api:** change api in demo.http ([b9d2602](https://github.com/AliMD/alwatr/commit/b9d2602fbf11fa5316276a990e6fc271ed8120f2)) -- **com-api:** enhance config with prefixes ([2cd9443](https://github.com/AliMD/alwatr/commit/2cd944345f2bfab09f8dddd4596442290adad960)) -- **com-api:** get price list route ([39d870b](https://github.com/AliMD/alwatr/commit/39d870b1bc7c30a6a9cd2e1f5f79db3860b6ac8b)) -- **com-api:** multi storage support for product route ([0979d42](https://github.com/AliMD/alwatr/commit/0979d42c6516781b645ded1c004f74b82ac4b82a)) -- **com-api:** patch price list route ([df60e91](https://github.com/AliMD/alwatr/commit/df60e91433b3457860b0a08bb62616372291dfeb)) -- **com-api:** review and update all routes ([957eca9](https://github.com/AliMD/alwatr/commit/957eca96a8c8a64cbd7775c460b587424d103b48)) -- **com-api:** seprate http file for add product ([fd9bb5e](https://github.com/AliMD/alwatr/commit/fd9bb5e6696621619df6bd8f96b051f811f13381)) -- **com-pwa/new-order-controller:** reset order on submit success ([824c652](https://github.com/AliMD/alwatr/commit/824c6522db09ff977fdc41c06eaa85ecaa89e695)) -- **com-pwa/new-order-controller:** retry state ([6c1712f](https://github.com/AliMD/alwatr/commit/6c1712fe35359671438f23bca1654b71cb8cd62a)) -- **com-pwa/new-order:** submit btn, editable qty, enhance template ([982586d](https://github.com/AliMD/alwatr/commit/982586de9ad8ae0ff6633dc26676988f73f897fd)) -- **com-pwa/order-list:** reloading ([95f2596](https://github.com/AliMD/alwatr/commit/95f25963217a0876d2df44817512d23dd979a890)) -- **com-pwa/order-list:** use order-list ([0dd425f](https://github.com/AliMD/alwatr/commit/0dd425f5f921f66b91034023862efcea7288be32)) -- **com-pwa:** add cdn to config ([fc60912](https://github.com/AliMD/alwatr/commit/fc6091293fbb74129a31a70c88acd7bf21347c51)) -- **com-pwa:** add chat to tracking page ([c191e09](https://github.com/AliMD/alwatr/commit/c191e09a91de9cdef25f4ea44c357b309613c661)) -- **com-pwa:** add order prop to all order pages ([feef5cf](https://github.com/AliMD/alwatr/commit/feef5cfa2bfa08cc09c3a7341b9a36ae446b0803)) -- **com-pwa:** add order tracking to route ([7ba7084](https://github.com/AliMD/alwatr/commit/7ba7084d169c4a5ec296777d2e60d2168b92eef4)) -- **com-pwa:** add product button ([42e618e](https://github.com/AliMD/alwatr/commit/42e618ecaa51d4c187c08f13196dfd612d1494af)) -- **com-pwa:** add shipping form element ([032dd9e](https://github.com/AliMD/alwatr/commit/032dd9e5f08796ae23b505347acf27c56abf5da1)) -- **com-pwa:** app-footer element ([8aabb78](https://github.com/AliMD/alwatr/commit/8aabb780e1890127d5340b01df95e132f1fae7c8)) -- **com-pwa:** carType/ladingType ([94a2e96](https://github.com/AliMD/alwatr/commit/94a2e969465c20f7b52b7f18050b9ae0d3fec62d)) -- **com-pwa:** central context.ts ([37e3c93](https://github.com/AliMD/alwatr/commit/37e3c93a54f0ef9d77482904df5262be4c2ed22e)) -- **com-pwa:** Customer Order Management PWA ([1757dd7](https://github.com/AliMD/alwatr/commit/1757dd761b1d275f56c0b93657470aad98dfbbe5)) -- **com-pwa:** define PRODUCT_STORAGE_LIST in deploy ([c1ce157](https://github.com/AliMD/alwatr/commit/c1ce157c1cb4069fad1c3b7c146fc63240830e75)) -- **com-pwa:** dynamic product storage ([b8458b8](https://github.com/AliMD/alwatr/commit/b8458b8867f983ff3da5163176e936f0d11987a8)) -- **com-pwa:** enhance director context provider ([a5dd2ae](https://github.com/AliMD/alwatr/commit/a5dd2aefeff3cb42685f55a7374807d28432ee8b)) -- **com-pwa:** enhance order-storage-context-provider ([6f4a147](https://github.com/AliMD/alwatr/commit/6f4a147240398fa90a283cfc84b6e5caf0f4843a)) -- **com-pwa:** enhance page order ([8ff9467](https://github.com/AliMD/alwatr/commit/8ff946766ddb65c158ce3187a2047f2d1652a53e)) -- **com-pwa:** enhance page order ([1ee533d](https://github.com/AliMD/alwatr/commit/1ee533d2bcb9d408a96df6e0aa52e198ce9f005c)) -- **com-pwa:** enhance shipping form ([42c91c8](https://github.com/AliMD/alwatr/commit/42c91c825068e356219d314f753476c63df00681)) -- **com-pwa:** enhance styles and layout ([38dee69](https://github.com/AliMD/alwatr/commit/38dee6908229b3ffe3c67dd419a29aaeaf9bfc76)) -- **com-pwa:** fetchProductStorage ([b320ac7](https://github.com/AliMD/alwatr/commit/b320ac7f433607d13582436b08950630ba9eef44)) -- **com-pwa:** fun submit fake data ([73b2de7](https://github.com/AliMD/alwatr/commit/73b2de7c37b6246889cc32e2ae107f25cfbd50e7)) -- **com-pwa:** home 404 layout ([7102eb3](https://github.com/AliMD/alwatr/commit/7102eb3bf3062a00090e3edb33fd87f792d6f94d)) -- **com-pwa:** home page layout ([87ad473](https://github.com/AliMD/alwatr/commit/87ad473f8cb4081853c73e2b998151b43d2df112)) -- **com-pwa:** improve page-404 render ([258bd0f](https://github.com/AliMD/alwatr/commit/258bd0fc2d282b3e058c9386ce8efa53f05cc3bf)) -- **com-pwa:** improve page-home render ([ffbbf36](https://github.com/AliMD/alwatr/commit/ffbbf365486043b3f778acd18895510605b3e7ab)) -- **com-pwa:** item detail template ([93fbdc0](https://github.com/AliMD/alwatr/commit/93fbdc006a575464c09d85368587397178046eb5)) -- **com-pwa:** logging product and order storage ([34db8fe](https://github.com/AliMD/alwatr/commit/34db8fe8c1f724942968ebbea2d83fafbd58a2ca)) -- **com-pwa:** logs and debug ([37af34a](https://github.com/AliMD/alwatr/commit/37af34a1adcafcf18920e74665b583e9d3d36ba8)) -- **com-pwa:** make page-order-list state machine ([767bcfc](https://github.com/AliMD/alwatr/commit/767bcfce14e0f156b264db8457d2722e7627242e)) -- **com-pwa:** manifest screenshots ([a060fb5](https://github.com/AliMD/alwatr/commit/a060fb518a926890dba865f9e758fff0a20a98ef)) -- **com-pwa:** new order detail controller ([7d9d4a1](https://github.com/AliMD/alwatr/commit/7d9d4a1b8ca38f56ed6b81118f520bb22b0549c7)) -- **com-pwa:** new order detail page ([6ac0445](https://github.com/AliMD/alwatr/commit/6ac04452ddc45bf8ea9f1b47f1639c063102f0fd)) -- **com-pwa:** new order routing and sub pages ([4fb93fb](https://github.com/AliMD/alwatr/commit/4fb93fbd5e3258d30b82fa512a0c15d5961f3a68)) -- **com-pwa:** new order shipping form ([ae39f92](https://github.com/AliMD/alwatr/commit/ae39f92e7897874ba896e9904044a46dfc23509c)) -- **com-pwa:** new page order-list with state machine ([c1d8b2e](https://github.com/AliMD/alwatr/commit/c1d8b2e0d35af38ecca3c7fbc1b4a0331c35685e)) -- **com-pwa:** new page product list ([2a26f04](https://github.com/AliMD/alwatr/commit/2a26f04f48e5da97878a090ea5fbac0c721fa213)) -- **com-pwa:** new page-order-list template ([21fe891](https://github.com/AliMD/alwatr/commit/21fe891e60593cc41683d18d270e015efd716306)) -- **com-pwa:** new select product ([04d9a14](https://github.com/AliMD/alwatr/commit/04d9a140220cb45b39b31a8d78af6b3434b20fa1)) -- **com-pwa:** new shipping form data model ([43ab69f](https://github.com/AliMD/alwatr/commit/43ab69f68f5ac885ee1c313929f5fc9ae4c1795b)) -- **com-pwa:** new-order controller ([db453c0](https://github.com/AliMD/alwatr/commit/db453c0aaa4521a4c0864d1b2b5df32c11533196)) -- **com-pwa:** order detail contexts ([2d94ed3](https://github.com/AliMD/alwatr/commit/2d94ed32f646556c407841219d117a0b80e1df59)) -- **com-pwa:** order detail review and fix issues ([ceacba2](https://github.com/AliMD/alwatr/commit/ceacba2b898bbb7601757a9e81eb311d4285125f)) -- **com-pwa:** order form ([8cb6ec0](https://github.com/AliMD/alwatr/commit/8cb6ec02637f06aaa2c7bada671625e0e54bdae4)) -- **com-pwa:** order form page ([c8faad9](https://github.com/AliMD/alwatr/commit/c8faad99c77c336c2a16788938cd9bba74827c4e)) -- **com-pwa:** order list page ([0c7ba38](https://github.com/AliMD/alwatr/commit/0c7ba383f3a62b32118194c9f27f8349583061ba)) -- **com-pwa:** order list page content ([a7d4557](https://github.com/AliMD/alwatr/commit/a7d455716ac0262a22fe16a88a880eb12c9f7df7)) -- **com-pwa:** order list page content provider ([5ca3eb0](https://github.com/AliMD/alwatr/commit/5ca3eb0e86baaa4c189f6f5d5a22d315ff10a1f3)) -- **com-pwa:** order shipping command handler command ([0193b3e](https://github.com/AliMD/alwatr/commit/0193b3e1c7d6847a525e8d8e5a2785b85922f774)) -- **com-pwa:** order shipping form buttons ([10be96b](https://github.com/AliMD/alwatr/commit/10be96bc01d9c07eaa70fda01cd0939300272adf)) -- **com-pwa:** order storage context provider director ([cf363a2](https://github.com/AliMD/alwatr/commit/cf363a21e2008fa87a1c900443e12111bf525190)) -- **com-pwa:** order tracking state controller ([8967389](https://github.com/AliMD/alwatr/commit/8967389abf93b4e4c32d3e929737d747cf4dbe54)) -- **com-pwa:** order-item-box element ([20530de](https://github.com/AliMD/alwatr/commit/20530def22c9fff26614bbb58a63289fc3ed29bb)) -- **com-pwa:** order-list element ([333b1c7](https://github.com/AliMD/alwatr/commit/333b1c77c62fa4fbff0fc684a22df1fa5f48b15b)) -- **com-pwa:** page 404 ([b3411a3](https://github.com/AliMD/alwatr/commit/b3411a34248c4163da943c51cf9883987e97fce6)) -- **com-pwa:** page new-order element ([ae821e6](https://github.com/AliMD/alwatr/commit/ae821e6edc6f597c3ebd667d75b7dfea6d62eaec)) -- **com-pwa:** page order detail ([ccaa371](https://github.com/AliMD/alwatr/commit/ccaa371db389e69a2a75fbfe6ac633ccb4c64728)) -- **com-pwa:** page order product done btn ([f25e479](https://github.com/AliMD/alwatr/commit/f25e4798f2b82b0303cfe53bb958ba4498ec9b7a)) -- **com-pwa:** page order tracking ([02008b5](https://github.com/AliMD/alwatr/commit/02008b52f96da1db425ec96d4a20c98e0e03ac77)) -- **com-pwa:** price list ([38bb0b4](https://github.com/AliMD/alwatr/commit/38bb0b45621861dba6f97d0b2853ad5becab4bc1)) -- **com-pwa:** product detail ([601eef0](https://github.com/AliMD/alwatr/commit/601eef064e2a12eb0950ab84863a7322edc1f699)) -- **com-pwa:** product detail card ([9d4d680](https://github.com/AliMD/alwatr/commit/9d4d680577970a6e0bcf365f13fe9efd2522b338)) -- **com-pwa:** product-storage-context-provider ([4ae2c44](https://github.com/AliMD/alwatr/commit/4ae2c445cd380621f200f1595587e631677c43cf)) -- **com-pwa:** pwa structure with home page ([37831ee](https://github.com/AliMD/alwatr/commit/37831eeca00f8b256c1cf10f107ea51f4cb99d90)) -- **com-pwa:** remove order form card in home page ([a56dca2](https://github.com/AliMD/alwatr/commit/a56dca28daf62548084a56b892fcd02368a189c2)) -- **com-pwa:** review product-storage-context-provider ([7a70abd](https://github.com/AliMD/alwatr/commit/7a70abd55814350bfc3eefa87d09b7cef40b1e51)) -- **com-pwa:** save shipping info in localStorage ([7255b3f](https://github.com/AliMD/alwatr/commit/7255b3f913ce8fe6c567e4d09854b1b4e9402a16)) -- **com-pwa:** select product and add to order ([6c3e18b](https://github.com/AliMD/alwatr/commit/6c3e18b38de4124c86b72e918bef2796d0e20fe6)) -- **com-pwa:** separate fetchPriceStorage ([51085d6](https://github.com/AliMD/alwatr/commit/51085d62514123105797abeb0f78cc29963684ae)) -- **com-pwa:** set default value on shipping form ([bbcdfcb](https://github.com/AliMD/alwatr/commit/bbcdfcbed84384711e1d6d81e0173106704d502d)) -- **com-pwa:** set order provider ([279fc85](https://github.com/AliMD/alwatr/commit/279fc85da1a33752dd66ea85fb33cc030a4878da)) -- **com-pwa:** snackbar message on l18r ([8031682](https://github.com/AliMD/alwatr/commit/8031682017512875d1fc80259a09f8cec3c4b287)) -- **com-pwa:** static resources ([7f3bc32](https://github.com/AliMD/alwatr/commit/7f3bc32b42ec2f50b1055dde26a30c5c917dce50)) -- **com-pwa:** submit order command ([7fd4be0](https://github.com/AliMD/alwatr/commit/7fd4be05f7efa1c8827303892f5ef0cb01274913)) -- **com-pwa:** submit-order-command ([8aa6e8f](https://github.com/AliMD/alwatr/commit/8aa6e8fade82367830953010c56f50ef327c8cb5)) -- **com-pwa:** submitting, submitSuccess, submitFailed state ([3cdb30d](https://github.com/AliMD/alwatr/commit/3cdb30df6945fbe20f54866b558d1a777bce64c4)) -- **com-pwa:** update l18r ([088d37b](https://github.com/AliMD/alwatr/commit/088d37baf0f3a77aff636952a7e119e0e8ba0ccf)) -- **com-pwa:** use text-area ([2f7adac](https://github.com/AliMD/alwatr/commit/2f7adaca7b6f02cbbdc6b761264e7b3fe2fb76b3)) -- **com-pwa:** use unresolved mixin ([7ad34bc](https://github.com/AliMD/alwatr/commit/7ad34bc8309d2c79d756695824c7c1087b2bc57e)) -- **com-pwa:** user-context-provider ([8ee2f44](https://github.com/AliMD/alwatr/commit/8ee2f4444fd5d3664cd798c3e0358d742e794ec4)) -- **cop-api:** requireToken ([d1e3c61](https://github.com/AliMD/alwatr/commit/d1e3c617954eaa125afb20e1b22c9e3f7f69721b)) -- **demo:** fsm light machine ([fe168e3](https://github.com/AliMD/alwatr/commit/fe168e373fa0463124acb5f9b3bf971d1d64a596)) -- **element/fsm:** add render_unresolved, render_resolving ([5b8674c](https://github.com/AliMD/alwatr/commit/5b8674cd15558280bf2ad3d39bcd2ab89ab72508)) -- **element/state-machine-mixin:** add stateUpdated method ([d599282](https://github.com/AliMD/alwatr/commit/d599282c4056cafa3e68817e4697c11721ccf09b)) -- **element/StateMachineMixin:** reflect state to host attrib ([b054b50](https://github.com/AliMD/alwatr/commit/b054b5052b8ce452470e80838cdd49c26fdc533b)) -- **element/toggle:** selected property ([5d6c0a9](https://github.com/AliMD/alwatr/commit/5d6c0a9e08abe933932943c842a0d6766a311076)) -- **element:** add live directive ([4a95b0f](https://github.com/AliMD/alwatr/commit/4a95b0fef0e3c3fdc3a79396e7c8f749d0e380f3)) -- **element:** mapIterable, mapObject directives ([8958655](https://github.com/AliMD/alwatr/commit/89586552a9294b167462d025080e1b93c9088845)) -- **element:** router mixin ([5e80f82](https://github.com/AliMD/alwatr/commit/5e80f82882e930675e15ecc0448e7451708a36d5)) -- **element:** StateMachineMixin ([b395b79](https://github.com/AliMD/alwatr/commit/b395b795e4d115fd74632e25a4373db2c36fdad0)) -- **element:** toggle mixin ([5140b22](https://github.com/AliMD/alwatr/commit/5140b226f5b8330f2e930f3e125d73a0c6791b90)) -- **element:** UnresolvedMixin ([4a1c89a](https://github.com/AliMD/alwatr/commit/4a1c89aa41d7479b5b9f8e33252a11e5d372206c)) -- es bench ([a6ec86b](https://github.com/AliMD/alwatr/commit/a6ec86bc71dba2aec4dc6c4b42a64af75bb2b012)) -- **fetch:** enhance fetchContext with dispatchOptions and only cache_only request in first time ([1f6b575](https://github.com/AliMD/alwatr/commit/1f6b575437104d64ede8a2c23d141160360d2cd5)) -- **fetch:** fetchContext ([d63d17e](https://github.com/AliMD/alwatr/commit/d63d17ecb58221159dc45a473fdd1c992d306d2b)) -- **fetch:** fetchContext skip online request when offline ([7c2b649](https://github.com/AliMD/alwatr/commit/7c2b6491f78acb961cdc0583112e3c709a177b79)) -- **fetch:** fetchContext work on background ([2e12bfd](https://github.com/AliMD/alwatr/commit/2e12bfde0a0636c30e60906c4812ec66b2d36742)) -- **fetch:** handle offline for all requests ([6a8d7b7](https://github.com/AliMD/alwatr/commit/6a8d7b7159732d834be052191935580331e36962)) -- **fsm:** $all and $self state ([69adf41](https://github.com/AliMD/alwatr/commit/69adf41064ca0f55497484c50e298ebc26c42dcc)) -- **fsm:** enhance types ([3b13046](https://github.com/AliMD/alwatr/commit/3b130463a102f59c38603b0de470be5c87ee88c9)) -- **fsm:** make simple state machine ([ff9ae1c](https://github.com/AliMD/alwatr/commit/ff9ae1ca04156e8b811899ff0f62480e1c37af72)) -- **fsm:** new state context type with {to, from, by} ([11423e6](https://github.com/AliMD/alwatr/commit/11423e6a89159b92e82cfd1e774ad37983581090)) -- **fsm:** rewrite with signal power ([01a1651](https://github.com/AliMD/alwatr/commit/01a1651e231a817d5eebb54cf84d51d620bfd6e8)) -- **fsm:** share state events ([de42522](https://github.com/AliMD/alwatr/commit/de42522a97fdf6be8bee73d91a35820e2a5e6efb)) -- **fsm:** transition with partial context set ([823377e](https://github.com/AliMD/alwatr/commit/823377e65028ea3e713f060ae678776c609c1661)) -- **i18n:** l18eReadyPromise ([85c7570](https://github.com/AliMD/alwatr/commit/85c7570d71c3d5b9ec87b0e357ecf41f47f96227)) -- **i18n:** make number with fixed decimal ([86e60ec](https://github.com/AliMD/alwatr/commit/86e60ec4c89b8bd485bd32674df286885366ee1b)) -- **i18n:** optional number args ([b571385](https://github.com/AliMD/alwatr/commit/b5713853a035e78b06bd4b97cb703e74de0e86ce)) -- **i18n:** work background without delay ([2876d00](https://github.com/AliMD/alwatr/commit/2876d009a96e586544fa00798ec35574209ae2a9)) -- **icon-box:** headline ellipsis overflow ([935b49b](https://github.com/AliMD/alwatr/commit/935b49b50b947af3cc5b1e39123d6c05de05eabf)) -- **icon-box:** tinted ([436f989](https://github.com/AliMD/alwatr/commit/436f98960a6ea89be6153e9122ce94c20220332d)) -- **icon-button:** IconButtonContent.disabled ([a6c1ee9](https://github.com/AliMD/alwatr/commit/a6c1ee985d9e20bfd6f2586dade27f394fac35e0)) -- **icon:** add toman icon ;) ([fbebf5b](https://github.com/AliMD/alwatr/commit/fbebf5b5051fc92c634455bb1ba6e5447720bbe1)) -- **icon:** update and compress all icons ([8ded731](https://github.com/AliMD/alwatr/commit/8ded731ef6da34a1f66d1fce80a92c77929b8144)) -- **logger:** export isBrowser ([5b5be8b](https://github.com/AliMD/alwatr/commit/5b5be8b2312ca67f186d1614506423f1fdb90877)) -- **math:** calcDiscount ([ac7c18b](https://github.com/AliMD/alwatr/commit/ac7c18bc0f0e008b8db9fd4b69451a89e7fb069b)) -- **nano-server:** getRemoteAddress ([eff82cb](https://github.com/AliMD/alwatr/commit/eff82cbdba5a35a88d95f6997365210683163d62)) -- **nano-server:** requireClientId ([fccd734](https://github.com/AliMD/alwatr/commit/fccd734f0c08cc624492b30e14c451143706cc00)) -- **product-card:** optional price ([a554ee5](https://github.com/AliMD/alwatr/commit/a554ee510af66e336b2a66173536b0bbb197f4d2)) -- **pwa-helper:** back-click-event ([0937837](https://github.com/AliMD/alwatr/commit/0937837185dd9fd2a49e3d16086854f6244aa450)) -- **pwa-helper:** central pwa-dev-server.config.js ([147c7e7](https://github.com/AliMD/alwatr/commit/147c7e7bac17179619cfca153463db74f134ba7b)) -- **pwa-helper:** handle nack to home event ([4e30cdc](https://github.com/AliMD/alwatr/commit/4e30cdcc36f0cc450310ed7c98c1fae828efbf6e)) -- **pwa-helper:** new render layout with root top-app-bar and context ([62f7918](https://github.com/AliMD/alwatr/commit/62f79185fddf48175036b03577eeb06bd6335c19)) -- **pwa-helper:** scrollToTopCommand ([630d6cd](https://github.com/AliMD/alwatr/commit/630d6cd4543529f0f650ff99ad4a99803e85843b)) -- **pwa-helper:** using UnresolvedMixin ([3c0f95e](https://github.com/AliMD/alwatr/commit/3c0f95ee5395049aa7f10f3d562f0aa41773e531)) -- **router:** internal redirect render template to another route ([de92671](https://github.com/AliMD/alwatr/commit/de9267126935b73dd561d8817346410f00960234)) -- **router:** keepSectionSlice for redirect ([1c3b370](https://github.com/AliMD/alwatr/commit/1c3b370c41f96a8ad612ea9fd5ab9963f6a3b27b)) -- **signal:** add untilChange for contextProvider ([cb44916](https://github.com/AliMD/alwatr/commit/cb4491698fd5ddfbe055032fc2cb50691de31194)) -- **signal:** defineCommand return ListenerSpec ([21fecac](https://github.com/AliMD/alwatr/commit/21fecacb6aa9423da9e3c177a4bbc59952d94e35)) -- **signal:** dispatch NextCycle option ([b30eb31](https://github.com/AliMD/alwatr/commit/b30eb316d92f594034fc40d195c4033e38e4d2e2)) -- **soffit-pwa:** about page content ([94a1aea](https://github.com/AliMD/alwatr/commit/94a1aeaab15b4986569416e499d39338234717a7)) -- **soffit-pwa:** context ([d7b9a04](https://github.com/AliMD/alwatr/commit/d7b9a04b3af2fd0e4390f26d89d17dceb8cb5adf)) -- **soffit-pwa:** navigation bar ([7cfa16c](https://github.com/AliMD/alwatr/commit/7cfa16cb366a6386abc61c7e2596d7891fee6fa9)) -- **soffit-pwa:** page 404 ([ec6eb42](https://github.com/AliMD/alwatr/commit/ec6eb42e483dc6d0d0493cdbb7f73d285cd613bd)) -- **soffit-pwa:** refactor all pages layout ([476eed2](https://github.com/AliMD/alwatr/commit/476eed2f14304535082432836352eeb0761ba884)) -- **soffit:** add sample images ([3b9c146](https://github.com/AliMD/alwatr/commit/3b9c14669054b52ae7adacfe1b0b878b493d0727)) -- **storage:** design new batch api in demo.http ([9a0e655](https://github.com/AliMD/alwatr/commit/9a0e65562a9781f732491bb5935d5ae98afe4e80)) -- **surface:** tinted ([129031a](https://github.com/AliMD/alwatr/commit/129031a2e4da66a3f6ecd303f787a98f60db77fe)) -- **text-field:** refactor with value prop and input-change event ([7bc0414](https://github.com/AliMD/alwatr/commit/7bc041438c032e224f0c84e849e38b2bf411bf0c)) -- **top-app-bar:** connect to context ([e690f08](https://github.com/AliMD/alwatr/commit/e690f088717ca9225e4e7d8bedfe160b61029715)) -- **top-app-bar:** tinted ([c943915](https://github.com/AliMD/alwatr/commit/c9439154adc40588361fdc140ba0dd8fde65bce0)) -- **type/com:** OrderDraft, orderDeliverySchema ([4417877](https://github.com/AliMD/alwatr/commit/44178779fbeba5d14a465380541c64ffb3f4f597)) -- **type:** ProductPrice ([7fe7b32](https://github.com/AliMD/alwatr/commit/7fe7b321c0ab94c8abc4527b4aa33191cf5a9213)) -- **ui-kit/card:** enhance toggle animation ([9950353](https://github.com/AliMD/alwatr/commit/99503532938349f3d1df93d87e2c0156b880670d)) -- **ui-kit/chat:** update ([3c51a71](https://github.com/AliMD/alwatr/commit/3c51a71682511affc3bdb20ce7fa21523e77011e)) -- **ui-kit/product-card:** new components ([459072f](https://github.com/AliMD/alwatr/commit/459072f343d3fe62b39f9876987e3447f9c5b5c6)) -- **ui-kit/text-area:** new component ([e5a3ffb](https://github.com/AliMD/alwatr/commit/e5a3ffb342dfdf96b48bbea08b95dbd0c76f6a6a)) -- **ui-kit/text-field:** hide arrow on number input ([ce69ecf](https://github.com/AliMD/alwatr/commit/ce69ecfd4a30bbd06ce690d0c045613314d16fad)) -- **ui-kit:** enhance root unresolved styles ([ee0b581](https://github.com/AliMD/alwatr/commit/ee0b5816e202570acf836743bdea631694162c87)) -- **ui-kit:** move radio group from soffit-pwa ([0d5786f](https://github.com/AliMD/alwatr/commit/0d5786f4f7cfc950e988e8f35c9c9e80f53cac23)) -- **ui-kit:** selectable product card ([1a8d219](https://github.com/AliMD/alwatr/commit/1a8d219695677d8841f1fbbfb7b10a5a67ad3c24)) -- **ui/demo-pwa:** new page ([d37f8d6](https://github.com/AliMD/alwatr/commit/d37f8d6bc03853cce838de18457bba357e217b58)) -- **ui/field:** refactor with new prop and change event ([e78821d](https://github.com/AliMD/alwatr/commit/e78821de09f27c470e15e502be19c79e04153a65)) -- **ui/product-card:** add id ([3d7cc2f](https://github.com/AliMD/alwatr/commit/3d7cc2f416b5630c15fc140d9a01295b776e42ae)) -- **ui/style:** color theme hct 85deg ([9be16f4](https://github.com/AliMD/alwatr/commit/9be16f43fc4e7037604afcd09edb8d6e7857c11d)) -- **ui/surface:** color animation ([ade9229](https://github.com/AliMD/alwatr/commit/ade9229b1bd34c5c87910db17bcf2f55f8dc0a47)) -- **ui/top-app-bar:** headlineKey and default values ([327c04e](https://github.com/AliMD/alwatr/commit/327c04e1bef597a058396b171055d981523c14f3)) -- **util:** add getClientId ([f9c1008](https://github.com/AliMD/alwatr/commit/f9c1008da682555e22178aa8d23cf742937b76a4)) -- **util:** add getLocalStorageItem ([dc5fa8b](https://github.com/AliMD/alwatr/commit/dc5fa8b9620a9add1aa3c838d38fb9ed9d364010)) -- **util:** add parseJson ([543da2c](https://github.com/AliMD/alwatr/commit/543da2cbb7079f74fe3f280f9c07b8fe6fc8e987)) -- **util:** polyfil requestAnimationFrame, requestIdleCallbackFallback ([6dc4b73](https://github.com/AliMD/alwatr/commit/6dc4b7347b97d2d2fdd562917e02cbe4d6d1328b)) -- **workflow:** add com api and pwa ([68ffd93](https://github.com/AliMD/alwatr/commit/68ffd93a39e3f10e3dceee50081f2a182636cc08)) - -### Performance Improvements - -- **com-pwa:** load order list on active page ([3e4a52b](https://github.com/AliMD/alwatr/commit/3e4a52baf119d8e4615bf056da265894eb381522)) -- **element/StateMachineMixin:** limit scheduleUpdate to animation frame ([e23317e](https://github.com/AliMD/alwatr/commit/e23317e2bc5efeeb6f0198b3f49f12d682bcc8e1)) -- **element:** clear signal listeners memory cost ([fe20757](https://github.com/AliMD/alwatr/commit/fe2075730436becf8642dcabd44116b40d33a4c7)) -- **pwa-element:** scheduleUpdate by animation frame ([388004d](https://github.com/AliMD/alwatr/commit/388004dd3b355319968135206dfcd600d46921dd)) -- **ui-kit/style:** body render ([ef4ed24](https://github.com/AliMD/alwatr/commit/ef4ed24f165e92d335e96d98cf3b5252fb9173b6)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- build com-cpi ([6419e4f](https://github.com/AliMD/alwatr/commit/6419e4f543bdbfab3029d429d6ab30418498befa)) -- clean ff old packages ([54df4b7](https://github.com/AliMD/alwatr/commit/54df4b7354abd9547a83cc3b09923cce81210c2c)) -- **com-api:** merge order and product storage client ([cd9ebbe](https://github.com/AliMD/alwatr/commit/cd9ebbebc45e5fa3c036264ed7b80cc919229bb0)) -- **com-api:** storage config ([c08d349](https://github.com/AliMD/alwatr/commit/c08d34982706996e6ff9d26a1290e1c3a813da56)) -- compatible with i18n ([89c4a90](https://github.com/AliMD/alwatr/commit/89c4a90444db12930b1d0211942c9b84185cbb32)) -- compatible with new element mixins ([d26e827](https://github.com/AliMD/alwatr/commit/d26e82731b2ae9c2483ba931c450c5a604633122)) -- compatible with new esbuild api ([e23638e](https://github.com/AliMD/alwatr/commit/e23638ed80a871fef12d5d75aa3eb3824c7cdabd)) -- compatible with new i18n api ([17a7c42](https://github.com/AliMD/alwatr/commit/17a7c42576f35888b16fee36209032c452183d1b)) -- demo-pwa and ui-kit surface element file name and imports ([9f9c382](https://github.com/AliMD/alwatr/commit/9f9c382cebd0d20d4b1bf9ae8490dfb960506ca1)) -- **demo-pwa:** import old toast ([4ebbb66](https://github.com/AliMD/alwatr/commit/4ebbb660323261502a5598999508822127c5a0e3)) -- **demo-ui:** move some property to content property ([e8dc738](https://github.com/AliMD/alwatr/commit/e8dc7389befee63d5cd0b3de4152c2f914de18e7)) -- deploy speed issue ([3898dae](https://github.com/AliMD/alwatr/commit/3898dae896907d522b836961eb45cbac9bc0f0cc)) -- **element:** compatible with new signal api ([020a083](https://github.com/AliMD/alwatr/commit/020a0837de496d8c4943fe5cdb659fee3dc0e051)) -- **element:** import issue ([87b3e12](https://github.com/AliMD/alwatr/commit/87b3e12a289fc477b072c1321aca160db46dc69c)) -- **element:** import type ([b125318](https://github.com/AliMD/alwatr/commit/b1253186036df3dcafca06f1bc4aca613c220f51)) -- **element:** logger mixin issue ([db5d96d](https://github.com/AliMD/alwatr/commit/db5d96d3a3b3cf5e07c60474e69ebf75a77978c4)) -- env files ([0610c98](https://github.com/AliMD/alwatr/commit/0610c985a10dd5522614359e89d475155c8b51b6)) -- **fetch:** device id to client id ([077e467](https://github.com/AliMD/alwatr/commit/077e4671d804d43c8f61a9d163d8d51d7a69134e)) -- **fetch:** headers type ([cd4b14e](https://github.com/AliMD/alwatr/commit/cd4b14e46b5090b6df8cb4f89d22b53966b9151e)) -- **form-reg:** build issue ([4aad72c](https://github.com/AliMD/alwatr/commit/4aad72c039e9a90e0c77976435430c79efb4b607)) -- **form-reg:** remove access to all storage ([61efba8](https://github.com/AliMD/alwatr/commit/61efba8ada31e75952a996babcbcc383ed86de60)) -- **github-actions:** specific all versions ([3b5bfbb](https://github.com/AliMD/alwatr/commit/3b5bfbbd8f2477f9c8b8de7a563bdcd8a0ca0fae)) -- **i18n:** prevent duplicate loader ([711cb56](https://github.com/AliMD/alwatr/commit/711cb5698a4b8887b684be79808b30a40f8e9e8a)) -- **i18n:** review and docs ([8574523](https://github.com/AliMD/alwatr/commit/85745235085e6957ab87a9c4e7fb836e73d649f6)) -- **icon-box:** IconBoxContent target type ([0e3afbc](https://github.com/AliMD/alwatr/commit/0e3afbcb639b45a2ff261a2be0222b2e8d3f079b)) -- **icon-box:** IconBoxContent target type ([3f395d9](https://github.com/AliMD/alwatr/commit/3f395d9a2e4e4d4a9961f6c80511a3391d8e4cc1)) -- **icon-button:** active margin state ([24d0b0f](https://github.com/AliMD/alwatr/commit/24d0b0ffd0303f92056bd84e8491e2cd7a4f2367)) -- lit-analyzer version ([199532d](https://github.com/AliMD/alwatr/commit/199532de48f0dc0e8470d11c6a6544da1c9ddf6c)) -- **nano-server:** compatible with ParamValueType ([325d896](https://github.com/AliMD/alwatr/commit/325d89651aeba38079d6fb9184adb894df94f083)) -- **nano-server:** null parsedParams ([bb969b2](https://github.com/AliMD/alwatr/commit/bb969b23495f791003225b5c557e40e10e7f8124)) -- **nano-server:** type ([2586061](https://github.com/AliMD/alwatr/commit/25860611f765e67ecddd586d80169ebe7f75701b)) -- **pwa-helper:** \_routeChanged ([5a22e3f](https://github.com/AliMD/alwatr/commit/5a22e3f9bea3ed03a49889d7725cb807f359c02a)) -- **pwa-helper:** add to root tsconfig refrences ([31680eb](https://github.com/AliMD/alwatr/commit/31680eb5c582e6d9c7c39ba319b1115cecbe15c5)) -- **pwa-helper:** disable dynamic entryNames in build ([b829639](https://github.com/AliMD/alwatr/commit/b829639bf3b4940bee44ca6c73aa8ce74f35c3ca)) -- **pwa-helper:** show version ([9235dee](https://github.com/AliMD/alwatr/commit/9235dee636a76ad9e07686564ebdfa45f45e8928)) -- **pwa-helper:** version and old workbox config ([3646f14](https://github.com/AliMD/alwatr/commit/3646f144669b8b46266833b19fd1aff064b13ad8)) -- **pwa-helper:** version and old workbox config ([080e260](https://github.com/AliMD/alwatr/commit/080e260fe86ba4f134f115b391504504c7dff871)) -- **pwa:** add blank service-worker.js for debug ([4894547](https://github.com/AliMD/alwatr/commit/4894547d9db9ccb548fd8f39add2c9777ebc23af)) -- **pwa:** clean old l10n resources ([7a48136](https://github.com/AliMD/alwatr/commit/7a4813665de64110baf4b4bc183b1a8a84012824)) -- **radio-group:** render issue ([a61cdb5](https://github.com/AliMD/alwatr/commit/a61cdb58349e3ca34de189bf8fc46079ac21b4d8)) -- remove ff from build process ([54445b6](https://github.com/AliMD/alwatr/commit/54445b6622891261f36364114327706c0fd2e4fd)) -- **route:** cleanup old api ([cf42205](https://github.com/AliMD/alwatr/commit/cf422055b96dbfd33a23732fe3e1def8b86e73c5)) -- **route:** export types ([551f4e3](https://github.com/AliMD/alwatr/commit/551f4e3509cd7b50477c3eefc72a34145e710aa0)) -- **router:** makeRouteContext as soon as posible ([f092b45](https://github.com/AliMD/alwatr/commit/f092b4584cc5fc424ac63cdf40b7c635053b9720)) -- **route:** RouteContextBase type ([9e9ee78](https://github.com/AliMD/alwatr/commit/9e9ee7861bebfe68990171799537d3664ac1a66e)) -- **router:** protocol type ([01fa523](https://github.com/AliMD/alwatr/commit/01fa52381d5ac9760c9af0d595826565548c6841)) -- **signal/core:** \_getSignalObject ([1374188](https://github.com/AliMD/alwatr/commit/1374188bdc7e689ded11d04bf4588a1162cc6d86)) -- **signal:** alert [#1455](https://github.com/AliMD/alwatr/issues/1455) ([203307d](https://github.com/AliMD/alwatr/commit/203307df308a12e6c38cb9e0e2301b2015b6ff45)) -- **signal:** clean old interfaces ([b2987ad](https://github.com/AliMD/alwatr/commit/b2987add7bfe0cf609fa355403fb9fb5de3f6b8a)) -- **signal:** export all interfaces ([8704eac](https://github.com/AliMD/alwatr/commit/8704eac6ae7a8a45e77c24ef5e602e36af3fd21e)) -- **signal:** export listeners ([fb05bfb](https://github.com/AliMD/alwatr/commit/fb05bfb9b7eb30427442783677ce1d4da5401160)) -- **signal:** import types ([cc0b88b](https://github.com/AliMD/alwatr/commit/cc0b88be420b1fe057a8640bbffb1af3bf327cef)) -- **signal:** interface bind type ([7b6c820](https://github.com/AliMD/alwatr/commit/7b6c820da2ba216f36e089bf79bdeccf208df3b1)) -- **signal:** reported issues ([75f688f](https://github.com/AliMD/alwatr/commit/75f688faf96a056a256603d05276f5731db86aee)) -- **signal:** TSignal on SignalControllerInterface ([ac42b7c](https://github.com/AliMD/alwatr/commit/ac42b7c7023549e8dd07cd3d9e189f356ffa06ee)) -- **snackbar:** always keep permanent snackbar ([1932239](https://github.com/AliMD/alwatr/commit/193223966c33a778aba50bc20c5c3361a47cda04)) -- **snackbar:** padding ([6765f89](https://github.com/AliMD/alwatr/commit/6765f8900e798aea1f77e9e76be36e055411dd3e)) -- **snackbar:** position ([ad7cb96](https://github.com/AliMD/alwatr/commit/ad7cb9612e194f61464dc9bcab7667d1b8236c44)) -- **snackbar:** position ([f645d43](https://github.com/AliMD/alwatr/commit/f645d4371d25ff75a41ce1f15f0352b7141d7e40)) -- **snackbar:** show snackbar bugs ([a26843e](https://github.com/AliMD/alwatr/commit/a26843ea2e88f5f8dcdbca8cd032da1b24bf939c)) -- **snackbar:** size and position ([5a2b46d](https://github.com/AliMD/alwatr/commit/5a2b46d1871c7bbdb9afd1ef70d9d1814b5a354b)) -- **snackbar:** z-index ([7212201](https://github.com/AliMD/alwatr/commit/7212201c195ade52838927a1f6de096bb6ce5f65)) -- **soffit-pwa/deploy:** form reg full path prefix ([50e1ac0](https://github.com/AliMD/alwatr/commit/50e1ac00386a8b69da36320ee6bd5a02ef09fe01)) -- **soffit-pwa/deploy:** pathPrefix for api ([78606f2](https://github.com/AliMD/alwatr/commit/78606f229f0d03b0d8a61641e41f7ca375491a12)) -- **soffit-pwa:** access constructor in child class ([2d080d6](https://github.com/AliMD/alwatr/commit/2d080d6b9101ba18f8d08013ed10b96e8a940637)) -- **soffit-pwa:** alwatr-pwa clean form page and fix mobile style ([13c9731](https://github.com/AliMD/alwatr/commit/13c9731e3e1f1a79719e38b052649f65e803d5ef)) -- **soffit-pwa:** api config ([4b40129](https://github.com/AliMD/alwatr/commit/4b40129c3491627a053f2c7e31e2bb4063989dd8)) -- **soffit-pwa:** api token config ([02c69c8](https://github.com/AliMD/alwatr/commit/02c69c893d90bc1188e0aaa2a9edc1ab964c0c5d)) -- **soffit-pwa:** app config and temp service worker ([f0d61f8](https://github.com/AliMD/alwatr/commit/f0d61f8827bf707c5e2fc4523f62f8fd601acb6f)) -- **soffit-pwa:** build issue ([9294c58](https://github.com/AliMD/alwatr/commit/9294c58d970c7bd55cf93d4ed56d47c1510de358)) -- **soffit-pwa:** cleanup form ([e85b8c9](https://github.com/AliMD/alwatr/commit/e85b8c964a02f1058cd0e2eab8ce10af58d3eb41)) -- **soffit-pwa:** compatible with new route ([fbf3c56](https://github.com/AliMD/alwatr/commit/fbf3c560efd17b62d42e61f35de425ca09e758bc)) -- **soffit-pwa:** def lang issue ([d0a1242](https://github.com/AliMD/alwatr/commit/d0a12421e21c751c2613c7fdb5ad6e9bbf3d17fe)) -- **soffit-pwa:** deployment ([fc63a60](https://github.com/AliMD/alwatr/commit/fc63a60ef8a6522219c5df943e69cc59e0b13380)) -- **soffit-pwa:** DirectionMixin for all classes user i18n ([c5cedeb](https://github.com/AliMD/alwatr/commit/c5cedeb7a022a114c1e71e3427e702fa667d01a9)) -- **soffit-pwa:** DirectionMixin for all classes user i18n ([cd00ee9](https://github.com/AliMD/alwatr/commit/cd00ee9e47ebbef35e88ec861feb58fc7bacccaa)) -- **soffit-pwa:** director logging ([01a5b6e](https://github.com/AliMD/alwatr/commit/01a5b6e9bb3a92f3e3093c52b56a5875fdb44ab6)) -- **soffit-pwa:** director logging ([76f6de5](https://github.com/AliMD/alwatr/commit/76f6de5ac58103a17b930a0d61b7e3d0b3265d6d)) -- **soffit-pwa:** director logging ([5a1f49f](https://github.com/AliMD/alwatr/commit/5a1f49f9ab7ff4c761681097d6019b8bfd3e23d0)) -- **soffit-pwa:** director logging ([67d67a9](https://github.com/AliMD/alwatr/commit/67d67a909b9d3b740428b095c9fb6afb65fd7538)) -- **soffit-pwa:** form animation ([d3b340d](https://github.com/AliMD/alwatr/commit/d3b340df7c5cae7aef8c44e9ef9afa4168fb4664)) -- **soffit-pwa:** import ([3ba4c5c](https://github.com/AliMD/alwatr/commit/3ba4c5cfdcb14a4632c658716c12b45130d76dbd)) -- **soffit-pwa:** LocalizeMixin for all classes user i18n ([3864fa2](https://github.com/AliMD/alwatr/commit/3864fa25cc8cfb7ed9d9c8e10c7731989d4aeeaf)) -- **soffit-pwa:** LocalizeMixin for all classes user i18n ([36389fb](https://github.com/AliMD/alwatr/commit/36389fb2d70964fb30a1a7e5c714cb40d6d1d352)) -- **soffit-pwa:** logo ([78d8024](https://github.com/AliMD/alwatr/commit/78d80248497b496b6af016eb3064cc225d77c1db)) -- **soffit-pwa:** page form styles ([4bc52af](https://github.com/AliMD/alwatr/commit/4bc52af5c0d95ba431d099a513ef913474678c56)) -- **soffit-pwa:** page form styles ([3f6f47c](https://github.com/AliMD/alwatr/commit/3f6f47cca25a6ba776242666b84eb47c87c7ea94)) -- **soffit-pwa:** querySelector type ([4d28e60](https://github.com/AliMD/alwatr/commit/4d28e6076b501d1148fffa3fc8a60af2a59175a2)) -- **soffit-pwa:** radio group options ([b860d61](https://github.com/AliMD/alwatr/commit/b860d612323e6622f19229b804d235b2ee704c78)) -- **soffit-pwa:** radio group options ([984f2d3](https://github.com/AliMD/alwatr/commit/984f2d33c5c4ddf6d4d9017971fa51dd30417b6f)) -- **soffit-pwa:** remove additional mixing ([e3cf679](https://github.com/AliMD/alwatr/commit/e3cf67968523c48e691f52a534393d278e6e526d)) -- **soffit-pwa:** remove additional mixing ([2ad80c0](https://github.com/AliMD/alwatr/commit/2ad80c05aa0a2579a1eecf538f100d841332c3f6)) -- **soffit-pwa:** remove direction mixing from page home ([295e782](https://github.com/AliMD/alwatr/commit/295e7826d5e3dab66aa3156188ae2b83dbe3a80d)) -- **soffit-pwa:** remove direction mixing from page home ([a8d755d](https://github.com/AliMD/alwatr/commit/a8d755dc1ae460c8fae1c2a7118e591d91e4b7a0)) -- **soffit-pwa:** remove submit at firstUpdated ([60413d1](https://github.com/AliMD/alwatr/commit/60413d1a4aef2a6ff013caf50d56d3d63d46e201)) -- **soffit-pwa:** review ([8cdc94e](https://github.com/AliMD/alwatr/commit/8cdc94e015982a51e24381a7a3455212711b3c4a)) -- **soffit-pwa:** set name on radio-group ([fd90c4d](https://github.com/AliMD/alwatr/commit/fd90c4daf74d50269ed93f84303d3586888fd991)) -- **soffit-pwa:** set name on radio-group ([9dfb6f4](https://github.com/AliMD/alwatr/commit/9dfb6f40e057e5846452dbe7bc8454bb2fea019d)) -- **soffit-pwa:** set name on radio-group ([7037667](https://github.com/AliMD/alwatr/commit/703766711c99e332948b038895bba1afdbd3c94f)) -- **soffit-pwa:** submit form director ([5f564aa](https://github.com/AliMD/alwatr/commit/5f564aa421d9d0891cd0756404e323a8718878ae)) -- **soffit-pwa:** submit form director ([e2cd673](https://github.com/AliMD/alwatr/commit/e2cd67388cc7877064c29369328449f09736852c)) -- **soffit-pwa:** submit form response check ([9b17ff0](https://github.com/AliMD/alwatr/commit/9b17ff0772a0473a451aab3640c074da7e25e7aa)) -- **soffit-pwa:** submit form response check ([59edcc4](https://github.com/AliMD/alwatr/commit/59edcc495beebd3149234184a5f44801e717f92e)) -- **soffit/form:** close animation lag ([a0b3f20](https://github.com/AliMD/alwatr/commit/a0b3f203df88cae121d39c356042dd7cc2c6d1a0)) -- **soffit:** build issue ([cdf43f8](https://github.com/AliMD/alwatr/commit/cdf43f89250cbb760f144649e0b8c743dac5e4f8)) -- **soffit:** build issue ([0973181](https://github.com/AliMD/alwatr/commit/0973181b19417ebd7b8994ba15d020c6890e8629)) -- **soffit:** clean old snackbar demo ([8086ac5](https://github.com/AliMD/alwatr/commit/8086ac54515e43815188632d6bd8964e609f8136)) -- **soffit:** content fa ([ad8a18a](https://github.com/AliMD/alwatr/commit/ad8a18a817c6a4b996fbb4dc02bf5e6559809e08)) -- **soffit:** content fa ([eee38dd](https://github.com/AliMD/alwatr/commit/eee38ddcc2835c642894641e4678954936e14a7e)) -- **soffit:** import config ([f56de8a](https://github.com/AliMD/alwatr/commit/f56de8af516014dfbe6376e1b8440113f9ccbe35)) -- **soffit:** import json issue ([a155448](https://github.com/AliMD/alwatr/commit/a1554487e867362bcb097b51bb3345c08c07bfa1)) -- **soffit:** localization bug ([c3abc90](https://github.com/AliMD/alwatr/commit/c3abc90a513a77aed9b451dff643b7199d47d8f7)) -- **soffit:** localization bug ([b7f9215](https://github.com/AliMD/alwatr/commit/b7f9215901584d8e50433ae7b7a7dfdbc9149d2f)) -- **soffit:** localization bug ([2134efb](https://github.com/AliMD/alwatr/commit/2134efbe04ed373cb85b49afab7c9ca837224307)) -- **soffit:** localization bug ([fd9d485](https://github.com/AliMD/alwatr/commit/fd9d4855a1f60e035cdd8e09826dc43b5aa72c8a)) -- **soffit:** localize keys ([bebfa9f](https://github.com/AliMD/alwatr/commit/bebfa9fc2d56e5ebad1e4c139950b3cdb8036af1)) -- **soffit:** localize keys ([c9c5d2b](https://github.com/AliMD/alwatr/commit/c9c5d2be0f0283abf0b939eb84c7ed6b9386e9bf)) -- **soffit:** localize keys ([a90a90a](https://github.com/AliMD/alwatr/commit/a90a90a451c375ff6d306db92f11a59d0b906245)) -- **soffit:** localize keys ([6c81476](https://github.com/AliMD/alwatr/commit/6c814762def3f91415f9a0216ee7fe4e86cdd9f1)) -- **soffit:** localize keys ([b811152](https://github.com/AliMD/alwatr/commit/b811152e56b40d73d46cfbd92fc0e1fb1ecfd7fa)) -- **soffit:** localize keys ([d934369](https://github.com/AliMD/alwatr/commit/d934369552cfb52997b7c115603a2fb0b3437b0e)) -- **soffit:** remove form prop ([e7099da](https://github.com/AliMD/alwatr/commit/e7099da4c440d19a54be801328dd9761fd2af8f9)) -- **soffit:** remove junk ([f13fc2a](https://github.com/AliMD/alwatr/commit/f13fc2a230e2199cb5dcef04b2d73f532d7ba7ae)) -- **soffit:** wrong import ([4fc0123](https://github.com/AliMD/alwatr/commit/4fc0123c781d5e14a06b18080e453cdca771aaf9)) -- **storage-server:** type ([5e033d7](https://github.com/AliMD/alwatr/commit/5e033d75d158a3b634a0d05da741241ff76f58d9)) -- **style:** remove tap-highlight in webkit ([c44ce67](https://github.com/AliMD/alwatr/commit/c44ce6771724672e20675523ad71fa59f2a5d6b8)) -- **text-field:** elevation bug ([405a0e7](https://github.com/AliMD/alwatr/commit/405a0e7a822ada00bd58c53e7903164584ef05c2)) -- **toast:** use `signal` & complete its render(not completed) ([c5ff7af](https://github.com/AliMD/alwatr/commit/c5ff7af59246595a0db67cb6288eb8a534676d84)) -- **top-app-bar:** persian title alignment ([b19d7ed](https://github.com/AliMD/alwatr/commit/b19d7edacfd9fe3c0610d18fd5bea125c1fddba5)) -- **tsc:** remove ff ([dbdd35c](https://github.com/AliMD/alwatr/commit/dbdd35ccf0933e43c704d636d917b21db0213372)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) -- **ui-kit/chat:** compatibility with new icon-button ([449effc](https://github.com/AliMD/alwatr/commit/449effc0f2e0a3a8c0f7217a49054a1f9e6a7ad8)) -- **ui-kit/icon-box:** false on undefined toggleAttribute ([d277458](https://github.com/AliMD/alwatr/commit/d27745890100d1c3236cc270dd1a7225ced94b7a)) -- **ui-kit/style:** vazirmatn css var name ([889882b](https://github.com/AliMD/alwatr/commit/889882bb97956978e0c321f96581dd33d145d9b9)) -- **ui-kit/top-app-bar:** import ([9fe764e](https://github.com/AliMD/alwatr/commit/9fe764ee47081542e5fa0cc9f8f106ee2a5555bb)) -- **ui-kit:** remove old toast ([0900d71](https://github.com/AliMD/alwatr/commit/0900d7105161ae44811c7cb7ffc194cbdd39dab9)) -- **ui/button:** line-height and white-space ([782d6e3](https://github.com/AliMD/alwatr/commit/782d6e32a431734de25c1323b4a8d0520e84f392)) -- **ui/style/mobile-only:** use --sys-breakpoint-handset ([19bd07d](https://github.com/AliMD/alwatr/commit/19bd07dfc1b0b88f31e984d67d2c2940d08a987b)) -- **ui/surface:** prevent ro overwrite all transition ([aff63c2](https://github.com/AliMD/alwatr/commit/aff63c255c7ae9b6f39f5021168394df3692b049)) -- **validator:** not accept empty string ([433236b](https://github.com/AliMD/alwatr/commit/433236bc440f315b08b811d82ea57d3118e3fc6e)) -- versions ([f7549ac](https://github.com/AliMD/alwatr/commit/f7549acca75c249e435aaf8597655850eed43961)) -- **vscode:** tsdk ([bb2c46e](https://github.com/AliMD/alwatr/commit/bb2c46ed47497b1a14a717f225c304e9fa8279ec)) -- **workflow:** build process ([754f2a1](https://github.com/AliMD/alwatr/commit/754f2a13aa92a4c4841b1b6581c25983eadff00c)) -- **workflow:** disable ff-pwa ([676d5bd](https://github.com/AliMD/alwatr/commit/676d5bd9c640ed729ac1da4f332c02ae040c9acf)) - -### Features - -- **`alwatr-top-app-bar`:** new components ([c370160](https://github.com/AliMD/alwatr/commit/c370160f41f5252dec2d2954906ea55be51ac21a)) -- **cloud:** soffit-pwa form deployment ([ee7eee0](https://github.com/AliMD/alwatr/commit/ee7eee02d2c466ff2161d043a4551a7901029f9a)) -- **com-api:** htop auth on order routes ([4f399ec](https://github.com/AliMD/alwatr/commit/4f399ec6139416d1ff227199e882ccc516e6ccf6)) -- **com-api:** routes ([5900ac0](https://github.com/AliMD/alwatr/commit/5900ac01086075dc2c44e06f9c3e39302b94ce71)) -- **comp-api:** enhance and review ([38b680e](https://github.com/AliMD/alwatr/commit/38b680ed2192b7b53e4cb5002d80125607253b49)) -- debug all renders ([47e1b38](https://github.com/AliMD/alwatr/commit/47e1b387df7fcf59e61e8720aef2d4c88a3ded2c)) -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **demo-ui:** image-box demo ([a5b87ed](https://github.com/AliMD/alwatr/commit/a5b87edca97dff0d29483cd840d7e81d6158ee19)) -- **demo/router:** enhance demo ([3595b83](https://github.com/AliMD/alwatr/commit/3595b83b49e34b9d3d7b172bd12509b258839d0b)) -- **dev-server:** debug mode ([58e6292](https://github.com/AliMD/alwatr/commit/58e6292093f2c2de6ec14c1431755825efb7d257)) -- **dev-server:** debug mode ([255f29e](https://github.com/AliMD/alwatr/commit/255f29ed04185ef2d2440a1b2c899a8ad049cde6)) -- **element/direction:** compute mode and improve performance ([9d3b2ed](https://github.com/AliMD/alwatr/commit/9d3b2ed4443585e0b2eb497dd24501d8753983c5)) -- **element:** ali ([66479ea](https://github.com/AliMD/alwatr/commit/66479ea422c065810263cab74dac86b2e34d8207)) -- **element:** ali ([25422c4](https://github.com/AliMD/alwatr/commit/25422c4dee951be8c8bd37ec709f1492946731ad)) -- **element:** rewrite all mixins with new api ([baa1e5e](https://github.com/AliMD/alwatr/commit/baa1e5e546654658f473622b148ceb7e7e8e3da6)) -- **fetch:** add update_cache to CacheStrategy ([e1406b1](https://github.com/AliMD/alwatr/commit/e1406b12e1276de3295c47506c8102ab3f8bfa79)) -- **fetch:** clientId on service request ([9575a1d](https://github.com/AliMD/alwatr/commit/9575a1d595a0a4757581a29a66837cbe4be46ed3)) -- **fields:** name property ([37d9803](https://github.com/AliMD/alwatr/commit/37d9803a7c20033e0b8f99ea5590c7f1ebdf083f)) -- **form-reg:** deployment on soffit-pwa ([8936651](https://github.com/AliMD/alwatr/commit/8936651eef6744dfe42c8e639f4c1bd8ccf8cbb0)) -- **form-reg:** dynamic form storage from valid list ([20459b1](https://github.com/AliMD/alwatr/commit/20459b115f8a195472c800cf171ffbc2e4e933d4)) -- **form-registration:** api prefix ([6242eb1](https://github.com/AliMD/alwatr/commit/6242eb16743e0447d1071451a339e0def6367ddf)) -- **form-registration:** deviceId, remoteAddress in request ([afd6af0](https://github.com/AliMD/alwatr/commit/afd6af03d0ad038553f05c9753a44a9418eab07c)) -- **form-registration:** get storage name in query params ([53ca10b](https://github.com/AliMD/alwatr/commit/53ca10bcff2a5bdaf04823a7d46437fa02582e81)) -- **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) -- **icon-box:** ass slot, highlight, pre-line, enhance typescale, enhance template ([77f4b30](https://github.com/AliMD/alwatr/commit/77f4b3094cd902a352b7c29232dc416c17b5932b)) -- **icon-box:** height transition ([8fd7526](https://github.com/AliMD/alwatr/commit/8fd7526a7d31955ce9aada0d5954f82937bd3af2)) -- **icon-box:** more dynamic options ([c5ec98e](https://github.com/AliMD/alwatr/commit/c5ec98e857ad16c4c0119290c686c8872dca1b0f)) -- **icon-box:** pointer cursor on highlighted ([11f1787](https://github.com/AliMD/alwatr/commit/11f1787d5830b75e7dba5d50427a612a1d827594)) -- **icon-button:** new content prop with click signal event ([bb5dae6](https://github.com/AliMD/alwatr/commit/bb5dae6048fcacb4a4e70aab514e4900fd5a96ea)) -- **icon-button:** new standard icon button ([b8e9836](https://github.com/AliMD/alwatr/commit/b8e98365fe3e8f1f6db1a21480257049c0294f03)) -- **icon:** enhance preload, support `icon-url-prefix` context signal ([b5a277c](https://github.com/AliMD/alwatr/commit/b5a277c1403177ba14de9434d908df0f4000a5a6)) -- **image-box:** selected style ([c092e2d](https://github.com/AliMD/alwatr/commit/c092e2d0f8428c0ddd9596346d073275298d14ab)) -- **math:** clamp function ([6fe4423](https://github.com/AliMD/alwatr/commit/6fe44236fc123a32837cfb4ea278b783f2bc2e7a)) -- **math:** getDeviceUuid ([946dad3](https://github.com/AliMD/alwatr/commit/946dad3544f2741462ff239edab8b4a9ea323bd6)) -- **math:** random uuid ([738f51e](https://github.com/AliMD/alwatr/commit/738f51eb323100fafca0a5f515b48d215dae5b3c)) -- **math:** rename deviceId to clientId ([b211fd4](https://github.com/AliMD/alwatr/commit/b211fd42245d51d7109186ddb2f41574d0f0b786)) -- **nano-server:** add client-id to IncomingHttpHeaders type ([a4a86c7](https://github.com/AliMD/alwatr/commit/a4a86c7e410edfe69e66cdab6b8ffdc0d9b95eb8)) -- **nano-service:** api prefix support ([21960dc](https://github.com/AliMD/alwatr/commit/21960dce5f25a587b19886e487f7d46af5ca087b)) -- **nginx:** optimize for pwa ([d245795](https://github.com/AliMD/alwatr/commit/d2457956da9c9c21d58793e858fdb6acdfbb98c3)) -- **nginx:** update to 1.1.0 ([daec28a](https://github.com/AliMD/alwatr/commit/daec28a0ebd543a8975fb946d2251b5056864d47)) -- **pwa-helper:** esbuild ([9694294](https://github.com/AliMD/alwatr/commit/9694294815203a86fbbfde8288371ab347c5ec11)) -- **pwa-helper:** get config utils ([df0b593](https://github.com/AliMD/alwatr/commit/df0b593985440267f32ecf646422a3fa13692b03)) -- **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -- **pwa-helper:** user toast on sw signals ([2569728](https://github.com/AliMD/alwatr/commit/2569728683e49e020ce77a573aa79f2453bfe774)) -- **pwa/esbuild:** pretty mode ([61903f8](https://github.com/AliMD/alwatr/commit/61903f89a9ad478fe0376b3e6746623ec7bc5907)) -- **pwa:** demo snackbar ([bf031e1](https://github.com/AliMD/alwatr/commit/bf031e197406284d657c3e2abc0d8f6cbe1fe2a8)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -- **route:** makeRouteContext ([16be581](https://github.com/AliMD/alwatr/commit/16be5815a4a44f22bd17c4a87f1b7ef30f9aec6c)) -- **route:** new url method ([580f2b3](https://github.com/AliMD/alwatr/commit/580f2b34396461389da0126d64c3c6ffde99e87b)) -- **route:** redirect with update browser history ([d6d64a0](https://github.com/AliMD/alwatr/commit/d6d64a0fc80284e279db4515d95ff99f530b447f)) -- **router:** enhance logging ([d5930ea](https://github.com/AliMD/alwatr/commit/d5930ea6117b4794c3771a8331c0d6ae063dd52e)) -- **router:** export main api in index and auto init ([58718eb](https://github.com/AliMD/alwatr/commit/58718ebaa10c784255b4a0faa467d35659a1b1df)) -- **router:** initialize process on DOMContentLoaded ([6b114e2](https://github.com/AliMD/alwatr/commit/6b114e2f64a50a40467bff20ecf562d1b7827632)) -- **router:** new api from scratch! ([2b26a8d](https://github.com/AliMD/alwatr/commit/2b26a8d9f95b5968dbda003edc9d540ea95fadd1)) -- **signal-manager:** enhance provider, docs ([c4583a3](https://github.com/AliMD/alwatr/commit/c4583a3b0fcbf38b5e426aaa2bc6e0f52ccac5fd)) -- **signal:** alias in SignalInterface & BoundSignalInterface ([053030b](https://github.com/AliMD/alwatr/commit/053030b96c09d474794f32327d892f1d3690656c)) -- **signal:** bind signal ([de49a13](https://github.com/AliMD/alwatr/commit/de49a13eaffce31660849dfc63285d97e9098c0c)) -- **signal:** command handler/provider interface ([3d23683](https://github.com/AliMD/alwatr/commit/3d236837e13d8cfdcd44a1570bdc9659f48e7f47)) -- **signal:** command signals ([98c1d90](https://github.com/AliMD/alwatr/commit/98c1d90978329e4c5c584e19edb1aaa365632162)) -- **signal:** command trigger interface ([dda9466](https://github.com/AliMD/alwatr/commit/dda94666d9e8e490fea26038044df0e67c203583)) -- **signal:** commandSignal ([5a0d7e5](https://github.com/AliMD/alwatr/commit/5a0d7e5498087620d28548ea5d90036a7b17483a)) -- **signal:** context prover and consumer ([081a51a](https://github.com/AliMD/alwatr/commit/081a51a1ee88e66ebbcd0c58186c00a6aa9e1032)) -- **signal:** contextProvider.expire ([7d0ce93](https://github.com/AliMD/alwatr/commit/7d0ce937f0eadcd9019e6047fbe07aa1a3b579a7)) -- **signal:** event listener interface ([4ca4079](https://github.com/AliMD/alwatr/commit/4ca407938d444027cdbd435173c875fdd9ce8e28)) -- **signal:** event trigger interface ([9b90597](https://github.com/AliMD/alwatr/commit/9b905979a5065640981433ec7d120ba2494966bb)) -- **signal:** new contextConsumer interface ([9ee4a62](https://github.com/AliMD/alwatr/commit/9ee4a624211adb66d9c3d180470cca44ed7df382)) -- **signal:** new contextProvider interface ([e5d29eb](https://github.com/AliMD/alwatr/commit/e5d29ebaa75d71bb5a87bedddb2be7600e68b210)) -- **signal:** new demo ([10ffc20](https://github.com/AliMD/alwatr/commit/10ffc2061a463b980da0dcd65d4afb2f850e2553)) -- **signal:** new manager interface ([f028306](https://github.com/AliMD/alwatr/commit/f028306f4d7932df65a1bbeade0d29377a370e2e)) -- **signal:** new requestable context consumer interface ([bf6845f](https://github.com/AliMD/alwatr/commit/bf6845f35a98bb63bcfa42196c2f977d64aea59e)) -- **signal:** new requestable context provider interface ([2c8d576](https://github.com/AliMD/alwatr/commit/2c8d57604dcb07a2831d85d4ef1e262863a5fae8)) -- **signal:** new signal dynamic types ([0f1a38e](https://github.com/AliMD/alwatr/commit/0f1a38e356ab73e4e2e1a8f852585e50e86cff0e)) -- **signal:** new simple api ([eb1e478](https://github.com/AliMD/alwatr/commit/eb1e47892d4478fb6c687f6d15e1a5c204b5666c)) -- **signal:** refactor all generic types with Stringifyable ([bdcef63](https://github.com/AliMD/alwatr/commit/bdcef632c81fa5e7c7ae595a7a77092c53821850)) -- **signal:** separate request command with response ([47a779e](https://github.com/AliMD/alwatr/commit/47a779e9a814d5d6a388f1a3e94c23e7fb977dce)) -- **signal:** signal.request ([d791b3e](https://github.com/AliMD/alwatr/commit/d791b3eef846697020b76bfecfbf25a3e31eb3a5)) -- **signal:** signal.untilNext ([9df78c0](https://github.com/AliMD/alwatr/commit/9df78c03dea243b467504fdf422388ab9d2b5660)) -- **signal:** signals.expire ([3591efd](https://github.com/AliMD/alwatr/commit/3591efd5e42f7a981814fd59d7189b5066735302)) -- **snackbar:** command signal and controller ([6b81ed9](https://github.com/AliMD/alwatr/commit/6b81ed9f780b1fa7a34c03160259a2f36d272183)) -- **snackbar:** new ui-kit snackbar comp ([34857d9](https://github.com/AliMD/alwatr/commit/34857d93bafdcb3c902edf83d0c94e27a0210538)) -- **snackbar:** show-snackbar-command ([9916fdf](https://github.com/AliMD/alwatr/commit/9916fdff6701ab63914c483d59fa1ab5faecbfb5)) -- **soffit-form:** load api server info from config file ([aa3b294](https://github.com/AliMD/alwatr/commit/aa3b294c870b8000eaf34fde61feada46b4b4af5)) -- **soffit-form:** submit form ([dc20082](https://github.com/AliMD/alwatr/commit/dc20082df9346333876d45153f36f70785a20032)) -- **soffit-pwa:** activityType on page form ([6ca313b](https://github.com/AliMD/alwatr/commit/6ca313bb336ca24bfcf2be6ddd06771e5fc73587)) -- **soffit-pwa:** activityType on page form ([ed738d0](https://github.com/AliMD/alwatr/commit/ed738d07d31fc8c3dfe98c99c86e7971446b6152)) -- **soffit-pwa:** agency cards ([99d421d](https://github.com/AliMD/alwatr/commit/99d421df511c5fdd6436e7e8232546772ad68af8)) -- **soffit-pwa:** bigger font for success message in form ([6de609e](https://github.com/AliMD/alwatr/commit/6de609e06e22a2b828d57d37effa77b5e1e1ac6a)) -- **soffit-pwa:** button style ([767bda7](https://github.com/AliMD/alwatr/commit/767bda7b7be6e3720b6f5ed205ecf4758bc5cfed)) -- **soffit-pwa:** button style ([a668b67](https://github.com/AliMD/alwatr/commit/a668b675fc9988801d765f202039337340564594)) -- **soffit-pwa:** compatible with new form api ([29bd85a](https://github.com/AliMD/alwatr/commit/29bd85a31e47e3c730c3c01730e0d5bc511c3c68)) -- **soffit-pwa:** componentize fieldset ([3d0f8d5](https://github.com/AliMD/alwatr/commit/3d0f8d591807199f0d6fb2cde3d1a9eec40af9c7)) -- **soffit-pwa:** content loader ([f97c6b8](https://github.com/AliMD/alwatr/commit/f97c6b8ca2ff95fc8ac31025a3d9a664555aeb1d)) -- **soffit-pwa:** content loader ([a53235e](https://github.com/AliMD/alwatr/commit/a53235e9f7c88ddc9de5046a86cd44c552764ca6)) -- **soffit-pwa:** enhance home page and use new lottery box ([042095f](https://github.com/AliMD/alwatr/commit/042095f0a887e2dd5980dd6f6bbad22c4cff199d)) -- **soffit-pwa:** form close animation ([ec6fbe4](https://github.com/AliMD/alwatr/commit/ec6fbe4995c006cf8785a289e4917fab8c520f8b)) -- **soffit-pwa:** form data gathering and submit process ([1a81dcc](https://github.com/AliMD/alwatr/commit/1a81dcc5dfc2e7fe57c57850b974c0204ffa6bdd)) -- **soffit-pwa:** i18n loader ([1fcac98](https://github.com/AliMD/alwatr/commit/1fcac986182d510407e2b792743c15928b80c3ff)) -- **soffit-pwa:** improve form styles ([f278802](https://github.com/AliMD/alwatr/commit/f278802a29e3dc49d420e67cf409509cb4b8266b)) -- **soffit-pwa:** improve form styles ([e553a00](https://github.com/AliMD/alwatr/commit/e553a0023e44b6c9d7d132ef51f09720e940fdb6)) -- **soffit-pwa:** json i18n resource ([2e98a93](https://github.com/AliMD/alwatr/commit/2e98a93c1f8fc84a9301123c41cf030887cb8eda)) -- **soffit-pwa:** l18e director ([1190e7c](https://github.com/AliMD/alwatr/commit/1190e7cb00a65a6eed0d770d6f08aae53c63fd82)) -- **soffit-pwa:** l18e director ([58d5dea](https://github.com/AliMD/alwatr/commit/58d5dea2e8434b8f8a3be0f05eb9fe2bb687e6d2)) -- **soffit-pwa:** load config ([e78fc58](https://github.com/AliMD/alwatr/commit/e78fc58762a84bfddb6e7a0b10c67900d9d7a887)) -- **soffit-pwa:** load content on radio group ([ae54953](https://github.com/AliMD/alwatr/commit/ae54953917a0afcd146fa7a3d11532b2d598eb9c)) -- **soffit-pwa:** load content on radio group ([2cbb93d](https://github.com/AliMD/alwatr/commit/2cbb93d88041aa7570091bf7c7064a6b502c6ebd)) -- **soffit-pwa:** localize messages ([6f780fd](https://github.com/AliMD/alwatr/commit/6f780fd51ab4423fd8cde0a12a8626adb8043db8)) -- **soffit-pwa:** localize messages ([5f18c7c](https://github.com/AliMD/alwatr/commit/5f18c7c33e0cd4223ecde2fb91f05dba557326d6)) -- **soffit-pwa:** lottery box element ([91fc844](https://github.com/AliMD/alwatr/commit/91fc844e6bf1222bddbb0f72be73697467304700)) -- **soffit-pwa:** lottery code registration form ([71e788c](https://github.com/AliMD/alwatr/commit/71e788ce8be18f38e50188e1b3ffd752cb9e5b1d)) -- **soffit-pwa:** lottery code registration form ([b3a9f3a](https://github.com/AliMD/alwatr/commit/b3a9f3a5771bd2206a7b884532e113fefd5359ac)) -- **soffit-pwa:** lottery form element ([8a2a346](https://github.com/AliMD/alwatr/commit/8a2a3462886addbc14b3a1d62f2f0f4e4871f172)) -- **soffit-pwa:** new card in home page ([08300fb](https://github.com/AliMD/alwatr/commit/08300fb30a0e04aee15642ad1739982998f98f5a)) -- **soffit-pwa:** new home content structure ([6127042](https://github.com/AliMD/alwatr/commit/612704240136b7b7aa519067810afc0b8f2a928a)) -- **soffit-pwa:** page form ([00e51eb](https://github.com/AliMD/alwatr/commit/00e51eb9f974342c7d8463043ea70745255c2e6d)) -- **soffit-pwa:** page form ([b856f49](https://github.com/AliMD/alwatr/commit/b856f49cd9cc015e04c190340e043828c5122400)) -- **soffit-pwa:** product description ([6f1b160](https://github.com/AliMD/alwatr/commit/6f1b1605df20627ae8f06df57aed618283d439d2)) -- **soffit-pwa:** product description ([5aa6aaa](https://github.com/AliMD/alwatr/commit/5aa6aaa6c95d8693f8ec67335e3186308b93eb08)) -- **soffit-pwa:** product page ([090a615](https://github.com/AliMD/alwatr/commit/090a615196eb145b4c877fc8cb59e2fe06801403)) -- **soffit-pwa:** product page content provider ([084883d](https://github.com/AliMD/alwatr/commit/084883da9b18890f1ec227ad2a78e4b13c00500d)) -- **soffit-pwa:** product page photos ([584f160](https://github.com/AliMD/alwatr/commit/584f160725cb80f0fd7fa0cdea162d8d6f4035b5)) -- **soffit-pwa:** ProductType ([875a4de](https://github.com/AliMD/alwatr/commit/875a4de63c53e58709421d17f1d8f9945ae5acb4)) -- **soffit-pwa:** radio group i18n ([65e8e96](https://github.com/AliMD/alwatr/commit/65e8e9634b49f28c94d3bef9429347dfb0cc125b)) -- **soffit-pwa:** radio group i18n ([633352b](https://github.com/AliMD/alwatr/commit/633352beede872a97ab8f636b725b91eede753d8)) -- **soffit-pwa:** radio-group value ([fdbc609](https://github.com/AliMD/alwatr/commit/fdbc6097484049d040133fb9d1e38c42db564e29)) -- **soffit-pwa:** remove agency cards on en locale ([4b99377](https://github.com/AliMD/alwatr/commit/4b99377dd677265c5f0faa8b16b2f277b801170f)) -- **soffit-pwa:** remove agency cards on en locale ([35ab8a1](https://github.com/AliMD/alwatr/commit/35ab8a1160e06ab21c05b4d3540c6ba4b8cb0959)) -- **soffit-pwa:** sample product content ([23f475e](https://github.com/AliMD/alwatr/commit/23f475e2518c6b1f74a6046ac11e71431d4ebb73)) -- **soffit-pwa:** send deviceId in request ([4b3c52b](https://github.com/AliMD/alwatr/commit/4b3c52b5b50a26f4fd65b55d695ca25503f9b918)) -- **soffit-pwa:** send deviceId in request ([714dd3b](https://github.com/AliMD/alwatr/commit/714dd3b4f43acb53f4215e8c268aec5571802ac7)) -- **soffit-pwa:** send lottry form data to server ([42398cf](https://github.com/AliMD/alwatr/commit/42398cfb5f44ede5121c2b413858efab609ac9b4)) -- **soffit-pwa:** separate content file ([58ed218](https://github.com/AliMD/alwatr/commit/58ed218fd50c5e609d13cb8b0a4f492d8b28c559)) -- **soffit-pwa:** set correct storage on form ([6b25370](https://github.com/AliMD/alwatr/commit/6b25370f84baab48d9db74e065804348f0ab8f2f)) -- **soffit-pwa:** supply-chain form ([a4752d0](https://github.com/AliMD/alwatr/commit/a4752d0ea3c3417eb1a50a2fed54b43ef5389b58)) -- **soffit-pwa:** top app bar headline styles ([7f5f775](https://github.com/AliMD/alwatr/commit/7f5f7755ff98dd39913fc9d179c05085a0d5416f)) -- **soffit-pwa:** use alwar util ([936a589](https://github.com/AliMD/alwatr/commit/936a5894f464f927f819209fc85cc4d4c5d97f2d)) -- **soffit-pwa:** use snackbar for form ([545403b](https://github.com/AliMD/alwatr/commit/545403badf2b5722ac0dcc942fd24637628a1207)) -- **soffit-pwa:** wide card for main branch ([7f5bfd3](https://github.com/AliMD/alwatr/commit/7f5bfd3727230a0cb9e33a1f3e0418d41552f22f)) -- **soffit-pwa:** youtube & contact us card ([92d9419](https://github.com/AliMD/alwatr/commit/92d9419ba5a08eae35deaf99878a61c3406534e6)) -- **soffit-pwa:** youtube & contact us card ([faa6de0](https://github.com/AliMD/alwatr/commit/faa6de03c906fd16c8f2ddc206482729dea3f4f2)) -- **soffit, snackbar:** enhance spacing ([4d421da](https://github.com/AliMD/alwatr/commit/4d421da25c691e2cd89a32d9ccf6c05fef787ba4)) -- **soffit/form:** expand/collapse animation ([0b3cf10](https://github.com/AliMD/alwatr/commit/0b3cf10350901de5973b54a7b6fdbc83d4243e9b)) -- **soffit/form:** improve animation and clear extra styles ([b107c54](https://github.com/AliMD/alwatr/commit/b107c542242e6e63ab8f52bb3dc6f0ca33062405)) -- **soffit/form:** validator ([8b9431f](https://github.com/AliMD/alwatr/commit/8b9431fdcc678fd57adbf2332d29508a7d0e21e4)) -- **soffit/lottery-box:** success color ([f050d6d](https://github.com/AliMD/alwatr/commit/f050d6de7d39f29bec487d750b5f1e7b71702c21)) -- **soffit/page-home:** footer styles ([00fd0b3](https://github.com/AliMD/alwatr/commit/00fd0b327537fbc5cb367cdc860fc9cc71d1d6d8)) -- **soffit/page-home:** footer styles ([60f4e0a](https://github.com/AliMD/alwatr/commit/60f4e0ae33a46a76a2316c90ff3b37adb901d165)) -- **soffit:** enhance content and styles ([55b8d2f](https://github.com/AliMD/alwatr/commit/55b8d2f2bde83123f26a90f5fcccc2c54a252b3f)) -- **soffit:** enhance develope scripts ([d4b5f5b](https://github.com/AliMD/alwatr/commit/d4b5f5b233f2da196192ad03ef755abda0dcb3cf)) -- **soffit:** enhance develope scripts ([b6f09c4](https://github.com/AliMD/alwatr/commit/b6f09c49ef4b8dc65656b14d5a3e4dd64e38972e)) -- **soffit:** form direction ([4db9d9a](https://github.com/AliMD/alwatr/commit/4db9d9abbb84431cd2815f5f7fe5909213beb39d)) -- **soffit:** form submit style ([3a86b71](https://github.com/AliMD/alwatr/commit/3a86b71d1912e19d9b0ef37c16a5fda64ac1bf7a)) -- **soffit:** home page top app bar ([4beedab](https://github.com/AliMD/alwatr/commit/4beedab5f925654a59f9561e1820465fb7d976ca)) -- **soffit:** lazy page loading ([c1a1d5f](https://github.com/AliMD/alwatr/commit/c1a1d5fc950d8773ff94a348aadf2ba390bc77a6)) -- **soffit:** localize phone number ([29c2abb](https://github.com/AliMD/alwatr/commit/29c2abb7fd29df92521829f02121247eb85fa3d7)) -- **soffit:** localize phone number ([2c7dfbb](https://github.com/AliMD/alwatr/commit/2c7dfbb7cd0b35257ec3257463ed40798c6329a5)) -- **surface-element:** active-outline ([3261091](https://github.com/AliMD/alwatr/commit/3261091bdfbb3dd777aa2676f1bf0ce5d3aa7192)) -- **surface,icon-box:** disabled animation ([5723c6a](https://github.com/AliMD/alwatr/commit/5723c6aafec5bbb80f0a8613c31a081204c4754a)) -- **text-field:** sanitize number in values ([bb4a912](https://github.com/AliMD/alwatr/commit/bb4a9127b5566256a7ddae81d06801a4134290f4)) -- **toast:** action button ([4d46936](https://github.com/AliMD/alwatr/commit/4d4693600ca5b1decf8a57168a710e571e0008bd)) -- **toast:** add `toast` component ([9fa06d4](https://github.com/AliMD/alwatr/commit/9fa06d40e4ad5e91d46d8d8d77855d7bb7c384dc)) -- **toast:** close ([d9e5837](https://github.com/AliMD/alwatr/commit/d9e5837f3d61be92159e42797d0e083c6e8db7ca)) -- **toast:** improve ui ([7015c8a](https://github.com/AliMD/alwatr/commit/7015c8a49b9ef5d7c6a69532b48923d76422ff90)) -- **toast:** organaize styles ([0400c40](https://github.com/AliMD/alwatr/commit/0400c4076975882b292b160a3c32db64a1797b8e)) -- **top-app-bar:** new top app abr element ([753735f](https://github.com/AliMD/alwatr/commit/753735ff0c9cb0e17a4160a0293f1679a684b4c5)) -- **top-app-bar:** type center, small, medium, large ([4b6c696](https://github.com/AliMD/alwatr/commit/4b6c696cf4f69ae4c78004bf888ee6716767d68a)) -- **type:** enhance com types ([ed91385](https://github.com/AliMD/alwatr/commit/ed9138584b0096377e73251557cc4ff8aa92a3cc)) -- **type:** OmitFirstParam ([b5a778f](https://github.com/AliMD/alwatr/commit/b5a778f3da03244a0ad693ab15ef8dd782039163)) -- **type:** Stringifyable ([c2e0771](https://github.com/AliMD/alwatr/commit/c2e077118e0371fb32a5fc3fc81cf7f87d65104b)) -- **ui-kit/image-box:** checkmark on selected card ([397ef53](https://github.com/AliMD/alwatr/commit/397ef53d46e8ff535ae33c3b91aa3e8d3a294835)) -- **ui-kit/image-box:** new element ([1d73526](https://github.com/AliMD/alwatr/commit/1d73526f7d9ee9ad612a261686d3d49b83af5942)) -- **ui-kit/image-box:** selected style ([78d3976](https://github.com/AliMD/alwatr/commit/78d3976e012eaaccba9d85e1bb34520ffb5a6c19)) -- **ui-kit/image-box:** StringifyableRecord content type ([703bd90](https://github.com/AliMD/alwatr/commit/703bd90011ce61c12ba4f9075a8d4a9184dbb684)) -- **ui-kit/image-box:** update image box based on alwatr-con ([342fb5d](https://github.com/AliMD/alwatr/commit/342fb5d705c776e392077ea44d5796d1ae5d95b1)) -- **ui-kit/text-field:** value prop ([de06e45](https://github.com/AliMD/alwatr/commit/de06e45afd31b73c4f2e75011b82a9fba58a024b)) -- **ui-kit:** simple button element ([790236f](https://github.com/AliMD/alwatr/commit/790236f839e842a1ad2cd030a892797bacd68897)) -- **ui-kit:** text-field element ([f87862f](https://github.com/AliMD/alwatr/commit/f87862f9798baa6630dfdd7cc06ff6ddb9622d60)) -- **ui/style:** mobile only style ([2f6c339](https://github.com/AliMD/alwatr/commit/2f6c339926dd4f16bcdb7ad6bc569895683ab34d)) -- update routes with new types ([76a2710](https://github.com/AliMD/alwatr/commit/76a271081ac0011ab0a7594127997806073b12d0)) -- **util:** arrow fn and untilEvent types ([ced1de6](https://github.com/AliMD/alwatr/commit/ced1de64f7d7458d14578096484f492be35665fc)) -- **util:** new package ([a7b1fb3](https://github.com/AliMD/alwatr/commit/a7b1fb38d93867b5013ec35c4a0a06d6ffe8716a)) -- **util:** until functions ([3b17ef2](https://github.com/AliMD/alwatr/commit/3b17ef22e2074c0a76751795af15330b6cb08090)) - -### Performance Improvements - -- **math:** enhance getClientId ([3187039](https://github.com/AliMD/alwatr/commit/3187039a9b87472bda16af6d4b0b71e31c17f272)) -- **math:** enhance getClientId ([af42959](https://github.com/AliMD/alwatr/commit/af429594950c7ded35af53414494dd2f6f4fe208)) -- **unicode-digits:** enhance translate ([104bdba](https://github.com/AliMD/alwatr/commit/104bdba948df11e62577f084b1e51fc4c78e0d9c)) - -### Reverts - -- **demo-ui:** image box demo ([a5fc9f0](https://github.com/AliMD/alwatr/commit/a5fc9f0f999e7ffaf0118ff1dacf83fc170fca5a)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- build issue ([0fd868a](https://github.com/AliMD/alwatr/commit/0fd868a08f5a88ea0d50ae1b96ec2b58c48015eb)) -- **card,focus-ring:** disable and active state ([50d3deb](https://github.com/AliMD/alwatr/commit/50d3deb2cf2020a4b6ec72c0c581fffb167a1b1a)) -- **card:** review styles ([481031c](https://github.com/AliMD/alwatr/commit/481031c93b0e49f7a541087da1fd283c5bfada36)) -- **chat:** --sys-radius vars ([b69b361](https://github.com/AliMD/alwatr/commit/b69b36162dd19446b75e9ac6c84e74581fce3d79)) -- **chat:** colors ([4cf93f6](https://github.com/AliMD/alwatr/commit/4cf93f6a5b2ee925e1b4a66f3535b4e6e7dfc1f0)) -- **com-api:** update home route ([0497f37](https://github.com/AliMD/alwatr/commit/0497f37bb28f41ef2dfc4835324a3d8f42b1b687)) -- **demo-pwa:** clean metafile ([66032b3](https://github.com/AliMD/alwatr/commit/66032b375f51ac4ade3aa44f06f550e40749d452)) -- **demo-pwa:** dev-server config ([941bf8d](https://github.com/AliMD/alwatr/commit/941bf8d63475c470c3d3635c8f24272947ef8bda)) -- **demo-pwa:** prevent to export root file ([6f52c3e](https://github.com/AliMD/alwatr/commit/6f52c3e417c1cf69adbdf445f1eeb57fa668aed8)) -- **demo-ui:** offline available pwa config ([2874859](https://github.com/AliMD/alwatr/commit/28748596cf0f8c9311c8c14d469fcf43350b5070)) -- **element/sw-helper:** reload on new update ([b07db77](https://github.com/AliMD/alwatr/commit/b07db77bf8a9c28235cdfe9f1d0aff972feda73c)) -- **ff-pwa:** version ([aacfed2](https://github.com/AliMD/alwatr/commit/aacfed27711aad50039e5b532011cbfca10019ca)) -- **ff/deploy:** restart on error ([7b6ad65](https://github.com/AliMD/alwatr/commit/7b6ad65b72579e39183da5f5359991bdd35ddd8b)) -- **form-registration:** service name ([6fc6ea0](https://github.com/AliMD/alwatr/commit/6fc6ea08103d6c4de62f0aba5e5791a20561d484)) -- **form:** storage route in demo.http ([e79b081](https://github.com/AliMD/alwatr/commit/e79b08104e8c2769508ac2ed92866b476b700aba)) -- **icon-box:** optional description ([83ff766](https://github.com/AliMD/alwatr/commit/83ff76634d06775321ebd600de2ee630694d5ee0)) -- **icon-box:** style when desc is empty ([18fdde1](https://github.com/AliMD/alwatr/commit/18fdde1ce4e55869c491a90c603bb7059424bef5)) -- **icon-box:** target ([e108661](https://github.com/AliMD/alwatr/commit/e1086612704f8763daea1e1b0c58d21e580a4d66)) -- **icon:** attr name ([92492bd](https://github.com/AliMD/alwatr/commit/92492bde7595a272ce38476732ee32ddc758d9d2)) -- **icon:** fetch timeout ([46ee93e](https://github.com/AliMD/alwatr/commit/46ee93e2a3b50ec5b087dd86a84ebee37a9695c5)) -- **logger:** _ALWATR_VERSION_ ([9cf8f20](https://github.com/AliMD/alwatr/commit/9cf8f208e8adbfa2e2c622a8465453d5554cbd37)) -- **nano-server:** math references ([e46071a](https://github.com/AliMD/alwatr/commit/e46071a49bb61cb6f36d2e79e14c32712f3746fa)) -- **pwa-element:** prevent to default import css for backward compatibility ([89591a2](https://github.com/AliMD/alwatr/commit/89591a28d1d829512200c8a0a026cbb7558e198d)) -- **pwa:** cleanup rollup ([988a125](https://github.com/AliMD/alwatr/commit/988a125140b9042cd33f0249876b84e7fe12112b)) -- **pwa:** debug mode scripts ([681fdc2](https://github.com/AliMD/alwatr/commit/681fdc24897b7bd4f677f26fd45ea048d5f9a675)) -- **pwa:** sw config ([c7b88ed](https://github.com/AliMD/alwatr/commit/c7b88ed638045932a517000749bad6889f22e1f8)) -- refrence type in tsconfigs ([0652ac6](https://github.com/AliMD/alwatr/commit/0652ac67be6167f4bfa60bf84282e40af3228f16)) -- resolve conflict ([052314d](https://github.com/AliMD/alwatr/commit/052314d2adb3b9b0e44e54f9b8e6d60fc1827075)) -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **services:** app name in home page ([6feab58](https://github.com/AliMD/alwatr/commit/6feab58b5655c7a09150ec83adf9f3bd8fe976b4)) -- **services:** name and desc ([453c1b6](https://github.com/AliMD/alwatr/commit/453c1b6ff334a23bea690b7ff9dd874471b25bb9)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/alwatr/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- **soffit-pwa:** build issue ([9439f87](https://github.com/AliMD/alwatr/commit/9439f8776e9f4e4ce46cf1cd40adf17540307f3a)) -- **soffit-pwa:** deploy ([f64e4e8](https://github.com/AliMD/alwatr/commit/f64e4e8214d55cc8a55ef48284164c1b8e4af131)) -- **soffit-pwa:** description ([ab7602b](https://github.com/AliMD/alwatr/commit/ab7602b90d8a6fa62e0e34109dd42f01e248cfc2)) -- **soffit-pwa:** manifest start_url, default_locale, screenshots ([7aad1fb](https://github.com/AliMD/alwatr/commit/7aad1fb7f2dc8eb290ddbd51f05335f9c3d8fc77)) -- **soffit-pwa:** review and fix root element ([dc1eaa4](https://github.com/AliMD/alwatr/commit/dc1eaa44aa1c5694d1f8ff635bd04f56dac672b1)) -- **soffit-pwa:** screenshot path ([e9c335a](https://github.com/AliMD/alwatr/commit/e9c335a5088e8f8fc14d8b0f208caa5190e02021)) -- **soffit-pwa:** scrollbar gap ([188e9ef](https://github.com/AliMD/alwatr/commit/188e9ef27ffda13b37a881997e74ee80a55b1f38)) -- **storage-client:** export AlwatrStorageClientConfig ([9d626c2](https://github.com/AliMD/alwatr/commit/9d626c28898c7d97776896317d246b8483ecbe5e)) -- **style/palette:** unreading ([1b9c573](https://github.com/AliMD/alwatr/commit/1b9c5735b5cd3b826448628d14dd618b153c9c14)) -- **token:** types ([a7da60e](https://github.com/AliMD/alwatr/commit/a7da60e720ac83b8d2d2ed5c0b811dea1952a2b9)) -- **tsconfig:** add missing core/validator ([48779b1](https://github.com/AliMD/alwatr/commit/48779b1617e319cc3411aae3aaef2e94d303374c)) -- **type:** ChatPhotoMessage ([c72bcb2](https://github.com/AliMD/alwatr/commit/c72bcb24bfa936cd325728b42ad0f2acf463865d)) -- **type:** cleanup ([15c7d64](https://github.com/AliMD/alwatr/commit/15c7d648819914820374e752b91d41f287db574b)) -- **type:** export alwatrRegisteredList ([fa308b5](https://github.com/AliMD/alwatr/commit/fa308b5208e0a2ef0ed33e0fe7299cae0af51a97)) -- **type:** import type ([efaf4eb](https://github.com/AliMD/alwatr/commit/efaf4eb0ccbbf5eba5f34ece72bf27758f175521)) -- **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) -- **ui-kit/card:** filled `box-shadow` ([cf3a860](https://github.com/AliMD/alwatr/commit/cf3a86045d88bba39c6849b263e03af4bb5a247a)) -- **ui-kit/cards:** theming variables ([2ed156b](https://github.com/AliMD/alwatr/commit/2ed156b73540d2b6de42a79522729a84b44613cf)) -- **ui-kit/card:** styles ([738da92](https://github.com/AliMD/alwatr/commit/738da92a6ea6c99ab789a3af1f36beb15dbc2a04)) -- **ui-kit/focus-ring:** focus-within ([3d234bf](https://github.com/AliMD/alwatr/commit/3d234bf7055fd1e7db58877f7e8e9556e25f0e63)) -- **ui-kit/icon-box:** empty & linkable width ([e187b8a](https://github.com/AliMD/alwatr/commit/e187b8ac94dfe365145a0d1191654094d167c685)) -- **ui-kit/icon-box:** empty & linkable width ([533fccd](https://github.com/AliMD/alwatr/commit/533fccdbc867a44dd0f624d13287c16ccf825148)) -- **ui-kit/icon-button:** import path ([7770b9c](https://github.com/AliMD/alwatr/commit/7770b9c009d5362641d0da2d5cbf4f62a1b01f8c)) -- **ui/color:** color and palette issues ([79df153](https://github.com/AliMD/alwatr/commit/79df153fa4d636a69a7fc437df54c64e02eb4a3c)) -- **ui/tokens:** spacing ([d9096ff](https://github.com/AliMD/alwatr/commit/d9096ff2712713fb77b892e76f0c04398184c526)) -- **ui/token:** state opacity ([34fec9a](https://github.com/AliMD/alwatr/commit/34fec9a9357c6af37c41e58c779daf3d396c10ec)) -- **uniquely/soffit-site-pwa/page-home:** incorrect import ([5eb959d](https://github.com/AliMD/alwatr/commit/5eb959d5813f417a2be81dfaad1ba2046a33efcc)) -- **validator:** boolean validator ([593b4a4](https://github.com/AliMD/alwatr/commit/593b4a499529d995836c7a91abc979c4b3a5543b)) -- **validator:** deps ([635866d](https://github.com/AliMD/alwatr/commit/635866d81134df0db46fc44b7ed7575e0486f9cd)) -- **validator:** readme ([af237db](https://github.com/AliMD/alwatr/commit/af237db8e0c2f5cd37d487304f2097bed95e3a90)) -- **validator:** remove extra trim ([ee9b601](https://github.com/AliMD/alwatr/commit/ee9b601198ea8dded43497df6824e09f65be86b3)) -- **validator:** return validObject ([aa44ed0](https://github.com/AliMD/alwatr/commit/aa44ed0b18cca15a0c689f9bdb9ce584b0a55eb0)) -- **validator:** validate boolean ([c0cfdc2](https://github.com/AliMD/alwatr/commit/c0cfdc21a99cf02bb4d56c00ba186429e72d3aa2)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **.github:** add form service to publish container ([f055468](https://github.com/AliMD/alwatr/commit/f05546826e8eb583a4bc68f7be401a6447467a71)) -- **cards:** update style variables ([ec2c0f2](https://github.com/AliMD/alwatr/commit/ec2c0f20e96ce6860ffc4a0c9c9ad5735c3913ab)) -- **chat-text-input:** use disabled surface for send btn ([80ae708](https://github.com/AliMD/alwatr/commit/80ae708702e5e44c9ba1978ba072f44028636066)) -- **chat-text:** filled icon color ([eb4e563](https://github.com/AliMD/alwatr/commit/eb4e5638e93ccb27e8307928a43ffbdb7483f5df)) -- **com-api:** update packages ([0bc7c0c](https://github.com/AliMD/alwatr/commit/0bc7c0c868ea8821465975bcc07fa0c644f241d1)) -- **demo-pwa:** add middleware for routing ([bfc8f4f](https://github.com/AliMD/alwatr/commit/bfc8f4f2be306321fcfe40b9e44d30c640eb085d)) -- **demo-pwa:** build service worker on build proccess ([87c5d1e](https://github.com/AliMD/alwatr/commit/87c5d1e56ca5d232d026fa8e51b6c8acf66cbced)) -- **demo-pwa:** demo icon-box ([87b720b](https://github.com/AliMD/alwatr/commit/87b720b9844f71d9314b20c90803b18e0b1c379a)) -- **demo-pwa:** new esbuild process ([72e083e](https://github.com/AliMD/alwatr/commit/72e083ef13d313dee6453074cff6d470127630e0)) -- **demo-pwa:** register service worker ([ad8e2d8](https://github.com/AliMD/alwatr/commit/ad8e2d8073327d289bd069069847e98b12dba302)) -- **element:** separate \_initLocale, \_initRouter and \_routeChanged ([a0af8ec](https://github.com/AliMD/alwatr/commit/a0af8ecfb6f5da24898da629de822cfe54ea5586)) -- **element:** service worker register ([c98b1f6](https://github.com/AliMD/alwatr/commit/c98b1f601b7a277d2bf713637f7475b037961f3a)) -- **element:** service-worker helper ([6ec8b59](https://github.com/AliMD/alwatr/commit/6ec8b59a617d514315926dac7c3e3318867782d2)) -- **feat:** deploy compose ([ec23b49](https://github.com/AliMD/alwatr/commit/ec23b4950e67b69ec5d87f93d4e2b54fd9b93468)) -- **icon-box:** new style and layout ([2003e33](https://github.com/AliMD/alwatr/commit/2003e33e5095358e24fd4e07b3fc92a3b8a9d7d7)) -- **icon-box:** respect breaks in desc ([9c3aef8](https://github.com/AliMD/alwatr/commit/9c3aef811bea818bcbfd618d0c1b4f0c487f42bb)) -- **palette:** theming ([9a7d896](https://github.com/AliMD/alwatr/commit/9a7d896d4c82457dac12458c0fef1b8c8a75e9a0)) -- **pwa:** dev server ([4f5afcf](https://github.com/AliMD/alwatr/commit/4f5afcf047f88ba0ec5ccf061caf38b2cff632c2)) -- **pwa:** esbuild --debug mode ([fa0192c](https://github.com/AliMD/alwatr/commit/fa0192c2e1179ae953a1d67880464f48ec26452b)) -- **pwa:** improve esbuild ([5b78a6e](https://github.com/AliMD/alwatr/commit/5b78a6ebbd9491117393d299825c9c13e8c51481)) -- **pwa:** replace _ALWATR_VERSION_ from [#677](https://github.com/AliMD/alwatr/issues/677) ([eb30fc5](https://github.com/AliMD/alwatr/commit/eb30fc5e7779b8ee8bdab86b5e079018bd877718)) -- **pwa:** replace file hash in html ([145da60](https://github.com/AliMD/alwatr/commit/145da60afdaf9a48d0d1ac5a9228138413a64ff0)) -- **pwa:** unresolved state for show skeleton or loading ([8c4e834](https://github.com/AliMD/alwatr/commit/8c4e834b1415df14d6c76ef4d2040c60dc638b9e)) -- **pwa:** watch mode ([a0a0d88](https://github.com/AliMD/alwatr/commit/a0a0d884890002873434d1a2cf22976f4520f8ca)) -- **soffit-pwa:** catalogue link ([93ad66c](https://github.com/AliMD/alwatr/commit/93ad66c9728a2809dcb044b164dc505177ad9f68)) -- **soffit-pwa:** deployment ([b0ad025](https://github.com/AliMD/alwatr/commit/b0ad0256e97ebbcbff71d415b3fd586a95434261)) -- **soffit-pwa:** dynamic menu ([b26d1f4](https://github.com/AliMD/alwatr/commit/b26d1f44a4ca27ff98b6f2fff318fa1d910ae495)) -- **soffit-pwa:** formafzar link ([b94e4bf](https://github.com/AliMD/alwatr/commit/b94e4bf87338448021534d27262638fe24cacfd9)) -- **soffit-pwa:** improve style ([7b3adb4](https://github.com/AliMD/alwatr/commit/7b3adb48b84089db2d21d03fd3e2dbcf016e9212)) -- **soffit-pwa:** make transparent logo ([9359616](https://github.com/AliMD/alwatr/commit/9359616b7ce0ed13f53a287b8281edbd9c76b743)) -- **soffit-pwa:** manifest.webmanifest name and new screenshots ([9f1c556](https://github.com/AliMD/alwatr/commit/9f1c55638c0ce40357056b0a5df1eafa0d80799f)) -- **soffit-pwa:** page home link ([1625fd7](https://github.com/AliMD/alwatr/commit/1625fd7991dfe5b91078d9fb475ef9f39e2aaaf2)) -- **soffit-pwa:** publish container ([308985c](https://github.com/AliMD/alwatr/commit/308985cebb493ad38a532d925477517bf0b16dad)) -- **soffit-pwa:** theme color ([a4fc69c](https://github.com/AliMD/alwatr/commit/a4fc69cd382843ea1adbf4eb4ff7aabd5eb269a1)) -- **soffit-pwa:** use demo-pwa esbuild ([8226ec0](https://github.com/AliMD/alwatr/commit/8226ec0aade911dc174edc1b0403ecac1df238db)) -- **soffit/page-home:** app version ([3316766](https://github.com/AliMD/alwatr/commit/3316766f7470b1648d9ec7e4c8feb52996113713)) -- **standard-icon-button:** use new surface styles ([379c0f6](https://github.com/AliMD/alwatr/commit/379c0f6c1d11bd1c56f831ffc2477fac5d98e53f)) -- **storage-engine:** migrate old storages ([10fc378](https://github.com/AliMD/alwatr/commit/10fc3785ee22bf397dd1448cf0c1568be65fb8cb)) -- **token:** generate and verify token without expiration time ([6db78f0](https://github.com/AliMD/alwatr/commit/6db78f0644e076c3401a263173d7139838bbbf0c)) -- **tsconfig:** uniquely/soffit-site-pwa ([fe9944d](https://github.com/AliMD/alwatr/commit/fe9944d2d04f25c866c622220685c6b9f663fcd0)) -- **type:** add optional text on ChatPhotoMessage ([af83f5b](https://github.com/AliMD/alwatr/commit/af83f5b8604cecd3c9b0cb2375267458fd02431d)) -- **type:** add types ([2de3842](https://github.com/AliMD/alwatr/commit/2de384297b70b9818ec8d62ce8d31be4822d95a4)) -- **type:** C.O.M ([d4655d8](https://github.com/AliMD/alwatr/commit/d4655d83f196990a3ffad2e4753be7b77639ee19)) -- **type:** chat ([4b7ac95](https://github.com/AliMD/alwatr/commit/4b7ac95522dcb637ebab2eda0b8f3e0cd80d59b0)) -- **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) -- **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -- **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) -- **type:** define constructor type ([39c5ab7](https://github.com/AliMD/alwatr/commit/39c5ab74f0a1471d5e20beff89f6885265907633)) -- **type:** define math types ([8c19f40](https://github.com/AliMD/alwatr/commit/8c19f4058d4361b7d3f4f714595e34cb6fa21109)) -- **type:** i18nString ([614037d](https://github.com/AliMD/alwatr/commit/614037d690415b257f34fb13c7143f76dfa2c6ca)) -- **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) -- **type:** order ([79426ea](https://github.com/AliMD/alwatr/commit/79426ea696a0ca0723a8c7bfb6259c83a15c32d9)) -- **type:** order storage ([bd5f11c](https://github.com/AliMD/alwatr/commit/bd5f11c93f35ff235fb2f85df6cecd8823ea34fc)) -- **type:** photo ([7e38283](https://github.com/AliMD/alwatr/commit/7e38283113606a0a01c705caeb1f773a75dfd97c)) -- **type:** photo ([742005f](https://github.com/AliMD/alwatr/commit/742005f8588e408e818188a60eb9cf4a1fe9592f)) -- **type:** service-response ([18f8be3](https://github.com/AliMD/alwatr/commit/18f8be3f91f1678d6f5fb779c1f782736e29a010)) -- **type:** storage ([d4b3a95](https://github.com/AliMD/alwatr/commit/d4b3a956fb17b80b748d0587f12e818c021e3985)) -- **type:** user ([a0d8242](https://github.com/AliMD/alwatr/commit/a0d824202d91d75678945d72497965a55c4deba7)) -- **type:** user ([30b8edb](https://github.com/AliMD/alwatr/commit/30b8edb17aad0f20ccb887c1a71c65c385104ee3)) -- **ui-kit/card:** base card element ([4c88879](https://github.com/AliMD/alwatr/commit/4c888797e3cd28f4830760dc13c86a3047b55d89)) -- **ui-kit/card:** rewrite styles ([a50bc57](https://github.com/AliMD/alwatr/commit/a50bc57e76e9c7882ff04f37ddc61e1657ab5ca6)) -- **ui-kit/cards:** imporve styles & rename ([00c4b64](https://github.com/AliMD/alwatr/commit/00c4b643d70bf7c95d4e9dace5f19cf7710c8d0c)) -- **ui-kit/focus-ring:** new component ([12e19da](https://github.com/AliMD/alwatr/commit/12e19dab4b56c1b5fe30fe4c8d6f0df594822d37)) -- **ui-kit/icon-box:** inline if for target ([9ca6966](https://github.com/AliMD/alwatr/commit/9ca69663ddf924483a5ae41f1b2a0fbb062ebc1c)) -- **ui-kit/icon-box:** new component ([e13e319](https://github.com/AliMD/alwatr/commit/e13e3196f45d8f4566704e87f1c819bf3b418fd8)) -- **ui-kit/icon-box:** new component ([f381ab3](https://github.com/AliMD/alwatr/commit/f381ab343109e5a1c51df8842a77a83417c93f60)) -- **ui-kit/icon-button:** add css shadow part ([#667](https://github.com/AliMD/alwatr/issues/667)) ([c39b7a9](https://github.com/AliMD/alwatr/commit/c39b7a95874001724aa51e8f0786af41564a2c4b)) -- **ui-kit/icon-button:** use `focus-ring` ([9730f05](https://github.com/AliMD/alwatr/commit/9730f05df9a881ef14102006a67cc83848921f85)) -- **ui-kit/icon-button:** use focus ring ([cedd003](https://github.com/AliMD/alwatr/commit/cedd003eaaf3d331e7d5be6a11fe5e40e44703cd)) -- **ui-kit/style:** focus ring ([45232a9](https://github.com/AliMD/alwatr/commit/45232a9aa265ea97b4db42398468dc0ae1d5ebbe)) -- **ui-kit:** downloadable link on icon-box ([e249dba](https://github.com/AliMD/alwatr/commit/e249dba12c34665792ccd1c4215cb50e5e6a00e2)) -- **ui-kit:** elevated, filled, outlined card components ([1e9746e](https://github.com/AliMD/alwatr/commit/1e9746e7dcbfce6f7acfa828ad18418f1152ec24)) -- **ui/card/demo:** improve card demo ([3176cbe](https://github.com/AliMD/alwatr/commit/3176cbeb290453519542424a942dd0c282ef63ed)) -- **ui/color:** separate palette hsl/hct ([d9e23ac](https://github.com/AliMD/alwatr/commit/d9e23ac84579275211d2ffbe3cdc55ec964337cb)) -- **ui/demo-pwa:** error tokens ([98c4aa2](https://github.com/AliMD/alwatr/commit/98c4aa2efd7d54fc130a4fb502b42d0be4e68d13)) -- **ui/demo-pwa:** page card ([16c11f0](https://github.com/AliMD/alwatr/commit/16c11f05464f05a0949207975a08009ca969943e)) -- **ui/element:** export `unsafeHTML` ([2cb6d49](https://github.com/AliMD/alwatr/commit/2cb6d49aca60dbbda45990bf13e0b9622725a0ef)) -- **ui:** add mdc layout grid system ([044d6a9](https://github.com/AliMD/alwatr/commit/044d6a9d24227e352293c0ef3d62156bdf5d27d5)) -- **ui:** add palette 260 and 270 ([a94ca31](https://github.com/AliMD/alwatr/commit/a94ca3105a4eaf38e467d57671e2b886e1f0bd66)) -- **ui:** new AlwatrSurfaceElement with elevation/tint/state simulation ([0877f4f](https://github.com/AliMD/alwatr/commit/0877f4f3dd780321f3c7498cffde66653a24de43)) -- **ui:** new color ([0669b38](https://github.com/AliMD/alwatr/commit/0669b3882fa161ba2984e1278d00f57cd003a9b1)) -- **uniquely/com-api:** improve types ([469c36a](https://github.com/AliMD/alwatr/commit/469c36aec2fd991b30c63753f6d6a13a8d063bfb)) -- **uniquely/com-api:** new uniquely service ([5e6de49](https://github.com/AliMD/alwatr/commit/5e6de49f2bb448042954bd86f12048c8f00f9755)) -- **uniquely/com-api:** types ([b6af7ef](https://github.com/AliMD/alwatr/commit/b6af7ef59b33accf901dda07c02f24399506e132)) -- **uniquely/soffit-site-pwa:** `alwatr-icon-box` description ([eca14c8](https://github.com/AliMD/alwatr/commit/eca14c8beaef1aa4b871097ef62f51593ee6a23d)) -- **uniquely/soffit-site-pwa:** new app ([66cb5c0](https://github.com/AliMD/alwatr/commit/66cb5c0314453f2b4802c6a004103f0ec8e2e038)) -- **uniquely/soffit-site-pwa:** scroll bar ([4d11e08](https://github.com/AliMD/alwatr/commit/4d11e087c2d98baf8996a8cb3b3d814c7b86cdd9)) -- **uniquely/soffit-site-pwa:** use `alwatr-icon-box` & remove extras ([9fceafe](https://github.com/AliMD/alwatr/commit/9fceafe135e72e796839f8578f78a9743298cf3d)) -- **validator:** additionalProperties ([60829a6](https://github.com/AliMD/alwatr/commit/60829a6280fdc3138f8702cee776e0dae11f548f)) -- **validator:** demo ([9e577ca](https://github.com/AliMD/alwatr/commit/9e577cad18be45942d36d633932ef0aa2c2ec512)) -- **validator:** demo ([b48a30b](https://github.com/AliMD/alwatr/commit/b48a30bac9f02f0b7edb3b4069c324f835f6d49b)) -- **validator:** enum values ([7c02422](https://github.com/AliMD/alwatr/commit/7c02422e9caf9ab5dd8e352714db346518229d59)) -- **validator:** export schema type ([da91546](https://github.com/AliMD/alwatr/commit/da915461583440d655f26c89c0c29b5c9cb74c6e)) -- **validator:** new package ([5aa48c3](https://github.com/AliMD/alwatr/commit/5aa48c354c116655e7824366d4efcd5965172fe3)) -- **validator:** rename var ([b68b2e4](https://github.com/AliMD/alwatr/commit/b68b2e4671ff30efcc817213e4bf9bee9c322d90)) -- **validator:** throw value in error ([4e99b80](https://github.com/AliMD/alwatr/commit/4e99b8078455443e70aab5ebdbe30c21152b48ae)) -- **validator:** update demo ([d49929f](https://github.com/AliMD/alwatr/commit/d49929fca0007aa94482010b7a6245f0bb360bc0)) -- **validator:** update demo ([cc21a90](https://github.com/AliMD/alwatr/commit/cc21a906b371f51696c3619fc0df0f392be99dee)) -- **validator:** update demo ([4f11b61](https://github.com/AliMD/alwatr/commit/4f11b61af433f348cc4a4bd5f837848c6c1298a4)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **chat-avatar:** grow ([d935030](https://github.com/AliMD/alwatr/commit/d9350303d9345729ab83f410182afeb1b7823294)) -- **chat-avatar:** size with new root fs ([63c8f36](https://github.com/AliMD/alwatr/commit/63c8f3617856a2ee65ccf7b398d5635349afb019)) -- **chat-footer:** footer padding, demo \_changeLocale ([6454599](https://github.com/AliMD/alwatr/commit/6454599272bc0c1b01c223274f48b8de99655130)) -- **core/router:** preventDefault on svg link click ([e35e935](https://github.com/AliMD/alwatr/commit/e35e9351857d5bcb5128afbc87eb62dd11da865e)) -- **core/type:** remove extras ([63fe462](https://github.com/AliMD/alwatr/commit/63fe462e88e1d3e0dca8696f0c4c073ebc94c490)) -- **element:** build issues ([0bfb016](https://github.com/AliMD/alwatr/commit/0bfb0167a82c1dfbd04884a049b76cf7f6033f86)) -- **element:** signal mixing safety check ([2f3c871](https://github.com/AliMD/alwatr/commit/2f3c87141e162e8f600246bf863fcfe93f41f53b)) -- **ff-pwa:** root html head tags & icon ([3d5b83a](https://github.com/AliMD/alwatr/commit/3d5b83a569f2d001e31eee0b5782d60321aa453f)) -- **ff-pwa:** root html metas ([9ec0a01](https://github.com/AliMD/alwatr/commit/9ec0a0168d19c716213acc9a5ab454404024a523)) -- **ff-pwa:** viewport ([dba2530](https://github.com/AliMD/alwatr/commit/dba2530b0b040c48d213844ef4833e6ac90ed405)) -- **flight-crawler:** maxHour in makeMessage ([b6599f9](https://github.com/AliMD/alwatr/commit/b6599f9f17fca56268cf8cad9d719e6d2a6c4fef)) -- **flight-crawler:** min&max hour in make message ([611930b](https://github.com/AliMD/alwatr/commit/611930b2984dcdf046b7ca6696ef0d0b7fe16bfc)) -- **flight-crawler:** min&max hour in make message ([a75f7a0](https://github.com/AliMD/alwatr/commit/a75f7a027b9cdaf2edc6574d781b09b3caf3eb78)) -- **icon:** DirectionMixin! ([61b369e](https://github.com/AliMD/alwatr/commit/61b369e4a058d38df79f281dc84193129a12b4a5)) -- **icon:** PropertyValues ([ccba95a](https://github.com/AliMD/alwatr/commit/ccba95a7a716773c57474d8002320304e772e3cc)) -- **icon:** reflect flip-rtl errro ([b2359e6](https://github.com/AliMD/alwatr/commit/b2359e64c2ef9c381274fe91cc038593c0603ee9)) -- **labs/zx:** readme ([51164ae](https://github.com/AliMD/alwatr/commit/51164ae94eb4d06076981b3844377d2088f24bdb)) -- **logger:** version ([2295fee](https://github.com/AliMD/alwatr/commit/2295fee74e8eebd9db399129de31f2b0d6d6b168)) -- **package:** build:r before version ([31e03c9](https://github.com/AliMD/alwatr/commit/31e03c9ea41c75715f4b1a296bf79d8d292d7442)) -- **page-chat:** colors ([35b1bf3](https://github.com/AliMD/alwatr/commit/35b1bf3b18fc96efd0ddf81452301973e2bce3b6)) -- **page-chat:** demo ([1c0d965](https://github.com/AliMD/alwatr/commit/1c0d965b8773627afbcc905cf18c5acf11f0ac9c)) -- **pwa-root:** build issues ([677b05d](https://github.com/AliMD/alwatr/commit/677b05d292187e8aee28c674150bdb264ac0b4c6)) -- **standard-icon-button:** style ([0cfe9ee](https://github.com/AliMD/alwatr/commit/0cfe9ee6ea3e782b95d8953686a25fdc6c7d2847)) -- **ui-kit/chat-footer:** styles ([38e3bbc](https://github.com/AliMD/alwatr/commit/38e3bbc5d35242466cd4e33bf4bcacd5c6a87368)) -- **ui-kit/chat-text-input:** direction mixin ([8f00eac](https://github.com/AliMD/alwatr/commit/8f00eac04fe64fe5aa933a37fddce93c24c1bc58)) -- **ui-kit/chat:** message bubble endSide ([a63f316](https://github.com/AliMD/alwatr/commit/a63f316bd70466a31e72584158f2068eb86d6cff)) -- **ui-kit/chat:** message bubble radius ([fb1669b](https://github.com/AliMD/alwatr/commit/fb1669b546ce6bdaaaa40a161ecd9616682ddfdb)) -- **ui-kit/icon-button:** flip-rtl attr ([9607493](https://github.com/AliMD/alwatr/commit/9607493754ad454c27f26d0eba883ca4488fca67)) -- **ui-kit:** font sizes ([2569644](https://github.com/AliMD/alwatr/commit/25696442da35ba570682c31157489d5802153fbf)) -- **ui/demo-pwa:** \_signalListenerList ([60d39b0](https://github.com/AliMD/alwatr/commit/60d39b0af925152feec56d011a1c7b1477134bf7)) -- **ui/element:** listener list type ([e089d01](https://github.com/AliMD/alwatr/commit/e089d018ed29eae8f0ba92767b12d37f5ad1729c)) -- **ui/style:** body font ([91f6611](https://github.com/AliMD/alwatr/commit/91f66113747f665da3ee585c9787145eb71a1b07)) -- **ui:** root sizes ([2bdf2d5](https://github.com/AliMD/alwatr/commit/2bdf2d5712905d75491f61a5d94322395987b6ab)) - -### Features - -- **chat-\*:** scrollbar and gaps ([c91e2d6](https://github.com/AliMD/alwatr/commit/c91e2d6ec5a4dcc80b2ae71f800dae46cdd8c1f8)) -- **chat-avatar:** new style ([ea11421](https://github.com/AliMD/alwatr/commit/ea114213ad811206897c57f885b2973182a62f94)) -- **chat-bubble:** rewrite with new styles ([f4c5f01](https://github.com/AliMD/alwatr/commit/f4c5f0154935a1df77493f309ac9ce9b072ce5a2)) -- **chat-bubble:** side attrib ([5c36f8d](https://github.com/AliMD/alwatr/commit/5c36f8d5093659b7d6b6a251822294530f235fd0)) -- **chat-list:** new element for list of chats ([3ddae05](https://github.com/AliMD/alwatr/commit/3ddae05cd0bcebb855327f0f449d3ee7c7e576cd)) -- **chat-list:** scrollbar style ([a02074d](https://github.com/AliMD/alwatr/commit/a02074d894d3d812bfe8fb63be37f0edde931c00)) -- **chat-list:** self property and gap and spaces ([9d9edca](https://github.com/AliMD/alwatr/commit/9d9edca5a9a1c4ae1cf9f085ca3da92dfad7acae)) -- **chat-message:** ChatTextMessage type ([227dda3](https://github.com/AliMD/alwatr/commit/227dda3611049f787bfaee2f4443420b005475e2)) -- **chat-message:** gap and spaces ([0b1043a](https://github.com/AliMD/alwatr/commit/0b1043a9a9ba2c67b664ca2edc7ad8610b05c210)) -- **chat-message:** new chat element ([12f9b72](https://github.com/AliMD/alwatr/commit/12f9b724ec35a55d5e7a1d8495dd11ba0f6a77a4)) -- **chat-text-input:** inputElement ([4abfdd6](https://github.com/AliMD/alwatr/commit/4abfdd6c4e73e5db588e6f099fc9d5e1b8cd06db)) -- **chat-text-input:** style ([8c302cc](https://github.com/AliMD/alwatr/commit/8c302ccd7045a91f596a6ddae601ae87a26a8fc5)) -- **chat:** use new color system ([045b188](https://github.com/AliMD/alwatr/commit/045b18891ca8b9ba0a556be6c621747cb8d0a639)) -- **chat:** use new spacing system ([4e0d44e](https://github.com/AliMD/alwatr/commit/4e0d44e419973e28d5584e609f8efbc68f07fcd2)) -- **chat:** use system shape var ([dcff276](https://github.com/AliMD/alwatr/commit/dcff276ec28e345306f1a278a69bd64c05c5e130)) -- **core/type:** make package ([1d8d1bd](https://github.com/AliMD/alwatr/commit/1d8d1bdfc39c4b1e238770a69d7c8e0cad593251)) -- **demo-pwa:** page-chat ([138c4ab](https://github.com/AliMD/alwatr/commit/138c4ab67c342e5682eb12f76a073883a218b4bb)) -- **element/root:** host box-sizing ([0c4ce83](https://github.com/AliMD/alwatr/commit/0c4ce83c5f777aecb2317c832817854ff4cadcf9)) -- **element:** AlwatrRootElement ([3b4e59f](https://github.com/AliMD/alwatr/commit/3b4e59f840f600ebedf07c27a9e4cf4c5f1253c0)) -- **element:** DirectionMixin ([d2670dd](https://github.com/AliMD/alwatr/commit/d2670dd247f93759e3b6457b339a066cc2433269)) -- **element:** export from lit ([21f15d8](https://github.com/AliMD/alwatr/commit/21f15d86319a40fab02d86f24a1451c056f36a7c)) -- **element:** LocalizeMixin ([94f0f7f](https://github.com/AliMD/alwatr/commit/94f0f7f832ff885d7176884f243c57a2a03c7bdb)) -- **element:** use logger ([95708a7](https://github.com/AliMD/alwatr/commit/95708a7b8a8418ffe0cb9a98c6d5ed50ff6308e1)) -- **ff-deploy:** depend on ([d53fae0](https://github.com/AliMD/alwatr/commit/d53fae02700599146ca42e615819fb67bca9feaf)) -- **ff-pwa:** add banner ([5e647f6](https://github.com/AliMD/alwatr/commit/5e647f60c49bddae4ed8d78d67377264465b2adc)) -- **ff-pwa:** app name ([0fb42ae](https://github.com/AliMD/alwatr/commit/0fb42ae3001efbee91d98058816296106373c9b1)) -- **flight-crawler:** min&max hour filter in make message ([bf62864](https://github.com/AliMD/alwatr/commit/bf62864c3d2bd3e00079d03cb260aeda23072008)) -- **icon-button:** enhance styles and motion ([4b4a301](https://github.com/AliMD/alwatr/commit/4b4a301f53a059cc5faa4a75b22fc079f750bc38)) -- labs ([c672f3c](https://github.com/AliMD/alwatr/commit/c672f3cd7e2a336c0fed2bcba5f09d85da62728e)) -- labs refrences and workspace ([9676e29](https://github.com/AliMD/alwatr/commit/9676e290a84e4da07dc38d4c66c29b9a6a6cc179)) -- new ui design system ([8c9c8ba](https://github.com/AliMD/alwatr/commit/8c9c8ba29c477838f3e7034b902f4e0dafabd17c)) -- **page-chat:** new demo ([451d63f](https://github.com/AliMD/alwatr/commit/451d63fc0b904bb780c898c2909b1d7a116b353f)) -- **pwa-root:** style ([20a6fdc](https://github.com/AliMD/alwatr/commit/20a6fdcfdb66561e345e75bac2b0cf8e45818b42)) -- **tokens:** new motions ([48f3745](https://github.com/AliMD/alwatr/commit/48f374562a9f8f87abc7e8033036c819080a39e3)) -- **tokens:** z-zindex ([62926a7](https://github.com/AliMD/alwatr/commit/62926a7b8497f7231093e3bddb129993151f8929)) -- **ui-kit/chat-footer:** build base ([30cf89a](https://github.com/AliMD/alwatr/commit/30cf89aac3a68e0fc028eb7a8a227efce85ba892)) -- **ui-kit/chat-footer:** component ([7041047](https://github.com/AliMD/alwatr/commit/70410476ff7846b14873dfdf6299d528e1de2f61)) -- **ui-kit/chat-footer:** new component ([5151d1c](https://github.com/AliMD/alwatr/commit/5151d1c50c1fd63e1bee479220a4363a9ab800e3)) -- **ui-kit/chat-text-input:** flex grow ([b8837ff](https://github.com/AliMD/alwatr/commit/b8837ff9772959a585e4862f48b9b5da390da561)) -- **ui-kit/chat-text-input:** improve ([28f08a9](https://github.com/AliMD/alwatr/commit/28f08a91ff49ac4567c86fea7d3bd4458d69cc4a)) -- **ui-kit/chat-text-input:** translations ([3d03d3d](https://github.com/AliMD/alwatr/commit/3d03d3d56d9fef34b35c76568fb9d7ec7069f1ee)) -- **ui-kit/chat-text-input:** typography ([e67113e](https://github.com/AliMD/alwatr/commit/e67113ec2e3c8e32a5e700162755995d852aec66)) -- **ui-kit/chat:** avatar remove attrs ([946ffbf](https://github.com/AliMD/alwatr/commit/946ffbf4d06ebf55f77fabce75ccfec3d79d4049)) -- **ui-kit/chat:** bubble element ([06b63f2](https://github.com/AliMD/alwatr/commit/06b63f2138d11df241a0e052cd65327467efd252)) -- **ui-kit/chat:** message bubble endSide attr ([6c1de4b](https://github.com/AliMD/alwatr/commit/6c1de4bc38743c548c1547143d09deab0a995bc7)) -- **ui-kit/icon-button:** component ([7db86bf](https://github.com/AliMD/alwatr/commit/7db86bfa678d64237951a8c8002c38dd51d3d082)) -- **ui-kit/icon-button:** icon flip-rtl ([f6427b6](https://github.com/AliMD/alwatr/commit/f6427b62315389cea308f2a522e358af8b9838cd)) -- **ui-kit:** elevation sample ([ccd9e8a](https://github.com/AliMD/alwatr/commit/ccd9e8a9c7cc94a830a03bf11ddbf46891300f68)) -- **ui-kit:** material style tokens ([39ff343](https://github.com/AliMD/alwatr/commit/39ff343301b49f645b8b06da2e0e9c79566353ce)) -- **ui/chat:** new alwatr-chat element ([f711e12](https://github.com/AliMD/alwatr/commit/f711e12317a263d6e1d4bfc52dae54348cf64923)) -- **ui/demo-pwa/page-chat:** new demo ([7f98b8a](https://github.com/AliMD/alwatr/commit/7f98b8a14c999d17ce30364f48234498b166994f)) -- **ui/demo-pwa/style:** state tokens ([ef3913c](https://github.com/AliMD/alwatr/commit/ef3913c746f0f9b5a34ba9ccc88c1b2d1894dac9)) -- **ui/demo-pwa:** improve ([0eeb244](https://github.com/AliMD/alwatr/commit/0eeb2447ece26708c912e845c0f3b2fbd019614a)) -- **ui/demo-pwa:** use `alwatr-chat-text-input` ([0f5bfd1](https://github.com/AliMD/alwatr/commit/0f5bfd16b7c7973375c97f0a8b03d1e0b39bf148)) -- **ui/demo-pwa:** use icon button ([738571c](https://github.com/AliMD/alwatr/commit/738571c3b3d8cab16b3d1c50e1cca56a1da220f2)) -- **ui/demo:** new pwa package ([#508](https://github.com/AliMD/alwatr/issues/508)) ([93b9722](https://github.com/AliMD/alwatr/commit/93b972254845756d339574f4eec909807e69b3c4)) -- **ui/element/i18n:** localization mixin ([999e1b1](https://github.com/AliMD/alwatr/commit/999e1b11f0af55704fdd5859398908aeedbb833c)) -- **ui/element:** seprate mixins ([a305c5d](https://github.com/AliMD/alwatr/commit/a305c5d0e027b4c19fb1a22e4dc75797d205655a)) -- **ui/icon:** localize mixin ([d91fe98](https://github.com/AliMD/alwatr/commit/d91fe98c3d9df8e30e5159ab93bb8018ef6d4c90)) -- **ui/tokens:** new spacing columns ([c46d1cd](https://github.com/AliMD/alwatr/commit/c46d1cd0ad58aaeef43bfc7628e844f611b0b969)) -- **ui/tokens:** spacing system ([cfd6b0e](https://github.com/AliMD/alwatr/commit/cfd6b0ee46472902c6ab52ab1002fc36eb37e489)) -- **ui/ui-kit:** chat text input component ([586aefd](https://github.com/AliMD/alwatr/commit/586aefd7fcbfd520f36f035415dbb76d5ffa324f)) -- **ui:** global style ([6800205](https://github.com/AliMD/alwatr/commit/6800205215129d82b6afbfad2adbfb02a107c1a9)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **.github:** matrix ([a11b573](https://github.com/AliMD/alwatr/commit/a11b57340b58244d8d1c986018932f0d446f635e)) -- add esbuild to git ignore ([46b3714](https://github.com/AliMD/alwatr/commit/46b3714a4b578b6cfae9e2d17f8c39623470c1f5)) -- all import without .js ([fa739ab](https://github.com/AliMD/alwatr/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -- **alwatr-pwa.dockerfile:** syntax issue ([e52bfd9](https://github.com/AliMD/alwatr/commit/e52bfd919c2fe2d9a3e1ebee334b34b35457d274)) -- **alwatr-services.dockerfile:** enable esm module ([a48906a](https://github.com/AliMD/alwatr/commit/a48906a342ee20be712d5de6b2816ea2af8c1ad9)) -- **alwatr-services.dockerfile:** enable esm module ([3a96fc1](https://github.com/AliMD/alwatr/commit/3a96fc1c48e0845800c262c06d16f9069654d1fd)) -- **alwatr-services.dockerfile:** esm module ([6f2a650](https://github.com/AliMD/alwatr/commit/6f2a650c759d89d01d393b18c8450c84aee0107b)) -- **api:** correct token in demo.http ([d99b850](https://github.com/AliMD/alwatr/commit/d99b8508646cf8911de74b95a11a4ab29849d16b)) -- **api:** dmeo token ([5b36f2c](https://github.com/AliMD/alwatr/commit/5b36f2c69f53f9e56dbd641b3073b0a8af171501)) -- **api:** fuck, CORS, CORS and CORS! ([50869dd](https://github.com/AliMD/alwatr/commit/50869ddfd8554d624a2dd97f37b6fd16888131e9)) -- **api:** handle preflight request ([4c13aef](https://github.com/AliMD/alwatr/commit/4c13aef4a4d7a48c32c3281e56c4833888f2f8d2)) -- **api:** reply in put route ([3911045](https://github.com/AliMD/alwatr/commit/3911045cf3c6c3247423f6370213fd452745db99)) -- **api:** reuqire token env ([d4b7deb](https://github.com/AliMD/alwatr/commit/d4b7debd318e670fc5de5d3144efdbe8a43777e6)) -- **api:** review ([6ef6fe3](https://github.com/AliMD/alwatr/commit/6ef6fe35257530a7011bd33bf7584c457d560a7c)) -- **api:** set jobResult empty array ([eb9b6f6](https://github.com/AliMD/alwatr/commit/eb9b6f635edf4a2ea65e6d6820d13a14ea0786a9)) -- **api:** update types ([15b2126](https://github.com/AliMD/alwatr/commit/15b21266936e099d6c3408e3c82be42188afc489)) -- **api:** use filter key in PUT ([e013a77](https://github.com/AliMD/alwatr/commit/e013a77de26fbae8a3fb8c78fc88755d272f7dff)) -- **api:** use IP for storage host ([d59e29e](https://github.com/AliMD/alwatr/commit/d59e29e62542dc1db52346d669dd5710a6de2efe)) -- **api:** use PATCH method for add job route ([9c14eac](https://github.com/AliMD/alwatr/commit/9c14eac43e7407c42f24c6b91f84b5b6910baf07)) -- clean command ([14bafbb](https://github.com/AliMD/alwatr/commit/14bafbb01b3c92ccf516346a4e5117f1893c32e9)) -- **cloud/classic/deploy:** remoteShell must failed of DEPLOY_PATH not exist ([e8284c2](https://github.com/AliMD/alwatr/commit/e8284c2b4fbfadd8ced1bc1e79cf7b6f433fb018)) -- config ([893ba7c](https://github.com/AliMD/alwatr/commit/893ba7c92002a01d802ee945b65a7c3accc244bb)) -- **container:** build nodes in production env ([dc6709e](https://github.com/AliMD/alwatr/commit/dc6709e275b9d137574d7667cbd78739505b0c58)) -- **core/fetch:** tsconfig refrences ([e6b9542](https://github.com/AliMD/alwatr/commit/e6b9542284e67b67600da4dcebd19daedb031c9c)) -- CORS helper ([df48fa7](https://github.com/AliMD/alwatr/commit/df48fa75ef248b5fe07919265dd9e5e7db7c9cc3)) -- crawler loop ([72951f9](https://github.com/AliMD/alwatr/commit/72951f904c8e8eb04ded2a485a65add99150f984)) -- **crawler:** add DOM to tsconfig lib ([02691e0](https://github.com/AliMD/alwatr/commit/02691e049d38c887da35cbcfa207bbdb3bd56b42)) -- **crawler:** guard-for-in ([e5bb441](https://github.com/AliMD/alwatr/commit/e5bb441525846c858b6bf1e1b9c8a5f57b1bff85)) -- **crawler:** handle null max price ([b34689e](https://github.com/AliMD/alwatr/commit/b34689e38ee57a425fcc09cbb392b07d15ad3b02)) -- **crawler:** make config like the other ([491877d](https://github.com/AliMD/alwatr/commit/491877d90993aad6e262a466706de6e577dd94f9)) -- **crawler:** review ([8283320](https://github.com/AliMD/alwatr/commit/828332022898e277bef21b53f39e1daf5f442b04)) -- **crawler:** review ([b3cbfec](https://github.com/AliMD/alwatr/commit/b3cbfec068e81349da2a1fe79a12dff158e1ad92)) -- **crawler:** review ([4ee863d](https://github.com/AliMD/alwatr/commit/4ee863d6ec28c351fd7e4bd68885f70d10d01b46)) -- **crawler:** sepehr type ([bd475fe](https://github.com/AliMD/alwatr/commit/bd475feb4c9a29e9113656005a58195b4501a0da)) -- **crawler:** structure ([fbc2f33](https://github.com/AliMD/alwatr/commit/fbc2f3307d9db79f25ed7ca74808552e75859add)) -- data must valid ((((((: ([94b5258](https://github.com/AliMD/alwatr/commit/94b52589e368e495a85dd86b23a24e6a24bed05d)) -- **demo/storage-client:** getStorage ([21b2361](https://github.com/AliMD/alwatr/commit/21b2361a2de49097a5e70ff5282a3df0d393e3d2)) -- dockerfile ([28999a1](https://github.com/AliMD/alwatr/commit/28999a1a6fdd97bf297c5f0340344c72625ff09d)) -- **element:** improve logger ([84f610f](https://github.com/AliMD/alwatr/commit/84f610fc27ee9b48ec0ef1173d12ce933ec4a97d)) -- encription in git attributes ([942398a](https://github.com/AliMD/alwatr/commit/942398aa796e7fbc160dae9cb04ce0d8bbd73acb)) -- **eslint:** project path ([fab66d0](https://github.com/AliMD/alwatr/commit/fab66d07b6b434e37fa48d4d6796b6e119a46dd9)) -- **fetch:** always call revalidateCallback ([444edc5](https://github.com/AliMD/alwatr/commit/444edc52b6dd5de5418ae8630e1f2270f0114372)) -- **fetch:** enhance handle and report errors in serviceRequest ([dbfc7ff](https://github.com/AliMD/alwatr/commit/dbfc7ff2a036216498dc8e2ff58b74b7eb8d9bc0)) -- **fetch:** fetch_cache_not_found is not error ([3d1aa4e](https://github.com/AliMD/alwatr/commit/3d1aa4e572fbf4bc7b0a527a3fdcf4c521af18dd)) -- **fetch:** fetch_failed error message ([3e98bd9](https://github.com/AliMD/alwatr/commit/3e98bd926a495c13d476f2f1cfb9e546a059d4d8)) -- **fetch:** remove extra \_options ([ad24c81](https://github.com/AliMD/alwatr/commit/ad24c8104b944ebda52308e60d41976ac1eeee81)) -- **fetch:** revalidateCallback issue ([7207909](https://github.com/AliMD/alwatr/commit/72079098edb438c28256dad03d7802bc2fab0858)) -- **ff-api:** rename dest ([5589ef4](https://github.com/AliMD/alwatr/commit/5589ef4968ea0b1d9f82cbceba5a15db1cb78ddd)) -- **ff-pwa:** build ([565f6d1](https://github.com/AliMD/alwatr/commit/565f6d1f68bb7268d7980893b15f33bf1dc85d0c)) -- **ff-pwa:** job-item title ([6f6633d](https://github.com/AliMD/alwatr/commit/6f6633dd32f879329f5b208d38ad6a62b54ed6be)) -- **ff-pwa:** JobDetail destination ([ad983f7](https://github.com/AliMD/alwatr/commit/ad983f7960da79c44e3c3b565e640be659c0fc43)) -- **ff-pwa:** JobResult type ([3923187](https://github.com/AliMD/alwatr/commit/3923187a1de217b04fc28521488d6ff26e2749f5)) -- **ff-pwa:** render issues ([81d4c7e](https://github.com/AliMD/alwatr/commit/81d4c7ea875e759a2b9a86f49a143617bffe9b2c)) -- **ff-pwa:** requestJobStorage ([35cbb0c](https://github.com/AliMD/alwatr/commit/35cbb0c9429561028b77dcf578d67e9196fd77b3)) -- **ff-pwa:** safari issue ([78fb968](https://github.com/AliMD/alwatr/commit/78fb9689af4e003268f1d8b62473f2ae6cf9e8f8)) -- **ff-pwa:** types ([f536092](https://github.com/AliMD/alwatr/commit/f5360922d8f86f9e3753ab46b5717b0194545c0a)) -- **ff:** deployment ([f58fe50](https://github.com/AliMD/alwatr/commit/f58fe5096d4ee6bd640ed8925a99a04c1fc253c2)) -- **ff:** deployment issues ([d3b617b](https://github.com/AliMD/alwatr/commit/d3b617bd4da960df8e62e64610d283356bd19d6e)) -- **ff:** types ([68b00e0](https://github.com/AliMD/alwatr/commit/68b00e0e53e3fe7639d7eb0f4966d6192be453e4)) -- **flight-crawler:** check job list not empty ([6aa8546](https://github.com/AliMD/alwatr/commit/6aa8546ae24b7b49224000f5802602b5b5c34ca4)) -- **flight-crawler:** handle null min and max hour ([3178fa7](https://github.com/AliMD/alwatr/commit/3178fa7954b73eb51dbd081ebc2103a7a45696a4)) -- **flight-crawler:** makeMessage ([1b36a69](https://github.com/AliMD/alwatr/commit/1b36a69f0e418d1343f3a901f2207f3cba60a203)) -- **flight-crawler:** min&max hour in demo.http ([b567992](https://github.com/AliMD/alwatr/commit/b567992e19b6d95eddf6aca481ec157469c390bb)) -- **flight-crawler:** null maxPrice on makeMessage ([b87b3ed](https://github.com/AliMD/alwatr/commit/b87b3edc83f449d56f8211a8550dd26c2ae45269)) -- **flight-crawler:** rename job to result in extrafiltr ([3dc4918](https://github.com/AliMD/alwatr/commit/3dc4918ca0184cf56e3b90b828aacbe2c891d635)) -- **flight-crawler:** set in storage single time ([bfc87ce](https://github.com/AliMD/alwatr/commit/bfc87ce851bfdf9fa31c687fb3fcf78e011c1cf1)) -- **flight-crawler:** sort ([48c3d10](https://github.com/AliMD/alwatr/commit/48c3d102838c3d12f590fb58c88bab3aa6d09620)) -- **flight-crawler:** use getStorage ([a65e6bd](https://github.com/AliMD/alwatr/commit/a65e6bdac15c811971e3ed2c19e822d0311f1dfe)) -- **flight-finder-pwa:** image path in manifest.json ([c52d812](https://github.com/AliMD/alwatr/commit/c52d81266bb1fb3ec9b81a574c16f89519825786)) -- **flight-finder:** extra filter ([a17554b](https://github.com/AliMD/alwatr/commit/a17554b94c749607a0adb55414960c95515f005c)) -- fucking conflict ([37063fc](https://github.com/AliMD/alwatr/commit/37063fc4c535d9b653905b94b2993f0a7aa62566)) -- inline home route ([94279c2](https://github.com/AliMD/alwatr/commit/94279c21891fc710f48642b1c8debbf02b2436d3)) -- inline home route ([ce978f6](https://github.com/AliMD/alwatr/commit/ce978f6e1e2890e853d0db351c08efca665e5fad)) -- job list ([83a0459](https://github.com/AliMD/alwatr/commit/83a0459ff609a722f77a2c0cf57d9f83fa33cdcf)) -- litPolyfill path ([3b57af7](https://github.com/AliMD/alwatr/commit/3b57af78f263aaf96b02e5b7de195638e9df82e1)) -- missing packages ([f0b26e6](https://github.com/AliMD/alwatr/commit/f0b26e64a464b0248bb46e76de7739181d4d7c05)) -- **nano-server:** check method on getBody ([9aa9857](https://github.com/AliMD/alwatr/commit/9aa9857fb6ad96f861f31c651bf131813e46b343)) -- **nano-server:** handle utf8 reply issue ([33aa238](https://github.com/AliMD/alwatr/commit/33aa238d99f92c03a5b39e829cb39172dc45d5c6)) -- **nano-server:** remove return null on requireToken ([3c6779f](https://github.com/AliMD/alwatr/commit/3c6779f6b114aa1afe71e9b2054fb6dbe273c26a)) -- **nano-server:** route generic ([94e181b](https://github.com/AliMD/alwatr/commit/94e181ba1172399ac992af6dc969c56e4edffbf0)) -- **nano-server:** update docs and return type ([df949c1](https://github.com/AliMD/alwatr/commit/df949c19ea75921ab9c3e7323dc33ef340bd3ee7)) -- package.json script ([e633a8c](https://github.com/AliMD/alwatr/commit/e633a8c4355bec0d2fc044f073f7f639c0fd1976)) -- packages ([a4a442e](https://github.com/AliMD/alwatr/commit/a4a442e7e12986f7d0eed52f2329b5c4904f01f8)) -- partDay type ([2d3f263](https://github.com/AliMD/alwatr/commit/2d3f263a2e0c3c0c21a5f6270b8ef607d926b56b)) -- **publish-alwatr-container:** cosign issue ([37c1074](https://github.com/AliMD/alwatr/commit/37c1074adca586ab69431a0f19c35937b0af7ce4)) -- **publish-services:** build command ([9ee78f6](https://github.com/AliMD/alwatr/commit/9ee78f6521c4ed57e06c85a423b1226e861fabb3)) -- **publish-services:** build issue ([a69919d](https://github.com/AliMD/alwatr/commit/a69919d21554834989d47b6790d7be1609894de5)) -- **publish-services:** copy files ([b42cb9f](https://github.com/AliMD/alwatr/commit/b42cb9fd186c9ae1b8b0f1e2dc2c22a7d3095c4d)) -- **publish-services:** image name ([aba6531](https://github.com/AliMD/alwatr/commit/aba6531b05fb54e3a622e4c69007ec2dc18b2d89)) -- **publish-services:** source file args ([bd3a534](https://github.com/AliMD/alwatr/commit/bd3a534c28b2793ebcf3521a52d70c74dcf79b6b)) -- **pwa/ff:** `ok-text` in `job-add-form` ([0c63574](https://github.com/AliMD/alwatr/commit/0c63574f8d23c5efcdee2d0bb8a0670a7d034182)) -- **pwa/ff:** dbl click prevent default ([c8d113a](https://github.com/AliMD/alwatr/commit/c8d113a76ef5cd1cf97f69792c08a16f88a6701c)) -- **pwa/ff:** timer ([f31b707](https://github.com/AliMD/alwatr/commit/f31b707df599a390203579d8f77156fb6f2f3b19)) -- **pwa/ff:** timer selector ([201f3c4](https://github.com/AliMD/alwatr/commit/201f3c48ecbe6a657bd3c7ac0d1a42e276b7d69d)) -- **pwa/flight-finder:** rollup litPolyfill path ([75e7f28](https://github.com/AliMD/alwatr/commit/75e7f28e9e27eadfbfb75f0e3075e51f6fa3355d)) -- **pwa/job-item:** remove extra ? ([c7d28ee](https://github.com/AliMD/alwatr/commit/c7d28ee74890536f1f4675e6568348b9962e56aa)) -- **pwa/page-flight-finder:** extra logs and template issues ([bc45b8f](https://github.com/AliMD/alwatr/commit/bc45b8f8e77fac96361a89cf85b8fc0a17b0646b)) -- **pwa:** `ion-popover` stylesheet ([92d3141](https://github.com/AliMD/alwatr/commit/92d3141fc4270d3ecdb76d962007b623ef967856)) -- **pwa:** `ServerResponseFailed` type ([3922562](https://github.com/AliMD/alwatr/commit/392256251b590e5b4bf12852f22c4886b7174a2c)) -- **pwa:** base url of index html ([b1d1b02](https://github.com/AliMD/alwatr/commit/b1d1b0217a23772dc701a2722641e39098b4ce81)) -- **pwa:** build ([957652d](https://github.com/AliMD/alwatr/commit/957652de7df6bf816d4f40211aa37b5fd371b77d)) -- **pwa:** config ([e29699e](https://github.com/AliMD/alwatr/commit/e29699e87589e1abc625b9cf5e24f1721525d126)) -- **pwa:** fetch url ([1eb19ae](https://github.com/AliMD/alwatr/commit/1eb19ae3cafbf24679abdfbb94ba00542059db1a)) -- **pwa:** input default value ([c01d4e7](https://github.com/AliMD/alwatr/commit/c01d4e7b47c9cc768b2fd50553227cc9bd3a1515)) -- **pwa:** input type ([477163e](https://github.com/AliMD/alwatr/commit/477163e672263721bb78b86a62b3dccc2c53df4e)) -- **pwa:** l10n listeners ([ab4b671](https://github.com/AliMD/alwatr/commit/ab4b671435a85226bff2ff07d407cfff6df40cba)) -- **pwa:** manifest icon ([c3e64be](https://github.com/AliMD/alwatr/commit/c3e64bed745b683233d232c37662cd7add1a1ceb)) -- **pwa:** reported issues ([8648bf2](https://github.com/AliMD/alwatr/commit/8648bf2ad7e7e9dcbc2bef555393086190ef047c)) -- **pwa:** reported issues ([be53e41](https://github.com/AliMD/alwatr/commit/be53e41a57dc70aa9dba9061a516e40312286299)) -- **pwa:** reported issues ([2bc6f43](https://github.com/AliMD/alwatr/commit/2bc6f43461b315295f8a6967ca664feea7d0a3ab)) -- **pwa:** rollup `lit-polyfill` dynamic path ([f1c592a](https://github.com/AliMD/alwatr/commit/f1c592a6c1908721e57fe39a491688570855e0d2)) -- **pwa:** set correct url for API ([52b99aa](https://github.com/AliMD/alwatr/commit/52b99aa77302687cb6e72fdfc7db8e9c4abcfe43)) -- **pwa:** theme color ([26f8397](https://github.com/AliMD/alwatr/commit/26f839703bf0d821ff8991632599da268d979c7a)) -- **pwa:** update types ([4e4e723](https://github.com/AliMD/alwatr/commit/4e4e7237e1f03ab510ccd63ffe50290e51c98516)) -- **pwa:** update types based on api ([942cc2b](https://github.com/AliMD/alwatr/commit/942cc2bf7907c40cc57736bd67b9c7426dae2bfa)) -- remove dockerignore ([1272a4c](https://github.com/AliMD/alwatr/commit/1272a4cb14420e21bb8cf4c3d319e612ba50a7c8)) -- remove lint dependencies from services ([f047a5b](https://github.com/AliMD/alwatr/commit/f047a5bb0d1e8277f48b55969e18dc3582d9a234)) -- remove pwa from workspace ([bef16b5](https://github.com/AliMD/alwatr/commit/bef16b5abe1288dc3153ab4796df3a1b01b014e2)) -- reported issues ([8e3ad0e](https://github.com/AliMD/alwatr/commit/8e3ad0e8da3f937d554edb024c462aaa61b7355e)) -- review ([0463199](https://github.com/AliMD/alwatr/commit/04631991bdd35dfa08aa5184337bd7933a76c21a)) -- review issue ([dd10b72](https://github.com/AliMD/alwatr/commit/dd10b722fcc7bb01ceb40ebcf54d9a7fbc94139b)) -- services serve script ([3c62e06](https://github.com/AliMD/alwatr/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- **services/comment:** outDir on tsconfig ([00702c3](https://github.com/AliMD/alwatr/commit/00702c3c45757a140bc95938a6377df8bee46518)) -- **services/telegram-notifier:** remove await out of fucntion ([283b58b](https://github.com/AliMD/alwatr/commit/283b58b0ebf8a9c01805e1aa6ee8222933b9dbc7)) -- **services/telegram-notifier:** remove storga-client ([c27f992](https://github.com/AliMD/alwatr/commit/c27f9927b97f4d6f2e9c78d5a0a3f0268275bc38)) -- **services/telegram-notifier:** set stroage name in config ([010fa71](https://github.com/AliMD/alwatr/commit/010fa71cf15698bffcc5378b252bd0aa564d8d6e)) -- **services:** dockerfile syntax issue ([1465fbe](https://github.com/AliMD/alwatr/commit/1465fbe89913feded6a452f2d28bf38f78dd2792)) -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- **signal:** request value must not a null ([b8fb37f](https://github.com/AliMD/alwatr/commit/b8fb37f527bcad2fbeb0d01847a5c5df6ad6736d)) -- storage-client config ([657360d](https://github.com/AliMD/alwatr/commit/657360d24a39e80f698e3849bd7a11a3f735b797)) -- **storage-client:** build issue ([20df110](https://github.com/AliMD/alwatr/commit/20df1106f8fad4dc916d44467584000cace07541)) -- **storage-client:** getStorage queryParameters ([441c2f8](https://github.com/AliMD/alwatr/commit/441c2f88719d0fd98eb70d26aa4ea79a47acd6b9)) -- **storage-client:** import type ([c1ef85d](https://github.com/AliMD/alwatr/commit/c1ef85d74be28998f5b5ce6b55bb92a6c40fcd89)) -- **storage-engine:** AlwatrDocumentStorage ([ca9a7bf](https://github.com/AliMD/alwatr/commit/ca9a7bf5e17b333538e749ada5d481a06c847101)) -- **storage-engine:** export type ([4dbd79f](https://github.com/AliMD/alwatr/commit/4dbd79f746484c870f877b98d556930e9c35b3f9)) -- **storage-engine:** work with new types ([e86c9cd](https://github.com/AliMD/alwatr/commit/e86c9cd8de6fb6b73f3b5e185b4cc7a7afe81a83)) -- **storage-server:** prevent to modify storage by reply ([5baecda](https://github.com/AliMD/alwatr/commit/5baecda57b78ac984a5e92108d12acdd22ac0d44)) -- **telegram-notifier:** build ([ecce1df](https://github.com/AliMD/alwatr/commit/ecce1df81642b329dfb863d0503c06fc40688550)) -- **telegram-notifier:** folder ([8bb0b01](https://github.com/AliMD/alwatr/commit/8bb0b016502f6e2c5b1dd588e8300d36eb24eba7)) -- **telegram-notifier:** handle kill signal ([a8e00a7](https://github.com/AliMD/alwatr/commit/a8e00a74ae39f3fb44be659db18829d5d1ebbbdc)) -- **telegram-notifier:** lanch fail ([413b5fc](https://github.com/AliMD/alwatr/commit/413b5fc3753304fe3c7e3e4ff574040fe3395ae8)) -- **telegram-notifier:** prevent duplicate register ([4f41f4c](https://github.com/AliMD/alwatr/commit/4f41f4c6cca881f0fc90cc253d8d6eaa15a50c43)) -- **telegram-notifier:** set storage path ([1ca9d3f](https://github.com/AliMD/alwatr/commit/1ca9d3fb8cb667ef89dfdff2736356ce13616f9b)) -- **toast:** reported issues ([c4a6b31](https://github.com/AliMD/alwatr/commit/c4a6b3133f4f22da1a8bdf6eddd50a2a3ca36819)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -- tsconfig outDir ([74ba4f7](https://github.com/AliMD/alwatr/commit/74ba4f790e401dd3919d688f9731c1248f460099)) -- tsconfig path ([02a1fdf](https://github.com/AliMD/alwatr/commit/02a1fdfc8491e0fade218f00c6790e1409fafcaa)) -- tsconfig refrences ([87c55ba](https://github.com/AliMD/alwatr/commit/87c55ba5f3598986f852fd3898ed059265ca472a)) -- tsconfig refrences ([cea0562](https://github.com/AliMD/alwatr/commit/cea05621ecfa499476c5b10a412e60f27ba6a06d)) -- **ts:** dom types ([8b7d8aa](https://github.com/AliMD/alwatr/commit/8b7d8aa74ff8843d0eca32e1501e07ba81ea0e15)) -- **ui-kit/element:** `private` to `protected` ([a5333c2](https://github.com/AliMD/alwatr/commit/a5333c21265165262babe3891bafadd7e9e6a6a8)) -- **ui/\*:** package path ([21dc99f](https://github.com/AliMD/alwatr/commit/21dc99fddb55b085a3d79b8595ae4630520bc43e)) -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) -- **uniquely/ff:** tsconfig ([f56b2c7](https://github.com/AliMD/alwatr/commit/f56b2c7db374460580f9596847ab845dc9f63d98)) -- **uniquely/flight-crawler:** prevent set storage repeated ([75bd67d](https://github.com/AliMD/alwatr/commit/75bd67da3e63b0b5953b24da22d91cd649fa3bcb)) -- update dockerfile based on alwatr ([30d7c0a](https://github.com/AliMD/alwatr/commit/30d7c0a8b8d9c89a56e3a277baf1f6014947203e)) -- update DocumentObject type ([8e3063f](https://github.com/AliMD/alwatr/commit/8e3063f53960443ef56111905228674c4f278b10)) -- update reply nano-server ([5a2d0e5](https://github.com/AliMD/alwatr/commit/5a2d0e5698b16cffcc5393ee4a44ffda66702425)) -- **vscode:** file exclude pattern ([54baba1](https://github.com/AliMD/alwatr/commit/54baba1baf4b65f789a26d8ff2c70eada863c005)) -- **vscode:** files.exclude setting ([d06c09d](https://github.com/AliMD/alwatr/commit/d06c09dd0b7bf119c3faceff5e3b251e6fa5be65)) -- **workflow/publish-container:** name ([2d7cbaf](https://github.com/AliMD/alwatr/commit/2d7cbaf1c9aba438d19797e31109fc827b11317b)) -- **workflow/publish-services:** build-args ([7ff4179](https://github.com/AliMD/alwatr/commit/7ff417942e5c1b238fd364c1a91966d61cddcdac)) -- **workflow/publish-services:** name ([d8a777a](https://github.com/AliMD/alwatr/commit/d8a777a6cd03a5e1c07fb886c0395cdd615be0b0)) -- **workflow/publish-services:** run on pull_request ([3d988b8](https://github.com/AliMD/alwatr/commit/3d988b890e63b904d3552b56a4fc7ebc92661869)) -- **workflow/publish-services:** use default node version ([d0abc0c](https://github.com/AliMD/alwatr/commit/d0abc0cae1e4fae71f9f1bb98382d64284c30506)) -- **workflow:** publish container workflow name ([e4c4828](https://github.com/AliMD/alwatr/commit/e4c4828c1e4f68206e65b5a17a9e47e34a128c43)) -- **workflows/build:** build all child packages ([f7e5b99](https://github.com/AliMD/alwatr/commit/f7e5b99c61e845e3a9512a777f6883b4f8b0e06e)) -- workspace ([4c850cf](https://github.com/AliMD/alwatr/commit/4c850cf3f3690d438888c3a408ad5b6a4512f07a)) - -### Features - -- **.github:** copy config from alwatr! ([15712a8](https://github.com/AliMD/alwatr/commit/15712a85d833679a16096f2d2eaefdb992215c79)) -- **.vscode:** extension recommendation ([cdc9240](https://github.com/AliMD/alwatr/commit/cdc9240ba028756faa15eb746462fb912fc79b68)) -- **`job-item`:** add description ([d45752a](https://github.com/AliMD/alwatr/commit/d45752af7175e03504a4bb7799296ad80d0708cd)) -- **`job-item`:** build components ([70d25d1](https://github.com/AliMD/alwatr/commit/70d25d1ee16eb1d819b18aeead03f0879a24306f)) -- add api package ([118ca37](https://github.com/AliMD/alwatr/commit/118ca37b78d3259936bb1344aaaba28c8847ea04)) -- add crawler package ([6e659fb](https://github.com/AliMD/alwatr/commit/6e659fb6fa836de6aaf2ae1bc62ef890df510746)) -- **api:** current and delete route ([18816a7](https://github.com/AliMD/alwatr/commit/18816a7b1b91e10c0d213bcca5523847fa18ff44)) -- **api:** dockerize service ([2b80ccd](https://github.com/AliMD/alwatr/commit/2b80ccd53ab6f459e26518c24dc4016990bc181c)) -- **api:** random id ([300e2b4](https://github.com/AliMD/alwatr/commit/300e2b4a0180e568b9b8c5ac0a8d16fe7125e4ea)) -- **api:** requireToken ([8a56e29](https://github.com/AliMD/alwatr/commit/8a56e29715e7fb35a1455e1b6b7f94921cf21d32)) -- **api:** review ([90e628a](https://github.com/AliMD/alwatr/commit/90e628af7afdf326d5b5c3455e79d50cacc287cf)) -- **api:** seatCount, maxPrice and description ([640434c](https://github.com/AliMD/alwatr/commit/640434c0e66dd1f76e36204e2433084602ee1077)) -- **build:** configurations ([0081cdc](https://github.com/AliMD/alwatr/commit/0081cdc3e5dd5acf7c037ed13a8dcf0915d3407e)) -- compose networking ([9299364](https://github.com/AliMD/alwatr/commit/9299364f8dd73e2382dcf7081f74a71241a10ee8)) -- **compose.yml:** add sotrage-server ([450912a](https://github.com/AliMD/alwatr/commit/450912af338b38df4ba082b969250f1943106358)) -- **crawler:** add delete ([80c0490](https://github.com/AliMD/alwatr/commit/80c0490454d125068f6ecb47521f5ff82f1ecfd3)) -- **crawler:** add delete ([6dd73aa](https://github.com/AliMD/alwatr/commit/6dd73aa26efb7cc30c6a2cbd229c72ff2ec684b1)) -- **crawler:** add route ([0f58f4a](https://github.com/AliMD/alwatr/commit/0f58f4a30079565b3b99a5f2b23e5e9a58c42ca2)) -- **crawler:** add route in index ([f72f0ac](https://github.com/AliMD/alwatr/commit/f72f0ac9221ec197cb5923a85e0f8016a75ff411)) -- **crawler:** config ([473d4c7](https://github.com/AliMD/alwatr/commit/473d4c774afea3dc3fce8eb05a00c570a53804c4)) -- **crawler:** crawl ([054b85c](https://github.com/AliMD/alwatr/commit/054b85c82f6930a0adb6e9c9034108bab54309b0)) -- **crawler:** dockerize service ([e6303c3](https://github.com/AliMD/alwatr/commit/e6303c3b4eebdf941249a21c55d3c676415619fb)) -- **crawler:** maxPrice & seatCount extra filter ([3d42c38](https://github.com/AliMD/alwatr/commit/3d42c38cd1fbe9199293e0e9dc2b4c3e84c91ecd)) -- **crawler:** notify ([87d9a22](https://github.com/AliMD/alwatr/commit/87d9a22e3e6d1fb3bb1908184facc09d3ed732ab)) -- **crawler:** storage client ([2b3fe69](https://github.com/AliMD/alwatr/commit/2b3fe69da86e8e7d732b24d652a80eae746156c1)) -- **director:** job providers ([72c795c](https://github.com/AliMD/alwatr/commit/72c795c2b1328b7acace235ee9d85ce90dc64406)) -- dockerignore ([8726816](https://github.com/AliMD/alwatr/commit/8726816c2003e20d3a93a53a3d8a5dc54ca23714)) -- esbuild (: ([43c7269](https://github.com/AliMD/alwatr/commit/43c7269333cf71b142e26da1456446d42fb3f8e0)) -- **eslint:** configurations ([f104c75](https://github.com/AliMD/alwatr/commit/f104c75bc0ac888d28e641361874bde67297edd8)) -- **fakedata:** job list ([272440c](https://github.com/AliMD/alwatr/commit/272440cf9311169a8cf69cbab0e273469585cc26)) -- **fetch:** add AlwatrDocumentStorage type ([44b84f0](https://github.com/AliMD/alwatr/commit/44b84f0754169a707472655811020f6e542a6e5d)) -- **fetch:** serviceRequest ([b0b5478](https://github.com/AliMD/alwatr/commit/b0b5478d16b2cb590cfc29d644006e4a459dd6d6)) -- **fetch:** serviceRequest ([#513](https://github.com/AliMD/alwatr/issues/513)) ([113ee49](https://github.com/AliMD/alwatr/commit/113ee498c778d9efc00cc4807bfef09e52336a31)) -- **ff-pwa:** copy city list ([a37373b](https://github.com/AliMD/alwatr/commit/a37373b7ec60bfdb340beb695bf8311f8b94d0ee)) -- **ff-pwa:** show version ([9a3b7a0](https://github.com/AliMD/alwatr/commit/9a3b7a07b5d7218bee21bfcc875c7ad2564cd988)) -- **ff-pwa:** use city list ([7d70cb3](https://github.com/AliMD/alwatr/commit/7d70cb35b97fab14b1e026ea93ab9654e4ee3f1e)) -- **ff/deploy:** debug env ([52e4ff2](https://github.com/AliMD/alwatr/commit/52e4ff2df7c173362135bb2b3020d67777ed0edf)) -- **ff:** deployment ([10cc244](https://github.com/AliMD/alwatr/commit/10cc2441d7eec1d7136bf8bfe1be02a59f2e149d)) -- **ff:** deployment ([b0d6806](https://github.com/AliMD/alwatr/commit/b0d68060a178eb86e207655cf631e538b70eed58)) -- **ff:** min & max hour ([f7f5884](https://github.com/AliMD/alwatr/commit/f7f58840ea4d7b0678107cebb3887523e2aa4c55)) -- **flight-crawler:** format prices ([2275944](https://github.com/AliMD/alwatr/commit/2275944714bb03107300bd0be9e261e90de8843e)) -- **flight-crawler:** increase delay ([2c40c69](https://github.com/AliMD/alwatr/commit/2c40c699151506a84912935c032be0e63fe9ed3a)) -- **flight-crawler:** new jobResult option ([4566b3d](https://github.com/AliMD/alwatr/commit/4566b3d376a5d4b41e8fc29500219f9dc4720ce4)) -- **flight-crawler:** run infinite ([a0185bc](https://github.com/AliMD/alwatr/commit/a0185bc39eab40862e0621ae703f604b30998991)) -- **flight-crawler:** sort jobResult ([de6d511](https://github.com/AliMD/alwatr/commit/de6d5112cd36178fee930fada5eba88846b5cc55)) -- **flight-crawler:** time filter ([bcff68f](https://github.com/AliMD/alwatr/commit/bcff68fe5be6d50b20329cc752fb51e894ab0f52)) -- **flight-crawler:** update message ([1d3275c](https://github.com/AliMD/alwatr/commit/1d3275cd4129960b15a03d03e4c468a839e7f3c2)) -- **flight-crawler:** use city list ([773c37d](https://github.com/AliMD/alwatr/commit/773c37d2c8807e015e3c90167f564aeb2347328f)) -- **flight-finder-pwa:** set config ([993bbbb](https://github.com/AliMD/alwatr/commit/993bbbb4100553605665af427113c18fbfa1534c)) -- improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- **ionic:** define components ([6b115f1](https://github.com/AliMD/alwatr/commit/6b115f1a4f60b1a9a1b2c20842c899e1bb1566d5)) -- **l10n:** translations ([6d1ad60](https://github.com/AliMD/alwatr/commit/6d1ad603b8278f4ea9c9ea8a158ab1b41c8596da)) -- launchBot ([b3990f9](https://github.com/AliMD/alwatr/commit/b3990f92bba1b65d0e728615f701a4799619d821)) -- **logger:** add root version ([2ac01c1](https://github.com/AliMD/alwatr/commit/2ac01c1d12323a6c8591b3dd4826d08a55647dc1)) -- **logger:** move incident to deployment mode ([4ee8dac](https://github.com/AliMD/alwatr/commit/4ee8dac5c54ce8a897382d3d4fb5bb852d24cf24)) -- move some depndencies to devDependencies ([4e9576e](https://github.com/AliMD/alwatr/commit/4e9576e6fd55f361e08a54230931ad45832131d9)) -- **nano-server:** clear debug info from client for security reasons. ([5814af2](https://github.com/AliMD/alwatr/commit/5814af2ceeac6e2175c4ab924e4b40cef765072c)) -- **nano-server:** maybe promise type ([d782761](https://github.com/AliMD/alwatr/commit/d7827616ea71b7e6328c6a85b80c2daec0b6f512)) -- **nano-server:** reply throw on route ([083dfa5](https://github.com/AliMD/alwatr/commit/083dfa51b391dc689d1d4fed9f1f17d768e7384c)) -- **nano-server:** routeMiddleware type ([a05b1a2](https://github.com/AliMD/alwatr/commit/a05b1a2bc79aeca67a81f4758f5d2b0f6c890028)) -- new build process ([aa23ed2](https://github.com/AliMD/alwatr/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) -- **notifier:** require token ([66f73fb](https://github.com/AliMD/alwatr/commit/66f73fb2e1c05a52d8e3cd00aec1d12b845781c0)) -- **notify:** dynamic token ([e8e5d24](https://github.com/AliMD/alwatr/commit/e8e5d24e1af6393b0e300e12fd2e123299069c44)) -- **notify:** nano-server ([7b44997](https://github.com/AliMD/alwatr/commit/7b44997b6b22952362966a60f8ccedf753983d5f)) -- **notify:** new package ([ca7b639](https://github.com/AliMD/alwatr/commit/ca7b6396ffb30f03c0af02706c3c5e721e6bae2b)) -- **notify:** notify ([98610e0](https://github.com/AliMD/alwatr/commit/98610e043513ed4c7a1d0654ce1eb4f87e0950e6)) -- **notify:** set admin on start ([0b7fbe2](https://github.com/AliMD/alwatr/commit/0b7fbe2b6795a88dd860be43a77de63e45374d8d)) -- **package:** add pwa ([a3a1285](https://github.com/AliMD/alwatr/commit/a3a1285bef212bfde14d0dd70419e6ea6a7b9f62)) -- **publish-alwatr-container:** cosign ([8bd0627](https://github.com/AliMD/alwatr/commit/8bd062708ca44502094a7e8494287859c1784c62)) -- **publish-services:** add all services to matrix ([be095c9](https://github.com/AliMD/alwatr/commit/be095c920362d221b6482c42bfebca6cc89b0529)) -- **publish-services:** cache ([f080ad7](https://github.com/AliMD/alwatr/commit/f080ad7bad55f1e70bca8d9b0e7493dd41c1a9ca)) -- **publish-services:** publish for next branches ([5b607f3](https://github.com/AliMD/alwatr/commit/5b607f305d68b36670beb360ef9faa5b714bea2e)) -- **publish-services:** pwa dockerfile ([b4b96e0](https://github.com/AliMD/alwatr/commit/b4b96e04fc2cb71cf39ddad620d548db2d9e8d36)) -- **publish-services:** set path on pr ([7d112b2](https://github.com/AliMD/alwatr/commit/7d112b260f2e8cd0f8979ce02d0293efaccd3f34)) -- **publish-services:** synamic dockerfile for all services ([a900ae3](https://github.com/AliMD/alwatr/commit/a900ae3f795392031d8e0410fc57b136927aa53a)) -- **pwa/ff:** dbl click delete ([458f9cd](https://github.com/AliMD/alwatr/commit/458f9cdc7b0633b1fba1764a0321f5e60bdeaf8c)) -- **pwa/ff:** define response meta type ([b2b2b7c](https://github.com/AliMD/alwatr/commit/b2b2b7c0171191905b0e03f9d8d9f231c10c6a7d)) -- **pwa/ff:** filter hour i18n ([44e25d6](https://github.com/AliMD/alwatr/commit/44e25d6a8e689822fe1686e82b34d1a61cf8830a)) -- **pwa/ff:** job add modal ([95fcad5](https://github.com/AliMD/alwatr/commit/95fcad588257ab2d1a54c664b7b1f79cd5d4ea98)) -- **pwa/ff:** job delete ([aac3b61](https://github.com/AliMD/alwatr/commit/aac3b619398fa6d15db9a10fc7cbe61dbffabe62)) -- **pwa/ff:** l10n ([04e3b82](https://github.com/AliMD/alwatr/commit/04e3b82fec62de7c5dda155e9113792115d45d57)) -- **pwa/ff:** last updated jobs ([2597238](https://github.com/AliMD/alwatr/commit/259723826e79f1183d0c05bebe3d25b9c9fcc60f)) -- **pwa/ff:** theming color ([d238c5a](https://github.com/AliMD/alwatr/commit/d238c5af9e23e726b45c14a4379c780ff65c3125)) -- **pwa/ff:** time filter ui ([576c396](https://github.com/AliMD/alwatr/commit/576c3966eb753fd5104e1d33be6c912f520f005e)) -- **pwa/flight-finder:** build ([2782fc8](https://github.com/AliMD/alwatr/commit/2782fc81a24bda2ac8ff0d7c735f6349936c13b5)) -- **pwa:** base ui app ([afe3661](https://github.com/AliMD/alwatr/commit/afe36610ac2bb3d20eb6c01e3f76a132f3565279)) -- **pwa:** city list ([2f437a7](https://github.com/AliMD/alwatr/commit/2f437a7ba4afa999bf761adfaa6d217321f059cd)) -- **pwa:** day & month input ([94654ac](https://github.com/AliMD/alwatr/commit/94654acebcd717ff55b61328496c58cec155220d)) -- **pwa:** day & month select ([3d1d944](https://github.com/AliMD/alwatr/commit/3d1d944c2db195b1a5076081daf6b2634cbf9dfd)) -- **pwa:** define day part field & type ([bb1aad1](https://github.com/AliMD/alwatr/commit/bb1aad17b42229289d0ba34e08fc05be8e1949df)) -- **pwa:** define types ([56a473d](https://github.com/AliMD/alwatr/commit/56a473df50d098ec6f2a1df2796147cd6fe0d054)) -- **pwa:** dockerize service ([30f0950](https://github.com/AliMD/alwatr/commit/30f0950dccf0dd65ae842e632295421f38e1b433)) -- **pwa:** external config ([84954fd](https://github.com/AliMD/alwatr/commit/84954fdd0ad70d0f2cd19a4133747722f4b761f5)) -- **pwa:** fakedata ([9cfa288](https://github.com/AliMD/alwatr/commit/9cfa28847f4fd49f1fcdf284b0cbdc9f8b5a5e2e)) -- **pwa:** icon & logo ([0fef20c](https://github.com/AliMD/alwatr/commit/0fef20c2acaac3ca4816357ae3c2e61af3433a6b)) -- **pwa:** input validate ([782f712](https://github.com/AliMD/alwatr/commit/782f71203457c0a526af5f47d229f06f30c53069)) -- **pwa:** job item description ([b587992](https://github.com/AliMD/alwatr/commit/b587992b6b352463acb531e5469d25b5b8c7db6e)) -- **pwa:** service worker ([abdbed2](https://github.com/AliMD/alwatr/commit/abdbed2bec01d52a3f3744d74977a401b48b81de)) -- **pwa:** theme color palette ([82a7562](https://github.com/AliMD/alwatr/commit/82a75623c027f73d5552f73206cc9ae87018c591)) -- **pwa:** update build script ([5c6c3e8](https://github.com/AliMD/alwatr/commit/5c6c3e8955090df494e574b5d8e4afd664c0ef31)) -- **rollup:** improve configs ([abdbe91](https://github.com/AliMD/alwatr/commit/abdbe91561fc2aa5c61532ac4d9bca2e515da122)) -- **rollup:** simple config ([e97cab4](https://github.com/AliMD/alwatr/commit/e97cab4b0926ec01b22e8b5aa6182281829ab887)) -- **services/telegram-notifier:** dynamic storage path ([9f59240](https://github.com/AliMD/alwatr/commit/9f5924008d7b567af1c990450da2450af887404a)) -- **storage-client:** error codes ([fc5fe8a](https://github.com/AliMD/alwatr/commit/fc5fe8a650d881b224c9421da3bb34565e1e3fee)) -- **storage-client:** more data validate on get ([4a8200c](https://github.com/AliMD/alwatr/commit/4a8200c42da20fe21dbdf198ef1c3708186e23cc)) -- **storage-server:** SAVE_DEBOUNCE config ([6997e12](https://github.com/AliMD/alwatr/commit/6997e1295cf82fcc3b043bbdd1199a70b6144df5)) -- **telegram-notifier:** dockerize service ([95b076d](https://github.com/AliMD/alwatr/commit/95b076d490a48af6a416fb6167dee0d181fb880d)) -- **telegram-notifier:** esbuild config ([b1ca298](https://github.com/AliMD/alwatr/commit/b1ca298df482daddfab4d89e807c4c5654394245)) -- **telegram-notifier:** save member chat id ([72c346f](https://github.com/AliMD/alwatr/commit/72c346feab8a840ae1bc299ea5d778101e29a4ba)) -- **toast:** create as a provider ([87fdca0](https://github.com/AliMD/alwatr/commit/87fdca05e396052c23ca164ea0679d0c33b10a31)) -- **typescript:** configurations ([357c1fe](https://github.com/AliMD/alwatr/commit/357c1fe4c08fcc428c6ff4d34738454cddf7b9c4)) -- **ui-kit/element:** signal mixin ([4353491](https://github.com/AliMD/alwatr/commit/4353491811fad1150fbc2dbfa3d637583358cf20)) -- **ui-kit/element:** signal mixin types ([4a4774c](https://github.com/AliMD/alwatr/commit/4a4774c2efff0fe0fac5f901ca6fbb4a7b82f455)) -- **ui-kit:** index file ([5888dde](https://github.com/AliMD/alwatr/commit/5888ddedc38da7a8b6ae07e3826c9bc52c91680f)) -- **ui-kit:** new package ([418b3a6](https://github.com/AliMD/alwatr/commit/418b3a66157658be3b88635947d5121cdc9a757f)) -- **workflow:** publish services ([38ef68f](https://github.com/AliMD/alwatr/commit/38ef68f50f3140d14191e2176566fcc179545ff3)) - -### Performance Improvements - -- **alwatr-pwa.dockerfile:** remove extra run ([75d93c4](https://github.com/AliMD/alwatr/commit/75d93c4186c76dece8e40b634391d9d2886a2b0a)) -- **pwa/ff/image:** optimize images ([db35954](https://github.com/AliMD/alwatr/commit/db35954b54891eb19777d760d6b7d210bebea91f)) - -### Reverts - -- Revert "chore(publish-alwatr-container.yml): publish every pr" ([30abc4e](https://github.com/AliMD/alwatr/commit/30abc4ebac11a974c88d8242820c8f45975fcbfb)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -### Bug Fixes - -- **deps:** typescipt version ([5b6d98c](https://github.com/AliMD/alwatr/commit/5b6d98c82350eef6df30f420e550dd4cf356b974)) -- **math:** UnicodeDigits type issue ([508a9b2](https://github.com/AliMD/alwatr/commit/508a9b22a792284f7b5c54d095d6212d6277dc6b)) -- web-dev-server ([98cbb53](https://github.com/AliMD/alwatr/commit/98cbb53ca98bd8905d76cd2e419b5fb1a20b53f1)) - -### Features - -- **comment:** new types ([13a0fe9](https://github.com/AliMD/alwatr/commit/13a0fe97a1f9b65fafea893a198fdea4310ddd8d)) -- **logger:** log incident in production mode ([c9b6c56](https://github.com/AliMD/alwatr/commit/c9b6c56182750444b1cced3343b02eea6a9f24c5)) -- **services/commenting:** add base nano server ([705d7b9](https://github.com/AliMD/alwatr/commit/705d7b99c2cd7369d496051538f09de35660b2df)) -- **services/commenting:** add route ([542cc52](https://github.com/AliMD/alwatr/commit/542cc529f42a9e524d0a8faa76de51011b12d655)) -- **services/commenting:** get all route ([581cebe](https://github.com/AliMD/alwatr/commit/581cebe78840237619c820f4c45aa06b87672076)) -- **services/commenting:** rename add to put route ([170af3b](https://github.com/AliMD/alwatr/commit/170af3b198347a6cbaa1f0454da9d74e15f43f4e)) -- **services/commenting:** replyId ([5629a01](https://github.com/AliMD/alwatr/commit/5629a013916d479ea6816c76b0db4ff8befcdc7c)) -- **storage-client:** dynamic storage name ([07cf5fb](https://github.com/AliMD/alwatr/commit/07cf5fb2086d1f8ad0f731470a5dfb313038b51c)) -- **storage-client:** dynamic storage name ([2f0ca5b](https://github.com/AliMD/alwatr/commit/2f0ca5b85241c2298efc503e5f14f994a35be484)) - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- **i18n:** setLocal type ([d801958](https://github.com/AliMD/alwatr/commit/d801958bcc130e93677a1efe2c0c2c6dc420b700)) -- **logger:** optimize for browserify builds ([7afdc1c](https://github.com/AliMD/alwatr/commit/7afdc1cb5baf9b66dedcdc251595c02a79a163b2)) -- **services/storage-server:** Dockerfile CMD ([1823e56](https://github.com/AliMD/alwatr/commit/1823e56229eccaba86325344011fb54804f66496)) -- **services:** dockerfile copy issue ([d2cf4bc](https://github.com/AliMD/alwatr/commit/d2cf4bccc0f5cdc034dbce9d17262d17b0df1198)) -- **services:** dockerfile copy issue ([0fa5bba](https://github.com/AliMD/alwatr/commit/0fa5bba017124221cfcfe75ad9ac1ad402faedef)) -- set correct dependencies in package.json and references in tsconfig.json ([1fb05a8](https://github.com/AliMD/alwatr/commit/1fb05a80e1e098f3334cf3b4bd9c9ebf0c75fbf8)) - -### Features - -- **i18n:** improve i18n types ([cf7d1cb](https://github.com/AliMD/alwatr/commit/cf7d1cb863ac039ec42fadeeb40ac371cfe936c5)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- **demo/storage-client:** set default token ([f7a8962](https://github.com/AliMD/alwatr/commit/f7a896202e4a6acd2c248904cdc32dae2773550b)) -- **demo/storage-client:** update config ([2c71396](https://github.com/AliMD/alwatr/commit/2c71396f628942e776814a8bc08705bac679e5ab)) -- **demo:** update types ([010b123](https://github.com/AliMD/alwatr/commit/010b123075d073c8583f557608a9781064d7cc5c)) -- **fetch:** AlwatrServiceResponseSuccessWithMeta types ([b46f3f2](https://github.com/AliMD/alwatr/commit/b46f3f22a7c5a671385b0a8f58d0881501ce1b94)) -- **fetch:** use nre method type ([1c63eca](https://github.com/AliMD/alwatr/commit/1c63eca994582c241112c3e5ae79bac49831532f)) -- **nano-server:** \_sanitizeParam types ([bd4f39d](https://github.com/AliMD/alwatr/commit/bd4f39d32ceef5f2be26fce27a37cc7e1d5f6bd6)) -- **nano-server:** deps ([ea0ceba](https://github.com/AliMD/alwatr/commit/ea0ceba7da3d1bc0542d9eb69d951aa3c3165175)) -- **nano-server:** handle preflight request ([ab575cd](https://github.com/AliMD/alwatr/commit/ab575cd67b3f06dc64c895a7080e766b02ee3c22)) -- **nano-server:** use config for cors ([947dad9](https://github.com/AliMD/alwatr/commit/947dad9473d7408aad9a4640ffdd2157edae10c5)) -- **publish-container:** prevent to build on any pr merged ([7f4296d](https://github.com/AliMD/alwatr/commit/7f4296d9ee1fb8697ea4a6f81937f4efc973ab10)) -- remove \_updatedBy ([d8d5c83](https://github.com/AliMD/alwatr/commit/d8d5c83884bbd30566001ff84faf9e840503471c)) -- **services/storage-server:** dockerfile syntaxt ([42ba235](https://github.com/AliMD/alwatr/commit/42ba235371de46f6ef9a0ea5554afa41fe9001fa)) -- **storage-engine:** generic get type ([a287362](https://github.com/AliMD/alwatr/commit/a2873624fe2fd8071944528dba2e0c1d4dd006cc)) -- **storage-engine:** update types ([26bc0ae](https://github.com/AliMD/alwatr/commit/26bc0ae48b0b41cc2a9d18d3bb2883fafb447ede)) -- **storage-engine:** util types ([41f97fd](https://github.com/AliMD/alwatr/commit/41f97fdbd4c902dc11b82b230a805bbf7b77ec81)) -- **storage-server:** dockerfile ([5fc7c9a](https://github.com/AliMD/alwatr/commit/5fc7c9a018ebcc6acefb0c6c6740759a7f7f8bd4)) -- **storage-server:** dockerfile args ([7777ca4](https://github.com/AliMD/alwatr/commit/7777ca4f1c7a33a21753b52205fcca0540d5eea2)) -- **storage-server:** dockerfile copy path ([a3021af](https://github.com/AliMD/alwatr/commit/a3021af0cdb35a25271e2a9e447a39426e634645)) -- **storage-server:** dockerfile from ([af63854](https://github.com/AliMD/alwatr/commit/af63854b24da6fa75108fe962a278fc107070102)) -- **storage-server:** types ([3f3d98a](https://github.com/AliMD/alwatr/commit/3f3d98a3dcd51340f888ab3db10c624e4e1ecd4b)) -- **storage-server:** types ([4b33fac](https://github.com/AliMD/alwatr/commit/4b33fac1b6b8c43867817487278fc814d2fc2972)) -- update types ([44cc57f](https://github.com/AliMD/alwatr/commit/44cc57f97a99ed810dae3fde39c9525bd0e8ff3c)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) -- **workflow:** use path for building container ([3cf8369](https://github.com/AliMD/alwatr/commit/3cf8369965f54f60b98facb0998350ae7e10ec20)) - -### Features - -- **services/storage-server:** dockerignore ([530d342](https://github.com/AliMD/alwatr/commit/530d342e6f9fcd5c9ec4638b1a714fb3ac08c083)) -- **storage-client:** use document object from fetch ([1ab7f5d](https://github.com/AliMD/alwatr/commit/1ab7f5da462975bc3b765663d9e3ff97c214a4e3)) -- **storage-engine:** improve provider debug ([c9cfc8f](https://github.com/AliMD/alwatr/commit/c9cfc8f4914887d4861e67f5a39670a646e9900a)) -- **storage-server:** dockerfile ([aa80d6e](https://github.com/AliMD/alwatr/commit/aa80d6ec431e3b62beb26dba0fcc220ad27aaaf0)) -- **storage-server:** remove deps to fetch ([93d0c24](https://github.com/AliMD/alwatr/commit/93d0c244b9b943e4fd4ec982086574cd413fde11)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -### Bug Fixes - -- **fetch:** types ([4ce81a7](https://github.com/AliMD/alwatr/commit/4ce81a7b82d01ab938754bc5e483ccb074671e33)) -- **nano-server:** getToken ([a2f1ccb](https://github.com/AliMD/alwatr/commit/a2f1ccbe5d81d3f284ba1ce80dd2e54ec2245848)) - -### Features - -- **fetch:** set token in options ([033a638](https://github.com/AliMD/alwatr/commit/033a63846f8c43b86c7d0a662e4bb6aa7cae3af5)) - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -### Bug Fixes - -- add rest client extension to recommendation ([33a4a25](https://github.com/AliMD/alwatr/commit/33a4a2579208d6026380bbe8eaa9d4f9d2a8a1b9)) -- **service:** update package.json ([31dc122](https://github.com/AliMD/alwatr/commit/31dc122cd4050167ece17e53800b3844b5c99c16)) -- **starter/nano-server:** remove wc plugin from eslint ([6611644](https://github.com/AliMD/alwatr/commit/6611644226ff19533435810ae0b4a105e3275bbd)) -- **storage-client:** types issues ([c083bd0](https://github.com/AliMD/alwatr/commit/c083bd08cd2364bc64ebd1e60c668f37784d8502)) -- **storage-engine:** auto_increment issue ([ff7bdca](https://github.com/AliMD/alwatr/commit/ff7bdca2138398a3f69551e8235c3d1a9a0fae60)) -- **workflows:** add-to-project token ([2528762](https://github.com/AliMD/alwatr/commit/252876251187cb50d44cb324e4a989de47ccfc84)) -- **workflows:** add-to-project token ([2eee23a](https://github.com/AliMD/alwatr/commit/2eee23a2a536ed00780e385917de0c7edc2e4403)) - -### Features - -- **workflows:** Add To GitHub projects ([41aa33a](https://github.com/AliMD/alwatr/commit/41aa33a7448fc2ab983e2446a1c3d80f532cd04c)) - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **demo/storage-client:** handle document not found ([fb73532](https://github.com/AliMD/alwatr/commit/fb73532fd1a1b52552d0b79f97847db059444785)) -- **demo/storage-client:** use host in config ([f3bd04d](https://github.com/AliMD/alwatr/commit/f3bd04dd047afebd99650f57fe6a2715b014dfb2)) -- **fetch:** \_handleRetryPattern ([fe4ac12](https://github.com/AliMD/alwatr/commit/fe4ac12b4ad3086d44e545591c767cb322e32b8d)) -- **fetch:** bodyJson issue ([5d8d6fa](https://github.com/AliMD/alwatr/commit/5d8d6fa4a0f608c2c5ed583aa54de9b836daaa5f)) -- **gitignore:** ignore db ([ba53c73](https://github.com/AliMD/alwatr/commit/ba53c73ea7343c821e1406cefd7d03392f0f49f5)) -- **logger:** message format in node ([0ab9153](https://github.com/AliMD/alwatr/commit/0ab9153e407cafd07af8b77b63e25c8d21b474c0)) -- **nano-server:** method all ([b20afa1](https://github.com/AliMD/alwatr/commit/b20afa1fb8eeb13c4b6e3d811ae6fbbeb7465306)) -- **nano-server:** no-non-null-assertion ([ad5588c](https://github.com/AliMD/alwatr/commit/ad5588c6e0e863aa03cca44c23144dbf371795da)) -- **nano-server:** parse body on PATCH method ([cba790f](https://github.com/AliMD/alwatr/commit/cba790f43dc88c00ee99f5f7d7c872e8f6d1618d)) -- **nano-server:** remove ALL from Methods type ([1f67c07](https://github.com/AliMD/alwatr/commit/1f67c07a5044c6d7cf89605e269af468aa49094c)) -- **nano-server:** review require... methods and fix issues ([a7e4bae](https://github.com/AliMD/alwatr/commit/a7e4bae89440c2fc72a0a9e6060aac894b18eddf)) -- **nano-server:** set correct valitator type ([61d4a2a](https://github.com/AliMD/alwatr/commit/61d4a2a697e4beac00c94afcd86ca4cbc4b6c5a8)) -- **ns/storage:** home page issue ([98aeb00](https://github.com/AliMD/alwatr/commit/98aeb00d3c2c7b6d8888c98f374d6550ff43a0c1)) -- **ns/storage:** review and fix issues ([658426a](https://github.com/AliMD/alwatr/commit/658426a9ebc2125dfca96ee032ce7584511d710b)) -- **services/storage:** duplicate \_data property ([61b78ac](https://github.com/AliMD/alwatr/commit/61b78acd8bd7865cad5cec7b2f7d50b8e802fcec)) -- **services/storage:** remove home route ([5b4160d](https://github.com/AliMD/alwatr/commit/5b4160df0237085e43a103a02b9b63404eddda2c)) -- **services/storage:** remove id type from requireQueryParams ([b2724f4](https://github.com/AliMD/alwatr/commit/b2724f4176204a826c3c521618ca92e73904f8e6)) -- **services/storage:** update demo request ([bf02e99](https://github.com/AliMD/alwatr/commit/bf02e99e9b40f044506d2b7aaa98a5f7fccbbaa3)) -- **starter/ns:** add host ([5747ff7](https://github.com/AliMD/alwatr/commit/5747ff73bf6e2cdf0c1c67fac69a4700db1d4c64)) -- **storage-client:** demo ([83fa9d0](https://github.com/AliMD/alwatr/commit/83fa9d0bde2a65a02c225bcb9829a87667606fb6)) -- **storage-client:** demo get not found ([5070912](https://github.com/AliMD/alwatr/commit/507091267f06a8f854833ccac5b9a3f77c46ae70)) -- **storage-client:** demo security issue ([85a71d4](https://github.com/AliMD/alwatr/commit/85a71d496bd9e62863ce85c5abb994648f69a36c)) -- **storage-client:** fetch in has method ([a6f9098](https://github.com/AliMD/alwatr/commit/a6f909821510c8da2fe9ab7340d3f010165a84c8)) -- **storage-client:** handle 404 in benchmark ([b149c85](https://github.com/AliMD/alwatr/commit/b149c857ae8ec46ae854eb5fd3893395945d5da2)) -- **storage-client:** nodejs memory leak issue ([d5e0cde](https://github.com/AliMD/alwatr/commit/d5e0cde091b8eba450a443ceba737aa1cac4fd3e)) -- **storage-client:** remove all null as value ([6fbc6e5](https://github.com/AliMD/alwatr/commit/6fbc6e52e4b3d64ee5f347df6dc92673ce79e7ed)) -- **storage-client:** return array of string in keys ([b838f1f](https://github.com/AliMD/alwatr/commit/b838f1f0161b3b76edc855e227161851bebaf3be)) -- **storage-client:** return boolean has in method ([68123cd](https://github.com/AliMD/alwatr/commit/68123cd92d2ec085dc72d948a163c26796b27adc)) -- **storage-client:** review!!!!! ([c803991](https://github.com/AliMD/alwatr/commit/c8039914aed6b1ad98d60de8b39122542811121b)) -- **storage-client:** types ([f277771](https://github.com/AliMD/alwatr/commit/f277771973908d280b1879e96e77446c9f88bbe9)) -- **storage-client:** use dynamic token ([3c68806](https://github.com/AliMD/alwatr/commit/3c68806762c027af7a2d5e019d08de6a8b079661)) -- **storage-server:** add host ([0f1d126](https://github.com/AliMD/alwatr/commit/0f1d126094cb816e947d9926088e93d556573c40)) -- **storage-server:** DocumentObject type ([cf8cf3e](https://github.com/AliMD/alwatr/commit/cf8cf3e128ddce690d5a7ad044007d7e76b3f6f9)) -- **storage-server:** path DocumentObject issue ([83ba54c](https://github.com/AliMD/alwatr/commit/83ba54cb73ba8efb5b395c0772d37601e997175e)) -- **storage-server:** use new storage-engine ([48bd4eb](https://github.com/AliMD/alwatr/commit/48bd4eb2e010d7ba1a29816b30dadb0a8247e0f0)) -- **storage:** change remove to delete ([97397f9](https://github.com/AliMD/alwatr/commit/97397f968be5fa50de32374604bb68ce05b6237a)) -- **storage:** get data keys on keys ([b3c26c0](https://github.com/AliMD/alwatr/commit/b3c26c0779eebc06c6202aa3d8c83868ccaf291a)) -- **storage:** get keys issue ([bdef7b1](https://github.com/AliMD/alwatr/commit/bdef7b1b57a58a86b6a012267f95cfad581fb7ee)) -- **storage:** performance demo test ([17b2c1a](https://github.com/AliMD/alwatr/commit/17b2c1a54132b524b2389976fb2e21f84e20e9c1)) -- **tsconfig:** rename storage to storage-engine ([229dd77](https://github.com/AliMD/alwatr/commit/229dd77a0aa928013f93ac43514309e163631a29)) - -### Features - -- **demo:** forAll storage-client ([a856099](https://github.com/AliMD/alwatr/commit/a856099f5644a0b059fd0ff25521376d5f9b97eb)) -- **demo:** storage-client ([e19abc4](https://github.com/AliMD/alwatr/commit/e19abc4ecd59200204be7f26ce0021157a26e262)) -- **fetch:** support nodejs ([2ed2ef4](https://github.com/AliMD/alwatr/commit/2ed2ef42e9f204d4896ada4e20b839cfabdc7284)) -- **logger:** better log in browser and node ([1a35ac4](https://github.com/AliMD/alwatr/commit/1a35ac4bbb9aae4280ea99b8383459cf44de0baa)) -- **nano-server:** add \_sanitizeParam ([46edbc3](https://github.com/AliMD/alwatr/commit/46edbc33eb164f6676d8a5c939d52accededfd45)) -- **nano-server:** keep alive performance and options ([5ed78b6](https://github.com/AliMD/alwatr/commit/5ed78b6cf5b7fd1b00c28df26ca250d4025dc676)) -- **nano-server:** parse and validate query params in AlwatrConnection ([1eadd68](https://github.com/AliMD/alwatr/commit/1eadd68d3e1f92e47d743b7412ae247f3414738f)) -- **nano-server:** validate content type header in requireJsonBody ([d99eb74](https://github.com/AliMD/alwatr/commit/d99eb742c0c5ea1b92f44767d570bd42b9c9e342)) -- **ns/storage:** home page ([73b287c](https://github.com/AliMD/alwatr/commit/73b287c0b717854b1c4bd240cb47196b81ea83af)) -- **package:** pull push script ([7551d92](https://github.com/AliMD/alwatr/commit/7551d927873508816cb4cd0cba8d1563226aaa66)) -- **services/storage-server:** has route ([7254393](https://github.com/AliMD/alwatr/commit/72543932408f5ffc24df79d577d3de8f97fb0358)) -- **services/storage:** add all route ([a698e1d](https://github.com/AliMD/alwatr/commit/a698e1d67258bc3e8931333c4ecfea4db271c59f)) -- **services/storage:** add keys route ([46fb970](https://github.com/AliMD/alwatr/commit/46fb9708c4a5438d1ef5179e3cba79cad4d004b0)) -- **services/storage:** add remove route ([d4452cd](https://github.com/AliMD/alwatr/commit/d4452cd0366452ab07d82b338dbba345c32cd61d)) -- **services/storage:** add requireToken to AlwatrConnection ([8073773](https://github.com/AliMD/alwatr/commit/8073773577b88a52baa90c6042bac52260ec3dc1)) -- **storage-client:** AlwatrStorageClient class structure ([164f44e](https://github.com/AliMD/alwatr/commit/164f44e1028b325941d1b90be670b8f4194bfc75)) -- **storage-client:** benchmark test ([7c0fc92](https://github.com/AliMD/alwatr/commit/7c0fc92fa910168775459dc2be484844a6a178cb)) -- **storage-client:** forAll method ([40f802a](https://github.com/AliMD/alwatr/commit/40f802aa02b02d8d9341822b36708fc81f16cbce)) -- **storage-client:** get method ([3f2d1a6](https://github.com/AliMD/alwatr/commit/3f2d1a6363daa006a38c40f95d9b528937d38896)) -- **storage-client:** get, set, delete, getAll, keys methods ([2da68ba](https://github.com/AliMD/alwatr/commit/2da68ba81ed5b18fba1c5a63a7e22cbcd98dda47)) -- **storage-client:** has method ([ba64195](https://github.com/AliMD/alwatr/commit/ba6419512b75f3bd17a7d86fc2d41a41d8179d8d)) -- **storage-client:** new package ([cfe72da](https://github.com/AliMD/alwatr/commit/cfe72da75f49f66c4d03875b0cb7c29966bb1c84)) -- **storage-client:** performance demo ([186832c](https://github.com/AliMD/alwatr/commit/186832cfea21b02aa6f7c9ec3eba768fa0ea64ed)) -- **storage-engine:** storage meta and auto_increment id ([3726947](https://github.com/AliMD/alwatr/commit/37269479e483e3108f3b8ef6706ea1d701290222)) -- **storage:** add data method ([b6454a5](https://github.com/AliMD/alwatr/commit/b6454a5bf111c2457644b19af6f5c33f9cccf3d1)) -- **storage:** better debug logs in load ([4be86df](https://github.com/AliMD/alwatr/commit/4be86df60b8994d42dae2b8b756b1421f18c7d94)) -- **storage:** get \_data ([528d2be](https://github.com/AliMD/alwatr/commit/528d2bed9ce0a349ba0e9dbb565ea4c7170b92a5)) -- **v2fly:** mux ([737e032](https://github.com/AliMD/alwatr/commit/737e0326a5ba0c13fd29033c8877cf958e23e780)) - -### Performance Improvements - -- **fetch:** Improve performance and decrease memory usage ([7c29333](https://github.com/AliMD/alwatr/commit/7c293339215bea3a5013effe4aea5b6267a7a75e)) -- **nano-server:** faster log ([8ff716e](https://github.com/AliMD/alwatr/commit/8ff716e1eaee59047f816e1645aa9dde7635b571)) -- **storage-client:** refactor for perf improve and keep alive ([ed0b743](https://github.com/AliMD/alwatr/commit/ed0b743a8936602b63d92c216d2d65f6a31d74cf)) -- **storage-server:** debug --trace-gc ([8f6adf4](https://github.com/AliMD/alwatr/commit/8f6adf4d6547c57f62e105ce83eef014360b3ca3)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -### Bug Fixes - -- ignore \_data folder for nodemon ([d63b3d5](https://github.com/AliMD/alwatr/commit/d63b3d5dd7f5c9c279b17b272d6216df460c4ea8)) -- **readme:** logo path ([48e3107](https://github.com/AliMD/alwatr/commit/48e310723ea8de3912564d93926f9a8eb61dba73)) - -### Features - -- **classic-cloud:** restore ssh agent for deploy scripts ([674a575](https://github.com/AliMD/alwatr/commit/674a5753c4b708843c805d2a7dd8a7b9349318cd)) -- **ipsec:** new cc deployment ([3b844b8](https://github.com/AliMD/alwatr/commit/3b844b8f33c8b7428c929b934100144515db1219)) -- **openvpn:** new cc deployment ([4e655cc](https://github.com/AliMD/alwatr/commit/4e655ccee3d88127ca9424a714d505305ea4b2d2)) -- **shadowsocks:** new cc deployment ([5ce5735](https://github.com/AliMD/alwatr/commit/5ce57354caf639c20d0117eeeba335b6c4da6570)) -- **v2fly:** new cc deployment ([609fb9b](https://github.com/AliMD/alwatr/commit/609fb9b9011d18b25a6119bcd594d6769c9d8695)) -- **wireguard:** new cc deployment ([3b190ef](https://github.com/AliMD/alwatr/commit/3b190efbd14ea51678def1b698337ec4770c6792)) - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -### Bug Fixes - -- **fetch:** \_handleRemoveDuplicate ([6207b48](https://github.com/AliMD/alwatr/commit/6207b4867935d05a0e5a1c795de9efab4ff77c68)) -- **fetch:** cacheStorageName issue ([e641ff7](https://github.com/AliMD/alwatr/commit/e641ff740055a68b6397f00bf46f1d05943c348a)) -- **fetch:** method type and case ([8d4ba77](https://github.com/AliMD/alwatr/commit/8d4ba77e56ecfe2aeaa459dcd26039c38c4b2199)) -- **fetch:** prevent duplicate revalidateCallback on first time ([2da7dc5](https://github.com/AliMD/alwatr/commit/2da7dc579e4850af06914590a231548cd469cd75)) -- **storage:** clear cached keys ([fa2c4be](https://github.com/AliMD/alwatr/commit/fa2c4bed8e2fd84c5eeca57f8f2ff8b87030a58b)) -- **storage:** export DocumentListStorage type ([ea6cc7d](https://github.com/AliMD/alwatr/commit/ea6cc7dd996e6cacba85b71c8448ac22965b8c1b)) - -### Features - -- **`alwatr-icon`:** icon component ([4a24cdc](https://github.com/AliMD/alwatr/commit/4a24cdcfbb55bdc3928dd39ca9e6372caec386b2)) -- **demo:** dynamic icon demo ([f9c57f5](https://github.com/AliMD/alwatr/commit/f9c57f52bb8ebcbe5f2d26d2aa3287cda48df5c5)) -- **demo:** fetch revalidateCallback ([55a58b7](https://github.com/AliMD/alwatr/commit/55a58b7174065bc01b52de32816505e189cbdf34)) -- **deploy:** add another script for simpler usage ([521da6e](https://github.com/AliMD/alwatr/commit/521da6ecd623d0cbd8e5ac84216195e2da063f4c)) -- **deploy:** download upload \_data ([d50cea6](https://github.com/AliMD/alwatr/commit/d50cea6a5f483292029155667515c05f4d92a963)) -- **fetch:** add retryDelay ([28e3244](https://github.com/AliMD/alwatr/commit/28e3244a2d35e7a1a91f9a5a4942f1bb4a56d981)) -- **fetch:** revalidate callback for `stale_while_revalidate` cache strategy. ([8976cc4](https://github.com/AliMD/alwatr/commit/8976cc424b2a9e96e4cfa69941d5378a6640af6f)) -- **fetch:** simple memory caching for remove duplicate/parallel requests ([74cd7f1](https://github.com/AliMD/alwatr/commit/74cd7f1500d730021a0f577c0ecfd7a2460fdb15)) -- **fetch:** update demo ([441c084](https://github.com/AliMD/alwatr/commit/441c08418c67283cf192ca192bfd5f0e238ecdc5)) -- **icon:** refactor and improve ([d75a3f7](https://github.com/AliMD/alwatr/commit/d75a3f7e3d748f974366a2e5a452f3039d19bf18)) - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- **font:** review ([a371bf2](https://github.com/AliMD/alwatr/commit/a371bf2bcf6477487ceeadeaa596919066f5c468)) -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) -- **publish-container:** ignore tdlib ([edd6729](https://github.com/AliMD/alwatr/commit/edd672974702d237699caa508d34b2cd9eb7d025)) - -### Features - -- **`alwatr-icon`:** `url-prefix` attr ([3af2dd4](https://github.com/AliMD/alwatr/commit/3af2dd4ba4a6451d54db7577badce9b279509265)) -- **`alwatr-icon`:** define styles & proprties ([fa0e7c7](https://github.com/AliMD/alwatr/commit/fa0e7c7c22bd9d45e7c3bde7ddb1323875223f63)) -- **`alwatr-icon`:** reflect property ([b1ce3df](https://github.com/AliMD/alwatr/commit/b1ce3df4dc28c3e32cb02c5efcf518c406ebfa82)) -- **`alwatr-icon`:** svg content ([26752bf](https://github.com/AliMD/alwatr/commit/26752bf34376634eac531e066f4a98437fe60b90)) -- **`demo`:** improve icon demo ([6519f6f](https://github.com/AliMD/alwatr/commit/6519f6f05567b8a4ce3db0bd3a442139902a01d4)) -- **alwatr-icon:** improve ([8522864](https://github.com/AliMD/alwatr/commit/85228649e1d3c8d179e3fbb5c5d2eb606bc7be3a)) -- **demo:** improve demo dark mode ([b89217e](https://github.com/AliMD/alwatr/commit/b89217eb2bd271e1d62ebe29b41ac2599852d7da)) -- **demo:** seprate fonts ([222e014](https://github.com/AliMD/alwatr/commit/222e014d488416042bf1d8575bfc0eb84d6009e8)) -- **element:** add to tsconfig ([89ec9b6](https://github.com/AliMD/alwatr/commit/89ec9b6f672e96b2424b81465d118f6338ad5524)) -- **font:** rename font files ([eb76649](https://github.com/AliMD/alwatr/commit/eb76649be6b7eee14660664a037b2b535ce52805)) -- **font:** seprate stylesheets ([fafa726](https://github.com/AliMD/alwatr/commit/fafa726d887ddddda31042651e58d5180e4d5a97)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -### Bug Fixes - -- **fetch:** update cache on network_first ([54b59cd](https://github.com/AliMD/alwatr/commit/54b59cdc64a543a0afcd09d2ec78d20661f3a06d)) -- **i18n:** compatible with new fetch api ([b06a6a5](https://github.com/AliMD/alwatr/commit/b06a6a5958a4be8d84b74187f1c145f70370c06b)) - -### Features - -- **fetch:** cache strategy ([106eabd](https://github.com/AliMD/alwatr/commit/106eabdd10574b24f9919049d0b509ae40168a9a)) -- **fetch:** cache strategy demo ([47dd239](https://github.com/AliMD/alwatr/commit/47dd2391cd1d760cfec8b0f54a249d05b83b4c33)) -- **fetch:** improve demo ([638830f](https://github.com/AliMD/alwatr/commit/638830f817923a71ce0900776622a858e4905cad)) -- **fetch:** optional cacheStorageName ([f2bd8f2](https://github.com/AliMD/alwatr/commit/f2bd8f2a899466628417294cb269fd569b87e17a)) -- **fetch:** stale_while_revalidate cache strategy ([f758f49](https://github.com/AliMD/alwatr/commit/f758f495efb42ce7441e8f2058c1b67de0615a8c)) - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Bug Fixes - -- **`logger`:** `accident` sould `console.warn` ([c210c9f](https://github.com/AliMD/alwatr/commit/c210c9f6a864692848ea0c89d6ffbdb19167732a)) -- **classic-cloud:** docker.io/library images ([d7e2294](https://github.com/AliMD/alwatr/commit/d7e229450d464f4a3480010f65163c4bb97b3212)) -- **container/nginx:** HEALTHCHECK and WORKDIR ([4c354eb](https://github.com/AliMD/alwatr/commit/4c354eb2d71af2f117c2c05272ac6bda2755d3f9)) -- **containers:** add dockerignore to improve performance ([9ec05a0](https://github.com/AliMD/alwatr/commit/9ec05a0a6e59f8ca353ccc73a1ffe54ff47c764b)) -- **fetch:** not ok retry condition ([0da1edd](https://github.com/AliMD/alwatr/commit/0da1edda64ec5abf70a83361d159e207691e368e)) -- **issue_template:** add all packages ([6e596ce](https://github.com/AliMD/alwatr/commit/6e596cef83af943301cd108e066f7d08e61c2c7f)) -- **signal:** default options ([bbb0d59](https://github.com/AliMD/alwatr/commit/bbb0d59442301344781691bbecad39aed7f6ac40)) -- **storage:** \_last ket ([a1c452a](https://github.com/AliMD/alwatr/commit/a1c452a50c7b53b03765bf37556264a64ac3ed55)) -- **tdlib:** prevent to unnecessary build ([4f17f3c](https://github.com/AliMD/alwatr/commit/4f17f3cc7e92b23150bf2763775b064f4332b5a6)) -- **traefik:** network name ([e839b06](https://github.com/AliMD/alwatr/commit/e839b06e209d55beb152a4a99437ee204808b8e9)) -- **workflow/publish-container:** nginx version ([c25d192](https://github.com/AliMD/alwatr/commit/c25d1922efc190cd6571dccae5618483b14df5d7)) - -### Features - -- add config.yml ([d7ac8fb](https://github.com/AliMD/alwatr/commit/d7ac8fb47bfabea7048741ff1ecc669f94dfd6d1)) -- add math demo ([7a92dc2](https://github.com/AliMD/alwatr/commit/7a92dc22ab323ddea9ed166e597ea1924cf368e9)) -- add new workflows ([ee30b14](https://github.com/AliMD/alwatr/commit/ee30b1400cb7a30cdd8360283d2e5ab7117fb8d1)) -- **cc/deploy:** download "\_data" folder from server. ([8bdce57](https://github.com/AliMD/alwatr/commit/8bdce57ab6fa098e865108d986ba04948ab4213d)) -- **demo:** fetch ([2bf7a69](https://github.com/AliMD/alwatr/commit/2bf7a694f53921b3096b4092f85bd212ec32881b)) -- **distribution:** classic private docker registry ([2d0c960](https://github.com/AliMD/alwatr/commit/2d0c96082e38d00df885a50f94840dcc71299520)) -- **fetch:** docs & pattern ([459ad1c](https://github.com/AliMD/alwatr/commit/459ad1c5996f851769306639136d79c0f7270770)) -- **fetch:** logger & jsdocs ([36f652d](https://github.com/AliMD/alwatr/commit/36f652d5dad23b2aeb824af77d1b0e442119c6e8)) -- **fetch:** retry pattern ([5350d1a](https://github.com/AliMD/alwatr/commit/5350d1a81b9134d598f46006a1baa880b280ea98)) -- **Math:** translateUnicodeDigits ([996c507](https://github.com/AliMD/alwatr/commit/996c507abb4708b9ef32377eb4045efb8a3f0939)) - -### Performance Improvements - -- **fetch:** syntax ([1fdd02e](https://github.com/AliMD/alwatr/commit/1fdd02ec8b52e32a124b8d7c1d1c7fd7c993e3af)) - -## [0.16.1](https://github.com/AliMD/alwatr/compare/v0.16.0...v0.16.1) (2022-09-10) - -### Bug Fixes - -- **storage:** import exitHook ([c371381](https://github.com/AliMD/alwatr/commit/c37138121f7882239d7ecd38e3496f17919845a2)) -- **storage:** update AlwatrStorageProviderConfig ([bd33e36](https://github.com/AliMD/alwatr/commit/bd33e367c04cf0b7b11e803709da210a75318767)) -- **traefik:** up issue ([c9272b8](https://github.com/AliMD/alwatr/commit/c9272b8430116b2ad78dfc5a0bb48f0144bb33fd)) - -### Features - -- **nginx:** $NGINX_AUTOINDEX env ([6678435](https://github.com/AliMD/alwatr/commit/6678435bd1a6f0f1c1b804e7c500b491d6d9c863)) -- **storage:** force save abd exist hook to prevent data lost ([e327d65](https://github.com/AliMD/alwatr/commit/e327d657217d2e814b007e69eeca4f5c42758979)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -### Bug Fixes - -- **.github/depbot:** syntax issue ([b87c463](https://github.com/AliMD/alwatr/commit/b87c463f1dfec0bbde3772945ad7fc390ab572a5)) -- **classic-cloud:** review and fix issues ([680d55d](https://github.com/AliMD/alwatr/commit/680d55d192a8be69de53390c3ecdf50279cd8354)) -- **nginx:** load server dir confs ([5ee391a](https://github.com/AliMD/alwatr/commit/5ee391ada0207fd4bbe5bd27d1ee733c844b5609)) -- **nginx:** syntax issue ([2765ad8](https://github.com/AliMD/alwatr/commit/2765ad80bc44d75680ea75d219b3bea04d6fc762)) -- **publish-container:** 403 error ([ff14c5c](https://github.com/AliMD/alwatr/commit/ff14c5cd1dd19c6fefcfb9cece51f6de15385419)) -- **publish-container:** image metadatas ([008dbb5](https://github.com/AliMD/alwatr/commit/008dbb576a2a0c79a6a36f15df7c3a3d76c652fc)) -- **storage:** Clear cached keys on new docId ([2aa648c](https://github.com/AliMD/alwatr/commit/2aa648c4543cfef016b55d8389796445a118c73f)) -- **wordpress:** compose syntax issue ([4b85ac4](https://github.com/AliMD/alwatr/commit/4b85ac426c27872adbaa57e7252554f8f95ccfeb)) - -### Features - -- **classic-cloud:** static file serve and review deploy ([dea5158](https://github.com/AliMD/alwatr/commit/dea51589cc7589d1f9fd17b1a4e5fafca1c1f8d9)) -- **deploy:** rsync with symbolic links ([a540c20](https://github.com/AliMD/alwatr/commit/a540c20f9c7fb8b5b5abf105363ae1e76009de1f)) -- **nginx:** base config file ([c8f96f0](https://github.com/AliMD/alwatr/commit/c8f96f03e75ecd94914893b8face1fc742cceb32)) -- **nginx:** default page style ([7c007ee](https://github.com/AliMD/alwatr/commit/7c007ee3ef09065cd1763d13014ad0c1453e595a)) -- **nginx:** dockerfile ([adb90eb](https://github.com/AliMD/alwatr/commit/adb90eb3f07a38ef87c10a9cc3e9240c653c6697)) -- **nginx:** dynamic template generator ([9303883](https://github.com/AliMD/alwatr/commit/93038832595a0678b0162c718f3758efcf121671)) -- **nginx:** entrypoint.sh ([3b714f9](https://github.com/AliMD/alwatr/commit/3b714f9d96751dd10f006978119c01394fe6892f)) -- **nginx:** index page ([9ba0c06](https://github.com/AliMD/alwatr/commit/9ba0c0686a086b780dbca25e791ccbb694cf357a)) -- **nginx:** new container for alwatr/nginx ([b654dbf](https://github.com/AliMD/alwatr/commit/b654dbf7022aff9565ca7ed0cf2eab8c25919042)) -- **nginx:** optimize conf templates ([9791d5e](https://github.com/AliMD/alwatr/commit/9791d5e8f40aa054d2ba56bfc9ace4a8e05e37a3)) -- **nginx:** refactor to using alwatr nginx ([9b63ede](https://github.com/AliMD/alwatr/commit/9b63ede987936102e0da7d0d1c45920b12317c5e)) -- **nginx:** review and rearrange conf folders ([08e9b0c](https://github.com/AliMD/alwatr/commit/08e9b0cb3d201418af89dd8dff3c96a04aef040b)) -- **nginx:** tune-worker-processes.sh ([4747e54](https://github.com/AliMD/alwatr/commit/4747e54045be5cfd41808b9730c41f8113f54ba5)) -- **nginx:** update templates and custome err page ([a09ed2f](https://github.com/AliMD/alwatr/commit/a09ed2fdec4a984317ae65b55d1321d90bc63b19)) -- **publish-container:** improve CI/CD ([0b5f38c](https://github.com/AliMD/alwatr/commit/0b5f38c204d2a411e24b1035967f1bff9aee2180)) -- **storage:** forEach ([cc26999](https://github.com/AliMD/alwatr/commit/cc26999e4303c54cdd18c79c4b4515ac50480a6d)) - -### Performance Improvements - -- **storage:** silent get ([c2cbd88](https://github.com/AliMD/alwatr/commit/c2cbd887f20031f86392aec6537bfd699a36480b)) - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -### Bug Fixes - -- get signal object of `request` signal ([eec4b62](https://github.com/AliMD/alwatr/commit/eec4b6201d79785aa10f4b9c777449525158a346)) -- **package:** eslint command ([c74be93](https://github.com/AliMD/alwatr/commit/c74be93ebef1f78681525b8cd5a57b0f926e42ec)) -- remove npm token from install dependencies ([21f01cd](https://github.com/AliMD/alwatr/commit/21f01cd328d99ac8133d51d855295e7a338ade68)) -- **signal:** fix some issues of `review` ([36ceb8b](https://github.com/AliMD/alwatr/commit/36ceb8b25987621065327b4fa475a213562af8e7)) -- **signal:** log performance and security issue ([dbe9483](https://github.com/AliMD/alwatr/commit/dbe9483b672099b91c18c3a103c2878435fd6508)) -- **tdlib:** build issue ([861b70f](https://github.com/AliMD/alwatr/commit/861b70f1bf381cb91b2c7d06243e50f849eb0e5b)) -- **tdlib:** dockerfile ([e0ac726](https://github.com/AliMD/alwatr/commit/e0ac7262b84e35e11ea8d1b1243819f958082a6b)) -- **workflow/build:** name ([9710fba](https://github.com/AliMD/alwatr/commit/9710fbab011b3de5eb0c52f9f4fceabd801fab50)) -- **workflow/lint:** task name ([4b191e8](https://github.com/AliMD/alwatr/commit/4b191e85694f0c861b6b2ddf29a727e834355632)) -- **workflow:** run issue ([731a5b2](https://github.com/AliMD/alwatr/commit/731a5b2c2bf0fcbe7d0f44f501346b82654b16e7)) -- **workflows:** add workflow_dispatch ([9fc7db7](https://github.com/AliMD/alwatr/commit/9fc7db71f0fefbdf65c7301c3ca505d85ed7fd36)) -- **workflows:** change paths! ([7bca6e7](https://github.com/AliMD/alwatr/commit/7bca6e7e08c9c699b9b18b301c14e8c05761b836)) -- **workflows:** custom version tags for containers ([a752b90](https://github.com/AliMD/alwatr/commit/a752b900516052ebf0883b713c040b4f43a18364)) -- **workflows:** final test publish container ([ac7f361](https://github.com/AliMD/alwatr/commit/ac7f361e749f99e0b3eafc191c1917c8a6c90634)) -- **workflows:** image custom versions ([ccd80e8](https://github.com/AliMD/alwatr/commit/ccd80e8933e4fbc72538f2377d3b654baa33c679)) -- **workflows:** image custom versions ([1db6600](https://github.com/AliMD/alwatr/commit/1db6600d82745bcbe5ef2b8dcde646c8b0c0032a)) -- **workflows:** install deps ([2598166](https://github.com/AliMD/alwatr/commit/25981664622f111c5cdb66ae7687bfdced8fdacb)) -- **workflows:** name ([dd8f414](https://github.com/AliMD/alwatr/commit/dd8f414a44f265c0a45c324c353b733204ddc445)) - -### Features - -- **classic-cloud:** child deploy script ([8d9eaef](https://github.com/AliMD/alwatr/commit/8d9eaefcc1a8f8a03da618b1599b9c03f2464320)) -- **classic-cloud:** new deployment ([8059d84](https://github.com/AliMD/alwatr/commit/8059d8422aa1f8a68617cb73cb254da6d79870eb)) -- **classic/deploy:** add logs and up command ([a7af093](https://github.com/AliMD/alwatr/commit/a7af09370297d4acc3efd12eb8ff2de5cda4d7b3)) -- **container:** alpine with CI deploy workflow ([e63b9ef](https://github.com/AliMD/alwatr/commit/e63b9ef6ff3759f7bef333e14ec115f90efbdd30)) -- **container:** tdlib! ([e407049](https://github.com/AliMD/alwatr/commit/e407049a7d529341e628f4c69ddf68f40863d72e)) -- **rnnoise-model:** ffmpge rnnoise models ([e543904](https://github.com/AliMD/alwatr/commit/e543904171c77d06565c96d1d264155a5df231f0)) -- update workflow ([538192f](https://github.com/AliMD/alwatr/commit/538192ffb9adf516b4df95e0f4408d72441e4c95)) -- **workflow/lint:** add schedule ([faaae0e](https://github.com/AliMD/alwatr/commit/faaae0e32498b2b0c14082bf7fb6d7e48258a7ed)) -- **workflows:** CodeQL Analyze ([00be21c](https://github.com/AliMD/alwatr/commit/00be21c392ad8f4ef10ba01b5cbcce826026cc18)) -- **workflows:** Dependency Review ([cbb1373](https://github.com/AliMD/alwatr/commit/cbb1373df07e198ff50ce5193dfe985dda9ea1f2)) -- **workflows:** new eslint workflow ([33c3a56](https://github.com/AliMD/alwatr/commit/33c3a56cde9a90833a0da17fba87f2268b62a0cb)) - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -### Bug Fixes - -- **classic-cloud:** docker-compose external syntax ([9c56389](https://github.com/AliMD/alwatr/commit/9c56389600a2cfce63b27de30087cf6655e86d83)) -- **cloud:** review and fix deploy issues in productions ([dce9b38](https://github.com/AliMD/alwatr/commit/dce9b384a5b0f303a1eba3c8e34f6e3cda62dbcc)) -- **deploy:** echo messages ([1052657](https://github.com/AliMD/alwatr/commit/1052657a87c9ad5ef8785adae215e68957f72d36)) -- **mariadb:** MEMORY_LIMIT ([20adf3f](https://github.com/AliMD/alwatr/commit/20adf3fb60b7e21fad2e6816cf8addad1b15899c)) -- **php:** display error off ([8a923b5](https://github.com/AliMD/alwatr/commit/8a923b5ef49ac68a43fe6e09bf931418f9a262c7)) -- **traefik:** review ([bbc8ed1](https://github.com/AliMD/alwatr/commit/bbc8ed11a1ede953fb87fc57cc356d28a97baeaf)) -- **wordpress/php:** refactor install script in php dockerfile ([4f33233](https://github.com/AliMD/alwatr/commit/4f33233e2fb96c0ef2ae9074ee20f39806af5aac)) -- **wordpress:** image ([bfee572](https://github.com/AliMD/alwatr/commit/bfee572885782744974eb296a073c33f721760a7)) -- **wordpress:** toggle cache issue ([d1ed858](https://github.com/AliMD/alwatr/commit/d1ed858e7d892c4d45ca196261bebe580e7fc994)) -- **wordpress:** WORDPRESS_DB_HOST ([8149875](https://github.com/AliMD/alwatr/commit/8149875695c2824e9107fe36d713a99b6bbd429b)) - -### Features - -- add multi .env file support to deploy script ([1937f01](https://github.com/AliMD/alwatr/commit/1937f01e92c043e30c2c94a5f5071ef2892e5448)) -- add readme for package category ([9429d05](https://github.com/AliMD/alwatr/commit/9429d056213c78fa6415187d099e80b5b70f6e62)) -- **adminer:** add new service ([b679ec1](https://github.com/AliMD/alwatr/commit/b679ec1b92270309f39ca16e0c67b40af2b846fa)) -- **cloud/deploy:** refactor rsync and ignore dsstore files ([6795812](https://github.com/AliMD/alwatr/commit/67958128348a826e6b89f2894cf48f5e16460c44)) -- **cloud:** update \_up scripts ([8d376b8](https://github.com/AliMD/alwatr/commit/8d376b8a4b11704b3852b004622b9eb39e8bb5e4)) -- **cloud:** update rsync ([b29a34f](https://github.com/AliMD/alwatr/commit/b29a34f0c3983594b44d8652b1f87da52377b768)) -- **cloud:** update scripts ([d6addc6](https://github.com/AliMD/alwatr/commit/d6addc6e23283477e9055825a52333feb20c08a9)) -- **deploys:** refactor deploy script ([26c41d6](https://github.com/AliMD/alwatr/commit/26c41d6fd445b2fed81fa4653a4769c74c3e1638)) -- **mariadb:** add new service ([55f5dab](https://github.com/AliMD/alwatr/commit/55f5dab4bb68ad434797d9b222c8beea4e90a934)) -- **php-apache:** classic php with apache ([6e1536f](https://github.com/AliMD/alwatr/commit/6e1536ff8166152237ea07c67a2c3dd60fb22f4e)) -- **php-apache:** dynamic build and update structure ([850486f](https://github.com/AliMD/alwatr/commit/850486f9756c90660eac7dd6ed6fa3e6aa64e51e)) -- **services/wordpress:** supper fast wordpress cloud! ([4998b90](https://github.com/AliMD/alwatr/commit/4998b90632a5105d0eec590e6b1c050ed18a8b41)) -- **services:** improve all docker deployment ([ba135ad](https://github.com/AliMD/alwatr/commit/ba135adfcee406e4e9078bf83f307d9a67dca611)) -- **toggle-cache:** improve styles ([ca9f07e](https://github.com/AliMD/alwatr/commit/ca9f07e1eab99f8a8b8a4143e6f1558d0e40e955)) -- **traefik:** add service proxy ([5c2c74a](https://github.com/AliMD/alwatr/commit/5c2c74afa8ee460c183568617776dce7f627f65d)) -- **traefik:** deploy script ([44f5959](https://github.com/AliMD/alwatr/commit/44f59592f053e795a04ec1189673268865c00439)) -- **traefik:** improve deployment ([1ec83db](https://github.com/AliMD/alwatr/commit/1ec83dbdc3683511026ad665be99f803dd79e3f7)) -- **wordpress:** add SKIP_FIX_PERMISSIONS ([79ab5d2](https://github.com/AliMD/alwatr/commit/79ab5d21b4c92e47532acf8a42dbe2c7c9223da7)) -- **wordpress:** args for install ioncube loader ([6e5fe71](https://github.com/AliMD/alwatr/commit/6e5fe711245fc3dc7ebba4917ed2edfe7a6f02e4)) -- **wordpress:** improve deployment to use multi env files ([db827fe](https://github.com/AliMD/alwatr/commit/db827febc0ebc4d2c6488bab1744b38ecfe01044)) -- **wp:** install Source Gaurdian loader! ([55c52ee](https://github.com/AliMD/alwatr/commit/55c52eec24cd1ac55175b007a3f05976dcd2a898)) -- **xz-example:** such a wow! ([b523293](https://github.com/AliMD/alwatr/commit/b5232932f3b17a39993fbb1a102c58daeef273f7)) - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Bug Fixes - -- **nano-server:** `incomingMessage` body ([0172390](https://github.com/AliMD/alwatr/commit/01723906f657c35a7a2a329b914308c3d9f06ff8)) -- **nano-server:** host log ([c0c0f97](https://github.com/AliMD/alwatr/commit/c0c0f971d0405f5731cf040962b4609c9472a2fc)) -- **nano-server:** logs ([72cb160](https://github.com/AliMD/alwatr/commit/72cb160b53e7bb04be6b5d24aa04f98d6a597e11)) -- **storage:** first log ([76a32d0](https://github.com/AliMD/alwatr/commit/76a32d071b22b3a5b96a880d386bb3408ebe29ad)) -- **storage:** imports ([8d86a73](https://github.com/AliMD/alwatr/commit/8d86a73c85c117416e2ae0f4c9b879bfbc2d8a7c)) -- **storage:** provider config ([4497dda](https://github.com/AliMD/alwatr/commit/4497ddae726fce45b9d94a600fa19a07d2d6d298)) -- **storage:** review and test ([adc1d0b](https://github.com/AliMD/alwatr/commit/adc1d0b2ebd9cce4df946b21745c1a61172e66bb)) -- **token:** calc benchs ([f1240cc](https://github.com/AliMD/alwatr/commit/f1240cce9247c6fb53dd63a940bd95123ba628d1)) - -### Features - -- **api/storage:** make nanoservice ([7626710](https://github.com/AliMD/alwatr/commit/762671063f62ac150806c128495bebbfad2fdeb2)) -- **nano-server:** add token to connection ([8677999](https://github.com/AliMD/alwatr/commit/867799920c917dbafe3a041a8946f7e77577552f)) -- **nano-server:** refactor, add seperate config, cache all routes ([2cdd203](https://github.com/AliMD/alwatr/commit/2cdd2030474b7c1796e311740f20b8f39631bae9)) -- **provider:** show mwmory usage on new data loaded ([1a24df3](https://github.com/AliMD/alwatr/commit/1a24df32d057cfdc91a1c8d47c3a0346065b9a40)) -- **services/storage:** base config ([75ae7d2](https://github.com/AliMD/alwatr/commit/75ae7d27dc3d910a2f45cf92e63bbd5115cc8fca)) -- **services/storage:** updateDocument route ([723c795](https://github.com/AliMD/alwatr/commit/723c795d573635653ee4246fb91dfe096a414cb2)) -- **services/storage:** extract and validate token ([dd4ffc4](https://github.com/AliMD/alwatr/commit/dd4ffc44b05ba0496b530a4a69164d595b72c081)) -- **services/storage:** make base types ([fb26b7a](https://github.com/AliMD/alwatr/commit/fb26b7a4f7646e17f4b1c6a5b2c4b51d666752a0)) -- **services/storage:** storage privider ([9b9c07f](https://github.com/AliMD/alwatr/commit/9b9c07f53725fb7eb2a92706d4f3392675d8aad2)) -- **services/storage:** test and demo ([22e8ad4](https://github.com/AliMD/alwatr/commit/22e8ad44cb39cacdb99f7535befed1a736aec773)) -- **storage:** add \_createdBy and \_updatedBy ([1a70945](https://github.com/AliMD/alwatr/commit/1a70945bc61921f13d839adde25fdfe9fb37eaad)) -- **storage:** docker ([a78f784](https://github.com/AliMD/alwatr/commit/a78f7845aaaf4faace6de92dae57763299ee7d10)) -- **storage:** get method ([0b04f12](https://github.com/AliMD/alwatr/commit/0b04f1209d7f865e2ef0e884a293587cfcd72420)) -- **storage:** improve process and add has, storagePath, keys and length ([4e323ad](https://github.com/AliMD/alwatr/commit/4e323ad10ee0630cfa02edd191167b69e14743ff)) -- **storage:** provider ([92df9f3](https://github.com/AliMD/alwatr/commit/92df9f33a1c5b044d95e2efed51281eb08556c94)) -- **token:** generate and verify HOTP tpkens ([d0372f8](https://github.com/AliMD/alwatr/commit/d0372f805a45d6fd6571b50821529068cec7d424)) -- **token:** new package files ([fe620e0](https://github.com/AliMD/alwatr/commit/fe620e0d9f84c4e6d8e0eed47d6b398e218429ad)) - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- all package refrences ([11b027d](https://github.com/AliMD/alwatr/commit/11b027d4cdbe142e1f5ef6c6f87c1812fbb2d94b)) -- **fetch:** compatible with new ts types AbortSignal ([949655a](https://github.com/AliMD/alwatr/commit/949655a257852aaaaa311e32603ecc0819eedf51)) -- **font:** sahel-vf font-weight ([bf84782](https://github.com/AliMD/alwatr/commit/bf84782347ed4898d854325415f6f43b1953f842)) -- **github/workflow:** schema detect ([b3b813c](https://github.com/AliMD/alwatr/commit/b3b813c45011afdc3e38dc7215f0f4beb8dcc1dd)) -- **i18n:** load resources issue ([19b9e39](https://github.com/AliMD/alwatr/commit/19b9e39d5a415e60901c117be3f8f82d09ef8444)) -- **logger:** refactor behavior of force ([7d9307b](https://github.com/AliMD/alwatr/commit/7d9307bb78523f3dae17b3bd80fa2fb47c90975f)) -- **nano-server:** logger scope ([73dbf02](https://github.com/AliMD/alwatr/commit/73dbf029325169d900558e2361fec9fa4303e7e4)) -- **route:** remove default `200` status code ([12d9065](https://github.com/AliMD/alwatr/commit/12d9065c79ee7ca1acd458a20e9bd65b4554b8d2)) -- **storage:** auto save request on set ([a1b671d](https://github.com/AliMD/alwatr/commit/a1b671d9beb8909d1fd89a1ffb7f80e1115b3cc3)) -- **storage:** DocumentListStorage type issue ([f1c90b4](https://github.com/AliMD/alwatr/commit/f1c90b4b00a8696375e1a2f15d8b17378a33c7f2)) -- **storage:** import ext for node ([545fe3e](https://github.com/AliMD/alwatr/commit/545fe3e7be9cc2d44e83d6f138c2ed0192dd1e24)) -- **storage:** make empty storage if file not exist ([0105551](https://github.com/AliMD/alwatr/commit/010555176ea262080b774fb4c51a16acc91bccf1)) -- **storage:** minify saved json ([dcd0abc](https://github.com/AliMD/alwatr/commit/dcd0abc66882c914ce57aace8fdf68e58995cda0)) -- **storage:** prevent to lost old meta data ([508bd56](https://github.com/AliMD/alwatr/commit/508bd56ee179d326762ffcb0a4e749bc7f74057f)) - -### Features - -- **demo/data-storage:** init demo ([61814cd](https://github.com/AliMD/alwatr/commit/61814cde15b68f89b6ae233fa8362bf214c3813b)) -- **file-storage:** json ([55991c3](https://github.com/AliMD/alwatr/commit/55991c3ed1bf156509ec06d582d6b6e27dbe4803)) -- **font:** add sahel font ([c09c152](https://github.com/AliMD/alwatr/commit/c09c152c1123703a1a9eb1062a11a9b5e86e796a)) -- **font:** add sahel font ([89b769b](https://github.com/AliMD/alwatr/commit/89b769b496d3b84fb092e633067373af538a896b)) -- **font:** demo for sahel ([bb087ef](https://github.com/AliMD/alwatr/commit/bb087eff880aceaedfb253494581d1f363632573)) -- **jatabase:** demo ([17beb7e](https://github.com/AliMD/alwatr/commit/17beb7ecdf3e89b0ffee43f4365f3b2dc4950f99)) -- **jatabase:** impeliment class ([0fdd533](https://github.com/AliMD/alwatr/commit/0fdd533446943502c187d961ebfcbf872f7c15e1)) -- **logger:** compatible with node.js ([7ee8b6d](https://github.com/AliMD/alwatr/commit/7ee8b6de3143e39c300345dec6864c9c56a4aae7)) -- **logger:** node coloring support ([2b4aab6](https://github.com/AliMD/alwatr/commit/2b4aab655bc0707761587a7439de98bbd4ad0e08)) -- **nano-server:** make `statusCode` in `ReplySuccessContent` optional ([fe836f4](https://github.com/AliMD/alwatr/commit/fe836f452566c541d25857df34c952b413690d23)) -- **nano-server:** make new package ([2148dfc](https://github.com/AliMD/alwatr/commit/2148dfc910565f917d3cb8eb001cde08f2fc694d)) -- **nano-server:** new class for handle server and connections ([62e33a3](https://github.com/AliMD/alwatr/commit/62e33a383b5220820f68f74020e04a7c5b390f0f)) -- **nanoservice:** base app ([f8708cc](https://github.com/AliMD/alwatr/commit/f8708ccafe60ce89d635d43540ae1c627d0d8b55)) -- **nanoservice:** esnext module ([8e9bd3d](https://github.com/AliMD/alwatr/commit/8e9bd3dd4fe16cfba41930633071965b32c5e7a8)) -- **nanoservice:** home route ([851324e](https://github.com/AliMD/alwatr/commit/851324e328a5719fbc6702e72026e65df282db4f)) -- **nanoservice:** load .env file ([ded93cb](https://github.com/AliMD/alwatr/commit/ded93cbe21071db48fddd468a8279640502c1fbb)) -- **nanoservice:** make starter kit base files ([cbc2e47](https://github.com/AliMD/alwatr/commit/cbc2e478b1ad548134d4267c40548d1bd026bb62)) -- **nanoservice:** new echo route ([de12548](https://github.com/AliMD/alwatr/commit/de125484c7bdeef40527c6cda0b9a1f0d83f5930)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -### Features - -- **element:** init new package ([a9a65d9](https://github.com/AliMD/alwatr/commit/a9a65d94beb86583cb7e5e2b47b8f235994310cb)) -- **element:** LoggerMixin ([e5825e1](https://github.com/AliMD/alwatr/commit/e5825e160324cde596dbf3982bf080d54ba9955f)) -- prettier config ([3a26e58](https://github.com/AliMD/alwatr/commit/3a26e58d6e622d8aa5e97f33a179d7819bdb7969)) - -## [0.10.1](https://github.com/AliMD/alwatr/compare/v0.10.0...v0.10.1) (2022-04-02) - -### Bug Fixes - -- **font:** including woff2 ([6d10eb3](https://github.com/AliMD/alwatr/commit/6d10eb33dbdd0f9b6b0f3b9930e44b099d499b77)) - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -### Bug Fixes - -- **font:** cleanup ([cdd4ee1](https://github.com/AliMD/alwatr/commit/cdd4ee15332cb9f1ec19bf34ec02cb1f5999cad5)) -- **font:** package file ([5c63a06](https://github.com/AliMD/alwatr/commit/5c63a0641d319e4b95ecc86671ce9456ab4d4be7)) -- **font:** woff2-variations addres ([88e4c52](https://github.com/AliMD/alwatr/commit/88e4c5296b9efe614aefeb45241fa066e40527c5)) -- **package.json:** build script ([8ad2061](https://github.com/AliMD/alwatr/commit/8ad2061dbc2bb73f01597794c12c53baa13a0d8b)) -- **package:** build/lint script ([939a1cf](https://github.com/AliMD/alwatr/commit/939a1cf494c1d1275ccfa459d4ab5bd9ae41cb0d)) -- try to fix typescript importer in eslint ([ceb508c](https://github.com/AliMD/alwatr/commit/ceb508c9d8152aba4f3833b1c1f4930828e2014d)) - -### Features - -- **demo:** add font demo ([33f3825](https://github.com/AliMD/alwatr/commit/33f3825a7e23b86281d047dd3be3b2f8eb862b8d)) -- **demo:** font ([8035d73](https://github.com/AliMD/alwatr/commit/8035d73dc99d4ff9c8eec0f70bec43b97b80320c)) -- **font:** add vazirmatn font files ([6499d01](https://github.com/AliMD/alwatr/commit/6499d01fca69909071debefa545d6e9a9d5d85a1)) -- **font:** define fonts, the wight way! ([215afb8](https://github.com/AliMD/alwatr/commit/215afb8959dbc3fd1f0e2e0ebe10a878ab2ddec8)) -- **font:** init ([3bea1d9](https://github.com/AliMD/alwatr/commit/3bea1d9939c688cb9c80c87bb35c09910239b5a8)) -- **font:** sahel font ([7cd8b27](https://github.com/AliMD/alwatr/commit/7cd8b2785c1146f57241a4a0df6817988726d3f3)) -- **lint:** add import eslint ([7f2f1f5](https://github.com/AliMD/alwatr/commit/7f2f1f5f4b05a5940d711898606dd65cce6fc1a5)) - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -### Bug Fixes - -- **i18n:** access signal issue ([097b354](https://github.com/AliMD/alwatr/commit/097b354da71b5fb4ce1e15f5cbc4accbe12bb6e1)) -- **router:** export RequestRouteParam type ([d07e0ea](https://github.com/AliMD/alwatr/commit/d07e0eaf7781b8c35f7f47c90fdbbbc7e229a060)) -- **router:** fire first route-change signal as soon as posible ([2ae176b](https://github.com/AliMD/alwatr/commit/2ae176b91f7461258bd7432064d6c81730f6f04e)) -- **router:** outlet default 404 render ([2218483](https://github.com/AliMD/alwatr/commit/22184830c6c93024e335707a60badbbf188745aa)) -- **router:** router.signal type helper ([88b8e26](https://github.com/AliMD/alwatr/commit/88b8e26c83f35c52ff69356f12650e77cc6537d2)) -- **router:** signal define issue ([d3921b5](https://github.com/AliMD/alwatr/commit/d3921b5d8bbe3dc4984a264801f2e992ceb1ece0)) - -### Features - -- **router:** improve 404 template ([3af27f7](https://github.com/AliMD/alwatr/commit/3af27f71dec257e0a245605c6c333816e6e0c317)) -- **signal:** ListenerInterface ([38ef029](https://github.com/AliMD/alwatr/commit/38ef0291c5ba2e3619080ad89109d805d3d600f2)) - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -### Bug Fixes - -- **router:** updateBrowserHistory issue ([22b16e5](https://github.com/AliMD/alwatr/commit/22b16e599089f3abe5eb9dc285563fa9510ad97e)) -- **signal:** remove once listene in dispatch change imediatly the loop! ([e4d420d](https://github.com/AliMD/alwatr/commit/e4d420d3a086558dc01dcd7a9c5fe3e96677f092)) - -### Features - -- **demo:** router outlet demo ([54576f0](https://github.com/AliMD/alwatr/commit/54576f0397df1d1471467564529a01b4e75335bf)) -- **router:** improve demo for test signal! ([59a1017](https://github.com/AliMD/alwatr/commit/59a1017f3ed323fea8e9e798f612f0f54b74b399)) -- **router:** make outlet ([45852a8](https://github.com/AliMD/alwatr/commit/45852a809a9f48fb09cf9a8c5ecc3f6519f106cd)) -- **router:** simple demo ([884359a](https://github.com/AliMD/alwatr/commit/884359ac2c77a306c2410d6fd351382b416c36fe)) - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -### Bug Fixes - -- **router:** trigger-click error when tagName undefined ([c16328b](https://github.com/AliMD/alwatr/commit/c16328bb6dc96b5c330015ac560cf95920b9c7b2)) -- **signal:** promise to multi requests works ([dd59f0e](https://github.com/AliMD/alwatr/commit/dd59f0e5737abec72c41895b93365199fad66fcb)) - -### Features - -- **logger:** add debug and improve documents ([8f83d29](https://github.com/AliMD/alwatr/commit/8f83d2956e521f016fe530322f657c343f1a0b80)) -- **signal:** demo as test ([fc3f9fd](https://github.com/AliMD/alwatr/commit/fc3f9fdd8c76c6bc5117f3ee894480500f81cc80)) - -## [0.7.1](https://github.com/AliMD/alwatr/compare/v0.7.0...v0.7.1) (2022-03-12) - -### Bug Fixes - -- **math:** build ([7cd8907](https://github.com/AliMD/alwatr/commit/7cd890765ddba0cca2938292eb8705995a2bfde8)) - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -### Bug Fixes - -- **lerna:** add ignoreChanges for all md files! ([fa35e9c](https://github.com/AliMD/alwatr/commit/fa35e9c39d4bcf646fcc05fcc95a654a7519f70e)) -- **workflow:** remove duplicate tests on push and pulls ([29691fa](https://github.com/AliMD/alwatr/commit/29691fa294e8ace81c8246382bbcb42b58c3ccc5)) - -### Features - -- **math:** add isNumber ([3c5ee2b](https://github.com/AliMD/alwatr/commit/3c5ee2bbeb12a9c78df59aef291c971405d4d5fa)) -- **math:** new package for mathmatics ([7860385](https://github.com/AliMD/alwatr/commit/78603858b19693e613f6224b9c6d55d5c532e50d)) -- **math:** random ([18f585c](https://github.com/AliMD/alwatr/commit/18f585c882d40599ec9ed6531bda8f128d4cb5f8)) -- **math:** transformToRange ([62f334d](https://github.com/AliMD/alwatr/commit/62f334d37a625764dd9afad041a4489f1a61fa61)) - -## [0.6.1](https://github.com/AliMD/alwatr/compare/v0.6.0...v0.6.1) (2022-03-12) - -### Bug Fixes - -- **i18n:** package name in readme! ([5325e7f](https://github.com/AliMD/alwatr/commit/5325e7ff5f2b83862221544a4bcd931ed8b9f12f)) -- **lerna:** include readme to publish chnages ([524c8a0](https://github.com/AliMD/alwatr/commit/524c8a01551d2b523e9a099b294a41f071fffe6f)) -- **lerna:** remove ignoreChanges ([f2f20d6](https://github.com/AliMD/alwatr/commit/f2f20d61d532ec265373506a3b7629868c2ad446)) - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **demo:** package ([c2b2339](https://github.com/AliMD/alwatr/commit/c2b2339f1ca08207ae0d0f8f0d7fff9c98a822ce)) -- old One repo links ([1156b07](https://github.com/AliMD/alwatr/commit/1156b077e0abc4712207183e01896fe86f7a05f6)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) -- repo address ([eea4035](https://github.com/AliMD/alwatr/commit/eea403512f165722f561fa1944160ae6497f9edb)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -### Bug Fixes - -- **signal:** disabled getter and optional dispatch options ([28ced3d](https://github.com/AliMD/alwatr/commit/28ced3d0c4cdf44fc2aebfab98db0883fc5363fe)) -- **wordflows:** tests on all branches ([5cca930](https://github.com/AliMD/alwatr/commit/5cca930f3adf88624c6ff7a1f3c551502f7a4826)) - -### Features - -- **signal:** new SignalInterface ([221701a](https://github.com/AliMD/alwatr/commit/221701a54ea9edda4a3a935a7b098e235ec52691)) -- **workflow:** add tests workflow ([7512aba](https://github.com/AliMD/alwatr/commit/7512abae92add3fe73a0578d55f9439f7d1632af)) -- **workflow:** add verify workflow ([88fc40c](https://github.com/AliMD/alwatr/commit/88fc40ce9affeaf715fc8dda600f35fa7b2c84b6)) -- **workflow:** rename workflow file ([e35df8f](https://github.com/AliMD/alwatr/commit/e35df8fac972b7b4dc81dfac159d97d09b0b6751)) - -### Performance Improvements - -- **logger:** refactor making logger object ([bc38018](https://github.com/AliMD/alwatr/commit/bc38018758540130df2f46c44521aea0a867bbe8)) - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Bug Fixes - -- **fetch:** build issue [#73](https://github.com/AliMD/alwatr/issues/73) ([fb74463](https://github.com/AliMD/alwatr/commit/fb74463d367393706d16e482488a565bdfef70a1)) -- **i18n:** build issue [#75](https://github.com/AliMD/alwatr/issues/75) ([fe7a108](https://github.com/AliMD/alwatr/commit/fe7a108904176e63b8aa7e388d95ee8a90c6b71f)) -- **logger:** types missing ([712363d](https://github.com/AliMD/alwatr/commit/712363d3cf77a712f8c801c4dc9d06d256dfc0e6)) -- **pr-template:** make it simple ([3f4253b](https://github.com/AliMD/alwatr/commit/3f4253b3a44634e5440fe714937536fa18fa9b7a)) -- **router:** build issue for parameterList type [#75](https://github.com/AliMD/alwatr/issues/75) ([5fc1ecd](https://github.com/AliMD/alwatr/commit/5fc1ecd12b938936e2718f9307186493e2712e1f)) -- **tsconfig:** add useDefineForClassFields ([cf11de2](https://github.com/AliMD/alwatr/commit/cf11de28d032e23aaac39b01a4a6f863b8fa13b8)) - -### Features - -- **logger:** add logProperty, logMethodFull ([8b0317d](https://github.com/AliMD/alwatr/commit/8b0317db88ed73604a27935a3a30cd5c31cb0804)) -- **logger:** complete refactor the logger with new API and fix show correct line number ([7efe8cf](https://github.com/AliMD/alwatr/commit/7efe8cf0f566e148406f38fdd60fa3d747c9bc51)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -### Bug Fixes - -- **signal:** signal provider type ([0151c57](https://github.com/AliMD/alwatr/commit/0151c57d9b6d4f7e83bb9b1847ebe0ae53cd8f89)) - -### Features - -- **i18n:** impeliment core methods ([6449bb4](https://github.com/AliMD/alwatr/commit/6449bb42837335c2e2e5b4a75e98139528e2e7da)) -- **i18n:** impeliment initialI18n ([87da5e4](https://github.com/AliMD/alwatr/commit/87da5e46943ba12a8067fcac06c1dcced1e6fb92)) -- **i18n:** localize method ([544edfd](https://github.com/AliMD/alwatr/commit/544edfdd1bc52befab6afe4cbfb62ce1638aff2d)) -- **i18n:** start new package for i18n/l10n ([88a6c28](https://github.com/AliMD/alwatr/commit/88a6c28ad038ed02ca45128378e669f6d9c6949d)) - -## [0.2.1](https://github.com/AliMD/alwatr/compare/v0.2.0...v0.2.1) (2022-03-05) - -### Bug Fixes - -- **logger:** alwatrRegisteredList name ([ff59133](https://github.com/AliMD/alwatr/commit/ff5913321c4eafa1ce53fdacebf8fb4f23bfe430)) -- **signal:** signal value type issue ([292a4a7](https://github.com/AliMD/alwatr/commit/292a4a7d12a2fd143761e67cd1ecd2e5e40f2ee9)) - -### Features - -- **issue-template:** bug report and feqture request form template ([77159a7](https://github.com/AliMD/alwatr/commit/77159a7076369781cfcf7167e58843e0fb25fa18)) - -# [0.2.0](https://github.com/AliMD/alwatr/compare/v0.1.2...v0.2.0) (2022-03-05) - -### Bug Fixes - -- **fetch:** error codes ([4e0be80](https://github.com/AliMD/alwatr/commit/4e0be80786b6667035ae82750f2351bd2da4f341)) -- **router:** rename setSignalProvider callback detail to requestParam ([6e09f87](https://github.com/AliMD/alwatr/commit/6e09f8772d320625fb4c15ccaa0abcfa2932f992)) -- **router:** rename setSignalProvider callback detail to requestParam ([070c0f6](https://github.com/AliMD/alwatr/commit/070c0f6c5e4d6994e9af19dca515acc4f7ad4c5a)) -- **router:** trigger click signal name ([b4a9477](https://github.com/AliMD/alwatr/commit/b4a9477464cb05bb8fa227014de5e8af5b8dd600)) -- **signal:** fix dispatchSignal value parameters ([4d34cfb](https://github.com/AliMD/alwatr/commit/4d34cfbb5281d5ce4a4f06ddaaf72218dde80cdd)) -- **tsconfig:** add router ([a107e08](https://github.com/AliMD/alwatr/commit/a107e0872d59484ec208640b678e65212add53f0)) -- **util:** remove package ([b337d9a](https://github.com/AliMD/alwatr/commit/b337d9a97c8f73c2a87e722b23a50718321d1648)) - -### Features - -- **fetch:** add getData ([4a627c4](https://github.com/AliMD/alwatr/commit/4a627c43d2ad07acb340f058f02d41ce57288405)) -- **fetch:** add postData and fetchJson ([b0262b8](https://github.com/AliMD/alwatr/commit/b0262b83b5b7d8b7c376dce68aae3e16bd8e2610)) -- **fetch:** base fetch api ([925cdab](https://github.com/AliMD/alwatr/commit/925cdab8700ffb801e1d836ffc5d3245b66815cf)) -- **fetch:** FetchOptions type ([dd2d141](https://github.com/AliMD/alwatr/commit/dd2d1418d090387e1afa8277f78ae88ace17fd17)) -- **fetch:** new enhanced fetch package ([7e90472](https://github.com/AliMD/alwatr/commit/7e904720c983372317358ce107f6ad0f79c65647)) -- **router:** \_updateBrowserHistory ([8933a97](https://github.com/AliMD/alwatr/commit/8933a97cde277708356fc123c7493774cf0b00ec)) -- **router:** base type ([f76d34b](https://github.com/AliMD/alwatr/commit/f76d34b65fbfb9680662dd994136d90be99d496c)) -- **router:** first route request ([e0ad1d4](https://github.com/AliMD/alwatr/commit/e0ad1d403f0023e2df44cb8b7a3a5710fcfbe877)) -- **router:** impeliment click trigger ([39f5f07](https://github.com/AliMD/alwatr/commit/39f5f075f48ae4323ccca57467dde04ce8c9c3be)) -- **router:** impeliment popstate trigger ([1613131](https://github.com/AliMD/alwatr/commit/16131312e4bc083ca3d6cf4c1458a93962946ccf)) -- **router:** initialRouter with trigers options ([802405f](https://github.com/AliMD/alwatr/commit/802405fb17846be9fe51a41122c871b5aca9cf6b)) -- **router:** joinParameterList, splitParameterString ([9a4232b](https://github.com/AliMD/alwatr/commit/9a4232b942f36a06cd3278e1a339639c9bcc82fa)) -- **router:** make new package for routing base on sognals ([39c9ae8](https://github.com/AliMD/alwatr/commit/39c9ae8cf2d8288cfdefce0826f5fe89b2d7d550)) -- **router:** makeRouteObject ([6e0e5dc](https://github.com/AliMD/alwatr/commit/6e0e5dc6fa10a6c02b1aeb198355040de6e235d2)) -- **router:** parseValue all sections and params value ([9af4079](https://github.com/AliMD/alwatr/commit/9af4079f03dc2b656694f962701fcf75da23fa99)) -- **router:** requestRouteHref ([9341f3f](https://github.com/AliMD/alwatr/commit/9341f3ff444bcdf26fd31f5eca71912dd70b7167)) -- **router:** route base types ([769e863](https://github.com/AliMD/alwatr/commit/769e863b3a1569a01b320390b007bccaa80c3458)) -- **router:** routeSignalProvider ([ad187e7](https://github.com/AliMD/alwatr/commit/ad187e706b6d62abd0668cf9bc7b64c49acab071)) -- **signal:** add contributors ([64287cd](https://github.com/AliMD/alwatr/commit/64287cd8cea95665a6ed298177df60dadda7642b)) -- **signal:** improve signal provider by dispatch return content ([80c2b27](https://github.com/AliMD/alwatr/commit/80c2b275bcc0521327400c5902f512c778f5eb3f)) -- **signal:** improve signal provider by dispatch return content ([188f295](https://github.com/AliMD/alwatr/commit/188f2955e1663b318971e0d495bdd303a42bab56)) - -## [0.1.2](https://github.com/AliMD/alwatr/compare/v0.1.1...v0.1.2) (2022-03-03) - -**Note:** Version bump only for package alwatr - -## [0.1.1](https://github.com/AliMD/alwatr/compare/v0.1.0...v0.1.1) (2022-03-03) - -### Bug Fixes - -- **packages:** add publish config to public ([9cb3710](https://github.com/AliMD/alwatr/commit/9cb37106b5a35d24d5195ff54232e5769ccc034e)) - -# 0.1.0 (2022-03-02) - -### Bug Fixes - -- add lint to scripts ([18ef613](https://github.com/AliMD/alwatr/commit/18ef613bf6dfe3bfa108f801ed9ab522efa16d9b)) -- add type module ([2649798](https://github.com/AliMD/alwatr/commit/2649798c752138742cbdd14ee78768daa26f5b5a)) -- **bug:** fix ts list includes ([eba9b36](https://github.com/AliMD/alwatr/commit/eba9b369ac3cc4f7e01933f304c5a11bcf8608a9)) -- **bug:** rootDir `src` to `.` ([4ad87ee](https://github.com/AliMD/alwatr/commit/4ad87ee4a84b80afe563db5d42671ec9624ffce3)) -- change all [@one](https://github.com/one) to [@alwatr](https://github.com/alwatr) ([e0573bf](https://github.com/AliMD/alwatr/commit/e0573bf8b55c9e25bad3f7b407cc2c3d509f36d3)) -- fix import module ([38dff29](https://github.com/AliMD/alwatr/commit/38dff29a99e21f75f35be31bc11fb84e1f9d4a55)) -- fix port string to number ([6f5f133](https://github.com/AliMD/alwatr/commit/6f5f1332f9851f976c83148ea2e113001d1526f7)) -- **logger:** fix debug scope ([be62f14](https://github.com/AliMD/alwatr/commit/be62f142cbe3fe4d328e3fd9941ea7c2d640a23f)) -- **logger:** fix logger debug scope ([e734d21](https://github.com/AliMD/alwatr/commit/e734d218db888ecec33a03dc805b98dd75543efd)) -- remove `src` and move all content to `root` ([3323322](https://github.com/AliMD/alwatr/commit/33233220ed576f30249aa1197105219b62c65945)) -- remove `watch` scripts ([4e281b0](https://github.com/AliMD/alwatr/commit/4e281b030693c0a828f78c5e77d84e851a2dd242)) -- remove license ([86a1100](https://github.com/AliMD/alwatr/commit/86a11003026fb39321fe0a432974cc2f99c5d4b1)) -- remove serve script ([48bef31](https://github.com/AliMD/alwatr/commit/48bef319cbb4e9838039dbffa5671af67566ec3f)) -- remove test package ([ac58dd8](https://github.com/AliMD/alwatr/commit/ac58dd89ab5bdd87b40c24d16acef09e8aa1fdf7)) -- **signal:** AlwatrRequestSignals global type ([228e333](https://github.com/AliMD/alwatr/commit/228e3333326b23df51e7834872daf1349826bf09)) -- tsconfig issues ([159adeb](https://github.com/AliMD/alwatr/commit/159adeb72de4626dc16f6657765605b0a2ddccb1)) - -### Features - -- add .editorconfig file ([d05f1d3](https://github.com/AliMD/alwatr/commit/d05f1d3f9f1e81316d52831c8b2f776728fc967c)) -- add eslint configuration ([1360f31](https://github.com/AliMD/alwatr/commit/1360f317c6b1031640e410549499f1510d50e862)) -- add ts-lint.json ([5c592d8](https://github.com/AliMD/alwatr/commit/5c592d8e4643d2e9dc85fd0582eec054e0e02463)) -- build demo ([e50b310](https://github.com/AliMD/alwatr/commit/e50b3106f428a2a11cc0d960970017d564caa017)) -- build index ([93b604f](https://github.com/AliMD/alwatr/commit/93b604f44d43eedec5df1dd47ad84b96a99ed9b7)) -- demo html ([de43204](https://github.com/AliMD/alwatr/commit/de432043c1b46f2c8f0d9c4f46580b31f3eee066)) -- **demo:** add error and force sample ([0aa2edd](https://github.com/AliMD/alwatr/commit/0aa2edd896b417ea79a249f3332ad629e80a17fa)) -- **demo:** add alwatr logger demo ([f759a06](https://github.com/AliMD/alwatr/commit/f759a06f65545d3589a136f2b9a553dfdb1f2af2)) -- **demo:** alwatr logger demo ([302c6f4](https://github.com/AliMD/alwatr/commit/302c6f46fcc00796e6c030c6fe98a6c2b9f21d04)) -- **logger:** debug scope ([6e4190d](https://github.com/AliMD/alwatr/commit/6e4190dc9dafc28e3a7a481aa43622a23527993c)) -- **logger:** debug scope ([67dbde0](https://github.com/AliMD/alwatr/commit/67dbde00d925c2d78ae069439abe2a8a55d188b4)) -- **logger:** debug scope logger package ([1a4baeb](https://github.com/AliMD/alwatr/commit/1a4baeb7a253ba66563dbcf06079242dabb9f246)) -- **logger:** alwatr logger package ([711268e](https://github.com/AliMD/alwatr/commit/711268e17dea8ada9c901ef1e9d605b3212abd97)) -- **logger:** alwatr meta structure ([feade73](https://github.com/AliMD/alwatr/commit/feade735a6f141db77b81d7791d8872d45c8bf7e)) -- **scripts:** add watch commands ([af66f88](https://github.com/AliMD/alwatr/commit/af66f8848065750a414eda55c69f505b24c2da32)) -- **server:** build index file ([930bf86](https://github.com/AliMD/alwatr/commit/930bf86c0158929c14ebdefbaeeb6ded80be4450)) -- **server:** install and config web dev server ([2b42610](https://github.com/AliMD/alwatr/commit/2b4261050b855bddd2f594868993305d37086be8)) -- **signal:** addSignalListener ([e7c5742](https://github.com/AliMD/alwatr/commit/e7c57427ef11e2624eb9a52a166720b1a3c5f66a)) -- **signal:** getSignalObject ([b38954c](https://github.com/AliMD/alwatr/commit/b38954cf4ae1c24eaaa79ecf513995a4678814ee)) -- **signal:** impeliment addSignalProvider, waitForSignal, hasSignalDispatchedBefore, expireSignal ([e0b4d78](https://github.com/AliMD/alwatr/commit/e0b4d7831764d4454591f5105c5512e1657a63e5)) -- **signal:** impeliment dispatchSignal ([cb2dfbe](https://github.com/AliMD/alwatr/commit/cb2dfbe23ea751cba93cb1f6516cd2bfa2ecb18e)) -- **signal:** ListenerObject, SignalObject types ([36d8a33](https://github.com/AliMD/alwatr/commit/36d8a336760bba3808cfd26a28e4d24a31c95f8f)) -- **signal:** make new package for manage signals ([5bf82b3](https://github.com/AliMD/alwatr/commit/5bf82b3f05abc89102634e9b864d81b5b5af527e)) -- **signal:** register to alwatr meta ([9c850e8](https://github.com/AliMD/alwatr/commit/9c850e8df787aa44d289929dc65439e921982dce)) -- **signal:** removeSignalListener ([0088a52](https://github.com/AliMD/alwatr/commit/0088a5269ccce8b50a50e444695c81654fda70ff)) -- **signal:** requestSignal ([111ab5a](https://github.com/AliMD/alwatr/commit/111ab5a1436bc380f5121ef8c130da7010258d90)) -- **svg-icon:** init svg-icon package (ionicons) ([#14](https://github.com/AliMD/alwatr/issues/14)) ([5b3a8f6](https://github.com/AliMD/alwatr/commit/5b3a8f67f5676e0a2139cfa30b60666190c991cf)) diff --git a/LICENSE b/LICENSE index 58dec3f39..0ad25db4b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,661 @@ -MIT License - -Copyright (c) 2022 S. Ali Mihandoost - -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. + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md index d12a05c1e..9cbc3aeea 100644 --- a/README.md +++ b/README.md @@ -1 +1,15 @@ -# The Alwatr Elder Project +# Alwatr Ecosystem + +## Sponsors + +The following companies, organizations, and individuals support Nitrobase ongoing maintenance and development. Become a Sponsor to get your logo on our README and website. + +[![Exir Studio](https://avatars.githubusercontent.com/u/181194967?s=200&v=4)](https://exirstudio.com) + +### Contributing + +Contributions are welcome! Please read our [contribution guidelines](https://github.com/Alwatr/.github/blob/next/CONTRIBUTING.md) before submitting a pull request. + +### License + +This project is licensed under the [AGPL-3.0 License](LICENSE). diff --git a/cloud/alwatr/flight-finder/compose.yml b/cloud/alwatr/flight-finder/compose.yml deleted file mode 100644 index cae0849da..000000000 --- a/cloud/alwatr/flight-finder/compose.yml +++ /dev/null @@ -1,163 +0,0 @@ -networks: - internal: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - storage-server: - image: ${STORAGE_SERVER_IMAGE} - - cpu_shares: 512 - mem_limit: 256m - - stop_grace_period: 30s - - restart: unless-stopped - - networks: - internal: - aliases: - - '${appId}-storage-server' - - environment: - - STORAGE_PATH=/storage - - ACCESS_TOKEN=${STORAGE_TOKEN} - - ALWATR_DEBUG=${STORAGE_SERVER_DEBUG:-} - - volumes: - - type: bind - source: ./_data/storage - target: /storage - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - telegram-notifier: - image: ${TELEGRAM_NOTIFIER_IMAGE} - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - networks: - internal: - aliases: - - '${appId}-telegram-notifier' - - environment: - - STORAGE_PATH=/storage - - ACCESS_TOKEN=${TELEGRAM_NOTIFIER_TOKEN} - - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} - - ALWATR_DEBUG=${TELEGRAM_NOTIFIER_DEBUG:-} - - DEBUG=${TELEGRAM_NOTIFIER_DEBUG:-} - - volumes: - - type: bind - source: ./_data/telegram-notifier - target: /storage - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - flight-crawler: - image: ${FLIGHT_CRAWLER_IMAGE} - - cpu_shares: 256 - mem_limit: 256m - - restart: unless-stopped - - networks: - internal: - - depends_on: - - storage-server - - telegram-notifier - - environment: - - STORAGE_HOST=${appId}-storage-server - - STORAGE_PORT=80 - - STORAGE_NAME=${STORAGE_NAME} - - STORAGE_TOKEN=${STORAGE_TOKEN} - - NOTIFIER_HOST=http://${appId}-telegram-notifier - - NOTIFIER_TOKEN=${TELEGRAM_NOTIFIER_TOKEN} - - NOTIFIER_TO=${TELEGRAM_NOTIFIER_TO} - - ALWATR_DEBUG=${FLIGHT_CRAWLER_DEBUG:-} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - api: - image: ${API_IMAGE} - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - networks: - internal: - alwatr-public-network: - - depends_on: - - storage-server - - environment: - - STORAGE_HOST=${appId}-storage-server - - STORAGE_PORT=80 - - STORAGE_NAME=${STORAGE_NAME} - - STORAGE_TOKEN=${STORAGE_TOKEN} - - ACCESS_TOKEN=${API_TOKEN} - - ALWATR_DEBUG=${API_DEBUG:-} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${API_DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - pwa: - image: ${PWA_IMAGE} - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${PWA_DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/alwatr/flight-finder/deploy.sh b/cloud/alwatr/flight-finder/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/alwatr/flight-finder/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/alwatr/flight-finder/env/counterme.env b/cloud/alwatr/flight-finder/env/counterme.env deleted file mode 100644 index 64f60b86a..000000000 --- a/cloud/alwatr/flight-finder/env/counterme.env +++ /dev/null @@ -1,20 +0,0 @@ -U2FsdGVkX19Oi4EFQywRgIBdYqAlOL3MnrLzFjsH6XMa86WSw43K+4cXSvf6iZh0 -3R/+UCnE1YgNH8Af6ZQVa0mA5nuut2oa7n69qFv9EH3/sBHeEXVqhA7wgXd9vraA -mb+hyClJgSwtg6w38st2r8SSYhuiJG1SrqLS4VxVe1SP4eI3/LctowelCuah3eQt -gc5eIK6WVz/MD35TIzrDh16n9DR0fN7Zbm7KgUwgexAU2oTJXOGDc2HBwFX+8NXR -Y2LWqrnU+DdX+q6lfpaQ75mf5igz1tuhv+LJXr+/F7+cALmc3LnA8xT2U8vzSLo5 -O6uuk4VQIJG4J5U/5J7vU7NdOwPUBalMIbJa4bz1u1yTvApMdffQYMxs72NvBNt6 -dgawAh5MAjzUx26wQQ8HDEQEmHkB+WF/vv8Qn/SI07wFvatf/ZUjsilTKRD3KcTM -+IW8RDZ8xfwBYXsWIVJPvnuYJQhgL+emqF3lXu0xNK3aYTaTpREryRXJhXsa8uGC -yTXBy6UVkd5ZHJbaT4VOpyfHz1oJnkz5GWzILoZE0p7T2olcyaSXm+3QOJAq44M6 -5bXKHy5mjZE9YB9TLLOGmqElfDr2VLyJl0RHb/E4FQ3OeaRvJ4uw5im95tjRk5HT -aDm9xzIB3GuBbfAiXtzfe+9Wtdoj+acfNtj5knTurAqsArUkRFVb67bCf74QjvnT -XIpL2aruD9QI55FshXBkpCTSEQI1KWBcpBgSa2vI5f/R+UxCBJXb4NfEexJVgVrP -RZvjAzW4doeWIQg0r+E0y4i/cau3TmF+jMftDgmz4qQFmAXX5lIveJjSgy0DZsLT -TYNVsZKgviixv8lLPx3ipcNB8JMrM6HRfNw9dkKatEM1G2fGpaVjDStu4QHiNvHP -ArumDZonjIUg7umbObFQ7/MxdhBDCdTg76cTmf7RmiePkhNjQNJDrSr1KHfs50rc -Pt91nhqj7cgXPY8hYK/piud+cGUm3xB4AMuHfkC+MP93jnYCMAmikiZIUoyqFnR8 -gN+HhwfP/xWJ7sY0q+Mza/yMfY2YVn/E2LbuUmqfmK7ZpuO1Nf11NeQL/gbsABvS -yxpDEoTNurTdBFl3OsTm3G1frpZ7J6i9/8vYj/Aeu2e90fn1FRS+af0hTmS9aBsB -DkXUpShTb0o1abqW2HVn5qTZ/rVkGMIIoGSPKA/uS5F4WUMCSW13NMYaNviuG3nG -5PKiGKyR+05ZGlkHxNPY4MQpRXOy4az4I1VnL98Ypqc= diff --git a/cloud/alwatr/keep/compose.yml b/cloud/alwatr/keep/compose.yml deleted file mode 100644 index 9314c24d2..000000000 --- a/cloud/alwatr/keep/compose.yml +++ /dev/null @@ -1,141 +0,0 @@ -networks: - internal: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - pwa: - image: ${PWA_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - environment: - - NGINX_ACCESS_LOG=${PWA_ACCESS_LOG:-off} - - API_ACCESS_TOKEN=${API_ACCESS_TOKEN} - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - storage-server: - image: ${STORAGE_SERVER_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - stop_grace_period: 30s - - restart: unless-stopped - - networks: - internal: - aliases: - - '${appId}-storage-server' - - environment: - - STORAGE_PATH=/storage - - ACCESS_TOKEN=${STORAGE_TOKEN} - - ALWATR_DEBUG=${STORAGE_SERVER_DEBUG:-} - - volumes: - - type: bind - source: ./_data/storage - target: /storage - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - form-registration: - image: ${FORM_REGISTRATION_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - internal: - alwatr-public-network: - - depends_on: - - storage-server - - environment: - - STORAGE_HOST=${appId}-storage-server - - STORAGE_PORT=80 - - STORAGE_TOKEN=${STORAGE_TOKEN} - - ACCESS_TOKEN=${API_ACCESS_TOKEN} - - FORM_LIST=${FORM_REGISTRATION_LIST} - - ALWATR_DEBUG=${FORM_REGISTRATION_DEBUG:-} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/api/v0/form/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - cdn: - image: ${CDN_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - environment: - - NGINX_ACCESS_LOG=${CDN_ACCESS_LOG:-off} - - volumes: - - type: bind - source: ./_data/cdn - target: /var/www/html/cdn - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/cdn/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/alwatr/keep/deploy.sh b/cloud/alwatr/keep/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/alwatr/keep/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/alwatr/keep/env/keep-beta.env b/cloud/alwatr/keep/env/keep-beta.env deleted file mode 100644 index 02dd38938..000000000 --- a/cloud/alwatr/keep/env/keep-beta.env +++ /dev/null @@ -1,15 +0,0 @@ -U2FsdGVkX18X7fWjrUbaRwmkcl0QQLR8ShgqdCVPdVfSfuQd4/xqCaKlSbwJIuWO -3RzyBEXIiC/u51SHg+bebuIuTIHFcIGzpZ9b6g0S0e9hNa3EjvQYZqXx8YG+3IMT -buiolPuawt7w3x8m9sViBWfBVzuFEkTXj6glDJ1a7qU5Dgj+Lc76O5ARNry39LS4 -ApX5OYjgVreItS0/E7RmfyVqpSDD60MJZBR7xYBBXijADgcWzTxMwOfdd1Q4kjES -hBNt2s3nuxq27IpJhk5pqPBrpm/Dg5bz/CU08exJWz2dfixZzz9YHOzisSqy+v7t -Iop3bRDXoqEGJ4cBN6xcVRnsAufroACLCfh2DG54XK7uls823gWgdo7R5XdjOfy2 -SEJ9I7mRlr9oi+07NLRLmtJfk3senYll5zPaJsDsrw7JmHKjaS0XqFWo9jGuLVmn -Prl4gVDOXqK3OKtscpB3u1xn/JzGAEmAyuWkVUtcF7N1DaeY8LL1RuAlRmVwPY6Y -9NV8+MjVrLto0RowHzako/Q7/qaUR5XesnMNS7SSPRhILJaPodXWqK8WU6OcELEn -uFyug7KonNfCp1hL705rfSqNmM5Fg25sAHZ4TZOFkIiAxLVuNASAzRuY9w9rWKGB -yYtsXHZle+UNCOIS0hm5DuDzvZFHI9Gzp8FqK4VrXWWOubPQRRShsFOyNep+x3Hs -Wmh4JiC7/0r9glFgib8jvgQRbmKT2/yeVvsxbXmLqAR5WroyYUL9kMu+fHMkOns5 -QUXrokgJ0pvfLOECgVZSA6baDRqIjFO83N7nkuN0zHN6YATw5CGXww6ZQgWhhrkM -pI68qEw0enG+5MaBkIrpcM9C3Se5vaPRzfZY9LfrU15NbvRu25AG3HXwOisuxWAv -AgvnXVkZ1GnZAveZdkLAhg== diff --git a/cloud/alwatr/keep/env/keep.env b/cloud/alwatr/keep/env/keep.env deleted file mode 100644 index bc4ae0c41..000000000 --- a/cloud/alwatr/keep/env/keep.env +++ /dev/null @@ -1,15 +0,0 @@ -U2FsdGVkX1/hgw/4fiy3dJAEJzsBp3m/3r2RozlcXLVaoviylWTACME0QDSbcctW -q4URr9u96Mo2FaAMjr5+YlnB2raILyGSMkeHmy5S3k/0m0sXwLP8ZFuJmLeWAYtK -nnOyWOOBIDLJD7lTrEa8JgaROkiK83J5ALTkolsLFFNtuGqP7bfkSX+ZaY9Vv0CA -2IwCn2L/9smpCNqk4kzY+wPcv6+sYjiMqUIRM3nhqvg61ywsDBXHeYtuIm3tXkZw -r4TJs0y0K9aUQv7Xbxv19fyL5J79EH1cp47+IhWZ2siq4c6ZM9rzpSlVQx3lrWRI -tEyV2K+hVGSYq3D1L0NWsvqupl3pmYdE22ZaCpC9hRsh4siUaFoLm5PPJd8MwIR8 -IPwRtFZqe1CjNgBmOpz0W0Iehgantk3SKy3US//CRZzEMNuSrFqqtEUppCis8BAD -LLvEbrI+DQtPFvAWmtNX+CoA5SN0JwsPD6JcKpLgCu7tW/P21mq8Y+yuEet1vdfP -AY2YUcKbHE62oQfyyAMlgK8+oU3NxglnFOIYtSl2qefrC3XtYHG1r6BKY6+6cbb4 -QZcfuVYL7VtLVIoTmBCMFrr/ifvG1yVxOPZtQBB/A+fxks3raWet6+kzeliIIHV4 -Hn0BJ+uQoGBVYhtCdsfrrD4+TmBLDynSNp8w8d9iPf4/6S6srTrG9x6DW46p1aLM -wZhL9OTW9FRIhfZjOXUf1nhUtNKrjShJa7Q9kqtM8oSEuA/c4eOk6spIIt+FussH -S7K3L+3Y8lpYsDZkzhHFObSVsV9VIBZ/uOB+pSvWWlmxxORft6AEkjrk09Ao9a39 -7WDvzatY+N9W+0y0llbE1mH1HGTKaIW2XEMhT7GquHt/Ut9X7Hq0c9eT4lSajaLT -SeQLMhO1iB0vVDpT+uCrER00DAhzEowX0Ba3Hfgsdxw= diff --git a/cloud/alwatr/soffit-order/compose.yml b/cloud/alwatr/soffit-order/compose.yml deleted file mode 100644 index 2e05932f9..000000000 --- a/cloud/alwatr/soffit-order/compose.yml +++ /dev/null @@ -1,175 +0,0 @@ -networks: - internal: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - pwa: - image: ${PWA_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - environment: - - NGINX_ACCESS_LOG=${PWA_ACCESS_LOG:-off} - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - api: - image: ${API_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - internal: - alwatr-public-network: - - depends_on: - - storage-server - - environment: - - STORAGE_HOST=${appId}-storage-server - - STORAGE_PORT=80 - - STORAGE_TOKEN=${STORAGE_ACCESS_TOKEN} - - TOKEN_GENERATOR_SECRET=${TOKEN_GENERATOR_SECRET} - - ALWATR_DEBUG=${API_DEBUG:-} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/api/v1/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - storage-server: - image: ${STORAGE_SERVER_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - stop_grace_period: 30s - - restart: unless-stopped - - networks: - internal: - aliases: - - '${appId}-storage-server' - - environment: - - STORAGE_PATH=/storage - - ACCESS_TOKEN=${STORAGE_ACCESS_TOKEN} - - ALWATR_DEBUG=${STORAGE_SERVER_DEBUG:-} - - volumes: - - type: bind - source: ./_data/storage - target: /storage - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - nginx-storage: - image: ${NGINX_STORAGE_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - environment: - - NGINX_ACCESS_LOG=${NGINX_STORAGE_ACCESS_LOG:-off} - - volumes: - - type: bind - source: ./_data/storage - target: /storage - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefixStrip:/api/v1/publistore/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - cdn: - image: ${CDN_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - environment: - - NGINX_ACCESS_LOG=${CDN_ACCESS_LOG:-off} - - volumes: - - type: bind - source: ./_data/cdn - target: /var/www/html/cdn - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/cdn/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - diff --git a/cloud/alwatr/soffit-order/deploy.sh b/cloud/alwatr/soffit-order/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/alwatr/soffit-order/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/alwatr/soffit-order/env/soffit-order-beta.env b/cloud/alwatr/soffit-order/env/soffit-order-beta.env deleted file mode 100644 index 9faa34e9d..000000000 --- a/cloud/alwatr/soffit-order/env/soffit-order-beta.env +++ /dev/null @@ -1,16 +0,0 @@ -U2FsdGVkX1/p/PCcgCNDPkLzcjqjEOQXIinM5PCuk3yUxF+gcsf7bv9zIfwEI+qX -s/QLV1PZ9CN9gFDRpNfRm1royUnNI+e4/jWgZJ3NFNRb75rwj0s7/CWMa+zl6Tpn -DvQdidGRDz0sehH4q2NInIZJsGYUf2lVmTnHIYQEodric/ocvfgAsn3bLzRphlaa -ZX/mvP001Dia6d3RomeeC90COtvpcsc4S6YNW6UktC91+Qq2aYFZXuHiL1cdTfch -H33/ZiE9a/ZUd7NjXhwQ0hFU4otMgTKR4zD+VgJgJ4O8dRheYmjrP/2x7HRnZoD4 -Jxqoi4joFHRTfl6LRGaF1qYRPwlis2fKFyRT8dBit2/HM5q9DC7C8vSTVbMfitMt -eLH0F81ngOzaKDfN2SJ4LWQ+cM5Uwthlaphr2ceSh9K8FJVKJ0USXKoGand/bN9V -ufT35e8dY8lHupxEPkcEVWXci6tRe7peqLxoH104EWN9vCokEJhU0fgOsEOyAAxb -JDO1ACSOUmuVWLDdTXfk2cl0PKN7Jlop313gvxFP791nm3RhC6wRxOHKdz3sNqRW -Re2u1y4dy1++0WE17BryMWPc6bTf9bbM5poEBBwmBm7vDNgOcFSbDUwbzD+xWUGw -xz5biOHugRcFQFWwYQKB32F5TMzNTEuumkYv06JVdsK2CkVm7DQucp9JZx/le19B -wHy9HELwkD81NPzpw0GJkD7Wlp7BF0fAM5N8Qis22WFBRwHXxzJfpV+0PBDXztPg -8VpFI1YkzMBAAXOMiAEHzHTGoNhpY52ShGws8RUV0FKFhAHRi5MtTWXqqz6zVYrF -hn+Hf8HdjGdYYledSQxnEq5Ls8Y8oXezoiQ1IGWlcTHMoXE+SQkveMtEEKhbGn/H -ecCtjCY6zgAcxMCk0DastYIE0erWYLqus0RDmkeUI2romplogSq7ROyrDEvg0cqd -jVKMJ0ikvIgto9ZU3LkZaZdCh8N6jdjTD/pyX4xFbRMaJKqfeGJ5gViTMsZ9i+aZ diff --git a/cloud/alwatr/soffit-order/env/soffit-order-canary.env b/cloud/alwatr/soffit-order/env/soffit-order-canary.env deleted file mode 100644 index 18e13aa0b..000000000 --- a/cloud/alwatr/soffit-order/env/soffit-order-canary.env +++ /dev/null @@ -1,16 +0,0 @@ -U2FsdGVkX1/8sdZckWFYz3QktFRQ/X/ayhNC++mjop1c6zbTFrVDMPRKiGQiZzy8 -rAOdLN/7w/45xHd2+t8NVYDzCWqjGVWtMemAcbVsvTj01tLkncIrUs9bAAdwjT8w -VkUZtPHguKSrhQyW6AIhh+/OUpvjdd1fer30QVnbq1rOAFzU2uddYOlHGQhqcOyz -/kGEQMg3jEpnyKafImHwcuEv5j3/3NsQaKWxopaf0xFjk+tVwp1YENzO2hqvwumz -27CYCbtWr092DUE71Hx8cRl806aDd2SG3zhi8g6AK5+NhUiyEImUbEsbicwvEHDJ -3PywFWmOCGt9zjG6YDXLa/hO+gpPgVsoZjcXFkhppq5YC8H6IP1lWzR40sLGPmFY -S3ChB3cO90rNSvviSW4ctU1h9hhqUsztMqH6a0N8zettaFvulMwj/L9BveHfD7Dy -S+pvBooI1DQxHBBSD8XYvUEl+cT/HAKDb1PJuAGpuke2XvG6kpO+C32MW2t0Kc38 -V5CoABFfRGWe6UdJR3wnUH6TJh6iw4rgRUuJSrK7n9p31tOnV5i1zBKUjXKJsZfd -QrCjn7fv1SJSdJOSdKGafm0mouNT45yL2h14oWcnt7nKnX10s98TM/9zUwoIXrPi -cqnk3qAbCBehRUAO3cE8jlwLtQuVYLgSLejAuRa0C1i9osmPwJp1lyD7FY7glhfH -k+i/5BFNJaKJ8XE46rj8KJe7VqHVrox/ptwhYVMRgk70leFrwiXH6BFRlsx3ZQAu -38zxkzkw3PGdGGRRkCD0Hbk3xsDNKjG+T6L/vele60GGegaWKFWgt9DTBXoUi198 -0Yx0LVjVEIphnNh8j6j1ryUEpkZi8r8Lj24p6X2mYJYZaTrHDiT9oQD9jrPBHvKl -BX+HlbrXICNiRB5WdmTJgCnZTWzyw8YdFYzh6550JJqkUcFAJnMltt+U5OKVlcNU -cUHOYSiExmjpAUMnq6WwZT33PC5LLxrnpIphoMD3eGM= diff --git a/cloud/alwatr/soffit-order/env/soffit-order.env b/cloud/alwatr/soffit-order/env/soffit-order.env deleted file mode 100644 index b9ec0bcdc..000000000 --- a/cloud/alwatr/soffit-order/env/soffit-order.env +++ /dev/null @@ -1,16 +0,0 @@ -U2FsdGVkX1/g3/j3Bg31K3JLFBoD3h7oUGffpE9FQijMYXomyNVZ1rULV/vNk1/5 -FdRRfNWIn9j9KwhZyfo27tSQYW3o9r18xFBRZiimbO77DJXsDlVvJltoA7LAUaAW -TegeiURFJ8MRwOLMjtb73V3nT1vNvuomVzGxfCoORRXeQyezOQUdooTvJFU+U8XX -fKBVPjFDlsB8twhJq5tlUbnR7nfyLuj/tRQ0z9v1MUEi3R16Ynsf6uiAslXUdajc -l2p/kz0slnJ0Ei/ilA14WKbZl4alV/6+YyzjPyyMqMFIPa8838Cwe/4gQ/rPbi/z -+/54dLOVtYO8r4MmuIroq0cMa652KOw+52EV/xjayF6BJk96Eg7YQFggl/HvSb7V -l0XdepQAoH317ZTzAe0p3JMGqUihs8NgoAO8zAj8mqX178Gfg/x7T5R1OrkYUHq4 -atR8f8bfg8GdOYDZb6ViUC0EqDph7d2HhesBZ8ccu9HkvCgxJ4nJ7+oF7yJH1ndi -OET61rj25wO0+2BQxfKAmYdHH5mswqvjPx2Xe0vMNnfB5KEnzEruLqupx1KTaqGe -voPSHqPPLwSlVCNvA3sxN7qyz2iamrTAsuyibAuxJyGAuptNQSua3dyiz3buzyD2 -PdnKoulMdi6iXTfMynk/OlxJMeC9J71lmvaT5q/mimI9qiI3v4CGRFddmO4LFhvr -FzJlFlzcE6zymUhSEMC3WS9HuSuHRuZNR2vXkqn3sBlrJw5loSkSWqkOZlP/24+H -SDfvkUE2dDGZVW10fJbSZXQ3TG8CW8ovFnjWsvn9jrYu9QD6rLxUELknqFCaRwtI -PTZt4t0vluHO2SbdBlmPA6de366k4sd5xVK2l71+TWs70awwRi842VLMPvNLnlP0 -ILMlGQRb6VahA534v8trYpjuckwB5k6LeU69bJXyiqxAWyieQyaNhMOCD0JUz+eN -VXh7d0SYBchwTYObEVJ/f/cOkN5GdcoAT0+e5kAGexE= diff --git a/cloud/alwatr/soffit-ws/compose.yml b/cloud/alwatr/soffit-ws/compose.yml deleted file mode 100644 index 5b1b177d2..000000000 --- a/cloud/alwatr/soffit-ws/compose.yml +++ /dev/null @@ -1,105 +0,0 @@ -networks: - internal: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - pwa: - image: ${PWA_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - environment: - - NGINX_ACCESS_LOG=${PWA_ACCESS_LOG:-off} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - - storage-server: - image: ${STORAGE_SERVER_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - stop_grace_period: 30s - - restart: unless-stopped - - networks: - internal: - aliases: - - '${appId}-storage-server' - - environment: - - STORAGE_PATH=/storage - - ACCESS_TOKEN=${STORAGE_TOKEN} - - ALWATR_DEBUG=${STORAGE_SERVER_DEBUG:-} - - volumes: - - type: bind - source: ./_data/storage - target: /storage - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - form-registration: - image: ${FORM_REGISTRATION_IMAGE} - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - internal: - alwatr-public-network: - - depends_on: - - storage-server - - environment: - - STORAGE_HOST=${appId}-storage-server - - STORAGE_PORT=80 - - STORAGE_TOKEN=${STORAGE_TOKEN} - - ACCESS_TOKEN=${FORM_REGISTRATION_TOKEN} - - FORM_LIST=${FORM_REGISTRATION_LIST} - - ALWATR_DEBUG=${FORM_REGISTRATION_DEBUG:-} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN}; PathPrefix:/api/v0/form/ - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/alwatr/soffit-ws/deploy.sh b/cloud/alwatr/soffit-ws/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/alwatr/soffit-ws/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/alwatr/soffit-ws/env/soffit-beta.env b/cloud/alwatr/soffit-ws/env/soffit-beta.env deleted file mode 100644 index a99e3360a..000000000 --- a/cloud/alwatr/soffit-ws/env/soffit-beta.env +++ /dev/null @@ -1,14 +0,0 @@ -U2FsdGVkX1/+1JQZfRTYAoEat93HKgq5j3lRPcM+Sa3CyAiWzCotx1vlziSWcQfE -MZpkQ9DRXAmA4FEn/R7lsECA6PL2AYCgY3YvCZH3N/pJwUXGjuZRmW3xYxKHj1LF -4bW40pjgK+LFYP4Ko6Ty94MlWKUhCajHhlhZzwvoCrpIg+S2OFGsywytACqKI3mm -PmcaQlw5+xScYIr0hJQlyj7YP8wtGbJnA/8GcKCWGbmd3zyq31DQwQcLz6ElzkmY -jiquojNtyi1T2RC0ywyjXkG6peqPb/Zxp5fwao4uuYlzw5IrPDy5KvWmi4zeQ/jq -g3q5UHtA+0fwgTd3YQAMgutYbnE04YWOeS4LGhN2cYlpbbdCOM2uif5i9mSvZRCd -knbXvTGIZ/yKGLKPZHbabj9yXSB/6rwf8/O2sxj5Nq9s6DczBfbqj+lPFXKv33Ty -cBjSdZvQr5DCZihPduTFw63HC2Sea2RHCOEEJisV4H8oOkRsaeJMuU8QLGGZRqyJ -ra25lEFVwupRSg+SP7ImROuknS2XzGTQE1IN5+aXR70xvKbUPwa3SZFx1caT8c03 -K8Vp0wKK+gEb7ZUEWj4zg6h4d88oGIr7jBXI2+eRBzK/5onnPpmPdG3U0SY9v8ZQ -iWz1wQvUpTywcqOThhYNx1YGam2a9m2jgoZGFNNro0FSf80FT5eMnUPG+yHWAuru -2wiXQW5jM/uS7s+Qcl6n4QBJDdFDOLpaJyw4Z60GWJxPiP2mNTRTYa00LzALR511 -RF8c0JcdW5AMG3o+MkMRjrN+az0m0O+rrq/3iOqTNqTjqz+ckGgSGqPiwzfSZaDR -mkg3Qh89geXRI2WHrZaRMQ== diff --git a/cloud/alwatr/soffit-ws/env/soffit.env b/cloud/alwatr/soffit-ws/env/soffit.env deleted file mode 100644 index 9a763c705..000000000 --- a/cloud/alwatr/soffit-ws/env/soffit.env +++ /dev/null @@ -1,14 +0,0 @@ -U2FsdGVkX1/qmDZNRuxrYhPsaZNG65ovxnRy0ZvET5RwItsT1A8aneIIuLyGrPWi -809ZfLKW6Fnm3un2+NEdNpT9Hy+13rDy8CsYsGRWSVM1/R35LJVtiMfTmWAQR5U8 -2cHgZ+IECUj1cvFBzBap7CU7GRcD7i2mlq/23Rm3Jbm16NHinpTtbMH/2LVMZc8R -sc6NO6eAoVO6KgdP2wxUzr/CuRHdTBaQzf/XtfPxQLlVHGxDuKkhfx2vsfIGR/cm -6ZeJWEy2Dc/+9ncNLf2bUZvsGqn2EBsgIBWhZxYjytF3H/gbeZG1RsSElvdxXpOR -JEs9KP3YsAASD7myJkqbJKGGPJw5wr7POh1mTrO9z8x6DN0XtzyDmw/t3WGPKThk -bCllDb2c1KgtxcLKb9SzZAGdDqVuD0IDq6EAc45ws0OEMGNWHq4yZN4Mq9zfZkvv -hOnBxIu51Pm/sdw/8uEiXA5XyK3BWmt1Elex6cFPuyvpxrjuhP9ho5khN9sMpOJ9 -ss1DDWMbCoE/HyMSGP3gn/7WamhLmIrWDGdjVsxeq4AODcpuopUfotJfWBuRZWCq -rc+cbn0hiKL8agXZGO05HwAL/QPbcyl/SQRNlEUYSB1wnnbS3iCbYTNTrsYhv5Mz -V6bzA0JNita8aVDCIipxBwrR1pQd7oKtzV51m9XW2/aaHsyDhYc91+zPdHkpazJz -jFstOS0qX5PEmuU9AO/QcdNch+xtkpVVr3Tm2ox88qgMhDckODoMYmisalJynTwr -+zgFbyuvBjUm96ibHf6VXZ+FKNV5AaBWFzO2YL7iwyYAzOA2JSKxOpTraILaYsX2 -75KYg9gfLMCT9neU7Us7QlXoLpmjiUZLGugaMpegoHo= diff --git a/cloud/alwatr/soffit-ws/srv3.env b/cloud/alwatr/soffit-ws/srv3.env deleted file mode 100644 index 5bbc381ca..000000000 --- a/cloud/alwatr/soffit-ws/srv3.env +++ /dev/null @@ -1,8 +0,0 @@ -U2FsdGVkX18aDilE/dMM2d5zl93J4/p8LTycyTIPtA42ytr4v1ZTpYmTedHsq1g7 -f6aNtf08LTSrjUoJHnKrtgZKQMW+sD4tcL/faj4mz9mkjD2Y74z3apQS5QB62rSd -oIIknIKu0+/6YV/1SYIwh1dGH+eo4xb33KS5CktOSCVaV4EHizER92Q+fX4Rn4bV -gmpeWSEMFccf4aTVanlOQmUxIhUBu7o+8wylagUQn9Y4ozyawiocBFMJEhN9TQj6 -c+YPZoejXUPj/+GxtYCQQeXScrZm3BVAbaI/JnlXhzJKKd4vusYKGBF34uWbivmX -oqMa1xbsqVVZhNIrs2JsS30KJRPrshjVOzvdnDfVvGi2Fl5UzMJckd8z1HgzpXKr -klzLCpwI/05cmTJK66tFZ+0v2qFqRGSv6vpEJWGnFX64yLsDupFHCvIOh85wiW1O -sLhkrPTN5pzknKJffJLsv1ImazRSGzQQcXb1u1Qw+cs= diff --git a/cloud/classic/README.md b/cloud/classic/README.md deleted file mode 100644 index 519db4668..000000000 --- a/cloud/classic/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Classical Antique Cloud Services - -Classical antiquity is the period of cloud history before the emergence of CloudNative and the popularity of Kubernetes when we had to manually launch services with Docker. - -These services have been written over the past 12 years, but recently they have been open-sourced for educational purposes. diff --git a/cloud/classic/adminer/README.md b/cloud/classic/adminer/README.md deleted file mode 100644 index 263148af1..000000000 --- a/cloud/classic/adminer/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Adminer Deployment - -Database management tools for PHP developers. - -[Compare to phpMyAdmin](https://www.adminer.org/en/phpmyadmin/) diff --git a/cloud/classic/adminer/compose.yml b/cloud/classic/adminer/compose.yml deleted file mode 100644 index 8c08143ac..000000000 --- a/cloud/classic/adminer/compose.yml +++ /dev/null @@ -1,35 +0,0 @@ -networks: - alwatr-private-network: - name: alwatr-private-network - external: true - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - adminer: - image: ${ADMINER_IMAGE} - - cpu_shares: 256 - mem_limit: 256m - - stop_grace_period: 2s - - restart: unless-stopped - - networks: - - alwatr-private-network - - alwatr-public-network - - environment: - - PHP_MAX_EXECUTION_TIME=600 - - env_file: .env - - labels: - traefik.enable: true - traefik.port: 9000 - traefik.frontend.rule: Host:${DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - traefik.frontend.auth.basic.users: $AUTH diff --git a/cloud/classic/adminer/deploy.sh b/cloud/classic/adminer/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/adminer/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/adminer/env/mci2.env b/cloud/classic/adminer/env/mci2.env deleted file mode 100644 index 26fce7bb4..000000000 --- a/cloud/classic/adminer/env/mci2.env +++ /dev/null @@ -1,8 +0,0 @@ -U2FsdGVkX18EQ+/BmQIx//49DX338PPfp/+dugHZzWru2qG7XFLzXuv9mQkl0OjD -8xkXhpxJichu1oX4nVJUNOEEx0NZCkvutNxP1T6iUkRNAJy9449x7/txI85GYTxD -Jv5sznzn+Aell3cWpCtm4d90dOZxT95dy9kqE/BG73wZ5y0h5vGdb236PWplL0tt -Cxu4CaYO1hyabT9ba0lJclEsGxdbaDE+RilA1MS5zsyaSXgZMovvlH36KdqgeKR7 -skENwlVJpQ4L1bvFO8N+5Ed2Lz5Ap+UNiLO+IJdJRAuG4WpdGHLSwJ7iwNjwVNZ6 -vGzwy7XjE4XyW2LKgmol+zCquYCMk6zw7yfwMcJxRsppHnufZ1mIrwI12bYOQCI+ -S2Q/aP/CMQ7nxwjBKYoZuizws63zrCsqzMQHyE+boY0axiS/l3kfIxhcHoPfhAYB -9oM50OU2yVJGAyj12C9oZw== diff --git a/cloud/classic/adminer/env/srv1.env b/cloud/classic/adminer/env/srv1.env deleted file mode 100644 index 74368b441..000000000 --- a/cloud/classic/adminer/env/srv1.env +++ /dev/null @@ -1,8 +0,0 @@ -U2FsdGVkX18PlJInFKhEKVTzcozF1x8MX8/s+aFan3UsIeEZ8lxrKiOC8kdfnG3N -xC3ptQTNBW3vJSZKn5Y9QTnnI7LKTYP4jKzOdb2VBLWOTTj60MGiRPtHvezNmqLQ -XjUAEfAAxQfSkzvSSB9rgC1+j2dLhZAu6ppsdyWcBA8wpCRY21vHnmxOV/1I93qm -j+AHwQVdx1eiWMGGaxBVBPDWH6P26a9OKRxvhgQ30A3hOVXAi0ZneYxcGlbMlsvO -DypbJQ9ykhlfgDdxxrHH8OPg79cgbES0EPPkJubCjOTVdXtG7nL8flEs6mixKiuO -mMIo6asF4DCSyf8jjhBINf/+rpyqGhVaQlKMaqB13Ra5ejd9JB7bK4SaI7PwZUVh -Jw7tWzymtB3M7tzm1lCRuD3uV7rFhziWCuGtFVj9UUVf0D4DBZMfMTBz43x5MaqK -5iSLp4+sTRcarLZSzZA8RMQvp8DXZLxl2bs0rYKmMyo= diff --git a/cloud/classic/distribution/README.md b/cloud/classic/distribution/README.md deleted file mode 100644 index ef210a857..000000000 --- a/cloud/classic/distribution/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Container Distribution Deployment - -Private container registry. diff --git a/cloud/classic/distribution/compose.yml b/cloud/classic/distribution/compose.yml deleted file mode 100644 index 0178e4c64..000000000 --- a/cloud/classic/distribution/compose.yml +++ /dev/null @@ -1,43 +0,0 @@ -networks: - internal: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - distribution: - image: ${DISTRIBUTION_IMAGE} - - networks: - - alwatr-public-network - - restart: unless-stopped - - cpu_shares: 1024 - mem_limit: ${MEMORY_LIMIT:-256m} - - env_file: .env - - volumes: - - type: bind - source: ./_data/ - target: /var/lib/registry - bind: - create_host_path: true - - # tmpfs: - # - /var/cache - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 5000 - traefik.frontend.rule: Host:${DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https - traefik.frontend.auth.basic.users: ${AUTH} diff --git a/cloud/classic/distribution/deploy.sh b/cloud/classic/distribution/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/distribution/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/distribution/env/example.env b/cloud/classic/distribution/env/example.env deleted file mode 100644 index 2a21801e5..000000000 --- a/cloud/classic/distribution/env/example.env +++ /dev/null @@ -1,7 +0,0 @@ -U2FsdGVkX1/1A+8c6dRQFQ6cq8htH7TjSLkhyB0iMscvMRY/i1A+dlTTe8q/dOad -oeRZo/PVWH1OjXTsH8d2fQX4k+B72YaPRtj24qhKUlNcvOeXsASkmHkZHNRduqqS -xiz1cQbzB5+HRxJT7HB/j+gDBVTshdQQCw9kK/aLuGze0wQxcl6n8WkRLn2/3MWM -H7t8Te+nFec8ATc1k0EPKf+QhVrabhPOTXr8HNUhAkh8wv0+8jfzFsnV1iZTiRT8 -NN/mI5lawSqBat8ixTGbkOvddUaCNYyhbXBp2+AnzM9oF8N99uQSyq9hppv38XSw -GTc3nbDrGJpiH/jPmETcm/Lu3kNzr/Zq5ZT8yrsfJpAjcPhiM7n/hYNJ81VQmuoG -PFXXZVQwJZc2TSqF+PqZDkaiX40kBuJfuPhU/tjovbE= diff --git a/cloud/classic/lib/common.sh b/cloud/classic/lib/common.sh deleted file mode 100755 index 9cc1456ab..000000000 --- a/cloud/classic/lib/common.sh +++ /dev/null @@ -1,82 +0,0 @@ -U2FsdGVkX19OIxCXzW0FBYjviWRxKtExOU6hYn554pHuKxVf19b6WGHvaLonAkFj -VnnOMhkIW/HpCdBhCUPLeNG8h8rHG0n2kPjFOGRBraH1SV5WrTwh/O4VsckTAwbq -PQR1q34Fi5DqpnQXBLs9NSqMtSTzXchR+szjUH8R5hUDnaI5UJAn3RlQQEE7qgTF -peMtdvxjuQFEutPvBcts7Zsp5qq+8GX3U1TyfkNiuZneofCmiGlL4DQU36OoSs2i -iM9BAKgYz6TjUkmOubnLlOAhU6zLiIwFP3wHsYG7tyhH6dmeBX3ToQDkdKmVQtsJ -9g5g60kymSokNkSUYiVhRHxhWdaEhOcjNtPK2hYDOmipjSKk4DxIfnzXQVYc4ixJ -tL1/VUoQwUK9N7ob34eVyqmVg6+hqpY3xjNBYxnKXfnniMDupN7dZoYLrDF6TXag -x3iEr03ItN54IHFKhZ/dcRKQinPtt4ARgXOiZSV2uGOQlbt3Usy+lCw6P/wQH2wM -ok+XkXVPmPZB4v448vBMoVhCgy/F8hvqyiFHilMq8qOvlXx+Ar3+Xq4u0zCZEKTs -42PDgsyqqiVOQA5djbHuO0WSUtLxJs3Xo0yTLZ1y5yhEEnhFNQRoiiws2Z08fSRJ -mRoNiSnG3LOB+mygUquLS8zxKqVvvRSzn6Rj+UOVy827mx0Sqn+dzS0JZUJtQZvx -LUbWafppu8Im7weTFl0ze7Gjs4q/V5PwSBNfuRGvZiq0fBdwJFyQOmnVFzFQ0RxU -MfVSd86/Ihe9K3bLA+fo05oFgtpZjlNYzj/+VdkJ13MdCBILHSxZmLMWcVXVEnhF -lFXFrBw3M0BacjZ6E5jHyDZaRgAAwphk8KkfeB/bMZ2a0t/xnWstBwo57U2cXhhT -iTU3EFOi3WyMTxcS7Us3NyuOKBcaAU/p7GsTx1vcsaapF56wQB4bmCjLej+0FGVR -9pQ8fHSXT7PEnQFCXt3sBnyexDglOp3LpGHY3msnxHFE11HA022jbva2o94N66bg -G1P9DJAkdBrg+5H/fuDEJgLbiu6vyERk1sxdMaykS9V03IKeOZgJncY7p7DoNTYV -t2h385cmUlxmJuPPnUb7YhoDVf6pCNpo0uKdO0RwtSvDnCOCC8GrUzXPvgA+GenH -piS15HGq6qoO54YMEBtjRngEKmFeiI120w3V4EdsBj7NAbdIMtTmpuo2oGuMwdBY -TTN0o/iQ0pFYS6y8Q5XUkxnLRiQ908dUcm0J8laq3Nz+6TTk5rXDS01uRui2OYzA -FTKDa8P5qDIfx/EXHbAr1NnzWtN0SMwcfWJpbdVF7CgHO9vyO+NjyAPuNNEModAb -pJcWDRynnjPwC9raZKQTYQirlHnZhYIpWfhWKeZMOqBi/qWRbjDiJnRBI39dAxOo -d0plKgxqB0dwf4gpbyCQa9Gdr3jiNObclRBcOICdVZYAhAsxe8zU2Elx8P2yVGuB -+8/PkulsQEPy+boNBGho/rrpEvAn6ecTRqjC34/9lW5K4pFmS87O+qdJhXOPWTUD -YwAyYvDW9o9QrHfarG/pIiw40oPHBimA7lzlyKKROD2OwwuqjUdy+tYbKmdSMw8L -PVU1lrdH9brL06TY0onkXZ60Zx5fHX1IHVdYUL/2A1uVB67SVNSvf0Dn8+GEdiw8 -90Cioca3pFC9hcugvzHUSm4nM0gXfPWKUTM/lqa3XJB0eFwcIJrrHCkUBOm2CpnW -SCH4wjyC5hqGzFdTjLlmf7Psn1Ij4ta33uhHsXAg4t6oobKSdqrB0SKXCQ/O/R4j -uuDpBsMdxNdWfcf5UNM9ESvD8KntIIu/trX1ipsPgYXJrGgNmB/ZNT02nxSzyP+G -1Lltg6hFDRGeJarBKLlt2b0FvBwtQZ4HsqjxqfJcli84v14EaRhbmzWJAsdajW5v -k6d+YxidXVzpSb90Y1dxXOhG7hTrIeuWbUWCW7h+Y0BCM5w1f9Oy+fJo82nEzIDw -RAiagQEG5zML7vvMwJCB7Nr0raBqKLTE+G/Y9cig31pFvnDosQCDsof8UmA8Vpsu -XrhraQketgjpcGO2J8GtnDxMa8WJhNaViyiVrLzCqcJ4xwnJTP1h2yf3VOL0A4M3 -Ii4cSzhMVSyGppRrpglSsH3Lost01mcuxEysXV8cYAzEtbsXVCCkuMl0iaPfywPe -mEsIDhU+OowshSPTsTILZCdAlxaY5w7ykYPUN6/iIJymsIB7x5DFxixv3R1QZA84 -xGxoTD1JOpS0qSj8CIURuwaWIDRirbYEIHyKo6ZJSWn2Dl32MyAecW81F0ym7rVu -aFUn4RRz09wvrk53OEuqU0wsDriZHfUOa9b99KpzYR1mn1k/e7ma1+6C2ynoOEK1 -B9EXDBp5Cx1IWM8WVf857LrAMCpr0l+gy9PpJC6KTMFLCr9zs+RDIKdcGsOghrDp -JwF7YKx0KWbbh2o5cRzoeaIQR2xMOdmKMOSNfCBVPBJ/WmZlq23k5oY8MTH44byj -t8P6aRpabYQaxlg4ftMQ52So5LNAlC4QykYgpMaQd+qQDGt6W/td+0mGujmPN19L -pBaQkA5u1E0oxi/QxEPa4onYkqM/+MQwEzMJYhE2Unfz49kcF0SUd+jgL3n5Br1M -SDEEY7i1RB50y8olfafG4auGqS883b3uJpR4fCXqUVZiwR6CLSNINU6/pJs9jL/k -4tdZUwflcAKsRv534Ft5hXOO6k5a12sjZJX7+aQutYLntplKsVRn60QjYSlk9Wsu -6AHN/iXnA1guyYa09HYhNlJ95tr/Dn12AHQvR+Wc7fOjvEUkTsSmWs3CpASXznyQ -VTervgk6QGc8P+NBF01TsOwdDMB735V//x4KxkoZ+XenS6xwVQf5a8YWu+nbAIzU -UaoG0lbLISiMu06A3+WXB1hJQzwtqeeXnKlhNX4z6hTkGwuoibb7qfJ4hNEvJf8j -0zQ6FH3GJf6FMJzPk5L3/PVOr5orS5xwIJAKbluj12mcfNNaBtzMOQwXj0FgRnlc -aBsbp0J0ySGfeIzK4OYR46ZqEaQU/4MzpYiE9FgI79VpTeFltzWqCwTNq8CLSTh9 -f5aEljGdZFlNHerN9wIbsrKEzuI6aMyDFdwtUINkoOe0iNgPrHMGyVnuiflHDW46 -3Gvdmu5R46aw7TJUVjmuWxIdwejQLp0OVqvWg5krb0+vg5R4EJBjO6m4tP9k3HCE -Kvr39Ue2ZYQgg9/4R92KOGV+DOr4YbjHG6He66f2f/jeuxBpjwv2KqM5NXNW/Bta -q+lI9i7An8pCv+4baneORhTrSA0pw5gp+LcNOTglrjI03EWq9qr1gJjHuWzMTl96 -2nEqSv4sBblvS8NSvQuvPhtbwnDmDa/TrVQ6MAyXgEnArithf3F8hIM0KqUjOsQn -tfWnrYo1zMTCqlV/OpuekbbtWLb7qZjI9fgMrouVjGEr3oWLRygxfIJMWZgc9fvv -O/ZBgP5LLbUh0qVQ7yW4Sdvub9LMqTv4smLSKDmc0vUi7HoTta19SmPcQVSwqKUC -XXnGLBQJT8Tu7CDYc9uHV1BDL7MZ0ql++T6lFbtJXTru6OOHtH/5qoUsNJeKy6mM -QI/qZMsVFzXMQ1a7WIa0o0SqjgjC1bWh8Gepvk57A+9q8f0uwTDPPLQeGjE82YUY -2qhDSTD630c8i0u/BmBEVbF6yJu0h55Gwc4PrOoKQ6Au+S9zLGfTj+xcllqNwG2B -aliFfzfrJMKDN6Ud3MGsg3eJVhfRruVxnRrFWqczN5wCYjzkq1vdlkFhngj/d4XJ -9VaMTmckwRG0nMMsue97y1PLQPxDCUlFmV0zy8eNNo378JknohaTgyn12Z46oBtJ -JMKaPNmF2IiiVUAM7MwmibTukBJdZQDhQEld65Lx7KWwAuE5DyrJ5fPhvTQeQVHu -4lTzB1eLFYgI6NkZAa8JWTlBrJ0nspki5oK0nrsn/gSZpoA1oYSPdcP8O7VXCAxC -vMbfC70Jf+poy22nFY9c7yzTMrHzLDkWX9DF3uqOdz4twCNBYsP6eiCb8QWOmgVX -tK0ro7qL6HRPIgV5ooQe3jwf8wECZSgnIfMBAakOM2Apsyqpw521ct/NwZRrvZZi -B7HZBgHjUz9ygzKqn0VraD6JlT9L0EZG8RbeXhiIBW1as2OuAUdjiLymCJUjp+eb -25hMOn3E2kLQssuU94y9yh/XNcLA03eQ2RuYbCDCN0byN2yA06nWkgQrO969iVJg -BAm9608/k6jBAf9aZMRkwknl1UIRQt70/W1HusssD7ksLbP7LuWDGm0MWazFtPmr -sNmiSRqSTynDW7I6iQr6TCKPa6QVRZPHH/IgCc6P8lma/mSgfYaXNWS2ICOT1YzY -Yq9QpMp/Du2E7VBug7C3sHZ/4ANh8AOlYNRthp4JRHjxODTgRgkWf62mHTqEd4Jb -q0RYhmL52+E/FHGeh3tZ/RgVeLJ/vq/++fFC2m5Bm2va18DZEnea5Qt0qdLGvPj4 -6z8kyR/GXpUFhP58mMJKOQ9NdZU1aR1yR/E00pAulcDYGauTEW2zM1kFFct92vRx -+Z1K7IV6dX+j3n1aSuRDuycHQwgU+oARwlpp5Ex1vZ12ebAkxPtRfNo5flSej7Pk -3aDcGrx2S1rR1cNdVLaAJVjWc+SGj5k856ffkfaCnQPjQ9H/p2pqq3LImCNMusG0 -DKPY83XG+IeekfYvP/0tye2Nd1u6jdT09+PJB4A0Jb1SnW27QVxu4agun0+0p9Bo -wZjp8A4T0cCagroLaXt1TjSLoVlBLrXLGmXXomvrzFyCrrxqEF8y4qJFSTuDnC+S -NicnJ8LyICkaIAR8SHRKVqMvRcwcBJseagbLBv+kgvDI0ESvLXbBTipOsEWQPNgV -dl0t0pVrHvy1oaXBQ7ikeO8vntoWcKCVgwoaqSr2i+f7fUuZzWOHWbrEGS0l1AXV -J9ed797pByRlNSyMTnbu3Glq/oIV6ze3s1lUKmEBAmyvKGqstLDRq+kWDkLo37CA -Vs9LmTgOEDCNx0e6iv4Hp5Y89UR0Ohm/tk8JNe4LUteriEcLbLjf81/rhJdcBpdN -T2gqpvPvVuyelPWzN+/O/19Vj5+7AhKISVK8DWrnUHMVunNs49Qt+n7TzbJrwSsp -rJaPFzJXH8YLLAJDXec8YbG1fFJayIJBm6EaNyEGpOJS7qtqauwZBkW6B7Pv1FOz -rZ0X7rXahFBpKffLZdbRR+izkrCjGslq2cA0kaHG5M8= diff --git a/cloud/classic/lib/deploy.sh b/cloud/classic/lib/deploy.sh deleted file mode 100755 index c7c2f2a00..000000000 --- a/cloud/classic/lib/deploy.sh +++ /dev/null @@ -1,91 +0,0 @@ -U2FsdGVkX1+bHHei+nSbv4Z9iLk2MqbNoOWGBTSwZyQkX6e833xcuXzD9D6ITUZv -EHA/WP/un1JTzFUv6h8p4JkEG5BpYelrQ5jIA2Mugsg6Ux3ZkNL9Inj1GjCH5nuO -6O5Py7X+iLI3pAxkm7oWbiLpd+MhFBK7e9fdiSzY320D6f9oX5qdmBMfLuW8Hc/s -KpkAfHzAYS4MTVNRXGLzqZbQpNMruK34lm/VIx4WU/HsPWOudITB7r79BoaPGf+x -/7pGklTdbYL2e0PQtXZASjv29cLypUecTZ1ZDkBoag7wbk52pG6MQ+Ix5jsfboDN -AeT8oCkGhnCHtDUIAHIZ9V8xIepNB8ezgxzqcLjJFK7SGHSdfYALBgeKsaahPbED -0oZHPBcc6V/uU/YHWT68HQjk9C/v1H2z5/fZWBsYd+wiQZi4v8LoH+q1WFYPLQmu -SRd0TG1h6tWCYjGWn+et+TNnypBAZlihjbf6RQSv6Ovo2DTcTVTUzqUzlt0McLK0 -ccm8v9bzFEHlAaK04yQkab8Aifxt2Rzfukf3VmChqD/wQGl/tYi126ierxFKeKtT -Tvmd+NuN6X5Ir5dqUptM4ZslThmocc+5DoxFnuAVZVyUoWP/0XYqW5bJ1jOSbZeX -Jy07V6e57LzHBjEZEl69CJT7JaS66gBUlz2oRC0Xzo/+G5SKjvs+Q5s9iVjcBS21 -bLoNGfGLFdRXMj0TfUOM7od8MyC9hnDzl8sHAkA97e1NuEZxo5lmqWeFGStu45+O -Fmnpzh7ZmFVzKXEEkwpOB+UCk4sr88lAUlyesDZf61mJoXny7E6xSOtVsrncWe3/ -Bi6tVtd4gKjbRRrXTQQgn/82XVW/BkRqK/ggWA5FpnwUstG0d0Lb6Nw1+hGUKx9k -niT47OK8i9pHsXOk10oRdJFD5jkH8o13vPSNq0vxd2JOte2dw1DZEo6pXdMyZ+1N -1FEOjGiYf/y+iFwUkI0tL6hDq7p3mJ2h1R8qZCJ+tYcD5hAR34xS8CehPc3H8uQ4 -YxOYlF0K8vWYk/zsIiQmloMYX8g0Rdh6Uk6MKFHc2R0Zj2trzUCEUq7yMmQ8EvWl -iz6czT5XmLDBtj4ugI5m5xdCcXKQThSR1/h8GjHGpVtaaWIwSnF3cVCj1foyLZLZ -swDYpLnqhSuef0NXzKWmORVzBerZ6kNAU4N2zEu+0ieZFPVYWzrAbrwhuBwVEMl4 -wfraDy4/UdF3zgRwu6rjtV0NDZe/E7GVkF6PzTnpb4B2C08yQFz+uAJasAahNSd9 -ksQY1brlUQViUsFPKERK0wc7jyaazw8ZLvTig3VESSM1mT8tXFfKLlFpsI+izVef -QpjS+a8oIpSEdL5yClva1cbfvHaOg5jhqqEqTs9E9CrMK/KzXHGJi5wTdKbKJnFj -9MWzC+h+dNwYwUw0ri0OSG9ccFwzZyXwrFg0bxIwat0j6EVHmSbGaJ2L4bnFTyoy -wo62Usb3NL0hSBawSCUxVBM26Nc+Ix44W1pugJBX/ZYWIK37c4jqUgnurtECnYhK -tvft5355Gb44wv9oLsqX5zFP02BKqn/umeXbCIoN/Sv/6JkvUXnM2pLejUQV1jSc -r0g8Yg6hYHA6PdYLnmkg+C1QegSUw4f8lGJmN03VtiTCeSYWNAAE9d8e8QwcFYjI -olt0u5Ufi8FnIXTO+T981ASD6fqdI8DiPIVu0r0YnbrV7ahVDpbunLdNYpfr2tEX -c6QcBFy9HTaugfOWYuXP6PBOse6j8NDX/wFkugrhc0FOPQRcTCARvjz1o5+A/+mY -UjsBE6qwjued51gCHP8U+gQyYKkGm4KT9rp6WN6S8erk6buMNsrZfd+3w3K0IgOC -pyRO/sOBkgQ782mTfJNcBi6nbOhI4Lsqgv/pSDCt3ADzeUU4NHXARvWlhCiqZY0h -gSbAjJ2g/tY01EJz5qZDr6xqz/myfzRYECpWx2wGxdUzI1fXtMJ2VFrXKan+e7ha -lHwDVrjHLG+zoecAoGbRPOE86Nw7WRptZxaqsxpiaHY4PLb6XJnHnrvtFMSJ1sLi -0jPegPRUtbfxlkcuHtOLh+PzRo9sxY1B0C2r0JOVRu5mUZuTnn+ey+qO+0bHzFhq -MAI2o2G90DnJkz2l53Si0tnZN9ucULb0itOAdOVLabvPo4FkfI+a1XNdfFZmFF5o -A3lK7E429M5/1PbeL7DQug6XISYo96VvbjDaCXqrTSvixbiB6PJHllaAaC8PS/qH -OKVSSwLmF7eiil5mqVAfUZVPlgQ/ZQYgaJRUY5mXTXvgrcvCdxkK93NaRCPkiByq -axvJwDdm//BZk+AOY0CMXMibGkcchfBjjRG4HvkqsbAOUVXgx8Dqz9SP22KQb9Ee -uQxgDQxoJ8ILk0toq+3Hp2/ve2i+Zl1qcvnKA9kTHwaTROM7b+dCb40FuCtmR5iS -d5cxQw/BCt3KXyLo1gyH2yc0xC0lqJMt/hLARgN0FMScTydZ6LFZjL84eEQRW6iR -T6PtWoknLLMcHYHG6jtSlCbpWZEPeWL2VuWRUyCSBapJ3zZSLyJ45HnGXQhnVi5o -VoPK4WSZjbj8ZlKk3yYwxXPQP1wQKcxY5a5gPw5tGEm5E3iRgk045vAJtzkYw3cG -idIYg1+PB8pJP2SsxYMks8gYsMJUBGu0JxMreVWSLguX8ZAsFIFwpewqDZzWXqF2 -CAIDhJlwXsOfm6z0r1uIES4F8AFjy8nqlWaD587eD3pB6AdqAWbuZwzJk8he5bQF -d8e0Qt4KiJZlfZRf87rDsv5TOXXMtt/ondLNHnSlGYeenyT8hZEJSMxNpGokP+Sd -Pz5fgclPZ3ILLkjhPevznC6/iWzqA7q2VBK4LkzHH0hNc17kUOZHZ6eALg2r7VbO -w1/bilgvL1QC1U66Io0wttNsfM4X1DFA1QX4//fkfcDR1RB7dsWAsY7FGyDI0OGj -t8uUTMiF7B6dbfqi9z78mH/8NneIQuU6/pm1Tppy4DaNWGlcrJYydIHOhcKy9vEF -qPMQ1zMj2klXhk7NNRhy4w0iK2an/ZR/VVu9kh7mZMM5bhH0O+m1L8fbM6TkXHKi -sc1AT/nwbLxdE8HBaR5mrsCOCR6j9LEtf3amvsr/hRekpajpFBQCbaUPdKJIDuSp -b2s0vXmp207xdlZ4h9BNnAVvHZdpIKldwD16jC4AJN8eqvZbxFJ0g7nG864IK2al -l2EJiTJ87k9TJewA6RDjCaf5Omw9nJ8GjvRRFYtg9vdZdizj6qovdg3ft0s0nfVP -NIz2LS1k3UnlY+V/A6T5vtoEMIae2kMAmoAhKsZLv2BDi0D0EKqxcWEDt9aCaEgo -VfrNRg727w40Yz/DZ2Egflc+8mpxgjF4bRHQ7oUsUX8VbKkg4u3RuF2JkTXBW8e/ -ZUgy2IAvoD/UTMinkJunAWPxa8DoTCgRyvkpzcLkcAqAd03F2vSLpQheo62BQ/dj -OPqU4WQHN+wlH5w/nbKuNzwOktgxtPNliqUmR27+fYxrQz/Z55xwVFheM+Klej7f -m9Vzy9QSAbjEzE5Oow368SimsQPnAAyjRbJ2t2+FDnLNECzSJnKUdznJSnSZGEHt -cdD5TiKk4mmtIHG5qOiC0fX00wTwrtlcm9VWg913lharVa6xi6yEkoTOC6s965Ft -GIjSqoeEr3/s8ebRyg0I/5c4DrhQTFsXZNa5bDCkg02qdCxvrMb+VxCCFnqGLSRn -m06zDF16yHNniItl0G3JYC4w9/FaBYPa6ghWuUgQfPg6BL+xPwBYGMoWkh+d0FET -fX+yClWZtcalC1l2oJxHFEaKqrE8iKu5tARqy9asw34flP0kjiTzOh/SnxOaI/mY -l2wisPyM3reRGgN0mv/Va3W2jD52vRvMh1pkezWZ3rAFVn0jKGKXLYE38nHTUofJ -WD2V4ObdP3iS8mkBwVbVQ7Xr4r1D6ZeJIRxf7scoB0pDs7cFoGQ8ZliLL3Xm6ds8 -TxnmDb0gZNbJ2zWOOi2ilmSnX2E80FzOo2drD3K2Qaysk3lYD9u3sv0R3RG04qbm -Zk5qRSo4YbKG46FzgGyAqNEAe9HM+3CyXIgGRgN7Pw6YWvOTun1vzUVfF/I7SA+7 -2N+d6rCSvf1ja6PLy/2nBmytD08bq0btwSUnSZYyF1KsteZc2VJiGKMx9wRKgqR0 -aiP1V4TC+U0aOj6CC6DPb1Uh8ZiBrXch7aCyCZw1Oo1lzWYJwSxzflXtcb89mCOQ -8M/UNffdqbHVIc5YLhQVq9zbGPXLTJp4+DjoLRC62APe/2VKRkeBqyUsoh7Ywc4C -2KC4cyav/tFue5oHNcGXkyzgj7FtRZp/CGuZqll52BQrgq+bmGRP8AEMK/YlwPVx -Htxkhd9ISIOIMcTWwBkWh11aabBYtAnMhLzkoyGvQXQplE5TyBq/ioMWl5f9A1wV -n6k6E/hGXmmmBoQfqciGMaJ81htZkMKmvNxCFeGi1SK2QUXC5eyXpob++AhUbnJA -4QIjIvWkr8GWHvY4ufEc/9IHQFSu61OpwHDHoJlWVPdOrNRUkujUy1rduidqg2I5 -WV41pPxIycVmg2gDEsRnN3FRH21CEZ/ioE96s+Qj9ePtxPqx6z997prI/cQpCWqa -VodoByzbXIL+3stcUGGt+Fy7VRma78mvmFU/s6uVVadbdDqBp8QHHVkJI4y1VhC1 -aP0xnNZgUZqEeOqfFnXGF5GDZ5+Bif6N00DRz7l7/hWZnMDxobR/+qldqwgOFBHJ -HXqYKJtvfsIXWXMVVeEdgDGWSAKGuOQs+E2ke95clSxr/YIQrXzgFFfrJl0K4gOg -L/e/v+V8ZnRHoKLU1S15p5BL+Dgur8If6ZYWfMG8tmWvuxryQXLL1mha4cJugP3M -Pb+MT6TwR0PKQ+O7NTH3Z1Kjs7RU4qhrDgWaU60mVsu5K9AHszsZOVAGmckW5A++ -0ByKhTIAuOqjUU2XlDopWJ1mMs5Q7AJfOrB8SXBL9kq+rEKx6OYRHfzCvb8FpcbU -jBoxb1xZzz5GL78AgM8HNwN4v86nxSgBWKai+Drow6qeKn7Wy1vP98wJzIJ5RzHB -6C/bHJD+OxnhsXklIlDZZoj/JiP+rM/EGQG/reizlxpmF3ARYXe89daPmiDLx/Wp -hXw79qsLklLQkET8JvtvOlA748V2ch4QYBB4XNTalBHmKasEOwyZMxzxtKKB5Rji -neKejduL+e6VnlH7/lgVkyaFphGhlI0IjBEkWoMGq3wO5vIOkUDyk6UIx6ao5VWL -vc09VXrUkNH8l5SknX1b3IanbKo7GtlkjvxMSEFXhk4S2aQoTgIUueGgo78vAvg8 -w/AyhxU4wYneIrFQNSWMVcInJeEL9Fs6fLSin0v956koOLwzch/7WHjL8I99695H -c6kKV6bCrwzczHvVub5djOG/A2rFs35tglR2FSrYnao+/oxA5ki2LBZExRXXq/ii -lJ0BOWYVDUmrR99IQ8PG99H9cXxQNpkONmtwqIEcbzc20M/mjNe+MQaHjbadZ/17 -XpG5/uHj6iRcklRxqLezMtb9jTOEIsIWoZdoYRJv4HbFKkRYQAEdq48LO8aamjaq -ndQrJIYCTdOXMZ60CWSNp88/4yfRWxF7/uFTE4cElKuzNfrN9OZPCSkja+I+Fjg9 -JIPNTNLAFbBakrZBfwQMojJ7MInznUxoOz1w8WBWZw3i971/xamMPqskgqjIYshN -1ISz+ow4aeyKnKUQMfyucFxXc942jSjou9Tda0rSFsKfAzVv82LlqP5xhgMeEJOn -EoW9A9RholxH2NXUpuU6xExEqInxAEWxybP7kpxyopbpr25WSeyVEmntIYAg15fj diff --git a/cloud/classic/lib/logo b/cloud/classic/lib/logo deleted file mode 100644 index 96fa49f24..000000000 --- a/cloud/classic/lib/logo +++ /dev/null @@ -1,22 +0,0 @@ -U2FsdGVkX1+zp7y1sRVrnfLYnFE6LBNvt8cg/2ne9rPmjXfJjC8VTM1vdwbbD6ak -E7bF5GC9qT4iHC5dnsOu9CS91nRP1nXLh7S/gQmnZn2PvLpSohCbv+ldHv//ZjoK -hNQ14mU9bG08vH6OwpSDjv05Yllaufscv/CrkPhXiJxQQ2Hdue2aVNavhq2y7a2n -BYNu415BjkH9maqBbRPqzeUiygOQqe3/Eo64/8EbArwkcmC1ctvN9YJI4WEPqo61 -UgGRHghhYA2EoJEOI7HYLnI6yxBKq/PTLgyrHihIvKAGMqjsuw2qK+1/QxISWqTR -4J/9izXNtMWGejQXK9qOZ4KuRS8iQTT4xV6e8aYRAv8mgqX+GKgYt8gtod4MFt6h -y1TMI2IuUIb9LzE8tUalo8VZunaQL7uUsWgWEP9u8jtTY2UN48OeGD1EDRjJ/ktB -z9doLp6Z+qbnIpgeQykZsMsljJGgLMsHmKWKistIiL+sY3Bs66EkJU9fnMHqotGa -X0L9uygGZHjULWjkpXXxSasyGLN4IFPMeJdLFFL2PIX9jVqddnluuN3PWw/311rh -Aip02ZD47xp6L/3y4MaF8VAMQIFZAF/4F9YwXg10c7qi5lkaRbQkFTRsKV9FS2Gz -Mhn54WZTXrmzXZcN7srbmOfDh1+GDqMa8kJYrnZXH3Gb7okeubPoNSKTk+w9+4SU -xcp1zQSiXsFFBjPyeopPl0aTDZYB6v3Pev5tQksDzhzblU+eh7YvFemv6wojdc49 -otnR16PyMjjc3tuDZpCafndrvXUxXLnFl13/VgWVxlvoENbgqVDOuOGFde4Zz8Lh -FrAC/tDj10pkCOxdGeJaEBcBRpgAIhW0yYRb3SKcYLxTLSV8+eYod/fs7AORTavy -WVfWyrq3Abz2dhcG2+8nx75DC85+rt5AKoajZYAnc5CatBcMIgVFpjbxhr5EbB0z -Z8qefF7Y8WQa5qleUSYvM0tZOoqV9/3o1DEg+uoKjPTBvb2GBuvSmmCUWgkQ2TsW -BvQLLLxzy0Umil+LHVpxQ3WPT79a8YUYxuovWWvVGHB4eBBhrGT3vwSzI+YZ0DU2 -Ve6JuqLf7ovfKNK3I0P6k/765WF3XQUOWXaia1DJxRu1G8Wnov0pUkAJpkt2zz3k -OvTYVkbKuJ3wqtRjvS1TMEz1Ll5+0LM/4wg9BL0SAtyCpXlMK4j5zg80vVHrFp0Z -/3MDTlPR1W83kWphW7YvRYFMgGsT0+mInEQBe6NFvk04RfedY74MGhSiPvI4w6cN -uH5B2bRoplPJqnLy/p5f6D5bRrKthIaQIiUdvDSmdrARWogWWwmGIfLfRK229w91 -dDmqPFvzdgI97JE6r02ysQ== diff --git a/cloud/classic/lib/manage.sh b/cloud/classic/lib/manage.sh deleted file mode 100755 index 91acfde87..000000000 --- a/cloud/classic/lib/manage.sh +++ /dev/null @@ -1,116 +0,0 @@ -U2FsdGVkX19xy2FXRSDKIwQsVRXdea5PIhHT1fI99V1a1nhKVGK8MQ9kN+YUb4GZ -TMp5fCtQMtT6TFM4rcAiOn4ObyNLKG9qSfV3Hn8c07kQNxwbYk757X2mZeKlFyZI -fZ/8JW/fF/GciwVnM0omE809H2f9IjCsFLsaRY0S1joOrDHAe3uasneQ/gw13VPB -hm/DUG/Eq7qlraBuZobVAaFgfGjD4TEQ9JKnEjf3VtHJuJWR6gsSLx6eojPe861G -ezAfmHFUiYT4HSrflfdfeojhd0TPa31MsUdm1kwdFuXRXrdohodnyWbLKaxGI4JD -aHC/iGArM+Z1p6F3fwQNBLoONEw92yhLFHmeDUu3M5VPjrJv2teDcjdU/sszq5R4 -LlNuUtJYNwuqvGJ7wgJa0+ynVeWc/65tqHAsrZNLLXS2bM1Em5GsU7rebRLRZQeO -LzSRgBmrkyyDqvblHHhMHMHbKYGaLxwkog/9OGfkJS5wmZNwzYQjVi7YagMykazD -W1MD1623sVrgaYpn668tKkeJh9p0EUegc2af7Gk0JU8F+RhgOsoeRIrpnt90cbaf -3EWudVYPLh6LFtzgu5oHTRimP8ToCvG+mOa2dITHPtyvRt7e163VFN955r4v1hg6 -r2KMIcsjq80RmiPko6h+DKB4iXw3jw3CslpR+ZV+e4b+ndAuCNW+zDl1Q4OVzzKw -31u9gtDEmYSjXwd8cNR2WHy6eDLZXOAhXQJ68dT8o6hxd1BhpZ/5qRMyrqNNXp/b -Q+hAtreGH3bjEDZaE0oGipfIvRZhn4beRnVKGvlHfveNTaWi7gu6lze7EamKmhuI -gVzOzrvm++evnODPTx3AIupqzmrrmcJN/Ektvyy759wEC22RN9iezLm17yeDOY6p -S7HGvA/q2QBHaVQihw5SuBKTQDoCVJy3ZfD9atEoq7eNlQ3pq6Fx7J5D1/1Qami/ -GJMtRd16EUy6XeNvmv/docbPrr2WG5BEj0e80ctIT6mN9aTfXQXHrxMHOUEvC/IH -jjyCyIMmSOwl6Ba7rF794GTXe9ebWYn6akCkv5LhmnUdFBRlhKJnzSti1OKPO/BL -hu2zrDfsf6P8wrCT/0yXlym1Zc7r4sAR7F3KmxsMSiWBWVgWuXroECAXki5teOGN -fMkuWcN3rkFbmg4SQ0kTP4q14V01jaRSjor3P3aVYwyDDjmCOkJGomuxEfEKzC7A -Md6PKehuuEvG6/Ijc3SLDXiSESq/AG6Po+mrs5JLYedsMEVqsGmmkSV/A2iBfQOv -dlDlhx+zdktqoKRQBW4glAK/lU5xfPr4bmKrVzoOb+o7zmjwQOD9vHwWjdxGOnk7 -OzD8P76N2r+wMPUysstGHc0DZSDY+4KFuia2PlTIjoBqQ2p1LXz5MTn71veZmIKD -ZjpewdhPUntGPwoqksHQrseec9oWVNYWYcDahZSJl5Q0dKvYWtveDMigOSeCaB23 -ylVDmqd5DE8OYlclqCSr2En6apSJbzzxmGufJA/BFPGOZGZzJEvrCqWkgEamlg4B -f2v+S6wjeGnbOWLE7hNDre9s4uFrasdJzGIVaaGNBNCvJTB0PFYgDaa6e2EfDtQI -99eUYhdiQiF/1TEhB3u1vV2qZDgMCtwjG7VYKsJiHoPzFHJI8ySsNsMPdsxCgNIF -/2f1x477R2v2qHkn1MfHSm3esOqP2A0J/JHi+CH1Xn+F8UH/gR3jLgVCze+NbvZI -XOlHL/tfxNwynu10RtRHwn2+uJdVKSQQ8p/uA/EWnk1dRPVsQH9RBVQFOCo+qWfB -EJtcuXMEVIMvRDrq9pL7ecBdwu2sefpNWz1r7Z/Lmzl+3P89PCVm5UBC4b9ckaVM -v0f6go6amzylcy/hR5aUcr7F68YbUwVkoP3ruZwPK30wlOcJi08VIVYcOFJY2XwX -mniesxEDUV5WYGYmJi9XzI/2B1I7AzoXKo7nZTiJ9JORybbSmu6H4pK4gPdKQ/+O -loURssc54aUtKKztXY+c+wFDWtChcoW3fmJ3xMTA3Lva7fynFfgOeT3DIA90gVM7 -NrlCQQ2GQoWJf40HDdvjd+6f2zzk6fdg+pkQLjE5RgMJvzBG/zYDswQf+jvHd5ib -dsWNDf2/S2J0Qxs8a5IkliliLIu3TdqJgn+JlQxt+45c5GrV7OubFQSC6K2bmqcZ -95jf4jyAqRznX3SDSZjHgQAwJAqdD6B67H4o6ys07FvIlDyicrJuAPrq9hlJiGxP -jNAkqAhCgtvn7U3Ys0UHVfb+LFxy/tBacDYYiBmPkD81fVngEa8X5J3OVu30Vz8V -GmR7PX2J+lR7hBBMV/+6xpzC6GWQYnwaBzTuLDPRUYmMjLONj04GOSp1bozXYXVr -R35tmP/b0ELA5BP3+iIZfNS2x59EIgxoOEuXitM2B3jMqtlMD1nP9Q08NrQWnP0j -CyY4CHhe0dW+jzlyvvoyC0MtpxfjTJGhbChAT6471cd725gv7NX/67zEmMsRz3i/ -ZQ+GF7p/2Nv+jcTpJ+qOOJXAS8JwKCCu9G8sRfKXGMadHAhrIR1OsHbYDTt+Gfb2 -4ySfgyx8l43QAk1KZrp+4efccewnC0UZWvyaB5DIUksPihoXlOHUKyBgTX8poMsX -tgOQSRngzARhpfQaLqw75LHkDNi5xqHEQuzfNsOoSb3f6wk1Xv6szyaURePgbQ9F -a2zuM4GOE/X6wmQCcS0O4yQDOGk9vtYn+cDAJJm7aOvLJfqbjwUlw1SsxgkK2TbE -6ZGI2HWlOEM0Ibk/9eohlGaXNvXv1jikIAezXIMyvOwRpFzE7sd39INvD9acYm6U -/YmgC7F98+iyFX/lY2AvGHNJbyostIfYSUqMJ2dC6gSbHjV/O/iXWP6yo0pgyQX+ -Ojc4ta8B0M2T6VlDy9MXlIxaRVsCfCnHeJReJOM5Flbfn/vxMBhOzxI4qjdDOZ7Y -Q7pMxqaDt5NEIvQMT0OhWSV5koxZwgw80xDmGBHmFoFMEf8gD4n98iiezvE1YqOb -PGtzDu0oIHxckKnghBjrw0WBKGkrM++KCTCLoAMkPLJu2LzCrw5TJ3C3gYXP0kwW -MdHeyOARfpoeAu+i7lgroG92Ji1F5xRbhfM2e84LmCB3fmYs0mHevQhXkotG7M59 -JnxqRoPSs2e4DB88qi4DfrAxx7JxGtsdxJOLe8GATh1QEzcqrCGiMiPYnIYpiDe8 -1pSWQ2xNc8AYUIOuDSVgB9zgJOlfN2eSNkZ6R+l0kyp8RmqWlcpqASsTv508U5x0 -D8jUxSk9ThWPAZc2y0OfsOm+f26UpzJaSu2cQXaEzK96HD45m3RiZrzvFPa7PXYX -QdyFYAnP435GetdBLwdbIHg6LpCtzAhOloW2fHqGpYDLq+mIstzWERZsEoZtcyUf -CF1OuvWa/eFPYS3PfKTngQUVuyTwHnat2BxoK28WIz2aujILlEauZUdISUA7ckb9 -yi4AxdPqkpSfRHIbqrnKRWn/jcLKyTlVDFjxPVhwVRd2TKmAKn4my/K9u1kNWZOc -AUzrawbdGC6/zg6Zhis4Rgy9sy3e7iVEy55HWusRfqEVO3kN0kckMG7NyJs7ojEv -4pNj/YjU4xigz6El4JHeR/uany0R8z6qhKqO5rr3EVbXnyvTDU3/dSCx0ThMt/oK -dOlP08nbg7+cOUZ2ROBfB1WtiF9ehrzit2rBLGbz/DK5kJxPfA1+bw02HT8zpbId -QoHCWNxnGryiZJ7GIdWQXU8iKeg2tlmPRPisYGTpFwa48UFJcIEkR+1cATOqAj57 -i9pN5N+o3ddickIMg8135GKeOLRQWNqgZfpxlcEkaeqEZv5Gs3tl0MeWEuGvEiPV -PV//JkUlyY+QHedHjXHMztt2xOlXYdNfFJUusaXmX3qnZ/BTWBfzoQbQWkR9L261 -3rGJM9ISMgMV4COJUW6BI6Cmtf2zJDW64LoNoPlLP+c4ww0oZvS09AEyFExomC+6 -sfksduTge1C37WobiooNig2QhNKI6mD51VdBhTP1MGiUQ7cb9yieyHFQbA+v8MDY -RBN5M3JBfSsBhvZIRaMZNzakgbV04OBTXxh07t8oDSPApujF7UHcE4/X2YVi15hH -5AfDnAzideXrnPeXUzbswcfoY0zM/e13OeQJ/wPcdbtpP+N3n4edZStgGVPBya14 -pfVKi9s0i+miqaubM7MRs0QYQ/L1tv84QvIjcXS5+ceqzRCaY36B36qjAXJ4Wf+r -io/XPrjx74zYf7f2M7Xdc9BAPE+VVHt1Qt4477atY2lcpD9xpFcY0dt26eSpJthS -Qb4MP0x1hLdgd/1niie9GEfPDBNVQdqSIDwY1x0+G0HvAaBD5N3nBYuyyU/L1aRU -/JfgEJN8NyHd9a82dN6up+tDFXlQ/H0Xe82gEksSy0B9R3EylRJpgLLBk/BTc6Ng -8k0wTxI6bBYqAV2LSxTFJh+fKYXk7QtcbKC+oyXpTSG1sWZpgVZT3YTy0gwOgatC -wNUTU/Nw5SFbOiWMBgCRssOEY8R+Slpz3UmILVwF/lMPRD5/7fKuYVXs/tLQdtgL -1/2ThNRSDJNXOqUlbaIBKv95C6xZS4ml98AG8Sd+UmkOpyZ9Z7/XhaevBmPuyZcQ -QHkLePqzUiMlqZxPvaHTiaQGWWbOolBmazxpwhqLinJYhbYSvD8mRcd0+5du8dZd -mgwc+KevXVbFFzze8VmZwZIYW3EFdY8iXfLu77ZllJC4glMMY5GQxoEFi/8WET6Y -ycsIT/91GYUUqff8ygCEkkQDKBj838Q54Q6z9drF/6POaUgR04BK4l77Fr6YZWWl -uyKe5G4ADofbHW1jT/s8SbAySYRZUJgB4aWiBUIixfSKu1lBn6iVCyanWvZ+vop7 -dbYrGgnzLNlX+yLjLZoquBpH9Q4PNXg6yMmn2StG334eraEKvrV7D+FYkYrF9Prt -8qEDqbz287NXKeFAmVEhvb1aolfJMBw4SVvcJK7rJ9tEPExSupb6DveWIE3S+HCv -Xlnx7O6MC90Q0H0IfyhoHursAxRPpfhnY86fGszc1iB48hpXXmIhDRR8G00wAFdH -plSGetuI6Wq2ml+fTHnjtqv86aho4rgX6q0D9WnzGk1hrhGZKAhKhALUU3XYB0mO -Z1lO99CxjLB3x/BwySYcoZngEEUYKVe9g+VBgNN9dvVlknWmiLIP6iy2l83qIBln -UrRqQCBLcjkYYOspB6sajx8w1q9UCPgQRPJoa6YRESZt9Z+YNEvEYMfZj0wSubeR -W5w8ln5d7Xez+moxjQKkAqJcENuBxnajlZfPBGCHAonKrZNP24OPH4DCSwfqq5z+ -dZrJ4J36qhqoB0vmXbIpWodzxSxWxaSyYWdZY6S+mzUMwKdgUj87DKlddTpNJ+B+ -9Y7t8SK6xGVhgdzzzlTt8DwIbfrPy2XX4pi2fLzq4vI8MmYD1RhdDb8evsro7BBO -vDCXfuZcQk4jGeyaXm9KtO4TN1F6DcnY+AtnBj6oPE9neCaypmzZz4+kKJ/zhSw0 -xCBi7vItBd8r5QWJyJQp5yhrcN1U1p46371hAmBq2f7tsg9ZDb+weA5tWW7yXwZK -fEGajASPadvIUvnvGXo59Wj8DneW55wsT0xhgzIIPu7qcnH9vEhDfBN8LBlAPMlK -tlYrwD6AxiFlAyP50SfXf1w06AP+Z3uP0346q0N44OaRhS0UxGO0Av/HyqjcCgB0 -5YNm9d5hScetjzUl/RBzHuTY4ow05Egl/wmNHAcJYEP38+Fi4fr3RkYe3O023XFp -KUWKp0jIZDPQK+pVb7Aqb7thvWAs+YBnjARnuPVdqSAkJlWmD9KuRvaPC+9t6r22 -l1fSYW2U93NcGNxlCkOksS5KVuAhCSm6THCxkuTt8LE2+ecm2OdBUU3dB1Vrq7nA -7tYE9CeTRwsGGgC01ILO+7q84Wt6B5u3JlFFWXF60/JuQEr9/gVys1EUcjvfVrzr -+3tvdl+IIqjZtbuwltgpZm05eR4SMRsAwVywZeNQ+vhlA5n/SowcsuG0WFLExnVh -GO66Tf05UZwsh+t71KmV6RGd6jVxMtTSVArMUJsKOhlPk198ZxBUsXyVOjO8K8js -g5m1nfUeT8tsas+6vfPD+wkDrFbAWvz1nE2gcY2L+NSsdn9m78l0ufMCYk4zE1XH -p5YH66BDMCeGSUeGUxXvq0saSnGtAg7jwv7GmkDUK+pW36HYscKdMZccZSX0/4c3 -ihNvMq1oDZF7xAgriVJ9iGuYUJbjayTZprKQMjXKnmvdB4v2IdH6c4gTqUBwwQmN -PpwFKPJOZQ0e6jpaNzGo62rTkvw0pwsBmb5vRY7W4a1mIrVwxnIMZjs5weHan4dS -vsrFktG756Y9wgWjBTPG1HK6IAS2tN1hnGYUNlYGazD1fX/UizCjhZuF7L4ZcGam -2Ph3NkNTWZGXaoRMUkBnW8Q4VFMtjxKCabPu/jSTkACiaTEHH7am0Cf6M0tfUGpV -vUrZz1zhVgl7e2NrJpNxLHDzCUyAovq645k2AJ19sUGcyfqbblL5EVB65gsY80Yy -D8nz5LlvtsCdeiDS8uDpr/1hNZB4VVAPtelyjzXW3JDPVcuVGc0fOaSQt6EZ0cxj -r25RkmnalTQKBdFSDZb2n1u2p1vvIf+O52n0Ym6sX6CYEIE87KmMpSWFuqQS4UUM -jDDIqJwME2RXVojGOqeKk1Vlsh6K9eK6ziCpv5JStE/O/pWmgSZfYHut0y+pDCa4 -ncHvWZDvJrzEekjcEdPZqVOP5YXpXm1WOEeJfBftIzPPdQl5rxI9T81rma7IMD5J -DnZhYk7M5nzHQqE9A00IgznPMtmpk756jEUA8Nzxf4g1JwAyCsilHQFy/jqn2E+E -oumgDqCnuBiXXzQ56aXqa6nCM67fe4Rg6matF3vf+LlG6DV+/y+HwQJ9fIGucEV1 -FPgoqatsamwkCH5l2W2i+XPY46I7ohPht+n6s7me9UpuvsciDfUK+L04q54QnwUh -E2/mHmTPJVWU4w0WEq3p1TE7ZlVrol5+X8KZXIk9aRmvvOtIqsXfzr3Mu6ckifGY -UoRHVEZxVdI9ISSh5EIeNa7gMpDVuPzFiNzC7IysuDQ4cC/L6mXbwqPL6RwdWZjk -SIs0hLLS/ezFj8Q4Bs7DIezIkmmYFzHXp/EVe+ipBLZTopGQAWhdtZ6aDGi0qUhO -qd5Tlh8Ia5zhLJkhYeH0GfUgMCUKbQik+isffNHlqb4qxZ52+Susak4eKZidf8oN -GkQIwdeWkSJOUUqyEo0aIzbNaDmeo2Tn6u1fGfyMo2k/62IvfNfLpJs4DsxmQZSZ -HSzln0UdwxyjgfeXjkqIwuZ/XkMRc0updYO0urIMf0uSZh9O/zaIGUrFgI2Vei34 -tDTVMebduelT4IFYfGP1tu7Iri6wShJyQdqI9S5SU7RZY+c2Sp5fYw3T5jDW7oP8 diff --git a/cloud/classic/mariadb/README.md b/cloud/classic/mariadb/README.md deleted file mode 100644 index 064b747f7..000000000 --- a/cloud/classic/mariadb/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Mariadb Deployment - -Classic private docker registry. diff --git a/cloud/classic/mariadb/_up.sh b/cloud/classic/mariadb/_up.sh deleted file mode 100755 index 9147396da..000000000 --- a/cloud/classic/mariadb/_up.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -ex - -docker network create alwatr-private-network 2>/dev/null || true - -mysqlPath="/var/lib/mysql" -docker compose stop -time docker compose run --rm --name 'fix-db' --user=root database \ - bash -c "ls -lahF $mysqlPath; chown -R mysql:mysql $mysqlPath; ls -lahF $mysqlPath;" - -docker compose up --detach --remove-orphans # --force-recreate diff --git a/cloud/classic/mariadb/compose.yml b/cloud/classic/mariadb/compose.yml deleted file mode 100644 index ad5ef3b16..000000000 --- a/cloud/classic/mariadb/compose.yml +++ /dev/null @@ -1,38 +0,0 @@ -networks: - alwatr-private-network: - name: alwatr-private-network - external: true - -services: - database: - image: ${MARIADB_IMAGE} - - networks: - alwatr-private-network: - aliases: - - ${MYSQL_HOST:-mariadb} - - cpu_shares: 4096 - mem_limit: ${MEMORY_LIMIT:-4G} - - restart: unless-stopped - - stop_grace_period: 2m - - volumes: - - type: bind - source: ./_data - target: /var/lib/mysql - bind: - create_host_path: true - - tmpfs: - - /tmp - - env_file: .env - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' diff --git a/cloud/classic/mariadb/deploy.sh b/cloud/classic/mariadb/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/mariadb/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/mariadb/env/alwatr-fl.env b/cloud/classic/mariadb/env/alwatr-fl.env deleted file mode 100644 index 4bedb3f22..000000000 --- a/cloud/classic/mariadb/env/alwatr-fl.env +++ /dev/null @@ -1,32 +0,0 @@ -U2FsdGVkX19X40EcXfOsLFTTPZARjmjg8BLfmOmW6HaxCGuugE8hwVzP88orR2BS -rIZ86sMSXGVs/sFee5uInzRhOWXoV1QLIipZ1mRRAeH2QO/3/Ri0RJTPG6MO2fWR -4TxbyiXJOyLZs+z98fdz+gPXK1n4K9HX8lM5aTL8VVK0boMq55+/WHtxW6qjLjkA -rv6h+GGJHz65fvhmpOZFn2OIiuk925/K/Rc6OnISQIBy7tfmeZuVSZGfincSyD/1 -IGlexQ5WeOcI+lzCaIRIhNOINu/vrS1nvdkWPbjCIkmx2WKfZNKso5oPLI25Ri8E -VomNXYZTAx+Z9Id56NflfEsxzyntTSEYVtU+mG/ItZET59HgAxMjXjPs1itNjdla -MfuGiQyJPNDVDHD9h81Y05AyKN8MNE37YDjEQSmbK+MSJUVGc9hvWjCBH12GCuUG -hizt5YZF77nCdKEd62FPm3Et31hwQ5xHU8x3mfvOYlhNFyEpJt7OK4cfOjDF0T2Q -H4O0KeZML2ZFGvHUfHm7MAQ9Vc8Ik973qj8UH9suakzb1o/UOA1LZc3YaqJQRcn/ -QQYl5hq/Oq/KsrmslQiCihvrAVERhOKFTltNoNfdccMtKLGKfyYA7YZF4iB7pIu2 -pCSt3hZULeJerqK8P+dZhHmG8GfQnZVqmNQMvY4IWbXU3IZKg07E4bP0uXUwifi6 -3eR/xcxhQP4v5BY3OHaCj54m75b1rEkVn1hwsdrSCkMhEy/WHj+U/jvhKP+trzlH -xCAz/Y7Ej9lwY2HY1UhlDpQjusN08JwwikitB+PrvLmRTSzgEKu6YV8cXmginpkB -jhcf/kWORfFZr3OA3U//zs2HfqkUbtKx7JWLSV/H4V0txERYebY/ZBFXuMxW/5uK -wDEjg4f9yKiRhPtX4yT6bADSY6s105qnGTG4KgiGFR7dGhm24TKCjLHnwJA4F6Lx -Vlc5EkIkbaZp3ITtNooNKn5xVGWdja4BD/mq9ms66MqYh31lgh0oOFv4NfRB1prH -x8YJqgN0BDJZhKK4vcky8nwlI5yfYljcRNjOFZNTBImRJBzeNeiQKZU4uz9YI5UA -C24fAHGQXnj+4KVW8aze4lfwo5nn/ZENAQEdb7YvSBlFlofg+UwfEoq0Mcel/ewD -aWs+TX4Nd4yThAB523hqqWUh8Rx6lKZC4UDcaiKFtFB69W6kaoDo5on848mrDlZ2 -YesPy/BKjlwMWVYg+83+4gvTjfIvZAIMAwds+g5X5YnanffjEndYjoYL4Lw6Z/Qv -6oV9ffkSOM3odWq5wTNrfSnT94WKJdad+3eHjLyqrCjMwJsgn7hAtAL1uK1AxlRg -qWDfAVmkWC66b6Gr2hSbMw3T3a08PrCLZQ8aZBeAXEiHEIKRLEBIy9aTcuAYDKnH -KOty3TuV10BR1Z1GhQXrjCtr13izmBthz+5727US+nba2n+fDPVka4OquNc/JYSx -JwPoBq8Y6Y/GaOPhveIC9PoJSYYkC6fKJPV//82Oowo3eESwT6OffjpGw8DFiqV/ -AXwtmyOpbXHVyOOFmn4v+N8tosAWZ2DSyA1Q4RCjPtpP8SVMi1dsPZb1qNvFUqRY -2IGHdgf12GoEpU2KchFoT4/WH6NZpdFbeZbq2aln8HPJ06cMn2dg18SHn9YnPS4+ -sWZ/RpuRyt/rgE4DwXzYwdJeGhl+cCLXQJ14QvoE6JYOewAEIdbAa07RXyrhmOzc -ahNnvaLrSJwJjqOreS6CbC2jTpEna+3u+Vbg6hXkvKuoDUWXQeZMvmTEnk1UE4Wl -WQ/kM/caQOiLdOC9sArlVuGuwWugZ0cY3XPET+sARRVq5sl46iOCigzNyFkMMJt5 -9laNclqgltOrGnYhtEI1FxULssuwFB6BO42vH+Li7yqDysGU3QzlKC1tXzv5xvLq -hbXtxGplVnzAUhoIuvUiu1xPfwYaaWQw+UIEGfmNOcKKz/zXd97YzpIH1TZWKUns -KZaX5AhqrsXf2XTFicaOK2nnzheN8ep3+l450AdzR4IShPbSEjY8bIwo+l1VkXcE diff --git a/cloud/classic/mariadb/env/baran.env b/cloud/classic/mariadb/env/baran.env deleted file mode 100644 index 39e5311c2..000000000 --- a/cloud/classic/mariadb/env/baran.env +++ /dev/null @@ -1,36 +0,0 @@ -U2FsdGVkX18DMwfMYTZtY0+gqXe/Eam6MGukx5wSGHBZyVxfyw/vaTM4w5JwvgQK -5LJV15PfalIW3MLPzCTxKOL6Zxl3U2ZNnyJ0xy4XBEUpIWeqO4bK5PPKLYsybARO -JCuYrVpwaKLP2R8qhFbIgWnI7dI43Or5UCuBGJ1REEtXQf4LoiQdWBIFN1E5ztDO -5aneNvWv765cdti5n931BWv6dZi2dlcdxjIIz0gWY2QzaPqbc8pizq0dHC+tT3IY -jCQ1xdJf32WzmBGiiOrNyJvCxIwZI4h3us9e1nMEG3k5p0IgA69VW2gxmozfgWTV -TM+y3qYgnCjh78zXUTLHTwP9DtmnxLhhITLGC+4KXdkTvJ8FVrxpFNYqFDN+lmcs -l+aX5zvh2M/4knxaUIpd/VBakVW0aOHE+LnGgFM6SkuQINsjmalZ3jbUtX6Ffnfs -dBoFOoOMwCcUrfFONF/KCr0ubMfbKThNn+nSKn1QQAy+ga82otnKQSB8p1li3zOG -DaE/sgLT/wQvE+z7KVklMMWTCFW+ebZXLVMx7UVuCccf4weXJ5MW2Wf1j/GsKKHi -LAgY5Yj2ksN7SyM4biV2IiGTXpVlWHQDIjBsSfK5k1/EU0Az1I1s88AsL393h6mL -1BBsOrWRihPuLqfdYwge18roMAkq3dFIBwYeTFW0KMOlCt3yoy0azN7TgLRj+8ii -EOD1bXh/zIuKV/N4d3Pu28KJRVMOJG5+61nHtehy0Bd4LHj32KdavO4z7syDk2Fc -jY4a8CQGgLXqG6vv31RX7ZwkMifPJyq4r6+TDrM4Qg2lytG2H4oimF2l0egwIbDe -7Z+wHXRMONEZR/TlWedlX9UN2C75sNiUZ4+oN1R9vIXIfCkQmk/AdMnv3ISULJ3c -QxmH2+9Iyq724k2nqNg6vHNdLAMcYh0mR7mTCTeEfEu+MFxbiRYf5hvQjHeB6gH5 -OZABlychoMPIVRM+hKVZ2FY82U46OHpgVWwHaHcjjev6aWbWZu5qFy/OYzQik9PM -+G3PqqlufMBnQunRLWK5O2S7Ybc75n0e+KLHyRLopcu+zlYotbHAzwqbx/Zobdbp -4vhbcaWBRDZyWlgdisFRjzERrf79/NM71VePIAyhzCo/CTFYIkfvP816tqng38Br -kYlC8dY1QyUKpzvZzsZjLFN0KZTydPuqSNYUS0fWBCwdFMTY9YOY+svWT3xCEy1L -iFzLKeAJWwlr3tHewPWlO+cP/QqW9ob48YKY4sOfkytMrBdNMh3YY+WidEihjS2T -k3/T2yifZLIrmBmf6Xw29WXfm5Bs50ecfrbrY5+EDsDehgZHZgUaOWj6wlfVW8dL -HsMQaa5BW0NiAcoH53DktORIo+cUgvJqSLnO8Inrx+UqtSNE5e7WWcg5zr63d0/F -rMKgKnIBXRKVDHLOUPPdja9ByoyFZvEEjTON4fCR4yRD5EiKRg1i1VVpASSfiZHQ -6YqwSRH3AwlRvvuSFoZHmoOqIlL6WnE8ixvOHpM0DuLVE0im3pRTt+htQafaUtT3 -W05+sXrODAWJurlSsLKXqVBiWl/AMZk09aZnT07+XQeMnC17/vsT5Vp4Yycrh0CW -z8W0gW1V8+xTiUbrS/Z+AcMX3aPfA/S9jqs+qyaz4d/rwkgMJg24AN6CUzfFnixe -p+FcsBNwX/5JIvqd73WUBnHsMeAah5rbNk6WhoRhuFpcdIhnZmIFB5vX0oXfetP2 -taLyqtLl2gfbE74UP/x8s9SeP0no1qUST2Sk5GmRSBp6knxcRkqXcKgjnf3onfOy -hEbGnPcA8poAaOM6mf3cvhHAaaHy5DYfzdMSyROmJjkWK3DT+A+IdJAR/wrkLJSa -7WXpqWMQkqC+CgPHy6O2tm+IRd1sIpdMy6C59LXnuyBZGUcGfQCqRYmihQUzUqZz -XWn8P7IpCgdT9X3lR80wl03UU+FODFCo+DfL7gCtG1rTnVM+YeZrWCdTL9GXqH6p -+tXXLkzJvEJZEfw0IBwK8+ut1E90OR5Dn90BZnyFPQM/VS0So/XC8JJCsiau7gwl -fGS52ogsfErMlhTjKcqoQPUA6nhhhCPI6qArUjsaguZk2kvWoab+zbJSNMq5OI/h -1tT48z0vm1XYkZ8o7OqPL0DNDW2VyMAk361scAuzvzRMAJITJKqkdb6htYq75VoY -OdmmgAQtkIu5mOqvl6YJSSyD6RrBNnD0o6iM4jG/VPwylMDlK4ogfAtrv6S1XK2+ -+SaeoY1smSkH6j2zBKG8XA== diff --git a/cloud/classic/mariadb/env/example.env b/cloud/classic/mariadb/env/example.env deleted file mode 100644 index c9a4694b5..000000000 --- a/cloud/classic/mariadb/env/example.env +++ /dev/null @@ -1,31 +0,0 @@ -U2FsdGVkX1+sYEm49fesfyba6TPDj4qj1e+p2JCo15sIVjaYmR2H4qEch+4hRW4c -hs5MaTstSCeRe+7wkXAxfLduVrzHaX0ofa9XlgODpHJvOjTizdYNzhyAuSTHInJr -aYJIuVB1j+64ynGHN6ZDEPJsSKFcL66/CYNgBny5L0vKn/vqboMsbuFllVvA3tNQ -zT/1VtGWYykPW7Mh8kErt/CzfYUog352xmk1NEi3EyHqBvXfshIRV+m5SPF3L7Yq -i0P5X5pacz1JyA9W0SxzVOev8VVym8LlxN5kFQNn1O5dw+DZaivyDRAuZYBa5eIa -NC+OxmWuggscpHuBJ5sYeDLE1f8N4dfk++EvD+NdVmP3KVoPtwmwH77nd8ziMGQy -uxvX5vI5nm1UeE7AH4SbG8Xv6or2j2AeD7DC5k9CKx9oMnzW8CCrqFidbfHuu9+y -jSM2cKOGezYmuuqaCdemrdLLcl2DkeFjWCab4uNbnWTr/+AxVBfQAlbGMn/yjnZM -P4GFK397qDyT6NL/PrKNvBgr/KVOQFv5DoYB035ejlWGNiIj4b+aV0glD7+WSEwF -E6nePMpKB4zHIWO8/jn73FAehIGEMNlh9/K1W0Z44bz+VTva4meF4vT6a8H7tzlg -4yqrEwmDNkzLh7S8w1rQOVw4btC+pbtoJ717g4UN4VERqsGcxaGOf7n0P4IysZcN -E+3zJgh0MCCk7u/FespnOryMWs1qwR2ldBjJxeqNuURCPrCXo3dgvtLXttp8ssLB -YdbJZRcGc6SJ8M+36iTwZnNxdu44sVFx9q+aaQOTIK8ByNwvrjHt1W0fXab2eQLz -wZdFJczZTaK2SAdGigVMx2gUAheyM2LC1CY3esRTvlDAoGJDvrq/diQ66bbxZnwn -6ybaLvo0NZgTCqndYdrhfBQ2WyZnM2e4x7ABd2+QYTWrFowQ1flLe5aCFa+8bGbG -PJiZHIg9vb6Zp59jQCxom9PRx2Sw5726/IXj1YmE7EU1ZWp3A2/fyuB4JVVVkvDl -0HgU9a1KvhSYLWBn4WnY3sl5T00T1RR9CHto9FLtEiCTmEzpN+Qo9t9QZmtHOZ0/ -330FXW5MA8SbpHgbBVjW0rck/coElGL/D39fzurHNFgQLwzY40kHOW9Eb7p7GPCr -Z6uCn2TNyx6w3+UDUPp1aAFaFdhkxwIohBafJ0iJUeP1pjIdCHl9U0PXfR8CEGRi -xUlf0g9LMircNuN/ipaWhZAOObtOQ7TWqN2rYzT8/WUSbxJ3qq/dul2O0jBK768R -I+y5n/I1Jfi5NOCAxPh3ybGiWjGhjg9TUe2MkohhHbXF+nFYrieH1YhUXzKB7qfI -kUrKzbYpKavUL6Uh+7UMdxh++chH/wAuvNHyfZnnjvdEEcIzHB4eUewGbfWar0aI -IR0IjS8Wg4HLuYeTM3hnH8KcJJrrj7KIEqF0P3MuJ+umptD5hqH4x9BEqnMCaM5M -be/VYuBw5cfNlrRMX7wHJ0Vs9BM5+YiCadZVogvGS3qws6P256+/yOCKHjs+9Mv6 -BBmB6PCDsXR9vnSB4Xt+/nY9mzeCcbJ84mdtaS9Mv8LGoTyfHADt8d1VvLVQ9Pp2 -YQAoUfl9uHt2i/G8fdGWiQ6zhOYaOlKrCagDkIjXZS87hcDEwKsv5MLarSeK9Xo6 -stljWjTUg06iZXHjuFKwxM2AB9+Opzv2WbVKa1dWyH3Dg9F2nwsnA/KJCKJQp+3V -TET/B5ViiKGmh0aDbFysd20mIvnRpkalprAT2+lYSFrcQTKqMo6JQrmhI8HLihoc -AptrKnJ6MQJX4XZUAXP2K0PoocWR7CXFLkL46tfIBx5C8E7t2A22G/jO9uTLYe+e -Nse0C4quKokqEzA+TPpz6iE/tvdjeowd1A9h956Mcxb4Sg84rP8o7tPgtSjrU58f -MxXP0aSw9laIunUFBPO4OfLd6KKH9l9g14PxmRDQslA= diff --git a/cloud/classic/mariadb/env/mci1.env b/cloud/classic/mariadb/env/mci1.env deleted file mode 100644 index 2a8d0f6b9..000000000 --- a/cloud/classic/mariadb/env/mci1.env +++ /dev/null @@ -1,33 +0,0 @@ -U2FsdGVkX18BRaJa9k6D0BhcrIZ+wvD+yG7ZXKXmbiDf8moqIlyREYn/SpOOQoHK -0nIG83XyigzcwESBmb+UPKHAv6/j9fsNIHp8ouAaOvZeJB0QYGQx8Gzl9HojQh9P -p6kxItxd8nb4FSHwMG/W+xBddqvNLUXHePuJAtugKV5P0ZYateYfEtKxUDj39Js2 -bdHtsGLDRIhZ7d+ZJYp6xC6s9DIMaOBXkvdF+eNeTM8kvMJCs83S9XS3d5BkDIV8 -k+vwGle5dBEbfh/1oBp8tvO1Y22QfQGzmPXvk+oMVKB10m1Cl/YmZT6qt2+ThRFe -Gqwhk5OwvIdnRDMxlWiQhRBpDOE3MUdtySuXJFXfKJkaPmRj7q2SDdxDxUMI0gIC -h7dzA8laM/z7jkVmoK1YAhitNyoSJwFduJ2dybC05NHoHaBb1a78h/SR258btNG5 -g989ZU6uTDLwgpfkv3vWPUiqomSvTvASN7Wo/FDnpmGptY4pFLN/xjJPGp8ArBov -wbDOHqw6NK+SA0/OnV7gDZrnKJ8bpukkZanmmj2Rptp6n9zzq7qvo5a9T+WOAisk -/PlW9gme2+OPfjV4WVzr0mnYFBtnJplfVclWG7SHV9u3za6lOwwMCfTbcYsesBqB -i5Zn2mXqcpr6lz1YAakKuMIcO/qj5hF0j6Ua/nMocPWKt9EGuoAd0Dnzks+YQ2KU -3UPQzDAa4zKyGK2udV8iP5Bpr5IZw9J5QiYZmhtucRW0SutjhghfXqp7nOHiovrj -2Ld9GI04B7zw5O2seRbhY8JZS/iPgiI+R1Wdn+KgdC6Qa7CD+RZBUzxz17qnj1ns -YEm1o28SHKH7Q7huRsPyXq4FIc1MsW9uh5nUOdRcY1JH7CThV5Bu8ZhZCOSkT8sc -LE65jSk21Nkz05dXtjuk/TP+ijrw5RvfRX/jiVIadKERvg3qtQKD081k9mHwgK4v -CvSgYGmWtviCljxeyFRMlIwZM3TUKlt/mTi2Fp91s6Gsdz+aXzowxjKaZeMLIlPh -Km01a3EmGx+m9CAZ+rKNqztFz7XU+/IJqQUF4beySHuy/5w+/BZpUuQ3/+EyeCVR -7Ne1Nsdlr82RWY2vjHMkguGKjaxrxh58lGRxrvJxWXw7OBQTH1ldSKxuoyjJZdeW -UHXbRRJGibbGvLpMFxxqaJop+8AVZY0QyoDH59ylkb4d+6U2kz/hniCutB2k7N4p -C14qbzTTOZ31NYdY2PV7JS0WUhwBZXiwQVOdosRtNCWteP4HpacI6aotsIffCXaO -4DVC0zLdI2Llbr8pqHPnJU3QZwB6S+PNVtslPFR5iRkmJ8wzHtvLZ9bTaD0I36O7 -ZQAR/c3LvWgwwdSJ52k4odjna1xNJOhJjivWkUSo2Ky17VGlpPOSRvxwlA7HkK19 -GA/aUY3S6G+lXdCHFAXBSckmRgRDRezuLbEEBuatFmqBQaBKXqxdPqTIlRUdcXQc -vzQsrQVud+YvChYpWsJ0DUuDM/jYKZcW9yqSsNeLLGYcI8iUXJ1yfzT1SeZUKnZb -O31HyVdVHCu0WxCnjajdUicr2BnozXvGbMmbeaKZd/uMMArDHqvEQ0FV1gwakeuY -ANfzQJHSaWYAH6OwLBDnsRv+WA7KVJDm8hdLrwWvWObS+f7LNSps4PkrkPBVXpWG -8Xi2LrMNzLFPXSUAPnjjWhvjE23XuUW8eHC5qegb+E5/Oui8qDCEU78PK7/WqPXe -AlmfFAfM3LFV9rPad6oCHrVB/JcMISnCTOphC6N+fTmSdcZI6PfYWc7qtPzkLTJd -NXu8reJVyx43Nqt8xIWe+KQSZaC0SFhGBoRnLYiypwJwd1WacDQQ8Qd5L1VxJkBr -xJ62Msl6Jy6octOrZZ6f01UppoG9H/OAiGCAqJJG+9qNnhi1XVRPBgjLfGlELfRk -4Xt2ql1PwhSuFc49aQIKZMUzphL4opu2W+JpVMLu/X5h6M43E59bpKC9aiFhyzRO -F0XA2ipI3yhYQUiiGX0iRIE2j+NWYYrxE+PjyoRv8yKLuzxcsvSA2p976Jbfw8PC -3vmi6WWu7IXx65WRv1paF8jzrWPX8K2YxAUe7kgpo5s= diff --git a/cloud/classic/nocodb/compose.yml b/cloud/classic/nocodb/compose.yml deleted file mode 100644 index 9a77e1165..000000000 --- a/cloud/classic/nocodb/compose.yml +++ /dev/null @@ -1,44 +0,0 @@ -networks: - alwatr-private-network: - name: alwatr-private-network - external: true - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - nocodb: - image: ${NOCODB_IMAGE} - - cpu_shares: 1024 - mem_limit: 300m - - stop_grace_period: 5s - - restart: unless-stopped - - networks: - - alwatr-private-network - - alwatr-public-network - - env_file: .env - - volumes: - - type: bind - source: ./_data - target: /usr/app/data - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 8080 - traefik.frontend.rule: Host:${DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/classic/nocodb/deploy.sh b/cloud/classic/nocodb/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/nocodb/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/nocodb/env/alwatr-table.env b/cloud/classic/nocodb/env/alwatr-table.env deleted file mode 100644 index 6df9bd4da..000000000 --- a/cloud/classic/nocodb/env/alwatr-table.env +++ /dev/null @@ -1,7 +0,0 @@ -U2FsdGVkX1+FRdZN89OLFZU2X7L102LgwzRISNmtVZy/R0QrmgCgjwfqR94RFXpz -5jXviZG3rMm4nVRd9Cw/yZb3EntlQ99b/V7kQkOseH/azsdHUTZOdyWK/bsGV7rJ -Fk1qkDn+Ozk2hOr6f+yByE4uZllyjg0yKzyvomzngKlcW0TrVc1EPbouuBaeb2m9 -LRcH8z48e78komQzBJ9cjciipy2D7zssNOntqgqPhgQojfxbM4P7y5p+mwCMHLgj -oxU+bufr3PzO4O3tItL1+FBQyAyz4J/CoBal3bzt5BxilIdECrQ77kjJGIrSe+74 -9iNVH0XU48c32vk6Cf9FRwNDqwKW5nbnvIiW03AUiyrXn0U1qXHFAJqkB1aJODO3 -zdcZdNbUmPzYZwP8upQdyA== diff --git a/cloud/classic/php-apache/README.md b/cloud/classic/php-apache/README.md deleted file mode 100644 index a908e2c1a..000000000 --- a/cloud/classic/php-apache/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr PHP Apache Deployment - -Supper Classic PHP Container With Apache. - -**PLEASE ALWAYS USE PHP WITH NGINX IN FPM MODE.** diff --git a/cloud/classic/php-apache/_up.sh b/cloud/classic/php-apache/_up.sh deleted file mode 100755 index feb3e5cdf..000000000 --- a/cloud/classic/php-apache/_up.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -ex - -docker compose up --detach --remove-orphans --force-recreate - -time docker compose exec --index 1 --user root php "fix-permission.sh" || true diff --git a/cloud/classic/php-apache/compose.yml b/cloud/classic/php-apache/compose.yml deleted file mode 100644 index 50c0da82a..000000000 --- a/cloud/classic/php-apache/compose.yml +++ /dev/null @@ -1,53 +0,0 @@ -networks: - alwatr-private-network: - name: alwatr-private-network - external: true - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - php-apache: - build: - context: ./php - args: - - PHP_IMAGE=${PHP_IMAGE} - - APT_INSTALL=${APT_INSTALL:-} - - PHP_EXT_INSTALL=${PHP_EXT_INSTALL:-} - - APACHE_MODULE=${APACHE_MODULE:-} - - SOURCEGUARDIAN_LOADER=${SOURCEGUARDIAN_LOADER:-0} - - IONCUBE_LOADER=${IONCUBE_LOADER:-0} - - networks: - - alwatr-public-network - - alwatr-private-network - - restart: unless-stopped - - cpu_shares: 1024 - mem_limit: ${MEMORY_LIMIT:-256m} - - volumes: - - type: bind - source: ./_data/ - target: /var/www/html/ - bind: - create_host_path: true - - tmpfs: - - /tmp - - env_file: .env - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/classic/php-apache/deploy.sh b/cloud/classic/php-apache/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/php-apache/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/php-apache/env/example.env b/cloud/classic/php-apache/env/example.env deleted file mode 100644 index dbcdbb095..000000000 --- a/cloud/classic/php-apache/env/example.env +++ /dev/null @@ -1,12 +0,0 @@ -U2FsdGVkX1+3ZSPGGW548RekqIs6HTEaKsQKStssq2qFekQaDPSYZ10s5IUWZ0SS -+IHrgqNSysdHp4dIVsfFqfj+F618fQBcQTKGerDK21Px4JoSxqebWxCUnd+87oCU -l0QNjRMq1Uco2nXdr6CKIJEsu21XFhuv3Jv3jmM6Z4/CB00YBRh3IZJshATll0wf -O/JjAUHnDROEmpvz0VlD4iD8Kj/WRWPf8E/usUbtAmQtdEKKNBvzUCFDKjZRzNyg -rBXxSxQLnodJg5GWxISMyaQ/l9B4eJkl/gclg2P4NMVKzajk3RLUKnud0DPEmHgQ -byPgGjVY5aH0/McGcPxspJDYXFHa5oIw//lk7rE0GqOtIOsaFTNuxVd0JFpLtVUX -mWTDtgMvKYbmTEj4B/Qvqy8T45QI/pAoVbCEig4Qd8yCMLP+bC6+jnjW9so2rDaF -5xjRP7gbupK1tZtIaxqySXBLh4bHbTZbhC0q4vx3oZLXpYkgkZ7XvZ4KmZnqaWlW -EK8MQnC6vC9EKeKa6A10JKjrxE7k+6PwjR780RehLhnegT24fyDboQ06aZwHA5KO -c5FS2WUUfJCgIXFC7Y7SQonNFVuwzLknNcySBWP9Y5zwWg7iEfmw3sLwP25BusD9 -Akcynp5A/932Frve8FAwIaQZSx52oVc/7ulPEJRNdIt+WWoxsyDkIqAdm2kuCQIF -v0R2zknaizo5aYbrO6P2Cw== diff --git a/cloud/classic/php-apache/php/.dockerignore b/cloud/classic/php-apache/php/.dockerignore deleted file mode 100644 index cddacd6c5..000000000 --- a/cloud/classic/php-apache/php/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!php.conf.ini -!fix-permission.sh diff --git a/cloud/classic/php-apache/php/Dockerfile b/cloud/classic/php-apache/php/Dockerfile deleted file mode 100644 index 1822eb4cc..000000000 --- a/cloud/classic/php-apache/php/Dockerfile +++ /dev/null @@ -1,73 +0,0 @@ -ARG PHP_IMAGE=ghcr.io/alimd/php:8.2-apache -FROM $PHP_IMAGE - -WORKDIR /var/www/html -EXPOSE 80 - -COPY php.conf.ini $PHP_INI_DIR/conf.d/ -COPY fix-permission.sh /usr/local/bin/ -RUN chmod +x /usr/local/bin/fix-permission.sh - -ARG APT_INSTALL -RUN set -ex; \ - if [ -z "$APT_INSTALL" ]; then \ - echo "Skip apt packages: $APT_INSTALL"; \ - else \ - echo "Installing apt packages"; \ - apt-get update -y; \ - apt-get install -y --no-install-recommends $APT_INSTALL; \ - apt-get autoremove -y; \ - apt-get clean -y; \ - rm -rfv /var/lib/apt/lists/*; \ - fi -ARG PHP_EXT_INSTALL -RUN set -ex; \ - if [ -z "$PHP_EXT_INSTALL" ]; then \ - echo "Skip php extensions"; \ - else \ - echo "Installing php extensions: $PHP_EXT_INSTALL"; \ - docker-php-ext-install $PHP_EXT_INSTALL; \ - fi - -ARG APACHE_MODULE -RUN set -ex; \ - if [ -z "$APACHE_MODULE" ]; then \ - echo "Skip apache modules"; \ - else \ - echo "Installing apache modules: $APACHE_MODULE"; \ - a2enmod $APACHE_MODULE; \ - fi - -ARG SOURCEGUARDIAN_LOADER=0 -RUN set -ex; \ - if [ "$SOURCEGUARDIAN_LOADER" != "1" ]; then \ - echo "Skip sourceguardian loader"; \ - else \ - echo "Installing sourceguardian loader"; \ - PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \ - PHP_EXT_DIR=$(php -i | grep '^extension_dir =' | cut -d' ' -f3); \ - mkdir -p /tmp/sourceguardian; \ - cd /tmp/sourceguardian; \ - curl -sSLO https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.tar.gz; \ - tar xzf loaders.linux-x86_64.tar.gz; \ - mv ixed.${PHP_VERSION}.lin "$PHP_EXT_DIR/sourceguardian.so"; \ - echo "extension=sourceguardian.so" > $PHP_INI_DIR/conf.d/15-sourceguardian.ini; \ - rm -rf /tmp/sourceguardian; \ - fi - -ARG IONCUBE_LOADER=0 -RUN set -ex; \ - if [ "$IONCUBE_LOADER" != "1" ]; then \ - echo "Skip ioncube loader"; \ - else \ - echo "Installing ioncube loader"; \ - PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \ - PHP_EXT_DIR=$(php -i | grep '^extension_dir =' | cut -d' ' -f3); \ - mkdir -p /tmp/ioncube; \ - cd /tmp/ioncube; \ - curl -sSLO http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz; \ - tar xzf ioncube_loaders_lin_x86-64.tar.gz; \ - mv ioncube/ioncube_loader_lin_${PHP_VERSION}.so "$PHP_EXT_DIR/ioncube.so"; \ - echo "zend_extension=ioncube.so" > $PHP_INI_DIR/conf.d/16-ioncube.ini; \ - rm -rf /tmp/ioncube; \ - fi diff --git a/cloud/classic/php-apache/php/fix-permission.sh b/cloud/classic/php-apache/php/fix-permission.sh deleted file mode 100755 index 02fd6177d..000000000 --- a/cloud/classic/php-apache/php/fix-permission.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -set -ex - -if [ "${SKIP_FIX_PERMISSIONS:-0}" = "1" ] -then - echo "Skip fix permissions" - exit 0 -fi - -data=/var/www/html/ -ls -lahF $data -chown www-data:www-data -R $data -find $data -type d -exec chmod 755 {} \; -find $data -type f -exec chmod 644 {} \; -ls -lahF $data diff --git a/cloud/classic/php-apache/php/php.conf.ini b/cloud/classic/php-apache/php/php.conf.ini deleted file mode 100644 index 288966442..000000000 --- a/cloud/classic/php-apache/php/php.conf.ini +++ /dev/null @@ -1,21 +0,0 @@ -# Override by WP -error_reporting = E_ALL & ~E_NOTICE - -# Override by WP -display_errors = Off - -log_errors = On -; error_log = /dev/stderr - -memory_limit = 256M -# https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP -# WordPress will automatically check if PHP has been allocated less memory than the entered value before utilizing this function. For example, if PHP has been allocated 64MB, there is no need to set this value to 64M as WordPress will automatically use all 64MB if need be. - -upload_max_filesize = 100M -post_max_size = 100M - -# http://www.php.net/manual/en/info.configuration.php#ini.max-input-time -max_input_time = 600 -max_input_vars = 3000 -# after uplaod compreled max_input_time clock is stopped, max_execution_time clock started -max_execution_time = 120 diff --git a/cloud/classic/prepare-node/config/apt-source-list b/cloud/classic/prepare-node/config/apt-source-list deleted file mode 100644 index 41e2e60f7..000000000 --- a/cloud/classic/prepare-node/config/apt-source-list +++ /dev/null @@ -1,6 +0,0 @@ -# OFFICIAL DEBIAN REPOS - -deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware -deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware -deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware - diff --git a/cloud/classic/prepare-node/config/fl/net.conf b/cloud/classic/prepare-node/config/fl/net.conf deleted file mode 100644 index 0b59d8052..000000000 --- a/cloud/classic/prepare-node/config/fl/net.conf +++ /dev/null @@ -1,19 +0,0 @@ -# Do not include interfaces.d directory by default -# source /etc/network/interfaces.d/* - -auto lo -iface lo inet loopback - -auto eth0 -# iface eth0 inet dhcp -iface eth0 inet static - address 95.217.15.28 - netmask 255.255.255.255 - gateway 172.31.1.1 - dns-nameservers 185.12.64.1 8.8.8.8 - -# control-alias eth0 -# iface eth0 inet6 static -# address 2a01:4f9:c010:c892::1/64 -# dns-nameservers 2a01:4ff:ff00::add:1 2a01:4ff:ff00::add:2 -# gateway fe80::1 diff --git a/cloud/classic/prepare-node/config/fl/resolv.conf b/cloud/classic/prepare-node/config/fl/resolv.conf deleted file mode 100644 index 9d3cdbb31..000000000 --- a/cloud/classic/prepare-node/config/fl/resolv.conf +++ /dev/null @@ -1,4 +0,0 @@ -nameserver 185.12.64.1 -nameserver 8.8.8.8 -nameserver 2a01:4ff:ff00::add:2 -nameserver 2a01:4ff:ff00::add:1 diff --git a/cloud/classic/prepare-node/config/mci1/net.conf b/cloud/classic/prepare-node/config/mci1/net.conf deleted file mode 100644 index 273bd057a..000000000 --- a/cloud/classic/prepare-node/config/mci1/net.conf +++ /dev/null @@ -1,9 +0,0 @@ -auto lo -iface lo inet loopback - -auto ens192 -iface ens192 inet static - address 185.173.107.203 - netmask 255.255.255.0 - gateway 185.173.107.1 - # dns-nameservers 172.29.0.100 172.29.2.100 1.1.1.1 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/mci1/resolv.conf b/cloud/classic/prepare-node/config/mci1/resolv.conf deleted file mode 100644 index 85cbdbe99..000000000 --- a/cloud/classic/prepare-node/config/mci1/resolv.conf +++ /dev/null @@ -1,15 +0,0 @@ -# host iran -# nameserver 172.29.2.100 -# nameserver 172.29.0.100 - -# shekan -# nameserver 178.22.122.100 -# nameserver 185.51.200.2 - -# electrotm -# nameserver 78.157.42.101 -# nameserver 78.157.42.100 - -# global -nameserver 1.1.1.1 -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/mci2/net.conf b/cloud/classic/prepare-node/config/mci2/net.conf deleted file mode 100644 index f8614af5d..000000000 --- a/cloud/classic/prepare-node/config/mci2/net.conf +++ /dev/null @@ -1,9 +0,0 @@ -auto lo -iface lo inet loopback - -auto ens192 -iface ens192 inet static - address 95.81.93.170 - netmask 255.255.255.0 - gateway 95.81.93.1 - # dns-nameservers 172.29.0.100 172.29.2.100 1.1.1.1 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/mci2/resolv.conf b/cloud/classic/prepare-node/config/mci2/resolv.conf deleted file mode 100644 index 85cbdbe99..000000000 --- a/cloud/classic/prepare-node/config/mci2/resolv.conf +++ /dev/null @@ -1,15 +0,0 @@ -# host iran -# nameserver 172.29.2.100 -# nameserver 172.29.0.100 - -# shekan -# nameserver 178.22.122.100 -# nameserver 185.51.200.2 - -# electrotm -# nameserver 78.157.42.101 -# nameserver 78.157.42.100 - -# global -nameserver 1.1.1.1 -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/onix1/resolv.conf b/cloud/classic/prepare-node/config/onix1/resolv.conf deleted file mode 100644 index 4912c3e0e..000000000 --- a/cloud/classic/prepare-node/config/onix1/resolv.conf +++ /dev/null @@ -1,15 +0,0 @@ -# host iran -nameserver 172.29.2.100 -nameserver 172.29.0.100 - -# shekan -# nameserver 178.22.122.100 -# nameserver 185.51.200.2 - -# electrotm -# nameserver 78.157.42.101 -# nameserver 78.157.42.100 - -# global -nameserver 1.1.1.1 -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/onix1/ssh-auth b/cloud/classic/prepare-node/config/onix1/ssh-auth deleted file mode 100644 index 00e4f91b7..000000000 --- a/cloud/classic/prepare-node/config/onix1/ssh-auth +++ /dev/null @@ -1,47 +0,0 @@ -U2FsdGVkX1/P3jnGLN9i+Irkl84pIWU5xIoDZ+8svu08nhtNkumay7bjxTGLCn4R -e1UJoLV0GYTDTsLlBiadhAdQsAIIUM+NUTXShi0R2u8KHp0RM5M9ysEueXUZ8q+6 -rSAKbZ3/ZvM48/Aa1UMb8bJ/YNbThJ2+PfTGIale97P+NAvnU1jyvEgZBpUh3cLr -BKV2DCPIVGAq46IURCjZgm1Spjs8/YUBeWSNteK3X260pDT7TOAjQmuk0N2pqMx2 -f1VrEJnRIVpApwvIraMEv0HZT+332g0UJKAU0Fezr0cmYZdRQptaoqGaiRQqWSge -fxTU+DZSJadmlmgxDfDA5p2F6CEA9NDNrkPuPI+qAu2RI7J1HNhsDGfEjXlWIJZZ -drnVJhgCV+teKB36Uc0DIm0xJzVSM9E/Hvhb35BsYmUa1YNE7dVBMyU7io9hAfio -tgBELIAvw8oRmGPbEl2bpCvVkcQP69FFISmHOnUIgY/E5UACBCUYldmvz/yhegT8 -jWGWjVXZAtOdINgrqAfSQilkQ7P5Wr/kHLPh+vZwDdrW1+9lDdlTJ8sQFNr14PMl -M82jVpEqL3ISPswSHGUF/tNtPJ7hPQzCH6+XnMDdoHuVeC4vuOxHOYVCzOVq4jy4 -HiGKyWqUc0oGTv+KWbenF/n8MdFNc80R3CCWCeS2Tck0X668bQSsDNj+H/2SMl5u -COuRz6F/PuiOcB8K8h7BXttDlfAY4/QBiiX4i7K82px5vFghNT3ctYklxMJNIP5B -quI95odXGS+BlkrXuSepP677SV86d68doqMQBep8aTU8SZSFjvdfg/WTPqp+jLsl -zE5YV1qkRpblHl19hTH+3V8Zy5zlUVV/50GF+FYUi70JD9jFWCDazeZQdxTIWY2f -hVBq1uLx/7Jp5DZ76Aah+9BqakDY7XvKigs3ZNfO9NsY/A0C+EyxHoIph8gXm6M1 -lzOxUVSMhlUsDBjsKOaMSLLbFwjNcP/kknT1DKuag5M7JOFs2yE1a98r6F8LXXVm -9YkCSKfipFkLF9EDdHOxTv7f97s70d14xwmsaw49DlwU9eGBzOn0zrEK1x7sMZWp -hezND1CfbI6dq8BY1SxAxEYh2YGkvJVsvFpwD+d3KsZYe0J0XYwQJKlWZ633ZpoN -bJLY5r2nwsB6ropOxGGoZZa6uTguOLZH8uplkZjs3gYbyEeKefG8XcsGcSaFAHG2 -VE53pqx9hMD74/wVgtRuvo2ZEt+pSk89yV2bxa/fQ2hokFtj1F0s2P+EHTKh8QB+ -Picc/mcURKNzHebKbOOsr32Xed5KgAuhj5U0XX3aSkbsbvr4QGSq8yZ9YE+Z+Wcw -Ju9FkONHWsQ2u982LtS8GxwdsN5JETR+z44lGz8qZ5ZiguwZE1k5A0Y9jeUJbBx1 -prBC5FfcYnD2qOods/RrgzQM4/nz1e4hnTiOJhYzBGCCMNzZX1jS12zCZgxB4D2J -ahW8H2nBmIgS9NHHkwaWBUFTxi5h97M/1IbuPEFtRWzvFYqGT8WY0+2BkeLxFmGN -Zi0XQzdWin0KmW3IzBqRIT9yctP4yaGqMAq1pSUrGveuuz/mWl1MSy3z0dFPl3fW -xMSWYI0PMR8ztrfBd12veiC8D6eXwJEY212T8coUHvFtb8VYFgOac8GSFgf0o/cB -bDdvSE4VXsPB11sR0U1J1wtyR3l5E1eoovANDarUABmM35ayQ9PTc6ovyB/LHGdo -PoNPRYXUw43RK/rW6OCz/nOnhn1fhbr4VU2JMpVXcE+CDsvM0RCXugcv+p9d7jfv -+XJNsnPL9IcYCJ5wXeC6E2l2qzvrgo55A4jsLZM9ylatgeZ9E1YtZ1w8LAFDL7NO -gpip4KomX0ZlSxJNvDO0YU99iWRthzX00fWfp1dnKTcHGzhM/xPVVCCwoJCK/WN+ -xtJQb2jlAyQ1JtMn8VyhNIaLPnX43rkw9Z63NulIJO+SuEzrQ9yTUQ6Q6t+DJdoh -8T9uNHOzVdVGi5jMWVI208n+/vFI3VZsQTm43QiNtkJzbQDPHKX2kUb0IHKhvjSy -eWIU8ipqEAMWohdvXTJXhdGhRuaEESV4ZXFVZI0DKSzECKT3hLAnPyVTznMYppPD -p3GD8YTukn6lx8WZGcbN9nnL4QfQbumAWYvvw12bcMc6g6VOO0l9rpbKQCdZEJJJ -ZldILD5KpdfyKZIJgQpFKJbiXA91OWDM6yI7iVsyo5pwo6ZYsO9VFbYPw88cDZpT -1TBTN0o3JWhI7k7KPE73qvDSjRjU7CY6B0U04J7AmLVN2TfhJNofeBFhrtIcQRUl -0E/cpj95dpb8zRQEoVfhlZ00iALmizWRVvl19Gv6x+ESVnwxgI45XNIcy3SKH8L6 -kt/jD//ujSr385yNEhGRQvG1TkVqNUvj98411qIgj0V3UuHck2BGb3pHVBu1+hJC -Q051FwAaxnXVJZ+6ZYszBhoFR1woTsS1Nj6vO6Fp2Vya0P+26a+Bw8ammZYbmrRa -W2L4jbKA0PDPgHyLSeDFzu6TLnVlUqKUo0SApp3dZtIM+hYhb9+HES2vDK+HPVQG -+eaqUxQIaMRCsS9rxl9tHIZaDQ5mxXgndrjNwpd6dkA77Zf/e9WF6DtdIG1T4J98 -lBu5mCiek5EaOEFkSQMpWp4ZJEOFt+KqyrL6wxhhVZfEY9j5gqxw5vhdASul3xYS -NQPqbodTPk5pIaZt3ooJu6LUk4GVEDNFsSEwsW3v6tZu4UiEBjARtQsYlQxUp5i9 -9kRZVKONo3rTImQilNMHqM4cUsDv+o+shRHzzM+UhNmOqVoHZuGiWAvo+iiNFXqf -iUBd9W6ajuw93HGU01kYHnYveG22Nm9aSKNqU1YoAaLPZ8KFWVrNjh6kKf6K9Zdg -/hDJjcuGr7D0X9IgkIdAg6APe4YXUMJrbdd2x8J9cszRTJzVHXmWr90Emn/hCJ8x -eYsIdNuGgduytQrOpKtBQOSVzrjreBdCOWV57ras4ovN2Ww4DvMDOGk31u5W+fys diff --git a/cloud/classic/prepare-node/config/pazh-fl/ssh-auth b/cloud/classic/prepare-node/config/pazh-fl/ssh-auth deleted file mode 100644 index 372c41b29..000000000 --- a/cloud/classic/prepare-node/config/pazh-fl/ssh-auth +++ /dev/null @@ -1,44 +0,0 @@ -U2FsdGVkX1+Q502ihhKIgbrA9HV+14lOV6AAhc/ySK/7XXgI1+Mwz52yNyXndrvz -lgT4/g59V8+yZ0s3d6/p992ho5x7KKum1e9qktAvIH03ZmErv7kbIIgxvL/1JmOD -chkHfpUzxjPDHCAzg3wP4UWIlVP0u5nMj2x4EYZIxFvgKacUvSCH2iB+9IF0EXEr -HGS8sZ5OPjODxbTCUjcSBerSfOvclKkJXa0msNvMJpJr4vua7EvUtFlQcSwCFG5Z -PuW0Pa9g8X4lLUtQAcuASNFFh7HPtMjuI6vmklUMlfqrWEYlwmI+wNcrAuueiY2l -wCWEhYGFqcblwGMZavOWAW3wilZ4cnBUoMlPA1z1CV9KZ1BhuugBX2+pLiozMjRG -TS2XNdfE5SUiaXmvVLYzbA1x7i+mCi9aRr2Q2BioVLEuUhERDOVCX2quI1jdi9Zq -NlFWGEVzCo3NSJ6XAoZE4nywF6IgM54FJ8Rd2K+M9MR8ksYd5tGKFXvYOgvJI+6c -OnGiCbo3bstGu6TYu3j5A/qm1Z6n92kUcAUcO6wH1tRU6h/SFdMwjGOmRSgsjXMO -HPlauNObW4m73kwBSm4E6f/guou1rTQjtOgYAVN80qTDp2E7DwdEn4v/Ddc6n5vC -A8uCgxzW0MU8vG0vjnNQ62x5Ktl7unloPGVFgnGToldd0SMpP5BV5zOZ61TnjBeZ -4OJjoPkWHC6Gs7A0iqZQIxiFSZac5WCflyep7v7RvK4Tqt5RDawWmq7cmd6w/8Bf -I373G/tPm0Z5vbm7b4loKq7AYEA1aiRf86vK6XqpMBf5HPPuY6JPb9kjldJivzj0 -6Nt58bHwZHjnVm7yYFUCDiuVOF8Fx5gHKdFIeMz/h5rx7NnR7+caq9M3TGL7jPtl -gL/O4CvQogjFpfekliDaaRyTL29kKk6SrYmzVquRHpcfzGADoP0YQUoJkwG80gZn -F49WAXg3lcy1NQnHrrDfGPmrsWLAnl8VKowbdKsZgpyo4AQTPTAmvEQQQPLXdLgP -XdJ3J3+nPDzb5GeKP/4gPz+QLiOfWIcCXJNZLG9J6rlrzi523hHQu6TxsGGu6uIZ -jDykRFiEl3ehuZvtnYbmSrzLZInIrEatTC+EilH47XOOkftWMbKhDS5K1iI60nM/ -l78lXPm28644d6o509F+9LPltUDVvH0BCC0PelTVcYs2nhh0XRFF13uNlkAnh6zk -DbDea40+YyYoLBAKJo81qLLVPrcgp2BAwtJWzBuBVEvSIrv+3yIZpaC1rHYl6nt7 -jYbt0cWHLkB6IqL8HBiu74f23+oX7WB0OH3hiQ1pAHNPtVarZFr/P2EQEG8nsgua -e+g3+e2hgAgjiOwRfGVtPP5ew0uxz/pxBQ/xHK9O9cO4R1R5h1WSAbaVlFdU38H+ -jIJ5foN40KqVKyRNNbD7IoKxcRmdwSNd3QiosA6r5oizLWnbHPaB0qaajJLXA0IQ -uPczOr8ai5AWxWo0IO0/0cFrjO5GHBdtn34PvcH/YHS+R7msMKwyeTtFsJ+wn1A5 -2b/EAJIZQKttmLnf4L7PX9WlwmWFIabG9ip1KHfsm81aIDb65NdSDh8C0hsAu5H8 -ESwTcLAmLswe8o7L7ZKByOBEQsAlPu3G9/In9qNsajUgBEOai1UgQzBpS0EjTQWt -1hB76bkYYYPR+exDkfRD9LFUkccVEKVW//eC7/QZy+HCNuSE6M8T4yw3+kuFa0pf -NdCfdOcFFWLKE+h+tbJFEgX/3aX6LkCWqkPvamVthdGDmJhYKPcQwzFmn/UHpEQz -JYQ0nD5XCMBWlMB3gc4hStUV6Z1mTnqxX2gd1XjE6uISxVyBuiMCFmHFsaN56Oiq -m2rFkOxpKvtlBl18wLRpLocLBiq4kB/koalISQcy7kqZv0IQxeLfMBsOjQBQdlTJ -NDLkS/7YuFq4uTfLdmqWfWcWmvt/aT9ExRXgAFToXf2X3UkGZTT1wShdgmPX0RYZ -AomKQLKpOAEJvngKNOgefUMOA79AHrNi57YAvIJ2Ruh5JdXBOwR1airzO30nmbAA -UOfnBI0jkTwQ8hvmzsX2LaiOZvyVOt1vlomAEbtxlJkPk2MFJ1o1azA4hKpDr9E3 -nFMlpLjL89X1TceLRmmjBwhuWxNx7/ZJn9OvEjsa9AovjPvRCVnCjnAEG6bN79YH -76Oz7/R4j37/H7bC2T4Gehod3hsFMVXUfaXr7IiscTXe7RuHcXiHIisDGuph+h01 -M3IZxBpSJ0UxjM02HkTjj1agQMZF5pwx3gSbmaTSZXUWYoSssAPLjgM5zkFU3xub -Oet/hoDyRuh8I/PETq1KjVtXn/UE7aKI/FXvJwN2vSBJHcuFHy0JHIwgyjakRL8t -Hzre1ke1Hgdpy/xVinp4u+8DvhXntXfPbgKvxH2rv5g0u1EcjxrbyG+8+qnO8hf/ -o8kk4nCxRVox3UZcYjQT0uiTSPG0yv8vJSqyVxtfxMVoFkRYXgwMcIuUzQhzfiAb -nKtQ5uj6bKXMB3ijbMNr4hEePmTYgniedw1oVn0exMpkoK3d0FFh9QU2x9RWxWDe -rVuN1reufqcvBN1NSsHM4jwTdJhwbNcJVv8WhRAeS2AkqG2dLp/wE82hsJQZrGyl -f6HVOg+oB0fSXPuBVfls315h1RgSxWNQc0P/7gr5UyRmWMGEYlFjOIEMcslfDOzg -bj5fcFO0qsJ6a7UXm8OkkPc6F8sYeDNXCpl6cOYH61w1fovtBb+LRVuShKVEcE5S -+fRxkYUH7icYdShCQJESow== diff --git a/cloud/classic/prepare-node/config/pazh-ir/resolv.conf b/cloud/classic/prepare-node/config/pazh-ir/resolv.conf deleted file mode 100644 index 6b94f6ff5..000000000 --- a/cloud/classic/prepare-node/config/pazh-ir/resolv.conf +++ /dev/null @@ -1,3 +0,0 @@ -nameserver 172.29.0.100 -nameserver 172.29.2.100 -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/pazh-ir/ssh-auth b/cloud/classic/prepare-node/config/pazh-ir/ssh-auth deleted file mode 100644 index ec2465c99..000000000 --- a/cloud/classic/prepare-node/config/pazh-ir/ssh-auth +++ /dev/null @@ -1,44 +0,0 @@ -U2FsdGVkX18T1zSbdAeBRPaSinILiUn9HXxooODykiB0gaz5NXrlpaGHiZaAqZ4p -abHIABRcYHVWw77+E4sLmRgYPig12B5YlhkK9qb9PzXq0osh8H8Y5u5gB0CnY7dy -flWJkWvu8RfrMSkZ7WDrHiXaGlkq0tgLaYx7kHoGmykPseHImg5lPSuFxuW4fGDv -lQAVl5GQZlJAPzPC/NF7xxI/JXrVH3zYtJCCO9awREatOc5wdcmmJI2ZWFIECht5 -2G3QY5vLUiPMV4ldpYeK7xveop4pz7w9QhyLpm2PTc7ux/NLvK/4ou5OYrUpd7vM -Cklj+1y/OUJKb9Qpm7wA32okFi7BIHcbIcHz495VjrC66W3b3/7/Jzt73VhCibGI -Uf3wyDbZAKd9JHAZuj9yuCsop32TXrx7BxgJOQ4BalS9hH5kUQFIFoD9KVa05wsP -UuuZn2fwRBMnVqf5H7BfyZ3GQzPBkK0eYMFw4hgvfwtSs+K3IkK+qJhWhiyt58t2 -owykm826e4zo/bXrYCXur8/4+z+dvRp8Zj9tkC2N8ZlkeU3tVS8pXpw2KwTVTz8N -OHAeBkCtltbr5QZBmTQheM4NDJ/nwojFl6OD193beKRe3nN767431ngHtSzUpi8n -wjqOo1123bGJtIEnh+nlWm+2N5p10r1CuVceodv6YZQlitUJBhE7q7rls6M4EfR8 -N8JoYyzvr5nsl/eCdxfPds7lgQO771qgk4FQJfIRu+SLILGQc7fH/gVaYz6TKsJw -jXc/S3up1WWVqogWQaQMvPLUPkYFdRY2+A9rmu5hIRPihweoIJOk9azleqm/G1U5 -UPrp4Fc34orZ2KhIwXe7DiilaEKvzdJXPElXFAYKSMrCMFQDXRzWnTMZuHpNCjz+ -vq6goo2/DarMSMaoUHgKzMgamkqG+E7NLpYXH5K/ZgMVTyQzRVuw+12gXyOp7HfN -Nz4os0J+gzI/4juhO4LMagzK+ev38qeKhrLLQ6Uk1AqQJwIXcINqvSdyLKP52zKx -LjRtjypol6lLMKd4zcGBrOCjKZr0nGKBw4yG5WW0PM/i4OKfZPzfbrO02UpCrwVY -oJUXARDNNS0GQ8W9eeE+uzaXHrqJDyvGEJ4Zt1HK6IAOyxKK0wFyUkQu8/WVUx/T -jZ2TxQEMw1kksKD+jMGD+wfoqs8aIhZccrb2+X4xKrwBBfKPTqvkZpydV6Pi5WqY -mzWjT3DV0mhrrtcD+fL3UWn+964eVrfyN6T5hRi5ohXMlwJU8DBk9QsAs498c4k5 -wvqhUUWmJCv27hR6tDmEHkJYrrnHdEV8FtF5oO3AsVXd7h7M3xsU49wseH2h5LQt -Uvpzw8yAjBeclmNg/FjXMCPB+6u5Qeuxh1ceUuKpk/CeajwnFABPgoCwbiLmIrUd -DdsU3H8KkByhQxJc1dhyGTuciW7sKnkgczKFVRFZsn+SzB25AuQEF1fB2a7g4/6U -E0Xlug8bgtcStrtZXYb7Ii1Nt18EtNRwc70AZmi1eY+uh5XIK8HOQdhQfta1i9DW -lap643QFmeTd57ffGAX4HaVYIAGGVndVodb2i8mVgoMpI+EJs32SDmHqDq60tGQ/ -upT7xG4lILuDrLms2ZW71141hhjbLiFnEbE993uceJR+0+VwmB9LYVOSeNpZOPJb -5P0IW2FBM02b39oHfMFt+Rvcc3e45nfc22vNHqlPxQ3aCDnNW6qo/I3GGGfNFhio -J1RU8mCg5xuf6rg9CXc2YQcyWHvHkohA4V4/Q0yHzw52itL1ZvR9IwwzFO4OezSC -YiKp70TOLuBMDkqJBDfN8FzuFbnx0ssALWmVrxEAr/4q6Lrqb6OyivoPeqMagduM -8F1jzZTTh76mY29+O9JzHdGLY+8rZ/EYr1IFBMhaZPAyRF+9xD9Nbz4verjrw2GL -dNr56qKVLVnnTLwNo7+wj4PNWd7g6uxYh0wb8BHoIFOk603EiIEQIjqcv+kOxH/S -2O+T3Nze67IWEJFdTfFTo8Wbk6h73lOJkDE9KT/yvzWLRZAp+6V4Er1Arm0Xoadd -uJCQ4as12Kt92yysm4FWoDfBmn3/B4Yj5gBJycg3eG0XXiTfXzykWW1EN2ObhSyD -OLwB3/kBDtp7y27D2PuYgXh1gDxyZLunmHIV0FR1DNctt693m/IQz65dkh4qnp+H -x/tC/SWCke9tjVlUVMxau19K1Wquu9zDReDGlFjm284Rhymv7w9qgG/umtSJ9Xnz -sp50wRv08+uaG13g3+/H13QVncz5/OO1R52djpRSLbfURvA3yaFlmuvRX6Qynw7k -T8xfpeq6h90bh7u0BOzZZAj8nl2X0ABNvEANS1I5VPJ48o1+sKu2Z7I1S3Hlslkf -um3xNhzS1QUdE9fjmIhJxHBkmbMMKSb/bWyhG3hnHsRsgE1gJ+1AMmYYMN59zoX7 -I+pdGRYwboXBhtejlKh5xZ6rstWFr/2jwqbYNEQiuqOqdCVadxBA3eopoerhaQsJ -bFzZ0EAIpKdRQluQe/gMla7DL5AsA+xTQ5NZArUYHuoZFhym6Bm6YAIk7XtmmurA -yAz3Rl4i6ADgQNKCSOl9LKdZugx/oYxxkh9PJCyj3jGmXhATrwCfNGVtl7X4UT5s -gY6xLGnnt1RrEci6XWHW7VX3PoS4oj8lF12lz4sMpIly3k2UHk+qjfqEevbAqr64 -CWOGrvpNaXBUPa/ewlkJWeuE8V+7sTLoEbT4BLTQYMyUOn0PM8Jo9hjEegfT+gCi -QFERD9JPsmPt7joTWwH0fg== diff --git a/cloud/classic/prepare-node/config/pazh-us/resolv.conf b/cloud/classic/prepare-node/config/pazh-us/resolv.conf deleted file mode 100644 index 9f91dec22..000000000 --- a/cloud/classic/prepare-node/config/pazh-us/resolv.conf +++ /dev/null @@ -1,3 +0,0 @@ -nameserver 2a01:4ff:ff00::add:2 -nameserver 2a01:4ff:ff00::add:1 -nameserver 185.12.64.1 diff --git a/cloud/classic/prepare-node/config/pazh-us/ssh-auth b/cloud/classic/prepare-node/config/pazh-us/ssh-auth deleted file mode 100644 index b39545302..000000000 --- a/cloud/classic/prepare-node/config/pazh-us/ssh-auth +++ /dev/null @@ -1,44 +0,0 @@ -U2FsdGVkX19oyTTOlW+AnWuaFoxZj2VtVUCfeLkc+8V4L95Ddh5bjEuFwjWuRDlD -v2sJaLqxjQAhb1E/ZfkqfC8Qs6QV/Rf8fYpLdEZm959+3edT7OzyjrnzOGFNtXbf -/rA7Jhl9rpTcJLsbVFqr7WM11vticsHJKZTc5XQF5IlLlSLcu6oAU/VoheCdM9GI -X57HY2ueO//3QOjx+UoVFL0/kDlSCZhfQAhwL8LcChofUbJbbqAnqcy6EQMnG1Hi -tQaylqvdPWxaomENtt9ZBudgrkV4rCiH6Puu0+shcnoPGCGYdUDxgCAIM7u1Yp+p -8v2TcY3Z4JiKpf64GFoTUhN3CdjMn7K5ZZfpC38v3t/kiTfCBR37xf+B/bvjpAGr -lDYj61zXdkPrAeJlyyJmcSG2hfxAiYueZHzebV8bz0NZSgdhmLwoLb1JqE0kWJEP -H0KsfZ7b0WJ6f04aG4W5FPDCL0Lor/v7Ek70xcGGIEnWG0ZUdtxPQGFw7Logt3XW -HCIgU6wZIe9OvuzGOAj1qrqQYmkhdKSc7ffB/JE01R8m43I1cT8pa2EoG9wlSxqv -lBZ5xyr3Bcm9fUikfj5al/2NeOdAtzG4uHF1wU7XwsIfm3mMg+gGY09yvWQ6sWPB -mvA1Ra6MneuWEFDsbDQD0+TmhvZdJjotaZkXumyyhoIyDCa2S2hDYzOCHgC/IUMW -fVRlspYIlot0IhVftif7bSl9My8yI9Kvb6h/6jpqbnBV+NdkaYevEgc0/TiPikDb -nXiqShTlV1cwrNuXALdrtx/AtSTg2Vu7vlCs9tmPF0D7AaANtnivcUvcoqbP5w3P -0qJO4C0++Enw+Zp5B0KvYnmu/rK/qUJBO5AsgxKiG9hrjhFWb5VlMIFg6uRTk5zI -X6EwGUDVH3pwTsOXiSv4rJhs5rJhARClyZVWS8MzjLRLiySuXRqxTszQ0IrcZEoz -tKfFKehx+OmNd9wsqdVKOJ7tIyvfzYbpaw7+UtMRHQZUEemC3L310nlcb4ao7H3d -Us7JlNxDl/QQTaFRj5CX5+BP1JJANH1G24cz74B+3t2GLs/4YiNXtrXH0F2RGnE1 -g5h3X9G2G/dA35qniqdOSn2+tPMQQzr89nf0cVZjCJvw9KBNddBcsFhLrPWcea8D -PqWGd5PSvboDpFw4j+4rAA8PB2PrvEY87C1DRUEshFbOdr+3x4rks36QSIhAt5i1 -vFxdhp+DWGr3yvn6b2+r8prz/dNru3CXLDWAh/NZoA6DIHyxib1yRUmi6Hs5y+Am -OOpXwOp5WvIjlAhPw1rpWYll60bbkr6ziTdzPvyv4bCD836unxgEefuomvxQlBki -LWtu9tMzzsiWygeZ1PzoJ+nW0jQjZC9G3nuhHFvBtAQp7S2EIwjVO+lKYbfijpkE -HJFbSnNdgtAoRsSxv1byOKSsWD2Zn9aMI40OoK3YxDiD3WUoxqOfXvvD/G0sAx74 -eo66fDmDbBiFmtg/ow9NlH2tE1HB6UWWzuGx72vLcgxCI44lGIUIHwLnB/x7JAME -EUhZXKKD+d+gWYFvJH6jaile+tuzh3+C82tTVMJhbUegCxlV/Ny+6QyyyuQ1isY7 -fl+9KXPrzVTdDV+WuUZ83I2trFyLfuIoe8hj7Z9VtyERj9/xfFnrxS1lpC+JS+Lb -FKwHiuWXmMxBkwtgeKUJX9rUAEcKUyi5Sd077VkMaLgcga9itj+RC5sopg382cuu -OIYmPZrcv31EJ0VsAUIgjyYsgPgpcJgFhIeH6buhkp1yN0FQvvGaNNYzWNNHJxVM -AO1+Tf1dvw3ZacpjwOGb/L5qymAD94CnJ6ihzOa49vEfVsOcBxX4Y+10b2n8Q1s2 -HV4EJfWC0+LRvgm0z8vC/nXLj3q0o/sCHaksrvw6Ra4MVrWSkLax8Ad21ARP/z7B -fnDKJSYE46j0dA6EyeHEmDc1UEUTDQKflVppYrRhGP2NS+jsQy34uPU4MWr/qOh4 -SNpoQmuvth3v/ZSbCbtW4RXO4PxY7AIb5rJiRkAxx7k4lq3xFrDNvBxauvgNSYa3 -xD7rgCIO0vi/q4kyUSPx/2yAfuE+X8triYZ7oETZFI6lnR4cU38iUwzocqhkCrjo -uJrZaTcq/40/qbwpInCNd82NqVDvs22gHU2zpVhdrdLEqQL/XLUgxFl1iXosR7/q -q8zA7O7eo3IXlEpFqceesLF5QY7Z3xEfX96+1z/MRrcAlvuZ8AjFanXUrKqw4g+o -6U61Ax3M4tIcFWJGoyixb2g+vNGDacUaTZ+ZG3tQQXsUt13NqY+Ur1QzzQYRjIYh -oSC6tnsxeYPNQixJblVDIP4uMRwuPLLEaf0kbiUU2pWBaj2WtcmDqPPTxiLYWVin -AFL7ydIBiidvmJ5dsDoFPLNF03RWQ8JSJrF2m/sBNkNhEu6bu7ZNB8ukdbTdk+1m -f5kEKkQ4Z/203one3TKKp6i8YhqtpHSCwKjY/GyALSG5xCIDihDj8i6ScsSOR7rP -koVpdgs/dMYeEGKfHBNj7EAwAPOI/xxAbI3jWoCzKmp6FGKiF/ubZreSJ5RgjkX1 -ffw2jaBprwgIk3YsMugmdxAL7WMnIxch6UqOxQvZ8xvrNQLFLUQ5P4Qf3P5ATpeZ -Rxia92+1wQHXANpZWa3XLUtVkpZEIiZ+lgFpuKx57vZPqUy/fEIcpyc4t32a8jre -unweYfhd2qwFDFvypkpO7l2hd0hS0FBEt9Hn7xV474CgPIiWLJOS7Sxp3ZDdOSX/ -PXFvtTvYPDpVX9g4V2OtoA== diff --git a/cloud/classic/prepare-node/config/resolv.conf b/cloud/classic/prepare-node/config/resolv.conf deleted file mode 100644 index cae093a83..000000000 --- a/cloud/classic/prepare-node/config/resolv.conf +++ /dev/null @@ -1 +0,0 @@ -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/srv3/resolv.conf b/cloud/classic/prepare-node/config/srv3/resolv.conf deleted file mode 100644 index 6b94f6ff5..000000000 --- a/cloud/classic/prepare-node/config/srv3/resolv.conf +++ /dev/null @@ -1,3 +0,0 @@ -nameserver 172.29.0.100 -nameserver 172.29.2.100 -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/srv4/resolv.conf b/cloud/classic/prepare-node/config/srv4/resolv.conf deleted file mode 100644 index 6b94f6ff5..000000000 --- a/cloud/classic/prepare-node/config/srv4/resolv.conf +++ /dev/null @@ -1,3 +0,0 @@ -nameserver 172.29.0.100 -nameserver 172.29.2.100 -nameserver 8.8.8.8 diff --git a/cloud/classic/prepare-node/config/ssh-auth b/cloud/classic/prepare-node/config/ssh-auth deleted file mode 100644 index 393a52608..000000000 --- a/cloud/classic/prepare-node/config/ssh-auth +++ /dev/null @@ -1,78 +0,0 @@ -U2FsdGVkX1+6W/kpzojTwbNhb2aTOvKGQZMZoIe4zbF/XPO/h+Ap8DSPaUqehxQh -w3pCi7qr3cjG8zO57O7z9RHlH4sYDnvSnu5z7eg4265UJrPAczgYfuuu6098pJE3 -+3gcWHe7jqZPhLMhFmaYb2rSMZqDx0BJDoJR9Og7Xd6MsNAAIsOzX7TKpFxuO1Be -YSxtlgel+zjuXwAnxhyhwyrnMzx3LVIg+N7I+Twoej810Y/467x2IStdcY1D4oKw -vY3W0yN1h1uJrd3qaKlSF1cKpZyexjVhTt9sLRcKXknqeSd/Whiy3uvZGPQM8My5 -9yaO7HpBevDIty4xsPI1dwdNNqApUz2mUocRIgcMdwD2CbsSR57WxkSjpf1H58Td -knLussih2RV+xhYw+TnlaRwUjXQctMw10mGW+jhpMRZiGR8ch3sa+CklMwXcH9to -YFXZapkWT83Si5TcNCAjJ8hfKy8QymTr0idkShoYgPQibf/HKqSPps/MyMySwhgX -wibtaeolryBfQ3LaQwOxvBgVOdzxLQQMR/9S6rVp2B9FHWHJ570B0tGSviCEtWI8 -P8cLJD+1yibFBbfT4YbcRL8fv7/f/i7QS07elvG93PZWeQ70hCqojEEsSz4WU7Ll -UeKS/Ph005cpi6GMHu0HxF/MXV+4Yeh4rqipzcm5iOUeytj2d8zBAmAjbgzQK8Q8 -NlM97b2U56lzY7ZtAIJWqGLJv27Ne7rjEBnp+/rYyKoE6WU5rS9Ifv3y2AlKRVNb -MYdgxm6etLU0cRn/SCJzzRAbNlr7lnpT4EzFH/3TYfrVv7h1fbeaZgQOtJWjphuh -7St/V5NM6HNoS02uhhCp3zr/jUHMJVMbe7RySkicAv3/sLJjhCkm26XLVGkALfok -X0PCJFqYB2218sjGzXG4eIv1qyW0CZt32rJBBSR2itNWS7s+lpPjRmqNezU93VBb -waQXLid7FxhHyKjaCW+Ii/RvWEk7k2y6fS05WvGXWrMoT+GB1ur9Vktkxa10W4+i -AhvhYOA1idZcLCq97FBMNSyxFPPy9ocfuuxMfxMuu17X577D6AxpQQLcZ47vN5Ed -rA2RvObxnJP/0H9yy1vDo3149DS6WBqnw1Qa5QIMQTsHsmMgTUBpHqTvS/gYKUGY -IPGaxVuYyI14FVyMcV5G44bAIAe3OMwYulcSxoehg5baE5enYcYVOA9/YGEUajwK -+F1xzuc9XN647jQNnySBGTH/3l4nV0F9YMo+a8ADAj6oPv/j9dDQ6hnwmm/ndaCd -PAK1+72rk335rxRlneaEYlppREy2M4QHZEQTYDiLaLniGpZyemykLk1B2PA7GUbl -34jgzv7rj4ICsbojzR/K5ndJ5RqjhWOEVQSJajhmF+SjMulm7wbt8J+8stdyF+9h -BWqfYeiS8jUFv4SHU/O7lSlrjFw+kLihVfTSd4VWen9JN7F/4+o5kl/CcJp1WI1/ -VM4B4sTV8Z1zuHXygnokMFJw0KVhoRCLrkNI1ZRFTLrHn5BgV5Or4bC4NYM1FBdU -hj4viWJBkcyNpj6Mgg7DcS+a/P1+kCeZ4nkUr0Dcp1bq1BYKaFtXFI1eDevwsGBn -A/ah5ExPZ9NYdGDTwQYpDqFbGFOGQ96tpAiE8ascRsMcf0oieBMXWNAO7VK5Fib8 -Do9PQNHtOuY7ExHNf11lhhxpDjFza80+b5qfyoDVtlGluD1zsuKlAIFR0hSvOTkO -SA38lYIdgiXBBSAIATp08nwxc8hh2QZGHXhJWnW6GBA4Ul9bOKNWT5JagmldUQe1 -mTCK3ihNbBlQrl3LhkQbsg2Wlup6CE3A14Xfrar+7TKLtzjrIpJt2aTM3L+OHgBy -r4Do9eU21qqk9lS43L24gPoX/k5vF13h9EraxJAdv5B6yNCdIXX0VGdRC7+Q9MH2 -Bwsrdp9vHYt6CK05c9GjX3fFDvAkjKaGAN25PnWtwihGqi0/ri0ZA+KUau+5WiLa -vVRNF3w6iTV+XItM9pPwvwCe5GQXAwqfdHqwTBIXtBdNKSEuITwCAFFjlU1Z/3GT -vAoL4xzrZ4e/H4H6GeqsouMOiDx9ATfJdbpNOZCuopgyknbYwLKYFpnFepUQJcym -uF9LORh1WJyEaP/kHq98Fai29kvh9BNicxRt0snMdT0RjRTQWKQEgaGpsnR7DxXg -l9BDtUzEHBUf2Z1IhwEFFicf0hGd221q39uXTJLeeSDggCoAt65uNYlLBuXVPwXq -ZcLkhU+eXQt9WgGNBAPt0LmtnGln4QxdigRKagjh9Ct3xgHP9U/VyEO7xc19gPj0 -tWF6auFarGJ2tuebp+ruzEqzfYRyIPuSaty+G3G+Yn5+uWHWukCCiHwMFueH5y9H -l9jeKF6eFl/zAFYEaQw8k//oA5ASgMRUqMeu/ckIq32Bj0OsHLeybx7bMT50rd+y -IgH0H/pbQfN3YrolSZgzqprx/PyLDWmXG1bHhLC4+axLKDWCXXtfnGBigrOmnIp5 -hn+/dh9vSTYVPbicTWciuIelgCC+QVVEEI2KfVcRyL5UnPj3B5mB0grrmGStsnlS -f1E8MKTntADd+EURVvQySr4m9gJnIwyGg1/FEEFDd3Irb0yG6eAaj+9wWHdAWYDb -s2cm9yq9QRArl9ci8/eqykt9rBxX09939usQtN4pjTkuP+dMZzvJNWGlHh662Q6h -sQfraesc0ORkXyi2wQhtyv6ICTHmjgczctlpiTnCViKjJRyJwwe2wICoGcSQpVws -C2SBm+Pnj60FfEqmgZuWeR2vVhxRK9Jtz/QTejVEbL0luNqrDh4/LdDUbzGKgflZ -hm86/wHnOkM+5//N01Eh9/JSScuBxJ5yDOJPlXtwMVqDLCYjefU9nG8tX4ZDf03G -fzv6ldgo3Nh/y+IYF9kn41/MpRIB/hBkeSeHlvw4aCnRbBPDdoZaE1eAGlua7YzC -0yL0uHJbLKXt3u3YMpVs3HIHpBitLjlQQsjfA37MO/2Yn4yO69X9Zhg7GeuBjReF -GXpGeqyYTT7SX01OkxLK4jqLNesWJtQvmwgCb/VjdRSB7ciwoCgkG1BFJv1LPpnK -yILU5s5+oa8q7ILQi+Dqg/Y7HgRVaWaPnU2MIo9uXOw3aEaAU+0rOOXyDzSHSBBP -b+iJvTFLp69ufsMNLVZuZnvZyceJ01E3V7/rSzXbR/2Art7vYkYoRKHx5K+JM0+H -hlr6bi79YaOpcao8wJJ4k+J4oPYMuwbfCPcwwvw3K+wpP4OCTzq1/Yo3NcRkPJLF -uEsqnTNtsG9ZD2CkucsIgyhrsDb/KdCh+Wr5oAJYTuV8M7kZD5AmlU/F8NULHpK/ -uah6apjY2lO9xPTJ90FlAI8yS1KFLY3iB3E0DQfqu2pMWJ/vsNth0S+fEOvtJqAU -GFK6VrYzraWxX3y4rHzSTnxlLbyIuG7VSkl9HhjrMlce1LM2rawiWe3FqtTHZmvc -UsGK+LKQ5PcT41hrsISVVNtE6wd9Pd5YwC4oI3JkzFo2OR+h+uHPADYCBFaqlIdm -jbYC6AiFkNyYbpDvjN36X9Dqnt610nHCEeuMzEArp8YaWfEE+Q+mcrZeODqZV+TQ -OomEm797iMHRpgTjfe/EPY0NrBvZmYBDoChN4s3rEG1drXFYo+YMaMPh5GHcL3uX -Sn9mlUoawrXPiexJ+JCuOAGpX3s5KWVQZZ8p63KLNetULgxWn9De/6zk7mJnGDtx -gSH4R1i+cds47eSGgZirm/+vj57f9L+XEZkQueVG8RkM1mrZWsKVqv8ULmbenj6i -Hcb0+XDDdiiJLiFTYMh4//2dDHB3EhlI07nZkgHihfNf2LEZK8mbDpjncp3vfdA5 -C+E7h7SAUwW2m7lp2jr/6Q2ZIxpgvUxXd7cWjMoATtoUIpphqi+UzHVy9L17qhkO -vLyFUNlHJxps3rr+b0wmCme2bFuTbR/ffJhS3MtvqpY7G6jH5e2Y70owmJiRrfmu -7uKNAx+CoPyWBQXT5xQiPKyEMamNIYRgx96BnHjnD6Vf5aZtBHjZwOSOfEbPWGax -mX2DXydgyIaTXGMEltKgp8iKwERyMMxoyJTMgzSiOg5auTQJOdFtI9bMB6V/z5wr -PLs8qsZF3K+ZQruPUItYK/hF6Nu0ZJlGJ3iSYB72dYv8qqEosLcZl4w2/+OBHgfQ -BwBFiCRMlgkAzny9ZlSUqoEiIX475YkeQRGrUMuaEiy3MokHv2+qa0TdOXD2wiws -mAnVCU2EqVry56bqjvJl9KZNVZrtGlCheYwD7Um351p22Tjpa7jqUKhxFyZs8gxX -hbvs1OtEuyJlWxvPnpmEvMTWH+QoobyapQ0zhXAHMyb7kFnWCL0E9k15fhO67kay -uqiHkgIlu//5by2iuBkhNv8e9eGRU1A2BtePA/SobZY3sSvyVtZhWm0w4nMEjYo9 -dwxe8/E2YbDcF7rT6lZL9GxlA6hyeOAd1HHINZDBw6CO2m4G4QKYLl1kl2Dtd1AQ -m0DpXOel8L7yPzypD0l+U3hwsK9/WrxMd7ezteGp1bhQR7Sd/0LGi+GEZa72CK+4 -+Mw8PtwpypMT6fF2tLAAYKS6wW5adnJWcxOR9UrYpnbb/Qefbhpbys5iWHiQAb/5 -yDmojlpHfJPMi3XNN0cbcl3PrNs2MswN9r3yBaBKCgwtxYHi1jJC8IHvZICBkN76 -dDgZ/LaxuqUS+FjM1GMAUrWrN4QTX+EDTpY/7+2Y/Wo35Zsl038uGcFTZp6jZoC6 -oQVz4bpuXeKevQ2TFmgvgeRZ/JtR0JEiJuAascGJG1rEP0lUN8THLkxNq0N/o40N -mHg79BjHINnHtmY7C4SY1ZUZbDsLO9r+u5aEXs/62hj22Z1IyHXsKLga7zNllif8 -bKXOn7+f4eB2V+FbWKl/TVAQl6aR+3D8ANq7tDmplRsA1dPgRgfxOKbRGMdrfsRE -SzmVe1M9I5FmlYwB8IlVVNpLTxSMH9PAj5ytLDPMVRo= diff --git a/cloud/classic/prepare-node/config/ssh-banner b/cloud/classic/prepare-node/config/ssh-banner deleted file mode 100644 index f2c589181..000000000 --- a/cloud/classic/prepare-node/config/ssh-banner +++ /dev/null @@ -1,6 +0,0 @@ -U2FsdGVkX18m5+5qCYygXthCT2NYLf7CLYqCpR8GnIaglcKA0Z/0le85o+0p5HWh -V0loVZqOmzoDvUggX2rwfPQYLuBzjwEURULTtNjcVXfsmO6LAwzhMvUOMiHI6Niu -DQUCrXU6hOJUp0DGk2aVS185JiblZU5wDKggmNDMg9HizETSs2hUMthpTis3dAJh -E7rRtvuN+fDWDdLeNAybh3QnVGVRU0c2E85DpOzfZedN0sWfYaLNEuHKPUPiarLR -IGZBYxgGeod75hiM1P3dIaPnarNQ/YZHBeM0QX0q11EIvEMGxqJzgDwYgdxcY74R -xyD5XyAW3JaYO4cHNmSwBp6lmkfCJetQqWtLjb9soanKeJ0CuBznPUOnWp2Cdi3c diff --git a/cloud/classic/prepare-node/config/ssh-config b/cloud/classic/prepare-node/config/ssh-config deleted file mode 100644 index 56300854b..000000000 --- a/cloud/classic/prepare-node/config/ssh-config +++ /dev/null @@ -1,111 +0,0 @@ -U2FsdGVkX198yIhclpn6yG+ey+9GhVUDpUIi0a92b3ZKsdsqhrIsN4BFxOAc0iGa -dZzvr2exJogaH5uHp89LJlBBjsH7j28ac/YJ8BALXKvHtsKCaDFH7StMVExWoRLo -ZC1JW1C37gDqAVLNiW01fwA8s2p7JbDXGpOp8tWIO5CJwwqkZ17xqO+q0bN2+itX -sH7mjq9rpkGjwSIA/ls03aKZT2bbZxoXXpkehGYd9aeDl9TKNBauS9YAbYV0p7si -2c+dDFw5pJbR3vXVP3jIrqFahCe2cNivI6k22my8zBqiEFAq0oZxWJofwR3g/Cb7 -JLCZm/M+0u2NZq/XumtRm6z9c3VUOoDWaeauLbXqi6+e3XfwUMJqJBLA0exz9x4X -TKct7awzn0wDAads8VcATtPV8SIiY4xFxcv6iAJf6B3MTX5OpGTlrxLeax3EgI0H -SFkQN8djaijbUenlmqQBc9Jdp1bLHhbQZl78HDHkQGbCBMOyY8oTAww5VsgtE5bS -V66/LJ2sU497ysUQRn3ED3fFZ0Ss9CvKtGOtL6Z/7RM1nHTI0aNwGYujCm15ex/3 -nNF1XRvenZn1nWckAApMKduSIektmgLi0wuDNg/F0NVBLEMNw4/sGk01+FPnqnp6 -lPscZHvZaPd57wn8fgM+VudUKDktHGzWmGq8Mv9iG/VsFdpSvrme6nm4oSUPQbZr -PA+2zMMlB+arx8Z/6M0JOAM0XGt/bnDEdaFKrFUHQ69uIoyZdxS413558roY5vpU -xLNw8gwmY3tpySak4H3QiM3iSunjyOXZtGBh8IioPQ4hG2r0nWRiIj+VxFHuerTR -qUyimW7B+tYA0pKlSk6C08e7UcY/cuP7vqm0Feub6vVySa7DB54JoNDOF3YxKfpW -oicpnzTtBm0O+pBxF+LwhTwFom3Hd7h1J6HZvgZOsaiF2IAwx4EnYCKsAJKAGn68 -DSjlXUjykPTwQtveuqG2GsV/ufUzTb3Mga6P8fFOk9yaADT4ng1bT427NP+uV5JN -CFaN6r78Hszr/DFODmTNBIrOiv0hf3gOOLQ2vbIMVDK2CZyHGm3BpSfe9ZQ5ZI+C -UBne1TUBOc0phYFTKiBWg+jlQLp4J7LwPY2EWkgL9L6ZMvwEz7q4mCwQNSiLquXT -Bi6yUJe1UHzZnRQ4oAzMZP8x+9sSJkJna7+dQCqhfHvck04/eHSpN8nssP6wqoIH -ED7610FYkTa5z+uRbpdjjeDVvPODq0jpGdR/5hqy8XxSjnNywDGeySMiPf5VVMjj -nNrOYWrO+7PtdHFMP95dRPCSXs34Ya3+qzZ1cVTzxYdxCWeXYNQzjy4k1qQMpZ+q -8paGaf5xlDZLnyBvrk3jtCT4N/EIXsQ79fBTxrzR+yjqdjMGahX3FVsDdo1LeTGG -6RaCLigv6fQvldq7Dg1/9ccn5m2cak51JOA3yoNC9/doiYLjzQhNT+OLtAF6zLJ5 -LfehAx9UE8Wo/gzI4MS3WgVKfECFgvpoWf4+2rzHb5PYzPQjEtsgroTN9aqNyBT/ -HfMUpgWFv3VxMuGW0aBmNvadKVJkxpn+/JsGv9sS5hleKA8MTIyxE0weu6Emz3Nu -0YD6dkjwpF9I1Wni782nqNdV2NTgS7G+D2EqKhG7PJL1ijwSk9iBqMyfCAhTFjdU -mtvtz0kDGv06RMrAnVFzcOksr1fapDomnXbNIpcqfoMyOJ7IanXsv1yfcDIYw4Ma -JZeYKkoeYSYGLYkQGgCYwDa5YPRWONh3cWTaIYH0UurScuCyyIzr+OKjz417LljF -canBBRO00t0VgZs1uuW4G+wU//yP4U8XRdt453WZ+EUyFBb2KlvsmhTVjyat5X4h -EwQQT1ZyYkI4yIbW21oDTFlhsK49XblszGmHunh9NM5WxRlGLY6xF9EQ11C5vm5g -N2rIhkqz0NtlXZJx5DPowuC7EfTRGfIm1Mg4yaazyJKDYi+o0p0rkB6dkdu14lS7 -jyqDkePgZgYMFVuXJptHPwkUbUwn3SOYV6yB2D0E8pLRcxoaqSRcAIiTQXJ+6Z2V -7tNQRgct3j/8+tk/XplhAmsMz9sD+dTZCxA0aPHn8MrdXPCwqZzIifz5+tK8ZnaK -DZlP+df/1uiknHyj0higxJlWCtxKZ1WPGrby94gROvzku8UcsZtwYtR+5LJFu+D1 -DId4w0PRnRdwNuZz+CTgP/KwweEwJUyVeHOpJ1Tldip/4cQ6PEm/x9Dw7OB4nMlP -dZL8h5DUa8/SwFxMM94sVN3GR6k1J4nYeZ5sqmLrK1pKKbu2X5MTxQXjRuiUL515 -GX9a+2GBILGwPJVeqI+OSbrh7cmhWlgK+u4EiYTcU7Ry+Mehc0npouTv+lZ8Q6AX -oaHqzvycSxTGuG+iau0hqFtrdHp8K3zTyIl+T9YflfnVvWo5CV3nqt1VjtOyeSg2 -XsUUU+bOR2R7TStGZ+J6rZ7kaU2BLv9gmH/Rj/rdstSHe/bOUuOvRJycjnFunRW8 -Lx7vfpm2jdeNXUuLBJ+nRdNM3DJHy5X7oG6+/xTBp+5VCNBvQoLIby1B/9KbHXiP -3Yh1I/lzmG399WKjpQ/VnjZnUpf9MRFoWcZUUT+qQsnzKzgt584XL9lCnAccC7MZ -NMWOKq/qpwPyAB/dCwfMGe2qIaTpZVr84ULZD0Ryb9UnmXruNpUTvxk9nqEUk9gh -QR1KtqTTZmof7weB5CALmyipUfRZSLYP+kOkUduoYSVir2WJhPstik9x0Ykl7XuK -h3P5NZTOdOIJLmFB+UyFeWnGDeSfj6Z2wnhZLVBek6SonH3ssfN0/GwYPLZOEYVn -Kv8ufqGpfxZl5atL0tNXx4zsjxZXfsfy6zkJDSD8n3Td9q5DmLry31/FO7DpTD6w -kNIrStONbH9IivFKoOMB4DixDWZEt5BriFQ/tJcG8bKX1XfmFRlANsIHbcUBsMsd -zAcP9P2jaIdmhsJaP2Nvan2gXkLjcU3YR5vT4031S7HUUH0cFptZPzbHD5XMJQMj -hcg9NEQGGNKc4LOTKJvkbNG8gLlbOKtShSLB9dCVwtcJfnV5tU8W/tdfCRY66+jy -ypmsqWDUjZ6kHBp1NZJYejWE391pQ0oBZQ+8eg6CU/N+ERsX4o19NQbWGrXvvpFy -zYdJ8zYF9WDF9icuY2yDGPLyK+lKEyjmDpxDMRhmJG0FQiwo/kd5B4//7oNcfswt -hFqjzbxB+FvFhKWRP7334XBtQvJ1s7BuCfwoh7hho4vzz8i1epP3u15uxQrLSpol -V3jnpad6gLnBvd/Yoct5F+FrpQztLrRJyUXwOB0QtQ/zIt9k14OjUSjan6uiyECI -YiaocelmxOz9tMcNverG1G4Q/6X7JDi6vYbiv5bW+is8g4RlfdUnRZhRsr5zMtQy -nu72hQV66/kZhrEZavyZkxU63nw1nDCDa6B2FQBhDx0pV3BUe0P6FJlfylGDg3w9 -YzS/pgKsrUTcOjWm3TvrpDAv4AUBrm3uSUjqRvGRkcIZ5VA1fV1NEozeeSEF1Mge -yZkQ8LdxTuaLfRQbsQFOP0CqohQCGkpB+uRASpnVl/4O6qMnMoIyoM1l4QJ/ND4T -bD7w9RKNktgIQn22Z7rM78XJsmvQJ0t7nAWvwK61YT41S4c2Xwh64mUC93LnHUAF -vaHqd01on9b34sF3OPKeNG/NbCc4JAWvg+DVCFtzsGmGeslmP/rhM9zTFEYuYp+B -d/7zFzAZYGRRaNgRYRWi4P/8jgo4Dpz+mG0+JKewpeC2gx/9faW4ne4VvRdgnHjz -KHn/DCdxDeI+/gitGVPXVp9dRM+Yzwr2Z3Iqv94uGWj/GTEyWvO3AEgMwgqMFsOt -mx3iL1oIpYWazNLMPTb/2mkgy9ZQeWbE5XFqaGq+6NF89gr11VkeU65vVaAWKV1e -2uNsrmMRmZr/h3XnZlZcfiOGd5xP3YIxPfYq3oGvPO5KFYX4i2zPlI4YY1VJsAuY -i+U6TKVb/LAtVA1Uh0UZS4t39lgf8S3OFYdmfTNKUiNbqJ095wMp9mwaviJW20HB -IMVgkWJ2ABMRq/Pojkj6EbxJnqOQuk185DVq5/wG8gBs0MX52OXYJ6YDg6U+32Lz -W/JUnUAt7sIHuss3h4wSPv3Sy663WgfeYxX7dAxzBz6rR7ie+9HAokBWtAdrMzkp -AdSB73wEm8TY78Neea14NV+SKUCy9g1llzyq1VH/4bDFyxs4eU5R1V5ysnLpfJOM -kPXgqZgofhxAo88JhW5HYrmAQh142cHGo+C9Pn7Y7JGCh1zT7z9MfRJkOsXmuZXq -Y2xbJOB+4LBWllQJ76HNRpQy6a6A+5eFVXULDPND0/gxjgwTj8/Nh6eGWrvcCeBz -jlZ9WHkzTv/dw5yAQoPm6ZrAwecsKyJHjSrgPDID2VJAUVNhNG0rSiOQETAUtCDv -U707//XN0TAiVVJh9zIbF9X9dDWJzihO3Iy3ul5Lm3J5a06tccHuNxCoYNCUtF/a -Jn16dGG43elLi3fKz21QM+HrvIQuLdClWXyN2W6F1BZpqGWgQUsZP6dEBhDN6YqR -fSlOMlDZgkZECp5Wd09r1xNVGR+sVb4FL5RN9L/RAFkSBBcNERLWOlVog3FcbGJv -qXo5kwn1/Vu9T3bIPt9RwRyUbJeJkCx6bYE7XdZ4068BLevYAPUjRy09J+Vsx2XI -h/tj+fYMxPdv01+/c74l2GK4AUgteemON/8aurfFBVm+hvnnoDUoYoBFEDLcwTWV -KwtUNMO4TGj06DH7gAJvjp8Wrk8F5bnvh/aBcW6otXLXXX/lv87lSwNQtbW6F0Pj -Qwin91sZOYvLgv4nE7SHExpk/u2wCDPuaDMSRTTgdi6F4Uea9kxCrje5yhbYRWms -MqLlf+/+R+Zdm570804DrybmRWPma5PH2hDzgKtfu3x+9HDJyJSFgKvfCHPVMyvQ -hxEDlIsTDwzmDZoOdz/H9HDWSgGJZJsdFT0uNkylFCA6lY/ZwNywI82xwBmbfI91 -f7Z4c8nWUk83AdQ9R9lJxGb9woM3lO3J/J5yPNd47OlLHh1nzrVwUMugRfjRCk9k -vvomccS8VL2Byf3FNlOFR/ccmlTQuNBjFsuAUJch5GB49RsdzmIXDUs0MZrzE3Kt -o1onXdAJqTY3Wu6VG0d61O/3CNVgImuAAvzF49foENYK+1Lt4v7z0OohaRXMOa3/ -OmFz+DNfg3zVBofCDjiN9QQWzt0XrfA+f2E3/jLCTXyOBEYy+gqeZRxUx9czTpfa -+uT08pLgYDYrkByAnoQUMz/wPM2GsT/ULVxsAtGwN0yY4C6+llEkMdLywe61TojL -LUjlsSGRBsDPf5NeDiYS0jSIwqlNSofJgS9WwwQdxRM06j4sGnxWOE28q/q2yW6F -BFs/+3bHvnZXqIRPWzp++jdV6ViJ1KUqqgN8kL+mNw64AMiDjNJTVAFijIILGEQ+ -7E4bk7PXAAGFPVIm6Il2BT0igYk1ibRhBc4tGvdvCV2lkI8M74H3lQXSBs0fgJwa -DY+JTuximNuvxRjBbqJ5ytOpDgVAi1vXn3pTiASo7kXTXwfsVS2++h/Rtb5VzQJD -OwC5r5NAbnjSGzrPjf+sGmdU0MRIjFvjOamo67pVDCga3002UqtmJ+HdZFb5c+ho -rLrRvdP5hTBjEUce/jzHpABTpCkSOdhHE98K2+3h0Vs3DD20OjZrOh3OGQYDinP1 -w9mztPOQdTezZ1lLsxFARIQNwPGB6QoJo1jHhAfebRu3Hn9EcZJLIgee7t+wLxG7 -hqUM+EEruSl3ofcm2ylQk11CISLmxw5H9xovkUBrIKvrlLKspWOQMDUvrZcvU88r -khZEjqesGi38V8t9IXrwLqmMuNOsEgFfA+vtPi0xuZMv5CVwV4rdNWLP1kuRJpIG -54wPcLGxwmT1yqfpFEaLmG6Y7n+bOH9pjQext7DX6kKTEpn79M3ytOWYysdXkHeB -kLHgzfTVURrdtv/zUC4GXmzbCv8Z5EAJeJ0QZXBUZi3eLcR+VuMDLFfb8Y2wt/jC -AHF30TJ88A+AT4auQZJHc8XycmugP2rdRbUK1q/lQbNT/6+6NkKe8C5g60ov69CE -WU/Z1rPdOsc6B+Zkvf6nawVFmlUweBOvRn+on8eJrN7mOGqvg9LLcXaJFmPr7GQj -UrYhqj4czth+gfUVogpLpjOiUGuvHBHdHyIXYjyE9+GDs5cvUEuRFDfGwbuw4HL+ -Zp864V+Lf2kxLk9bnAVQWuJGvZnYIoz9ALEahdmrKuZglU644B9IjFtdrBvHg/vN -D782qhxwjZnKM6obgov81Rj3NAXc9ee9pkQ+ykyWJiMHjeZyP9XwiqUMTqzgfZ8H -qX0ZM1/x2mvG7wSbDZbgWtBBM9aguVSgP4XkiVGnbOM4BFJR5mFMXtvJoqaAw63i -/9+S4OKrxrAstgb36r2JCTmwSF6/VpGYx+SoFaN9hN9DaZtPkIYixCjzUXommN7s -CRKqW6+6Xt2fX9UAmudnldi8iVSS2E2Tw993Zym95brNGzlFsvGcyz//7FxoOHAR -skjz/zqbYgNrk21fEiQL1Sc+wlIvgCTqh+4dP1v/HgD8LnFE87baGOdQoQJ/oPck -qvNp+fc4OdIO0pbGOhASDvPDo02YipbD30j7BRTJFcX9/GO14KgcqANn3GNVkrvu -7x9OX6yEu75p/w0VEpf/wKWdBF6Q1nNj5tG3FcPd6Ejy9T69ee6RzOskwDhzShR8 -9Ukto9DQ1ZpANF3CvRUKdnV9k5INe9W8QVtMP96nQvz6YIPbOKMt+HAj4qpiNZHS -sCpJAHP/de9dcE10PLE40ETuWR+KWUCVQK6LPfGPKYCcSC5uNFNT3oT9MfXjQWIW -KHtbh47n00u6tOzzTmn5C7OYx79kYJemTbE3zOpaJI2dD2yCGW2XGr1lGtawg7fT -VjsV+PdNfZApIY1Mjo9Um3WXHulK9+OMVGs214ItJjKF6MlGRZ44bckOUqHf4iBh -P4AyWu/E7fBp6JXkst5q7DobI7sd9mA89CPj71fiYFKO/Sa4IUlfY+gc1Cv/eWXW -qH5s6RWkEE5f0RloVbFSGg== diff --git a/cloud/classic/prepare-node/config/ssh-rsa b/cloud/classic/prepare-node/config/ssh-rsa deleted file mode 100644 index dbb69f457..000000000 --- a/cloud/classic/prepare-node/config/ssh-rsa +++ /dev/null @@ -1,71 +0,0 @@ -U2FsdGVkX1/MMy4o1oNJfobR77lXtVFwDIq5TVUHS94O2crjidX5DdD3ZAK1DQHn -tfyHDmpusiUiM9MmhWrzmamA606wkKjONEtMmnmqJKOrywx5Hb+3Kb7TFiP9Rh2p -NI8kr4kfqBqXnknbd/87Q2ccxWuzxdQggEw1vkBnxbP1g+2gj/JjvyI6mg4xeVaY -4TuD50hcCm8nnFv1hMCxh9hYVtKZ84kzX0I5zJIm2cY1cTcU0OsmSAjHibStUdbc -qW4cBT7KY0Gtf8yDvEwNQ/1szbY5dC/vVsQlzD5jwQmYU/12EOZwEi3TWPKAxTXZ -HllWi7oDwVJR4sEb1ah3mEcIdhU12GK4vSJwBsehVhK7MeIuxHuEfv+kqno8DNs5 -/LcwDqU8BcmF11U7KUPrJQiyVjS8LHA+K0zs4lIQhF6ZUvm6o029Eh2MHh7Drgty -3fe6dH5I0yA6ypBjUro5PnOrOmgK2ZlbldjM+iAl9yXwmSLWuiEO72Fv0amDx6pn -seawzApkTpNPbhot+3IZarcYxwkXKwZ1azem/MxSfv7EPbXw69JYUTtW08JWjD/g -Y8oVDfHTY8HE0rPhRyBNNq4gdFAVEvSGD9/wKV1zEKghcwMY6MtZPnR8EGDApbJz -C+1C7p1nA6uzxgpy4fn4ix/QCXdlAj5AuBtjm77l8i8fECqMlBJeV1Os2K5w6D4P -vAfKot3ieRIqCKc2mkHvwCKhYF+D3GVoLNGn5/MvlPUeYiBNbm/VbsEJJck/k9D6 -Rd7ZJc4Fi1xFraQdf6Mp5uWAcnVzArHrom/Ae3LTpJpRd34NH1S7QRujwc/yonhr -m1f/OIofRWCL7Qane7mMQHj48E4m+VN3J5dnC1Fh8JvKIAV/VNEkIXNeLyojdUq8 -BvsquVAHcSCv9l5C4mSAyvHe7Mol0yLTvl86FTkrVtxR9RELuqI2Zp3y+H1VcQu3 -lmmR5m2tzEH+9SgmnWHpNBQSyRHHjZqojUXcVuEEoFWpGcxi2uLX/ecP4q3EGXNH -7m6Ijh4aoy8ZyzoXyiN8stuAKtx0A3mRkMza+Xd/c5Fx00aruTZd+fe/n8BcA3XC -ecwyCcOzQbilOsrjUavYLZj7O+/zrzXIxqDXaCDUXa/JTh3rjqFT+B4V08QLpZPt -94uLcEkKf8K6M9sa57H95opBR9YEAIEdtc/sB5pFZgfzhAYp8QXio+f9deRsbmJG -/CSoA1bQEiJIbQLpTgQmgsi+v1TjtmFtp/3rkLERhFGw1h/48jeQOiCLh3VGQ1oq -bNmnQu4VIxQ0eSjWGI9uR/smgQJoEKieVxKvsIXbBmRLzRs5B0wEI2n/nkQeA6Md -I2MVs3wn+BvtZRQFWQzy1TAJNfLmUazroup8wMflAKE7fgcZ9fuiRGH7VzTg9L0f -L6Cd787FjP98gCNlItMy4yFgVu2DAJ8HvM2AV/XB2EdFYk0kFdotoby1HvUJiUGv -5L4uZDYp78/Tfzwbf0pD189gx1nu16QSv7igrtixjN4ELHFBlqAcoR35NEXQ4c/2 -1POh50H7Rw3ucuDH7Sb47NGzZKQNXldNzQYLn9c3INWIRj7i6bH06SSlP7y9FOMT -G53nFKw2Rs1GIAUbbkaUdK8V+UdRwsujZEzGPU9u/CE0sdg/m1HaEap6l2Na03cv -iX4VmFygSFGInErtvYZT43qOqnrAXv9+Jn98ObofhtBLrqAS/HslUYOLAYp+e8yC -mXurhvSdeInOLnuMqqyu7szpWLFs/qj+ZG55aW4nIrNjBPxSWGyUsH99hl4fURHU -VtF77k/P+9p2yGJUsYG/GqtkikuO7l0zupqVnTaEszkRa/lPPnwt9SHfEzqFiACR -ZWn0ct9XVj+AFSk3tJtC+6mvME1v9WgP5Y3WDcFx7nheOuOexXvTRXUAoRWWYwyG -2OP3J9JsF2ILyvtM+HqTLFX4z2QcpTCxs01G5zwegt+fSNUp+vhQxWzV+JWT0ol1 -zlNFsiz8DFvb4o71ceJx5ofm/yDR+wXn+78pBdUZCfTAKnX1Id3JDZNSvcSldrBL -TXS3PDYZnWzNEIbg60l1NoLXprqUxemCYaHSAM32Y8Ot2cQrX/HssaH9Y9ZYgrme -V7zSTgbd9hN/1919aVNfEXfsli0MjDYQ5UgveIMlqVAByMLbbh7Dtjt0YI1mInoa -k4R22kbTRP/TEACJx7UUuoewGETvJLzs294/UkiDzWIoGxuto6oFUZTJGJqu3X56 -2Yf7sfYWXzos1zkXIFBIpPMtJSadr5tzWwZp8keftQYo/omzDkdldKsO2vSA6Mcu -0p+EqASwD5V4MwaP//6NKBqsQzeI9h40R1zLPqi1IwPMm9UA/EvPoq/UyBLW5Zhh -AqIvjDTbVklDA/rUrfVv8ejAFC9Av34VAKKpPccVVrNyIBhU9zSovFh23xNxEPmL -e869JJQIwKN28amGY2DMb9QSTZaksLM8njnlu0QQLX0q5f28cUUMNlJ1Vfby9HX5 -+D79KPALjRNeArrc6Wszl5OaGQ9fsvNQaC9OL7wmWV5lxmQNkVV9PLJr/fraq3GM -Cn7z7rb9ujgrSM/IWNEOLDwN3cu4gw7mwYTCuGQa7taQmk077/Ew+StfzJFN4Fy+ -BYd/cCT+VE4NBFBm6dqKP9/ip+cYh3t6/PW4HiulQtDEYkI+GBCfEha+UgzNKj+7 -/KZ0pWmzxwTe1dUExLNJ/EfVYEDpaObVBu1HBCJwsPCzHTJt3mvw7iMfRS5qyJL1 -tl5N1jJ6GP6EqHNKD3IiXTBQGIvhP4OlIVXepeYfs1p9NdV2PDnlwqp4TVztKgD4 -mbvaKPsxAG2bM32LqfbZiFAQ5ZTgkKhxV7pOXDGhpe61kwB1YE48IoUxwltND5qz -aIrta371khBQ1RthF9bP4NfP8Merm0yJt1xA602vP51GVmc0fl7YEfF7yiS3slbw -gcZMtUkBmW4CM/RfCVVMkICYb1rCbgFVsR3A4cZiIgW1Fm+TKZ3DMi89k9Bo47Bp -/F1FaL05cof89oD1Oy/zpVimNkjtMvcLrJjNUHnJPnYOnq8k10HU/QZo3De9xW5w -rk5SMWUwMwGqw4Jqmqb0xS8vgMdtURL724EEkgg1KJBTiouEhK+/+UZtfpXmVNfX -K1QHlLYwWrXDLEmruwEIyIn1umOicXOLvf3t9qBVisgGTIszAbXsrUma60soY0pz -4ig93QldwBSR5YIasd3L9HmA+GPhL8lbfxft/Q25g4VuglOCLVY8h86lWFVKkrGf -Nf2AuPx43ML/hfAojrDdQtTWHf4YEtGrcLDCmgwFsmDYK+hJ4+YPTJ1CAdDNLrIm -XjfcwUhwbbQL1HQaJ+/HVcQ/4UnKZBCqKpt2xA8rynf43N3RB2Jr21aLLWNTMnDr -ZNsCacnk4KMdzRgBDd2LEbljxLv6BvlVD98dc7M28dAKFTX2VT62QJfOMN80WRfx -dRXX4TTsThAPKksXvE85MHfAwdPS7iUXR3GHuRUUyyKjtySyX49G2n90PU2mSdLt -5VmZBnTDdeZrOGlHf/ex2JgwMQyYkh0fs7rzIAvalTKz4Dt9vpS2ySXfQDZsMkc3 -HN5f8p7tR+pM+9EN7nJDHw5gvyNdRypbM23m2LIQxuirAz7gTuc5/pdQCqBrqRA1 -aGhWiNHXlFIshSRJQP/c56Uh9f4AyhrhB1A77mPRXCJ4wjjLD/j7WSzbt9YCr/VT -F2Qaa7apC4eJAk1rU1CuIyniwD3eD9xkvwUsqPuskxVYzieyIbGDvp+IHwdZcA9C -HPZje9EvDWOkSEqKe0bbY14+3K43J1b0skmjGy9UHRSdViaeq2r0XUM6yVd2VNSV -mIz3BYGJefV5AtDrLWfn4+/Gtl/l34rgflDkCbhyMRK59hyhDgDX6ltiLOqZRi7o -c8+j1q5utEVvY93aY1ptzpmWv4NSFyrhLDfMwS1p8X4tXPNWh2Ws8TrSrYLw7+2z -U6kKOvr1N4g/LuPiNEfWGU3Qb6nbyNXbGaSK6NO+l86yaMyyFPkTLVjnwQJ6DHaG -SQhDvfMZpjgS1GWBVuXHdnCl+brJjOjGEkW0J06GNxq1oxpz8smKOLLnmiHnSZ0F -3RktpjICV8vzBtBRgVyY4TvdnL3Na/Q80ZotA7+df0vdhvbwzcPlUF0TuOmsHc7n -jZ4wMVXXUMx0/4raapCsjj6n49aGS16BgmTmv8ZUOSxg5IzhsxcueVRA5EjBLfui -rwPbcm1LntxmobOTF8lgmeD4zIUg6+MCMv5KKCJGF9M/0fx5PSQB4OVx8bppXavG -OuWB12A0hJ+NaEFlqcboaOnjjBkKudS2bqUJ7VBhMX8eBlH6qyhdQMopKlecDQNR -SOXPcShVEXMQfVFmBIAryVu/zPewQTxSIiJQ2g7bLbiKaDKpCPpLUdbXpYpCwEMK -JwgGXxac/7mDWLBzRTCzjuQJCICqEyiE1Tf/cD1DGGxfwwPqq2DdgZnHpQDN+Xju -yWKfiKl27gvsSQ3DsgQETWHsXG+p6GdOBOmEEf84IuTjJCyQxsqEqhXEYbs5Imb4 diff --git a/cloud/classic/prepare-node/config/ssh-rsa.pub b/cloud/classic/prepare-node/config/ssh-rsa.pub deleted file mode 100644 index 0f1245f19..000000000 --- a/cloud/classic/prepare-node/config/ssh-rsa.pub +++ /dev/null @@ -1,16 +0,0 @@ -U2FsdGVkX19VaTYlNH6bwvtBz36tS3mkXHXRPTylSlomRzRFXYtFJwggV3LSH1aM -1s8geZOcGBe+nU0cbaNv6ahvOfvVUCEtByJusmsroR99GXyOjWRORAUT1ekSHkth -8zgNeqw2NJeg7tTmhGeyyB0xpjztIlOEbUWMMAxab682/E4XcN7Bng3uWlNRc6Ye -GAmUZiDcDYmuta3qq/Q9Ug9rcG9CsM3T4+U/vgNU3yb22Ah5iUjGh24iboTR+kJW -2agTY8NY8mh90s5b9WG7LgnKGWT+wA1YmteCb5aZi3NSkOs9+MEkSVAjH/DA6p5t -NbzoGocebkdO4XsGKPoH8FYFa0ZYzZhk6sLErsojoswk1KqegZfCBu1A5C7VDZr2 -rN/aZ8U+iWochKMULqiQiieJM5z/n06athd6YP8bm4BFYfGVSBiOkxkM4nDyZ1Xk -5J3I/Zpo+LcLFrsr2WTFMnSe3ZpfXJW7RYVV+PuesPZs/OLtyT+67W0qrOtlN+qY -CeggCdEvBX/zbx8/BGQBHUNA0VJ4FYYQG59MjYDZYa+Vhz0c6eyxV0ZL4cvQE7WK -A1PKUYBCDyC9O3w20YJE5EtpcHwU7gVIgoUps1K9mCDVPq2sFRTmsCEFmmJZZa8G -OR88Z98ueTZXN+zSQMCRws6FqEJM4/FTL3V0TXLE+/E/C0kHlK05Hcz4opor6Gt8 -O+4DErSVQBgT+FkDQ9eOfvVyEcXc3AzKpt88gilsQjFVEkC4aUQXWPhTfi8FDAim -bu7qnnD9qkEBFQblkBE+8zW0EFGjiBCQvjXVVylFOVIl2Rq2wFbn/1ezzjCnHb7g -GGwj7FF8vVfftyBH2HRpHf6ZM8SJ4I93kaN8w1FYot+9WNI5Zv8Fb6BvRTKftJu+ -fMy0dZ4W0kWF05IRJAFGZ5tVl0glrx0NX5lJaI0P4OmsF2PAohjgDOj53e4lN/ao -mr2YiAQd/FiTjBqN2CsaSRVxrFgDsFiiViVlGngYZB7kAcizuJbPTB64CaMoQBjP diff --git a/cloud/classic/prepare-node/config/sysctl/1-general.conf b/cloud/classic/prepare-node/config/sysctl/1-general.conf deleted file mode 100644 index fa8cd2e56..000000000 --- a/cloud/classic/prepare-node/config/sysctl/1-general.conf +++ /dev/null @@ -1,72 +0,0 @@ -#------------------------------------------------------------------------------# -# GENERAL SYSTEM OPTIONS # -#------------------------------------------------------------------------------# - -# Controls the System Request debugging functionality of the kernel. -# In most of the situations you do not need Magic SysRq. -kernel.sysrq = 0 - -# Controls whether core dumps will append the PID to the core filename. -# Useful when you, for example, debugging multi-threaded applications. -kernel.core_uses_pid = 1 - -# Set amount of PIDs that can run simultaneously in separate memory spaces. -kernel.pid_max = 32768 - -# Enable random placement of virtual memory regions protection. -# Address Space Layout Randomization can help defeat certain types of buffer -# overflow attacks. Setting parameter 2 will randomize the positions of -# the stack, VDSO page, shared memory regions, and the data segment. -kernel.randomize_va_space = 2 - -# Controls the default max size of queue and default max size of a message. -# I use these values from IBM DB2 user manual most of the time. - -kernel.msgmax = 65536 -kernel.msgmnb = 65536 -kernel.msgmni = 32000 - -# Set the system wide maximum number of shared memory segments. -# value = 256*. But Oracle and IBM recommends 4096. -kernel.shmmni = 4096 - -# Define the maximum size in bytes of a single shared memory segment that a -# Linux process can allocate in its virtual address space. -# value = . -kernel.shmmax = 17179869184 - -# Sets the total amount of shared memory pages that can be used system-wide. -# Hence, SHMALL should always be at least 2*/. -# To find the default PAGE_SIZE run command $getconf PAGE_SIZE. -kernel.shmall = 8388608 - -# Setting Semaphores. -# = Oracle recommends at least 250. -# = * Oracle recommends SEMMSL to be at least 32000. -# = Oracle recommends to set SEMOPM to a minimum value of 100 -# = *256 but Oracle set SEMMNI at least 128. -# Syntax is kernel.sem = -kernel.sem = 250 1024000 100 2048 -# kernel.sem = 250 1024000 100 4096 - -# Set number of message queue identifiers. -# value = 1024*. -kernel.msgmni = 8192 -# kernel.msgmni = 16384 - -# This toggle indicates whether restrictions are placed on exposing kernel -# addresses via /proc and other interfaces. -kernel.kptr_restrict = 1 - -# 0 - (default) - traditional behaviour. Any process which has changed -# privilege levels or is execute only will not be dumped. -# 1 - (debug only) - all processes dump core when possible. The core dump is -# owned by the current user and no security is applied. -# 2 - (suidsafe) - any binary which normally not be dumped is dumped readable -# by root only. End user can remove such a dump but not access it directly. -fs.suid_dumpable = 0 - -# Increase size of file handles and inode cache. -# value = <_PHYS_PAGES>*/1024/10. -# Find values = $getconf _PHYS_PAGES and $getconf PAGE_SIZE. -fs.file-max = 785928 diff --git a/cloud/classic/prepare-node/config/sysctl/2-memory.conf b/cloud/classic/prepare-node/config/sysctl/2-memory.conf deleted file mode 100644 index d5f09d149..000000000 --- a/cloud/classic/prepare-node/config/sysctl/2-memory.conf +++ /dev/null @@ -1,49 +0,0 @@ -#------------------------------------------------------------------------------# -# MEMORY SUBSYSTEM OPTIONS # -#------------------------------------------------------------------------------# - -# If we have lots of memory we will avoid using swap. -# We want swappiness to be as close to zero as possible. -vm.swappiness = 1 - -# Tell Linux that we want it to prefer inode/dentry cache to other caches. -# Higher priority to inode caching helps to avoid disk seeks for inode loading. -vm.vfs_cache_pressure = 50 - -# To avoid long IO stalls for write cache in a real life situation with -# different workloads we typically want to limit the kernel dirty cache size. -# Rule of thumb: = 1/4 to 1/2 of the . -vm.dirty_background_ratio = 5 -vm.dirty_ratio = 10 - -# Set the 50% of available memory overcommit policy. -vm.overcommit_ratio = 50 -# vm.overcommit_memory = 0 - -# But if you run out of memory use next settings that don't do overcommit and -# the total address space will be +*/100. -# vm.overcommit_ratio = 100 -# vm.overcommit_memory = 2 -# And more. If you run Docker or Redis and have some memory troubles try this: -# vm.overcommit_ratio = 50 -vm.overcommit_memory = 1 - -# Specifies the minimum virtual address that a process is allowed to mmap. -# It avoids "kernel NULL pointer dereference" defects. -vm.mmap_min_addr = 4096 - -# Keep at least 128MB of free RAM space available. When set to its default -# value it is possible to encounter memory exhaustion symptoms when free memory -# should, in fact, be available. Setting to 5-6% of the -# total physical memory but no more than 2GB can prevent this problem. -vm.min_free_kbytes = 22528 - -# RED HAT DOES NOT RECOMMEND TUNNING THIS PARAMETER! -# Specifies the number of centiseconds (hundredths of a second) dirty data -# remains in the page cache before it is eligible to be written back to disk. -# vm.dirty_expire_centisecs = 6000 - -# RED HAT DOES NOT RECOMMEND TUNNING THIS PARAMETER! -# Specifies the length of the interval between kernel flusher threads waking -# and writing eligible data to disk. -# vm.dirty_writeback_centisecs = 6000 diff --git a/cloud/classic/prepare-node/config/sysctl/3_network_security.conf b/cloud/classic/prepare-node/config/sysctl/3_network_security.conf deleted file mode 100644 index 3c5195ac3..000000000 --- a/cloud/classic/prepare-node/config/sysctl/3_network_security.conf +++ /dev/null @@ -1,73 +0,0 @@ -#------------------------------------------------------------------------------# -# NETWORK SECURITY TWEAKS # -#------------------------------------------------------------------------------# - -# Allowed local port range. Increase Ephemeral Ports. -net.ipv4.ip_local_port_range = 1024 65535 - -# Set Source Address Verification in all interfaces prevent spoofing attacks. -net.ipv4.conf.default.rp_filter = 1 -net.ipv4.conf.all.rp_filter = 1 - -# Uncomment the next line to enable TCP/IP SYN cookies. -# Note: This may impact IPv6 TCP sessions too. -# Note: This is evil to use this on high-load servers. -#net.ipv4.tcp_syncookies = 1 -#net.ipv4.tcp_syn_retries = 2 -#net.ipv4.tcp_synack_retries = 2 - -net.ipv4.ip_forward = 1 -net.ipv4.conf.all.forwarding = 1 -net.ipv4.conf.default.forwarding = 1 -net.ipv6.conf.all.forwarding = 1 -net.ipv6.conf.default.forwarding = 1 - -# Do not accept ICMP redirects. It prevents MITM attacks. -net.ipv4.conf.all.accept_redirects = 0 -net.ipv4.conf.default.accept_redirects = 0 -net.ipv4.conf.all.secure_redirects = 0 -net.ipv4.conf.default.secure_redirects = 0 -net.ipv6.conf.all.accept_redirects = 0 -net.ipv6.conf.default.accept_redirects = 0 - -# Do not send ICMP redirects because we are not a router. -net.ipv4.conf.all.send_redirects = 0 -net.ipv4.conf.default.send_redirects = 0 - -# Do not accept IP source route packets because we are not a router. -net.ipv4.conf.all.accept_source_route = 0 -net.ipv4.conf.default.accept_source_route = 0 -net.ipv6.conf.all.accept_source_route = 0 -net.ipv6.conf.default.accept_source_route = 0 - -# Do not relay bootp. -net.ipv4.conf.all.bootp_relay = 0 - -# Do not proxy arp for anyone. -net.ipv4.conf.all.proxy_arp = 0 - -# Do not ignore directed pings. -net.ipv4.icmp_echo_ignore_all = 0 - -# Enable ignoring broadcasts request. -net.ipv4.icmp_echo_ignore_broadcasts = 1 - -# Enable bad error message protection. -net.ipv4.icmp_ignore_bogus_error_responses = 1 - -# Disable ipv6 cos it is evil. -net.ipv6.conf.all.disable_ipv6 = 1 -net.ipv6.conf.default.disable_ipv6 = 1 -net.ipv6.conf.lo.disable_ipv6 = 1 - -# Do not auto-configure IPv6 -net.ipv6.conf.all.autoconf=0 -net.ipv6.conf.all.accept_ra=0 -net.ipv6.conf.default.autoconf=0 -net.ipv6.conf.default.accept_ra=0 -#net.ipv6.conf.eth0.autoconf=0 -#net.ipv6.conf.eth0.accept_ra=0 - -# Log Martian Packets. -# net.ipv4.conf.all.log_martians = 1 -# net.ipv4.conf.default.log_martians = 1 diff --git a/cloud/classic/prepare-node/config/sysctl/4_network_speed.conf b/cloud/classic/prepare-node/config/sysctl/4_network_speed.conf deleted file mode 100644 index 1bbab0c46..000000000 --- a/cloud/classic/prepare-node/config/sysctl/4_network_speed.conf +++ /dev/null @@ -1,177 +0,0 @@ -#------------------------------------------------------------------------------# -# NETWORK SPEED TWEAKS (Khafan Server) # -#------------------------------------------------------------------------------# - -# Turn on the tcp_timestamps. More accurate timestamp make TCP congestion -# control algorithms work better and are recommended for fast networks. -net.ipv4.tcp_timestamps = 1 - -# Increase number of incoming connections backlog. Try up to 262144. -net.core.netdev_max_backlog = 16384 - -# Set max number half open SYN requests to keep in memory. -net.ipv4.tcp_max_syn_backlog = 128 -net.ipv4.tcp_max_tw_buckets = 8192 - -# Do not cache ssthresh from previous connection. -net.ipv4.tcp_no_metrics_save = 1 -net.ipv4.tcp_moderate_rcvbuf = 1 - -# Explicitly set htcp or cubic as the congestion control. To get a list of -# congestion control algorithms that are available in your kernel run: -# command $sysctl net.ipv4.tcp_available_congestion_control and to find algo -# that can be loaded run $grep TCP_CONG /boot/config-$(uname -r). -# also read this - http://fasterdata.es.net/host-tuning/linux/ -net.ipv4.tcp_congestion_control = cubic - -# For servers with tcp-heavy workloads, enable queue management scheduler. -# Highly recommended for CentOS7/Debian8 hosts. -# net.core.default_qdisc = pfifo_fast -net.core.default_qdisc = fq - -# If you are using Jumbo Frames, also set this tunable. -# net.ipv4.tcp_mtu_probing = 1 - -# Set max number of queued connections on a socket. The default value usually -# is too low. Raise this value substantially to support bursts of a request. -net.core.somaxconn = 8192 - -# Try to reuse time-wait connections. -# But don't recycle them (recycle can break clients behind NAT). -net.ipv4.tcp_tw_recycle = 0 -net.ipv4.tcp_tw_reuse = 1 - -# Avoid falling back to slow start after a connection goes idle. -# Keep it 0 usually. -net.ipv4.tcp_slow_start_after_idle = 0 - -# Enable TCP window scaling for high-throughput blazing fast TCP performance. -net.ipv4.tcp_window_scaling = 1 - -# Decrease the time default value for tcp_fin_timeout connection. -net.ipv4.tcp_fin_timeout = 15 - -# Decrease the time default value for connections to keep alive. -net.ipv4.tcp_keepalive_time = 512 -net.ipv4.tcp_keepalive_probes = 10 -net.ipv4.tcp_keepalive_intvl = 32 - -# Limit orphans because each orphan can eat up to 16M of unswappable memory. -net.ipv4.tcp_max_orphans = 8192 -net.ipv4.tcp_orphan_retries = 0 - -# Increase the maximum memory used to reassemble IP fragments. -net.ipv4.ipfrag_high_thresh = 262144 -net.ipv4.ipfrag_low_thresh = 196608 - -# Increase size of RPC datagram queue length. -net.unix.max_dgram_qlen = 256 - -# Do not allow the arp table to become bigger than this -net.ipv4.neigh.default.gc_thresh3 = 1024 - -# Tell the gc when to become aggressive with arp table cleaning. -net.ipv4.neigh.default.gc_thresh2 = 512 - -# Adjust where the gc will leave arp table alone. -net.ipv4.neigh.default.gc_thresh1 = 128 - -# Adjust to arp table gc to clean-up more often -net.ipv4.neigh.default.gc_interval = 30 - -# Increase TCP queue length in order to reduce a performance spike with -# relation to timestamps generation. -net.ipv4.neigh.default.proxy_qlen = 96 -net.ipv4.neigh.default.unres_qlen = 6 - -# Enable a fix for RFC1337 - time-wait assassination hazards in TCP. -net.ipv4.tcp_rfc1337 = 1 - -# This will ensure that immediately subsequent connections use the new values. -net.ipv4.route.flush = 1 -net.ipv6.route.flush = 1 - -# Set 1 if you want to disable Path MTU discovery - a technique to determine -# the largest Maximum Transfer Unit possible on your path. -net.ipv4.ip_no_pmtu_disc = 0 - -# Use Selective ACK which can be used to signify that specific packets are -# missing - therefore helping fast recovery. -net.ipv4.tcp_sack = 1 - -# Enables Forward Acknowledgment which works with Selective Acknowledgment. -# Intel recommends to turn in always on. -net.ipv4.tcp_fack = 1 - -# ECN allows end-to-end notification of network congestion without dropping -# packets. -# https://github.com/systemd/systemd/issues/9748 -net.ipv4.tcp_ecn = 2 -net.ipv4.tcp_ecn_fallback = 1 - -net.ipv4.tcp_reordering = 3 - -# Enable(0)/disable(1) the PreQueue entirely. Allow tcp/ip stack prefer -# low latency instead of high throughput. Try option 1 in slow Wi-Fi networks. -# IBM recommend set it to 0. -net.ipv4.tcp_low_latency = 0 - -# Enables Forward RTO-Recovery (F-RTO) defined in RFC4138. F-RTO is an enhanced -# recovery algorithm for TCP retransmission timeouts. It is usually good to use -# in wireless environments where packet loss is typically due to random radio -# interference rather than intermediate router congestion. Option 1 - basic -# version is enabled. Option 2 enables SACK-enhanced F-RTO if flow uses SACK. -# Default is 2 but changing it to 1 sometimes improves the performance. -net.ipv4.tcp_frto = 1 - -# 0 - Rate halving based; a smooth and conservative response, results in halved -# cwnd and ssthresh after one RTT. 1 - Very conservative response; not -# recommended because even though being valid, it interacts poorly with the -# rest of Linux TCP, halves cwnd and ssthresh immediately. -# 2 - Aggressive response; undoes congestion control measures that are now -# known to be unnecessary (ignoring the possibility of a lost retransmission -# that would require TCP to be more cautious), cwnd and ssthresh are restored -# to the values prior timeout. Default is 0. -# Also on some distribution this tunable is deprecated. -# net.ipv4.tcp_frto_response = 2 - -# Enable TCP Fast Open (RFC7413) to send and accept data in the opening -# SYN-packet. It will not do any troubles with not supported hosts -# but it will do guaranteed speedup handshake for supported ones. -net.ipv4.tcp_fastopen = 3 - -# Set UDP parameters. Adjust them for your network. -net.ipv4.udp_mem = 45792 61058 91584 -# net.ipv4.udp_mem = 8388608 12582912 16777216 -# net.ipv4.udp_rmem_min = 65536 -# net.ipv4.udp_wmem_min = 65536 - -# Increase Linux auto-tuning TCP buffer limits. -# Set max to 16MB buffer (16777216) for 1GE network. -net.core.rmem_max = 16777216 -net.core.wmem_max = 16777216 -net.core.rmem_default = 262144 -net.core.wmem_default = 262144 -net.core.optmem_max = 40960 -net.ipv4.tcp_rmem = 4096 87380 16777216 -net.ipv4.tcp_wmem = 4096 65536 16777216 - -# Setting 10GE capable host to consume a maximum of 32M-64M per socket ensures -# parallel streams work well and do not consume a majority of system resources. -# Set max 32MB buffer (33554432) for 10GE network. -# net.core.rmem_max = 33554432 -# net.core.wmem_max = 33554432 -# net.core.rmem_default = 33554432 -# net.core.wmem_default = 33554432 -# net.core.optmem_max = 40960 -# net.ipv4.tcp_rmem = 4096 87380 33554432 -# net.ipv4.tcp_wmem = 4096 65536 33554432 - -# If you have a lot of memory set max 54MB buffer (56623104) for 10GE network. -# net.core.rmem_max = 56623104 -# net.core.wmem_max = 56623104 -# net.core.rmem_default = 56623104 -# net.core.wmem_default = 56623104 -# net.core.optmem_max = 40960 -# net.ipv4.tcp_rmem = 4096 87380 56623104 -# net.ipv4.tcp_wmem = 4096 65536 56623104 diff --git a/cloud/classic/prepare-node/deploy.sh b/cloud/classic/prepare-node/deploy.sh deleted file mode 100755 index fe5d0f39e..000000000 --- a/cloud/classic/prepare-node/deploy.sh +++ /dev/null @@ -1,308 +0,0 @@ -#!/usr/bin/env bash - -set -Eeuo pipefail -trap "echo '❌ Error'" ERR - -ALWATR_LIB=../lib -source $ALWATR_LIB/common.sh - -thisPath="$(pwd)" -cd $thisPath - -envPath="${1:-}" -[ ! -z "${1:-}" ] && shift - -command="${1:-help}" -[ ! -z "${1:-}" ] && shift - -sshPort=404 - -function command_info() { - echoStep "Node info" - - remoteShell ' - cat /etc/os-release - ip addr show - docker version - free -h - docker ps --all - ' -} - -function command_keyscan() { - echoStep "Setup ssh: update local known_hosts" - sshKeyCleanup $deployHost - echoGap -} - -function command_ssh() { - echoStep "Setup openssh" - - echoStep "Setup ssh: change port" - local oldSshPort=$sshPort - sshPort=22 - sshKeyCleanup $deployHost - remoteShell 'echo "Port 404" >> /etc/ssh/sshd_config; systemctl restart ssh && echo "ssh restarted"' || true - echoGap - - sshPort=$oldSshPort - sshKeyCleanup $deployHost - - echoStep "Setup ssh: add ssh auth keys" - scopy ./config/ssh-auth "$remoteHost:~/.ssh/authorized_keys" - copyConfigFile ssh-auth '~/.sak' - - echoGap - - echoStep "Setup ssh: reconfigure openssh-server" - remoteShell 'rm -v /etc/ssh/ssh_host_*; dpkg-reconfigure openssh-server --default-priority; systemctl restart ssh' - sshKeyCleanup $deployHost - - echoStep "Setup ssh: add sshd_config" - copyConfigFile ssh-banner /etc/ssh/banner - copyConfigFile ssh-config /etc/ssh/sshd_config - - echoStep "Setup ssh: add ssh key" - copyConfigFile ssh-rsa "~/.ssh/id_rsa" - copyConfigFile ssh-rsa.pub "~/.ssh/id_rsa.pub" - remoteShell 'chmod 600 ~/.ssh/id_rsa' - - echoStep "Setup ssh: restart ssh and test" - - remoteShell 'systemctl restart ssh' - sleep 1 - remoteShell "echo 'SSH OK ;)'" -} - -function command_apt() { - echoStep "Prepare debian" - - echoStep "Prepare debian: add apt sources.list" - copyConfigFile apt-source-list /etc/apt/sources.list - - echoStep "Prepare debian: upgrade" - - remoteShell ' - if [ ! -d /etc/apt/sources.list.bk ] && [ "$(ls -A /etc/apt/sources.list.d/)" ] - then - mkdir -p /etc/apt/sources.list.bk - mv -v /etc/apt/sources.list.d/* /etc/apt/sources.list.bk/ - fi - uname -a - apt clean - apt update - apt autoremove -y --purge - apt list --upgradable - apt dist-upgrade -y - apt autoremove -y --purge - apt upgrade -y - apt autoremove -y --purge - uname -a - ' - - remoteShell 'apt install -y curl ca-certificates gnupg screen rsync htop iotop' -} - -function command_dns() { - echoStep "Update DNS" - - copyConfigFile resolv.conf /etc/resolv.conf -} - -function command_time() { - echoStep "Config timezone" - - remoteShell ' - unlink /etc/localtime - ln -s /usr/share/zoneinfo/Asia/Tehran /etc/localtime - - date - hwclock --systohc - date - ' -} - -function command_docker() { - echoStep "Install docker" - - echoStep "Install docker: cleanup old versions" - remoteShell ' - for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do - apt remove -y --purge $pkg - done - ' - echoStep "Install docker: sources.list" - remoteShell ' - if [ ! -f /etc/apt/keyrings/docker.gpg ] - then - install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg - chmod a+r /etc/apt/keyrings/docker.gpg - fi - - echo \ - "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ - "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" > /etc/apt/sources.list.d/docker.list - ' - - echoStep "Install docker: install" - remoteShell ' - cat /etc/apt/sources.list.d/docker.list - apt update - apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - apt autoremove -y --purge - ' - - command_dtest -} - -function command_dtest() { - echoStep "Test docker" - - remoteShell ' - docker --version - docker compose version - echo '' - docker image rm hello-world || true - echo '' - docker pull hello-world - echo '' - docker run --rm hello-world - echo '' - docker image rm hello-world - ' -} - -function command_sysctl() { - echoStep "Config sysctl" - - remoteShell ' - sysctl --all - echo '' - - if [ ! -d /etc/sysctl.d.bk ] - then - mkdir -p /etc/sysctl.d.bk - mv -v /etc/sysctl.d/* /etc/sysctl.d.bk/ || true - mv -v /etc/sysctl.conf /etc/sysctl.d.bk/ || true - fi - - if [ -f /etc/sysctl.conf ] - then - rm -fv /etc/sysctl.conf - fi - ' - - rcopy ./config/sysctl/ $remoteHost:/etc/sysctl.d/ - # if [ -d "./config/$envName/sysctl" ]; then - # rcopy "./config/$envName/sysctl/" $remoteHost:/etc/sysctl.d/ - # fi - - remoteShell 'sysctl --system' || remoteShell 'sysctl --system' - sleep 1 -} - -function command_disk() { - echoStep "Configure disk" - remoteShell ' - cat /sys/block/sda/queue/scheduler || true - echo scheduler="noop" > /etc/default/scheduler - ' - command_reboot - command_ping - remoteShell 'cat /sys/block/sda/queue/scheduler' || true -} - -function command_reboot() { - echoStep "Reboot" - remoteShell 'reboot' || true - sleep 2 -} - -function command_net() { - echoStep "Config network interfaces" - local remotePath=/etc/network/interfaces - - copyConfigFile net.conf $remotePath || return 0 - - remoteShell " - if ! systemctl restart networking; then - echo 'Failed to restart network service. Rolling back...' - cp -v $remotePath.bak $remotePath - systemctl restart networking - else - echo 'Network service restarted.' - if ! ping -c 1 -W 1 1.1.1.1; then - echo 'Failed to ping, rolling back...' - cp -v $remotePath.bak $remotePath - systemctl restart networking - fi - fi - " -} - -# TODO: function command_hostname() {} - -function command_full() { - echoStep "Full setup..." - command_ping 1 - command_ssh - - command_time - command_net - command_dns - - command_apt - - command_sysctl - command_disk - command_docker - - command_reboot - command_ping - echoLogo -} - -function command_exec() { - echoStep "Exec $@" - remoteShell $@ -} - -function command_sh() { - echoStep "Remote shell" - ssh -o ConnectTimeout=2 -o ConnectionAttempts=1 -p ${sshPort:-22} -t $remoteHost -} - -function command_help() { - echo " - Usage: ./deploy.sh ./env/your.env COMMAND [OPTIONS] - - Alwatr prepare node script. - - Command: - full Full setup on clean npde. - ping Check server is up with ping. - info Get server info. - keyscan add server to known_hosts. - ssh Setup ssh. - apt Update source list, Upgrade, Dist update. - dns Setup dns. - time Config time and timezone. - docker Install and setup docker & docker compose. - dtest Test docekr. - sysctl Config sysctl. - exec Execute custome command. - sh Access remote shell. - " -} - -echoLogo - -loadEnv - -remoteHost="${deployUser:-root}@${deployHost:-None}" -remotePath="${remoteHost}:${deployPath:-/lib/setup}" -envName=$(basename $envPath .env) - -sshAgent -command_${command} $@ diff --git a/cloud/classic/prepare-node/env/example.env b/cloud/classic/prepare-node/env/example.env deleted file mode 100644 index 9cf06ba8e..000000000 --- a/cloud/classic/prepare-node/env/example.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX18QTWXgfwfTvCcY7mQA9jbvgfK8WVFU6/BBJ0xX2h5DS5WjLkBu7ZY8 -7j2mIsqmIkinK/KUrgD7LuEhAV2ZqnKIlW5RfAvF3ztwnthTSb6JQnRKApBi2VBM -EQUSqlFea/lkFswab5rgrw== diff --git a/cloud/classic/prepare-node/env/fl.env b/cloud/classic/prepare-node/env/fl.env deleted file mode 100644 index f4b01b249..000000000 --- a/cloud/classic/prepare-node/env/fl.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX18iZ2uSvIl+qrT9ADdDow6AvaoVgZu1WC3fogq+Ii1Hwti70HxqlIhZ diff --git a/cloud/classic/prepare-node/env/mci1.env b/cloud/classic/prepare-node/env/mci1.env deleted file mode 100644 index 0e8721f5f..000000000 --- a/cloud/classic/prepare-node/env/mci1.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX18mp1G4+dRk/SQwGzJgn9LnWFLfjnrQztvi4zUoogw7zafMhifjrMYR diff --git a/cloud/classic/prepare-node/env/mci2.env b/cloud/classic/prepare-node/env/mci2.env deleted file mode 100644 index 4f96570b8..000000000 --- a/cloud/classic/prepare-node/env/mci2.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX1+MyU61kZHNm5PISMF/ZcDRuuYk7GdBwrDFx2wH9YAmvv0JFT5G3Mpx diff --git a/cloud/classic/prepare-node/env/onix1.env b/cloud/classic/prepare-node/env/onix1.env deleted file mode 100644 index 578320228..000000000 --- a/cloud/classic/prepare-node/env/onix1.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX1+Pwcl5qS/aLDazNX5s6jYgaQoBLqK15xZTE0A541XHaqIRPMSXcgSy diff --git a/cloud/classic/prepare-node/env/pazh-fl.env b/cloud/classic/prepare-node/env/pazh-fl.env deleted file mode 100644 index 1dc745b28..000000000 --- a/cloud/classic/prepare-node/env/pazh-fl.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX18Nl44/ciYZMy639rSlF5rUmFCi+cW9PyPzhg7uaJraEzZkN+jzgRHb diff --git a/cloud/classic/prepare-node/env/pazh-ir.env b/cloud/classic/prepare-node/env/pazh-ir.env deleted file mode 100644 index c4994b00d..000000000 --- a/cloud/classic/prepare-node/env/pazh-ir.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX1+BmFq2reDCPBgfpl6yKwUPi7H9PQnq9t4WxndTsYF1O5looWbDhvBc diff --git a/cloud/classic/prepare-node/env/pazh-us.env b/cloud/classic/prepare-node/env/pazh-us.env deleted file mode 100644 index 49cb6461e..000000000 --- a/cloud/classic/prepare-node/env/pazh-us.env +++ /dev/null @@ -1 +0,0 @@ -U2FsdGVkX18frgR5gM/k6W7P+h4hNcuoL3AYOIKQkgHvG1MuzCZzyM4L2EjSPqlQ diff --git a/cloud/classic/static-site/compose.yml b/cloud/classic/static-site/compose.yml deleted file mode 100644 index 2381d39ad..000000000 --- a/cloud/classic/static-site/compose.yml +++ /dev/null @@ -1,41 +0,0 @@ -networks: - internal: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - ssc: - image: $sscImage - - cpu_count: 1 - cpu_shares: 1024 - mem_limit: 256m - - restart: unless-stopped - - networks: - alwatr-public-network: - - environment: - - NGINX_ACCESS_LOG=${accessLog:-off} - - volumes: - - type: bind - source: ./_data/ - target: /var/www/html/ - bind: - create_host_path: true - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:$domain - traefik.frontend.entryPoints: http, https - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/classic/static-site/deploy.sh b/cloud/classic/static-site/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/classic/static-site/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/static-site/env/ssc-test.env b/cloud/classic/static-site/env/ssc-test.env deleted file mode 100644 index 63e3ae87d..000000000 --- a/cloud/classic/static-site/env/ssc-test.env +++ /dev/null @@ -1,5 +0,0 @@ -U2FsdGVkX192Kh9uHSNs9WMnf/ZvshV2leAW83dQbhB1ZXyjvZErxETyO2Fi66x3 -mu657QLHEWBxWGSRxF6MpH6rndGMNPhwoYSTgagXNSfQESutyQpSPh11k+dkUdWX -Qeh0fXXdytwOymut8vcVM3bvlmwSdLjrZZynM48BrbMWIQS+4lmfSXIAgLt+E1zn -Ie8zXGmvU12ZDNH43cdMoEbmZstjn3OWwCwWyFambmyKtKBiDCg6Teunza2GJT02 -dgcASa5SQh9oC4X9g5SQ6A== diff --git a/cloud/classic/traefik-proxy/README.md b/cloud/classic/traefik-proxy/README.md deleted file mode 100644 index f61d286cf..000000000 --- a/cloud/classic/traefik-proxy/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Edge Reverse Proxy diff --git a/cloud/classic/traefik-proxy/_up.sh b/cloud/classic/traefik-proxy/_up.sh deleted file mode 100755 index 4420f9b1b..000000000 --- a/cloud/classic/traefik-proxy/_up.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -ex - -docker network create alwatr-public-network --subnet=172.18.0.0/16 2>/dev/null || true - -[ ! -d _data ] && mkdir _data -[ ! -f _data/acme.json ] && touch _data/acme.json -chmod 600 _data/acme.json - -docker compose up --detach --remove-orphans --force-recreate diff --git a/cloud/classic/traefik-proxy/compose.yml b/cloud/classic/traefik-proxy/compose.yml deleted file mode 100644 index 219b59102..000000000 --- a/cloud/classic/traefik-proxy/compose.yml +++ /dev/null @@ -1,48 +0,0 @@ -networks: - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - service-proxy: - image: ${TRAEFIK_IMAGE} - - networks: - - alwatr-public-network - - restart: unless-stopped - - cpu_shares: 2048 - mem_limit: ${MEMORY_LIMIT:-256m} - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - ports: - - ${HOST:-0.0.0.0}:80:80 - - ${HOST:-0.0.0.0}:443:443 - - volumes: - - type: bind - source: /var/run/docker.sock - target: /var/run/docker.sock - - type: bind - source: ./traefik.toml - target: /traefik.toml - read_only: true - - type: bind - source: ./_data - target: /data - bind: - create_host_path: true - - labels: - traefik.enable: true - traefik.port: 8080 - traefik.frontend.rule: Host:${DOMAIN} - traefik.frontend.entryPoints: http, https - traefik.frontend.auth.basic.users: ${AUTH} - traefik.frontend.redirect.entryPoint: https diff --git a/cloud/classic/traefik-proxy/deploy.sh b/cloud/classic/traefik-proxy/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/traefik-proxy/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/traefik-proxy/env/fl.env b/cloud/classic/traefik-proxy/env/fl.env deleted file mode 100644 index 03ad2a2d1..000000000 --- a/cloud/classic/traefik-proxy/env/fl.env +++ /dev/null @@ -1,6 +0,0 @@ -U2FsdGVkX18/exGTosLc/IJbSBSlK5Bo2DGJN9ZyDnPvgcGE8syd7EG58JuF/l+q -pFpVeMPEq9fX0fDUDPmcXvNS/LnO8he9fMTqONb/2zI7lUapfVFGi03B+1Bgr19v -NYI+LbEXeSCArVO+4jFDOqkhUNfGQyoRkBjNwJYXnpxmjLzI06O6bn1inJeW6wwA -X2wCe236M0ygBF/A488jpOvxMFMGEGxrbXVIp0gdbOJgU0N8FBddxx69T28Dypy4 -IuODDbYOVkqUBpVy1V64UbbuqBB/8x5BAwkDoNf/qVlIPKzFuX+UmdzoGhQHhWxG -SPsaw3FOx0XN8se99ZH5BKW6QRKhi1Py9GgnAmYTB0c= diff --git a/cloud/classic/traefik-proxy/env/mci1.env b/cloud/classic/traefik-proxy/env/mci1.env deleted file mode 100644 index aa92a66d2..000000000 --- a/cloud/classic/traefik-proxy/env/mci1.env +++ /dev/null @@ -1,6 +0,0 @@ -U2FsdGVkX18pPooeTqF0qKXazmk7VYB/CPI3ib5NFochb75VyfPROGfAupYG8hCT -ZHswKjum+NRyuKVheaZvM0EKhxzsPGVmQz76qrLBpBwo1ScrbAmDanBvIIMdjvKq -PDOAukckR5LUzi09PYASHwSU2ZPYqiXOtUjgJnjhpIx6oF8ivqC7ntpZRdBEokRw -QR+WDqNkGzVSM7Sghy4nX4EFZtujk5c34f9sJob24e6NI/Kfp9RFCLpYVfJFc/E1 -u9whxgWKFqwlATHSGzPwES4WCUPovLPpn3VA7B2Wrqag6AS9FWFuJG9rj77poGXp -URsQQnj2W57t8QamWw1IHA== diff --git a/cloud/classic/traefik-proxy/env/mci2.env b/cloud/classic/traefik-proxy/env/mci2.env deleted file mode 100644 index a266e978e..000000000 --- a/cloud/classic/traefik-proxy/env/mci2.env +++ /dev/null @@ -1,6 +0,0 @@ -U2FsdGVkX1+svatR9mmz8oKbkVW+cZf8GjyO1Us0BPR3UIgnLrze2qnXtv7y2SEw -e2f6F9d6uyfHNBAB9RUHEouLabOsAfAxYJM8BU5IzAaXW25GT+mFxRjD5McMSXlw -8bSWzO9fN/d7m5h0pZjGNBq+B5ZtXR8Bcl/7PEz1XIKgfFlDX+/2spTy8KAgEdxb -FYFkfTh5wnjeJdysUitTc7bYLYA7t2XddMPazvFCYcMqDoAQZaQFvJ00dqUTuJwE -wNmMwc32LMbTUa90l4xiunGLWYsSkyvKOm4khJ/K0aOMWDkpqVBrbJhxlwiK7FOi -YJ5yZJf+3St66KjTH6q03Q== diff --git a/cloud/classic/traefik-proxy/traefik.toml b/cloud/classic/traefik-proxy/traefik.toml deleted file mode 100644 index 91fa83370..000000000 --- a/cloud/classic/traefik-proxy/traefik.toml +++ /dev/null @@ -1,311 +0,0 @@ -# https://doc.traefik.io/traefik/v1.7/configuration/commons/ - -# Enable debug mode. -# This will install HTTP handlers to expose Go expvars under /debug/vars and -# pprof profiling data under /debug/pprof/. -# The log level will be set to DEBUG unless `logLevel` is specified. -# -# Optional -# Default: false -# -# debug = true - -# Periodically check if a new version has been released. -# -# Optional -# Default: true -# -# checkNewVersion = false - -# Tells traefik whether it should keep the trailing slashes in the paths (e.g. /paths/) or redirect to the no trailing slash paths instead (/paths). -# -# Optional -# Default: false -# -# keepTrailingSlash = false - -# Providers throttle duration. -# -# Optional -# Default: "2s" -# -# providersThrottleDuration = "2s" - -# Controls the maximum idle (keep-alive) connections to keep per-host. -# -# Optional -# Default: 200 -# -# maxIdleConnsPerHost = 200 - -# If set to true invalid SSL certificates are accepted for backends. -# This disables detection of man-in-the-middle attacks so should only be used on secure backend networks. -# -# Optional -# Default: false -# -# insecureSkipVerify = true - -# Register Certificates in the rootCA. -# -# Optional -# Default: [] -# -# rootCAs = [ "/mycert.cert" ] - -# Allow the use of 0 as server weight. -# - false: a weight 0 means internally a weight of 1. -# - true: a weight 0 means internally a weight of 0 (a server with a weight of 0 is removed from the available servers). -# -# Optional -# Default: false -# -# AllowMinWeightZero = true - -# Log level -# -# Optional -# Default: "ERROR" -# -# Accepted values, in order of severity: "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "PANIC" -# Messages at and above the selected level will be logged. -logLevel = "INFO" - -[traefikLog] - # By default the Traefik log is written to stdout in text format. - # filePath = "/path/to/traefik.log" - # format = "json" - -# [accessLog] - # By default it will write to stdout and produce logs in the textual Common Log Format (CLF), extended with additional fields. - # filePath = "/path/to/access.log" - # format = "json" - # [accessLog.filters] - # statusCodes = ["300-302", "400-410"] - -# Entrypoints to be used by frontends that do not specify any entrypoint. -# Each frontend can specify its own entrypoints. -# -# Optional -# Default: ["http"] -# -defaultEntryPoints = ["http", "https"] - -[entryPoints] - [entryPoints.http] - address = ":80" - compress = true - # [entryPoints.http.redirect] - # entryPoint = "https" - [entryPoints.https] - address = ":443" - compress = true - [entryPoints.https.tls] - minVersion = "VersionTLS11" - -# Enable retry sending request if network error -# https://doc.traefik.io/traefik/v1.7/configuration/commons/#retry-configuration -[retry] - - -# Enable Docker Provider. -[docker] - - # Docker server endpoint. Can be a tcp or a unix socket endpoint. - # - # Required - # - endpoint = "unix:///var/run/docker.sock" - - # Default base domain used for the frontend rules. - # Can be overridden by setting the "traefik.domain" label on a container. - # - # Optional - # - # domain = "webstatic.net" - - # Enable watch docker changes. - # - # Optional - # - watch = true - - # Override default configuration template. - # For advanced users :) - # - # Optional - # - # filename = "docker.tmpl" - - # Override template version - # For advanced users :) - # - # Optional - # - "1": previous template version (must be used only with older custom templates, see "filename") - # - "2": current template version (must be used to force template version when "filename" is used) - # - # templateVersion = 2 - - # Expose containers by default in Traefik. - # If set to false, containers that don't have `traefik.enable=true` will be ignored. - # - # Optional - # Default: true - # - exposedByDefault = false - - # Use the IP address from the binded port instead of the inner network one. - # - # In case no IP address is attached to the binded port (or in case - # there is no bind), the inner network one will be used as a fallback. - # - # Optional - # Default: false - # - #usebindportip = true - - # Use Swarm Mode services as data provider. - # - # Optional - # Default: false - # - swarmMode = false - - # Define a default docker network to use for connections to all containers. - # Can be overridden by the traefik.docker.network label. - # - # Optional - # - network = "alwatr-public-network" - - # Enable docker TLS connection. - # - # Optional - # - # [docker.tls] - # ca = "/etc/ssl/ca.crt" - # cert = "/etc/ssl/docker.crt" - # key = "/etc/ssl/docker.key" - # insecureSkipVerify = true - - -[api] - # Name of the related entry point - # - # Optional - # Default: "traefik" - # - # entryPoint = "traefik" - - # Enable Dashboard - # - # Optional - # Default: true - # - dashboard = true - - # Enable debug mode. - # This will install HTTP handlers to expose Go expvars under /debug/vars and - # pprof profiling data under /debug/pprof/. - # Additionally, the log level will be set to DEBUG. - # - # Optional - # Default: false - # - #debug = true - - -[acme] - - # Email address used for registration. - # - # Required - # - email = "alimihandoost@gmail.com" - - # File used for certificates storage. - # - # Optional (Deprecated) - # - #storageFile = "acme.json" - - # File or key used for certificates storage. - # - # Required - # - storage = "/data/acme.json" - - # Entrypoint to proxy acme apply certificates to. - # - # Required - # - entryPoint = "https" - - # If true, display debug log messages from the acme client library. - # - # Optional - # Default: false - # - acmeLogging = true - - # If true, override certificates in key-value store when using storeconfig. - # - # Optional - # Default: false - # - # overrideCertificates = true - - # Enable certificate generation on frontends host rules. - # - # Optional - # Default: false - # - onHostRule = true - - # CA server to use. - # Uncomment the line to use Let's Encrypt's staging server, - # leave commented to go to prod. - # - # Optional - # Default: "https://acme-v02.api.letsencrypt.org/directory" - # - # caServer = "https://acme-staging-v02.api.letsencrypt.org/directory" - - # Preferred chain to use. - # - # Optional - # Default: empty - # - preferredChain = "ISRG Root X1" - - # KeyType to use. - # - # Optional - # Default: "RSA4096" - # - # Available values : "EC256", "EC384", "RSA2048", "RSA4096", "RSA8192" - # - KeyType = "RSA2048" - - # Use a TLS-ALPN-01 ACME challenge. - # - # Optional (but recommended) - # - [acme.tlsChallenge] - - # Use a HTTP-01 ACME challenge. - # - # Optional - # - [acme.httpChallenge] - - # EntryPoint to use for the HTTP-01 challenges. - # - # Required - # - entryPoint = "http" - -# [file] - -# directory = "/conf.d/" -# watch = true diff --git a/cloud/classic/v2fly/_up.sh b/cloud/classic/v2fly/_up.sh deleted file mode 100755 index 1a2efb751..000000000 --- a/cloud/classic/v2fly/_up.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -ex - -echo 'وَجَعَلۡنَا مِنۢ بَيۡنِ أَيۡدِيهِمۡ سَدّٗا وَمِنۡ خَلۡفِهِمۡ سَدّٗا فَأَغۡشَيۡنَٰهُمۡ فَهُمۡ لَا يُبۡصِرُونَ' - -docker compose up --detach --remove-orphans --force-recreate diff --git a/cloud/classic/v2fly/add-uuid.sh b/cloud/classic/v2fly/add-uuid.sh deleted file mode 100755 index a20fc1b76..000000000 --- a/cloud/classic/v2fly/add-uuid.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -set -Eeuo pipefail -trap "echo '❌ Error'" ERR - -thisPath="$(pwd)" -cd $thisPath - -configPath="${1}" -count="${2-1}" - -for ((i=1; i<=$count; i++)) -do - uuid=$(uuidgen) - jq --arg uuid "$(v2ray uuid)" '.inbounds[0].settings.users += [$uuid]' ${configPath} > ${configPath}.new - mv ${configPath}.new ${configPath} -done diff --git a/cloud/classic/v2fly/compose.yml b/cloud/classic/v2fly/compose.yml deleted file mode 100644 index ef38b185f..000000000 --- a/cloud/classic/v2fly/compose.yml +++ /dev/null @@ -1,27 +0,0 @@ -services: - dockovpn: - image: docker.io/v2fly/v2fly-core:latest - - ports: - - ${PORT}:${PORT} - - ${PORT}:${PORT}/udp - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - command: - - run - - -c - - /etc/config/${CONFIG}.json - - -format - - jsonv5 - - env_file: .env - - volumes: - - type: bind - source: ./secret - target: /etc/config - read_only: true diff --git a/cloud/classic/v2fly/connect.sh b/cloud/classic/v2fly/connect.sh deleted file mode 100755 index 76a255f25..000000000 --- a/cloud/classic/v2fly/connect.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -Eeuo pipefail -trap "echo '❌ Error'" ERR - -thisPath="$(pwd)" -cd $thisPath - -echo 'وَجَعَلۡنَا مِنۢ بَيۡنِ أَيۡدِيهِمۡ سَدّٗا وَمِنۡ خَلۡفِهِمۡ سَدّٗا فَأَغۡشَيۡنَٰهُمۡ فَهُمۡ لَا يُبۡصِرُونَ' - -v2ray run -format=jsonv5 -c ${1:-./secret/dev/vmess-client.json} diff --git a/cloud/classic/v2fly/deploy.sh b/cloud/classic/v2fly/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/classic/v2fly/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/v2fly/env/dev-edge-fl.env b/cloud/classic/v2fly/env/dev-edge-fl.env deleted file mode 100644 index bd862fefa..000000000 --- a/cloud/classic/v2fly/env/dev-edge-fl.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX1/l/jzqpdl3CcfodfEKCxolEeAzuGkuBsiPuypICyl1juFcOpJqPWIN -GsaRVlbatmKcFv5BhyTUUDwj/L+H0TAJtCHxc8MkabidLIqnrIRrBTUJ9HinHfcr -CkDX2jzK/LvfMmOyaF9skA== diff --git a/cloud/classic/v2fly/env/dev-middle-mci2.env b/cloud/classic/v2fly/env/dev-middle-mci2.env deleted file mode 100644 index 9bd923427..000000000 --- a/cloud/classic/v2fly/env/dev-middle-mci2.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX19qDh3l4LPmfSt1+KHq++dJtw9C4MqgEPZ96EAGuKSvBp3nBlomzSxD -/s4aZQwYDkWNS8sKcCGRTIZ0spy7+QA3eTewWJNzNR1y2fJePS7k4NVr3qTLqs/t -lL2giMrOHa0XstBzUT4r6w== diff --git a/cloud/classic/v2fly/env/dev-middle-onix1.env b/cloud/classic/v2fly/env/dev-middle-onix1.env deleted file mode 100644 index 376be0456..000000000 --- a/cloud/classic/v2fly/env/dev-middle-onix1.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX19nbaHsw7Se5CsIX2W4VuprJGBJjE4ByegB6x6j6LjG5qsuYnXk0B7w -6iS0CXrMT40Cmb2CQ6aw5ffprKm1fsOqlno6nyVuukGl+v9oSMWJOgFQcKfwm4Fn -nbtM5MSSwJpGQ9aJRM8Jtw== diff --git a/cloud/classic/v2fly/env/pazh-edge-fl-1.env b/cloud/classic/v2fly/env/pazh-edge-fl-1.env deleted file mode 100644 index 1ddcef726..000000000 --- a/cloud/classic/v2fly/env/pazh-edge-fl-1.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX18GHqqqKPkP0bQ8pdaEABMne3CC1TZHeCsWR5uW0yvmAqGHjBMkDBQS -gYgFtppRA3LeP4HUm9uMl6wI9EZgSPBaZo4s3AWfZA36GP3D1t42ccgwXSRw8Oqz -+yDMpHW+PbdoPH9gSNtXeXfM8f1PV2DPUOUFaYJvse0= diff --git a/cloud/classic/v2fly/env/pazh-edge-fl-2.env b/cloud/classic/v2fly/env/pazh-edge-fl-2.env deleted file mode 100644 index ab46111a2..000000000 --- a/cloud/classic/v2fly/env/pazh-edge-fl-2.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX1/D95M5kssa+ZZlJYbArCFYhX8Ytl+2hM1Y+YOOf1RRaZSgHRYo76iv -F4drEtrJZ07S7il+e/DpUFPp1nmNCh+nf28VWUbLjbzhbRuWuIWf/tA8zCkQ9xp9 -VDfQ9BLczXYzf+op0wGY4QPTEy7VbyI6avEKLCQ0bVw= diff --git a/cloud/classic/v2fly/env/pazh-edge-ir.env b/cloud/classic/v2fly/env/pazh-edge-ir.env deleted file mode 100644 index b9aed78c0..000000000 --- a/cloud/classic/v2fly/env/pazh-edge-ir.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX1+sNooWLVRiB0kWGTguym6yMm9MvSo7wNqhEJmcL2mePQduQLdkEsG4 -4m3iImTttYvzEJWqa4S135kyDOhLIu1PKDLEu7duRIwQWsfyv6iIAgM44GV//MV+ -stT5damh9bz/R2B30KKfUJKptyLY+6ZOIkmyBFV7gW8= diff --git a/cloud/classic/v2fly/env/pazh-middle-1.env b/cloud/classic/v2fly/env/pazh-middle-1.env deleted file mode 100644 index 5553fc732..000000000 --- a/cloud/classic/v2fly/env/pazh-middle-1.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX18DSkDZTF/USirKOA0s8e2VqMZMuHYuPHpvM/+GWXTvBfC8azUGDzub -d9Oh23DMTLKhrupLt4xSNvunxQKj2+w7zxaoy6Hfgwh3OxnEGxwTXc9bQi2ANFPx -EqxLarY9mfR/vFRLOTnxOtkOOtf1GIHFIcQa+viKDGg= diff --git a/cloud/classic/v2fly/env/pazh-middle-2.env b/cloud/classic/v2fly/env/pazh-middle-2.env deleted file mode 100644 index 80f3f9b50..000000000 --- a/cloud/classic/v2fly/env/pazh-middle-2.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX1/WEt7Zt35BJx01HEK7/OfK8vQuqmAxsms61q8hKSvJYqP6ICkElESu -QqH6A+fhZlXiMgVqX8PmXCXZBgVIdLoutkLDvDuwuVcLLCEatWDv+MZsjkyk73n+ -Pirs44meAYGj4u5hRHDXNL/cD2Vlv4E9uFQzMM/4AFw= diff --git a/cloud/classic/v2fly/env/pazh-middle-3.env b/cloud/classic/v2fly/env/pazh-middle-3.env deleted file mode 100644 index 89fdccc8e..000000000 --- a/cloud/classic/v2fly/env/pazh-middle-3.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX1/2U0EohgmyLsLGmx/4Ue9jYKb8tAc9btvYF1S0PeixYDxBqNVJOJdO -RUG+T5ZW76VlwOB+qdBUVQ/ONtzwvCDEghu9+ZR2XX4NLejjSs3fAwTkirQzhEdR -71ZTSfzgBO/uCQvONWgMLaStaWo13OZmFGl66F45n2I= diff --git a/cloud/classic/v2fly/export-vmess-url.sh b/cloud/classic/v2fly/export-vmess-url.sh deleted file mode 100755 index c2af57b6e..000000000 --- a/cloud/classic/v2fly/export-vmess-url.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -set -Eeuo pipefail -trap "echo '❌ Error'" ERR - -thisPath="$(pwd)" -cd $thisPath - -configPath="${1}" -serverUrl="${2}" -configName="${3}" -outputPath="${4}" - -function makeConfig() { - local url=${1} - local port=${2} - local protocol=${3} - local userId=${4} - local userName=${5} - - cat <> $outputPath - output=$(exportConfig tcp) - echo -e "\n---------------------\n\ntcp\n${output}" >> $outputPath -} - -exportConfigToFile diff --git a/cloud/classic/v2fly/secret/dev/vmess-client.json b/cloud/classic/v2fly/secret/dev/vmess-client.json deleted file mode 100644 index aeda6b986..000000000 --- a/cloud/classic/v2fly/secret/dev/vmess-client.json +++ /dev/null @@ -1,24 +0,0 @@ -U2FsdGVkX19qtWO1TameXcmj7grcAAac4Rk/Fb7N9gpCFU0Wu/2S1CmBLGE+/Tzf -QYXgHDtjRG4nrEooiz2M9L3YWJ5RFJ8gLL2kCyz2QpVchtahwCQC53Izf/ktbINw -1wqfRslqNowxcVJe/pBkK3Q1h0gTlj6x72R4JDCK7g1WcrHir/qJGTKyx7e3D8fd -sbABh/S9+FXQ/4YsuuQlFihW/6eN207zHbHuZ4NsQE8Vph7hxzSix+xqYxFEtHD3 -zNdjKTgrbQTq1o33q+UpN4GkuVy/e8D8/PEwoUnKOzLPb2DpVjY45SA/aIrEGMAY -BCJfARc4f8KC2JCgz+VSkqkgH/72oVPpOJ4FXyOm53bhTG74XzUcJfXm7JJoa+Fo -1tbanozCr945WELL3Nhi5ObYtzd/a5yaM1WoRJgu3bm4vRFLnHZAkA/1rhgV0sLk -uyDh2Myp0mR+u/X0D/FsbsCmZ+NF0/AuqUyV2xaatYkLhwgfodipzOmNa30HGD/4 -1+A0HnW08XYkoJVUsGV8tfd9CL4FH64jJNGCjFZwAxp2+XvhOD3mgUyE+CeWdBFw -Ss9x1stBau0mHm2vviV+2hrf9FNuJXYRltDXWi8AIi4/YlIgYHbJvC/uX/orG7KG -K4ScCj2iwULqYXMQM2VDMSh8KHI+tDOyg/mbn0PR/kh6jwUNupdvlfoH+BvGMRsy -E2ubp0oluZJedznNziLe3UVf9stH39x6Dn1szz9qYKRzNv8RsdjbZmfUXO9SzKLT -c2xBg9VHA5IGceYEWtqijuu7Wr3QJMomRiS53IEKaiKfi0T5pM2EMxcDqv+OW8p8 -9XqD9lG3degUF3fNMYUInNXVUFwJC7FXX0lC/TS5n3FLrfoYNrvX+cPlY7Sjv2UZ -CVfdnQrQcWxidofSXegNVyOlw7fP1Sal49yToDRIxRaeKuBHc5rPS/zsYN9pIeEJ -T8WzwzLuWECxvaOBaPqYbe0I+YbjVOYzOcSNsHbT33Wfs0EFObDmEaTHFBsIoBT3 -32MED1X9a/qNQzWEESsvru5TY00j+EnSuknjZwRuEkFyYPjy7deilZrHNTEcz8/n -t93M7k3c906CwJ2yUBGFMG+BB912Jk6JLgkcpN0VufzlaQJf9udqF1Lsm3htpQg8 -CoOU9uuK/aLdpXTllDq4r4LUtnkvWQZKXYRmN3pBd4t4Wrw7+gNP4dOdHPXzqkL7 -CWPlKPUquJU4YaoM2j41KiPEbBtZ473RwoCjKyBqka3FcdsP4eRsqjtDZNYLmQnG -Pomrgsdpnj3V9ASzJKBucRCg+AYdvgkTg0a0BHOrDZ8e9d1RO4GN2O0/HDe7QrSf -VNoqG94A61TZOmCWhXCj+aCf0gDLmBmxbmRA/R8YNleIc6Wlc7ritBmcJV3F3G0n -T7Qq6aFS/o3Xt6tv4xNDmIoeaKqANCvUZphMEwyR0zSlbUZKYrYhnE8wzE4qcpdQ -4GgjIYRQOcLD5eD3uQbqRA== diff --git a/cloud/classic/v2fly/secret/dev/vmess-edge.json b/cloud/classic/v2fly/secret/dev/vmess-edge.json deleted file mode 100644 index afe34c0b7..000000000 --- a/cloud/classic/v2fly/secret/dev/vmess-edge.json +++ /dev/null @@ -1,14 +0,0 @@ -U2FsdGVkX18t0bzScVEdzlgoYs62HuNaCnHSzzkTY28PTC2VTFIuIggiey30ppCy -WfW7LnhUJXyWtMzqx5giCJZHkGH6NqTVRctX2FY0lx6NohyNjPIysK/5MxyPzlsC -Q7zIDbFwb0h19MSfNtM/0hKmL0z8wfanJ6GnsWBa0LMxbstEjKBzZbTPCEY3Zon0 -15rZxDnk3iAqhaBmOZ4t9FM34aNC8u4DI/Pm9LVDE9RNVgLEJItbQpR6wth08fbQ -0Hk7dg1OLgXpsXld/ASj/wti2x31kFcUrc7s7bvrYr1LcDYBGqnUBwmG3Vf6n9fa -F6xaKHV9bKoTAfA+bgBPzTP/a8fN0wsFKfG8fko2j//L6DL59rshpeWNQabDzlYz -NP58P1LniB4GtLCSwdCr57sBqXFDRPYOEYC8l3tP2Gn1hSCLJG20ti4D+oSw9kAP -6D2Qs9/nZLXXiEPKLAQHvyH21rD2F2aUb2VrHwFXjXj8yqiHU0VPKud5SjL3Nrae -rZ29Ppp4VXymJMmpbwN2Pke66W09B9qUpfkR7twcWdmz5ZlpgKh3hLC6hsucPXLa -6YLnPOH7ytPpghPTdIEgHkRuCsKgzXwkxlHGslq2eiS52y3rYUTEjmVpAj4G2EpJ -4Lub1S0Ec1ATi07Y4U1UVK60Te8e6vU6HVGSlJICaPKyrLIlfLUJEW8DPa2v1QF/ -ml9/xLM8HZyo9+lft6BTe88BcnHZDpObybnj2XJA+uGymdYdKqXViwHSwC7tfiTU -MFZkgUXFq/nAp6UlS6ec4zoI/qcKpc4B5R5l624JyQIphV6FBv56ZpTT6cy4Ijfh -ynRr3pxvYYvtXlAmtiEzJdkbcwQ6vfRUxrRYKvrDwSSKioknLCXeUlfjb0cu8NsD diff --git a/cloud/classic/v2fly/secret/dev/vmess-middle.json b/cloud/classic/v2fly/secret/dev/vmess-middle.json deleted file mode 100644 index 9ec1c2bac..000000000 --- a/cloud/classic/v2fly/secret/dev/vmess-middle.json +++ /dev/null @@ -1,32 +0,0 @@ -U2FsdGVkX1+juGwuzcjF6guPhoKerEvV3PTaW30h+B0R04XxH9JEtfrVLq8363GN -z4CHNrZndV1qjeaSAl03lvF8SotfL7dlhhWSzHg+hlPF4xF/25/vGK859bmNi5eA -Zi/i9LzexMuHMsZYWUUr7rrumeYdADuHrunB8PL3BYxBy/IMFz+SlxOYVytJjVMz -sCgoLbG7MjnuLBSWMSxpnWf9H5NH2RiPcx74K7VP5YwY1arE0d7Wt2LUOjA47/JM -ETIrUKPtMx89K+bTY5jEL+MGzRUXzXjF/xUpmI7Odqa/GzFRreKdiRRDYztW2hP1 -QBbbqJm+F5rqM4/PPcuLN+0qGUCoJKG8KG2ncUdfEA2A1GVNArSsE2nmQSE2kT3p -QruAcdP1u2VA2l0MvO/7GAWmTKYL+KFfmMTRxfixXKrw4qlUtPyQvO0FZeutU4Sn -Mo4p3EzVYZIG7mE9ULJWrv+dTF1azoE8jXwJAyKoK2Yp7+f/i9XaNhrVFVna/HIj -X8wZ8lTogLYEyMxXsi7D1qw0U0NgXV0TXZU8FIDlEbb4MqDNBtRUFc/dGdSgvHSJ -UIV59mCVAnko4uOIDEDB1ckKaziF5Hb7JBPNCMKS+WCMblv65SjFuC/pzIlqqDow -k9tXmxp6C2EHHHAJ5XYeAOUI8yBGCVWwqDAKwMZqlUIqNi0D/7Y1Gescdcc79fqe -kMxeAo5xfJK3lxRyHlG1sOQo5DIXsuFaNUz3o7goZtLurkAioV1IUVjtMFclpVW+ -X2I/rXOTdb8I88+96MXsuT6NlQnzIeHcxJdk/df1SvcrTn3PfQEP6292VOw/DlQq -d+pJ3X8guX5eVfxmxKuTAo6pivfhDo5II/VKcXG7dobDEOrbD4loDn12DA2kOFSY -3KCngKtKjG+31livhhwEPfbO3uBY69FFL8CoDh8F0kMgLd+UNeU0th48PzPH85cd -046FJJg+K38i+epvQ+BIMiSU9PNrDhZx7dBGYr7ABbIvuJIg4Wl3oqVHKqNobR/L -oPK+mUcbK8+vTm1nkdj5bO3OGfmtiXJEM8nq3Wfj/orjBXk3kDi/SAeDKh4rRy07 -dftVVhEE4ICPR55XmZjj/IbwcGBdrHfEZ+tiaXPNELcOb2EAz2T1Ecy35lldqZfz -6UqiNQRuzgd3uFAlcB4mbaciTi9TB8OWMyPumpttmBt97PoGE7CCu9ghOUTK7dxn -RG38J4xrrRNY1yyOFKHI+PIa9+j05deBqipBHBj58Jme7AGTKHM7D+VZ/etuW1KL -W+gHmVlmvxlYMRjwj5irIvSsDjUt/AI0fQsial3rUOmCRMFKM1zU4rlxCjGl6s2X -ItLHj7Rzo5uCBxYwTjH0fEYYQqN0mrIECuaZmF4Fno/G46o7zdxYzi23BTWugi+G -xLKcNTYeoKnGg5sNC1rj7t2moEb4H2RfwNOK3T8+qv20zec4/D8+wR9v/ghrD1ea -5/5NPVBk1orkUGF8XpxE1nOwOmZNSFRafbkpdMOLVmsfi3QptKwsrfB3El+zPPGe -NioHipjrdoi0qP/K9A43bwWmiwa9fBJIMGueCFCU1NRPGs44qIzekfOChXdRTudA -d3rjzsTh8RQncJwUNxIshO5mZ/c9KaK17bI5UHoPNGQWgh4yFlWKnz7X1TE0CzH8 -tS6LYeb/zYusmOgyvdgClMHKaF5AvZWt8yi5nHOpzpwq9AuhiyfgiI4OT+Ly6FK6 -ZG/VljrWF5XD6cJcUa+N4zkcMGh9PwEeMH28N4sH5kJkCIxs+HfXKpW2MwJMWbw2 -DbKaRFbo3d3768d5HY5rF/OZQxGY1iA4S3zP4arhC2AFK/zeAFLZorB9/iaVfQXp -mx0Yt4umy3Bx1V3NnW2dzvhMjMAK7KK5xQTxs3vFVqaTQDxqnmdhmYbI+P/4/oJQ -f/msqIRPM3/uF9YEfQU60+2NEKdWwlEjKdo2WxJYMlCgIpKvKoRL3CA/5WnWdwO6 -k4YOeGCLgb8W2bS2DJnoZAZCawDMhuWEBpqykGEsfM4= diff --git a/cloud/classic/v2fly/secret/pazh/vmess-client-1.json b/cloud/classic/v2fly/secret/pazh/vmess-client-1.json deleted file mode 100644 index e8721cb06..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-client-1.json +++ /dev/null @@ -1,28 +0,0 @@ -U2FsdGVkX1/5t1Vk0EvJ9A8fYfPMqk4xHKv5dJOUIH6D3/lsfO4bRUD2QHspORa0 -Eo0aasxvo2icfb1LWA4866kAeZYSEH+mSCSPHaKsC9Y68yRXVt/NE9dlbZhPow+A -M7NZbyCBYps6O4jscLBmp7+9RTA8PfQgHDceMOIDuE2RGQcIcLhFmByI8kTA0EyF -OTioDGr6K1Aff6aaBRpjJWzPq3x48A9HCUe/d3zNeb37EpNUbloeSXIJMsEc3N+g -iXJJQA9toIIssgbyDdM2p1B+1RlBeigN2h1bKTdYf6gKlcTtE356LlLIvq9ZpTQM -sgeC4KIGqQht+um81LMGTxYUtxYJWC/fTA+7iBHboJKweMwzvG18asBMn3FTTfNM -RNunKHdVj2V9u5ysEdtl30F8KUvURTaKKuSUF2iEIUvLqZSrz+2Anr4z86omLmjG -9HJbdNtPG03d0cO0KNG3pM3B1K2QBtbiFDskGkxGSkgRvNAHOIIZuaaOFifwKfA+ -G96Vi9lUThj/KbsK8faKo4lNNSSnyCqzvdRcJ6nZyA+MPPhKQqszkXHtcn7UDYW6 -3/QnRGVJpccCtQLIXHsNQHoH66NYGhLHfqSkIazqwuNXga1AqBlfJ3jtkRowXS+F -P/N0ywwzHXQy84XNgVlNDBM7gnZEyxr43d1aH0bhvka8rowAmq0VHCZ3ZaSSrqYe -RIJ0TRYKYciNLHyRF1CRmXaNVsBA1h5tMIkKd0KMxeUoQ0gmkKdY22pl9IR/7mic -V+ODYY5vBkPE99/ag27qoeoOW9onyu1bkYPKBX0oIVMpf5YOZvELhz1iS11izMYa -wcvRRsnrucCfNsHSdU1+z2du7w4C+HAj5m5zTe4haepXnNGFdz246nQBVhdEWKnM -rC8myYPjl9y439kqdiAH5qIGkg53owSTVLGFNHZeFhY7DdheDNqWRQq5j+z5+f27 -k1q73aM7LkxhB6AaeMwNaJHS5hMfPEce/qbn9QavMEnzJR9gjwhKwh8Z5w2U2uQE -SqnkBzveMsZ8ae8NE/ELGN8rP8al0IdsBDBr0fu1T7PBFRTE3whWfsfC+DB6nh7l -9xSJ/44U63X0c6BEsx0J8JOuRE65yDqoRloEjb1fkj3E8tqdWLkcijqzxqw4NEfm -gUpc+2iEAS6cPdlrdAwP4gneu+LalggytVBTIEiUw/RVcXgIo3nohVp55LRokhT8 -6Kw1v9jYU76v80gOBhWBIy4fG0seL51tFP4ZMWW/kBYa02MuAENCAxPM9UUWUncW -hpiEYJ3A3HZp1MSxezWmiGXXPf1iNI+UjqKw576ppn0vt5IRD627Z+pGslxEBB24 -SCvGhgtQjrHtZWPFynVEIh3HRazZGsawW/LjnR/++dJNxWQwkvehOePzGnDuvoB/ -7JdIDi/pj0Wy2mH7B3I3UkrsqJWavvg6/Q0pmPaGLJM0RZJCveE42ZGKQNmRv3r4 -GrXwS+/cmoesKqV4iX4i4HhkZTqB9og9pPPRXkDwI7GuM1xsMo4xH+E/gWjcajs2 -Ss1GQx2FYyxO0CrrQaDmrOX9JPR9i9T3YyvaxeozhWdMU00ST3P7Nh3X52dck9SF -AQ3tvO3UVwJ43ttAch6GLbdUT+ZXRgsqDVUk0FVaXgRSO0779FapMewnY/O5boX/ -ueT4wHhBNUotBtnflsFUMA4JywzbFxJTGhbD3P6D/WSczG9FpcHDWwqfmkhmSubU -5pcd3xYggAcrAbkdqLusymQhG1q02GJXu8FVZ/QgD58= diff --git a/cloud/classic/v2fly/secret/pazh/vmess-edge-fl-1.json b/cloud/classic/v2fly/secret/pazh/vmess-edge-fl-1.json deleted file mode 100644 index e93140fe3..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-edge-fl-1.json +++ /dev/null @@ -1,16 +0,0 @@ -U2FsdGVkX1/gY3GlbCnoMHvcONlK02AAkBPVUgHD5KfO18cWV+jEZjD1rG+YjE+2 -iwbDIinDruRh471G0tTfM/GZDzblHvbfQ8AbRo4eLBzAXTmQIFKDQM99V4VBpNL+ -/HOe7rbFrsfzS+nDl0pgso8qAyCPXvpLjF0Mx+/yFdJi72ptp8QbR05/9/tDGobf -CbJ1TZvQLa1EYJZ7xybQcSBEwGOetBEpVriUiX6QbH7mZ3Lk2WerO+RQEpQ9APV7 -njVlJiBZmYvYcmcKo0FjIPn26eKhL23gg/uLe5pEDq1DEPP09HkSzIZYMcoVvfz3 -yDwSr5tenrVSnJ2w9A9JBfvobNkA01ndrrlUuomqhLnp8aa+QcQ2c/i5xxNVbrmf -0f5zav1VyOsX1jOcLAfCmE6VymQnTUU96lrr5WQAwcwjlYAWDuyHSh026ENWfwpP -/M+Sv+M2Vo/qYp9n4d8+VCbkRPWOfjwjoK1meWqXKxjDvrsQFd6F4Qb0NEKfGjdw -8GDEWGdOBlU4ijKSodPojfr6OTGBazG2mZdiitZka6Ildj53GsQ8r/wRG9NqoGv1 -MnoBJFiRH5bRQeh+54TD0hBS1Kg39nmteBZNxNGkfw2PCE+5/uw8+vQWr3XZDUxu -esacvtshWW1naXZRrRwTBvWbhXuAbTOk8LvZHpAMhcymVyYmP3L1ZEsDKIapw5qm -PwgEQn9Sjfgi0a2CygugLNJuBnXuqXjctjwS0ICRrZida1U4cZayUU9WZUVBOJTG -5V6ZUSNWVrlLJIRUBi0SJHe6TbJO6WRfgN+FA3uqacu6JXI1uY27YzaIgYIOBeOu -jAS4Y3Lww6RY6hIMJ6V38irahG4bWVThXthtlC0OmuBFJvlMIWyPTyRUCYM/Mh9p -9wvO8fWdcr0/t6dr2tiVzjdnPnFvfcA2bo4mToMgPyxSlzLfB7VtlkwyNFt5PKIG -fC2XH020JneLeSBXEu7LS2PZieF/6ckr4BJxxg2nxEabI2UMhnCJsgUML7U5bqc4 diff --git a/cloud/classic/v2fly/secret/pazh/vmess-edge-fl-2.json b/cloud/classic/v2fly/secret/pazh/vmess-edge-fl-2.json deleted file mode 100644 index c2bcce3fb..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-edge-fl-2.json +++ /dev/null @@ -1,16 +0,0 @@ -U2FsdGVkX1+kdesDz/Wv0QDJidJ9AhJvjO2SU/3IkW7Gz6EzEeooGiVc6s5mpT1x -u3Gkk9aShrHWXFMhvdWkEjbWs0g3blAw4cNdPe4UzjDHVPAMRR4gQfzStaC0xTp9 -kVA/AG5/ss5I9Ohi0Mp4kYWxrvNu/hL0NArQ8/Cz9i6rk5KgbOrpyC9p3FcUSeY7 -Bs6q45fFLBnGFv3pqUe9qZXP+lOMnL7h0rr5ZyhFw3W8qhm6kd4bnX2nZcN6Nn44 -0A8LuKJtjHeKpPRUONyGA12DNsq2k/IDnit1AkODYzGH/utsS0O+DBEK4cNJDq9n -5siZllyR8KZI0bRv3enEV7C9kRtQlMwVn+gwgBD7HUti48nat2yN3W+pOdeDZOpt -J7s25DgKSzsHla1k1ScGCUkurQuvHNwjLYvPLtRuOG4U27lww4XCrgpeq4aq+AbF -Cp6oBH5ie+klw8e69cjMnPapFh4Ry0s/Xx+8oJ4efvscrHErs6qxYm5PnUI7igAJ -Hz+tZXjbECt31EnA6daxzkc4sOvcQcr/DN7hE4EPHpOoLCAiN8E27J8P8SxoU/FF -Eg0wlmoq7fVf7jBsKtsS2UzRmmMRwPgNn2pdGPmnYMewuRYYU9qasjQ0HCsMyehn -Lmt6QeobLLH00LE+p3IZuXOJ/Rbsc14uzgUCzXmt8F0NUqXezMpZplDaBiGFIVyR -2GvH3a/wSfkI9klr+c7rxwqfX5SyETaDoTmohkn6F5gRKZdPVpdYPwKkAJoWeRqE -0zY3s4HFChGA+Q8N0zrdCIvXgnPHvA+YbKwbmX0YcIggd3wQ6dqRyaBgUtecTSfX -kUScu0b+Xc9rQgmaAasYhcBQ9YTEuXWeChEZGDk5MlO5NjjyhCUDjgV/+BuW2eK+ -JiOsWfozDMhomEvtzkbGk9IQ4+dlNER6m8fcNj84+0PbWPCcIF6stCJlCiurG2aU -zfTQ/nrtV4uGITh1vzSUVA== diff --git a/cloud/classic/v2fly/secret/pazh/vmess-edge-ir.json b/cloud/classic/v2fly/secret/pazh/vmess-edge-ir.json deleted file mode 100644 index 2cd9ea8b8..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-edge-ir.json +++ /dev/null @@ -1,25 +0,0 @@ -U2FsdGVkX19d2xDGwxOF5+q086C3/f6DdoVe+4ONTkfw7uUDc2lwAwfI1fuhGv/q -TqNPBN+0jPe1uTthQD36E1RLXGbsL35/yB+s6swV5pL1i/ZrEhmP4ArftrswD5m0 -MXJz8VgVL68x/YOlh6UDtNea8GQ7eVXpSRiUNENSYj/yu+JIreZRAiAbaaEiHvRY -GiuGAyDMPDLtOpuUnHWmbtP53pkqhNiZo+grqVAK8zomFBgNMJ9rApBV7aBY/qI0 -s8MTdYquQGUArLc0cWfbPU4dEf6vbFlzeZfY4c1kWfIuWiJ3uzBAftC/CT8uUOAx -SOYELlwA/3ubrcXOUN1GlkZH8hjcwGNHFuB/v4K/5aQSs7Dc+oDr7Q2nfYUFfzxS -1/NbmeHtwovh+GdwSgkPQBV+cJ7AuhxI5jSDHBKOz2eVTSonW7xQB6BWjLDYjiiV -Qs4mZmd2Z4XkBEXeWDWTk2MW65ss/ZeIhhe495d9r3fgsyS8hZFtB+hu8OaKS2rz -8wFaqb6PHJT99QvVwRBySC5U2Qxq8EqSxpLZzpMu9EhIWiAgyALwB1b+aqVQLe18 -65hf0y06hs38lH8TLD5BlecDngminF9/zS3Vc7eN4xg6c+6xtGo55DY8iM2DNqZp -XE4tFv2vM5ztsWy44GplLjapMzBb7vWL3WjoWL2da5O1ophWUVUhc8acTk3skxnB -R21REpHHJ7tDvyrBPyMvmuyz2AOs8ax1dz3NUpEPoMbqF9UJY0Bln4sCEbCSkSJA -QqV9/xWSzLkoxEicTD/MfiEo8CNddvQrbUEbCrmV8OzJLoIa43Y5w/VWICgfsm7i -M0yQCYNhaZkIF1ZcVpREDSoKs+4Y3vOjLCbQG56LWdQmMAW8eFgYnEnVuw/va9jD -f3SF+U0Fr0blnf/s229E8zLM+oV4efHiETcUaNRQM+Dr56jaRmsNq027k2pm0TlG -kARPG8qIuKXnxY8V+9puNNZvPsCms4yDQXxjs38/E2FG82pl5KMANdaXEj66ogPu -jYbcwtQ2DtTsbELv59137fasvrMJL8CDCyMmIRYsg/57DHioFB1ztolt3/mnbMqK -7ZgQBSSslJa+BK2+yawIT0zkPwJlMa2mzIX9HFIXJK5ziufY+TTKSVsS54qgx95H -yhnzudElnUAYHZByQnw2YJpxG6ESebkWa2ZeWYjySVhlOnKsiXqDC7IIWq+V6gYO -B343zJ9moY651aBCx9C3zcJ4hM4yTQdPFX/39uNxatpBpVDzMz2irD3PFazdMuV/ -65hEPmg7fGevy4xMp1KkzeTi7R/YEBe+9wbzljeXYss+L8iUcNHB7URaHJq4Zjgu -i9Ii1uHGB0K1mC3OjAu3ZIs+sZRO5hyAzrpmzWRBz/jenvq7tubWO5OOrb8ntrG1 -3PR3PTF2gUGhCnuVVF+md4D7XpkoeB9aY+shn4YGlf9E7rsaHYWUb6hFxnBfnjao -Nk92gpRTFpCn1yQstQuC7e+zv4X6ZO3xD1wuVlvzXz0uJ0p+YJBTBBncbyLxPzgW -wOmNGgoi1A67ZSG+zzzEKETsBlCclFz35hMZ3Pkc+yg= diff --git a/cloud/classic/v2fly/secret/pazh/vmess-middle-1.json b/cloud/classic/v2fly/secret/pazh/vmess-middle-1.json deleted file mode 100644 index 4ea3087bb..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-middle-1.json +++ /dev/null @@ -1,44 +0,0 @@ -U2FsdGVkX1+q0V+njCGCUFp9DCA3LyxbKtOZcLDT42+OqoaLng1tbkmGV4yM1SbA -VEs5FtAWb1IQYZoUQr9HQbrffO1MSEYRtx8YOsCTdymLhdC/NtsYuJ3u9XN7/9KL -JjBSdnXyC2O790Fn6bR4D4mgI1E7zn7oDIzP6VYMGeev97St99Lbkif6dNd18GlS -VkTX5IH49OboBQKP2o5NzNU/MRAXiPkzOXk2K4GH2FcDv8nlKjzMvp0gzqNDz1mC -I4XRV8e4fkzSFBYy8ea5lp0Wyme+osXoEOyi1dvy+VcETR7aD0kAl1paC7Fl20zg -wvWglfqG2QGAPaNSXQtCJO4fz4oYbFzBzFM79FJU++ej+BCnY8MRifXYfXmaLf9K -LoMJB8sbGBqedckw9f1jKPMB+nsPOYVvPtIgfal4s/xmk3pCbaccqJ8paruxq9A2 -5GRLAUKJgJ8rwyT856VFvJm0l0m0MhdNxqTpDvzt6KDl3bzm+YHAmLw7CQn8v6GL -NcMAibrNnWbV//t7I28m4BEmID+z1jVPVjLYa0HFR5QK4iz7YQkpq13jNBcOplAq -CIKmGLQynlYXwj63kmKErdETKYvGc+ncTLDOahuAe4gFnkshw51XfLN/I3BXTqN/ -/AWLp/BXV7lAdVOsuCKIGCiWPPRmpotL/I3M7KObVCkGrEdoyGfDJqHB8V3KKjPC -M/Qrl1YFDdJPTd+STxIkly7hw73DPJTyT++AimeCgteeT0JvtkgOwFm7oGzjFB7W -9ZG52tDDdEVYNTXjFU5Wa+MCQL1AbCm3gBJWlLDZo/Am72LevyHFZIaDQnVJutGm -VGUm+0KVrv+/OCqMBtq1Vp/fGL/GPT2DnixGwWzNDeNqSv9dxQ8rZJhrvYSNWgB6 -mumn0SSR8PqBMgsEPxobWfzp/OZfGEHqO7/wuhZQbov0K3WIu8L+dNMEF5leaTKj -y8gHnT1+ySTNKoeNfkQUT3XsExDsJSi+i6pMGJGjY0sUNQfUGWqC8CfSxIR+wHnC -xRdhAV5stNBISTaFfqjRUDgmCLxClyQ7LpX35u2Kz66w7BSEbtPYJ/VNp45S4ewV -B/orz5yXCuxpyX++Rpzjc3hQ2QK1UAOVKmQVFFAENBOCVQhj66mvVtUOBqgEF4wS -91gWsvcCa5rqw48D3cXqpW4QPEpwGoaBnXpwXxV93iJqtplpHN81hrhZ0nTYjoV1 -6m05aA8TMmSvzSguItkHAyTBZaNbXtl8pPsauU8whplX7jQQHXINRkGaFhp2+A0A -YZWaJjjSebidIbY03ibAIUwgiUAY372JP7NRIrV1OhEdgjNlHcmPlWJ1nqG9QiXn -Y98AiYje/DvC2lRCBAR3z5xSfVk9CbVcWIBqCdSApXUHebB8I8t0M2KAfVvKTiGF -N716+KrmjTBJUUfw42eAltTjFJK1XciIiMWlxZoTy0mFyyD/5qcX+h6TG0fYrwQs -3UQ2WBWEKcV2fpZXHxEowyK/DkXu1FM3j+PdqUPJD6B8M1S1jRnhchbKEAW4/xr1 -w8uydBodzMZKEHRjKdzSoMCGrRozplI3h+dUGH97TEKpF2DUMHK9DtiNJSUzfNe9 -ITpAF7FLeiz22d7dGfiXzVR3+9x60QkCVNiYMigWKi2n6ftDc0oUj70PBWFPZXxu -lEA529XmDlUUXtOCqO+DCMN4Rd+7P+AFFkqlAXk0dnIWIO2hMk2AHIlSXQYOZPhq -dx7uUQW1xWdhc6mdUj/eB3SoiIcw6DTr3HzRH5Em017xCzB/KixAzvwvKybS1dZy -IEunU7r7TQYj3LbQGevid4yPO7u3SEa39Of7bCejbFs8sxFpKj7YDVraXxmILJKB -WPMwXP7aHhc3oyMGKu6uo0E5rcAssmCMOFpcnPilZVgo0vCSRb2GXgOVS0YgXNW0 -rm2gQ43s+o/xn2J0fo0EJ5FLoKdBQp9OIUB6ObG3CCFf2bo5UwAW0hSolBJ2rDY/ -LtbStGq9cwC924ZKp2T47AQUuDERTm3IImENUWqLkA6/Cro43PpUpSBB7rD/BwPI -iwbwV7A0NY51Rf1ql46PJPx82Na+08Ndnia14UkIQ/Xb0A+ND9nYaBSzC71GFkW9 -lVJlPN71rDIQ/6VXP6b3dnSeOa1mPsrYprRGGekiYIZ0a1I0Ufr9tfYO+3n/7yEs -NcrbJnxK4DQYQ/DvF4P5Dwgsda+4Sp3cQxtU5ChT1R3SAMtHcVcFFtVTHCKDYOni -DGAVRaCM7xaD7zYv3nfiT6q85hfgZ97FPduCy2+J9kQVT0HYAWHLRC4995m/ve1c -FMQxyJ57ffGVqjjqjTwyRirRXnG5wQVbkN5qklFSH1mVyFtuFGK2elfPD03ABq6b -moTdjD9K0oCQyOll62AYPR0xUviklAQSp/fVBhYfRhl1VoBxOUBCRjJqsj1itcnb -/40ufOyutc+QR7vCaOdey54ejLw+7Zc2crhe06V2LTz3pQ4l24NcWoQzF0Rm1ka/ -LQFP8Rda3v7quhgryXLbeWVG6ADLv0rXEDtlzyTWu83tlHHJPrUK1przK4VRpuOi -KMdHLq6zlBoDkZs9aDjT+9XaOQAj0nKQP+KSlY+GMWD2OCmcWKEnvAKAI3H5e+iJ -iX8kvxFYqyqMYcQLnc7P5CauDK1//qR4IHH4KgTA+NwVT9/BBKeeJjML24IajqK9 -Lqwwh837JES94ew+NA3cUA1TXbz9XiVWdn+pLw2j17225LD/fkW+tEYUrDwN0e2d -Rv6fqijAq3tCxmx21akR6HqosnhOOArl4GgA2ozCCHw= diff --git a/cloud/classic/v2fly/secret/pazh/vmess-middle-2.json b/cloud/classic/v2fly/secret/pazh/vmess-middle-2.json deleted file mode 100644 index 4ebb12559..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-middle-2.json +++ /dev/null @@ -1,44 +0,0 @@ -U2FsdGVkX19bV+PDH+3s5mBXyVhDX0h6doEHPrJ8aga0upuNHnUDAXAwHTQwGdBO -UEhghafdhmBJYLumUid80fg24wXyTAtBMjRCuopjp6gRyXZnoXi+Nl45Z2MPTq45 -lbgJfeQIvOTmpOkOKKzWwSjGi00/mN4tZTr3PXIaQR7haaBAChxBDhMOug2Ulmf4 -ts2dzeFPY1IDufADzPnPAPDPQn6X1JijMCf/P6hyRPHRiC36Vi3GGnzvOnIcKctK -TYpM7sUrvbwvwNOQylUTOy0/I3V1DePAMqk+J7mi792b8BmpRXM1fY7PRl/GcsQd -pU8amrO9zmWCVpvf8zjDXX0HNXvR1tzAzfGWh0185NFwIPW+yrz9kZygnEH9Zjjl -assA7GWNWFLUQa8kCTTsJEtE5b3O+ZwvccsXlzcWOb5WBTi4iJyJoO73x8Y2vr3M -ds4O+q/37vU0MFtZPiLt9wX5YVOxWHRYCtTpZrnofSbbQJZpcbbWXpl7z9rObtgC -SH7MAdUmWMGQ01IF7q/alDPe5QO5plpsxCdKIESD637nO6puYd54CEH3LI3TI1qn -xwiUq2iYhbj3GIeMoL3IDKtYWKqn7/y/BFe/d0PPBpqK61FAteOO0vPmgeqOaHoi -0DID97mDFrlRFi1lgXClANiK5emt9iDeF/GnGBnsGMbuHgwW8+z9XBP3zoKraDQp -m5ExW13Kr5i5uvvQ2NMO8CJTi6FqVy5jxZRXdRzW9QE5ARm4Kn+Oe4rhL2POMs4+ -/lWsOET5wltAR5q9OLtusP5dpDm7OBSf4FtUvvw9T5R8veM0zYtwuTUivJJD5Pte -7jBQbcvFX2vdLI6OJnb25MR9VhlKkUACtP9FwGOVkRlAyG0jacJJcs3s/AysPa1y -w3SF79JRa+bPGnD6zW6UTpTCHIEzkizmRreOoumX67qAj/LkzsHQf9iHkwKNiveG -hnnHZhLzRpt2X0kSQvsGm9JRzfmCJi2loqeTWMeyN3j+0G/V6gRborsCviiQM3eh -SxHE9pfXznxlhQG+DDpvHCb7ayifnZV3XgJRWo27QEHdEEf8yRebKYoiIVFiFQQ7 -Fwzq9WyaXnLw1cH10OL+lHoFp069l9d5zSmiGOSIwWLe26bBprcA6XRZB340P7jl -xUUk8GqlIaBTC2joctEFlQe5yeBjJE2VqIEArGp6TcRKiap+Ga6f5/F639PKrVg8 -LLBxA9GGvD8hZWhENEoeauNj448cGlyLakWRyI7UYUah8MVGlEGmnj6SEZGdHZLl -vP1AMitIhATNaaZbgErh7tlXy7PHJzMBTgfk2rbijjlxyDI17e8TjfnXnfXxYg/U -gCzWzkQRD93CrGHC5JdcGXEINUe4Oxpe/3WHm6TBnQvv4deoVSWuYjFvlcM+GxAd -bCMXv9rgJm2fzSBWBcLxCUeNbEIRAyElbWfj6CPwrygOJ/LWLWQECPDB8ZwTjweN -FgDCVDXIU6qk24ZbcnBXTLJLj5sVOUCFV0PMY77MeO01iH7fGBonNtds0BILO2VH -c1/KcgtvAG4tcSYI0GhrACb7j5GruFh/Q0mAI0Y9Sf/NIZoxPEigYzi+OTPv+T6w -JjxbdsHPtq05a/vLTgisTIaGyEx8uFqUvr4kungaD3uHpJ4bjx0T8H70LLzpJLPB -ZsHzwPEnHRz4YT/jFh5alscThhe5QocxZXv+bfb9X6cRODa1406bqTBdQ1xkBv5d -pvRui2j5CAuWcL56IZEFJRWH0DKvU81CvVRdwaHNuoly+gBl9wIYuyXV6VHWH7bq -ujnEbptg7suFyCFPSC4SjjTe6dc10gArKgY1Hbr/3q6PkT52j9oKmvzp3/Efbpp/ -XlpLrSVJTJhqGyZGkHXsFtSx+4HppsVxeCr0N01qSi026cY+ctL0PA5el9TESFta -9Yjd3mgkF5xbizoqqjFdFl2aTDUJnmK4c8OGEpy13Ny+eXV4J0rTfd3utdffHkk/ -rSdjiAVCbjn+syxHh/19My8ArNx3AcO7kuWC8PMJGOjdjpz19ix5XqB4e/jorJAI -3ZG2nc793c6ptTAcyfnk/GMwQcNGJiZ6lgMub9nG2Rn4n4BPglqgtIk5fLThDtrx -5p2mwbm+dsbLKa5ZhyvXcqLumSMhsAVOnTcRKL4PrblFaNe5dY6b41fKxDmM+csU -7OsjN+GUEXnbqRsNb/HZBCQTyY5mAh6sLmDbY9IL9K6EEccMsgrP3phFwt0/tX3T -1lMXJKtW58vJq93VYTWN1cmj1RBBuODfzOXgvvSPxGignETWLmgITi5XPHs+tD3C -icgODAry4qV/FneU0dPP5uZaijlfiyxQeaCtkuPZE4Z9P8/Td8J9fzsLg3Fo2yh7 -F13Tl1JTuPSGSFoI9p9N9oWkYGEy3VEPAMMiwwQDe3tx7ZhpNdP7U69Tmn4/3sQW -1NCQR45DYkuN3SXgO5+RawyK9BvRH7agjV3NbJ+RxaL4Yt1IL1cesMrDtN0qjpz/ -2akmFhZLWhUFvRF/z8HKANETifiJ5dF+QzxzV84r3lVS78vucyPWzqH175nQzfqr -0C8BkckuY4F+oHAuFQs0pGOUe4aOgbg1wBxZA2B1V/jxOaNHxZr0UPIr4tN7v+5O -msvIn+zxI1pKzzK5MvH/0SjYBhkWwP7wIFPbrZOiySKf+BGL4W1o2n9V2fY7xbgG -xefXZCKtlz/RyqziLMleXVd/XeLE2xdQVLDUdvUGwObsZ0bSJgRiav1HOKHHgR1t -3lMwQl9r3theMnRWut917l/IsI+DuCFkHkRHBhOS/zM= diff --git a/cloud/classic/v2fly/secret/pazh/vmess-middle-3.json b/cloud/classic/v2fly/secret/pazh/vmess-middle-3.json deleted file mode 100644 index 305daba59..000000000 --- a/cloud/classic/v2fly/secret/pazh/vmess-middle-3.json +++ /dev/null @@ -1,54 +0,0 @@ -U2FsdGVkX1/dUN+Vz+sDhDJypz/k4QPUfltVOeehuk4IoKb1EGLGUX4g9oheVArF -FNEB90SYuT4oCj2/8O91mZ0iA1TDrSQXH0nKaNsZGrJhvj4XQR1H9Z9vPiRWlJFD -zqFwjl9OHjpcy0UPuM/Cxj8KsrOX4Rf2W8t4gWPm6+F0q8t3ifwds8NPnGNtZNk+ -uiouXYoS1xvZP9xCfMJ6zEgqqnAURoJs5CgCKhIS0XuovlAkOcRNuL/95SS/u7Un -cuB4DnBY8tlbOfdxj9d5VkU5lLq0L8hN8Fyku/XwOGvsHr/s2tIwT30EyCE1sUVW -C801AX+N6xrVopRkSf4cd3lnYBOgR0ZWU2L4DnN34fvjI+efOqfq/QFiOpeHS3Db -YKJIn47tdWNwR7hR8FJssl8UOpontGAZ3r0HqZ4zRh4aObCfSS+2i0ZMKiUjB9zm -a7BM/gt9tJntImvtOtjwtBdXiHNPeYp5PGP311OdwE7jupEdT1exPdfJY28uxNLp -utkx/phmv1+AVX3U1ynuTpnWB/LkaIOVGELOzJ+JuIguJWi+60zllP/Yn1gw9cEz -C7teGf/jDf189Su7a5UUVAH+mU3hvFEeOq8cjw0fejwebMJLKo1/8hl5nF5iiI7J -HA1H7ihvm9icAsvWIUfYx4h5EsfhWWe3ozjMqvEgGg71cmFH7XDcN9Y8LnmN3xbq -bcFw2dg25uodmQSKId1Psmj+GsJH0G8GCn7x/9O78sBl2Bt0ykEgdbvTKv42Hg20 -WM189SCmp4RF01FtzD8PNK7W7PiUKL1/KyHFP1QtbWAHcuc62JmVR8mZNw8mNxYU -P9HNruCuLA9n94eHEGuaz2XcUMgKeGV72NSCbBNs+9TG0hboK8hCEklJ/6OkcTun -4xAugYkWnD3/bb2s0jWg4Hs0HUAr2oMB4rOUfnpyRZ2AGdxR4PfwQ75pFbr0Cky9 -iWkjmUBnR5rYDp2E2dL5j7ElsEDxNREq3dYgBIpbOIo7Q47RBif9ouRfpJX+Hky8 -9XIa3jCrQDk25OQAe8+oW40I4dysPBKhr6LdWxp9uzuP3tuMXFdBIqwKM4yNUobp -FHvN7mY0bLG1B/diy5HCXcOeTKyUS1xW3FEH1UP0cnleU6P++bbcPbKsiBjBqzXM -QnUF+eZg+jWuMLbCYzBkcGRLEkNXn18LFutUedLfvGh+islQ6L0cRikV+pKXEJGn -+e1PqQGagRmHclnecQQEdc4zG7kAJDwa4N2UWh1hpxr/TaoKQyCKya5mg/8G5Zd+ -AfXq6eU8kEhgtjxqteezkKnr+p9LOp7u2xdcS2ktoG07edzb8lpLYugarkFWWOR4 -20807X6awMoz72uAe+GijQ4tIGPrXxMsMXJXu7YJ6uVzzg02G0Kzy99Rmt8/lITy -GfRzBflF9avk8xJbqLL3n2IzJDPAmts+nBH44+8NzxO3bBt7FKoJ+EIikXUcOWkt -XTR+lxWJBCJ+4Yp2MmLM9zYGyHSXKyGmqR5Ep/W9IQuNGESUDN+CJKLuKeVzVluf -+KtJMPZullg001RcmBBENHjJzojLirdI8dKkqPUrUpNQwsYZoWy8t8hFTpPY2C8h -S4lK1XHupLHtwZyPN60M+5p/8aftzirWNBH8g+4AZb8X/tRZuECyenUmdC/FNjN5 -lS/cG3Za0lIsc6+944h9vuuvouec7vf28NpKpwpavWf7Ntoy/koof1ec+sc+oxiL -ejG4W24PBShua4WPqcBtikky3wFbu9w9quzgmNqeOspiMYS7xuUPN72Hf1uY/DNb -9zTFhuwrKnGCLptpb1YfduVEGs3DX8XjZYmFkE8tB/e1UEZkK2RV1T/1CYoU1n3z -7Y2IsY/CQPrzwl+WuMpDQOgjKnhL3f7witR7qjOAgKXeWTCsl0b7MmJytG8n5vjX -gwfIooA5oBlFeQbZYpS2yNV7f6mjjahIaug6/NfFz1nO5/+o0USDzkUdYLT/oFzv -q/l+4de11AupLOmMX7gZJARwx76qklBSYLR9xmdnmEbYMgQIni++XWHOLASTt3ED -ZHejJ30tcZkBc2iowALoY8hVopCs65l/BbJHXvfCXAeqO7b0VkccHgN/EUPkj2o7 -ZOckJJIOQMJAwm6j78VDlYV+r3FHnyiRRva7/iteijK1s7aprpSNQYxBcp0X18iT -21p0AzLYf6mWaaheKKFMJwwJ/1eOTDe9SzwCpfdvnsjprUvIFpEpLCdiloqwye8E -1omEwIqCGBc+oJUWkZSvLOE71PXRHKXJy2727whaVVSSfLVh0rS3XiO6A5EEr5oV -bawRfV4YYY400M0UyH/qmRwyUkZgyt3gbzlP3kvTnmg1f2Twy6N8ZcHyT+Ro7cNi -EDpK8HtnEPmwtw/8+7ez5uPAcmAifX1h+ys2v9M4JnusCVy0+S2/4t5a7XpDUJTB -RjJS5FyX7rUbdtyHOIEveEQckvB9JHt67mdiMySXuLh6ZqrT+Bov0ETIlDjF7EhI -COeXVQO8uOXRW3awRwmqxhOFAFA4uirfGiwFly3Ar70Ya1ltTG+x8Kk0Uj5opjNN -zTVFrIhT+zAUI/d4dL4I9FSZPvHgdKVhJlB2E6hGZnUzsh1V/hSv9W4gC/hmAKzD -1KA9lfPFPhrvihnG3cluvnkIB50dBNyP3j+9PJBowgc+lyTSAw0JNmqJv7qDjpV3 -/zKUkCiAVDZbKDS1UsG+90z42W7XRld++DDXVWjukNL7EWumP+g/WkaHe0bovP3i -w43NP+s56+CCTbIZr37Xo9okdAfriQdc+wcGzDzPfa0E7bIfgGnZQ1CAyO2vuRGb -lHFcZTxP7KJhVCotKsWAhoiUJR1IIa2QrzfOv9Iwolu1W8eFRPclsQF3taTQpVcH -byWfDjNDl4iflIRfF3L/1HiA0RSGvHBJTqNqAERpob3jQIclaDcgOHb1wKAxg6vN -6RlmwB5/2S4M96v6IflA1XQR7vVPrrUy95TrUIbgORkBG7q/bgQeWzDF9yLMST45 -MZUss/va7dwNreDka/S1SQ1YhO/F7LeTBdDe0Q3ZnDx331hnthV+FZd5C6sziWvV -cqwyFNPmmmPCFfxXLtbD3Nok36BUkT0fgBSr7RDOIyHHyFKkRVVfaxTqw7l66LEc -XaFsuQFQfAmJcM3m5s1oWOiR9Iaryo1F/btG8/XWxZKtqpH5llvXrd36Mqow6kK+ -D7f/SecGSM666efkFAOclFf+FbYTST4g7aajDu7L67PO3mCc9x47+hdyaDGiqnU2 -+UjqBVFgK6D4gIyi/UdFrvdJ0kh/ocMJLrdQ90jAVxry9FsC6Oc9wbUOSo6iju5l -H3Jj499kkS+c5Cs1+hpO6tgQQldnfJOY/lf/glJe8fKXDS+EVm7pk/IhY1dWTQwh -W/52+87MTMq4jzMq642NGBWomb/FGyep5zuA495oJ0jkksaprQSHLZWuubFA2WP0 diff --git a/cloud/classic/wordpress/README.md b/cloud/classic/wordpress/README.md deleted file mode 100644 index 1faba652d..000000000 --- a/cloud/classic/wordpress/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Alwatr Superfast Wordpress Deployment - -## Superfast Containerize Wordpress Deployment for CloudNative Kubernetes - -This container image is based on the official Wordpress image, but with a few tweaks to make it more suitable for Kubernetes deployments. - -This is the best practices and fast as possible to run the lazy PHP application like wordpress! -Just because of `@alwatr/nginx` and php-fpm cashing It can work More than 1,000,000 time faster than the official wordpress!, It’s not a joke! - -## So, is Wordpress Cloud native? - -**Fuck No!** - -To be honest, no PHP application or even framework is made in a cloud-native way or mindset. -This might suck and you don't like it! But it's not my fault if PHP is bullshit and you like it just because it's popular and easy to learn! -I have to mention this to reduce my guilty conscience about having this package in the Alwatr project! -There are always a few fundamental “architecture design” problems that cause the entire cloud native way impossible out of the box. Sometimes even with loads of work altering in the “core”, you won’t be able to run it in the way you wanted to. -If you analyze your requirements and needs, you pick the right tools. If we want high availability, high performance, and ease of CI/CD, perhaps you should have chosen another language… diff --git a/cloud/classic/wordpress/_up.sh b/cloud/classic/wordpress/_up.sh deleted file mode 100755 index 8d435d026..000000000 --- a/cloud/classic/wordpress/_up.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -ex - -[ -f "_data/wp-config.php" ] && mv -fv "_data/wp-config.php" "_data/wp-config.php.bak" - -docker compose up --detach --remove-orphans --force-recreate - -time docker compose exec php bash -c 'if [ "$SKIP_FIX_PERMISSIONS" != "1" ]; then fix-permission.sh; fi' diff --git a/cloud/classic/wordpress/compose.yml b/cloud/classic/wordpress/compose.yml deleted file mode 100644 index 679c70aef..000000000 --- a/cloud/classic/wordpress/compose.yml +++ /dev/null @@ -1,102 +0,0 @@ -networks: - internal: - alwatr-private-network: - name: alwatr-private-network - external: true - alwatr-public-network: - name: alwatr-public-network - external: true - -services: - nginx: - build: - context: ./nginx - args: - - NGINX_IMAGE=${NGINX_IMAGE} - - networks: - - internal - - alwatr-public-network - - restart: unless-stopped - - depends_on: - - php - - cpu_shares: 2048 - mem_limit: ${NGINX_MEMORY_LIMIT:-256m} - - volumes: - - type: bind - source: ./_data/ - target: /var/www/html/ - read_only: true - bind: - create_host_path: true - - tmpfs: - - /var/cache - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - labels: - traefik.enable: true - traefik.port: 80 - traefik.frontend.rule: Host:${DOMAIN} - traefik.frontend.entryPoints: http, https - # traefik.frontend.redirect.entryPoint: https - - php: - build: - context: ./php - args: - - WORDPRESS_IMAGE=${WORDPRESS_IMAGE} - - APT_INSTALL=${APT_INSTALL:-} - - PHP_EXT_INSTALL=${PHP_EXT_INSTALL:-} - - SOURCEGUARDIAN_LOADER=${SOURCEGUARDIAN_LOADER:-0} - - IONCUBE_LOADER=${IONCUBE_LOADER:-0} - - networks: - internal: - aliases: - - wordpress-php-fpm - alwatr-private-network: - - restart: unless-stopped - - cpu_shares: 1024 - mem_limit: ${WP_MAX_MEMORY_LIMIT:-768M} - - volumes: - - type: bind - source: ./_data/ - target: /var/www/html/ - bind: - create_host_path: true - - tmpfs: - - /var/cache - - env_file: .env - - logging: - driver: json-file - options: - max-size: '10m' - max-file: '2' - - environment: - WORDPRESS_CONFIG_EXTRA: | - define('WP_CACHE', true); - define('WP_POST_REVISIONS', 2); - define('IMAGE_EDIT_OVERWRITE', true); - define('FORCE_SSL_LOGIN', false); - define('FORCE_SSL_ADMIN', false); - define('WP_MEMORY_LIMIT', '${WP_MEMORY_LIMIT:-256M}'); - define('WP_MAX_MEMORY_LIMIT', '${WP_MAX_MEMORY_LIMIT:-768M}'); - define('DISABLE_WP_CRON', true); - define('WP_AUTO_UPDATE_CORE', false); diff --git a/cloud/classic/wordpress/deploy.sh b/cloud/classic/wordpress/deploy.sh deleted file mode 100755 index 892fe7775..000000000 --- a/cloud/classic/wordpress/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/classic/wordpress/env/baran-demo.env b/cloud/classic/wordpress/env/baran-demo.env deleted file mode 100644 index f25221622..000000000 --- a/cloud/classic/wordpress/env/baran-demo.env +++ /dev/null @@ -1,14 +0,0 @@ -U2FsdGVkX19IIZEMB6r+RHxbgCwyk+jv53JREoL9DeeOzWqHnOthssnUwANpJXJY -bwydmaAYEp7naTJCe2DGPn0fT7W+1wqI3ontMStpr7p69O62XoxSF/bLlqqRFl1Y -ZbMhRip+4jhWRQ8gNwMQCzCOAxv5PQWAB8c60e4SnLvrl8ukdBnsj+dikVdkeNrr -zKanl5H5TOKqsfaM2HQWQkeBc4sfGDdZbcd+zgXPopUZ2q+cHKXt4UbjFHaTEceB -zh4iGCTEXBuX/aqnheEoOhae7p3+9WixaE64x0CyM7eQqLmu8qFDJtq7o8ubaJi/ -WNA8EqB/G33ASjuwpoBkK3dd17W5x7KMzJbwqgKFoAMBRgZFsNxfWn8RHqeIthBj -tSzca92Y1xS+8haf5rScwAHtv8pduIVy48OvTN1EhkVOo4xMKtyLg0FnkaRck2qH -CwehF5ATScZdKKVDn88xnAKy/jYWz3GEOYlIgKnDmTYCWr6mtsZw03sfJ5SwWuwx -TausXRNBFgFK8vbgHlFUq1bufKHm5ISU0qbRsnw9oQpmcUH9gVzGe+CzDUqkka8E -tAEBWybpK+uSWsqNgW55vKkkJkcN3zVAfQoASttj3TsZIvC3nIe7Zgh0hfWNq7r0 -efd5oDRZBtaJzZBbQitEkQVqvMbWy1S4FHn+fgUJ6fhKAtASAahF611PrEvWiOm1 -OVoiG/VlQOjqQevjiBhneNXjXsAqHPK3uaICwR+EHTKwuDsu5MMmJHtOwSJ4/wJX -ZJnxSwYQ8Ns4VEbil26SdYGNHA+iLF0E8SVFsm1NvSg22j6mQ/7EbyQkrZyuXu50 -lY1BBR+n6O1PG1V0uEiJVnXYxG6UjT6iAj4H1+VFYLyBjAjbh8QBe4i+EYjLY80P diff --git a/cloud/classic/wordpress/env/baran-www.env b/cloud/classic/wordpress/env/baran-www.env deleted file mode 100644 index 4646fbacc..000000000 --- a/cloud/classic/wordpress/env/baran-www.env +++ /dev/null @@ -1,15 +0,0 @@ -U2FsdGVkX1/2e0N+JJOq13aDB5R4DM43zcuSeLa4jf6AStgYon6PbDShoPfXpNQ6 -0zSDbHajQxUbP/Bcxy1FheN2QvCXPcbCm95GW+2FeIeOeJMdsAv3JkkokpYNd4vI -dJ++gEGqmWm7XZzpzdrhcu/u0nfzB4DW930Sdj04r7PuVUH6e70nZ+rnSb7xOzl0 -U7+QIU/wJ44/TIT1nryOtb9uyr/ZOIccwt88oH36RDZbpCX/Pct375WD7OrZPGRh -c4UPVF42UUgGAYJwOAj5RIyfCMyAEra+IBZzTWk3Xr+j9mTHKheVcxKuelWjGtdx -Sg1fMlNMGCU/CV3mNfEWvNtCWOvhJY7owavxoRUvFcioqB/zt8BFI2H5Lot8AP/R -cIHfoiEWZN7oFuhScItyjuqgg157XCjRFHEWOhEmdN0DvkyDeAqyJKbwKicjr6Ug -BgADJP8L3UYR5+gMEyM77NLwCqpS94DRzHBwggc/2gdFKl85SlncFRzMuEz6pMew -AVX0YAg07Wt3+0dyIo3q7cw8azJBPquX8QeTItuY5oZ+Js6JzLDa7Zr3V8tie8t5 -WVWcLHPr63aaE3BzW7XPH9puqQVy0n0asSgBBT+kL1FEiNEw++uQ15Jt4naUAslI -e3H5pMPJLl44JNEKBQzJq3wfphELCE9fJhewXhEFLUeOk/oNeB70uzv1R6i1uyK+ -NAc0D/g84WD2AV13EGchkrhvO1S2JrWdU9b/+VzHa2i7wdsueeC/SODxuGqDqMaK -f0lWvxYXv6MLE92hiBlNgwTpePmnGO/kB3tIPWWk4mREqZTR1bvvA+5KBDiZFx0k -dJYLQe7vcR5sX2d9pQeIhrMbtffuRNKml/wKO1b4Kp7AU0WqnkLASnIiNrsBJ1s4 -kMKeEqBGVIxVUM5ArJFLLqzkTPMHF8rG8B4GpSCiSMJsIaTSb+5Wv1P5gtYQKuqF diff --git a/cloud/classic/wordpress/env/example.env b/cloud/classic/wordpress/env/example.env deleted file mode 100644 index 0130d021e..000000000 --- a/cloud/classic/wordpress/env/example.env +++ /dev/null @@ -1,14 +0,0 @@ -U2FsdGVkX19eh668GvB4pzPb+nL7K2AVOxUXqWfCkseME4ZAJLdy0s/vEK76mJ+J -pPlgJb/oKQ0sUX+wFYZy2nsfejW3FKI6sLyeHuGE9+c9ozivDLSGSGBmUuKJjWHg -iI6u0kwwNATW78hYIOXJCP5kLLxjN0Oes5wb/yWAI8Dx4vECXxYGenUp2moVvjBL -nE8OSPNY/ZHbZspFinm/eCccdfjIcRv+PKB4qIAF2r6eS6EQSJJ5O9PqXsQZHD+o -0gr+XDqiG429WI5RCZdZZbmT3KzQRperMJVrFQ5aHvtHDaUPfThTyCvUv4JxY3P5 -+yZPvoxG9ppOp8Fj6epX6gjg27pA6CJOdCMl17BaqGKCOTI8Ft0r2/PgwUv1szjQ -6+7E5mx94GRXs5vQbytxthh/FxMIK/PEZvUbu9sGF0C2pptscIf/pZU93mkpOhBM -jJpCZcUgJN5mH9G5WFSzGvAphF8k0QyjbLjoKGI8MllKR3hkP39MBgP/r9VUjvtF -A5saKqjAgur6+Grlc11EOonNAFSPQhloLwPUHpPVfWDFEjyVfGmODt8p5z1AWC1+ -mEhPNkz+NWvXG2xz/c6c93AL0N2ya4OI/+WOKH43MBGf4aJJZL9LT/3wCUPUKsI4 -I9HLoB9tG8ZpiWlHTLDyh4TlzTOmblaenTHa8liKsDYEjx3339/vpS31DSdyuUSs -tJNTx83btqEVojMdAgpRlrnk94oIs6RVI2G+Ia6P8fcqrJoJoU1m4/sKf/DrxFM7 -kp86S+y6OlEOV8aKYbrU8BLMPez578e4ZbbiY8+Ut+0ymw5kYQhCyKUJxtwLGJ/q -HMtCMw0d+RH1XcGYJca97RPX2J1sjZtgdUci3rBsw24= diff --git a/cloud/classic/wordpress/env/ympedia-intro.env b/cloud/classic/wordpress/env/ympedia-intro.env deleted file mode 100644 index a77f05f94..000000000 --- a/cloud/classic/wordpress/env/ympedia-intro.env +++ /dev/null @@ -1,14 +0,0 @@ -U2FsdGVkX1/Ehnp9QnbOXOCvwvBM7oJXiVgTC/McAxzzbQn63DgTJt+bW1nI2TDk -F9w27CVncWYi5aVmUtVymKAsVC3pwNV71xLoH135C4o3js9TFZtYWsKJgiH6KSuS -vx9doJ+kXYoAg72LzCECVmTain3fdkK8CaR0Xi5sHbipAlA3IVa3TNBpnvovd75t -YOiBQPvVubnASOKeYN5cmC/PTO3ca8kn7Lsv7qgxCiqFion43YZ6Ef6Ya0YRBMy3 -SzXW3d+5etcvv50eaa3QgnPAJl7MVa3izRF+nBekf5qpGikxpj0Zhaf10Bb0asuM -Xi43BlXHbKguYT8uvhCaqByOPMwoMVb1+INKdQH199NogHggq9QOKo4ziTQ4kk6f -wAjomzuk0cNgiI5VS3Au24TWy0YYdArZmQo4ZBuDaiqKDlgIi5zRcb7WY+VfVNdN -9Kp3h56jG6yEJreXWAHf5kk+65xK6bZ5E1cjb4L9Th03ULvaQHOphV0x0SYImnoj -IHFcAYFc+2v9xmSZzkSeMmnht7rCXLcFP4m3pqU3qy4zmWEMgOJtUIn03PjcaF35 -FEPJQ4JEQXfuqDLrZH4gllzqdj+cQBcpZtx1yfn5TbQVvNT+8zi5v5ZHlt8ewwX2 -Uj/gINe8PTBQNba3B2yO0GG9yCVaWcOAtjQvHYs+URhRJa+FNGYtvKAZ/H9zZjZ4 -lTyNn3yXw029vaizbTgy0tvAlJJuwaITiJPRuFKvAgLSuAIl93LzPjA99e7bWjna -kI8WUtafK4suUP0J7yRUqlj2U3t5vDkTAyXq9xAaQ3i4klNCHe9RFgqcT0Txnnxx -TV2R/CI8DfsT7LmsSrJfcMM78+jDvQtOaQlFVXpPaXPmZiLxGcoEPbnzciXI/jck diff --git a/cloud/classic/wordpress/nginx/.dockerignore b/cloud/classic/wordpress/nginx/.dockerignore deleted file mode 100644 index f57b03055..000000000 --- a/cloud/classic/wordpress/nginx/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -* -!nginx.conf -!conf.d -!toggle-cache.html diff --git a/cloud/classic/wordpress/nginx/Dockerfile b/cloud/classic/wordpress/nginx/Dockerfile deleted file mode 100644 index 88a27d103..000000000 --- a/cloud/classic/wordpress/nginx/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -ARG NGINX_IMAGE=ghcr.io/alimd/nginx:1.9.2-1.25-alpine -FROM $NGINX_IMAGE - -RUN rm -rfv /etc/nginx/templates /etc/nginx/conf.d/* /etc/nginx/nginx.conf - -COPY toggle-cache.html /var/www/ -COPY conf.d/ /etc/nginx/conf.d/ -COPY nginx.conf /etc/nginx/ diff --git a/cloud/classic/wordpress/nginx/conf.d/fastcgi.conf b/cloud/classic/wordpress/nginx/conf.d/fastcgi.conf deleted file mode 100644 index 474b1814a..000000000 --- a/cloud/classic/wordpress/nginx/conf.d/fastcgi.conf +++ /dev/null @@ -1,71 +0,0 @@ -# regex to split $uri to $fastcgi_script_name and $fastcgi_path -# This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default) # ? -fastcgi_split_path_info ^(.+\.php)(/.+)$; -fastcgi_connect_timeout 10s; -fastcgi_send_timeout 15s; -fastcgi_read_timeout 120s; - -fastcgi_buffer_size 256k; -fastcgi_buffers 4 256k; -fastcgi_busy_buffers_size 256k; -fastcgi_temp_file_write_size 4m; -fastcgi_max_temp_file_size 4m; -fastcgi_intercept_errors off; - -# fastcgi_keep_conn on; # its must be on for keepalive in upstream work - -fastcgi_cache fastcgicache; -fastcgi_cache_valid 302 307 5s; -fastcgi_cache_valid 403 404 5m; -fastcgi_cache_valid 200 206 301 24h; -fastcgi_cache_revalidate on; # ? -fastcgi_cache_background_update on; # ? -fastcgi_cache_lock on; -fastcgi_cache_use_stale error timeout invalid_header updating http_500; -fastcgi_cache_min_uses 1; -#fastcgi_cache_purge $purge_method; # active module - -fastcgi_cache_bypass $no_cache; -fastcgi_no_cache $no_cache; - -fastcgi_pass_request_headers on; -fastcgi_pass_request_body on; -fastcgi_ignore_headers Cache-Control Expires Set-Cookie; -fastcgi_hide_header X-Powered-By; -# Remove cached Set-Cookie header to prevent same cookie for all users! -#fastcgi_hide_header Set-Cookie; -#fastcgi_hide_header Cookie; - -fastcgi_param GATEWAY_INTERFACE CGI/1.1; -fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; - -fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; -fastcgi_param SCRIPT_NAME $fastcgi_script_name; -fastcgi_param QUERY_STRING $query_string; -fastcgi_param REQUEST_METHOD $request_method; -fastcgi_param CONTENT_TYPE $content_type if_not_empty; -fastcgi_param CONTENT_LENGTH $content_length; - -fastcgi_param REQUEST_URI $request_uri; -fastcgi_param DOCUMENT_URI $document_uri; -fastcgi_param DOCUMENT_ROOT $document_root; -fastcgi_param SERVER_PROTOCOL $server_protocol; -fastcgi_param REQUEST_SCHEME $scheme; -fastcgi_param HTTPS $https if_not_empty; - -fastcgi_param REMOTE_ADDR $http_x_real_ip; -fastcgi_param REMOTE_PORT $remote_port; -fastcgi_param SERVER_ADDR $server_addr; -fastcgi_param SERVER_PORT $server_port; -fastcgi_param SERVER_NAME $server_name; - -# PHP only, required if PHP was built with --enable-force-cgi-redirect -fastcgi_param REDIRECT_STATUS 200; - -# Bypass the fact that try_files resets $fastcgi_path_info -# see: https://trac.nginx.org/nginx/ticket/321 -set $path_info $fastcgi_path_info; -fastcgi_param PATH_INFO $path_info; - -## Fix HTTPoxy vulnerability https://httpoxy.org/#mitigate-nginx -# fastcgi_param HTTP_PROXY ''; diff --git a/cloud/classic/wordpress/nginx/conf.d/mime-expire.conf b/cloud/classic/wordpress/nginx/conf.d/mime-expire.conf deleted file mode 100644 index 5c6d8456a..000000000 --- a/cloud/classic/wordpress/nginx/conf.d/mime-expire.conf +++ /dev/null @@ -1,53 +0,0 @@ -map $sent_http_content_type $expires { - default off; - ~assets/ max; - application/ecmascript max; - application/javascript max; - application/json max; - application/pdf max; - application/postscript max; - application/font-woff max; - application/font-woff2 max; - application/x-javascript max; - application/vnd.ms-fontobject max; - application/x-font-opentype max; - application/x-font-truetype max; - application/x-font-ttf max; - application/xml max; - image/gif max; - image/jpeg max; - image/png max; - image/svg+xml max; - image/tiff max; - image/x-icon max; - image/vnd.microsoft.icon max; - image/webp max; - text/x-component max; - text/x-js max; - text/css max; - text/csv max; - text/html epoch; - text/javascript max; - text/plain epoch; - text/xml max; - text/xsd max; - text/xsl max; - font/eot max; - font/opentype max; - font/otf max; - font/woff max; - font/woff2 max; - video/3gpp max; - video/mp4 max; - video/mpeg max; - video/ogg max; - video/quicktime max; - video/webm max; - video/x-flv max; - video/x-mng max; - video/x-ms-asf max; - video/x-ms-wmv max; - video/x-msvideo max; -} - -expires $expires; diff --git a/cloud/classic/wordpress/nginx/conf.d/mime.conf b/cloud/classic/wordpress/nginx/conf.d/mime.conf deleted file mode 100644 index 6dfed9cc5..000000000 --- a/cloud/classic/wordpress/nginx/conf.d/mime.conf +++ /dev/null @@ -1,95 +0,0 @@ -default_type application/octet-stream; - -types { - application/atom+xml atom; - application/json json map topojson; - application/ld+json jsonld; - application/rss+xml rss; - application/vnd.geo+json geojson; - application/xml rdf xml; - application/javascript js; - application/manifest+json webmanifest; - application/x-web-app-manifest+json webapp; - text/cache-manifest appcache; - audio/midi mid midi kar; - audio/mp4 aac f4a f4b m4a; - audio/mpeg mp3; - audio/ogg oga ogg opus; - audio/x-realaudio ra; - audio/x-wav wav; - image/bmp bmp; - image/gif gif; - image/jpeg jpeg jpg; - image/jxr jxr hdp wdp; - image/png png; - image/svg+xml svg svgz; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/webp webp; - image/x-jng jng; - video/3gpp 3gp 3gpp; - video/mp4 f4p f4v m4v mp4; - video/mpeg mpeg mpg; - video/ogg ogv; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-mng mng; - video/x-ms-asf asf asx; - video/x-ms-wmv wmv; - video/x-msvideo avi; - image/x-icon cur ico; - application/msword doc; - application/vnd.ms-excel xls; - application/vnd.ms-powerpoint ppt; - application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; - application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; - application/font-woff woff; - font/woff2 woff2; - application/vnd.ms-fontobject eot; - application/font-sfnt ttf otf; - application/java-archive ear jar war; - application/mac-binhex40 hqx; - application/octet-stream bin deb dll dmg exe img iso msi msm msp safariextz; - application/pdf pdf; - application/postscript ai eps ps; - application/rtf rtf; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/vnd.wap.wmlc wmlc; - application/x-7z-compressed 7z; - application/x-bb-appworld bbaw; - application/x-bittorrent torrent; - application/x-chrome-extension crx; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-opera-extension oex; - application/x-perl pl pm; - application/x-pilot pdb prc; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert crt der pem; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xslt+xml xsl; - application/zip zip; - text/css css; - text/csv csv; - text/html htm html shtml; - text/markdown md; - text/mathml mml; - text/plain txt; - text/vcard vcard vcf; - text/vnd.rim.location.xloc xloc; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/vtt vtt; - text/x-component htc; -} diff --git a/cloud/classic/wordpress/nginx/conf.d/nocache.conf b/cloud/classic/wordpress/nginx/conf.d/nocache.conf deleted file mode 100644 index 4422a7f76..000000000 --- a/cloud/classic/wordpress/nginx/conf.d/nocache.conf +++ /dev/null @@ -1,39 +0,0 @@ -# Skip fastcgi cache for following patterns -map $request_uri $no_cache { - # 0 => enable cache - # 1 => skip cache - - default 0; - # default 1; # temporary disable cache - - ~*\/wp-admin\/.* 1; - ~*\/wp-content/plugins\/.* 1; - ~*\/wp-[a-zA-Z0-9-]+\.php 1; - ~*\/feed\/.* 1; - ~*\/administrator\/.* 1; - ~*\/sitemap(_index)?.xml 1; - ~*\/xmlrpc.php 1; - ~*\/wp-.*.php 1; - ~*\/index.php 1; - - # woocommerce - ~*\/cart.* 1; - ~*\/checkout.* 1; - ~*\/my-account.* 1; - ~*\/account.* 1; - ~*\/profile.* 1; - ~*\/addons.* 1; - ~*\/login.* 1; - ~*\/wc-ajax.* 1; - - HEAD 0; - GET 0; -} - -map $http_cookie $no_cache { - ~*no_cache* 1; - ~*comment_author* 1; - ~*wp-postpass* 1; - ~*wordpress_test_cookie* 1; - ~*wordpress_logged_in* 1; -} diff --git a/cloud/classic/wordpress/nginx/conf.d/secure.conf b/cloud/classic/wordpress/nginx/conf.d/secure.conf deleted file mode 100644 index e83ef100d..000000000 --- a/cloud/classic/wordpress/nginx/conf.d/secure.conf +++ /dev/null @@ -1,62 +0,0 @@ -location ~* (?:\.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op]|lock)|~)$ { - deny all; - access_log off; log_not_found off; -} -location ~* \.(pl|cgi|py|sh|lua)\$ { - deny all; - return 444; -} -location ~* (w00tw00t) { - deny all; - return 444; -} -location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)\$|^(\..*|Entries.*|Repository|Root|Tag|Template)\$|\.php_ { - deny all; - return 444; -} -location = /xmlrpc.php { - deny all; - return 444; -} -location = /robots.txt { - access_log off; log_not_found off; -} -location = /favicon.ico { - access_log off; log_not_found off; -} -location ~ /\. { - deny all; - access_log off; log_not_found off; -} -location ~* wp-includes/theme-compat/ { - deny all; -} -location ~* /(\.|wp-config\.php|wp-config\.txt|changelog\.txt|readme\.txt|readme\.html|license\.txt) { - deny all; -} -location ~* wp-includes/js/tinymce/langs/.*.php { - deny all; -} -location ~* /(?:uploads|files|wp-content|wp-includes)/.*\.php\$ { - deny all; -} -location ~* /wp-content/uploads/nginx-helper/ { - internal; -} -location ~* ^/(wp-content)/(.*?)\.(zip|gz|tar|bzip2|7z)\$ { - deny all; -} -location ~ ^/wp-content/uploads/sucuri { - deny all; -} -location ~ ^/wp-content/updraft { - deny all; -} -location ~ ^/wp-content/uploads/.*.(php|pl|py|jsp|asp|htm|html|shtml|sh|cgi)$ { - types { } - default_type text/plain; -} - -# if ($request_method !~ ^(GET|HEAD|POST)$ ) { -# return 405; -# } diff --git a/cloud/classic/wordpress/nginx/nginx.conf b/cloud/classic/wordpress/nginx/nginx.conf deleted file mode 100644 index 6c20ae41e..000000000 --- a/cloud/classic/wordpress/nginx/nginx.conf +++ /dev/null @@ -1,165 +0,0 @@ -# Configuration File - Nginx Server Configs -# http://nginx.org/en/docs/dirindex.html - -# The file storing the process ID of the main process -pid /var/run/nginx.pid; - -# Run as a unique, less privileged user for security reasons. -# user www-data www-data; # user group -user nginx; - -# Sets the worker threads to the number of CPU cores available in the system for best performance. -# Should be > the number of CPU cores. -# Maximum number of connections = worker_processes * worker_connections -worker_processes auto; - -# Reduces timer resolution in worker processes, thus reducing the number of gettimeofday() system calls made. By default, gettimeofday() is called each time a kernel event is received. With reduced resolution, gettimeofday() is only called once per specified interval. -timer_resolution 100ms; - -# Defines named thread pools used for multi-threaded reading and sending of files without blocking worker processes. -thread_pool default threads=32 max_queue=65536; - -events { - # https://nginx.org/en/docs/events.html - # use epoll; - - # Sets the maximum number of simultaneous connections that can be opened by a worker process. - # Should be < worker_rlimit_nofile. - worker_connections 2048; - - # accept as many connections as possible, may flood worker connections if set too low -- for testing environment - # multi_accept on; -} - -http { - # set all cache temp paths - client_body_temp_path /var/cache/client_body 1 2; - proxy_temp_path /var/cache/proxy_temp_path 1 2; - fastcgi_temp_path /var/cache/fastcgi_temp 1 2; - uwsgi_temp_path /var/cache/uwsgi_temp 1 2; - scgi_temp_path /var/cache/scgi_temp 1 2; - - log_format simple "$time_local $remote_addr (c:$upstream_cache_status, n:$no_cache) $request_method $scheme://$host$request_uri"; - # access_log /var/log/nginx/access.log simple; - access_log off; - error_log /var/log/nginx/error.log notice; - - server_tokens off; - - tcp_nopush off; - tcp_nodelay off; - sendfile on; - sendfile_max_chunk 512k; - - # fix dns for docker and ssl - resolver 127.0.0.11 ipv6=off valid=10s; - resolver_timeout 5s; - #resolver 1.1.1.1 8.8.8.8 8.8.4.4 valid=60s; - #resolver_timeout 15s; - - - # allow the server to close connection on non responding client, this will free up memory - reset_timedout_connection on; - - # Controls whether header fields with invalid names should be ignored. Valid names are composed of English letters, digits, hyphens, and possibly underscores - ignore_invalid_headers on; - - # Sets the maximum allowed size of the client request body - client_max_body_size 100m; - - index index.html index.php; - - #real_ip_header X-Real-IP; - real_ip_header X-Forwarded-For; - real_ip_recursive on; - set_real_ip_from 172.0.0.0/10; - set_real_ip_from 10.0.0.0/10; - - # limit_req_zone $binary_remote_addr zone=req_zone:10m rate=200r/s; - limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1000r/s; - limit_req_status 503; - limit_req_log_level notice; - - # limit_req zone=req_zone burst=1200; - limit_req zone=req_zone burst=3000; - - fastcgi_cache_path /var/cache/fastcgi - levels=1:2 - keys_zone=fastcgicache:10m - inactive=48h - max_size=4g; - - fastcgi_cache_key $scheme$request_method$host$request_uri; - fastcgi_cache_use_stale error timeout invalid_header http_500; - - # map $request_method $purge_method { - # PURGE 1; - # default 0; - # } - - open_file_cache max=10000 inactive=300s; # removed from the cache if it has not been accessed during `inactive` time - open_file_cache_valid 1h; # Sets a time after which open_file_cache elements should be validated. - open_file_cache_min_uses 2; # Sets the minimum number of file accesses during the period configured by the inactive parameter - open_file_cache_errors on; # Enables or disables caching of file lookup errors by open_file_cache. - - open_log_file_cache max=10000 inactive=60s min_uses=2; # We need `open_log_file_cache` becouse https://serverfault.com/questions/547421 - - include /etc/nginx/conf.d/mime.conf; - include /etc/nginx/conf.d/mime-expire.conf; - include /etc/nginx/conf.d/nocache.conf; - - upstream php-fpm { - #zone php-fpm 32k; - ip_hash; - server wordpress-php-fpm:9000 max_fails=4 fail_timeout=30s; - } - - server { - listen 80 default_server; - # listen [::]:80 default_server; - server_name _; - - include /etc/nginx/conf.d/secure.conf; - - root /var/www/html; - - error_page 401 403 404 /error/404.html; - error_page 500 501 503 504 /error/500.html; - - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;" always; # always https - add_header X-Frame-Options SAMEORIGIN; - add_header X-Content-Type-Options nosniff; - add_header X-XSS-Protection "1; mode=block"; - add_header "X-UA-Compatible" "IE=Edge"; - add_header X-Cache $upstream_cache_status; - add_header X-Skip-Cache $no_cache; # for debug - - location / { - # This is cool because no php is touched for static content. - try_files $uri $uri/ /index.php$is_args$args; - } - - location @php-fpm { - try_files $uri =404; - fastcgi_pass php-fpm; - include /etc/nginx/conf.d/fastcgi.conf; - } - - location ~ [^/]\.php(/|$) { - try_files $uri $uri/ /index.php$is_args$args @php-fpm; - fastcgi_pass php-fpm; - include /etc/nginx/conf.d/fastcgi.conf; - } - - location = /toggle-cache.html { - default_type text/html; - alias /var/www/toggle-cache.html; - } - - location /server-info { - access_log off; - default_type text/plain; - return 200 "Alwatr Accelerated Web Server"; - } - } -} diff --git a/cloud/classic/wordpress/nginx/toggle-cache.html b/cloud/classic/wordpress/nginx/toggle-cache.html deleted file mode 100644 index f69513c40..000000000 --- a/cloud/classic/wordpress/nginx/toggle-cache.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - Toggle Wordpress Cache - - - - - -

- - - - diff --git a/cloud/classic/wordpress/php/.dockerignore b/cloud/classic/wordpress/php/.dockerignore deleted file mode 100644 index cddacd6c5..000000000 --- a/cloud/classic/wordpress/php/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!php.conf.ini -!fix-permission.sh diff --git a/cloud/classic/wordpress/php/Dockerfile b/cloud/classic/wordpress/php/Dockerfile deleted file mode 100644 index 0849eba7e..000000000 --- a/cloud/classic/wordpress/php/Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -ARG WORDPRESS_IMAGE=ghcr.io/alimd/wordpress:6.2-php8.2-fpm -FROM $WORDPRESS_IMAGE - -WORKDIR /var/www/html -EXPOSE 80 - -COPY php.conf.ini $PHP_INI_DIR/conf.d/ -COPY fix-permission.sh /usr/local/bin/ -RUN chmod +x /usr/local/bin/fix-permission.sh - -ARG APT_INSTALL -RUN set -ex; \ - if [ -z "$APT_INSTALL" ]; then \ - echo "Skip apt packages: $APT_INSTALL"; \ - else \ - echo "Installing apt packages"; \ - apt-get update -y; \ - apt-get install -y --no-install-recommends $APT_INSTALL; \ - apt-get autoremove -y; \ - apt-get clean -y; \ - rm -rfv /var/lib/apt/lists/*; \ - fi -ARG PHP_EXT_INSTALL -RUN set -ex; \ - if [ -z "$PHP_EXT_INSTALL" ]; then \ - echo "Skip php extensions"; \ - else \ - echo "Installing php extensions: $PHP_EXT_INSTALL"; \ - docker-php-ext-install $PHP_EXT_INSTALL; \ - fi - -ARG SOURCEGUARDIAN_LOADER=0 -RUN set -ex; \ - if [ "$SOURCEGUARDIAN_LOADER" != "1" ]; then \ - echo "Skip sourceguardian loader"; \ - else \ - echo "Installing sourceguardian loader"; \ - PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \ - PHP_EXT_DIR=$(php -i | grep '^extension_dir =' | cut -d' ' -f3); \ - mkdir -p /tmp/sourceguardian; \ - cd /tmp/sourceguardian; \ - curl -sSLO https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.tar.gz; \ - tar xzf loaders.linux-x86_64.tar.gz; \ - mv ixed.${PHP_VERSION}.lin "$PHP_EXT_DIR/sourceguardian.so"; \ - echo "extension=sourceguardian.so" > $PHP_INI_DIR/conf.d/15-sourceguardian.ini; \ - rm -rf /tmp/sourceguardian; \ - fi - -ARG IONCUBE_LOADER=0 -RUN set -ex; \ - if [ "$IONCUBE_LOADER" != "1" ]; then \ - echo "Skip ioncube loader"; \ - else \ - echo "Installing ioncube loader"; \ - PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \ - PHP_EXT_DIR=$(php -i | grep '^extension_dir =' | cut -d' ' -f3); \ - mkdir -p /tmp/ioncube; \ - cd /tmp/ioncube; \ - curl -sSLO http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz; \ - tar xzf ioncube_loaders_lin_x86-64.tar.gz; \ - ls -lah ioncube/; \ - mv ioncube/ioncube_loader_lin_${PHP_VERSION}.so "$PHP_EXT_DIR/ioncube.so"; \ - echo "zend_extension=ioncube.so" > $PHP_INI_DIR/conf.d/16-ioncube.ini; \ - rm -rf /tmp/ioncube; \ - fi diff --git a/cloud/classic/wordpress/php/fix-permission.sh b/cloud/classic/wordpress/php/fix-permission.sh deleted file mode 100755 index 1afed714f..000000000 --- a/cloud/classic/wordpress/php/fix-permission.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -ex - -data=/var/www/html/ -ls -lahF $data -chown www-data:www-data -R $data -find $data -type d -exec chmod 755 {} \; -find $data -type f -exec chmod 644 {} \; -ls -lahF $data - -chown www-data:www-data -R /var/cache -ls -lahF /var/cache diff --git a/cloud/classic/wordpress/php/php.conf.ini b/cloud/classic/wordpress/php/php.conf.ini deleted file mode 100644 index 20dd6e4d6..000000000 --- a/cloud/classic/wordpress/php/php.conf.ini +++ /dev/null @@ -1,21 +0,0 @@ -# Override by WP -error_reporting = E_ALL & ~E_NOTICE - -# Override by WP -display_errors = Off - -log_errors = On -; error_log = /dev/stderr - -memory_limit = 512M -# https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP -# WordPress will automatically check if PHP has been allocated less memory than the entered value before utilizing this function. For example, if PHP has been allocated 64MB, there is no need to set this value to 64M as WordPress will automatically use all 64MB if need be. - -upload_max_filesize = 100M -post_max_size = 100M - -# http://www.php.net/manual/en/info.configuration.php#ini.max-input-time -max_input_time = 600 -max_input_vars = 3000 -# after uplaod compreled max_input_time clock is stopped, max_execution_time clock started -max_execution_time = 120 diff --git a/cloud/container/README.md b/cloud/container/README.md deleted file mode 100644 index 41f8b11cd..000000000 --- a/cloud/container/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Customized Containers diff --git a/cloud/container/adminer/.dockerignore b/cloud/container/adminer/.dockerignore deleted file mode 100644 index 72e8ffc0d..000000000 --- a/cloud/container/adminer/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cloud/container/adminer/Dockerfile b/cloud/container/adminer/Dockerfile deleted file mode 100644 index b47e9a50c..000000000 --- a/cloud/container/adminer/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG ADMINER_IMAGE=docker.io/wodby/adminer:4 -FROM $ADMINER_IMAGE diff --git a/cloud/container/adminer/README.md b/cloud/container/adminer/README.md deleted file mode 100644 index 5a7ba7060..000000000 --- a/cloud/container/adminer/README.md +++ /dev/null @@ -1 +0,0 @@ -# Adminer Container Mirror diff --git a/cloud/container/alpine/.dockerignore b/cloud/container/alpine/.dockerignore deleted file mode 100644 index 72e8ffc0d..000000000 --- a/cloud/container/alpine/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cloud/container/alpine/Dockerfile b/cloud/container/alpine/Dockerfile deleted file mode 100644 index 8eedc338f..000000000 --- a/cloud/container/alpine/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -ARG ALPINE_IMAGE=docker.io/library/alpine:3.17 -FROM $ALPINE_IMAGE - -ARG APK_TESTING -RUN set -ex; \ - if [ "$APK_TESTING" != "1" ]; then \ - echo "Skip alpine edge testing repository"; \ - else \ - echo "Add alpine edge testing repository"; \ - echo 'https://dl-cdn.alpinelinux.org/alpine/edge/testing/' >> /etc/apk/repositories; \ - fi - -ARG APK_INSTALL -RUN set -ex; \ - if [ "$APK_INSTALL" != "1" ]; then \ - echo "Skip apk install"; \ - else \ - echo "Add alpine edge testing repository"; \ - apk add --no-cache ${APK_INSTALL}; \ - fi - -CMD ["/bin/sh"] diff --git a/cloud/container/alpine/README.md b/cloud/container/alpine/README.md deleted file mode 100644 index 448015f1c..000000000 --- a/cloud/container/alpine/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Alpine Container diff --git a/cloud/container/alwatr-pwa.dockerfile b/cloud/container/alwatr-pwa.dockerfile deleted file mode 100644 index a948a98c2..000000000 --- a/cloud/container/alwatr-pwa.dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -ARG NODE_VERSION=20 -ARG ALWATR_NGINX_VERSION=1.9.2-1.25-alpine - -FROM docker.io/library/node:${NODE_VERSION}-alpine as builder - -WORKDIR /app - -ENV NODE_ENV production - -RUN apk add --no-cache git - -# Install dependencies -COPY package.json *.lock ./ -RUN if [ -f *.lock ]; then \ - yarn install --frozen-lockfile --non-interactive --production false; \ - else \ - yarn install --non-interactive --production false; \ - fi; - -COPY . . - -# Reinstall to link internal packages -RUN yarn install --frozen-lockfile --non-interactive --production false; - -# Build all ts files -RUN yarn build:ts - -# Build target package -ARG PACKAGE_SOURCE -RUN set -ex;\ - if [ -z "${PACKAGE_SOURCE}" ]; then\ - echo 'PACKAGE_SOURCE not defined'>&2;\ - exit 1;\ - fi; -RUN set -ex;\ - cd "${PACKAGE_SOURCE}"; pwd; ls -lahF;\ - yarn build;\ - cd dist; pwd; ls -lahF; - -# --- - -FROM ghcr.io/alimd/nginx-pwa:${ALWATR_NGINX_VERSION} as nginx -# Copy builded files from last stage -ARG PACKAGE_SOURCE -COPY --from=builder /app/${PACKAGE_SOURCE}/dist/ ./ -RUN pwd; ls -lAhF; diff --git a/cloud/container/alwatr-services.dockerfile b/cloud/container/alwatr-services.dockerfile deleted file mode 100644 index a1d626e67..000000000 --- a/cloud/container/alwatr-services.dockerfile +++ /dev/null @@ -1,71 +0,0 @@ -ARG NODE_VERSION=20 - -FROM docker.io/library/node:${NODE_VERSION}-alpine as builder - -WORKDIR /app - -ENV NODE_ENV production - -# Install dependencies -COPY package.json *.lock ./ -RUN if [ -f *.lock ]; then \ - yarn install --frozen-lockfile --non-interactive --production false; \ - else \ - yarn install --non-interactive --production false; \ - fi; - -COPY . . - -# Reinstall to link internal packages -RUN yarn install --frozen-lockfile --non-interactive --production false; - -# Build all ts files -RUN yarn build:ts - -# Build target package -ARG PACKAGE_SOURCE -RUN set -ex;\ - if [ -z "${PACKAGE_SOURCE}" ]; then\ - echo 'PACKAGE_SOURCE not defined'>&2;\ - exit 1;\ - fi; -RUN set -ex;\ - cd "${PACKAGE_SOURCE}"; pwd; ls -lahF;\ - yarn build;\ - cd dist; pwd; ls -lahF; - -# Clean devDependencies -RUN set -ex;\ - pwd;\ - rm -rf node_modules;\ - yarn install --frozen-lockfile --non-interactive --production true; - -# --- - -FROM docker.io/library/node:${NODE_VERSION}-alpine as app - -WORKDIR /app - -# Install tini for recive system signal in nodejs -# RUN apk add --no-cache tini -# ENTRYPOINT ["/sbin/tini", "--"] -CMD ["yarn", "serve"] - -ENV NODE_ENV production -ENV NODE_OPTIONS --enable-source-maps -# ENV ALWATR_DEBUG 1 -ENV HOST 0.0.0.0 -ENV PORT 80 -EXPOSE 80 - -# Tell nodejs to run as ESM Modules -# RUN echo '{"type":"module"}' > package.json - -# Copy all deps from last stage -COPY --from=builder /app/node_modules ./node_modules - -# Copy builded files from last stage -ARG PACKAGE_SOURCE -COPY --from=builder /app/${PACKAGE_SOURCE}/package.json ./ -COPY --from=builder /app/${PACKAGE_SOURCE}/dist ./dist -RUN pwd; ls -lAhF; diff --git a/cloud/container/mariadb/.dockerignore b/cloud/container/mariadb/.dockerignore deleted file mode 100644 index 72e8ffc0d..000000000 --- a/cloud/container/mariadb/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cloud/container/mariadb/Dockerfile b/cloud/container/mariadb/Dockerfile deleted file mode 100644 index 5f47daf37..000000000 --- a/cloud/container/mariadb/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG MARIADB_IMAGE=docker.io/wodby/mariadb:10.9 -FROM $MARIADB_IMAGE diff --git a/cloud/container/mariadb/README.md b/cloud/container/mariadb/README.md deleted file mode 100644 index 27cc76812..000000000 --- a/cloud/container/mariadb/README.md +++ /dev/null @@ -1 +0,0 @@ -# Mariadb Container Mirror diff --git a/cloud/container/nginx-pwa/.dockerignore b/cloud/container/nginx-pwa/.dockerignore deleted file mode 100644 index 880a35cd4..000000000 --- a/cloud/container/nginx-pwa/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!conf/ diff --git a/cloud/container/nginx-pwa/Dockerfile b/cloud/container/nginx-pwa/Dockerfile deleted file mode 100644 index e4decd331..000000000 --- a/cloud/container/nginx-pwa/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -ARG NGINX_IMAGE=ghcr.io/alimd/nginx:1.9.2-1.25-alpine -FROM $NGINX_IMAGE - -# Default environment for nginx template -ENV NGINX_OPEN_FILE_CACHE="max=1000 inactive=1h" \ - NGINX_OPEN_FILE_CACHE_VALID=1M \ - NGINX_OPEN_FILE_CACHE_MIN_USES=2 \ - NGINX_OUTPUT_BUFFERS="8 8k" \ - NGINX_EXPIRES_DYNAMIC=epoch \ - NGINX_EXPIRES_STATIC=max \ - NGINX_EXPIRES_DEFAULT=epoch \ - NGINX_LIMIT_REQ_RATE=400 - -COPY conf/ /etc/nginx/ diff --git a/cloud/container/nginx-pwa/README.md b/cloud/container/nginx-pwa/README.md deleted file mode 100644 index f670e9be5..000000000 --- a/cloud/container/nginx-pwa/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Alwatr Accelerated PWA Server - -High performance Accelerated NGINX optimized for serve progressive web applications. - -## Usage - -The right way of using the alwatr nginx is behind kubernetes ingress or simple edge reverse-proxy, then don't config edge stuff like gzip compression, ssl, etc or even config domain or multiple websites. - -```Dockerfile -ARG NODE_VERSION=lts -ARG ALWATR_NGINX_VERSION=1 -FROM docker.io/library/node:${NODE_VERSION} as builder -WORKDIR /app -COPY package.json *.lock ./ -RUN if [ -f *.lock ]; then \ - yarn install --frozen-lockfile --non-interactive --production false; \ - else \ - yarn install --non-interactive --production false; \ - fi; -COPY . . -RUN yarn build - -# --- - -FROM ghcr.io/alimd/nginx-pwa:${ALWATR_NGINX_VERSION} as nginx -# Config nginx -ENV NGINX_ACCESS_LOG="/var/log/nginx/access.log json" -# Copy builded files from last stage -COPY --from=builder /app/dist/ ./ -RUN pwd; ls -lAhF; -``` diff --git a/cloud/container/nginx-pwa/conf/entrypoint.d/30-envsubst-on-config-js.sh b/cloud/container/nginx-pwa/conf/entrypoint.d/30-envsubst-on-config-js.sh deleted file mode 100755 index 228c52d89..000000000 --- a/cloud/container/nginx-pwa/conf/entrypoint.d/30-envsubst-on-config-js.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# vim:sw=2:ts=2:sts=2:et - -set -e - -ME=$(basename $0) - -config_js_envsubst() { - local config_js_path="${NGINX_ENVSUBST_CONFIG_JS_PATH:-/var/www/html/config.js}" - - local defined_envs=$(printf '${%s} ' $(env | cut -d= -f1)) - [ -f "$config_js_path" ] || return 0 - if [ ! -w "$config_js_path" ]; then - echo >&3 "$ME: ERROR: $config_js_path exists, but is not writable" - return 0 - fi - echo >&3 "$ME: Running envsubst on $config_js_path" - envsubst "$defined_envs" < "$config_js_path" > "${config_js_path}.tmp" - mv -f "${config_js_path}.tmp" "$config_js_path" -} - -config_js_envsubst - -exit 0 diff --git a/cloud/container/nginx-pwa/conf/templates/location.d/90-pwa.conf.template b/cloud/container/nginx-pwa/conf/templates/location.d/90-pwa.conf.template deleted file mode 100644 index 8b027ecd2..000000000 --- a/cloud/container/nginx-pwa/conf/templates/location.d/90-pwa.conf.template +++ /dev/null @@ -1,7 +0,0 @@ -location ~ /(config\.js|service-worker\.js|manifest\.webmanifest)$ { - expires epoch; -} - -location / { - try_files $uri /index.html =404; -} diff --git a/cloud/container/nginx-storage/.dockerignore b/cloud/container/nginx-storage/.dockerignore deleted file mode 100644 index b24bd7b39..000000000 --- a/cloud/container/nginx-storage/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -* -!conf/ -!_error.json -!_404.json diff --git a/cloud/container/nginx-storage/Dockerfile b/cloud/container/nginx-storage/Dockerfile deleted file mode 100644 index 0ad1e4008..000000000 --- a/cloud/container/nginx-storage/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -ARG NGINX_IMAGE=ghcr.io/alimd/nginx:1.9.2-1.25-alpine -FROM $NGINX_IMAGE - -# Default environment for nginx template -ENV NGINX_OPEN_FILE_CACHE="max=5000 inactive=1h" \ - NGINX_OPEN_FILE_CACHE_VALID=1s \ - NGINX_OPEN_FILE_CACHE_MIN_USES=2 \ - NGINX_OUTPUT_BUFFERS="8 8k" \ - NGINX_DOCUMENT_ROOT=/storage/publistore \ - NGINX_EXPIRES_DYNAMIC=epoch \ - NGINX_EXPIRES_STATIC=max \ - NGINX_EXPIRES_DEFAULT=epoch \ - NGINX_DISABLE_SYMLINKS=if_not_owner \ - NGINX_LIMIT_REQ_RATE=400 - -COPY _error.json /var/www/ -COPY conf/ /etc/nginx/templates/ diff --git a/cloud/container/nginx-storage/README.md b/cloud/container/nginx-storage/README.md deleted file mode 100644 index c6018bae9..000000000 --- a/cloud/container/nginx-storage/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Alwatr Accelerated Storage Server - -High performance Accelerated NGINX optimized for serve alwatr storage server json. - -## Usage - -The right way of using the alwatr nginx is behind kubernetes ingress or simple edge reverse-proxy, then don't config edge stuff like gzip compression, ssl, etc or even config domain or multiple websites. - -```Dockerfile -ARG NODE_VERSION=lts -ARG ALWATR_NGINX_VERSION=1 -FROM docker.io/library/node:${NODE_VERSION} as builder -WORKDIR /app -COPY package.json *.lock ./ -RUN if [ -f *.lock ]; then \ - yarn install --frozen-lockfile --non-interactive --production false; \ - else \ - yarn install --non-interactive --production false; \ - fi; -COPY . . -RUN yarn build - -# --- - -FROM ghcr.io/alimd/nginx-pwa:${ALWATR_NGINX_VERSION} as nginx -# Config nginx -ENV NGINX_ACCESS_LOG="/var/log/nginx/access.log json" -# Copy builded files from last stage -COPY --from=builder /app/dist/ ./ -RUN pwd; ls -lAhF; -``` diff --git a/cloud/container/nginx-storage/_error.json b/cloud/container/nginx-storage/_error.json deleted file mode 100644 index 4d837d326..000000000 --- a/cloud/container/nginx-storage/_error.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "ok": false, - "statusCode": , - "errorCode": "error_", - "meta": { - "status": "" - } -} diff --git a/cloud/container/nginx-storage/conf/http.d/42-map-bearer-token.conf.template b/cloud/container/nginx-storage/conf/http.d/42-map-bearer-token.conf.template deleted file mode 100644 index e6b73f941..000000000 --- a/cloud/container/nginx-storage/conf/http.d/42-map-bearer-token.conf.template +++ /dev/null @@ -1,4 +0,0 @@ -map $http_authorization $bearer_token { - ~*^Bearer\s+(?\S+)$ $token; - default ''; -} diff --git a/cloud/container/nginx-storage/conf/location.d/10-error-page.conf.template b/cloud/container/nginx-storage/conf/location.d/10-error-page.conf.template deleted file mode 100644 index 55796bf92..000000000 --- a/cloud/container/nginx-storage/conf/location.d/10-error-page.conf.template +++ /dev/null @@ -1,9 +0,0 @@ -error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 421 422 423 424 425 426 428 429 431 451 500 501 502 503 504 505 506 507 508 510 511 /_error.json; - -location = /_error.json { - internal; - ssi on; - ssi_types *; - auth_basic off; - root /var/www; -} diff --git a/cloud/container/nginx-storage/conf/location.d/40-json.conf.template b/cloud/container/nginx-storage/conf/location.d/40-json.conf.template deleted file mode 100644 index 84eabc4fb..000000000 --- a/cloud/container/nginx-storage/conf/location.d/40-json.conf.template +++ /dev/null @@ -1,39 +0,0 @@ -location = / { - # return static json for home page - default_type application/json; - return 200 '{"ok": true, "data": "..:: Alwatr Accelerated Storage Server ::.."}'; -} - -# Serve all data for publics without any token. -location /hub { - try_files $uri.json @not_found; -} - -# Serve privated data that in a secure valud that can accessable only by a valid user token. -location /vault { - if ($bearer_token = "") { - return 401; - } - if (!-d $document_root/auth/$bearer_token) { - return 403; - } - - try_files $uri.json @not_found; -} - -# Serve privated user data that is different for each token. -location ~ ^/auth/(?.*)$ { - if ($bearer_token = "") { - return 401; - } - if (!-d $document_root/auth/$bearer_token) { - return 403; - } - - try_files /auth/$bearer_token/$doc_path.json @not_found; -} - -location @not_found { - default_type application/json; - return 200 '{"ok": true, "data": null}'; -} diff --git a/cloud/container/nginx-ws/.dockerignore b/cloud/container/nginx-ws/.dockerignore deleted file mode 100644 index 880a35cd4..000000000 --- a/cloud/container/nginx-ws/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!conf/ diff --git a/cloud/container/nginx-ws/Dockerfile b/cloud/container/nginx-ws/Dockerfile deleted file mode 100644 index 19f43fa88..000000000 --- a/cloud/container/nginx-ws/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -ARG NGINX_IMAGE=ghcr.io/alimd/nginx:1.9.2-1.25-alpine -FROM $NGINX_IMAGE - -# Default environment for nginx template -ENV NGINX_OPEN_FILE_CACHE="max=1000 inactive=1h" \ - NGINX_OPEN_FILE_CACHE_VALID=1M \ - NGINX_OPEN_FILE_CACHE_MIN_USES=2 \ - NGINX_OUTPUT_BUFFERS="8 8k" \ - NGINX_EXPIRES_DYNAMIC=epoch \ - NGINX_EXPIRES_DEFAULT=epoch \ - NGINX_EXPIRES_STATIC=max \ - NGINX_LIMIT_REQ_RATE=200 - -COPY conf/ /etc/nginx/ diff --git a/cloud/container/nginx-ws/README.md b/cloud/container/nginx-ws/README.md deleted file mode 100644 index 7b2912e6e..000000000 --- a/cloud/container/nginx-ws/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Accelerated Static Website Server - -High performance Accelerated NGINX optimized for serve static website. diff --git a/cloud/container/nginx-ws/conf/templates/location.d/90-ws.conf.template b/cloud/container/nginx-ws/conf/templates/location.d/90-ws.conf.template deleted file mode 100644 index 450a15b77..000000000 --- a/cloud/container/nginx-ws/conf/templates/location.d/90-ws.conf.template +++ /dev/null @@ -1,3 +0,0 @@ -location ~ /(service-worker\.js|manifest\.webmanifest)$ { - expires epoch; -} diff --git a/cloud/container/nginx/.dockerignore b/cloud/container/nginx/.dockerignore deleted file mode 100644 index 8a02ce757..000000000 --- a/cloud/container/nginx/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!conf/ -!www/ diff --git a/cloud/container/nginx/Dockerfile b/cloud/container/nginx/Dockerfile deleted file mode 100644 index 420e6c2bc..000000000 --- a/cloud/container/nginx/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -ARG NGINX_IMAGE=docker.io/library/nginx:1.25-alpine -FROM $NGINX_IMAGE - -# Default environment for nginx template -# ENV NGINX_ACCESS_LOG="/var/log/nginx/access.log json" -ENV NGINX_ACCESS_LOG=off \ - NGINX_ERROR_LOG_LEVEL=notice \ - NGINX_WORKER_CONNECTIONS=2048 \ - NGINX_CLIENT_MAX_BODY_SIZE=10m \ - NGINX_SENDFILE=on \ - NGINX_SENDFILE_MAX_CHUNK=2m \ - NGINX_TCP_NOPUSH=on \ - NGINX_TCP_NODELAY=on \ - NGINX_OPEN_FILE_CACHE="max=1000 inactive=30m" \ - NGINX_OPEN_FILE_CACHE_VALID=1d \ - NGINX_OPEN_FILE_CACHE_MIN_USES=2 \ - NGINX_OUTPUT_BUFFERS="8 16k" \ - NGINX_EXPIRES_DYNAMIC=max \ - NGINX_EXPIRES_STATIC=max \ - NGINX_EXPIRES_DEFAULT=max \ - NGINX_LIMIT_REQ_RATE=200 \ - NGINX_LIMIT_REQ_BURST=1000 \ - NGINX_LIMIT_REQ_ERROR=503 \ - NGINX_LIMIT_REQ_LOG=notice \ - NGINX_AUTOINDEX=off \ - NGINX_DOCUMENT_ROOT=/var/www/html \ - NGINX_DISABLE_SYMLINKS=if_not_owner \ - NGINX_FORCE_DOMAIN="" \ - NGINX_FORCE_DOMAIN_STATUS=302 \ - NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE=1 \ - NGINX_ENTRYPOINT_QUIET_LOGS="" - -RUN apk add --no-cache curl -HEALTHCHECK --interval=30s --timeout=3s --start-period=1s --retries=3 CMD curl -fso /dev/null http://localhost/server-info || exit 1 - -RUN rm -rfv /etc/nginx/conf.d/* -COPY conf/ /etc/nginx/ -COPY www/ /var/www/ -RUN chmod a+rx /etc/nginx/entrypoint.sh /etc/nginx/entrypoint.d/*.sh - -EXPOSE 80 -WORKDIR /var/www/html/ -ENTRYPOINT ["/etc/nginx/entrypoint.sh"] -CMD ["nginx", "-g", "daemon off;"] diff --git a/cloud/container/nginx/README.md b/cloud/container/nginx/README.md deleted file mode 100644 index 90d19ba87..000000000 --- a/cloud/container/nginx/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Alwatr Accelerated Web Server - -High performance Accelerated NGINX optimized for serve static content like CDN. - -## Usage - -The right way of using the alwatr nginx is behind kubernetes ingress or simple edge reverse-proxy, then don't config edge stuff like gzip compression, ssl, etc or even config domain or multiple websites. - -```Dockerfile -FROM ghcr.io/alimd/nginx:1 -``` diff --git a/cloud/container/nginx/conf/entrypoint.d/10-envsubst-on-templates.sh b/cloud/container/nginx/conf/entrypoint.d/10-envsubst-on-templates.sh deleted file mode 100755 index d32b4c01d..000000000 --- a/cloud/container/nginx/conf/entrypoint.d/10-envsubst-on-templates.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -# vim:sw=2:ts=2:sts=2:et - -set -e - -ME=$(basename $0) - -auto_envsubst() { - local template_dir="${NGINX_ENVSUBST_TEMPLATE_DIR:-/etc/nginx/templates}" - local suffix="${NGINX_ENVSUBST_TEMPLATE_SUFFIX:-.template}" - local output_dir="${NGINX_ENVSUBST_OUTPUT_DIR:-/etc/nginx/conf.d}" - - local template defined_envs relative_path output_path subdir - defined_envs=$(printf '${%s} ' $(env | cut -d= -f1)) - [ -d "$template_dir" ] || return 0 - if [ ! -w "$output_dir" ]; then - echo "$ME: ERROR: $template_dir exists, but $output_dir is not writable" - return 0 - fi - find "$template_dir" -follow -type f -name "*$suffix" -print | while read -r template; do - relative_path="${template#$template_dir/}" - output_path="$output_dir/${relative_path%$suffix}" - subdir=$(dirname "$relative_path") - # create a subdirectory where the template file exists - mkdir -p "$output_dir/$subdir" - echo "$ME: Running envsubst on $template to $output_path" - envsubst "$defined_envs" < "$template" > "$output_path" - done -} - -auto_envsubst - -exit 0 diff --git a/cloud/container/nginx/conf/entrypoint.d/20-tune-worker-processes.sh b/cloud/container/nginx/conf/entrypoint.d/20-tune-worker-processes.sh deleted file mode 100755 index 1fcfffe74..000000000 --- a/cloud/container/nginx/conf/entrypoint.d/20-tune-worker-processes.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/sh - -set -eu - -LC_ALL=C -ME=$(basename "$0") -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - -[ "${NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE:-}" ] || exit 0 - -touch /etc/nginx/nginx.conf 2>/dev/null || { echo >&2 "$ME: error: can not modify /etc/nginx/nginx.conf (read-only file system?)"; exit 0; } - -ceildiv() { - num=$1 - div=$2 - echo $(( (num + div - 1) / div )) -} - -get_cpuset() { - cpusetroot=$1 - cpusetfile=$2 - ncpu=0 - [ -f "$cpusetroot/$cpusetfile" ] || return 1 - for token in $( tr ',' ' ' < "$cpusetroot/$cpusetfile" ); do - case "$token" in - *-*) - count=$( seq $(echo "$token" | tr '-' ' ') | wc -l ) - ncpu=$(( ncpu+count )) - ;; - *) - ncpu=$(( ncpu+1 )) - ;; - esac - done - echo "$ncpu" -} - -get_quota() { - cpuroot=$1 - ncpu=0 - [ -f "$cpuroot/cpu.cfs_quota_us" ] || return 1 - [ -f "$cpuroot/cpu.cfs_period_us" ] || return 1 - cfs_quota=$( cat "$cpuroot/cpu.cfs_quota_us" ) - cfs_period=$( cat "$cpuroot/cpu.cfs_period_us" ) - [ "$cfs_quota" = "-1" ] && return 1 - [ "$cfs_period" = "0" ] && return 1 - ncpu=$( ceildiv "$cfs_quota" "$cfs_period" ) - [ "$ncpu" -gt 0 ] || return 1 - echo "$ncpu" -} - -get_quota_v2() { - cpuroot=$1 - ncpu=0 - [ -f "$cpuroot/cpu.max" ] || return 1 - cfs_quota=$( cut -d' ' -f 1 < "$cpuroot/cpu.max" ) - cfs_period=$( cut -d' ' -f 2 < "$cpuroot/cpu.max" ) - [ "$cfs_quota" = "max" ] && return 1 - [ "$cfs_period" = "0" ] && return 1 - ncpu=$( ceildiv "$cfs_quota" "$cfs_period" ) - [ "$ncpu" -gt 0 ] || return 1 - echo "$ncpu" -} - -get_cgroup_v1_path() { - needle=$1 - found= - foundroot= - mountpoint= - - [ -r "/proc/self/mountinfo" ] || return 1 - [ -r "/proc/self/cgroup" ] || return 1 - - while IFS= read -r line; do - case "$needle" in - "cpuset") - case "$line" in - *cpuset*) - found=$( echo "$line" | cut -d ' ' -f 4,5 ) - break - ;; - esac - ;; - "cpu") - case "$line" in - *cpuset*) - ;; - *cpu,cpuacct*|*cpuacct,cpu|*cpuacct*|*cpu*) - found=$( echo "$line" | cut -d ' ' -f 4,5 ) - break - ;; - esac - esac - done << __EOF__ -$( grep -F -- '- cgroup ' /proc/self/mountinfo ) -__EOF__ - - while IFS= read -r line; do - controller=$( echo "$line" | cut -d: -f 2 ) - case "$needle" in - "cpuset") - case "$controller" in - cpuset) - mountpoint=$( echo "$line" | cut -d: -f 3 ) - break - ;; - esac - ;; - "cpu") - case "$controller" in - cpu,cpuacct|cpuacct,cpu|cpuacct|cpu) - mountpoint=$( echo "$line" | cut -d: -f 3 ) - break - ;; - esac - ;; - esac -done << __EOF__ -$( grep -F -- 'cpu' /proc/self/cgroup ) -__EOF__ - - case "${found%% *}" in - "/") - foundroot="${found##* }$mountpoint" - ;; - "$mountpoint") - foundroot="${found##* }" - ;; - esac - echo "$foundroot" -} - -get_cgroup_v2_path() { - found= - foundroot= - mountpoint= - - [ -r "/proc/self/mountinfo" ] || return 1 - [ -r "/proc/self/cgroup" ] || return 1 - - while IFS= read -r line; do - found=$( echo "$line" | cut -d ' ' -f 4,5 ) - done << __EOF__ -$( grep -F -- '- cgroup2 ' /proc/self/mountinfo ) -__EOF__ - - while IFS= read -r line; do - mountpoint=$( echo "$line" | cut -d: -f 3 ) -done << __EOF__ -$( grep -F -- '0::' /proc/self/cgroup ) -__EOF__ - - case "${found%% *}" in - "") - return 1 - ;; - "/") - foundroot="${found##* }$mountpoint" - ;; - "$mountpoint" | /../*) - foundroot="${found##* }" - ;; - esac - echo "$foundroot" -} - -ncpu_online=$( getconf _NPROCESSORS_ONLN ) -ncpu_cpuset= -ncpu_quota= -ncpu_cpuset_v2= -ncpu_quota_v2= - -cpuset=$( get_cgroup_v1_path "cpuset" ) && ncpu_cpuset=$( get_cpuset "$cpuset" "cpuset.effective_cpus" ) || ncpu_cpuset=$ncpu_online -cpu=$( get_cgroup_v1_path "cpu" ) && ncpu_quota=$( get_quota "$cpu" ) || ncpu_quota=$ncpu_online -cgroup_v2=$( get_cgroup_v2_path ) && ncpu_cpuset_v2=$( get_cpuset "$cgroup_v2" "cpuset.cpus.effective" ) || ncpu_cpuset_v2=$ncpu_online -cgroup_v2=$( get_cgroup_v2_path ) && ncpu_quota_v2=$( get_quota_v2 "$cgroup_v2" ) || ncpu_quota_v2=$ncpu_online - -ncpu=$( printf "%s\n%s\n%s\n%s\n%s\n" \ - "$ncpu_online" \ - "$ncpu_cpuset" \ - "$ncpu_quota" \ - "$ncpu_cpuset_v2" \ - "$ncpu_quota_v2" \ - | sort -n \ - | head -n 1 ) - -sed -i.bak -r 's/^(worker_processes)(.*)$/# Commented out by '"$ME"' on '"$(date)"'\n#\1\2\n\1 '"$ncpu"';/' /etc/nginx/nginx.conf diff --git a/cloud/container/nginx/conf/entrypoint.d/30-cleanup-conf.sh b/cloud/container/nginx/conf/entrypoint.d/30-cleanup-conf.sh deleted file mode 100755 index 825e27ff6..000000000 --- a/cloud/container/nginx/conf/entrypoint.d/30-cleanup-conf.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -set -eu - -# Remove some configs base on envs -cleanup_confings() { - if [ -z ${NGINX_FORCE_DOMAIN:-} ]; then - rm -fv /etc/nginx/conf.d/location.d/40-force-domain.conf - fi -} - -cleanup_confings - -exit 0 diff --git a/cloud/container/nginx/conf/entrypoint.sh b/cloud/container/nginx/conf/entrypoint.sh deleted file mode 100755 index d3be9d037..000000000 --- a/cloud/container/nginx/conf/entrypoint.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh - -set -e - - -entrypoint_log() { - if [ -z "${NGINX_ENTRYPOINT_QUIET_LOGS:-}" ]; then - echo "$@" - fi -} - -entrypointDir=/etc/nginx/entrypoint.d/ - -if [ "$1" = "nginx" ] || [ "$1" = "nginx-debug" ]; then - if /usr/bin/find "$entrypointDir" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then - entrypoint_log "$0: $entrypointDir is not empty, will attempt to perform configuration" - - entrypoint_log "$0: Looking for shell scripts in $entrypointDir" - find "$entrypointDir" -follow -type f -print | sort -V | while read -r f; do - case "$f" in - *.envsh) - if [ -x "$f" ]; then - entrypoint_log "$0: Sourcing $f"; - . "$f" - else - # warn on shell scripts without exec bit - entrypoint_log "$0: Ignoring $f, not executable"; - fi - ;; - *.sh) - if [ -x "$f" ]; then - entrypoint_log "$0: Launching $f"; - "$f" - else - # warn on shell scripts without exec bit - entrypoint_log "$0: Ignoring $f, not executable"; - fi - ;; - *) entrypoint_log "$0: Ignoring $f";; - esac - done - - entrypoint_log "$0: Configuration complete; ready for start up" - else - entrypoint_log "$0: No files found in $entrypointDir, skipping configuration" - fi -fi - -exec "$@" diff --git a/cloud/container/nginx/conf/nginx.conf b/cloud/container/nginx/conf/nginx.conf deleted file mode 100644 index b7d740a06..000000000 --- a/cloud/container/nginx/conf/nginx.conf +++ /dev/null @@ -1,9 +0,0 @@ -# Configuration File - Nginx Server Configs -# http://nginx.org/en/docs/dirindex.html - -# Sets the worker threads to the number of CPU cores available in the system for best performance. -# Set NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE=1 to enable auto-tuning. -# Maximum number of connections = worker_processes * worker_connections -worker_processes auto; - -include /etc/nginx/conf.d/*.conf; diff --git a/cloud/container/nginx/conf/templates/00-main.conf.template b/cloud/container/nginx/conf/templates/00-main.conf.template deleted file mode 100644 index 7930e9e9d..000000000 --- a/cloud/container/nginx/conf/templates/00-main.conf.template +++ /dev/null @@ -1,12 +0,0 @@ -# Run as a unique, less privileged user for security reasons. -# user www-data www-data; # user group -user nginx; - -# The file storing the process ID of the main process -pid /var/run/nginx.pid; - -# Reduces timer resolution in worker processes, thus reducing the number of gettimeofday() system calls made. By default, gettimeofday() is called each time a kernel event is received. With reduced resolution, gettimeofday() is only called once per specified interval. -timer_resolution 100ms; - -# Defines named thread pools used for multi-threaded reading and sending of files without blocking worker processes. -thread_pool default threads=32 max_queue=65536; diff --git a/cloud/container/nginx/conf/templates/10-event.conf.template b/cloud/container/nginx/conf/templates/10-event.conf.template deleted file mode 100644 index 6ce5c7ec0..000000000 --- a/cloud/container/nginx/conf/templates/10-event.conf.template +++ /dev/null @@ -1,12 +0,0 @@ -events { - # Specifies the connection processing method to use (https://nginx.org/en/docs/events.html). - # There is normally no need to specify it explicitly, because nginx will by default use the most efficient method. - # use epoll; - - # Sets the maximum number of simultaneous connections that can be opened by a worker process. - # Should be < worker_rlimit_nofile. - worker_connections $NGINX_WORKER_CONNECTIONS; - - # accept as many connections as possible, may flood worker connections if set too low -- for testing environment - # multi_accept on; -} diff --git a/cloud/container/nginx/conf/templates/20-http-include.conf.template b/cloud/container/nginx/conf/templates/20-http-include.conf.template deleted file mode 100644 index 02348de9f..000000000 --- a/cloud/container/nginx/conf/templates/20-http-include.conf.template +++ /dev/null @@ -1,4 +0,0 @@ -http { - include /etc/nginx/conf.d/http.d/*.conf; - include /etc/nginx/conf.d/server/*.conf; -} diff --git a/cloud/container/nginx/conf/templates/http.d/00-main.conf.template b/cloud/container/nginx/conf/templates/http.d/00-main.conf.template deleted file mode 100644 index 4dd7b89b9..000000000 --- a/cloud/container/nginx/conf/templates/http.d/00-main.conf.template +++ /dev/null @@ -1,23 +0,0 @@ -server_tokens off; - -index index.html index.htm; - -# By default, NGINX handles file transmission itself and copies the file into the buffer before sending it. Enabling the sendfile directive eliminates the step of copying the data into the buffer and enables direct copying data from one file descriptor to another. -sendfile $NGINX_SENDFILE; -# Alternatively, to prevent one fast connection from entirely occupying the worker process, you can use the sendfile_max_chunk directive to limit the amount of data transferred in a single sendfile() call -sendfile_max_chunk $NGINX_SENDFILE_MAX_CHUNK; -# Use the tcp_nopush directive together with the sendfile on;directive. This enables NGINX to send HTTP response headers in one packet right after the chunk of data has been obtained by sendfile(). -tcp_nopush $NGINX_TCP_NOPUSH; -# The tcp_nodelay directive allows override of Nagle’s algorithm, originally designed to solve problems with small packets in slow networks. The algorithm consolidates a number of small packets into a larger one and sends the packet with a 200 ms delay. Nowadays, when serving large static files, the data can be sent immediately regardless of the packet size. The delay also affects online applications (ssh, online games, online trading, and so on). By default, the tcp_nodelay directive is set to on which means that the Nagle’s algorithm is disabled. Use this directive only for keepalive connections: -tcp_nodelay $NGINX_TCP_NODELAY; - -# fix dns for docker and ssl -resolver 127.0.0.11 ipv6=off valid=10s; -resolver_timeout 5s; -#resolver 1.1.1.1 8.8.8.8 8.8.4.4 valid=60s; -#resolver_timeout 15s; - -# Sets the maximum allowed size of the client request body -client_max_body_size $NGINX_CLIENT_MAX_BODY_SIZE; - -autoindex $NGINX_AUTOINDEX; diff --git a/cloud/container/nginx/conf/templates/http.d/10-real-ip.conf.template b/cloud/container/nginx/conf/templates/http.d/10-real-ip.conf.template deleted file mode 100644 index 658db1508..000000000 --- a/cloud/container/nginx/conf/templates/http.d/10-real-ip.conf.template +++ /dev/null @@ -1,5 +0,0 @@ -#real_ip_header X-Real-IP; -real_ip_header X-Forwarded-For; -real_ip_recursive on; -set_real_ip_from 172.0.0.0/10; -set_real_ip_from 10.0.0.0/10; diff --git a/cloud/container/nginx/conf/templates/http.d/20-log.conf.template b/cloud/container/nginx/conf/templates/http.d/20-log.conf.template deleted file mode 100644 index 61043edb5..000000000 --- a/cloud/container/nginx/conf/templates/http.d/20-log.conf.template +++ /dev/null @@ -1,29 +0,0 @@ -log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for" ' - '$upstream_response_time "$upstream_cache_status"'; - -log_format json escape=json '{' - '"time_local": "$time_local", ' - '"remote_addr": "$remote_addr", ' - '"request": "$request", ' - '"status": "$status", ' - '"body_bytes_sent": "$body_bytes_sent", ' - '"http_referer": "$http_referer", ' - '"http_user_agent": "$http_user_agent" ,' - '"http_x_forwarded_for": "$http_x_forwarded_for", ' - '"request_method": "$request_method", ' - '"request_time": "$request_time", ' - '"host": "$host", ' - '"server_name": "$server_name", ' - '"upstream_addr": "$upstream_addr", ' - '"limit_req_status": "$limit_req_status", ' - '"upstream_status": "$upstream_status", ' - '"upstream_response_time": "$upstream_response_time", ' - '"upstream_response_length": "$upstream_response_length", ' - '"upstream_cache_status": "$upstream_cache_status"' -'}'; - -error_log /var/log/nginx/error.log $NGINX_ERROR_LOG_LEVEL; - -access_log $NGINX_ACCESS_LOG; diff --git a/cloud/container/nginx/conf/templates/http.d/30-mime-types.conf.template b/cloud/container/nginx/conf/templates/http.d/30-mime-types.conf.template deleted file mode 100644 index 83c941c12..000000000 --- a/cloud/container/nginx/conf/templates/http.d/30-mime-types.conf.template +++ /dev/null @@ -1,118 +0,0 @@ -default_type application/octet-stream; - -# https://www.iana.org/assignments/media-types/media-types.xhtml -types { - text/html html htm shtml; - text/css css; - text/xml xml rdf; - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - text/cache-manifest appcache; - text/csv csv; - text/markdown md; - text/vcard vcard vcf; - text/vnd.rim.location.xloc xloc; - text/vtt vtt; - - image/gif gif; - image/jpeg jpeg jpg; - image/avif avif; - image/png png; - image/svg+xml svg svgz; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/webp webp; - image/x-icon ico cur; - image/x-jng jng; - image/bmp bmp; - image/jxr jxr hdp wdp; - - audio/midi mid midi kar; - audio/mp4 aac f4a f4b m4a; - audio/mpeg mp3; - audio/x-realaudio ra; - audio/ogg oga ogg opus; - audio/x-wav wav; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 f4p f4v m4v mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; - video/ogg ogv; - - font/woff woff; - font/woff2 woff2; - font/ttf ttf; - font/otf otf; - application/vnd.ms-fontobject eot; - - application/vnd.geo+json geojson; - application/vnd.apple.mpegurl m3u8; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/vnd.ms-excel xls; - application/vnd.ms-powerpoint ppt; - application/vnd.oasis.opendocument.graphics odg; - application/vnd.oasis.opendocument.presentation odp; - application/vnd.oasis.opendocument.spreadsheet ods; - application/vnd.oasis.opendocument.text odt; - application/vnd.openxmlformats-officedocument.wordprocessingml.document - docx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - xlsx; - application/vnd.openxmlformats-officedocument.presentationml.presentation - pptx; - application/vnd.wap.wmlc wmlc; - application/vnd.rar rar; - application/javascript js; - application/rss+xml rss; - application/java-archive jar war ear; - application/json json map topojson; - application/ld+json jsonld; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/manifest+json webmanifest; - application/x-web-app-manifest+json webapp; - application/wasm wasm; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - application/x-bb-appworld bbaw; - application/x-bittorrent torrent; - application/x-chrome-extension crx; - application/x-opera-extension oex; - application/xslt+xml xsl; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg safariextz; - application/octet-stream iso img; - application/octet-stream msi msp msm; -} diff --git a/cloud/container/nginx/conf/templates/http.d/40-map-expire.conf.template b/cloud/container/nginx/conf/templates/http.d/40-map-expire.conf.template deleted file mode 100644 index 04781a897..000000000 --- a/cloud/container/nginx/conf/templates/http.d/40-map-expire.conf.template +++ /dev/null @@ -1,16 +0,0 @@ -map $sent_http_content_type $expires { - default $NGINX_EXPIRES_DEFAULT; - - text/html $NGINX_EXPIRES_DYNAMIC; - application/json $NGINX_EXPIRES_DYNAMIC; - ~application/manifest $NGINX_EXPIRES_DYNAMIC; - - ~text/ $NGINX_EXPIRES_STATIC; - ~font/ $NGINX_EXPIRES_STATIC; - ~image/ $NGINX_EXPIRES_STATIC; - ~video/ $NGINX_EXPIRES_STATIC; - ~audio/ $NGINX_EXPIRES_STATIC; - ~application/ $NGINX_EXPIRES_STATIC; -} - -expires $expires; diff --git a/cloud/container/nginx/conf/templates/http.d/41-map-status-text.conf.template b/cloud/container/nginx/conf/templates/http.d/41-map-status-text.conf.template deleted file mode 100644 index 5c1d4b7c5..000000000 --- a/cloud/container/nginx/conf/templates/http.d/41-map-status-text.conf.template +++ /dev/null @@ -1,43 +0,0 @@ -map $status $status_text { - 400 'Bad Request'; - 401 'Unauthorized'; - 402 'Payment Required'; - 403 'Forbidden'; - 404 'Not Found'; - 405 'Method Not Allowed'; - 406 'Not Acceptable'; - 407 'Proxy Authentication Required'; - 408 'Request Timeout'; - 409 'Conflict'; - 410 'Gone'; - 411 'Length Required'; - 412 'Precondition Failed'; - 413 'Payload Too Large'; - 414 'URI Too Long'; - 415 'Unsupported Media Type'; - 416 'Range Not Satisfiable'; - 417 'Expectation Failed'; - 418 'I\'m a teapot'; - 421 'Misdirected Request'; - 422 'Unprocessable Entity'; - 423 'Locked'; - 424 'Failed Dependency'; - 425 'Too Early'; - 426 'Upgrade Required'; - 428 'Precondition Required'; - 429 'Too Many Requests'; - 431 'Request Header Fields Too Large'; - 451 'Unavailable For Legal Reasons'; - 500 'Internal Server Error'; - 501 'Not Implemented'; - 502 'Bad Gateway'; - 503 'Service Unavailable'; - 504 'Gateway Timeout'; - 505 'HTTP Version Not Supported'; - 506 'Variant Also Negotiates'; - 507 'Insufficient Storage'; - 508 'Loop Detected'; - 510 'Not Extended'; - 511 'Network Authentication Required'; - default 'Something is wrong'; -} diff --git a/cloud/container/nginx/conf/templates/http.d/50-temp-path.conf.template b/cloud/container/nginx/conf/templates/http.d/50-temp-path.conf.template deleted file mode 100644 index 6b062600a..000000000 --- a/cloud/container/nginx/conf/templates/http.d/50-temp-path.conf.template +++ /dev/null @@ -1,6 +0,0 @@ -# set all cache temp paths -client_body_temp_path /var/cache/client_body 1 2; -proxy_temp_path /var/cache/proxy_temp_path 1 2; -fastcgi_temp_path /var/cache/fastcgi_temp 1 2; -uwsgi_temp_path /var/cache/uwsgi_temp 1 2; -scgi_temp_path /var/cache/scgi_temp 1 2; diff --git a/cloud/container/nginx/conf/templates/http.d/60-performance.conf.template b/cloud/container/nginx/conf/templates/http.d/60-performance.conf.template deleted file mode 100644 index c9c58d143..000000000 --- a/cloud/container/nginx/conf/templates/http.d/60-performance.conf.template +++ /dev/null @@ -1,31 +0,0 @@ -aio threads=default; - -# allow the server to close connection on non responding client, this will free up memory -reset_timedout_connection on; - -# Controls whether header fields with invalid names should be ignored. Valid names are composed of English letters, digits, hyphens, and possibly underscores -ignore_invalid_headers on; - -# File Cache -# Removed from the cache if it has not been accessed during `inactive` time -open_file_cache $NGINX_OPEN_FILE_CACHE; -# Sets a time after which open_file_cache elements should be validated. -open_file_cache_valid $NGINX_OPEN_FILE_CACHE_VALID; -# Sets the minimum number of file accesses during the period configured by the inactive parameter -open_file_cache_min_uses $NGINX_OPEN_FILE_CACHE_MIN_USES; -# Enables or disables caching of file lookup errors by open_file_cache. -open_file_cache_errors on; -# We need `open_log_file_cache` becouse https://serverfault.com/questions/547421 -open_log_file_cache max=10000 inactive=30s valid=1m min_uses=2; - -# During which a keep-alive client connection will stay open on the server side. -keepalive_timeout 300; -# Sets the maximum number of requests that can be served through one keep-alive connection. -# Closing connections periodically is necessary to free per-connection memory allocations. -keepalive_requests 1000; - -types_hash_max_size 2048; - -# The output_buffers directive in nginx controls the size and number of buffers used to store the response data before it is sent to the client. -# Increasing the number of buffers can improve performance for clients with slow connections, while decreasing the number of buffers can reduce memory usage for clients with fast connections. -output_buffers $NGINX_OUTPUT_BUFFERS; diff --git a/cloud/container/nginx/conf/templates/http.d/70-request-limit.conf.template b/cloud/container/nginx/conf/templates/http.d/70-request-limit.conf.template deleted file mode 100644 index ab934f929..000000000 --- a/cloud/container/nginx/conf/templates/http.d/70-request-limit.conf.template +++ /dev/null @@ -1,5 +0,0 @@ -limit_req_zone $binary_remote_addr zone=req_zone:10m rate=${NGINX_LIMIT_REQ_RATE}r/s; -limit_req_status $NGINX_LIMIT_REQ_ERROR; -limit_req_log_level $NGINX_LIMIT_REQ_LOG; - -limit_req zone=req_zone burst=$NGINX_LIMIT_REQ_BURST; diff --git a/cloud/container/nginx/conf/templates/http.d/80-header.conf.template b/cloud/container/nginx/conf/templates/http.d/80-header.conf.template deleted file mode 100644 index d18761259..000000000 --- a/cloud/container/nginx/conf/templates/http.d/80-header.conf.template +++ /dev/null @@ -1,7 +0,0 @@ -add_header server Alwatr; -add_header X-Server Alwatr; -add_header X-Frame-Options SAMEORIGIN; -add_header X-Content-Type-Options nosniff; -add_header X-XSS-Protection "1; mode=block"; -add_header X-UA-Compatible "IE=Edge,chrome=1"; -add_header X-Cache $upstream_cache_status; diff --git a/cloud/container/nginx/conf/templates/location.d/10-error-page.conf.template b/cloud/container/nginx/conf/templates/location.d/10-error-page.conf.template deleted file mode 100644 index 2448c9a0e..000000000 --- a/cloud/container/nginx/conf/templates/location.d/10-error-page.conf.template +++ /dev/null @@ -1,18 +0,0 @@ -error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 421 422 423 424 425 426 428 429 431 451 500 501 502 503 504 505 506 507 508 510 511 @errorPage; - -location @errorPage { - try_files /error.html /_error.html; -} - -location = /error.html { - ssi on; - internal; - auth_basic off; -} - -location = /_error.html { - ssi on; - internal; - auth_basic off; - root /var/www; -} diff --git a/cloud/container/nginx/conf/templates/location.d/20-server-info.conf.template b/cloud/container/nginx/conf/templates/location.d/20-server-info.conf.template deleted file mode 100644 index 429433f5e..000000000 --- a/cloud/container/nginx/conf/templates/location.d/20-server-info.conf.template +++ /dev/null @@ -1,5 +0,0 @@ -location /server-info { - access_log off; - default_type text/plain; - return 200 "Alwatr Accelerated Web Server"; -} diff --git a/cloud/container/nginx/conf/templates/location.d/30-secure.conf.template b/cloud/container/nginx/conf/templates/location.d/30-secure.conf.template deleted file mode 100644 index ea622f0ee..000000000 --- a/cloud/container/nginx/conf/templates/location.d/30-secure.conf.template +++ /dev/null @@ -1,38 +0,0 @@ -# Use if_not_owner to serve the content of symbolic links based on the last modified time of the original file. -disable_symlinks $NGINX_DISABLE_SYMLINKS; - -location ~* (?:\.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op]|lock)|~)$ { - deny all; - access_log off; log_not_found off; -} - -location ~* \.(pl|cgi|py|sh|lua)\$ { - return 444; -} - -location ~* (w00tw00t) { - return 444; -} - -location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)\$|^(\..*|Entries.*|Repository|Root|Tag|Template)\$|\.php_ { - return 444; -} - -location = /robots.txt { - access_log off; log_not_found off; - expires epoch; -} - -location = /favicon.ico { - access_log off; log_not_found off; - expires epoch; -} - -location ~ /\. { - deny all; - access_log off; log_not_found off; -} - -# if ($request_method !~ ^(GET|HEAD|POST)$ ) { -# return 405; -# } diff --git a/cloud/container/nginx/conf/templates/location.d/31-secure-wp.conf.skiped b/cloud/container/nginx/conf/templates/location.d/31-secure-wp.conf.skiped deleted file mode 100644 index a3eec75ab..000000000 --- a/cloud/container/nginx/conf/templates/location.d/31-secure-wp.conf.skiped +++ /dev/null @@ -1,36 +0,0 @@ -location ~* wp-includes/theme-compat/ { - deny all; -} - -location ~* /(\.|wp-config\.php|wp-config\.txt|changelog\.txt|readme\.txt|readme\.html|license\.txt) { - deny all; -} - -location ~* wp-includes/js/tinymce/langs/.*.php { - deny all; -} - -location ~* /(?:uploads|files|wp-content|wp-includes)/.*\.php\$ { - deny all; -} - -location ~* /wp-content/uploads/nginx-helper/ { - internal; -} - -location ~* ^/(wp-content)/(.*?)\.(zip|gz|tar|bzip2|7z)\$ { - deny all; -} - -location ~ ^/wp-content/uploads/sucuri { - deny all; -} - -location ~ ^/wp-content/updraft { - deny all; -} - -location ~ ^/wp-content/uploads/.*.(php|pl|py|jsp|asp|htm|html|shtml|sh|cgi)$ { - types { } - default_type text/plain; -} diff --git a/cloud/container/nginx/conf/templates/location.d/40-force-domain.conf.template b/cloud/container/nginx/conf/templates/location.d/40-force-domain.conf.template deleted file mode 100644 index 1e76e9f46..000000000 --- a/cloud/container/nginx/conf/templates/location.d/40-force-domain.conf.template +++ /dev/null @@ -1,5 +0,0 @@ -location / { - if ($host != $NGINX_FORCE_DOMAIN) { - return $NGINX_FORCE_DOMAIN_STATUS $scheme://$NGINX_FORCE_DOMAIN$request_uri; - } -} diff --git a/cloud/container/nginx/conf/templates/server/00-default.conf.template b/cloud/container/nginx/conf/templates/server/00-default.conf.template deleted file mode 100644 index f06f96490..000000000 --- a/cloud/container/nginx/conf/templates/server/00-default.conf.template +++ /dev/null @@ -1,7 +0,0 @@ -server { - listen 80 default_server; - server_name _; - root $NGINX_DOCUMENT_ROOT; - - include /etc/nginx/conf.d/location.d/*.conf; -} diff --git a/cloud/container/nginx/www/_error.html b/cloud/container/nginx/www/_error.html deleted file mode 100644 index 367f4f07e..000000000 --- a/cloud/container/nginx/www/_error.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - Error! - - - - -

We are updating our website

-

This is only for a few seconds, you will be redirected.

- -

Error ,

-

- Sorry, the page you are looking for is currently unavailable.
- Please try again later. -

- - - diff --git a/cloud/container/nginx/www/html/index.html b/cloud/container/nginx/www/html/index.html deleted file mode 100644 index 40eb39dce..000000000 --- a/cloud/container/nginx/www/html/index.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - ..:: Alwatr Accelerated Web Server ::.. - - - -
-

Hello World

-
- - diff --git a/cloud/container/nocodb/.dockerignore b/cloud/container/nocodb/.dockerignore deleted file mode 100644 index 72e8ffc0d..000000000 --- a/cloud/container/nocodb/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cloud/container/nocodb/Dockerfile b/cloud/container/nocodb/Dockerfile deleted file mode 100644 index 164919768..000000000 --- a/cloud/container/nocodb/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG NOCODB_IMAGE=docker.io/nocodb/nocodb:0.109.2 -FROM $NOCODB_IMAGE diff --git a/cloud/container/nocodb/README.md b/cloud/container/nocodb/README.md deleted file mode 100644 index f1eda671a..000000000 --- a/cloud/container/nocodb/README.md +++ /dev/null @@ -1 +0,0 @@ -# Nocodb Container Mirror diff --git a/cloud/container/php/7.4-apache/Dockerfile b/cloud/container/php/7.4-apache/Dockerfile deleted file mode 100644 index 15aa48407..000000000 --- a/cloud/container/php/7.4-apache/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG PHP_IMAGE=docker.io/php:7.4-apache -FROM $PHP_IMAGE diff --git a/cloud/container/php/7.4-fpm/Dockerfile b/cloud/container/php/7.4-fpm/Dockerfile deleted file mode 100644 index 155d8c114..000000000 --- a/cloud/container/php/7.4-fpm/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG PHP_IMAGE=docker.io/library/php:7.4-fpm -FROM $PHP_IMAGE diff --git a/cloud/container/php/8.2-fpm/Dockerfile b/cloud/container/php/8.2-fpm/Dockerfile deleted file mode 100644 index 324509298..000000000 --- a/cloud/container/php/8.2-fpm/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG PHP_IMAGE=docker.io/library/php:8.2-fpm -FROM $PHP_IMAGE diff --git a/cloud/container/php/README.md b/cloud/container/php/README.md deleted file mode 100644 index f0a3fbc58..000000000 --- a/cloud/container/php/README.md +++ /dev/null @@ -1 +0,0 @@ -# PHP Container Mirror diff --git a/cloud/container/tdlib/.dockerignore b/cloud/container/tdlib/.dockerignore deleted file mode 100644 index 72e8ffc0d..000000000 --- a/cloud/container/tdlib/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cloud/container/tdlib/Dockerfile b/cloud/container/tdlib/Dockerfile deleted file mode 100644 index e92f99ee8..000000000 --- a/cloud/container/tdlib/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -ARG ALPINE_IMAGE=ghcr.io/alimd/alpine:3.17 -FROM $ALPINE_IMAGE - -ARG TDLIB_VERSION=1.8.0 -RUN set -ex; \ - apk add --no-cache --virtual .build-deps \ - curl \ - ca-certificates \ - g++ \ - make \ - cmake \ - gperf \ - libressl-dev \ - zlib-dev \ - zlib-static \ - linux-headers; \ - mkdir /tmp/td/ && cd /tmp/td/; \ - curl -sSLo tdlib.tar.gz https://github.com/tdlib/td/archive/refs/tags/v${TDLIB_VERSION}.tar.gz; \ - tar -xzvf tdlib.tar.gz && cd td-${TDLIB_VERSION}; \ - mkdir build && cd build; \ - cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_LTO=ON ..; \ - ls -lAhFtr; \ - cmake --build . --target install -j 4; \ - ls -lAhFtr; \ - make install; \ - ls -lAhFtr /usr/local/lib/; \ - apk del .build-deps; \ - rm -rfv /tmp/td/; diff --git a/cloud/container/tdlib/README.md b/cloud/container/tdlib/README.md deleted file mode 100644 index 9fd7d99ce..000000000 --- a/cloud/container/tdlib/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Telegram Database Library Container diff --git a/cloud/container/traefik/.dockerignore b/cloud/container/traefik/.dockerignore deleted file mode 100644 index 72e8ffc0d..000000000 --- a/cloud/container/traefik/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cloud/container/traefik/Dockerfile b/cloud/container/traefik/Dockerfile deleted file mode 100644 index 824eab7d4..000000000 --- a/cloud/container/traefik/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG TRAEFIK_IMAGE=docker.io/library/traefik:1.7-alpine -FROM $TRAEFIK_IMAGE diff --git a/cloud/container/traefik/README.md b/cloud/container/traefik/README.md deleted file mode 100644 index e521306da..000000000 --- a/cloud/container/traefik/README.md +++ /dev/null @@ -1 +0,0 @@ -# Traefik Container Mirror diff --git a/cloud/container/wordpress/README.md b/cloud/container/wordpress/README.md deleted file mode 100644 index a3532656e..000000000 --- a/cloud/container/wordpress/README.md +++ /dev/null @@ -1 +0,0 @@ -# Wordpress Container Mirror diff --git a/cloud/container/wordpress/php7.4/Dockerfile b/cloud/container/wordpress/php7.4/Dockerfile deleted file mode 100644 index 9d7675640..000000000 --- a/cloud/container/wordpress/php7.4/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -# latest version support php 7 is 6.1 -ARG WORDPRESS_IMAGE=docker.io/wordpress:6.1-php7.4-fpm -FROM $WORDPRESS_IMAGE diff --git a/cloud/container/wordpress/php8.2/Dockerfile b/cloud/container/wordpress/php8.2/Dockerfile deleted file mode 100644 index 260d5f449..000000000 --- a/cloud/container/wordpress/php8.2/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -ARG WORDPRESS_IMAGE=docker.io/wordpress:6.2-php8.2-fpm -FROM $WORDPRESS_IMAGE diff --git a/cloud/kubernetes/README.md b/cloud/kubernetes/README.md deleted file mode 100644 index 67a20dd68..000000000 --- a/cloud/kubernetes/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr CloudNative Kubernetes Deployments diff --git a/cloud/labs/README.md b/cloud/labs/README.md deleted file mode 100644 index 12c757182..000000000 --- a/cloud/labs/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Labs diff --git a/cloud/labs/ipsec/compose.yml b/cloud/labs/ipsec/compose.yml deleted file mode 100644 index 6e2958657..000000000 --- a/cloud/labs/ipsec/compose.yml +++ /dev/null @@ -1,26 +0,0 @@ -services: - dockovpn: - image: docker.io/hwdsl2/ipsec-vpn-server:latest - - cap_add: - - NET_ADMIN - - ports: - - '500:500/udp' - - '4500:4500/udp' - - privileged: true - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - env_file: .env - - volumes: - - type: bind - source: ./_data - target: /etc/ipsec.d - bind: - create_host_path: true diff --git a/cloud/labs/ipsec/deploy.sh b/cloud/labs/ipsec/deploy.sh deleted file mode 100755 index 3308eda31..000000000 --- a/cloud/labs/ipsec/deploy.sh +++ /dev/null @@ -1,2 +0,0 @@ -U2FsdGVkX1/BdD2IGzSSYVHQPlu9P/61OUSq2TTgQWo3RnkqMfIM8ElTo9edqI3X -woRBZsb7JzjXWD69V2EeIXu3TRqV5f7lCx40q8HmRcg= diff --git a/cloud/labs/ipsec/env/example.env b/cloud/labs/ipsec/env/example.env deleted file mode 100644 index 85741b766..000000000 --- a/cloud/labs/ipsec/env/example.env +++ /dev/null @@ -1,33 +0,0 @@ -U2FsdGVkX19c7Hgq0L46nGtW6R8iIV/bRREWta1PQ2aTiydwuckxhmyq6sIAbIU0 -KnGWi76VecKLCJJmWmifcNMyEtVW46XmyKakNoCLvMop8Iz3IygeBPo0eAAqZ+i6 -UaACk99g9o7zcgwBMOquCbM/NGmALHyxK9w2v8nqPp2WCP5uvXMNSbkYjbazYv0c -9/co8zjLk8pLaQwIRwHWTVnqpHqLcGL9OKvM/1zQhaEH9nMHMCHEtyjGkhutY929 -30eZIt/RB2st4h4I3IKKTyTYvqz6ClaJS3FJplQW55eiGea+JQQrtthM8JPcWoya -18EgpkEWDciwh6d2hfuLdCKGPELlyeJmTs0CwXB9TEs8vbP7OIptIty0HCW59gxr -n9Dv9JvDeo02vnQ8XEUHvJ6eSuHj2OlQ7wMt55g1/QheB/oByzkTM3hkoBaMlaEA -ihDMAYieSQin0eL8PCzKcCnxgvhnaZ0NTgGELvVVPDLtF5jaiuc9xtZ9b+6oRqDH -0ANH5Iic8ZogU8lt0QqDTuBiD+DUV9m6moQwAd9RIbLrQ7IssW/VLK/V4EnTP/QU -wPLirgk7554V7G9NmqCyCdZBV1OGRtI6CMn4idkjFkH1q+h74SBxhnKW4KSWWjX0 -YMjOE7QDfd96K8VZw3EpjqqJZTh0fqFWiMbKOur4GRs2YOiZjEHu0xQoRoyNP93i -5KX3HDxoVHbSZJrG5Eg0fhu4Me6/bKKOAK8TXY/7S862e+LGCl9/hhqCKqzs1tR7 -4DRKETTiRdfUbYwsRW+KwBs8gQqEvHbCE2nR/yP8Jr19CkHfr2INSfd3SKY4GxJX -Bq8KgA6063f12v8q+mszsBl2KzpLJ8g8bJwbzjKEmGlOZJbAiEd0GYvqORj/bA9z -1MP8O2bh4Rxz0DA4DdnCZZor/0gteuy3ued6pzecA6g51JAdYnektN53ghO/NLKw -MYozl7fmMj0Tbw8IqqPPBJyM1n/xbLZctAPTapFpfhk5tvmXdk18MgB30+/GqJLu -lBwbewhRDP8fn5mbBQ7EvOR+nPtnbuX7xhqHbhdqr2Hi22iztiXYjOQQwqZQmhkB -/Bu1NwTt1J93VFB/PXJnD4entWgjCVKIu/+CA04hiMlszxGsxUSXqaIbF2BYKVWw -kvnBSCoF06oAl9/Ra9DWS22Vh5s2rVUsaz3EXj7ZvCgGwO4YOtVj2WvHDN+vG8Jg -Iu93yoKeUls78I9JIzwsTJYA+FNcVX6zKiiS3rZ2hsKCHFg0P0uQWLQhGxH4XinX -zT3QRgbVCGvabxZbpSds59Vz8O80AdbQcbUSGg/xDRR3kJcXaksLhz5MRgeN1Jrl -4+2ODjcSCYGyF91yIu6Yq4z6Zk5XnlCJr3MS5QZGnpsh0B8wGm9RhMh4vWpGfGuA -bW7uTe5xlx+aY6UGXmXei1bdBmW66B8oRZ6dZ5IFulHiXPbVEZVU81G+ldL0CRZN -moCbZyB+6jky2plSUWSGPzTDQ7KDKsXDJAOHvwmxwYB2YlfFHussx7Hip4mR/T8X -93XFiochJtM3RNELIWkdoXcO/LjJ/TIP1UeG68EAxWCYXh2F8qanM7Ot3nRkjgw2 -yZy/2WjeHoI7H+aekAmT9aT9y0OwWTLVxcg+WRQo88D6SQkSUzPd5cSd051F54XY -2PxzeTSj1bjkScfWwSBUtY3y4DseAfBnUs1614Cy/BptW0FUzq3PeS1NC5G4xsm8 -dSU1yx5UYV2Sy0VXVXbPGvgZfMLCjspWQLBSq3OzgdWNkqjL0i6C/uVkOFLb+4T2 -vQTnOL5NtIh6ZA69/mK0C7XX29LNCVjLFeAvoHfMLvxVCTyuMfuf7+cFZtOijS5S -A4ZzrDsT1U9aAMSQZRvbMj5Cg3ur65YtiMg0yY6Cybvfr3s45G6PBlTxIvalhJdO -Y0KamN2VvvaU4OhtVE32MV4MI05ecgziYOVIdtWwrtVD2Qn2p9ak3/AjmcILM/ss -pHSvTunXMCPI7uVVKiBZE19D2SzV04r0RhIHmXayPK/Y6lnesgsV8NxF/XSBaHGW -OUmgbe9QYje+62C4DDlvMI3JuIGiCggztUt+zd6ae3w= diff --git a/cloud/labs/openvpn/compose.yml b/cloud/labs/openvpn/compose.yml deleted file mode 100644 index f7b1e8b18..000000000 --- a/cloud/labs/openvpn/compose.yml +++ /dev/null @@ -1,24 +0,0 @@ -services: - dockovpn: - image: docker.io/alekslitvinenk/openvpn:latest - - cap_add: - - NET_ADMIN - - ports: - - 1194:1194/udp - - 8080:8080 - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - env_file: .env - - # volumes: - # - type: bind - # source: ./_data - # target: /opt/Dockovpn_data - # bind: - # create_host_path: true diff --git a/cloud/labs/openvpn/deploy.sh b/cloud/labs/openvpn/deploy.sh deleted file mode 100755 index 9cff7d3ea..000000000 --- a/cloud/labs/openvpn/deploy.sh +++ /dev/null @@ -1,2 +0,0 @@ -U2FsdGVkX1+IRIYMANDiJUIj/2f4lgC9Lhlv8lj8Bg5wpSQtbVel86CtHWBK16Ip -jQBPU7BM6y2y7BpPB/oLVd/swypOsnMTd6T5FKo2V5U= diff --git a/cloud/labs/openvpn/env/example.env b/cloud/labs/openvpn/env/example.env deleted file mode 100644 index f540ee070..000000000 --- a/cloud/labs/openvpn/env/example.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX19c3iXzZnXr6uoYNEcaLrr3sRVgbin6eqdBYqRUCvWHV8QdDo47WG9l -sTSw+ZSDXRFmqJ9gKHeaEUpS3ZvAX/M84kdLWz7lCi2vVi5+6RF0tt683ZTslVLr -qhP71Nkj89i+jnX9fsMOKg== diff --git a/cloud/labs/shadowsocks/compose.yml b/cloud/labs/shadowsocks/compose.yml deleted file mode 100644 index 2aeec0fa0..000000000 --- a/cloud/labs/shadowsocks/compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -services: - dockovpn: - image: docker.io/dockage/shadowsocks-server:latest - - ports: - - 53:8388 - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - env_file: .env diff --git a/cloud/labs/shadowsocks/deploy.sh b/cloud/labs/shadowsocks/deploy.sh deleted file mode 100755 index 6b62a00ba..000000000 --- a/cloud/labs/shadowsocks/deploy.sh +++ /dev/null @@ -1,2 +0,0 @@ -U2FsdGVkX18Ox0po4TP5A40dyn5SX7RC3oDQ91Z9mKwn+HL6nux9sb/J746RKk3C -fOdZqG49FJgClAeLjBnjkAHteUsRFvk88BUBnPtgi4I= diff --git a/cloud/labs/shadowsocks/env/example.env b/cloud/labs/shadowsocks/env/example.env deleted file mode 100644 index 866ee7885..000000000 --- a/cloud/labs/shadowsocks/env/example.env +++ /dev/null @@ -1,3 +0,0 @@ -U2FsdGVkX1+mxiTmfCJ36I6WliL+hbarONNR0r3SOQUqDX2cZOKZeZyu1kKxj8t0 -3RliygOEtlbPvX2EJRgJQ+anz5ZJAZbP211yL5Qm3XOQK0ypU458bdcvpf282uTV -EiAdjAUYFEaPfXJ+cll1BVQro7oB+i1/9QxgLmMc73U= diff --git a/cloud/labs/wireguard/compose.yml b/cloud/labs/wireguard/compose.yml deleted file mode 100644 index 384cc02e4..000000000 --- a/cloud/labs/wireguard/compose.yml +++ /dev/null @@ -1,33 +0,0 @@ -services: - wireguard: - image: lscr.io/linuxserver/wireguard:latest - - cap_add: - - NET_ADMIN - - SYS_MODULE - - sysctls: - - net.ipv4.conf.all.src_valid_mark=1 - - ports: - - ${SERVERPORT:-51820}:${SERVERPORT:-51820}/udp - - cpu_shares: 512 - mem_limit: 256m - - restart: unless-stopped - - env_file: .env - - volumes: - - type: bind - source: /lib/modules - target: /lib/modules - - type: bind - source: /usr/src - target: /usr/src - - type: bind - source: ./_data - target: /config - bind: - create_host_path: true diff --git a/cloud/labs/wireguard/deploy.sh b/cloud/labs/wireguard/deploy.sh deleted file mode 100755 index 0d21065ec..000000000 --- a/cloud/labs/wireguard/deploy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -ALWATR_LIB=../../classic/lib -source $ALWATR_LIB/deploy.sh diff --git a/cloud/labs/wireguard/env/srv3.env b/cloud/labs/wireguard/env/srv3.env deleted file mode 100644 index a0d69d147..000000000 --- a/cloud/labs/wireguard/env/srv3.env +++ /dev/null @@ -1,8 +0,0 @@ -U2FsdGVkX1+b2wV8sFdEWsHtRfkNATQSiYsqLwT5HryQIsT7VxxA7XZiWBKbBZfO -+Ncw1sRM5JCStZBq6NXEBWZcq3pRNXdujHDS7ED6MTNYB/kVNHtqh7Rk00agsQBX -Vp0pXRIw2SdwsRiU9If5ejzOYMVmgASll0+Srm9g5ZrPuWvLYwrjmYUlIozh9vcs -U0JJlCVJ+z5LPSbebBlNkAPZpk+4Cj6uhVuc81BWTazlZz3D9Hta335PQuFwMPPa -K0n9XTosZjCdNl38Q04hJj7IahvDMcyMJ2VwkFNhotuP39kOE2JH5/dm213KiGFb -1N2v9+VAw7bwjBC6hK7GZKFaGnPvDPIKv3liclMoo8RxapLxGrN8JI2eaJIyl+Rk -PRGQj1px0SoE019la3kxKv8TEMF8aP172r/2VmknlERHBhYgY5ywp+HcqKJ0/H48 -ZaXfXT27t5AVNgZzSDaeydQT0t8rwVUAoBPYRj6MkRI7D2wYoJAk7CUzH+cgh2MC diff --git a/core/README.md b/core/README.md deleted file mode 100644 index 8a6149846..000000000 --- a/core/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Core Packages diff --git a/core/context/CHANGELOG.md b/core/context/CHANGELOG.md deleted file mode 100644 index aa8d96c46..000000000 --- a/core/context/CHANGELOG.md +++ /dev/null @@ -1,64 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/context@1.1.1...@alwatr/context@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/context - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/context@1.1.0...@alwatr/context@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/context - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -### Bug Fixes - -* **context:** compatible with new storage api ([5251ff0](https://github.com/AliMD/alwatr/commit/5251ff005624720e091cdbc40e6b0142743428cb)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* build issues ([e1060bc](https://github.com/AliMD/alwatr/commit/e1060bccbfe3c775c32b85e9b8eb601e48b2998c)) -* **context:** merge request option issue ([e24e695](https://github.com/AliMD/alwatr/commit/e24e695a8c25ab1dcb1c351a3ae0434e921610d0)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -* packages and refs ([eea2382](https://github.com/AliMD/alwatr/commit/eea2382e459ccaa3e7b4b329d9c196eda146a08e)) - -### Features - -* **context:** add `requestIfNotComplete` ([580d5c9](https://github.com/AliMD/alwatr/commit/580d5c9c74f1c8921b45d402641df9444f438547)) -* **context:** awesome server context ([c001c58](https://github.com/AliMD/alwatr/commit/c001c58a2b1b4e13fd1c34b5128031fd640a98e1)) -* **context:** new package ([98ee43d](https://github.com/AliMD/alwatr/commit/98ee43d83b1ad5b3806ec6053c5cac70912000b3)) -* **context:** simple context api ([2a1b152](https://github.com/AliMD/alwatr/commit/2a1b152380f267a6b173f08bbbe10295325b1fd8)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/context - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **context:** compatible with new storage api ([5251ff0](https://github.com/AliMD/alwatr/commit/5251ff005624720e091cdbc40e6b0142743428cb)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- build issues ([e1060bc](https://github.com/AliMD/alwatr/commit/e1060bccbfe3c775c32b85e9b8eb601e48b2998c)) -- **context:** merge request option issue ([e24e695](https://github.com/AliMD/alwatr/commit/e24e695a8c25ab1dcb1c351a3ae0434e921610d0)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- packages and refs ([eea2382](https://github.com/AliMD/alwatr/commit/eea2382e459ccaa3e7b4b329d9c196eda146a08e)) - -### Features - -- **context:** add `requestIfNotComplete` ([580d5c9](https://github.com/AliMD/alwatr/commit/580d5c9c74f1c8921b45d402641df9444f438547)) -- **context:** awesome server context ([c001c58](https://github.com/AliMD/alwatr/commit/c001c58a2b1b4e13fd1c34b5128031fd640a98e1)) -- **context:** new package ([98ee43d](https://github.com/AliMD/alwatr/commit/98ee43d83b1ad5b3806ec6053c5cac70912000b3)) -- **context:** simple context api ([2a1b152](https://github.com/AliMD/alwatr/commit/2a1b152380f267a6b173f08bbbe10295325b1fd8)) diff --git a/core/context/README.md b/core/context/README.md deleted file mode 100644 index 71ea89bc4..000000000 --- a/core/context/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Context - `@alwatr/context` - -Elegant powerful context manager base on alwatr signal, written in tiny TypeScript, ES module. diff --git a/core/context/package.json b/core/context/package.json deleted file mode 100644 index f10db5495..000000000 --- a/core/context/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@alwatr/context", - "version": "1.1.2", - "description": "Elegant powerful context manager base on alwatr signal, written in tiny TypeScript, ES module.", - "keywords": [ - "context", - "signal", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/context" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/context#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/fetch": "^1.1.2", - "@alwatr/fsm": "^1.1.2", - "@alwatr/logger": "^1.1.2", - "@alwatr/signal": "^1.1.2", - "@alwatr/util": "^1.2.0", - "tslib": "^2.6.2" - } -} diff --git a/core/context/src/core.ts b/core/context/src/core.ts deleted file mode 100644 index 06e51040e..000000000 --- a/core/context/src/core.ts +++ /dev/null @@ -1,210 +0,0 @@ -import {serviceRequest, type StringifyableFetchOptions} from '@alwatr/fetch'; -import {finiteStateMachineProvider, type FsmConsumerInterface} from '@alwatr/fsm'; -import {createLogger, globalAlwatr} from '@alwatr/logger'; - -import type {ServerContextFsm, ServerContextFsmContext} from './type.js'; - -export const logger = createLogger('alwatr/context'); - -globalAlwatr.registeredList.push({ - name: '@alwatr/context', - version: _ALWATR_VERSION_, -}); - -export const serverContextFsmConstructorId = 'server_context_fsm'; - -export const serverContextFsmConstructor = finiteStateMachineProvider.defineConstructor(serverContextFsmConstructorId, { - initial: 'initial', - context: { - options: {}, - } as ServerContextFsmContext, - stateRecord: { - $all: { - on: {}, - }, - initial: { - on: { - REQUEST: { - target: 'offlineLoading', - }, - }, - }, - /** - * Just check offline cache data before online request. - */ - offlineLoading: { - entry: ['offline_mode', 'request'], - on: { - request_failed: { - target: 'loadingFailed', - }, - request_failed_404: { - target: 'loadingFailed', - }, - request_success: { - target: 'reloading', - }, - cache_not_found: { - target: 'onlineLoading', - }, - }, - }, - /** - * First loading without any cached context. - */ - onlineLoading: { - entry: ['online_mode', 'request'], - on: { - request_failed: { - target: 'loadingFailed', - }, - request_failed_404: { - target: 'loadingFailed', - }, - request_success: { - target: 'complete', - }, - }, - }, - /** - * First loading failed without any cached context. - */ - loadingFailed: { - on: { - REQUEST: { - target: 'offlineLoading', - }, - }, - }, - reloading: { - entry: ['online_mode', 'request'], - on: { - request_failed: { - target: 'reloadingFailed', - }, - request_failed_404: { - target: 'reloadingFailed', - }, - request_success: { - target: 'complete', - }, - }, - }, - /** - * Reloading failed with previously cached context exist. - */ - reloadingFailed: { - on: { - REQUEST: { - target: 'reloading', - }, - }, - }, - complete: { - on: { - REQUEST: { - target: 'reloading', - }, - }, - }, - }, -}); - -finiteStateMachineProvider.defineActions(serverContextFsmConstructorId, { - offline_mode: (fsm) => { - logger.logMethod?.('action_offline_mode'); - const {options} = fsm.getContext(); - if (options == null) return logger.error('action_offline_mode', 'invalid_fetch_options', {id: fsm.id}); - options.cacheStrategy = 'cache_only'; - }, - - online_mode: (fsm) => { - logger.logMethod?.('action_online_mode'); - const {options} = fsm.getContext(); - if (options == null) return logger.error('action_online_mode', 'invalid_fetch_options', {id: fsm.id}); - options.cacheStrategy = 'update_cache'; - }, - - request: async (fsm) => { - logger.logMethod?.('action_request'); - - try { - const {response, options} = fsm.getContext(); - if (options == null || options.url == null) { - logger.error('action_request', 'invalid_fetch_options', {id: fsm.id, options}); - return; - } - const newResponse = await serviceRequest>( - options as StringifyableFetchOptions, - ); - - if (newResponse.data == null) { - logger.accident('requestOrderStorageContext', 'context_not_found', 'Server request 404 not found'); - fsm.transition('request_failed_404'); - return; - } - - if ( - response != null && - newResponse.meta?.lastUpdated != null && - newResponse.meta.lastUpdated === response.meta?.lastUpdated - ) { - // no changed - fsm.transition('request_success'); - } - else { - fsm.transition('request_success', {response: newResponse}); - } - } - catch (err) { - if ((err as Error).message === 'fetch_cache_not_found') { - fsm.transition('cache_not_found'); - } - else { - logger.error('requestOrderStorageContext', 'fetch_failed', err); - fsm.transition('request_failed'); - } - } - }, -}); - -export const request = ( - fsm: FsmConsumerInterface, - options?: ServerContextFsm['TContext']['options'], - mergeOption = true, -): void => { - logger.logMethodArgs?.('request', fsm.id); - if (options != null) setOptions(fsm, options, mergeOption); - fsm.transition('REQUEST'); -}; - -export const requestIfNotComplete = ( - fsm: FsmConsumerInterface, - options?: ServerContextFsm['TContext']['options'], - mergeOption = true, -): void => { - logger.logMethodArgs?.('requestIfNotComplete', fsm.id); - if (fsm.getState().target !== 'complete') { - request(fsm, options, mergeOption); - } -}; - -export const setOptions = ( - fsm: FsmConsumerInterface, - options: ServerContextFsm['TContext']['options'], - merge = true, -): void => { - logger.logMethodArgs?.('setOptions', fsm.id); - const oldOptions = fsm.getContext().options; - // prettier-ignore - fsm.setContext({ - options: merge === false ? options : { - ...oldOptions, - ...options, - queryParameters: { - ...oldOptions?.queryParameters, - ...options.queryParameters, - }, - }, - }); -}; diff --git a/core/context/src/index.ts b/core/context/src/index.ts deleted file mode 100644 index 4d4bde89d..000000000 --- a/core/context/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './simple-context.js'; -export * from './server-context.js'; diff --git a/core/context/src/server-context.ts b/core/context/src/server-context.ts deleted file mode 100644 index 7ab221295..000000000 --- a/core/context/src/server-context.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {finiteStateMachineConsumer, type FsmConsumerInterface} from '@alwatr/fsm'; - -import {request, requestIfNotComplete, serverContextFsmConstructorId, setOptions} from './core.js'; - -import type {ServerContextFsm, ServerContextFsmContext} from './type.js'; -import type {AlwatrDocumentStorage, AlwatrServiceResponseSuccessWithMeta, OmitFirstParam} from '@alwatr/type'; - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export const serverContextConsumer = ( - instanceId: string, - options?: ServerContextFsm['TContext']['options'], -) => { - const fsm = finiteStateMachineConsumer>( - instanceId, - serverContextFsmConstructorId, - ); - - if (options != null) { - setOptions(fsm as FsmConsumerInterface, options); - } - - return { - id: instanceId, - request: request.bind(null, fsm as FsmConsumerInterface) as OmitFirstParam, - require: requestIfNotComplete.bind(null, fsm as FsmConsumerInterface) as OmitFirstParam< - typeof requestIfNotComplete - >, - setOptions: setOptions.bind(null, fsm as FsmConsumerInterface) as OmitFirstParam< - typeof setOptions - >, - getOptions: () => fsm.getContext().options, - getResponse: () => fsm.getContext().response, - getState: fsm.getState, - subscribe: fsm.subscribe, - unsubscribe: fsm.unsubscribe, - fsm, - } as const; -}; diff --git a/core/context/src/simple-context.ts b/core/context/src/simple-context.ts deleted file mode 100644 index 17e9c4745..000000000 --- a/core/context/src/simple-context.ts +++ /dev/null @@ -1,155 +0,0 @@ -import {clearDetail, dispatch, getDetail, untilNext, subscribe, unsubscribe} from '@alwatr/signal/core.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Context provider interface. - */ -export const contextProvider = { - /** - * Get context value. - * - * Return undefined if context not set before or expired. - * - * Example: - * - * ```ts - * const currentProductList = contextProvider.getValue('product-list'); - * if (currentProductList === undefined) { - * // productList not set before or expired. - * } - * ``` - */ - getValue: getDetail, - - /** - * Set context value and send signal to all consumers. - * - * Signal detail changed immediately without any debounce. - * - * Example: - * - * ```ts - * contextProvider.setValue('product-list', newProductList); - * ``` - */ - setValue: dispatch, - - /** - * Clear current context value without send signal to all consumers. - * - * new subscriber options.receivePrevious not work until new signal - * - * Example: - * - * ```ts - * contextProvider.expire('product-list'); - * ``` - */ - expire: clearDetail, - - /** - * Waits until the context value changes. - * - * Example: - * - * ```ts - * const newProductList = await contextProvider.untilChange('product-list'); - * ``` - */ - untilChange: untilNext, - - /** - * Subscribe to context changes, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = contextProvider.subscribe('product-list', (productList) => { - * console.log(productList); - * }); - * // ... - * contextProvider.unsubscribe(listener); - * ``` - */ - subscribe: subscribe, - - /** - * Unsubscribe from context changes, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = contextProvider.subscribe('product-list', (productList) => { - * console.log(productList); - * }); - * // ... - * contextProvider.unsubscribe(listener); - * ``` - */ - unsubscribe: unsubscribe, -} as const; - -/** - * Context consumer interface. - */ -export const contextConsumer = (contextId: string) =>({ - /** - * Context signal Id. - */ - id: contextId, - - /** - * Get context value. - * - * Return undefined if context not set before or expired. - * - * Example: - * - * ```ts - * const currentProductList = productListConsumer.getValue(); - * if (currentProductList === undefined) { - * // productList not set before or expired. - * } - * ``` - */ - getValue: getDetail.bind(null, contextId) as OmitFirstParam>, - - /** - * Waits until the context value changes. - * - * Example: - * - * ```ts - * const newProductList = await productListConsumer.untilChange(); - * ``` - */ - untilChange: untilNext.bind(null, contextId) as OmitFirstParam>, - - /** - * Subscribe to context changes, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = productListConsumer.subscribe((productList) => console.log(productList)); - * // ... - * productListConsumer.unsubscribe(listener); - * ``` - */ - subscribe: subscribe.bind(null, contextId) as unknown as - OmitFirstParam>, - - /** - * Unsubscribe from context changes, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = productListConsumer.subscribe((productList) => console.log(productList)); - * // ... - * productListConsumer.unsubscribe(listener); - * ``` - */ - unsubscribe: unsubscribe, -} as const); diff --git a/core/context/src/type.ts b/core/context/src/type.ts deleted file mode 100644 index 5348a5704..000000000 --- a/core/context/src/type.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type {serverContextFsmConstructor} from './core.js'; -import type {StringifyableFetchOptions} from '@alwatr/fetch'; -import type {FsmTypeHelper} from '@alwatr/fsm'; -import type {AlwatrServiceResponseSuccessWithMeta, StringifyableRecord} from '@alwatr/type'; - -export interface ServerContextFsmContext< - TResponse extends AlwatrServiceResponseSuccessWithMeta = AlwatrServiceResponseSuccessWithMeta -> extends StringifyableRecord { - options: Partial; - response?: TResponse; -} - -export type ServerContextFsm = FsmTypeHelper; diff --git a/core/context/tsconfig.json b/core/context/tsconfig.json deleted file mode 100644 index 9bdcfcaae..000000000 --- a/core/context/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../signal"}, - {"path": "../fetch"}, - {"path": "../fsm"}, - {"path": "../type"} - ] -} diff --git a/core/crypto/CHANGELOG.md b/core/crypto/CHANGELOG.md deleted file mode 100644 index 2690f2af8..000000000 --- a/core/crypto/CHANGELOG.md +++ /dev/null @@ -1,155 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/crypto@1.1.1...@alwatr/crypto@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/crypto - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/crypto@1.1.0...@alwatr/crypto@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/crypto - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -### Features - -* **crypto:** add some pre config ([4b960c5](https://github.com/AliMD/alwatr/commit/4b960c5cb3f7495c0689adcb65c62a1032ae2650)) - -### Performance Improvements - -* **crypto/hash:** enhance crc generator ([ba8c4bc](https://github.com/AliMD/alwatr/commit/ba8c4bcf8f9ec9767b0bd3b6c3fd5c4f503a84dd)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **crypto:** package ([866c5f4](https://github.com/AliMD/alwatr/commit/866c5f490ea2eaa75bf177f35b3f4711931e13d2)) - -### Features - -* **crypto:** make prefix for userId ([5baa00a](https://github.com/AliMD/alwatr/commit/5baa00aafb16a4c6ed1d77913edddd090f732dad)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Features - -- **crypto:** add some pre config ([4b960c5](https://github.com/AliMD/alwatr/commit/4b960c5cb3f7495c0689adcb65c62a1032ae2650)) - -### Performance Improvements - -- **crypto/hash:** enhance crc generator ([ba8c4bc](https://github.com/AliMD/alwatr/commit/ba8c4bcf8f9ec9767b0bd3b6c3fd5c4f503a84dd)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **crypto:** package ([866c5f4](https://github.com/AliMD/alwatr/commit/866c5f490ea2eaa75bf177f35b3f4711931e13d2)) - -### Features - -- **crypto:** make prefix for userId ([5baa00a](https://github.com/AliMD/alwatr/commit/5baa00aafb16a4c6ed1d77913edddd090f732dad)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **token:** types ([a7da60e](https://github.com/AliMD/alwatr/commit/a7da60e720ac83b8d2d2ed5c0b811dea1952a2b9)) - -### Features - -- **token:** generate and verify token without expiration time ([6db78f0](https://github.com/AliMD/alwatr/commit/6db78f0644e076c3401a263173d7139838bbbf0c)) -- **type:** define math types ([8c19f40](https://github.com/AliMD/alwatr/commit/8c19f4058d4361b7d3f4f714595e34cb6fa21109)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/crypto - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/crypto - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/crypto - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Features - -- **token:** generate and verify HOTP tpkens ([d0372f8](https://github.com/AliMD/alwatr/commit/d0372f805a45d6fd6571b50821529068cec7d424)) -- **token:** new package files ([fe620e0](https://github.com/AliMD/alwatr/commit/fe620e0d9f84c4e6d8e0eed47d6b398e218429ad)) diff --git a/core/crypto/README.md b/core/crypto/README.md deleted file mode 100644 index 01f14b6c7..000000000 --- a/core/crypto/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Alwatr Crypto - `@alwatr/crypto` - -Secure authentication HOTP token generator (the HMAC-based One-Time Password algorithm) and crypto utils written in tiny TypeScript module. - -## References - -- [RFC 4226](http://tools.ietf.org/html/rfc4226). HMAC-Based One-Time Password Algorithm (HOTP) -- [RFC 6238](http://tools.ietf.org/html/rfc6238). Time-Based One-Time Password Algorithm (TOTP) -- [HMAC: Keyed-Hashing for Message Authentication](https://tools.ietf.org/html/rfc2104). (February 1997). Network Working Group. -- [HMAC and Key Derivation](https://cryptobook.nakov.com/mac-and-key-derivation/hmac-and-key-derivation). Practical Cryptography for Developers. -- [HMAC Generator/Tester Tool](https://www.freeformatter.com/hmac-generator.html). FreeFormatter. -- [How API Request Signing Works (And How to Implement HMAC in NodeJS)](https://blog.andrewhoang.me/how-api-request-signing-works-and-how-to-implement-it-in-nodejs-2/). (2016). Andrew Hoang. -- [Implement HMAC Authentication](https://support.google.com/admanager/answer/7637490?hl=en). Google Ad Manager Help. diff --git a/core/crypto/package.json b/core/crypto/package.json deleted file mode 100644 index 14dc84d6f..000000000 --- a/core/crypto/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@alwatr/crypto", - "version": "1.1.2", - "description": "Secure authentication HOTP token generator (the HMAC-based One-Time Password algorithm) and crypto utils written in tiny TypeScript module.", - "keywords": [ - "crypto", - "hash", - "token", - "authentication", - "auth", - "access", - "token", - "hmac", - "time", - "otp", - "hotp", - "otp-token", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/crypto" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/crypto#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/math": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/core/crypto/src/hash.ts b/core/crypto/src/hash.ts deleted file mode 100644 index 91cd30223..000000000 --- a/core/crypto/src/hash.ts +++ /dev/null @@ -1,108 +0,0 @@ -import {createHash, randomBytes, type BinaryLike} from 'node:crypto'; - -import type {HashGeneratorConfig} from './type.js'; - -/** - * Secure **self-validate** hash generator. - */ -export class AlwatrHashGenerator { - constructor(public config: HashGeneratorConfig) {} - - /** - * Generate simple hash from random data. - * - * Example: - * - * ```js - * const clientId = hashGenerator.random(); - * ``` - */ - random(): string { - return this.generate(randomBytes(16)); - } - - /** - * Generate **self-validate** hash from random data. - * - * Example: - * - * ```ts - * const userId = hashGenerator.randomSelfValidate(); - * ``` - */ - randomSelfValidate(): string { - return this.generateSelfValidate(randomBytes(16)); - } - - /** - * Generate simple hash from data. - * - * Example: - * - * ```ts - * const crcHash = hashGenerator.generate(downloadedData); - * ``` - */ - generate(data: BinaryLike): string { - return createHash(this.config.algorithm).update(data).digest(this.config.encoding); - } - - /** - * Generate crc hash. - */ - _generateCrc(data: BinaryLike): string { - const crc = createHash('sha1').update(data).digest(this.config.encoding); - return this.config.crcLength == null || this.config.crcLength < 1 ? crc : crc.substring(0, this.config.crcLength); - } - - /** - * Generate **self-validate** hash from data. - * - * Example: - * - * ```js - * const userId = hashGenerator.generateSelfValidate(randomData); - * ``` - */ - generateSelfValidate(data: BinaryLike): string { - const mainHash = this.generate(data); - const crcHash = this._generateCrc(mainHash); - return mainHash + crcHash; - } - - /** - * Verify `generate(data)` equals to `hash`. - * - * Example: - * - * ```ts - * if (!hashGenerator.verify(downloadedData, crcHash)) { - * new Error('data_corrupted'); - * } - * ``` - */ - verify(data: BinaryLike, hash: string): boolean { - return hash === this.generate(data); - } - - /** - * Verify a **self-validate** hash to check its generated by this class (same options). - * - * Example: - * - * ```ts - * if (!hashGenerator.verifySelfValidate(user.id)) { - * new Error('invalid_user'); - * } - * ``` - */ - verifySelfValidate(hash: string): boolean { - const gapPos = - this.config.crcLength == null || this.config.crcLength < 1 - ? hash.length / 2 - : hash.length - this.config.crcLength; - const mainHash = hash.substring(0, gapPos); - const crcHash = hash.substring(gapPos); - return crcHash === this._generateCrc(mainHash); - } -} diff --git a/core/crypto/src/index.ts b/core/crypto/src/index.ts deleted file mode 100644 index 1cbf67b7c..000000000 --- a/core/crypto/src/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {globalAlwatr} from '@alwatr/logger'; - -export * from './hash.js'; -export * from './token.js'; -export * from './user.js'; -export * from './type.js'; -export * from './pre-config.js'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/crypto', - version: _ALWATR_VERSION_, -}); diff --git a/core/crypto/src/pre-config.ts b/core/crypto/src/pre-config.ts deleted file mode 100644 index bd3a5be08..000000000 --- a/core/crypto/src/pre-config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {HashGeneratorConfig, TokenGeneratorConfig} from './type.js'; - -/** - * Hash generator pre configuration for making random self-validate **secrets**. - */ -export const secretGeneratorPreConfig: HashGeneratorConfig = { - algorithm: 'sha256', - encoding: 'base64url', - crcLength: 4, -}; - -/** - * Hash generator pre configuration for making random self-validate **user-id**. - */ -export const userIdGeneratorPreConfig: HashGeneratorConfig = { - algorithm: 'sha1', - encoding: 'base64url', - crcLength: 4, -}; - -/** - * Token generator pre configuration for making secure self-validate **user-token**. - */ -export const userTokenGeneratorPreConfig: Pick = { - algorithm: 'sha224', - encoding: 'base64url', -}; diff --git a/core/crypto/src/token.ts b/core/crypto/src/token.ts deleted file mode 100644 index f1bccc09b..000000000 --- a/core/crypto/src/token.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {createHmac} from 'node:crypto'; - -import {parseDuration} from '@alwatr/math'; - -import type {TokenGeneratorConfig, TokenStatus} from './type.js'; - -/** - * Secure authentication HOTP token generator (HMAC-based One-Time Password algorithm). - */ -export class AlwatrTokenGenerator { - protected _duration: number | null; - - get epoch(): number { - return this._duration == null ? 0 : Math.floor(Date.now() / this._duration); - } - - constructor(public config: TokenGeneratorConfig) { - this._duration = config.duration == null ? null : parseDuration(config.duration); - } - - protected _generate(data: string, epoch: number): string { - return createHmac(this.config.algorithm, data) - .update(data + epoch) - .digest(this.config.encoding); - } - - /** - * Generate HOTP token from data base on special duration. - * - * ```ts - * user.auth = tokenGenerator.generate(`${user.id}-${user.role}`); - * ``` - */ - generate(data: string): string { - return this._generate(data, this.epoch); - } - - /** - * Token verification. - * - * ```ts - * const validateStatus = tokenGenerator.verify(`${user.id}-${user.role}`, user.auth); - * ``` - */ - verify(data: string, token: string): TokenStatus { - const epoch = this.epoch; - if (token === this._generate(data, epoch)) { - return 'valid'; - } - else if (this._duration == null) { - return 'invalid'; - } - else if (token === this._generate(data, epoch - 1)) { - return 'expired'; - } - else { - return 'invalid'; - } - } -} diff --git a/core/crypto/src/type.ts b/core/crypto/src/type.ts deleted file mode 100644 index ed9d2ecfa..000000000 --- a/core/crypto/src/type.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type {DurationString} from '@alwatr/math'; - -export type CryptoAlgorithm = 'md5' | 'sha1' | 'sha224' | 'sha256' | 'sha384' | 'sha512'; -export type CryptoEncoding = 'base64' | 'base64url' | 'hex' | 'binary'; - -export type TokenStatus = 'valid' | 'invalid' | 'expired'; -export type HashStatus = 'valid' | 'invalid'; - - -export interface TokenGeneratorConfig { - /** - * Secret string data to generate token. - */ - secret: string; - - /** - * Token expiration time. - * - * `null` mean without expiration time - */ - duration: DurationString | null; - - /** - * OpenSSl digest algorithm. - */ - algorithm: CryptoAlgorithm; - - /** - * Encoding of token. - */ - encoding: CryptoEncoding; -} - -export interface HashGeneratorConfig { - /** - * OpenSSl digest algorithm. - */ - algorithm: CryptoAlgorithm; - - /** - * Encoding of hash. - */ - encoding: CryptoEncoding; - - /** - * CRC hash max length. - */ - crcLength?: number; -} - -export interface UserFactoryConfig { - tokenConfig: TokenGeneratorConfig; - hashConfig: HashGeneratorConfig; -} diff --git a/core/crypto/src/user.ts b/core/crypto/src/user.ts deleted file mode 100644 index 7a2e18f7e..000000000 --- a/core/crypto/src/user.ts +++ /dev/null @@ -1,79 +0,0 @@ -import {AlwatrHashGenerator} from './hash.js'; -import {AlwatrTokenGenerator} from './token.js'; - -import type {HashGeneratorConfig, TokenGeneratorConfig, TokenStatus} from './type.js'; - -/** - * User factory for generating self-validate user-id and user-token. - */ -export class AlwatrUserFactory { - protected _tokenGenerator; - protected _hashGenerator; - - constructor( - hashConfig: HashGeneratorConfig, - tokenConfig: TokenGeneratorConfig, - ) { - this._hashGenerator = new AlwatrHashGenerator(hashConfig); - this._tokenGenerator = new AlwatrTokenGenerator(tokenConfig); - } - - /** - * Generate new self-verifiable user-id. - * - * Example: - * - * ```ts - * const newUser = { - * id: userFactory.generateId(), - * ... - * } - * ``` - */ - generateId(): string { - return 'U' + this._hashGenerator.randomSelfValidate(); - } - - /** - * Validate user-id without token. - * - * Example: - * - * ```ts - * if (!userFactory.verifyId(user.id)) { - * new Error('invalid_user'); - * } - * ``` - */ - verifyId(id: string): boolean { - return this._hashGenerator.verifySelfValidate(id.substring(1)); - } - - /** - * Generate user auth token. - * - * Example: - * - * ```ts - * const userToken = userFactory.generateToken([user.id, user.lpe]); - * ``` - */ - generateToken(uniquelyList: (string | number | boolean)[]): string { - return this._tokenGenerator.generate(uniquelyList.join()); - } - - /** - * Verify user auth token. - * - * Example: - * - * ```ts - * if (!userFactory.verifyToken([user.id, user.lpe], userToken)) { - * new error('invalid_token'); - * } - * ``` - */ - verifyToken(uniquelyList: (string | number | boolean)[], token: string): TokenStatus { - return this._tokenGenerator.verify(uniquelyList.join(), token); - } -} diff --git a/core/crypto/tsconfig.json b/core/crypto/tsconfig.json deleted file mode 100644 index 1b4a27413..000000000 --- a/core/crypto/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../math"}, - ] -} diff --git a/core/fetch/CHANGELOG.md b/core/fetch/CHANGELOG.md deleted file mode 100644 index a24f2d658..000000000 --- a/core/fetch/CHANGELOG.md +++ /dev/null @@ -1,378 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/fetch@1.1.1...@alwatr/fetch@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/fetch - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/fetch@1.1.0...@alwatr/fetch@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/fetch - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -### Bug Fixes - -* **fetch:** serviceRequest type ([44c1086](https://github.com/AliMD/alwatr/commit/44c10866e1c630bc3cf85b3e9be38b268b5b0c31)) -* **fetch:** userAuth in StringifyableFetchOptions ([f554b57](https://github.com/AliMD/alwatr/commit/f554b575584cb1464d48fbe8a8c4006125365853)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **fetch.ts:** compatible with node ([c3acb53](https://github.com/AliMD/alwatr/commit/c3acb53effd4a79e389bc4de1567b0285c03d71d)) -* **fetch:** bodyJson type ([5740467](https://github.com/AliMD/alwatr/commit/57404673e7f031a73d1cf23501e6fa8d89759769)) -* **fetch:** check node_mode before use navigator.online ([a688f48](https://github.com/AliMD/alwatr/commit/a688f48e9ce4b103c25ffd50f1b8c96e89c205d1)) -* **fetch:** serviceRequest generic type ([074ef38](https://github.com/AliMD/alwatr/commit/074ef3876086f93486753559d8e3db0b60c52a0e)) -* **fetch:** suppress fetch_cache_not_found extra error ([c04f609](https://github.com/AliMD/alwatr/commit/c04f60944106dbd8d1bf2fb5ce0e7be644c3abc6)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **fetch:** add user auth ([811fbc0](https://github.com/AliMD/alwatr/commit/811fbc018c2b4e3b808704e8623bd5dff2b2f3f7)) -* **fetch:** StringifyableFetchOptions type ([e13fdb2](https://github.com/AliMD/alwatr/commit/e13fdb2550cf3a2102c331aa7980234ca6f86e08)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **fetch:** fetchContext duplicate setSignalValue ([8aa9b00](https://github.com/AliMD/alwatr/commit/8aa9b003a2d7b7ffc8243ff7092d9560763d7273)) -* **fetch:** getClientId in nodejs ([c99e41c](https://github.com/AliMD/alwatr/commit/c99e41c9e9a979ca50cc01aeb5371a3487d9da2e)) - -### Features - -* **fetch:** enhance fetchContext with dispatchOptions and only cache_only request in first time ([1f6b575](https://github.com/AliMD/alwatr/commit/1f6b575437104d64ede8a2c23d141160360d2cd5)) -* **fetch:** fetchContext ([d63d17e](https://github.com/AliMD/alwatr/commit/d63d17ecb58221159dc45a473fdd1c992d306d2b)) -* **fetch:** fetchContext skip online request when offline ([7c2b649](https://github.com/AliMD/alwatr/commit/7c2b6491f78acb961cdc0583112e3c709a177b79)) -* **fetch:** fetchContext work on background ([2e12bfd](https://github.com/AliMD/alwatr/commit/2e12bfde0a0636c30e60906c4812ec66b2d36742)) -* **fetch:** handle offline for all requests ([6a8d7b7](https://github.com/AliMD/alwatr/commit/6a8d7b7159732d834be052191935580331e36962)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **fetch:** device id to client id ([077e467](https://github.com/AliMD/alwatr/commit/077e4671d804d43c8f61a9d163d8d51d7a69134e)) -* **fetch:** headers type ([cd4b14e](https://github.com/AliMD/alwatr/commit/cd4b14e46b5090b6df8cb4f89d22b53966b9151e)) - -### Features - -* **fetch:** add update_cache to CacheStrategy ([e1406b1](https://github.com/AliMD/alwatr/commit/e1406b12e1276de3295c47506c8102ab3f8bfa79)) -* **fetch:** clientId on service request ([9575a1d](https://github.com/AliMD/alwatr/commit/9575a1d595a0a4757581a29a66837cbe4be46ed3)) - -# 0.28.0 (2023-01-20) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) - -### Features - -* **type:** add types ([2de3842](https://github.com/AliMD/alwatr/commit/2de384297b70b9818ec8d62ce8d31be4822d95a4)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* all import without .js ([fa739ab](https://github.com/AliMD/alwatr/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -* **core/fetch:** tsconfig refrences ([e6b9542](https://github.com/AliMD/alwatr/commit/e6b9542284e67b67600da4dcebd19daedb031c9c)) -* **fetch:** always call revalidateCallback ([444edc5](https://github.com/AliMD/alwatr/commit/444edc52b6dd5de5418ae8630e1f2270f0114372)) -* **fetch:** enhance handle and report errors in serviceRequest ([dbfc7ff](https://github.com/AliMD/alwatr/commit/dbfc7ff2a036216498dc8e2ff58b74b7eb8d9bc0)) -* **fetch:** fetch_cache_not_found is not error ([3d1aa4e](https://github.com/AliMD/alwatr/commit/3d1aa4e572fbf4bc7b0a527a3fdcf4c521af18dd)) -* **fetch:** fetch_failed error message ([3e98bd9](https://github.com/AliMD/alwatr/commit/3e98bd926a495c13d476f2f1cfb9e546a059d4d8)) -* **fetch:** remove extra _options ([ad24c81](https://github.com/AliMD/alwatr/commit/ad24c8104b944ebda52308e60d41976ac1eeee81)) -* **fetch:** revalidateCallback issue ([7207909](https://github.com/AliMD/alwatr/commit/72079098edb438c28256dad03d7802bc2fab0858)) -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* **storage-engine:** AlwatrDocumentStorage ([ca9a7bf](https://github.com/AliMD/alwatr/commit/ca9a7bf5e17b333538e749ada5d481a06c847101)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -* tsconfig refrences ([cea0562](https://github.com/AliMD/alwatr/commit/cea05621ecfa499476c5b10a412e60f27ba6a06d)) - -### Features - -* **fetch:** add AlwatrDocumentStorage type ([44b84f0](https://github.com/AliMD/alwatr/commit/44b84f0754169a707472655811020f6e542a6e5d)) -* **fetch:** serviceRequest ([b0b5478](https://github.com/AliMD/alwatr/commit/b0b5478d16b2cb590cfc29d644006e4a459dd6d6)) -* **fetch:** serviceRequest ([#513](https://github.com/AliMD/alwatr/issues/513)) ([113ee49](https://github.com/AliMD/alwatr/commit/113ee498c778d9efc00cc4807bfef09e52336a31)) -* improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **fetch:** serviceRequest type ([44c1086](https://github.com/AliMD/alwatr/commit/44c10866e1c630bc3cf85b3e9be38b268b5b0c31)) -- **fetch:** userAuth in StringifyableFetchOptions ([f554b57](https://github.com/AliMD/alwatr/commit/f554b575584cb1464d48fbe8a8c4006125365853)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **fetch.ts:** compatible with node ([c3acb53](https://github.com/AliMD/alwatr/commit/c3acb53effd4a79e389bc4de1567b0285c03d71d)) -- **fetch:** bodyJson type ([5740467](https://github.com/AliMD/alwatr/commit/57404673e7f031a73d1cf23501e6fa8d89759769)) -- **fetch:** check node_mode before use navigator.online ([a688f48](https://github.com/AliMD/alwatr/commit/a688f48e9ce4b103c25ffd50f1b8c96e89c205d1)) -- **fetch:** serviceRequest generic type ([074ef38](https://github.com/AliMD/alwatr/commit/074ef3876086f93486753559d8e3db0b60c52a0e)) -- **fetch:** suppress fetch_cache_not_found extra error ([c04f609](https://github.com/AliMD/alwatr/commit/c04f60944106dbd8d1bf2fb5ce0e7be644c3abc6)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **fetch:** add user auth ([811fbc0](https://github.com/AliMD/alwatr/commit/811fbc018c2b4e3b808704e8623bd5dff2b2f3f7)) -- **fetch:** StringifyableFetchOptions type ([e13fdb2](https://github.com/AliMD/alwatr/commit/e13fdb2550cf3a2102c331aa7980234ca6f86e08)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **fetch:** fetchContext duplicate setSignalValue ([8aa9b00](https://github.com/AliMD/alwatr/commit/8aa9b003a2d7b7ffc8243ff7092d9560763d7273)) -- **fetch:** getClientId in nodejs ([c99e41c](https://github.com/AliMD/alwatr/commit/c99e41c9e9a979ca50cc01aeb5371a3487d9da2e)) - -### Features - -- **fetch:** enhance fetchContext with dispatchOptions and only cache_only request in first time ([1f6b575](https://github.com/AliMD/alwatr/commit/1f6b575437104d64ede8a2c23d141160360d2cd5)) -- **fetch:** fetchContext ([d63d17e](https://github.com/AliMD/alwatr/commit/d63d17ecb58221159dc45a473fdd1c992d306d2b)) -- **fetch:** fetchContext skip online request when offline ([7c2b649](https://github.com/AliMD/alwatr/commit/7c2b6491f78acb961cdc0583112e3c709a177b79)) -- **fetch:** fetchContext work on background ([2e12bfd](https://github.com/AliMD/alwatr/commit/2e12bfde0a0636c30e60906c4812ec66b2d36742)) -- **fetch:** handle offline for all requests ([6a8d7b7](https://github.com/AliMD/alwatr/commit/6a8d7b7159732d834be052191935580331e36962)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **fetch:** device id to client id ([077e467](https://github.com/AliMD/alwatr/commit/077e4671d804d43c8f61a9d163d8d51d7a69134e)) -- **fetch:** headers type ([cd4b14e](https://github.com/AliMD/alwatr/commit/cd4b14e46b5090b6df8cb4f89d22b53966b9151e)) - -### Features - -- **fetch:** add update_cache to CacheStrategy ([e1406b1](https://github.com/AliMD/alwatr/commit/e1406b12e1276de3295c47506c8102ab3f8bfa79)) -- **fetch:** clientId on service request ([9575a1d](https://github.com/AliMD/alwatr/commit/9575a1d595a0a4757581a29a66837cbe4be46ed3)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) - -### Features - -- **type:** add types ([2de3842](https://github.com/AliMD/alwatr/commit/2de384297b70b9818ec8d62ce8d31be4822d95a4)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- all import without .js ([fa739ab](https://github.com/AliMD/alwatr/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -- **core/fetch:** tsconfig refrences ([e6b9542](https://github.com/AliMD/alwatr/commit/e6b9542284e67b67600da4dcebd19daedb031c9c)) -- **fetch:** always call revalidateCallback ([444edc5](https://github.com/AliMD/alwatr/commit/444edc52b6dd5de5418ae8630e1f2270f0114372)) -- **fetch:** enhance handle and report errors in serviceRequest ([dbfc7ff](https://github.com/AliMD/alwatr/commit/dbfc7ff2a036216498dc8e2ff58b74b7eb8d9bc0)) -- **fetch:** fetch_cache_not_found is not error ([3d1aa4e](https://github.com/AliMD/alwatr/commit/3d1aa4e572fbf4bc7b0a527a3fdcf4c521af18dd)) -- **fetch:** fetch_failed error message ([3e98bd9](https://github.com/AliMD/alwatr/commit/3e98bd926a495c13d476f2f1cfb9e546a059d4d8)) -- **fetch:** remove extra \_options ([ad24c81](https://github.com/AliMD/alwatr/commit/ad24c8104b944ebda52308e60d41976ac1eeee81)) -- **fetch:** revalidateCallback issue ([7207909](https://github.com/AliMD/alwatr/commit/72079098edb438c28256dad03d7802bc2fab0858)) -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- **storage-engine:** AlwatrDocumentStorage ([ca9a7bf](https://github.com/AliMD/alwatr/commit/ca9a7bf5e17b333538e749ada5d481a06c847101)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -- tsconfig refrences ([cea0562](https://github.com/AliMD/alwatr/commit/cea05621ecfa499476c5b10a412e60f27ba6a06d)) - -### Features - -- **fetch:** add AlwatrDocumentStorage type ([44b84f0](https://github.com/AliMD/alwatr/commit/44b84f0754169a707472655811020f6e542a6e5d)) -- **fetch:** serviceRequest ([b0b5478](https://github.com/AliMD/alwatr/commit/b0b5478d16b2cb590cfc29d644006e4a459dd6d6)) -- **fetch:** serviceRequest ([#513](https://github.com/AliMD/alwatr/issues/513)) ([113ee49](https://github.com/AliMD/alwatr/commit/113ee498c778d9efc00cc4807bfef09e52336a31)) -- improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/fetch - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- **fetch:** AlwatrServiceResponseSuccessWithMeta types ([b46f3f2](https://github.com/AliMD/alwatr/commit/b46f3f22a7c5a671385b0a8f58d0881501ce1b94)) -- **fetch:** use nre method type ([1c63eca](https://github.com/AliMD/alwatr/commit/1c63eca994582c241112c3e5ae79bac49831532f)) -- update types ([44cc57f](https://github.com/AliMD/alwatr/commit/44cc57f97a99ed810dae3fde39c9525bd0e8ff3c)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -### Bug Fixes - -- **fetch:** types ([4ce81a7](https://github.com/AliMD/alwatr/commit/4ce81a7b82d01ab938754bc5e483ccb074671e33)) - -### Features - -- **fetch:** set token in options ([033a638](https://github.com/AliMD/alwatr/commit/033a63846f8c43b86c7d0a662e4bb6aa7cae3af5)) - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **fetch:** \_handleRetryPattern ([fe4ac12](https://github.com/AliMD/alwatr/commit/fe4ac12b4ad3086d44e545591c767cb322e32b8d)) -- **fetch:** bodyJson issue ([5d8d6fa](https://github.com/AliMD/alwatr/commit/5d8d6fa4a0f608c2c5ed583aa54de9b836daaa5f)) - -### Features - -- **fetch:** support nodejs ([2ed2ef4](https://github.com/AliMD/alwatr/commit/2ed2ef42e9f204d4896ada4e20b839cfabdc7284)) - -### Performance Improvements - -- **fetch:** Improve performance and decrease memory usage ([7c29333](https://github.com/AliMD/alwatr/commit/7c293339215bea3a5013effe4aea5b6267a7a75e)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -### Bug Fixes - -- **fetch:** \_handleRemoveDuplicate ([6207b48](https://github.com/AliMD/alwatr/commit/6207b4867935d05a0e5a1c795de9efab4ff77c68)) -- **fetch:** cacheStorageName issue ([e641ff7](https://github.com/AliMD/alwatr/commit/e641ff740055a68b6397f00bf46f1d05943c348a)) -- **fetch:** method type and case ([8d4ba77](https://github.com/AliMD/alwatr/commit/8d4ba77e56ecfe2aeaa459dcd26039c38c4b2199)) -- **fetch:** prevent duplicate revalidateCallback on first time ([2da7dc5](https://github.com/AliMD/alwatr/commit/2da7dc579e4850af06914590a231548cd469cd75)) - -### Features - -- **fetch:** add retryDelay ([28e3244](https://github.com/AliMD/alwatr/commit/28e3244a2d35e7a1a91f9a5a4942f1bb4a56d981)) -- **fetch:** revalidate callback for `stale_while_revalidate` cache strategy. ([8976cc4](https://github.com/AliMD/alwatr/commit/8976cc424b2a9e96e4cfa69941d5378a6640af6f)) -- **fetch:** simple memory caching for remove duplicate/parallel requests ([74cd7f1](https://github.com/AliMD/alwatr/commit/74cd7f1500d730021a0f577c0ecfd7a2460fdb15)) - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -### Bug Fixes - -- **fetch:** update cache on network_first ([54b59cd](https://github.com/AliMD/alwatr/commit/54b59cdc64a543a0afcd09d2ec78d20661f3a06d)) - -### Features - -- **fetch:** cache strategy ([106eabd](https://github.com/AliMD/alwatr/commit/106eabdd10574b24f9919049d0b509ae40168a9a)) -- **fetch:** optional cacheStorageName ([f2bd8f2](https://github.com/AliMD/alwatr/commit/f2bd8f2a899466628417294cb269fd569b87e17a)) -- **fetch:** stale_while_revalidate cache strategy ([f758f49](https://github.com/AliMD/alwatr/commit/f758f495efb42ce7441e8f2058c1b67de0615a8c)) - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Bug Fixes - -- **fetch:** not ok retry condition ([0da1edd](https://github.com/AliMD/alwatr/commit/0da1edda64ec5abf70a83361d159e207691e368e)) - -### Features - -- **fetch:** docs & pattern ([459ad1c](https://github.com/AliMD/alwatr/commit/459ad1c5996f851769306639136d79c0f7270770)) -- **fetch:** logger & jsdocs ([36f652d](https://github.com/AliMD/alwatr/commit/36f652d5dad23b2aeb824af77d1b0e442119c6e8)) -- **fetch:** retry pattern ([5350d1a](https://github.com/AliMD/alwatr/commit/5350d1a81b9134d598f46006a1baa880b280ea98)) - -### Performance Improvements - -- **fetch:** syntax ([1fdd02e](https://github.com/AliMD/alwatr/commit/1fdd02ec8b52e32a124b8d7c1d1c7fd7c993e3af)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- **fetch:** compatible with new ts types AbortSignal ([949655a](https://github.com/AliMD/alwatr/commit/949655a257852aaaaa311e32603ecc0819eedf51)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -**Note:** Version bump only for package @alwatr/fetch - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Bug Fixes - -- **fetch:** build issue [#73](https://github.com/AliMD/alwatr/issues/73) ([fb74463](https://github.com/AliMD/alwatr/commit/fb74463d367393706d16e482488a565bdfef70a1)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -**Note:** Version bump only for package @alwatr/fetch - -## [0.2.1](https://github.com/AliMD/alwatr/compare/v0.2.0...v0.2.1) (2022-03-05) - -**Note:** Version bump only for package @alwatr/fetch - -# [0.2.0](https://github.com/AliMD/alwatr/compare/v0.1.2...v0.2.0) (2022-03-05) - -### Bug Fixes - -- **fetch:** error codes ([4e0be80](https://github.com/AliMD/alwatr/commit/4e0be80786b6667035ae82750f2351bd2da4f341)) - -### Features - -- **fetch:** add getData ([4a627c4](https://github.com/AliMD/alwatr/commit/4a627c43d2ad07acb340f058f02d41ce57288405)) -- **fetch:** add postData and fetchJson ([b0262b8](https://github.com/AliMD/alwatr/commit/b0262b83b5b7d8b7c376dce68aae3e16bd8e2610)) -- **fetch:** base fetch api ([925cdab](https://github.com/AliMD/alwatr/commit/925cdab8700ffb801e1d836ffc5d3245b66815cf)) -- **fetch:** FetchOptions type ([dd2d141](https://github.com/AliMD/alwatr/commit/dd2d1418d090387e1afa8277f78ae88ace17fd17)) -- **fetch:** new enhanced fetch package ([7e90472](https://github.com/AliMD/alwatr/commit/7e904720c983372317358ce107f6ad0f79c65647)) diff --git a/core/fetch/README.md b/core/fetch/README.md deleted file mode 100644 index b03461894..000000000 --- a/core/fetch/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Alwatr Fetch - `@alwatr/fetch` - -Enhanced fetch API with cache strategy, retry pattern, timeout, helper methods and enhanced types written in tiny TypeScript, ES module. - -## Example usage - -### `fetch(options: FetchOptions): Promise` - -It's a wrapper around the browser's `fetch` function that adds retry pattern with timeout and cacheStrategy. - -```ts -import {fetch} from 'https://esm.run/@alwatr/fetch'; - -const response = await fetch({ - url: '/api/products', - queryParameters: {limit: 10}, - timeout: 5_000, - retry: 3, - cacheStrategy: 'stale_while_revalidate', -}); - -if (!response.ok) throw new Error('fetch_failed'); - -const productList = await response.json(); - -console.log(productList); -``` - -### Fetch Options - -`FetchOptions` inherited from the [fetch standard parameters](https://developer.mozilla.org/en-US/docs/Web/API/fetch#parameters) and some other... - -- `url`: Request URL. -- `bodyJson`: Body as JS Object. -- `queryParameters`: URL Query Parameters as JS Object. -- `timeout`: A timeout in ms for the fetch request (default `10_000`ms). -- `retry`: If fetch response not acceptable or timed out, it will retry the request (default `3`). -- `retryDelay`: Delay before each retries (default `1_000`). -- `removeDuplicate`: Simple memory caching for remove duplicate/parallel requests (default `never`). - - `never`: Never use memory caching. - - `always`: Always use memory caching and remove all duplicate requests (just by method+url). - - `until_load`: Cache parallel requests until request completed (it will be removed after the promise resolved). - - `auto`: If CacheStorage was supported use `until_load` strategy else use `always`. -- `cacheStrategy`: Strategies for caching (default `network_only`). - - `network_only`: Only network request without any cache. - - `network_first`: Network first, falling back to cache. - - `cache_only`: Cache only without any network request. - - `cache_first`: Cache first, falling back to network. - - `stale_while_revalidate`: Fastest strategy, Use cached first but always request network to update the cache. -- `revalidateCallback`: Revalidate callback for `stale_while_revalidate` cache strategy. -- `cacheStorageName`: Cache storage custom name (default `alwatr_fetch_cache`). - -[Read more about standard cache strategies](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#caching-strategies) diff --git a/core/fetch/package.json b/core/fetch/package.json deleted file mode 100644 index 9350abf54..000000000 --- a/core/fetch/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@alwatr/fetch", - "version": "1.1.2", - "description": "Enhanced fetch API with cache strategy, retry pattern, timeout, helper methods and enhanced types written in tiny TypeScript, ES module.", - "keywords": [ - "fetch", - "request", - "api", - "retry", - "cache", - "timeout", - "typescript", - "esm", - "alwatr" - ], - "main": "fetch.js", - "type": "module", - "types": "fetch.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/fetch" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/fetch#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/signal": "^1.1.2", - "@alwatr/util": "^1.2.0", - "tslib": "^2.6.2" - } -} diff --git a/core/fetch/src/fetch.ts b/core/fetch/src/fetch.ts deleted file mode 100644 index acea4454a..000000000 --- a/core/fetch/src/fetch.ts +++ /dev/null @@ -1,407 +0,0 @@ -import {createLogger, globalAlwatr, NODE_MODE} from '@alwatr/logger'; -import {contextProvider, type DispatchOptions} from '@alwatr/signal'; -import {getClientId, delay} from '@alwatr/util'; - -import type {FetchOptions} from './type.js'; -import type {AlwatrServiceResponse} from '@alwatr/type'; - -export type * from './type.js'; - -const logger = createLogger('alwatr/fetch'); - -globalAlwatr.registeredList.push({ - name: '@alwatr/fetch', - version: _ALWATR_VERSION_, -}); - -let alwatrCacheStorage: Cache; -const cacheSupported = 'caches' in globalThis; - -const duplicateRequestStorage: Record> = {}; - -export async function fetchContext( - contextName: string, - fetchOption: FetchOptions, - dispatchOptions: Partial = {debounce: 'Timeout'}, -): Promise { - logger.logMethodArgs?.('fetchContext', {contextName}); - if (cacheSupported && contextProvider.getValue(contextName) == null) { - try { - fetchOption.cacheStrategy = 'cache_only'; - const response = await serviceRequest(fetchOption); - contextProvider.setValue(contextName, response, dispatchOptions); - if (navigator.onLine === false) { - logger.logOther?.('fetchContext:', 'offline'); - // retry on online - return; - } - } - catch (err) { - if ((err as Error).message === 'fetch_cache_not_found') { - logger.logOther?.('fetchContext:', 'fetch_cache_not_found'); - } - else { - logger.error('fetchContext', 'fetch_failed', err); - throw err; - } - } - } - - try { - fetchOption.cacheStrategy = 'update_cache'; - const response = await serviceRequest(fetchOption); - if ( - response.meta?.lastUpdated === undefined || // skip lastUpdated check - response.meta?.lastUpdated !== contextProvider.getValue(contextName)?.meta?.lastUpdated - ) { - logger.logOther?.('fetchContext:', 'contextProvider.setValue(new-received-context)', {contextName}); - contextProvider.setValue(contextName, response, dispatchOptions); - } - } - catch (err) { - logger.error('fetchContext', 'fetch_failed', err); - throw err; - } -} - -/** - * Fetch from alwatr services and return standard response. - */ -export async function serviceRequest< - T extends AlwatrServiceResponse = AlwatrServiceResponse ->(options: FetchOptions): Promise { - logger.logMethodArgs?.('serviceRequest', {url: options.url}); - - if (!NODE_MODE) { - options.headers ??= {}; - if (!options.headers['client-id']) { - options.headers['client-id'] = getClientId(); - } - } - - let response: Response; - try { - response = await fetch(options); - } - catch (err) { - const errMessage = (err as Error).message; - if (errMessage !== 'fetch_cache_not_found') { - logger.error('serviceRequest', (err as Error).message || 'fetch_failed', err, options); - } - throw err; - } - - let responseText: string; - try { - responseText = await response.text(); - } - catch (err) { - logger.error('serviceRequest', 'invalid_response', err, { - response, - }); - throw err; - } - - let responseJson: T; - try { - responseJson = JSON.parse(responseText); - } - catch (err) { - logger.error('serviceRequest', 'invalid_json', err, {responseText}); - throw err; - } - - if (responseJson.ok !== true) { - if (typeof responseJson.errorCode === 'string') { - logger.accident('serviceRequest', responseJson.errorCode, 'fetch response not ok', {responseJson}); - throw new Error(responseJson.errorCode); - } - else { - logger.error('serviceRequest', 'fetch_nok', 'fetch response not ok', {responseJson}); - throw new Error('fetch_nok'); - } - } - - // TODO: generate fetch signals hook (for easier handle loading and show error toast) - - return responseJson; -} - -/** - * It's a wrapper around the browser's `fetch` function that adds retry pattern, timeout, cacheStrategy, - * remove duplicates, etc. - * - * Example: - * - * ```ts - * const response = await fetch({ - * url: '/api/products', - * queryParameters: {limit: 10}, - * timeout: 10_000, - * retry: 3, - * cacheStrategy: 'stale_while_revalidate', - * cacheDuplicate: 'auto', - * }); - * ``` - */ -export function fetch(options: FetchOptions): Promise { - options = _processOptions(options); - logger.logMethodArgs?.('fetch', {options}); - return _handleCacheStrategy(options as Required); -} - -/** - * Process fetch options and set defaults, etc. - */ -function _processOptions(options: FetchOptions): Required { - options.method ??= 'GET'; - options.window ??= null; - - options.timeout ??= 10_000; - options.retry ??= 3; - options.retryDelay ??= 1_000; - options.cacheStrategy ??= 'network_only'; - options.removeDuplicate ??= 'never'; - options.headers ??= {}; - - if (options.cacheStrategy !== 'network_only' && cacheSupported !== true) { - logger.incident?.('fetch', 'fetch_cache_strategy_ignore', 'Cache storage not support in this browser', { - cacheSupported, - }); - options.cacheStrategy = 'network_only'; - } - - if (options.removeDuplicate === 'auto') { - options.removeDuplicate = cacheSupported ? 'until_load' : 'always'; - } - - if (options.url.lastIndexOf('?') === -1 && options.queryParameters != null) { - const queryParameters = options.queryParameters; - // prettier-ignore - const queryArray = Object - .keys(queryParameters) - .map((key) => `${key}=${String(queryParameters[key])}`); - - if (queryArray.length > 0) { - options.url += '?' + queryArray.join('&'); - } - } - - if (options.bodyJson != null) { - options.body = JSON.stringify(options.bodyJson); - options.headers['Content-Type'] = 'application/json'; - } - - if (options.token != null) { - options.headers.Authorization = `Bearer ${options.token}`; - } - - if (options.userAuth != null) { - options.headers.Authorization = `Bearer ${options.userAuth.id}/${options.userAuth.token}`; - } - - return options as Required; -} - -/** - * Handle Cache Strategy over `_handleRemoveDuplicate`. - */ -async function _handleCacheStrategy(options: Required): Promise { - if (options.cacheStrategy === 'network_only') { - return _handleRemoveDuplicate(options); - } - // else handle cache strategies! - logger.logMethod?.('_handleCacheStrategy'); - - if (alwatrCacheStorage == null && options.cacheStorageName == null) { - alwatrCacheStorage = await caches.open('alwatr_fetch_cache'); - } - - const cacheStorage = - options.cacheStorageName != null ? await caches.open(options.cacheStorageName) : alwatrCacheStorage; - - const request = new Request(options.url, options); - - switch (options.cacheStrategy) { - case 'cache_first': { - const cachedResponse = await cacheStorage.match(request); - if (cachedResponse != null) { - return cachedResponse; - } - // else - const response = await _handleRemoveDuplicate(options); - if (response.ok) { - cacheStorage.put(request, response.clone()); - } - return response; - } - - case 'cache_only': { - const cachedResponse = await cacheStorage.match(request); - if (cachedResponse == null) { - logger.accident( - '_handleCacheStrategy', - 'fetch_cache_not_found', - 'cacheStorage is cache_only but no cache found', - {url: request.url}, - ); - throw new Error('fetch_cache_not_found'); - } - // else - return cachedResponse; - } - - case 'network_first': { - try { - const networkResponse = await _handleRemoveDuplicate(options); - if (networkResponse.ok) { - cacheStorage.put(request, networkResponse.clone()); - } - return networkResponse; - } - catch (err) { - const cachedResponse = await cacheStorage.match(request); - if (cachedResponse != null) { - return cachedResponse; - } - // else - throw err; - } - } - - case 'update_cache': { - const networkResponse = await _handleRemoveDuplicate(options); - if (networkResponse.ok) { - cacheStorage.put(request, networkResponse.clone()); - } - return networkResponse; - } - - case 'stale_while_revalidate': { - const cachedResponse = await cacheStorage.match(request); - const fetchedResponsePromise = _handleRemoveDuplicate(options).then((networkResponse) => { - if (networkResponse.ok) { - cacheStorage.put(request, networkResponse.clone()); - if (typeof options.revalidateCallback === 'function') { - setTimeout(options.revalidateCallback, 0, networkResponse.clone()); - } - } - return networkResponse; - }); - - return cachedResponse ?? fetchedResponsePromise; - } - - default: { - return _handleRemoveDuplicate(options); - } - } -} - -/** - * Handle Remove Duplicates over `_handleRetryPattern`. - */ -async function _handleRemoveDuplicate(options: Required): Promise { - if (options.removeDuplicate === 'never') return _handleRetryPattern(options); - - logger.logMethod?.('_handleRemoveDuplicate'); - - const cacheKey = options.method + ' ' + options.url; - - // We must cache fetch promise without await for handle other parallel requests. - duplicateRequestStorage[cacheKey] ??= _handleRetryPattern(options); - - try { - // For all requests need to await for clone responses. - const response = await duplicateRequestStorage[cacheKey]; - - if (duplicateRequestStorage[cacheKey] != null) { - if (response.ok !== true || options.removeDuplicate === 'until_load') { - delete duplicateRequestStorage[cacheKey]; - } - } - - return response.clone(); - } - catch (err) { - // clean cache on any error. - delete duplicateRequestStorage[cacheKey]; - throw err; - } -} - -/** - * Handle retry pattern over `_handleTimeout`. - */ -async function _handleRetryPattern(options: Required): Promise { - if (!(options.retry > 1)) return _handleTimeout(options); - - logger.logMethod?.('_handleRetryPattern'); - options.retry--; - - const externalAbortSignal = options.signal; - - try { - const response = await _handleTimeout(options); - - if (response.status < 500) { - return response; - } - // else - throw new Error('fetch_server_error'); - } - catch (err) { - logger.accident('fetch', 'fetch_failed_retry', (err as Error)?.message || 'fetch failed and retry', err); - - if (globalThis.navigator?.onLine === false) { - throw new Error('offline'); - } - - await delay(options.retryDelay); - - options.signal = externalAbortSignal; - return _handleRetryPattern(options); - } -} - -/** - * It's a wrapper around the browser's `fetch` with timeout. - */ -function _handleTimeout(options: FetchOptions): Promise { - if (options.timeout === 0) { - return globalThis.fetch(options.url, options); - } - // else - logger.logMethod?.('_handleTimeout'); - return new Promise((resolved, reject) => { - // TODO: AbortController polyfill - const abortController = new AbortController(); - const externalAbortSignal = options.signal; - options.signal = abortController.signal; - - const timeoutId = setTimeout(() => { - reject(new Error('fetch_timeout')); - abortController.abort('fetch_timeout'); - }, options.timeout); - - if (externalAbortSignal != null) { - // Respect external abort signal - externalAbortSignal.addEventListener('abort', () => abortController.abort(), {once: true}); - } - - // abortController.signal.addEventListener('abort', () => { - // logger.incident('fetch', 'fetch_abort_signal', 'fetch abort signal received', { - // reason: abortController.signal.reason, - // }); - // }); - - globalThis - .fetch(options.url, options) - .then((response) => resolved(response)) - .catch((reason) => reject(reason)) - .finally(() => { - delete options.signal; // try to avoid memory leak in nodejs! - clearTimeout(timeoutId); - }); - }); -} diff --git a/core/fetch/src/type.ts b/core/fetch/src/type.ts deleted file mode 100644 index 2f064afd6..000000000 --- a/core/fetch/src/type.ts +++ /dev/null @@ -1,133 +0,0 @@ -import type {Methods, QueryParameters, StringifyableRecord, UserAuth} from '@alwatr/type'; - -export type CacheStrategy = - | 'network_only' - | 'network_first' - | 'cache_only' - | 'cache_first' - | 'update_cache' - | 'stale_while_revalidate'; - -export type CacheDuplicate = 'never' | 'always' | 'until_load' | 'auto'; - -export interface FetchOptions extends RequestInit { - /** - * Request URL. - */ - url: string; - - /** - * A string to set request's method. - * - * @default 'GET' - */ - method?: Methods; - - /** - * A Headers object to set request's headers. - */ - headers?: Record; - - /** - * A timeout for the fetch request. - * Set `0` for disable it. - * - * Use with cation, you will have memory leak issue in nodejs. - * - * @default 10_000 ms - */ - timeout?: number; - - /** - * If fetch response not acceptable or timed out, it will retry the request. - * - * @default 3 - */ - retry?: number; - - /** - * Delay before each retries. - * - * @default 1_000 ms - */ - retryDelay?: number; - - /** - * Simple memory caching for remove duplicate/parallel requests. - * - * - `never`: Never use memory caching. - * - `always`: Always use memory caching and remove all duplicate requests. - * - `until_load`: Cache parallel requests until request completed (it will be removed after the promise resolved). - * - `auto`: If CacheStorage was supported use `until_load` strategy else use `always`. - * - * @default 'never' - */ - removeDuplicate?: CacheDuplicate; - - /** - * Strategies for caching. - * - * - `network_only`: Only network request without any cache. - * - `network_first`: Network first, falling back to cache. - * - `cache_only`: Cache only without any network request. - * - `cache_first`: Cache first, falling back to network. - * - `update_cache`: Like `network_only` but with update cache. - * - `stale_while_revalidate`: Fastest strategy, Use cached first but always request network to update the cache. - * - * @default 'network_only' - */ - cacheStrategy?: CacheStrategy; - - /** - * Revalidate callback for `stale_while_revalidate` cache strategy. - */ - revalidateCallback?: (response: Response) => void | Promise; - - /** - * Cache storage custom name. - */ - cacheStorageName?: string; - - /** - * Body as JS Object. - */ - bodyJson?: StringifyableRecord; - - /** - * URL Query Parameters as JS Object. - */ - queryParameters?: QueryParameters; - - /** - * Add token to Authentication bearer header. - */ - token?: string; - - /** - * Add user id and token to Authentication bearer header. - */ - userAuth?: UserAuth; -} - -export type StringifyableFetchOptions = Pick< - FetchOptions, - | 'url' - | 'bodyJson' - | 'cache' - | 'cacheStorageName' - | 'cacheStrategy' - | 'headers' - | 'credentials' - | 'keepalive' - | 'method' - | 'mode' - | 'queryParameters' - | 'removeDuplicate' - | 'timeout' - | 'token' - | 'retry' - | 'retryDelay' - | 'referrer' - | 'referrerPolicy' - | 'userAuth' ->; diff --git a/core/fetch/tsconfig.json b/core/fetch/tsconfig.json deleted file mode 100644 index 1f6b770ce..000000000 --- a/core/fetch/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../util"}, - {"path": "../signal"}, - {"path": "../type"} - ] -} diff --git a/core/fract/CHANGELOG.md b/core/fract/CHANGELOG.md deleted file mode 100644 index 1e9e84e02..000000000 --- a/core/fract/CHANGELOG.md +++ /dev/null @@ -1,35 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/fract@1.1.1...@alwatr/fract@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/fract - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/fract@1.1.0...@alwatr/fract@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/fract - -# 1.1.0 (2023-09-12) - -### Bug Fixes - -* **fract:** add `lit-html` as a dependency ([8b6bc2d](https://github.com/AliMD/alwatr/commit/8b6bc2da27d5ad2613f911041ee7c77c20cd1bcf)) -* **fract:** completion of implementation ([355c9c7](https://github.com/AliMD/alwatr/commit/355c9c72f94b63f9334dc9c70ebb2b78fc3482c6)) -* **fract:** export classes ([f94e029](https://github.com/AliMD/alwatr/commit/f94e029263b05788db71946333f867dc47576672)) -* **fract:** exports ([10f6148](https://github.com/AliMD/alwatr/commit/10f614899fcfa44fc69f2c3569210958286a456b)) -* **fract:** structure of classes ([6d8e46b](https://github.com/AliMD/alwatr/commit/6d8e46b34020bc0b7689cace1ea0278b64af92e9)) -* **fract:** the name of package ([59878ef](https://github.com/AliMD/alwatr/commit/59878ef6e6bf579a8a900fa108dc0231af27221c)) - -### Features - -* **fract:** AlwatrDirective ([899467c](https://github.com/AliMD/alwatr/commit/899467c878a36a3dd92acc07dfb861ee9db400cf)) -* **fract:** AlwatrDynamicDirective ([c8560e3](https://github.com/AliMD/alwatr/commit/c8560e35cf68189de2d0ffc979b49fcd9829427b)) -* **fract:** AlwatrObserveDirective ([82b5a15](https://github.com/AliMD/alwatr/commit/82b5a15d003f61d340a7e6c7ce912c1f40af84a6)) -* **fract:** elegant simple render strategy powered by lit written in tiny TypeScript module for who hate react! ([67a1da3](https://github.com/AliMD/alwatr/commit/67a1da3326d545d9f58e04beadfe267480d72fb8)) -* **fract:** export `classMap` ([5b3da22](https://github.com/AliMD/alwatr/commit/5b3da2279e5f8211cdf800d3ee56d0e72e111bbc)) -* **fract:** export `when` ([430f26a](https://github.com/AliMD/alwatr/commit/430f26a8b65796bcb875bd92215449c58a947b56)) -* **fract:** export cache ([d11260f](https://github.com/AliMD/alwatr/commit/d11260f443e9d01c3ad0885a3b5ef46f466e058d)) -* **fract:** export type LitUnstable ([4fac780](https://github.com/AliMD/alwatr/commit/4fac78092e152a04071c465ef195ae6573a0f984)) -* **fract:** map, mapObject ([88128b8](https://github.com/AliMD/alwatr/commit/88128b8cb9b05e51eeec58df0e130a659940ff82)) diff --git a/core/fract/README.md b/core/fract/README.md deleted file mode 100644 index 0c40ed5df..000000000 --- a/core/fract/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Fract - `@alwatr/fract` - -Elegant simple render strategy powered by lit written in tiny TypeScript module for who hate react! - -The word `fract` comes from fractal and does not mean `FuckReact` at all! diff --git a/core/fract/package.json b/core/fract/package.json deleted file mode 100644 index a00b65e9c..000000000 --- a/core/fract/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@alwatr/fract", - "version": "1.1.2", - "description": "Elegant simple render strategy powered by lit written in tiny TypeScript module for who hate react!", - "keywords": [ - "render", - "fuck-react", - "react", - "render", - "lit-html", - "lit", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/fract" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/fract#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/signal2": "^1.0.0", - "lit-html": "^2.8.0", - "tslib": "^2.6.2" - } -} diff --git a/core/fract/src/directive.ts b/core/fract/src/directive.ts deleted file mode 100644 index 922135996..000000000 --- a/core/fract/src/directive.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; - -import {Directive, PartType, type PartInfo, type Part} from './lit-html.js'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/fract', - version: _ALWATR_VERSION_, -}); - -export abstract class AlwatrDirective extends Directive { - protected _logger; - - constructor(partInfo: PartInfo, debugName: string) { - super(partInfo); - this._logger = createLogger(debugName); - this._logger.logMethodArgs?.('constructor', Object.keys(PartType)[partInfo.type - 1]); - } - - override update(_part: Part, props: unknown[]): unknown { - this._logger.logMethodArgs?.('update', props); - return this.render(...props); - } -} diff --git a/core/fract/src/directives/map.ts b/core/fract/src/directives/map.ts deleted file mode 100644 index fb38439ff..000000000 --- a/core/fract/src/directives/map.ts +++ /dev/null @@ -1,62 +0,0 @@ -import {nothing} from '../lit-html.js'; - -/** - * Returns an iterable containing the result of calling `f(value)` on each value in `items`. - * - * @example - * - * ```ts - * render() { - * return html` - *
    - * ${map(items, (i) => html`
  • ${i}
  • `, this)} - *
- * `; - * } - * ``` - */ -export function* map( - items: Iterable | undefined, - f: (value: T) => unknown, - _this?: unknown, - loading?: () => unknown, -): unknown { - if (items === undefined) { - return loading?.() ?? nothing; - } - - for (const value of items) { - yield f.call(_this, value); - } -} - -/** - * Returns an iterable containing the result of calling `f(value)` on each value in `items`. - * - * @example - * - * ```ts - * render() { - * return html` - *
    - * ${mapObject(items, (i) => html`
  • ${i}
  • `, this)} - *
- * `; - * } - * ``` - */ -export function* mapObject( - items: Record | undefined | null, - f: (value: T, key: string) => unknown, - _this?: unknown, - loading?: () => unknown, -): unknown { - if (items === undefined) { - return loading?.() ?? nothing; - } - - for (const key in items) { - if (!Object.prototype.hasOwnProperty.call(items, key)) continue; - yield f.call(_this, items[key], key); - } -} diff --git a/core/fract/src/directives/observe.ts b/core/fract/src/directives/observe.ts deleted file mode 100644 index d412811c5..000000000 --- a/core/fract/src/directives/observe.ts +++ /dev/null @@ -1,55 +0,0 @@ - -import {AlwatrDynamicDirective} from '../dynamic-directive.js'; -import {directive, noChange, type PartInfo} from '../lit-html.js'; - -import type {AlwatrObservableInterface} from '@alwatr/signal2'; - -class AlwatrObserveDirective> extends AlwatrDynamicDirective { - protected _$observable?: T; - protected _$render?: (data: unknown) => unknown; - unsubscribe?: () => void; - - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - render(observable: T, render: (data: any) => unknown): unknown { - this._logger.logMethodArgs?.('render', {observable, render}); - - this._$render = render; - if (this._$observable !== observable) { - // When the observable changes, unsubscribe to the old one and subscribe to the new one - this.unsubscribe?.(); - this._$observable = observable; - if (this.isConnected) { - this.subscribe(observable); - } - } - - return noChange; - } - - /** - * Subscribes to the observable, calling the directive's asynchronous and setValue each time the value changes. - */ - subscribe(observable: T): void { - this._logger.logMethod?.('subscribe'); - this.unsubscribe = observable.subscribe((v) => { - this.setValue(this._$render!(v)); - }, {receivePrevious: true}).unsubscribe; - } - - // When the directive is disconnected from the DOM, unsubscribe to ensure - // the directive instance can be garbage collected - override disconnected(): void { - this.unsubscribe!(); - } - // If the subtree the directive is in was disconnected and subsequently - // re-connected, re-subscribe to make the directive operable again - override reconnected(): void { - this.subscribe(this._$observable!); - } -} - -export const alwatrObserve = directive(AlwatrObserveDirective); diff --git a/core/fract/src/dynamic-directive.ts b/core/fract/src/dynamic-directive.ts deleted file mode 100644 index e0d903e05..000000000 --- a/core/fract/src/dynamic-directive.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -import {PartType, type PartInfo, AsyncDirective, Part} from './lit-html.js'; - -export abstract class AlwatrDynamicDirective extends AsyncDirective { - protected _logger; - - constructor(partInfo: PartInfo, debugName: string) { - super(partInfo); - this._logger = createLogger(debugName); - this._logger.logMethodArgs?.('constructor', Object.keys(PartType)[partInfo.type - 1]); - } - - override setValue(value: unknown): void { - this._logger.logMethodArgs?.('setValue', value); - super.setValue(value); - } - - override update(_part: Part, props: unknown[]): unknown { - this._logger.logMethodArgs?.('update', props); - return this.render(...props); - } - - protected override reconnected(): void { - this._logger.logMethod?.('reconnected'); - super.reconnected(); - } - - protected override disconnected(): void { - this._logger.logMethod?.('disconnected'); - super.disconnected(); - } -} diff --git a/core/fract/src/index.ts b/core/fract/src/index.ts deleted file mode 100644 index 0fcb49d3a..000000000 --- a/core/fract/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './directive.js'; -export * from './dynamic-directive.js'; -export * from './directives/map.js'; -export * from './directives/observe.js'; -export * from './lit-html.js'; diff --git a/core/fract/src/lit-html.ts b/core/fract/src/lit-html.ts deleted file mode 100644 index 9559b70d0..000000000 --- a/core/fract/src/lit-html.ts +++ /dev/null @@ -1,11 +0,0 @@ -export {html, render, noChange, nothing} from 'lit-html'; -export {Directive, PartType, directive} from 'lit-html/directive.js'; -export {AsyncDirective} from 'lit-html/async-directive.js'; -export {unsafeSVG} from 'lit-html/directives/unsafe-svg.js'; -export {ifDefined} from 'lit-html/directives/if-defined.js'; -export {cache} from 'lit-html/directives/cache.js'; -export {classMap} from 'lit-html/directives/class-map.js'; -export {when} from 'lit-html/directives/when.js'; - -export type {Part, PartInfo} from 'lit-html/directive.js'; -export type {LitUnstable} from 'lit-html'; diff --git a/core/fract/tsconfig.json b/core/fract/tsconfig.json deleted file mode 100644 index 2c039985d..000000000 --- a/core/fract/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../signal2"} - ] -} diff --git a/core/fsm/CHANGELOG.md b/core/fsm/CHANGELOG.md deleted file mode 100644 index 5cda44b51..000000000 --- a/core/fsm/CHANGELOG.md +++ /dev/null @@ -1,116 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/fsm@1.1.1...@alwatr/fsm@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/fsm - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/fsm@1.1.0...@alwatr/fsm@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/fsm - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **fms:** import path ([f6770a0](https://github.com/AliMD/alwatr/commit/f6770a07fdf6855ccd63a85822d44d5ef9c72dee)) -* **fsm:** action maybe async ([50efffa](https://github.com/AliMD/alwatr/commit/50efffa34a2ea5a3515561d7425da0c109631f36)) -* **fsm:** autoSignalUnsubscribe type ([f7db30b](https://github.com/AliMD/alwatr/commit/f7db30bf5a90ff3d163f036b313a412a5149ff2b)) -* **fsm:** call render states function in there own this ([a950478](https://github.com/AliMD/alwatr/commit/a95047811366e375785b2cd8fb176b1176638cab)) -* **fsm:** fix order of `initFsmInstance` args ([3b60138](https://github.com/AliMD/alwatr/commit/3b60138ecebcbcb4d732e4d1a3e79f5b8661ae47)) -* **fsm:** initial exec actions ([e7dd5c8](https://github.com/AliMD/alwatr/commit/e7dd5c8aaf9760c9856e4392cc899020f7e796d9)) -* **fsm:** last reported bugs in set state ([e7435c8](https://github.com/AliMD/alwatr/commit/e7435c870a054b0ec3e4004f13c6db7610610be0)) -* **fsm:** review reset process ([af6e81c](https://github.com/AliMD/alwatr/commit/af6e81c068b467d8b3aa96f2431e13ac479f018c)) -* **fsm:** run init entry actions ([777ae45](https://github.com/AliMD/alwatr/commit/777ae459f2b77f79696daf3a0ca355d6d78e57d3)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **fsm:** add `signalRecord` to config ([1a35291](https://github.com/AliMD/alwatr/commit/1a352915fba978da141513517655d1e07350c3ec)) -* **fsm:** add unsubscribe ([85ed3c3](https://github.com/AliMD/alwatr/commit/85ed3c3439e1f40c2760f6011df112242f10be06)) -* **fsm:** callback in provider signals ([772818b](https://github.com/AliMD/alwatr/commit/772818baa7953b6fbb4d4128fcee76733f42cc2d)) -* **fsm:** custom signal callback ([47c22e9](https://github.com/AliMD/alwatr/commit/47c22e92a8a8085148b44b316d649b695ff8071a)) -* **fsm:** destroy and expire api ([e1a1c15](https://github.com/AliMD/alwatr/commit/e1a1c150d81f4428718bd18f039235c7fce9caf2)) -* **fsm:** new types ([2866e3b](https://github.com/AliMD/alwatr/commit/2866e3bd5ff56fd2b5bddcaed3673a5868bae4bb)) -* **fsm:** rewrite state machine ([7f24695](https://github.com/AliMD/alwatr/commit/7f246959e5a80b21c1c4b21e895e75f8fbe56798)) -* **fsm:** subscribe ([2af4f44](https://github.com/AliMD/alwatr/commit/2af4f44f0e8a2dee39cde10dcaa3281075632e6a)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **fsm:** every signal mather ([0dc504d](https://github.com/AliMD/alwatr/commit/0dc504dacbb1ec68f154244619d644ff8e43cc04)) -* **fsm:** remove additional import ([231337b](https://github.com/AliMD/alwatr/commit/231337b95ee7b046fe35429f50931ddf85be291f)) -* **fsm:** update context in transition bug ([28a21d0](https://github.com/AliMD/alwatr/commit/28a21d00d903b6189d814303c72ba6e784852f33)) - -### Features - -* Alwatr Finite State Machines ([d5900b4](https://github.com/AliMD/alwatr/commit/d5900b4ee8685b120188888871405853f5a69417)) -* **fsm:** $all and $self state ([69adf41](https://github.com/AliMD/alwatr/commit/69adf41064ca0f55497484c50e298ebc26c42dcc)) -* **fsm:** enhance types ([3b13046](https://github.com/AliMD/alwatr/commit/3b130463a102f59c38603b0de470be5c87ee88c9)) -* **fsm:** make simple state machine ([ff9ae1c](https://github.com/AliMD/alwatr/commit/ff9ae1ca04156e8b811899ff0f62480e1c37af72)) -* **fsm:** new state context type with {to, from, by} ([11423e6](https://github.com/AliMD/alwatr/commit/11423e6a89159b92e82cfd1e774ad37983581090)) -* **fsm:** rewrite with signal power ([01a1651](https://github.com/AliMD/alwatr/commit/01a1651e231a817d5eebb54cf84d51d620bfd6e8)) -* **fsm:** share state events ([de42522](https://github.com/AliMD/alwatr/commit/de42522a97fdf6be8bee73d91a35820e2a5e6efb)) -* **fsm:** transition with partial context set ([823377e](https://github.com/AliMD/alwatr/commit/823377e65028ea3e713f060ae678776c609c1661)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/fsm - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/fsm - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **fms:** import path ([f6770a0](https://github.com/AliMD/alwatr/commit/f6770a07fdf6855ccd63a85822d44d5ef9c72dee)) -- **fsm:** action maybe async ([50efffa](https://github.com/AliMD/alwatr/commit/50efffa34a2ea5a3515561d7425da0c109631f36)) -- **fsm:** autoSignalUnsubscribe type ([f7db30b](https://github.com/AliMD/alwatr/commit/f7db30bf5a90ff3d163f036b313a412a5149ff2b)) -- **fsm:** call render states function in there own this ([a950478](https://github.com/AliMD/alwatr/commit/a95047811366e375785b2cd8fb176b1176638cab)) -- **fsm:** fix order of `initFsmInstance` args ([3b60138](https://github.com/AliMD/alwatr/commit/3b60138ecebcbcb4d732e4d1a3e79f5b8661ae47)) -- **fsm:** initial exec actions ([e7dd5c8](https://github.com/AliMD/alwatr/commit/e7dd5c8aaf9760c9856e4392cc899020f7e796d9)) -- **fsm:** last reported bugs in set state ([e7435c8](https://github.com/AliMD/alwatr/commit/e7435c870a054b0ec3e4004f13c6db7610610be0)) -- **fsm:** review reset process ([af6e81c](https://github.com/AliMD/alwatr/commit/af6e81c068b467d8b3aa96f2431e13ac479f018c)) -- **fsm:** run init entry actions ([777ae45](https://github.com/AliMD/alwatr/commit/777ae459f2b77f79696daf3a0ca355d6d78e57d3)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **fsm:** add `signalRecord` to config ([1a35291](https://github.com/AliMD/alwatr/commit/1a352915fba978da141513517655d1e07350c3ec)) -- **fsm:** add unsubscribe ([85ed3c3](https://github.com/AliMD/alwatr/commit/85ed3c3439e1f40c2760f6011df112242f10be06)) -- **fsm:** callback in provider signals ([772818b](https://github.com/AliMD/alwatr/commit/772818baa7953b6fbb4d4128fcee76733f42cc2d)) -- **fsm:** custom signal callback ([47c22e9](https://github.com/AliMD/alwatr/commit/47c22e92a8a8085148b44b316d649b695ff8071a)) -- **fsm:** destroy and expire api ([e1a1c15](https://github.com/AliMD/alwatr/commit/e1a1c150d81f4428718bd18f039235c7fce9caf2)) -- **fsm:** new types ([2866e3b](https://github.com/AliMD/alwatr/commit/2866e3bd5ff56fd2b5bddcaed3673a5868bae4bb)) -- **fsm:** rewrite state machine ([7f24695](https://github.com/AliMD/alwatr/commit/7f246959e5a80b21c1c4b21e895e75f8fbe56798)) -- **fsm:** subscribe ([2af4f44](https://github.com/AliMD/alwatr/commit/2af4f44f0e8a2dee39cde10dcaa3281075632e6a)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **fsm:** every signal mather ([0dc504d](https://github.com/AliMD/alwatr/commit/0dc504dacbb1ec68f154244619d644ff8e43cc04)) -- **fsm:** remove additional import ([231337b](https://github.com/AliMD/alwatr/commit/231337b95ee7b046fe35429f50931ddf85be291f)) -- **fsm:** update context in transition bug ([28a21d0](https://github.com/AliMD/alwatr/commit/28a21d00d903b6189d814303c72ba6e784852f33)) - -### Features - -- Alwatr Finite State Machines ([d5900b4](https://github.com/AliMD/alwatr/commit/d5900b4ee8685b120188888871405853f5a69417)) -- **fsm:** $all and $self state ([69adf41](https://github.com/AliMD/alwatr/commit/69adf41064ca0f55497484c50e298ebc26c42dcc)) -- **fsm:** enhance types ([3b13046](https://github.com/AliMD/alwatr/commit/3b130463a102f59c38603b0de470be5c87ee88c9)) -- **fsm:** make simple state machine ([ff9ae1c](https://github.com/AliMD/alwatr/commit/ff9ae1ca04156e8b811899ff0f62480e1c37af72)) -- **fsm:** new state context type with {to, from, by} ([11423e6](https://github.com/AliMD/alwatr/commit/11423e6a89159b92e82cfd1e774ad37983581090)) -- **fsm:** rewrite with signal power ([01a1651](https://github.com/AliMD/alwatr/commit/01a1651e231a817d5eebb54cf84d51d620bfd6e8)) -- **fsm:** share state events ([de42522](https://github.com/AliMD/alwatr/commit/de42522a97fdf6be8bee73d91a35820e2a5e6efb)) -- **fsm:** transition with partial context set ([823377e](https://github.com/AliMD/alwatr/commit/823377e65028ea3e713f060ae678776c609c1661)) diff --git a/core/fsm/README.md b/core/fsm/README.md deleted file mode 100644 index ed034c9eb..000000000 --- a/core/fsm/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Finite State Machines - `@alwatr/fsm` - -Managing invocations finite-state machines for lit-element written in tiny TypeScript module. diff --git a/core/fsm/package.json b/core/fsm/package.json deleted file mode 100644 index 157e78760..000000000 --- a/core/fsm/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@alwatr/fsm", - "version": "1.1.2", - "description": "Managing invocations finite-state machines for lit-element written in tiny TypeScript module.", - "keywords": [ - "state", - "finite", - "machine", - "lit", - "lit-element", - "lit-html", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/fsm" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/fsm#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/signal": "^1.1.2", - "@alwatr/type": "^1.1.1", - "tslib": "^2.6.2" - } -} diff --git a/core/fsm/src/core.ts b/core/fsm/src/core.ts deleted file mode 100644 index a3acd73a5..000000000 --- a/core/fsm/src/core.ts +++ /dev/null @@ -1,493 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; -import {ListenerSpec, contextProvider, contextConsumer} from '@alwatr/signal'; -import {destroySignal, unsubscribe} from '@alwatr/signal/core.js'; -import {SubscribeOptions} from '@alwatr/signal/type.js'; - -import type { - ActionRecord, - FsmConstructor, - FsmConstructorConfig, - FsmConsumerInterface, - FsmInstance, - FsmState, - FsmTypeHelper, - SignalConfig, -} from './type.js'; -import type {MaybePromise, OmitFirstParam, SingleOrArray, StringifyableRecord} from '@alwatr/type'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/fsm', - version: _ALWATR_VERSION_, -}); - -const logger = createLogger(`alwatr/fsm`); - -/** - * Finite state machine constructor storage. - */ -const fsmConstructorStorage: Record = {}; - -export const defineConstructor = < - TState extends string = string, - TEventId extends string = string, - TActionName extends string = string, - TContext extends StringifyableRecord = StringifyableRecord ->( - id: string, - config: FsmConstructorConfig, - ): FsmConstructorConfig => { - logger.logMethodArgs?.('defineConstructor', {id, config}); - if (fsmConstructorStorage[id] != null) throw new Error('fsm_exist', {cause: {id}}); - fsmConstructorStorage[id] = { - id, - config, - actionRecord: {}, - signalList: [], - }; - return config; -}; - -/** - * Get finite state machine instance by id. - */ -export const getFsmInstance = < - TState extends string = string, - TEventId extends string = string, - TContext extends StringifyableRecord = StringifyableRecord ->( - instanceId: string, - ): FsmInstance => { - logger.logMethodArgs?.('_getFsmInstance', instanceId); - const fsmInstance = contextConsumer.getValue>(instanceId); - if (fsmInstance == null) throw new Error('fsm_undefined', {cause: {instanceId}}); - return fsmInstance; -}; - -/** - * Get finite state machine constructor by id. - */ -export const getFsmConstructor = (constructorId: string): FsmConstructor => { - logger.logMethodArgs?.('_getFsmConstructor', constructorId); - const fsmConstructor = fsmConstructorStorage[constructorId]; - if (fsmConstructor == null) throw new Error('fsm_undefined', {cause: {constructorId: constructorId}}); - return fsmConstructor; -}; - -/** - * Get current state of finite state machine instance. - */ -export const getState = ( - instanceId: string, -): FsmState => { - logger.logMethodArgs?.('getState', instanceId); - return getFsmInstance(instanceId).state; -}; - -/** - * Get current context of finite state machine instance. - */ -export const getContext = ( - instanceId: string, -): TContext => { - logger.logMethodArgs?.('getContext', instanceId); - return getFsmInstance(instanceId).context; -}; - -/** - * Set context of finite state machine instance. - */ -export const setContext = ( - instanceId: string, - context: Partial, - notify?: boolean, -): void => { - logger.logMethodArgs?.('setContext', {instanceId, context}); - const fsmInstance = getFsmInstance(instanceId); - fsmInstance.context = { - ...fsmInstance.context, - ...context, - }; - - if (notify) { - contextProvider.setValue(instanceId, fsmInstance, {debounce: 'Timeout'}); - } -}; - -/** - * Transition finite state machine instance to new state. - */ -export const transition = < - TEventId extends string = string, - TContext extends StringifyableRecord = StringifyableRecord ->( - instanceId: string, - event: TEventId, - context?: Partial, - ): void => { - const fsmInstance = getFsmInstance(instanceId); - const fsmConstructor = getFsmConstructor(fsmInstance.constructorId); - const fromState = fsmInstance.state.target; - const stateRecord = fsmConstructor.config.stateRecord; - const transitionConfig = stateRecord[fromState]?.on[event] ?? stateRecord.$all.on[event]; - - logger.logMethodArgs?.('transition', {instanceId, fromState, event, context, target: transitionConfig?.target}); - - if (context !== undefined) { - fsmInstance.context = { - ...fsmInstance.context, - ...context, - }; - } - - if (transitionConfig == null) { - logger.incident?.( - 'transition', - 'invalid_target_state', - 'Defined target state for this event not found in state config', - { - fromState, - event, - events: { - ...stateRecord.$all?.on, - ...stateRecord[fromState]?.on, - }, - }, - ); - return; - } - - const consumerInterface = finiteStateMachineConsumer(instanceId); - - if (transitionConfig.condition) { - if (_execAction(fsmConstructor, transitionConfig.condition, consumerInterface) === false) return; - } - - fsmInstance.state = { - target: transitionConfig.target ?? fromState, - from: fromState, - by: event, - }; - - contextProvider.setValue(instanceId, fsmInstance, {debounce: 'Timeout'}); - - _execAllActions(fsmConstructor, fsmInstance.state, consumerInterface); -}; - -/** - * Define actions for finite state machine constructor. - */ -export const defineActions = (constructorId: string, actionRecord: ActionRecord): void => { - logger.logMethodArgs?.('defineActions', {constructorId, actionRecord}); - const fmsConstructor = getFsmConstructor(constructorId); - fmsConstructor.actionRecord = { - ...fmsConstructor.actionRecord, - ...actionRecord, - }; -}; - -/** - * Execute all actions for current state. - */ -export const _execAllActions = ( - constructor: FsmConstructor, - state: FsmState, - consumerInterface: FsmConsumerInterface, -): void => { - logger.logMethodArgs?.('_execAllActions', consumerInterface.id); - - const stateRecord = constructor.config.stateRecord; - - if (state.by === 'INIT') { - _execAction(constructor, stateRecord.$all.entry, consumerInterface); - _execAction(constructor, stateRecord[state.target]?.entry, consumerInterface); - return; - } - - // else - if (state.from !== state.target) { - _execAction(constructor, stateRecord.$all.exit, consumerInterface); - _execAction(constructor, stateRecord[state.from]?.exit, consumerInterface); - _execAction(constructor, stateRecord.$all.entry, consumerInterface); - _execAction(constructor, stateRecord[state.target]?.entry, consumerInterface); - } - - _execAction( - constructor, - stateRecord[state.from]?.on[state.by] != null - ? stateRecord[state.from].on[state.by]?.actions - : stateRecord.$all.on[state.by]?.actions, - consumerInterface, - ); -}; - -/** - * Execute single action. - */ -export const _execAction = ( - constructor: FsmConstructor, - actionNames: SingleOrArray | undefined, - finiteStateMachine: FsmConsumerInterface, -): boolean | MaybePromise => { - if (actionNames == null) return; - logger.logMethodArgs?.('execAction', {constructorId: constructor.id, actionNames}); - - if (Array.isArray(actionNames)) { - return actionNames - .map((actionName) => _execAction(constructor, actionName, finiteStateMachine)) - .every((r) => r === true); - } - - try { - const actionFn = constructor.actionRecord[actionNames]; - if (actionFn == null) { - return logger.error('execAction', 'action_not_found', { - actionNames, - constructorId: constructor.id, - instanceId: finiteStateMachine.id, - }); - } - return actionFn(finiteStateMachine); - } - catch (error) { - return logger.error('execAction', 'action_error', error, { - actionNames, - constructorId: constructor.id, - instanceId: finiteStateMachine.id, - }); - } -}; - -/** - * Initialize new finite state machine instance. - */ -export const initFsmInstance = (instanceId: string, constructorId: string): void => { - logger.logMethodArgs?.('initializeMachine', {constructorId, instanceId}); - const constructor = getFsmConstructor(constructorId); - const {initial, context} = constructor.config; - const newInstance: FsmInstance = { - constructorId, - state: { - target: initial, - from: initial, - by: 'INIT', - }, - context, - }; - contextProvider.setValue(instanceId, newInstance, {debounce: 'NextCycle'}); - - _execAllActions(constructor, newInstance.state, finiteStateMachineConsumer(instanceId)); -}; - -/** - * Subscribe to all defined signals for finite state machine instance. - */ -export const subscribeSignals = ( - instanceId: string, - signalList: SignalConfig[], - subscribeConstructorSignals = true, -): ListenerSpec[] => { - logger.logMethodArgs?.('subscribeSignals', {instanceId, signalList}); - const listenerList: ListenerSpec[] = []; - - if (subscribeConstructorSignals) { - signalList = signalList.concat(getFsmConstructor(getFsmInstance(instanceId).constructorId).signalList); - } - - for (const signalConfig of signalList) { - signalConfig.signalId ??= instanceId; - listenerList.push( - contextConsumer.subscribe( - signalConfig.signalId, - (signalDetail: StringifyableRecord): void => { - logger.logMethodArgs?.('execSignalCallback', {instanceId, signalId: signalConfig.signalId, signalDetail}); - if (signalConfig.callback) { - signalConfig.callback(signalDetail, finiteStateMachineConsumer(instanceId)); - } - else { - // prettier-ignore - transition( - instanceId, - signalConfig.transition, - signalConfig.contextName == null ? undefined : { - [signalConfig.contextName]: signalDetail, - }, - ); - } - }, - {receivePrevious: signalConfig.receivePrevious ?? 'No'}, - ), - ); - } - - return listenerList; -}; - -/** - * Define signals for finite state machine constructor. - */ -export const defineConstructorSignals = ( - constructorId: string, - signalList: SignalConfig[], -): void => { - logger.logMethodArgs?.('defineSignals', {constructorId, signalList: signalList}); - const fsmConstructor = getFsmConstructor(constructorId); - fsmConstructor.signalList = fsmConstructor.signalList.concat(signalList as SignalConfig[]); -}; - -/** - * Define signals for finite state machine instance. - */ -export const defineInstanceSignals = ( - instanceId: string, - signalList: SignalConfig[], - subscribeConstructorSignals = true, -): ListenerSpec[] => { - logger.logMethodArgs?.('defineSignals', {instanceId, signals: signalList}); - return subscribeSignals(instanceId, signalList as SignalConfig[], subscribeConstructorSignals); -}; - -/** - * Render helper for use finite state machine instance in UI. - * - * Example: - * - * ```ts - * render('myFsm', { - * state1: () => html`
State 1 Render...
`, - * state2: () => html`
State 2 Render...
`, - * state3: 'state1', - * }); - * ``` - */ -export const render = ( - instanceId: string, - states: {[P in TState]: (() => unknown) | TState}, - thisArg: unknown = null, -): unknown => { - const state = getFsmInstance(instanceId).state; - logger.logMethodArgs?.('render', {instanceId, state: state.target}); - let renderFn = states[state.target as TState]; - - if (typeof renderFn === 'string') { - renderFn = states[renderFn as TState]; - } - - if (typeof renderFn === 'function') { - return renderFn.call(thisArg); - } - - return; -}; - -/** - * Subscribe to finite state machine instance state changes. - */ -export const subscribe = ( - instanceId: string, - callback: () => void, - options?: Partial, -): ListenerSpec => { - logger.logMethodArgs?.('subscribe', instanceId); - return contextConsumer.subscribe(instanceId, callback, options); -}; - -/** - * Destroy finite state machine instance object to clear memory. - */ -export const destroy = (instanceId: string): void => { - logger.logMethodArgs?.('destroy', instanceId); - destroySignal(instanceId); -}; - -/** - * Reset finite state machine instance to initial state and context. - */ -export const reset = (instanceId: string): void => { - logger.logMethodArgs?.('reset', instanceId); - const constructorId = getFsmInstance(instanceId).constructorId; - // contextProvider.expire(instanceId); - initFsmInstance(instanceId, constructorId); -}; - -/** - * Finite state machine instance consumer. - * Lookup current finite state machine instance or initialize new one and return consumer object . - */ -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export const finiteStateMachineConsumer = ( - instanceId: string, - makeFromConstructor?: string, -) => { - logger.logMethodArgs?.('stateMachineLookup', instanceId); - - const machineInstance = contextConsumer.getValue(instanceId); - if (machineInstance == null) { - // instance not initialized. - if (makeFromConstructor == null) { - throw new Error('fsm_undefined', {cause: {instanceId}}); - } - initFsmInstance(instanceId, makeFromConstructor); - } - - return { - /** - * Finite state machine instance id. - */ - id: instanceId, - - /** - * Finite state machine constructor id. - */ - constructorId: machineInstance?.constructorId as string ?? makeFromConstructor, - - /** - * Render helper for use finite state machine instance in UI. - */ - render: render.bind(null, instanceId) as OmitFirstParam>, - - /** - * Subscribe to finite state machine instance state changes. - */ - subscribe: subscribe.bind(null, instanceId) as OmitFirstParam, - - /** - * Unsubscribe from finite state machine instance state changes. - */ - unsubscribe: unsubscribe, - - /** - * Get current state of finite state machine instance. - */ - getState: getState.bind(null, instanceId) as OmitFirstParam>, - - /** - * Get current context of finite state machine instance. - */ - getContext: getContext.bind(null, instanceId) as OmitFirstParam>, - - /** - * Set context of finite state machine instance. - */ - setContext: setContext.bind(null, instanceId) as OmitFirstParam>, - - /** - * Transition finite state machine instance to new state. - */ - transition: transition.bind(null, instanceId) as OmitFirstParam>, - - /** - * Define signals for finite state machine instance. - */ - defineSignals: defineInstanceSignals.bind(null, instanceId) as OmitFirstParam>, - - /** - * Reset finite state machine instance to initial state and context. - */ - reset: reset.bind(null, instanceId) as OmitFirstParam, - - /** - * Destroy finite state machine instance object to clear memory. - */ - destroy: destroy.bind(null, instanceId) as OmitFirstParam, - } as const; -}; diff --git a/core/fsm/src/index.ts b/core/fsm/src/index.ts deleted file mode 100644 index c3c64b389..000000000 --- a/core/fsm/src/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {defineActions, defineConstructor, defineConstructorSignals, subscribe} from './core.js'; - -export {finiteStateMachineConsumer} from './core.js'; - -/** - * Finite State Machine Provider. - */ -export const finiteStateMachineProvider = { - defineConstructor, - defineActions, - defineSignals: defineConstructorSignals, - subscribe, -} as const; - -export type {FsmTypeHelper, FsmConstructorConfig, FsmConsumerInterface} from './type.js'; diff --git a/core/fsm/src/type.ts b/core/fsm/src/type.ts deleted file mode 100644 index b96f34e87..000000000 --- a/core/fsm/src/type.ts +++ /dev/null @@ -1,143 +0,0 @@ -import type {finiteStateMachineConsumer} from './core.js'; -import type {DebounceType} from '@alwatr/signal'; -import type {ArrayItems, MaybePromise, SingleOrArray, StringifyableRecord} from '@alwatr/type'; - -export interface FsmConstructor { - /** - * Constructor id. - */ - readonly id: string; - readonly config: FsmConstructorConfig; - actionRecord: ActionRecord; - signalList: SignalConfig[]; -} - -export interface FsmConstructorConfig< - TState extends string = string, - TEventId extends string = string, - TActionName extends string = string, - TContext extends StringifyableRecord = StringifyableRecord -> extends StringifyableRecord { - /** - * Initial context. - */ - readonly context: TContext; - - /** - * Initial state. - */ - readonly initial: TState; - - /** - * Define state list - */ - readonly stateRecord: StateRecord; -} - -export type StateRecord< - TState extends string = string, - TEventId extends string = string, - TActionName extends string = string -> = { - readonly [S in TState | '$all']: { - /** - * On state exit actions - */ - readonly exit?: SingleOrArray; - - /** - * On state entry actions - */ - readonly entry?: SingleOrArray; - - /** - * An object mapping eventId to state. - * - * Example: - * - * ```ts - * stateRecord: { - * on: { - * TIMER: { - * target: 'green', - * condition: () => car.gas > 0, - * actions: () => car.go(), - * } - * } - * } - * ``` - */ - readonly on: { - readonly [E in TEventId]?: TransitionConfig | undefined; - }; - }; -}; - -export interface FsmState - extends StringifyableRecord { - /** - * Current state - */ - target: TState; - /** - * Last state - */ - from: TState; - /** - * Transition event - */ - by: TEventId | 'INIT'; -} - -export interface TransitionConfig - extends StringifyableRecord { - readonly target?: TState; - readonly condition?: TActionName; - readonly actions?: SingleOrArray; -} - -export interface FsmInstance< - TState extends string = string, - TEventId extends string = string, - TContext extends StringifyableRecord = StringifyableRecord -> extends StringifyableRecord { - readonly constructorId: string; - state: FsmState; - context: TContext; -} - -export type ActionRecord = { - readonly [P in T['TActionName']]?: (finiteStateMachine: FsmConsumerInterface) => MaybePromise | boolean; -}; - -export type SignalConfig = { - signalId?: string; - /** - * @default `No` - */ - receivePrevious?: DebounceType; -} & ( - | { - transition: T['TEventId']; - contextName?: keyof T['TContext']; - callback?: never; - } - | { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - callback: (detail: any, fsmInstance: FsmConsumerInterface) => void; - transition?: never; - } -); - -// type helper -export type FsmTypeHelper = Readonly<{ - TState: Exclude; - TEventId: keyof T['stateRecord'][FsmTypeHelper['TState']]['on']; - TActionName: NonNullable['TState']]['entry']>>; - TContext: T['context']; -}>; - -export type FsmConsumerInterface< - T extends FsmTypeHelper = FsmTypeHelper, - TContext extends T['TContext'] = T['TContext'] -> = ReturnType>; diff --git a/core/fsm/tsconfig.json b/core/fsm/tsconfig.json deleted file mode 100644 index e6c93f7e8..000000000 --- a/core/fsm/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../type"}, - {"path": "../signal"}, - ] -} diff --git a/core/fsm2/CHANGELOG.md b/core/fsm2/CHANGELOG.md deleted file mode 100644 index 0fc34dcce..000000000 --- a/core/fsm2/CHANGELOG.md +++ /dev/null @@ -1,71 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/fsm2 - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **fsm2:** add `name` to `config` & remove `context` ([593fde4](https://github.com/AliMD/alwatr/commit/593fde418de223a2b942d7a63a665b9074939b24)) -- **fsm2:** convert `config` to an object ([42a34cb](https://github.com/AliMD/alwatr/commit/42a34cb3c26db823e1e6b51ae497a43ed24ab8c2)) -- **fsm2:** types ([8543edf](https://github.com/AliMD/alwatr/commit/8543edfe3688b2ccf207de136d29f272d7e1ab44)) -- **fsm:** make it private ([70b9644](https://github.com/AliMD/alwatr/commit/70b96441f205a3e287928997ca427e1851dfebf8)) - -### Features - -- **fsm2:** base class ([db13f5c](https://github.com/AliMD/alwatr/commit/db13f5c95524b16dc0dc003096f555988d5ef379)) -- **fsm2:** review and cleanup ([6349f33](https://github.com/AliMD/alwatr/commit/6349f3338beccdca4b2a29adc3dc3feef8888492)) -- **fsm2:** rewrite from scratch. ([5b7a6cf](https://github.com/AliMD/alwatr/commit/5b7a6cfd41eae2b73f1469a80ecc24d7063e58c3)) -- **fsm2:** simple FiniteStateMachine and base ([30c7ba0](https://github.com/AliMD/alwatr/commit/30c7ba0f78f1df97de0d411c4707c1f1ed8b4d16)) -- **fsm2:** StateRecord conf ([e193097](https://github.com/AliMD/alwatr/commit/e193097cd98cb636c4379c8e07ce4e4cd4cfc75c)) -- **fsm2:** use abstract for base class ([8bdd9a3](https://github.com/AliMD/alwatr/commit/8bdd9a3f9067f4583674498a26fa5572879541d7)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **fms:** import path ([f6770a0](https://github.com/AliMD/alwatr/commit/f6770a07fdf6855ccd63a85822d44d5ef9c72dee)) -- **fsm:** action maybe async ([50efffa](https://github.com/AliMD/alwatr/commit/50efffa34a2ea5a3515561d7425da0c109631f36)) -- **fsm:** autoSignalUnsubscribe type ([f7db30b](https://github.com/AliMD/alwatr/commit/f7db30bf5a90ff3d163f036b313a412a5149ff2b)) -- **fsm:** call render states function in there own this ([a950478](https://github.com/AliMD/alwatr/commit/a95047811366e375785b2cd8fb176b1176638cab)) -- **fsm:** fix order of `initFsmInstance` args ([3b60138](https://github.com/AliMD/alwatr/commit/3b60138ecebcbcb4d732e4d1a3e79f5b8661ae47)) -- **fsm:** initial exec actions ([e7dd5c8](https://github.com/AliMD/alwatr/commit/e7dd5c8aaf9760c9856e4392cc899020f7e796d9)) -- **fsm:** last reported bugs in set state ([e7435c8](https://github.com/AliMD/alwatr/commit/e7435c870a054b0ec3e4004f13c6db7610610be0)) -- **fsm:** review reset process ([af6e81c](https://github.com/AliMD/alwatr/commit/af6e81c068b467d8b3aa96f2431e13ac479f018c)) -- **fsm:** run init entry actions ([777ae45](https://github.com/AliMD/alwatr/commit/777ae459f2b77f79696daf3a0ca355d6d78e57d3)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **fsm:** add `signalRecord` to config ([1a35291](https://github.com/AliMD/alwatr/commit/1a352915fba978da141513517655d1e07350c3ec)) -- **fsm:** add unsubscribe ([85ed3c3](https://github.com/AliMD/alwatr/commit/85ed3c3439e1f40c2760f6011df112242f10be06)) -- **fsm:** callback in provider signals ([772818b](https://github.com/AliMD/alwatr/commit/772818baa7953b6fbb4d4128fcee76733f42cc2d)) -- **fsm:** custom signal callback ([47c22e9](https://github.com/AliMD/alwatr/commit/47c22e92a8a8085148b44b316d649b695ff8071a)) -- **fsm:** destroy and expire api ([e1a1c15](https://github.com/AliMD/alwatr/commit/e1a1c150d81f4428718bd18f039235c7fce9caf2)) -- **fsm:** new types ([2866e3b](https://github.com/AliMD/alwatr/commit/2866e3bd5ff56fd2b5bddcaed3673a5868bae4bb)) -- **fsm:** rewrite state machine ([7f24695](https://github.com/AliMD/alwatr/commit/7f246959e5a80b21c1c4b21e895e75f8fbe56798)) -- **fsm:** subscribe ([2af4f44](https://github.com/AliMD/alwatr/commit/2af4f44f0e8a2dee39cde10dcaa3281075632e6a)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **fsm:** every signal mather ([0dc504d](https://github.com/AliMD/alwatr/commit/0dc504dacbb1ec68f154244619d644ff8e43cc04)) -- **fsm:** remove additional import ([231337b](https://github.com/AliMD/alwatr/commit/231337b95ee7b046fe35429f50931ddf85be291f)) -- **fsm:** update context in transition bug ([28a21d0](https://github.com/AliMD/alwatr/commit/28a21d00d903b6189d814303c72ba6e784852f33)) - -### Features - -- Alwatr Finite State Machines ([d5900b4](https://github.com/AliMD/alwatr/commit/d5900b4ee8685b120188888871405853f5a69417)) -- **fsm:** $all and $self state ([69adf41](https://github.com/AliMD/alwatr/commit/69adf41064ca0f55497484c50e298ebc26c42dcc)) -- **fsm:** enhance types ([3b13046](https://github.com/AliMD/alwatr/commit/3b130463a102f59c38603b0de470be5c87ee88c9)) -- **fsm:** make simple state machine ([ff9ae1c](https://github.com/AliMD/alwatr/commit/ff9ae1ca04156e8b811899ff0f62480e1c37af72)) -- **fsm:** new state context type with {to, from, by} ([11423e6](https://github.com/AliMD/alwatr/commit/11423e6a89159b92e82cfd1e774ad37983581090)) -- **fsm:** rewrite with signal power ([01a1651](https://github.com/AliMD/alwatr/commit/01a1651e231a817d5eebb54cf84d51d620bfd6e8)) -- **fsm:** share state events ([de42522](https://github.com/AliMD/alwatr/commit/de42522a97fdf6be8bee73d91a35820e2a5e6efb)) -- **fsm:** transition with partial context set ([823377e](https://github.com/AliMD/alwatr/commit/823377e65028ea3e713f060ae678776c609c1661)) diff --git a/core/fsm2/README.md b/core/fsm2/README.md deleted file mode 100644 index ed034c9eb..000000000 --- a/core/fsm2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Finite State Machines - `@alwatr/fsm` - -Managing invocations finite-state machines for lit-element written in tiny TypeScript module. diff --git a/core/fsm2/package.json b/core/fsm2/package.json deleted file mode 100644 index d29703ace..000000000 --- a/core/fsm2/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@alwatr/fsm2", - "version": "1.0.0", - "description": "Managing invocations finite-state machines for lit-element written in tiny TypeScript module.", - "keywords": [ - "state", - "finite", - "machine", - "lit", - "lit-element", - "lit-html", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "private": true, - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/fsm" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/fsm#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.0.0", - "@alwatr/signal": "^1.0.0", - "@alwatr/type": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/core/fsm2/src/base.ts b/core/fsm2/src/base.ts deleted file mode 100644 index 1a10b537d..000000000 --- a/core/fsm2/src/base.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import {AlwatrObservable} from '@alwatr/signal2/observable.js'; - -import type {ActionName, ActionRecord, StateEventDetail, StateRecord} from './type.js'; -import type {MaybePromise} from '@alwatr/type'; - -/** - * Finite State Machine Base Class - */ -export abstract class FiniteStateMachineBase extends AlwatrObservable { - /** - * Current state - */ - protected get _state(): S { - return this._getData()!; - } - - /** - * States and transitions config. - */ - protected _stateRecord: StateRecord = {}; - - /** - * Bind actions name to class methods - */ - protected _actionRecord: ActionRecord = {}; - - protected _initialState: S; - - constructor(config: {name: string, loggerPrefix?: string, initialState: S}) { - config.loggerPrefix ??= 'fsm'; - super(config); - this._initialState = config.initialState; - this._reset(); - } - - /** - * Transition condition. - */ - protected _shouldTransition(_eventDetail: StateEventDetail): MaybePromise { - this._logger.logMethodFull?.('_shouldTransition', _eventDetail, true); - return true; - } - - /** - * Transition finite state machine instance to new state. - */ - protected async _transition(event: E): Promise { - const fromState = this._state; - const toState = this._stateRecord[fromState]?.[event] ?? this._stateRecord._all?.[event]; - - this._logger.logMethodArgs?.('_transition', {fromState, event, toState}); - - if (toState == null) { - this._logger.incident?.( - 'transition', - 'invalid_target_state', - 'Defined target state for this event not found in state config', - { - fromState, - event, - }, - ); - return; - } - - const eventDetail: StateEventDetail = {from: fromState, event, to: toState}; - - if (await this._shouldTransition(eventDetail) !== true) return; - - this._notify(toState); - - this._transitioned(eventDetail); - } - - /** - * Execute all actions for current state. - */ - protected async _transitioned(eventDetail: StateEventDetail): Promise { - this._logger.logMethodArgs?.('_transitioned', eventDetail); - - await this._$execAction(`_on_${eventDetail.event}`, eventDetail); - - if (eventDetail.from !== eventDetail.to) { - await this._$execAction(`_on_state_exit`, eventDetail); - await this._$execAction(`_on_${eventDetail.from}_exit`, eventDetail); - await this._$execAction(`_on_state_enter`, eventDetail); - await this._$execAction(`_on_${eventDetail.to}_enter`, eventDetail); - } - - if (`_on_${eventDetail.from}_${eventDetail.event}` in this) { - this._$execAction(`_on_${eventDetail.from}_${eventDetail.event}`, eventDetail); - } - else { - this._$execAction(`_on_all_${eventDetail.event}`, eventDetail); - } - } - - /** - * Execute action name if defined in _actionRecord. - */ - protected _$execAction(name: ActionName, eventDetail: StateEventDetail): MaybePromise { - const actionFn = this._actionRecord[name]; - if (typeof actionFn === 'function') { - this._logger.logMethodArgs?.('_$execAction', name); - return this._actionRecord[name]?.call(this, eventDetail); - } - } - - /** - * Reset machine to initial state. - */ - protected _reset(): void { - this._$data = this._initialState; - } -} diff --git a/core/fsm2/src/fsm.ts b/core/fsm2/src/fsm.ts deleted file mode 100644 index 924301eea..000000000 --- a/core/fsm2/src/fsm.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {FiniteStateMachineBase} from './base.js'; - -/** - * Finite State Machine Base Class - */ -export abstract class FiniteStateMachine extends FiniteStateMachineBase { - /** - * Current state. - */ - get state(): S { - return super._state; - } - - /** - * Transition finite state machine instance to new state. - */ - transition(event: E): void { - super._transition(event); - } -} diff --git a/core/fsm2/src/index.ts b/core/fsm2/src/index.ts deleted file mode 100644 index acd2f206b..000000000 --- a/core/fsm2/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './base.js'; -export * from './fsm.js'; -export * from './type.js'; diff --git a/core/fsm2/src/type.ts b/core/fsm2/src/type.ts deleted file mode 100644 index 577f47d61..000000000 --- a/core/fsm2/src/type.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type {MaybePromise} from '@alwatr/type'; - -export interface StateEventDetail { - from: S; - event: E; - to: S; -} - -export type StateRecord = Partial>>>; - -export type Action = (eventDetail?: StateEventDetail) => MaybePromise; - -export type ActionName = - | `_on_${E}` - | `_on_state_exit` - | `_on_state_enter` - | `_on_${S}_exit` - | `_on_${S}_enter` - | `_on_${S}_${E}` - | `_on_all_${E}`; - -export type ActionRecord = Partial, Action>>; diff --git a/core/fsm2/tsconfig.json b/core/fsm2/tsconfig.json deleted file mode 100644 index c66ef9d24..000000000 --- a/core/fsm2/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../type"}, - {"path": "../signal2"} - ] -} diff --git a/core/i18n/CHANGELOG.md b/core/i18n/CHANGELOG.md deleted file mode 100644 index 2fc036a60..000000000 --- a/core/i18n/CHANGELOG.md +++ /dev/null @@ -1,266 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/i18n@1.1.1...@alwatr/i18n@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/i18n - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/i18n@1.1.0...@alwatr/i18n@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/i18n - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **i18n:** date method for convert date to active locale ([8b51a97](https://github.com/AliMD/alwatr/commit/8b51a97c780ffd3ed653124f64c0752af779f41c)) - -### Performance Improvements - -* **i18n:** use toLocaleDateString for convert date ([f1efcec](https://github.com/AliMD/alwatr/commit/f1efcecb2480e310d289333d840a0dd27fa3881d)) - -# 0.30.0 (2023-03-06) - -### Features - -* **i18n:** l18eReadyPromise ([85c7570](https://github.com/AliMD/alwatr/commit/85c7570d71c3d5b9ec87b0e357ecf41f47f96227)) -* **i18n:** make number with fixed decimal ([86e60ec](https://github.com/AliMD/alwatr/commit/86e60ec4c89b8bd485bd32674df286885366ee1b)) -* **i18n:** optional number args ([b571385](https://github.com/AliMD/alwatr/commit/b5713853a035e78b06bd4b97cb703e74de0e86ce)) -* **i18n:** work background without delay ([2876d00](https://github.com/AliMD/alwatr/commit/2876d009a96e586544fa00798ec35574209ae2a9)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **i18n:** prevent duplicate loader ([711cb56](https://github.com/AliMD/alwatr/commit/711cb5698a4b8887b684be79808b30a40f8e9e8a)) -* **i18n:** review and docs ([8574523](https://github.com/AliMD/alwatr/commit/85745235085e6957ab87a9c4e7fb836e73d649f6)) - -### Features - -* **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) - -# 0.28.0 (2023-01-20) - -# 0.27.0 (2022-12-29) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -* improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **i18n:** date method for convert date to active locale ([8b51a97](https://github.com/AliMD/alwatr/commit/8b51a97c780ffd3ed653124f64c0752af779f41c)) - -### Performance Improvements - -- **i18n:** use toLocaleDateString for convert date ([f1efcec](https://github.com/AliMD/alwatr/commit/f1efcecb2480e310d289333d840a0dd27fa3881d)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Features - -- **i18n:** l18eReadyPromise ([85c7570](https://github.com/AliMD/alwatr/commit/85c7570d71c3d5b9ec87b0e357ecf41f47f96227)) -- **i18n:** make number with fixed decimal ([86e60ec](https://github.com/AliMD/alwatr/commit/86e60ec4c89b8bd485bd32674df286885366ee1b)) -- **i18n:** optional number args ([b571385](https://github.com/AliMD/alwatr/commit/b5713853a035e78b06bd4b97cb703e74de0e86ce)) -- **i18n:** work background without delay ([2876d00](https://github.com/AliMD/alwatr/commit/2876d009a96e586544fa00798ec35574209ae2a9)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **i18n:** prevent duplicate loader ([711cb56](https://github.com/AliMD/alwatr/commit/711cb5698a4b8887b684be79808b30a40f8e9e8a)) -- **i18n:** review and docs ([8574523](https://github.com/AliMD/alwatr/commit/85745235085e6957ab87a9c4e7fb836e73d649f6)) - -### Features - -- **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -- improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- **i18n:** setLocal type ([d801958](https://github.com/AliMD/alwatr/commit/d801958bcc130e93677a1efe2c0c2c6dc420b700)) - -### Features - -- **i18n:** improve i18n types ([cf7d1cb](https://github.com/AliMD/alwatr/commit/cf7d1cb863ac039ec42fadeeb40ac371cfe936c5)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -### Bug Fixes - -- **i18n:** compatible with new fetch api ([b06a6a5](https://github.com/AliMD/alwatr/commit/b06a6a5958a4be8d84b74187f1c145f70370c06b)) - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- **i18n:** load resources issue ([19b9e39](https://github.com/AliMD/alwatr/commit/19b9e39d5a415e60901c117be3f8f82d09ef8444)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -### Bug Fixes - -- **i18n:** access signal issue ([097b354](https://github.com/AliMD/alwatr/commit/097b354da71b5fb4ce1e15f5cbc4accbe12bb6e1)) - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.6.1](https://github.com/AliMD/alwatr/compare/v0.6.0...v0.6.1) (2022-03-12) - -### Bug Fixes - -- **i18n:** package name in readme! ([5325e7f](https://github.com/AliMD/alwatr/commit/5325e7ff5f2b83862221544a4bcd931ed8b9f12f)) - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Bug Fixes - -- **i18n:** build issue [#75](https://github.com/AliMD/alwatr/issues/75) ([fe7a108](https://github.com/AliMD/alwatr/commit/fe7a108904176e63b8aa7e388d95ee8a90c6b71f)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -### Features - -- **i18n:** implement core methods ([6449bb4](https://github.com/AliMD/alwatr/commit/6449bb42837335c2e2e5b4a75e98139528e2e7da)) -- **i18n:** implement initialI18n ([87da5e4](https://github.com/AliMD/alwatr/commit/87da5e46943ba12a8067fcac06c1dcced1e6fb92)) -- **i18n:** localize method ([544edfd](https://github.com/AliMD/alwatr/commit/544edfdd1bc52befab6afe4cbfb62ce1638aff2d)) -- **i18n:** start new package for i18n/l10n ([88a6c28](https://github.com/AliMD/alwatr/commit/88a6c28ad038ed02ca45128378e669f6d9c6949d)) diff --git a/core/i18n/README.md b/core/i18n/README.md deleted file mode 100644 index 4bef30db6..000000000 --- a/core/i18n/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Internationalization - `@alwatr/i18n` - -Elegant powerful translation module (i18n/l10n) with dynamic json storage written in tiny TypeScript, ES module. diff --git a/core/i18n/package.json b/core/i18n/package.json deleted file mode 100644 index 4a994637b..000000000 --- a/core/i18n/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@alwatr/i18n", - "version": "1.1.2", - "description": "Elegant powerful translation module (i18n/l10n) with dynamic json storage written in tiny TypeScript, ES module.", - "keywords": [ - "i18n", - "internationalization", - "l10n", - "localization", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/i18n" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/i18n#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/math": "^1.1.2", - "@alwatr/signal": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/core/i18n/src/core.ts b/core/i18n/src/core.ts deleted file mode 100644 index f54c597f2..000000000 --- a/core/i18n/src/core.ts +++ /dev/null @@ -1,241 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; -import {UnicodeDigits, type UnicodeLangKeys} from '@alwatr/math'; -import {contextProvider, contextConsumer, ListenerSpec} from '@alwatr/signal'; - -import type {L18eContext, LocaleContext, MaybePromise} from '@alwatr/type'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/i18n', - version: _ALWATR_VERSION_, -}); - -const loadingStr = '…' as const; - -export const logger = createLogger('alwatr/i18n'); - -/** - * Locale context provider. - */ -export const localeContextProvider = contextProvider.bind('locale_context'); - -/** - * Locale context consumer. - */ -export const localeContextConsumer = contextConsumer.bind(localeContextProvider.id); - -/** - * LocalizationResource (L18e) context provider. - */ -export const l18eContextProvider = contextProvider.bind('localization_resource_context'); - -/** - * LocalizationResource (L18e) context consumer. - */ -export const l18eContextConsumer = contextConsumer.bind(l18eContextProvider.id); - -/** - * Promise resolved after LocalizationResource context ready. - */ -export const l18eReadyPromise = l18eContextConsumer.untilChange().then(()=>{ - logger.logMethod?.('readyPromise'); -}); - -/** - * Common useful locales. - */ -export const commonLocale = { - en: { - code: 'en-US', - language: 'en', - direction: 'ltr', - }, - fa: { - code: 'fa-IR', - language: 'fa', - direction: 'rtl', - }, - ar: { - code: 'ar-IQ', - language: 'ar', - direction: 'rtl', - }, -} as const; - -let activeLocaleContext: LocaleContext | null = null; -let activeNumberFormatter: Intl.NumberFormat | null = null; -let activeL18eContext: L18eContext | null = null; -let activeUnicodeDigits: UnicodeDigits | null = null; - -/** - * Update activeLocaleContext and activeNumberFormatter. - */ -localeContextConsumer.subscribe( - (locale) => { - activeLocaleContext = locale; - activeNumberFormatter = new Intl.NumberFormat(locale.code); - activeUnicodeDigits = new UnicodeDigits(locale.language as UnicodeLangKeys); - - // Update root meta in browser - if (typeof document !== 'undefined') { - document.documentElement.setAttribute('lang', locale.code); - document.documentElement.setAttribute('dir', locale.direction); - } - }, - {priority: true, receivePrevious: 'NextCycle'}, -); - -/** - * Update activeL18eContext. - */ -l18eContextConsumer.subscribe( - (l18eContext) => { - activeL18eContext = l18eContext; - }, - {priority: true, receivePrevious: 'NextCycle'}, -); - -/** - * Set global locale in the application. - * - * alias for localeProvider.setValue(localeObject) - * - * Example: - * - * ```ts - * setLocale(); - * ``` - */ -export const setLocale = (locale?: LocaleContext): void => { - if (locale == null) { - const lang = document.documentElement.lang; - locale = Object.values(commonLocale).find((l) => l.code === lang); - - if (locale == null) { - logger.error('setLocale', 'document_lang_not_supported', {lang}); - locale = commonLocale.fa; - } - } - - logger.logMethodArgs?.('setLocale', locale); - if (activeLocaleContext?.code !== locale.code) { - localeContextProvider.setValue(locale, {debounce: 'No'}); - } -}; - -let _l18eLoaderListener: ListenerSpec | null = null; - -/** - * Set loader function for provide l18e (LocalizationResource). - * - * Example: - * - * ```ts - * setL18eLoader((locale) => { - * return import(`/l18e/${locale.code}.js`); - * }) - * ``` - */ -export const setL18eLoader = (l18eLoader: (locale: LocaleContext) => MaybePromise): void => { - logger.logMethod?.('setL18eLoader'); - - if (_l18eLoaderListener !== null) { - localeContextConsumer.unsubscribe(_l18eLoaderListener); - logger.accident( - 'setL18eLoader', - 'l18e_loader_exist', - 'Multi l18e loader register, the previous one was removed to avoid errors.', - ); - } - - _l18eLoaderListener = localeContextConsumer.subscribe(async (locale) => { - logger.logMethodArgs?.('l18eLoader', locale); - - if (activeL18eContext?.meta.code === locale.code) { - logger.incident?.('l18eLoader', 'load_skipped', 'Request l18e (LocalizationResource) is same as active l18n', { - request: locale.code, - active: activeL18eContext.meta.code, - }); - return; - } - - if (l18eContextProvider.getValue()) { - l18eContextProvider.expire(); - activeL18eContext = null; - } - - try { - const l18e = await l18eLoader(locale); - l18eContextProvider.setValue(l18e, {debounce: 'No'}); - } - catch (err) { - logger.error('l18eLoader', 'loader_function_error', err); - } - }, {receivePrevious: 'NextCycle'}); -}; - -/** - * - * Get message by key from the l18e (LocalizationResource) Context. - * - * return `i18nOptions.loadingStr` if the l18e is not yet loaded. - * - * return "{key}" if the key not defined in the l18e. - * - * return null if the key is null or undefined (for optional input). - * - * Example: - * - * ```ts - * message('hello_world'); // Hello world! - * ``` - */ -export function message(key: string): string; -export function message(key?: null): undefined; -export function message(key?: string | null): string | undefined -export function message(key?: string | null): string | undefined { - if (key == null) return; - - key = key.trim(); - if (key === '') return ''; - - if (activeL18eContext == null) return loadingStr; - - const msg = activeL18eContext.data[key]; - if (msg == null) { - logger.accident('message', 'l10n_key_not_found', 'Key not defined in the localization resource', { - key, - locale: activeL18eContext?.meta.code, - }); - return `{${key}}`; - } - - return msg; -} - -/** - * Format number to active locale string unicode and digital group. - */ -export const number = (number?: number | null, decimal = 2): string => { - if (number == null) return loadingStr; - if (activeNumberFormatter === null) return String(number); - decimal = Math.pow(10, decimal); - number = Math.round(number * decimal) / decimal; - return activeNumberFormatter.format(number); -}; - -/** - * Replace all number in string to active locale number unicode. - */ -export const replaceNumber = (str: string): string => { - if (activeUnicodeDigits === null) return str; - return activeUnicodeDigits.translate(str); -}; - -/** - * Format date to active locale string. - */ -export const date = (date: number | Date, options?: Intl.DateTimeFormatOptions): string => { - if (activeLocaleContext === null) return loadingStr; - if (typeof date === 'number') date = new Date(date); - return date.toLocaleDateString(activeLocaleContext.code, options); -}; diff --git a/core/i18n/src/index.ts b/core/i18n/src/index.ts deleted file mode 100644 index f9b6f92db..000000000 --- a/core/i18n/src/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export { - setLocale, - setL18eLoader, - message, - number, - date, - replaceNumber, - localeContextConsumer, - l18eContextConsumer, - commonLocale, - l18eReadyPromise, -} from './core.js'; diff --git a/core/i18n/tsconfig.json b/core/i18n/tsconfig.json deleted file mode 100644 index 1777dad81..000000000 --- a/core/i18n/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../type"}, - {"path": "../logger"}, - {"path": "../math"}, - {"path": "../signal"} - ] -} diff --git a/core/i18n2/CHANGELOG.md b/core/i18n2/CHANGELOG.md deleted file mode 100644 index de905495d..000000000 --- a/core/i18n2/CHANGELOG.md +++ /dev/null @@ -1,214 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/i18n2 - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **i18n2:** return '' if key not exists ([2e68d1a](https://github.com/AliMD/alwatr/commit/2e68d1a082fb837b04fc8fe450626b507b0f2463)) -- **i18n2:** return loadingStr if resource not eixsts ([aff42e1](https://github.com/AliMD/alwatr/commit/aff42e18ddc61949f20cf13475520658ac1a5eb1)) -- **i18n2:** some issues & export an instacne ([b5874f3](https://github.com/AliMD/alwatr/commit/b5874f35051927815070a00e86c585f0e3dd291e)) - -### Features - -- **i18n2:** add `i18n2` class base ([4783d6b](https://github.com/AliMD/alwatr/commit/4783d6b7410e452a3458d72dc5ebaead62d08b2f)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **i18n:** date method for convert date to active locale ([8b51a97](https://github.com/AliMD/alwatr/commit/8b51a97c780ffd3ed653124f64c0752af779f41c)) - -### Performance Improvements - -- **i18n:** use toLocaleDateString for convert date ([f1efcec](https://github.com/AliMD/alwatr/commit/f1efcecb2480e310d289333d840a0dd27fa3881d)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Features - -- **i18n:** l18eReadyPromise ([85c7570](https://github.com/AliMD/alwatr/commit/85c7570d71c3d5b9ec87b0e357ecf41f47f96227)) -- **i18n:** make number with fixed decimal ([86e60ec](https://github.com/AliMD/alwatr/commit/86e60ec4c89b8bd485bd32674df286885366ee1b)) -- **i18n:** optional number args ([b571385](https://github.com/AliMD/alwatr/commit/b5713853a035e78b06bd4b97cb703e74de0e86ce)) -- **i18n:** work background without delay ([2876d00](https://github.com/AliMD/alwatr/commit/2876d009a96e586544fa00798ec35574209ae2a9)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **i18n:** prevent duplicate loader ([711cb56](https://github.com/AliMD/alwatr/commit/711cb5698a4b8887b684be79808b30a40f8e9e8a)) -- **i18n:** review and docs ([8574523](https://github.com/AliMD/alwatr/commit/85745235085e6957ab87a9c4e7fb836e73d649f6)) - -### Features - -- **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -- improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- **i18n:** setLocal type ([d801958](https://github.com/AliMD/alwatr/commit/d801958bcc130e93677a1efe2c0c2c6dc420b700)) - -### Features - -- **i18n:** improve i18n types ([cf7d1cb](https://github.com/AliMD/alwatr/commit/cf7d1cb863ac039ec42fadeeb40ac371cfe936c5)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -### Bug Fixes - -- **i18n:** compatible with new fetch api ([b06a6a5](https://github.com/AliMD/alwatr/commit/b06a6a5958a4be8d84b74187f1c145f70370c06b)) - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- **i18n:** load resources issue ([19b9e39](https://github.com/AliMD/alwatr/commit/19b9e39d5a415e60901c117be3f8f82d09ef8444)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -### Bug Fixes - -- **i18n:** access signal issue ([097b354](https://github.com/AliMD/alwatr/commit/097b354da71b5fb4ce1e15f5cbc4accbe12bb6e1)) - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/i18n - -## [0.6.1](https://github.com/AliMD/alwatr/compare/v0.6.0...v0.6.1) (2022-03-12) - -### Bug Fixes - -- **i18n:** package name in readme! ([5325e7f](https://github.com/AliMD/alwatr/commit/5325e7ff5f2b83862221544a4bcd931ed8b9f12f)) - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -**Note:** Version bump only for package @alwatr/i18n - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Bug Fixes - -- **i18n:** build issue [#75](https://github.com/AliMD/alwatr/issues/75) ([fe7a108](https://github.com/AliMD/alwatr/commit/fe7a108904176e63b8aa7e388d95ee8a90c6b71f)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -### Features - -- **i18n:** implement core methods ([6449bb4](https://github.com/AliMD/alwatr/commit/6449bb42837335c2e2e5b4a75e98139528e2e7da)) -- **i18n:** implement initialI18n ([87da5e4](https://github.com/AliMD/alwatr/commit/87da5e46943ba12a8067fcac06c1dcced1e6fb92)) -- **i18n:** localize method ([544edfd](https://github.com/AliMD/alwatr/commit/544edfdd1bc52befab6afe4cbfb62ce1638aff2d)) -- **i18n:** start new package for i18n/l10n ([88a6c28](https://github.com/AliMD/alwatr/commit/88a6c28ad038ed02ca45128378e669f6d9c6949d)) diff --git a/core/i18n2/README.md b/core/i18n2/README.md deleted file mode 100644 index f528cfb98..000000000 --- a/core/i18n2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Internationalization - `@alwatr/i18n2` - -Elegant powerful translation module (i18n/l10n) with dynamic json storage written in tiny TypeScript, ES module. diff --git a/core/i18n2/package.json b/core/i18n2/package.json deleted file mode 100644 index 2895447e3..000000000 --- a/core/i18n2/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@alwatr/i18n2", - "version": "1.0.0", - "description": "Elegant powerful translation module (i18n/l10n) with dynamic json storage written in tiny TypeScript, ES module.", - "keywords": [ - "i18n", - "internationalization", - "l10n", - "localization", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "private": "true", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/i18n" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/i18n#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.0.0", - "@alwatr/math": "^1.0.0", - "@alwatr/signal2": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/core/i18n2/src/index.ts b/core/i18n2/src/index.ts deleted file mode 100644 index fc0d0a8cf..000000000 --- a/core/i18n2/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import {AlwatrL10n} from './l10n.js'; -export type * from './type.js'; - -export const l10n = new AlwatrL10n(); diff --git a/core/i18n2/src/l10n.ts b/core/i18n2/src/l10n.ts deleted file mode 100644 index b213710d9..000000000 --- a/core/i18n2/src/l10n.ts +++ /dev/null @@ -1,258 +0,0 @@ -import {globalAlwatr} from '@alwatr/logger'; -import {UnicodeDigits, UnicodeLangKeys} from '@alwatr/math'; -import {AlwatrObservable} from '@alwatr/signal2/observable.js'; - -import {localeList} from './locale-list.js'; - -import type {L10nResource, L10nResourceLoader, Locale} from './type.js'; -import type {LocaleCode} from '@alwatr/type'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/i18n', - version: _ALWATR_VERSION_, -}); - -export class AlwatrL10n extends AlwatrObservable { - protected _locale?: Locale; - protected _resource?: L10nResource; - protected _numberFormatter?: Intl.NumberFormat; - protected _unicodeDigits?: UnicodeDigits; - protected _resourceLoader?: L10nResourceLoader; - - static _loadingStr = '…' as const; - // Define time units and their corresponding seconds - static _timeUnits = [ - {label: 'year', seconds: 31536000}, - {label: 'month', seconds: 2592000}, - {label: 'week', seconds: 604800}, - {label: 'day', seconds: 86400}, - {label: 'hour', seconds: 3600}, - {label: 'minute', seconds: 60}, - {label: 'second', seconds: 1}, - ] as const; - - constructor() { - super({name: 'alwatr_localization'}); - } - - get locale(): Locale | undefined { - return this._locale; - } - - get isResourceReady(): boolean { - return this._resource !== undefined; - } - - protected async _localeChanged(): Promise { - const locale = this._locale!; - this._logger.logMethodArgs?.('_localeChanged', locale.code); - - this._numberFormatter = new Intl.NumberFormat(locale.code); - this._unicodeDigits = new UnicodeDigits(locale.language as UnicodeLangKeys); - - await this._loadResource(); - - this._notify(locale.code); - - // Update root meta in browser - globalThis.document?.documentElement.setAttribute('lang', locale.code); - globalThis.document?.documentElement.setAttribute('dir', locale.direction); - } - - protected async _loadResource(): Promise { - const locale = this._locale!; - this._logger.logMethodArgs?.('_loadResource', locale.code); - - if (this._resourceLoader === undefined) { - this._logger.error('_loadResource', 'resource_loader_not_defined'); - return; - } - - if (this._resource?.meta.code === locale.code) { - this._logger.incident?.( - '_loadResource', - 'load_skipped', - 'Request l18e (LocalizationResource) is same as active l18n', - { - request: locale.code, - active: this._resource.meta.code, - }, - ); - return; - } - - try { - const resource = await this._resourceLoader(locale); - if (resource.meta?.code !== locale.code) { - this._logger.error( - '_loadResource', - 'invalid_localization', - { - request: locale.code, - active: resource.meta.code, - }, - ); - } - else { - this._resource = resource; - } - } - catch (err) { - this._logger.error('_loadResource', 'loader_function_error', err); - } - } - - /** - * - * Get message by key from the l18e (LocalizationResource) Context. - * - * return `i18nOptions.loadingStr` if the l18e is not yet loaded. - * - * return "{key}" if the key not defined in the l18e. - * - * return '' if the key is null or undefined (for optional input). - * - * Example: - * - * ```ts - * message('hello_world'); // Hello world! - * ``` - */ - message(key?: string | null): string { - this._logger.logMethodArgs?.('message', key); - if (!key) return ''; - if (this._resource === undefined) return (this.constructor as typeof AlwatrL10n)._loadingStr; - - const msg = this._resource.data[key]; - if (msg === undefined) { - this._logger.accident('message', 'l10n_key_not_found', 'Key not defined in the localization resource', { - key, - locale: this._resource.meta.code, - }); - return `{${key}}`; - } - // else - return msg; - } - - /** - * Format number to active locale string unicode and digital group. - */ - number(number?: number | null, decimal = 2): string { - if (number == null) return ''; - if (this._numberFormatter === undefined) return (this.constructor as typeof AlwatrL10n)._loadingStr; - decimal = Math.pow(10, decimal); - number = Math.round(number * decimal) / decimal; - return this._numberFormatter.format(number); - } - - /** - * Replace all number in string to active locale number unicode. - */ - replaceNumber(str: string): string { - this._logger.logMethodArgs?.('replaceNumber', str); - if (this._unicodeDigits === undefined) return (this.constructor as typeof AlwatrL10n)._loadingStr; - return this._unicodeDigits.translate(str); - } - - /** - * Format date to active locale string. - */ - time(date: number | Date, options?: Intl.DateTimeFormatOptions): string { - this._logger.logMethodArgs?.('time', {date, options}); - if (this._locale === undefined) return (this.constructor as typeof AlwatrL10n)._loadingStr; - if (typeof date === 'number') date = new Date(date); - return date.toLocaleDateString(this._locale.code, options); - } - - relativeTime( - date: number | Date, - from: number | Date = Date.now(), - options: Intl.RelativeTimeFormatOptions = {numeric: 'auto', style: 'narrow'}, - ): string { - this._logger.logMethodArgs?.('relativeTime', {date, from, options}); - - if (this._locale === undefined) return (this.constructor as typeof AlwatrL10n)._loadingStr; - - const rtf = new Intl.RelativeTimeFormat(this._locale.code, options); - - if (typeof date !== 'number') date = date.getTime(); - if (typeof from !== 'number') from = from.getTime(); - const diffSec = (from - date) / 1000; - - // Find the appropriate unit for the time difference - for (const unit of (this.constructor as typeof AlwatrL10n)._timeUnits) { - const interval = Math.floor(Math.abs(diffSec / unit.seconds)); - if (interval >= 1) { - return rtf.format(diffSec > 0 ? interval : -interval, unit.label); - } - } - - return rtf.format(0, 'second'); - } - - /** - * Set global locale in the application. - * - * alias for localeProvider.setValue(localeObject) - * - * Example: - * - * ```ts - * setLocale(); - * ``` - */ - setLocale(locale: Locale | keyof typeof localeList | 'auto'): void { - this._logger.logMethodArgs?.('setLocale', locale); - - if (locale === 'auto') { - this.setLocale(this._findBestLocale()); - return; - } - // else - - if (typeof locale === 'string') { - locale = localeList[locale]; - } - - if (locale?.code === undefined) { - this._logger.error('setLocale', 'locale_not_supported', {locale}); - this.setLocale(localeList.en); - return; - } - - if (this._locale?.code !== locale.code) { - this._locale = locale; - this._localeChanged(); - } - } - - protected _findBestLocale(): Locale { - const lang = globalThis.document?.documentElement.lang; - const locale = Object.values(localeList).find((l) => l.code === lang); - - if (locale == null) { - this._logger.error('_findBestLocale', 'document_lang_not_supported', {lang}); - } - - return locale ?? localeList.en; - } - - setResourceLoader(resourceLoader: L10nResourceLoader): void { - this._logger.logMethod?.('setResourceLoader'); - - if (this._resourceLoader !== undefined) { - this._logger.accident( - 'setResourceLoader', - 'resource_loader_exist', - 'Multi l10n resource loader register, the previous one was removed to avoid errors.', - ); - } - - this._resourceLoader = resourceLoader; - } - - untilChange(): Promise { - return this._untilNewNotify(); - } -} diff --git a/core/i18n2/src/locale-list.ts b/core/i18n2/src/locale-list.ts deleted file mode 100644 index 248e8d80b..000000000 --- a/core/i18n2/src/locale-list.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Common useful locales. - */ -export const localeList = { - en: { - code: 'en-US', - language: 'en', - direction: 'ltr', - }, - fa: { - code: 'fa-IR', - language: 'fa', - direction: 'rtl', - }, - ar: { - code: 'ar-IQ', - language: 'ar', - direction: 'rtl', - }, -} as const; diff --git a/core/i18n2/src/type.ts b/core/i18n2/src/type.ts deleted file mode 100644 index 94e898077..000000000 --- a/core/i18n2/src/type.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type {AlwatrServiceResponseSuccessWithMeta, MaybePromise} from '@alwatr/type'; - -export type LocaleCode = `${Lowercase}-${Uppercase}`; - -export type L10nResource = AlwatrServiceResponseSuccessWithMeta, { - code: LocaleCode; - rev: number; -}>; - -export interface Locale { - /** - * fa-IR, en-US, ... - */ - code: LocaleCode; - - /** - * fa, en, ... - */ - language: Lowercase; - - /** - * ltr, rtl - */ - direction: 'rtl' | 'ltr'; -} - -export type L10nResourceLoader = (locale: Locale) => MaybePromise diff --git a/core/i18n2/tsconfig.json b/core/i18n2/tsconfig.json deleted file mode 100644 index 4083e8983..000000000 --- a/core/i18n2/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../type"}, - {"path": "../logger"}, - {"path": "../math"}, - {"path": "../signal2"} - ] -} diff --git a/core/logger/CHANGELOG.md b/core/logger/CHANGELOG.md deleted file mode 100644 index 678fb7ccb..000000000 --- a/core/logger/CHANGELOG.md +++ /dev/null @@ -1,308 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/logger@1.1.1...@alwatr/logger@1.1.2) (2023-09-12) - -### Bug Fixes - -* **logger:** change localStorage debug key to `alwatrDebug` ([66542ea](https://github.com/AliMD/alwatr/commit/66542ea22a9a515db4a15dc966624b3029f517ed)) by @AliMD - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/logger@1.1.0...@alwatr/logger@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/logger - -# 1.1.0 (2023-09-12) - -### Features - -* **logger:** add logModule ([2e37bef](https://github.com/AliMD/alwatr/commit/2e37befd5f66094c5a521424e2a9d60796384f88)) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **logger:** logMethod args type ([66338b7](https://github.com/AliMD/alwatr/commit/66338b7ba1d4b15af78f9f604f7be0a7e483413d)) -* **logger:** logMethod args type ([1983b3d](https://github.com/AliMD/alwatr/commit/1983b3d2fe260226ca2660e33b9bd924facdf776)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **logger:** add `duration time` to logger time label ([ef188c4](https://github.com/AliMD/alwatr/commit/ef188c41a02789e1b35ab424bab24a393a03a3b0)) -* **logger:** add `time` & `timeEnd` ([0bd4ec5](https://github.com/AliMD/alwatr/commit/0bd4ec5dbd185b17cfb8656a84a782e848ade138)) -* **logger:** optional devMode per package ([cc1eb87](https://github.com/AliMD/alwatr/commit/cc1eb879832807d55ad4cf268a54b2d5e4346fff)) - -# 0.30.0 (2023-03-06) - -### Features - -* **logger:** export isBrowser ([5b5be8b](https://github.com/AliMD/alwatr/commit/5b5be8b2312ca67f186d1614506423f1fdb90877)) - -# 0.29.0 (2023-02-10) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **logger:** _ALWATR_VERSION_ ([9cf8f20](https://github.com/AliMD/alwatr/commit/9cf8f208e8adbfa2e2c622a8465453d5554cbd37)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* **logger:** version ([2295fee](https://github.com/AliMD/alwatr/commit/2295fee74e8eebd9db399129de31f2b0d6d6b168)) - -### Features - -* **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -* **logger:** add root version ([2ac01c1](https://github.com/AliMD/alwatr/commit/2ac01c1d12323a6c8591b3dd4826d08a55647dc1)) -* **logger:** move incident to deployment mode ([4ee8dac](https://github.com/AliMD/alwatr/commit/4ee8dac5c54ce8a897382d3d4fb5bb852d24cf24)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/logger - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/logger - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **logger:** logMethod args type ([66338b7](https://github.com/AliMD/alwatr/commit/66338b7ba1d4b15af78f9f604f7be0a7e483413d)) -- **logger:** logMethod args type ([1983b3d](https://github.com/AliMD/alwatr/commit/1983b3d2fe260226ca2660e33b9bd924facdf776)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **logger:** add `duration time` to logger time label ([ef188c4](https://github.com/AliMD/alwatr/commit/ef188c41a02789e1b35ab424bab24a393a03a3b0)) -- **logger:** add `time` & `timeEnd` ([0bd4ec5](https://github.com/AliMD/alwatr/commit/0bd4ec5dbd185b17cfb8656a84a782e848ade138)) -- **logger:** optional devMode per package ([cc1eb87](https://github.com/AliMD/alwatr/commit/cc1eb879832807d55ad4cf268a54b2d5e4346fff)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Features - -- **logger:** export isBrowser ([5b5be8b](https://github.com/AliMD/alwatr/commit/5b5be8b2312ca67f186d1614506423f1fdb90877)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -**Note:** Version bump only for package @alwatr/logger - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **logger:** _ALWATR_VERSION_ ([9cf8f20](https://github.com/AliMD/alwatr/commit/9cf8f208e8adbfa2e2c622a8465453d5554cbd37)) - -### Features - -- **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **logger:** version ([2295fee](https://github.com/AliMD/alwatr/commit/2295fee74e8eebd9db399129de31f2b0d6d6b168)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- **logger:** add root version ([2ac01c1](https://github.com/AliMD/alwatr/commit/2ac01c1d12323a6c8591b3dd4826d08a55647dc1)) -- **logger:** move incident to deployment mode ([4ee8dac](https://github.com/AliMD/alwatr/commit/4ee8dac5c54ce8a897382d3d4fb5bb852d24cf24)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -### Features - -- **logger:** log incident in production mode ([c9b6c56](https://github.com/AliMD/alwatr/commit/c9b6c56182750444b1cced3343b02eea6a9f24c5)) - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- **logger:** optimize for browserify builds ([7afdc1c](https://github.com/AliMD/alwatr/commit/7afdc1cb5baf9b66dedcdc251595c02a79a163b2)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/logger - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **logger:** message format in node ([0ab9153](https://github.com/AliMD/alwatr/commit/0ab9153e407cafd07af8b77b63e25c8d21b474c0)) - -### Features - -- **logger:** better log in browser and node ([1a35ac4](https://github.com/AliMD/alwatr/commit/1a35ac4bbb9aae4280ea99b8383459cf44de0baa)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/logger - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/logger - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/logger - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Bug Fixes - -- **`logger`:** `accident` sould `console.warn` ([c210c9f](https://github.com/AliMD/alwatr/commit/c210c9f6a864692848ea0c89d6ffbdb19167732a)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/logger - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/logger - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/logger - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/logger - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- **logger:** refactor behavior of force ([7d9307b](https://github.com/AliMD/alwatr/commit/7d9307bb78523f3dae17b3bd80fa2fb47c90975f)) - -### Features - -- **logger:** compatible with node.js ([7ee8b6d](https://github.com/AliMD/alwatr/commit/7ee8b6de3143e39c300345dec6864c9c56a4aae7)) -- **logger:** node coloring support ([2b4aab6](https://github.com/AliMD/alwatr/commit/2b4aab655bc0707761587a7439de98bbd4ad0e08)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/logger - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/logger - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -**Note:** Version bump only for package @alwatr/logger - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -**Note:** Version bump only for package @alwatr/logger - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -### Features - -- **logger:** add debug and improve documents ([8f83d29](https://github.com/AliMD/alwatr/commit/8f83d2956e521f016fe530322f657c343f1a0b80)) - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/logger - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -### Performance Improvements - -- **logger:** refactor making logger object ([bc38018](https://github.com/AliMD/alwatr/commit/bc38018758540130df2f46c44521aea0a867bbe8)) - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Bug Fixes - -- **logger:** types missing ([712363d](https://github.com/AliMD/alwatr/commit/712363d3cf77a712f8c801c4dc9d06d256dfc0e6)) - -### Features - -- **logger:** add logProperty, logMethodFull ([8b0317d](https://github.com/AliMD/alwatr/commit/8b0317db88ed73604a27935a3a30cd5c31cb0804)) -- **logger:** complete refactor the logger with new API and fix show correct line number ([7efe8cf](https://github.com/AliMD/alwatr/commit/7efe8cf0f566e148406f38fdd60fa3d747c9bc51)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -**Note:** Version bump only for package @alwatr/logger - -## [0.2.1](https://github.com/AliMD/alwatr/compare/v0.2.0...v0.2.1) (2022-03-05) - -### Bug Fixes - -- **logger:** alwatrRegisteredList name ([ff59133](https://github.com/AliMD/alwatr/commit/ff5913321c4eafa1ce53fdacebf8fb4f23bfe430)) - -# [0.2.0](https://github.com/AliMD/alwatr/compare/v0.1.2...v0.2.0) (2022-03-05) - -**Note:** Version bump only for package @alwatr/logger - -## [0.1.2](https://github.com/AliMD/alwatr/compare/v0.1.1...v0.1.2) (2022-03-03) - -**Note:** Version bump only for package @alwatr/logger - -## [0.1.1](https://github.com/AliMD/alwatr/compare/v0.1.0...v0.1.1) (2022-03-03) - -### Bug Fixes - -- **packages:** add publish config to public ([9cb3710](https://github.com/AliMD/alwatr/commit/9cb37106b5a35d24d5195ff54232e5769ccc034e)) - -# 0.1.0 (2022-03-02) - -### Bug Fixes - -- **logger:** fix debug scope ([be62f14](https://github.com/AliMD/alwatr/commit/be62f142cbe3fe4d328e3fd9941ea7c2d640a23f)) -- **logger:** fix logger debug scope ([e734d21](https://github.com/AliMD/alwatr/commit/e734d218db888ecec33a03dc805b98dd75543efd)) -- tsconfig issues ([159adeb](https://github.com/AliMD/alwatr/commit/159adeb72de4626dc16f6657765605b0a2ddccb1)) - -### Features - -- **logger:** debug scope ([6e4190d](https://github.com/AliMD/alwatr/commit/6e4190dc9dafc28e3a7a481aa43622a23527993c)) -- **logger:** debug scope logger package ([1a4baeb](https://github.com/AliMD/alwatr/commit/1a4baeb7a253ba66563dbcf06079242dabb9f246)) -- **logger:** alwatr logger package ([711268e](https://github.com/AliMD/alwatr/commit/711268e17dea8ada9c901ef1e9d605b3212abd97)) -- **logger:** alwatr meta structure ([feade73](https://github.com/AliMD/alwatr/commit/feade735a6f141db77b81d7791d8872d45c8bf7e)) diff --git a/core/logger/README.md b/core/logger/README.md deleted file mode 100644 index 934aaaf0d..000000000 --- a/core/logger/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Alwatr Logger - `@alwatr/logger` - -Fancy colorful console debugger with custom scope written in tiny TypeScript, ES module. - -## Example usage - -```ts -import {createLogger} from 'https://esm.run/@alwatr/logger'; - -const logger = createLogger('demo'); - -function sayHello(name: string) { - logger.logMethodArgs?.('sayHello', {name}); -} -``` - -### Debug/Develope Mode (DEV_MODE) - -Many of the methods in the logger are no-ops when the debug mode is off in the browser. -Please remember to **reload** the window after changing the debug mode. - -```ts -window.localStorage?.setItem('alwatrDebug', '1'); -``` - -> Make sure the [log level](https://developer.chrome.com/docs/devtools/console/log/#browser) in set correctly. diff --git a/core/logger/package.json b/core/logger/package.json deleted file mode 100644 index 772c9e398..000000000 --- a/core/logger/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@alwatr/logger", - "version": "1.1.2", - "description": "Fancy colorful console debugger with custom scope written in tiny TypeScript, ES module.", - "keywords": [ - "log", - "logger", - "console", - "debug", - "typescript", - "esm", - "alwatr" - ], - "main": "logger.js", - "type": "module", - "types": "logger.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/logger" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/logger#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/type": "^1.1.1", - "tslib": "^2.6.2" - } -} diff --git a/core/logger/src/global-alwatr.ts b/core/logger/src/global-alwatr.ts deleted file mode 100644 index 5e0b8c2da..000000000 --- a/core/logger/src/global-alwatr.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type {} from '@alwatr/type/global.js'; - -if (globalThis.Alwatr == null) { - globalThis.Alwatr = { - registeredList: [], - }; -} - -try { - _ALWATR_VERSION_; -} -catch { - globalThis._ALWATR_VERSION_ = 'ERROR'; - console.warn('!! SCRIPTS LOADED OUTSIDE OF ALWATR BUILD ENVIRONMENT !!'); -} - -if (Alwatr.registeredList == null) { - Alwatr.registeredList = []; -} - -export const globalAlwatr = Alwatr; diff --git a/core/logger/src/logger.ts b/core/logger/src/logger.ts deleted file mode 100644 index b190729e3..000000000 --- a/core/logger/src/logger.ts +++ /dev/null @@ -1,126 +0,0 @@ -import {globalAlwatr} from './global-alwatr.js'; - -import type {AlwatrLogger} from './type.js'; - -export {type AlwatrLogger, globalAlwatr}; - -globalAlwatr.registeredList.push({ - name: '@alwatr/logger', - version: _ALWATR_VERSION_, -}); - -export const NODE_MODE = typeof process !== 'undefined'; -export const DEV_MODE = NODE_MODE - ? process.env.ALWATR_DEBUG === '1' - : globalThis.localStorage?.getItem('alwatrDebug') === '1'; - -/** - * Color list storage for logger. - */ -const colorList = NODE_MODE - ? ['0;36', '0;35', '0;34', '0;33', '0;32'] // red and white omitted - : [ - '#35b997', - '#f05561', - '#ee224a', - '#91c13e', - '#22af4b', - '#f0e995', - '#0fe995', - '#0f89ca', - '#08b9a5', - '#fee851', - '#ee573d', - '#f9df30', - '#1da2dc', - '#f05123', - '#ee2524', - ]; - -let _colorIndex = 0; -const _getNextColor = (): string => { - const color = colorList[_colorIndex]; - _colorIndex++; - if (_colorIndex >= colorList.length) { - _colorIndex = 0; - } - return color; -}; - -const _style = { - scope: NODE_MODE ? '\x1b[{{color}}m' : 'color: {{color}};', - reset: NODE_MODE ? '\x1b[0m' : 'color: inherit;', -}; - -const _keySection = NODE_MODE ? '%s%s%s' : '%c%s%c'; - -const _sanitizeDomain = (domain: string): string => { - domain = domain.trim(); - const first = domain.charAt(0); - if (first !== '[' && first !== '{' && first !== '<') { - domain = '[' + domain + ']'; - } - return domain; -}; - -/** - * Create a logger function for fancy console debug with custom scope. - * - * - **color** is optional and automatically select from internal fancy color list. - * - **debug** is optional and automatically detect from localStorage `ALWATR_DEBUG` item or `process.env.ALWATR_DEBUG` - * - * Example: - * - * ```ts - * import {createLogger} from 'https://esm.run/@alwatr/logger'; - * const logger = createLogger('logger/demo'); - * ``` - */ -export const createLogger = (domain: string, devMode = DEV_MODE): AlwatrLogger => { - const color = _getNextColor(); - const styleScope = _style.scope.replaceAll('{{color}}', color); - domain = _sanitizeDomain(domain); - - /** - * Required logger object, accident, error always reported even when the devMode is false. - */ - const requiredItems = { - devMode, - domain, - - accident: NODE_MODE - ? console.warn.bind(console, `${styleScope}⚠️\n%s\x1b[33m.%s() Accident \`%s\` %s!${_style.reset}`, domain) - : console.warn.bind(console, '%c%s%c.%s() Accident `%s` %s!', styleScope, domain, _style.reset), - - error: NODE_MODE - ? console.error.bind(console, `${styleScope}❌\n%s\x1b[31m.%s() Error \`%s\`${_style.reset}\n`, domain) - : console.error.bind(console, '%c%s%c.%s() Error `%s`\n', styleScope, domain, _style.reset), - } as const; - - if (!devMode) { - return requiredItems; - } - // else - return { - ...requiredItems, - - logProperty: console.debug.bind(console, _keySection + '.%s = %o;', styleScope, domain, _style.reset), - - logMethod: console.debug.bind(console, _keySection + '.%s();', styleScope, domain, _style.reset), - - logModule: console.debug.bind(console, _keySection + '/%s.js;', styleScope, domain, _style.reset), - - logMethodArgs: console.debug.bind(console, _keySection + '.%s(%o);', styleScope, domain, _style.reset), - - logMethodFull: console.debug.bind(console, _keySection + '.%s(%o) => %o', styleScope, domain, _style.reset), - - logOther: console.debug.bind(console, _keySection, styleScope, domain, _style.reset), - - incident: NODE_MODE - ? console.log.bind(console, `${styleScope}🚸\n%s${_style.reset}.%s() Incident \`%s\` %s!${_style.reset}`, domain) - : console.log.bind(console, '%c%s%c.%s() Incident `%s` %s!', styleScope, domain, 'color: orange;'), - - time: (label: string) => console.time(domain + '.' + label + ' duration time'), - timeEnd: (label: string) => console.timeEnd(domain + '.' + label + ' duration time'), - } as const; -}; diff --git a/core/logger/src/type.ts b/core/logger/src/type.ts deleted file mode 100644 index 32455e5ae..000000000 --- a/core/logger/src/type.ts +++ /dev/null @@ -1,146 +0,0 @@ -export interface AlwatrLogger { - /** - * Debug state for current scope base on localStorage `ALWATR_LOG` pattern. - */ - readonly devMode: boolean; - - /** - * Domain scope defined for this logger. - */ - readonly domain: string; - - /** - * `console.debug` property change. - * - * Example: - * - * ```ts - * logger.logProperty?.('name', 'ali'); - * ``` - */ - logProperty?(property: string, value: unknown): void; - - /** - * `console.debug` module name. - * - * Example: - * - * ```ts - * logger.logModule?.('app'); - * ``` - */ - logModule?(name: string): void; - - /** - * `console.debug` function or method calls. - * - * Example: - * - * ```ts - * function myMethod () { - * logger.logMethod?.('myMethod'); - * } - * ``` - */ - logMethod?(method: string): void; - - /** - * `console.debug` function or method calls with arguments. - * - * Example: - * - * ```ts - * function myMethod (a: number, b: number) { - * logger.logMethodArgs?.('myMethod', {a, b}); - * } - * ``` - */ - logMethodArgs?(method: string, args: unknown): void; - - /** - * `console.debug` function or method calls with arguments. - * - * Example: - * - * ```ts - * function add (a: number, b: number): number { - * const result = a + b; - * logger.logMethodFull?.('add', {a, b}, result); - * return result; - * } - * ``` - */ - logMethodFull?(method: string, args: unknown, result: unknown): void; - - /** - * `console.log` an event or expected accident. - * not warn or error just important information. - * - * Example: - * - * ```ts - * logger.incident?.('fetch', 'abort_signal', 'aborted signal received', {url: '/test.json'}); - * ``` - */ - incident?(method: string, code: string, desc: string, ...args: unknown[]): void; - - /** - * `console.warn` an unexpected accident or error that you handled like warning. - * - * Example: - * - * ```ts - * logger.accident('fetch', 'file_not_found', 'url requested return 404 not found', {url: '/test.json'}); - * ``` - */ - accident(method: string, code: string, desc: string, ...args: unknown[]): void; - - /** - * `console.error` an unexpected error. - * - * Example: - * - * ```ts - * try { - * ... - * } - * catch (err) { - * logger.error('myMethod', 'error_code', err, {a: 1, b: 2}); - * } - * ``` - */ - error(method: string, code: string, ...args: unknown[]): void; - - /** - * Simple `console.debug` with styled scope. - * - * Example: - * - * ```ts - * logger.logOther?.('foo:', 'bar', {a: 1}); - * ``` - */ - logOther?(...args: unknown[]): void; - - /** - * Simple `console.time` with scope. - * - * Example: - * - * ```ts - * logger.time?.('foo'); - * ``` - */ - time?(label: string): void; - - /** - * Simple `console.timeEnd` with scope. - * - * Example: - * - * ```ts - * logger.timeEnd?.('foo'); - * ``` - */ - timeEnd?(label: string): void; -} diff --git a/core/logger/tsconfig.json b/core/logger/tsconfig.json deleted file mode 100644 index 8cf0974a2..000000000 --- a/core/logger/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../type"} - ] -} diff --git a/core/math/CHANGELOG.md b/core/math/CHANGELOG.md deleted file mode 100644 index a95de32d0..000000000 --- a/core/math/CHANGELOG.md +++ /dev/null @@ -1,248 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/math@1.1.1...@alwatr/math@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/math - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/math@1.1.0...@alwatr/math@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/math - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Features - -* **math:** simpleHashNumber ([dffb285](https://github.com/AliMD/alwatr/commit/dffb285e11cd9652d54d2d22956fc22177d16699)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **math:** remove getClientId ([b5894d6](https://github.com/AliMD/alwatr/commit/b5894d6cf75798d35773dcc048e9dd21fa44199d)) - -### Features - -* **math:** calcDiscount ([ac7c18b](https://github.com/AliMD/alwatr/commit/ac7c18bc0f0e008b8db9fd4b69451a89e7fb069b)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -### Features - -* **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) -* **math:** clamp function ([6fe4423](https://github.com/AliMD/alwatr/commit/6fe44236fc123a32837cfb4ea278b783f2bc2e7a)) -* **math:** getDeviceUuid ([946dad3](https://github.com/AliMD/alwatr/commit/946dad3544f2741462ff239edab8b4a9ea323bd6)) -* **math:** random uuid ([738f51e](https://github.com/AliMD/alwatr/commit/738f51eb323100fafca0a5f515b48d215dae5b3c)) -* **math:** rename deviceId to clientId ([b211fd4](https://github.com/AliMD/alwatr/commit/b211fd42245d51d7109186ddb2f41574d0f0b786)) - -### Performance Improvements - -* **math:** enhance getClientId ([3187039](https://github.com/AliMD/alwatr/commit/3187039a9b87472bda16af6d4b0b71e31c17f272)) -* **math:** enhance getClientId ([af42959](https://github.com/AliMD/alwatr/commit/af429594950c7ded35af53414494dd2f6f4fe208)) -* **unicode-digits:** enhance translate ([104bdba](https://github.com/AliMD/alwatr/commit/104bdba948df11e62577f084b1e51fc4c78e0d9c)) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) - -### Features - -* **type:** add optional text on ChatPhotoMessage ([af83f5b](https://github.com/AliMD/alwatr/commit/af83f5b8604cecd3c9b0cb2375267458fd02431d)) - -# 0.27.0 (2022-12-29) - -### Features - -* **type:** define math types ([8c19f40](https://github.com/AliMD/alwatr/commit/8c19f4058d4361b7d3f4f714595e34cb6fa21109)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/math - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/math - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Features - -- **math:** simpleHashNumber ([dffb285](https://github.com/AliMD/alwatr/commit/dffb285e11cd9652d54d2d22956fc22177d16699)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **math:** remove getClientId ([b5894d6](https://github.com/AliMD/alwatr/commit/b5894d6cf75798d35773dcc048e9dd21fa44199d)) - -### Features - -- **math:** calcDiscount ([ac7c18b](https://github.com/AliMD/alwatr/commit/ac7c18bc0f0e008b8db9fd4b69451a89e7fb069b)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -### Features - -- **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) -- **math:** clamp function ([6fe4423](https://github.com/AliMD/alwatr/commit/6fe44236fc123a32837cfb4ea278b783f2bc2e7a)) -- **math:** getDeviceUuid ([946dad3](https://github.com/AliMD/alwatr/commit/946dad3544f2741462ff239edab8b4a9ea323bd6)) -- **math:** random uuid ([738f51e](https://github.com/AliMD/alwatr/commit/738f51eb323100fafca0a5f515b48d215dae5b3c)) -- **math:** rename deviceId to clientId ([b211fd4](https://github.com/AliMD/alwatr/commit/b211fd42245d51d7109186ddb2f41574d0f0b786)) - -### Performance Improvements - -- **math:** enhance getClientId ([3187039](https://github.com/AliMD/alwatr/commit/3187039a9b87472bda16af6d4b0b71e31c17f272)) -- **math:** enhance getClientId ([af42959](https://github.com/AliMD/alwatr/commit/af429594950c7ded35af53414494dd2f6f4fe208)) -- **unicode-digits:** enhance translate ([104bdba](https://github.com/AliMD/alwatr/commit/104bdba948df11e62577f084b1e51fc4c78e0d9c)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) - -### Features - -- **type:** add optional text on ChatPhotoMessage ([af83f5b](https://github.com/AliMD/alwatr/commit/af83f5b8604cecd3c9b0cb2375267458fd02431d)) -- **type:** define math types ([8c19f40](https://github.com/AliMD/alwatr/commit/8c19f4058d4361b7d3f4f714595e34cb6fa21109)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/math - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -### Bug Fixes - -- **math:** UnicodeDigits type issue ([508a9b2](https://github.com/AliMD/alwatr/commit/508a9b22a792284f7b5c54d095d6212d6277dc6b)) - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- set correct dependencies in package.json and references in tsconfig.json ([1fb05a8](https://github.com/AliMD/alwatr/commit/1fb05a80e1e098f3334cf3b4bd9c9ebf0c75fbf8)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/math - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/math - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/math - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/math - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/math - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/math - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Features - -- **Math:** translateUnicodeDigits ([996c507](https://github.com/AliMD/alwatr/commit/996c507abb4708b9ef32377eb4045efb8a3f0939)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/math - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/math - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/math - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Features - -- **token:** generate and verify HOTP tpkens ([d0372f8](https://github.com/AliMD/alwatr/commit/d0372f805a45d6fd6571b50821529068cec7d424)) - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -**Note:** Version bump only for package @alwatr/math - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/math - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/math - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -**Note:** Version bump only for package @alwatr/math - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -**Note:** Version bump only for package @alwatr/math - -## [0.7.1](https://github.com/AliMD/alwatr/compare/v0.7.0...v0.7.1) (2022-03-12) - -**Note:** Version bump only for package @alwatr/math - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -### Features - -- **math:** add isNumber ([3c5ee2b](https://github.com/AliMD/alwatr/commit/3c5ee2bbeb12a9c78df59aef291c971405d4d5fa)) -- **math:** new package for mathmatics ([7860385](https://github.com/AliMD/alwatr/commit/78603858b19693e613f6224b9c6d55d5c532e50d)) -- **math:** random ([18f585c](https://github.com/AliMD/alwatr/commit/18f585c882d40599ec9ed6531bda8f128d4cb5f8)) -- **math:** transformToRange ([62f334d](https://github.com/AliMD/alwatr/commit/62f334d37a625764dd9afad041a4489f1a61fa61)) diff --git a/core/math/README.md b/core/math/README.md deleted file mode 100644 index 9f8034124..000000000 --- a/core/math/README.md +++ /dev/null @@ -1,210 +0,0 @@ -# Alwatr Math - `@alwatr/math` - -Simple useful Math library written in tiny TypeScript module. - -## API - -### `UnicodeDigits(fromLanguages: Array | 'all' | 'common', toLanguage: UnicodeLangKeys)` - -Translate number. - -- **fromLanguages** The source language to be translated. -- **toLanguages** The dest language to be translated. - -Example: - -```ts -const unicodeDigits = new UnicodeDigits('common', 'en'); - -const list = [ - '0123456789', - '٠١٢٣٤٥٦٧٨٩', - '߀߁߂߃߄߅߆߇߈߉', - '०१२३४५६७८९', - '০১২৩৪৫৬৭৮৯', - '੦੧੨੩੪੫੬੭੮੯', - '૦૧૨૩૪૫૬૭૮૯', - '୦୧୨୩୪୫୬୭୮୯', - '௦௧௨௩௪௫௬௭௮௯', -].join('\n'); - -console.log(unicodeDigits.translate(list)); -``` - -### `unicodeDigits.translate(str: string): string` - -Convert the String of number of the source language to the destination language. - -- **str** is String of number of the source language. - -@TODO: update from ts files docs - -### `isNumber(value: unknown): boolean` - -Check the value is number or can convert to a number, for example string ' 123 ' can be converted to 123. - -#### Why is this needed? - -```ts -console.log(typeof '123'); //=> 'string' -console.log(+[]); //=> 0 -console.log(+''); //=> 0 -console.log(+' '); //=> 0 -console.log(typeof NaN); //=> 'number' -console.log(typeof Infinity); //=> 'number' -``` - -#### True - - -```ts -import {isNumber} from 'https://esm.run/@alwatr/math'; - -isNumber(5e3); // true -isNumber(0xff); // true -isNumber(-1.1); // true -isNumber(0); // true -isNumber(1); // true -isNumber(1.1); // true -isNumber('-1.1'); // true -isNumber('0'); // true -isNumber('0xff'); // true -isNumber('1'); // true -isNumber('1.1'); // true -isNumber('5e3'); // true -isNumber('012'); // true -isNumber(parseInt('012')); // true -isNumber(parseFloat('012')); // true -``` - -#### False - - -```ts -import {isNumber} from 'https://esm.run/@alwatr/math'; - -isNumber(Infinity); // false -isNumber(NaN); // false -isNumber(null); // false -isNumber(undefined); // false -isNumber(''); // false -isNumber(' '); // false -isNumber('foo'); // false -isNumber([1]); // false -isNumber([]); // false -isNumber(function () {}); // false -isNumber({}); // false -``` - -### `transformToRange(x: number, options}): number` - -Transform a number from one range to another. - -Options: - -```ts -{ - /** - * The input range [min, max]. - * - */ - in: [number, number]; - - /** - * The output (request) range [min, max]. - */ - out: [number, number]; - - /** - * If true, the output will be bounded to the output range (between min and max). - * - * In default behavior when x (input number) does not between input min~max range, - * the output value will be out of output min~max range. - * - */ - bound?: boolean; -} -``` - -#### Example - -```ts -transformToRange(5, {in: [0, 10], out: [0, 100]}); // => 50 -``` - -Make percentage of any value - -```ts -transformToRange(2000, {in: [0, 5000], out: [0, 100]}); // => 40 -``` - -Calculate progress-bar with - -```ts -const progressOuterWith = 400; //px -const gap = 5; //px (the visual gap between progressBar and component outer). -const currentProgress = 30; //% - -const progressBarWith = transformToRange(currentProgress, { - in: [0, 100], - out: [componentPadding, progressOuterWith - componentPadding], - bound: true, -}); - -this.progressBar.style.width = `${progressBarWith}px`; -``` - -### Generate Random - -### `value` - -Returns a float random number between 0 and 1 (1 Not included). - -```ts -console.log(random.value); // 0.7124123 -``` - -### `random.integer(min: number, max: number): number` - -Generate a random integer between min and max. - -```ts -console.log(random.integer(1, 10)); // somewhere between 1 and 10 -``` - -### `random.float(min: number, max: number): number` - -Generate a random float between min and max. - -```ts -console.log(random.float(1, 10)); // somewhere between 1 and 10 -``` - -### `string: (min: number, max?: number): string` - -Generate a random string with random length. -The string will contain only characters from the characters list. -The length of the string will be between min and max (max included). -If max not specified, the length will be set to min. - -```ts -console.log(random.string(6)); // something like 'Aab1V2' -``` - -### `step(min: number, max: number, step: number): number` - -Generate a random integer between min and max with a step. - -```ts -console.log(random.step(6, 10, 2)); // 6 or 8 or 10 -``` - -### `shuffle(array: any[]): any[]` - -Shuffle an array. - -```ts -const array = [1, 2, 3, 4, 5]; -random.shuffle(array); -console.log(array); // [2, 4, 3, 1, 5] -``` diff --git a/core/math/package.json b/core/math/package.json deleted file mode 100644 index 6ebfa784f..000000000 --- a/core/math/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@alwatr/math", - "version": "1.1.2", - "description": "Simple useful Math library written in tiny TypeScript module.", - "keywords": [ - "math", - "mathematics", - "typescript", - "esm", - "alwatr" - ], - "main": "math.js", - "type": "module", - "types": "math.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/math" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/math#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/core/math/src/math.ts b/core/math/src/math.ts deleted file mode 100644 index 902e70528..000000000 --- a/core/math/src/math.ts +++ /dev/null @@ -1,263 +0,0 @@ -import {globalAlwatr} from '@alwatr/logger'; - -import type {TransformRangeOptions} from './type.js'; -export {UnicodeDigits, type UnicodeLangKeys} from './unicode-digits.js'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/math', - version: _ALWATR_VERSION_, -}); - -/** - * Number.isFinite simple polyfill - */ -if (typeof Number.isFinite !== 'function') { - Number.isFinite = isFinite; -} - -/** - * Check the value is number or can convert to a number, for example string ' 123 ' can be converted to 123 - * - * @param {unknown} value - the value must check numberic. - * @return {boolean} - is number status. - */ -export function isNumber(value: unknown): boolean { - if (typeof value === 'number') { - return value - value === 0; - } - if (typeof value === 'string' && value.trim() !== '') { - return Number.isFinite(+value); - } - return false; -} - -/** - * Transform a number from one range to another. - * - * Example: - * - * ```ts - * transformToRange(5, {in: [0, 10], out: [0, 100]}); // => 50 - * ``` - * - * Make percentage of any value - * - * ```ts - * transformToRange(2000, {in: [0, 5000], out: [0, 100]}); // => 40 - * ``` - * - * Calculate progress-bar with - * - * ```ts - * const progressOuterWith = 400; //px - * const gap = 5; //px (the visual gap between progressBar and component outer). - * const currentProgress = 30; //% - * - * const progressBarWith = transformToRange(currentProgress, { - * in: [0, 100], - * out: [componentPadding, progressOuterWith - componentPadding], - * bound: true, - * }); - * - * this.progressBar.style.width = `${progressBarWith}px`; - * ``` - */ -export function transformToRange(x: number, options: TransformRangeOptions): number { - // prettier-ignore - let y = ((options.out[1] - options.out[0]) * (x - options.in[0])) / (options.in[1] - options.in[0]) + options.out[0]; - if (options.bound) { - if (y < options.out[0]) { - y = options.out[0]; - } - if (y > options.out[1]) { - y = options.out[1]; - } - } - - return y; -} - -const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; -const charactersLength = characters.length; - -export const random = { - /** - * Returns a float random number between 0 and 1 (1 Not included). - * - * Example: - * - * ```js - * console.log(random.number); // 0.7124123 - * ``` - */ - get number(): number { - return Math.random(); - }, - - /** - * Generate a random integer number between min and max (max included). - * - * Example: - * - * ```js - * console.log(random.integer(1, 10)); // somewhere between 1 and 10 - * ``` - */ - integer: (min: number, max: number): number => Math.floor(random.float(min, max + 1)), - - /** - * Generate a random float number between min and max (max not included). - * - * Example: - * - * ```js - * console.log(random.float(1, 10)); // somewhere between 1 and 10 - * ``` - */ - float: (min: number, max: number): number => random.number * (max - min) + min, - - /** - * Generate a random string with random length. - * The string will contain only characters from the characters list. - * The length of the string will be between min and max (max included). - * If max not specified, the length will be set to min. - * - * Example: - * - *```js - * console.log(random.string(6)); // something like 'Aab1V2' - * ``` - */ - string: (min: number, max?: number): string => { - let result = ''; - for (let i = max != null ? random.integer(min, max) : min; i > 0; i--) { - result += characters.charAt(Math.floor(random.number * charactersLength)); - } - return result; - }, - - /** - * Generate a random integer between min and max with a step. - * - * Example: - * - * ```js - * console.log(random.step(6, 10, 2)); // 6 or 8 or 10 - * ``` - */ - step: (min: number, max: number, step: number): number => min + random.integer(0, (max - min) / step) * step, - - /** - * Shuffle an array. - * - * Example: - * - * ```js - * const array = [1, 2, 3, 4, 5]; - * random.shuffle(array); - * console.log(array); // [2, 4, 3, 1, 5] - * ``` - */ - shuffle: (array: T[]): T[] => array.sort(() => random.number - 0.5), - - getRandomValues: (array: T): T => { - return globalThis.crypto.getRandomValues(array); - // TODO: check msCrypto - }, - - /** - * Generate Random UUID. - * - * Example: - * - * ```ts - * console.log(random.uuid); - * ``` - */ - get uuid(): `${string}-${string}-${string}-${string}-${string}` { - if (globalThis.crypto?.randomUUID) { - return globalThis.crypto.randomUUID() as `${string}-${string}-${string}-${string}-${string}`; - } - // else - const bytes = random.getRandomValues(new Uint8Array(16)); - bytes[6] = (bytes[6] & 0x0f) | 0x40; // version - bytes[8] = (bytes[8] & 0xbf) | 0x80; // variant - - // prettier-ignore - return `${ - hex(bytes.subarray(0, 4)) - }-${ - hex(bytes.subarray(4, 6)) - }-${ - hex(bytes.subarray(6, 8)) - }-${ - hex(bytes.subarray(8, 10)) - }-${ - hex(bytes.subarray(10, 16)) - }`; - }, -} as const; - -export type DurationUnit = 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y'; -export type DurationString = `${number}${DurationUnit}`; -const unitConversion = { - s: 1_000, - m: 60_000, - h: 3_600_000, - d: 86_400_000, - w: 604_800_000, - M: 2_592_000_000, - y: 31_536_000_000, -}; - -/** - * Parse duration string to target unit. - * - * Example: - * - * ```js - * parseDuration('10s'); // 10,000 - * parseDuration('10m'); // 600,000 - * parseDuration('10h'); // 36,000,000 - * parseDuration('10d'); // 864,000,000 - * parseDuration('10w'); // 6,048,000,000 - * parseDuration('10M'); // 25,920,000,000 - * parseDuration('10y'); // 315,360,000,000 - * parseDuration('10d', 'h'); // 240 - * ``` - */ -export const parseDuration = (duration: DurationString, toUnit: DurationUnit | 'ms' = 'ms'): number => { - duration = duration.trim() as DurationString; - const durationNumberStr = duration.substring(0, duration.length - 1).trimEnd(); // trimEnd for `10 m` - if (!isNumber(durationNumberStr)) { - throw new Error(`not_a_number`); - } - const durationNumber = +durationNumberStr; - const durationUnit = duration.substring(duration.length - 1) as DurationUnit; - if (unitConversion[durationUnit] == null) { - throw new Error(`invalid_init`); - } - return (durationNumber * unitConversion[durationUnit]) / (toUnit === 'ms' ? 1 : unitConversion[toUnit]); -}; - -/** - * Limit number in range (min, max). - */ -export const clamp = (val: number, min: number, max: number): number => (val > max ? max : val < min ? min : val); - -export const hex = (bytes: Uint8Array): string => { - let str = ''; - for (const byte of bytes) { - str += byte.toString(16).padStart(2, '0'); - } - return str; -}; - -export const calcDiscount = (marketPrice: number, salePrice: number, decimal = 2, upSide = true): number => { - decimal = Math.pow(10, decimal); - return Math.round((marketPrice - salePrice) / (upSide ? salePrice : marketPrice) * 100 * decimal) / decimal; -}; - -export const simpleHashNumber = (num: number): string => { - return (num >>> 0).toString(36); -}; diff --git a/core/math/src/type.ts b/core/math/src/type.ts deleted file mode 100644 index 0548d36e8..000000000 --- a/core/math/src/type.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface TransformRangeOptions { - /** - * The input range [min, max]. - * - */ - in: [number, number]; - - /** - * The output (request) range [min, max]. - */ - out: [number, number]; - - /** - * If true, the output will be bounded to the output range (between min and max). - * - * In default behavior when x (input number) does not between input min~max range, - * the output value will be out of output min~max range. - * - */ - bound?: boolean; -} diff --git a/core/math/src/unicode-digits.ts b/core/math/src/unicode-digits.ts deleted file mode 100644 index 29bf9ed31..000000000 --- a/core/math/src/unicode-digits.ts +++ /dev/null @@ -1,146 +0,0 @@ -const supportedLanguageList = { - 'en': 0x0030, - 'ar': 0x0660, - 'fa': 0x06f0, - 'nko': 0x07c0, - 'hi': 0x0966, // devanagari - 'bn': 0x09e6, // bengali - 'pa': 0x0a66, // gurmukhi, punjabi - 'gu': 0x0ae6, // gujarati - 'or': 0x0b66, // oriya - 'ta': 0x0be6, // tamil - 'te': 0x0c66, // telugu - 'kn': 0x0ce6, // kannada - - 'mal': 0x0d66, // malayalam - 'sinhala_lith': 0x0de6, - 'thai': 0x0e50, - 'lao': 0x0ed0, - 'tibetan': 0x0f20, - 'myanmar': 0x1040, - 'myanmar_shan': 0x1090, - 'khmer': 0x17e0, - 'mongolian': 0x1810, - 'limbu': 0x1946, - 'new_tai_lue': 0x19d0, - 'tai_tham_hora': 0x1a80, - 'tai_tham_tham': 0x1a90, - 'balinese': 0x1b50, - 'sundanese': 0x1bb0, - 'lepcha': 0x1c40, - 'ol_chiki': 0x1c50, - 'vai': 0xa620, - 'saurashtra': 0xa8d0, - 'kayah_li': 0xa900, - 'javanese': 0xa9d0, - 'myanmar_tai_laing': 0xa9f0, - 'cham': 0xaa50, - 'meetei_mayek': 0xabf0, - 'fullwidth': 0xff10, - 'osmanya': 0x104a0, - 'brahmi': 0x11066, - 'sora_sompeng': 0x110f0, - 'chakma': 0x11136, - 'sharada': 0x111d0, - 'khudawadi': 0x112f0, - 'newa': 0x11450, - 'tirhuta': 0x114d0, - 'modi': 0x11650, - 'takri': 0x116c0, - 'ahom': 0x11730, - 'warang_citi': 0x118e0, - 'bhaiksuki': 0x11c50, - 'mro': 0x16a60, - 'pahawh_hmong': 0x16b50, - 'mathematical_bold': 0x1d7ce, - 'mathematical_double-struck': 0x1d7d8, - 'mathematical_sans-serif': 0x1d7e2, - 'mathematical_sans-serif_bold': 0x1d7ec, - 'mathematical_monospace': 0x1d7f6, - 'fula': 0x1e950, // adlam script in fula lang -} as const; - - -export type UnicodeLangKeys = keyof typeof supportedLanguageList; - -const commonLangList: UnicodeLangKeys[] = ['en', 'fa', 'ar']; - -export class UnicodeDigits { - protected _toLangZeroCode; - protected _searchRegExt; - - protected _replacer(_: string, ...args: number[]): string { - return String.fromCharCode(this._toLangZeroCode + args.findIndex((v) => v != null)); - } - - /** - * Translate number. - * - * Example: - * - * ```ts - * const unicodeDigits = new UnicodeDigits('common', 'en'); - * - * const list = [ - * '0123456789', - * '٠١٢٣٤٥٦٧٨٩', - * '߀߁߂߃߄߅߆߇߈߉', - * '०१२३४५६७८९', - * '০১২৩৪৫৬৭৮৯', - * '੦੧੨੩੪੫੬੭੮੯', - * '૦૧૨૩૪૫૬૭૮૯', - * '୦୧୨୩୪୫୬୭୮୯', - * '௦௧௨௩௪௫௬௭௮௯', - * ].join('\n'); - * - * console.log(unicodeDigits.translate(list)); - * ``` - */ - constructor(toLanguage: UnicodeLangKeys, fromLanguages: UnicodeLangKeys[] | 'all' = [...commonLangList]) { - if (fromLanguages === 'all') { - fromLanguages = Object.keys(supportedLanguageList) as UnicodeLangKeys[]; - } - - const removeSelf = fromLanguages.indexOf(toLanguage); - if (removeSelf !== -1) fromLanguages.splice(removeSelf, 1); - - this._toLangZeroCode = supportedLanguageList[toLanguage]; - - const regParts: string[] = []; - for (let n = 0; n < 10; n++) { - regParts.push( - '(' + fromLanguages.map((langKey) => String.fromCharCode(supportedLanguageList[langKey] + n)).join('|') + ')', - ); - } - this._searchRegExt = new RegExp(regParts.join('|'), 'g'); - this._replacer = this._replacer.bind(this); - } - - /** - * Convert the String of number of the source language to the destination language. - * - * @param {string} str - String of number of the source language. - * @returns String of number of the destination language. - * - * Example: - * - * ```ts - * const list = [ - * '0123456789', - * '٠١٢٣٤٥٦٧٨٩', - * '߀߁߂߃߄߅߆߇߈߉', - * '०१२३४५६७८९', - * '০১২৩৪৫৬৭৮৯', - * '੦੧੨੩੪੫੬੭੮੯', - * '૦૧૨૩૪૫૬૭૮૯', - * '୦୧୨୩୪୫୬୭୮୯', - * '௦௧௨௩௪௫௬௭௮௯', - * ].join('\n'); - * - * console.log(unicodeDigits.translate(list)); - * ``` - */ - translate(str: string): string { - return str.trim() === '' ? str : str.replace(this._searchRegExt, this._replacer); - } -} diff --git a/core/math/tsconfig.json b/core/math/tsconfig.json deleted file mode 100644 index 1f9b9b7c4..000000000 --- a/core/math/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"} - ] -} diff --git a/core/nano-server/CHANGELOG.md b/core/nano-server/CHANGELOG.md deleted file mode 100644 index b857b28d0..000000000 --- a/core/nano-server/CHANGELOG.md +++ /dev/null @@ -1,278 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/nano-server@1.1.1...@alwatr/nano-server@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/nano-server - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/nano-server@1.1.0...@alwatr/nano-server@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/nano-server - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -### Bug Fixes - -* **nano-server:** `data` type ([f629f3b](https://github.com/AliMD/alwatr/commit/f629f3b7952b775ead78119c699ce93c119b8164)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **nano-server:** path prefix ([83995f7](https://github.com/AliMD/alwatr/commit/83995f7bc9748ecb632d6f8dbea5e2f96fa59c41)) -* **nano-server:** prefixPattern, logger ([f9d203e](https://github.com/AliMD/alwatr/commit/f9d203e65955629f6dd5c468867f20ce578337eb)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **nano-server:** add getUserAuth ([615266f](https://github.com/AliMD/alwatr/commit/615266f06ef47a7a5b36fe3d6abee1653703bf6f)) -* **nano-server:** prefix pattern ([ad5e1b5](https://github.com/AliMD/alwatr/commit/ad5e1b56651c96cb825187604f877fee396b3ec4)) - -# 0.30.0 (2023-03-06) - -### Features - -* **nano-server:** getRemoteAddress ([eff82cb](https://github.com/AliMD/alwatr/commit/eff82cbdba5a35a88d95f6997365210683163d62)) -* **nano-server:** requireClientId ([fccd734](https://github.com/AliMD/alwatr/commit/fccd734f0c08cc624492b30e14c451143706cc00)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **nano-server:** compatible with ParamValueType ([325d896](https://github.com/AliMD/alwatr/commit/325d89651aeba38079d6fb9184adb894df94f083)) -* **nano-server:** null parsedParams ([bb969b2](https://github.com/AliMD/alwatr/commit/bb969b23495f791003225b5c557e40e10e7f8124)) -* **nano-server:** type ([2586061](https://github.com/AliMD/alwatr/commit/25860611f765e67ecddd586d80169ebe7f75701b)) - -### Features - -* **nano-server:** add client-id to IncomingHttpHeaders type ([a4a86c7](https://github.com/AliMD/alwatr/commit/a4a86c7e410edfe69e66cdab6b8ffdc0d9b95eb8)) -* **nano-service:** api prefix support ([21960dc](https://github.com/AliMD/alwatr/commit/21960dce5f25a587b19886e487f7d46af5ca087b)) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **nano-server:** math references ([e46071a](https://github.com/AliMD/alwatr/commit/e46071a49bb61cb6f36d2e79e14c32712f3746fa)) -* **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* inline home route ([ce978f6](https://github.com/AliMD/alwatr/commit/ce978f6e1e2890e853d0db351c08efca665e5fad)) -* **nano-server:** check method on getBody ([9aa9857](https://github.com/AliMD/alwatr/commit/9aa9857fb6ad96f861f31c651bf131813e46b343)) -* **nano-server:** handle utf8 reply issue ([33aa238](https://github.com/AliMD/alwatr/commit/33aa238d99f92c03a5b39e829cb39172dc45d5c6)) -* **nano-server:** remove return null on requireToken ([3c6779f](https://github.com/AliMD/alwatr/commit/3c6779f6b114aa1afe71e9b2054fb6dbe273c26a)) -* **nano-server:** route generic ([94e181b](https://github.com/AliMD/alwatr/commit/94e181ba1172399ac992af6dc969c56e4edffbf0)) -* **nano-server:** update docs and return type ([df949c1](https://github.com/AliMD/alwatr/commit/df949c19ea75921ab9c3e7323dc33ef340bd3ee7)) -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -* improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -* **nano-server:** clear debug info from client for security reasons. ([5814af2](https://github.com/AliMD/alwatr/commit/5814af2ceeac6e2175c4ab924e4b40cef765072c)) -* **nano-server:** maybe promise type ([d782761](https://github.com/AliMD/alwatr/commit/d7827616ea71b7e6328c6a85b80c2daec0b6f512)) -* **nano-server:** reply throw on route ([083dfa5](https://github.com/AliMD/alwatr/commit/083dfa51b391dc689d1d4fed9f1f17d768e7384c)) -* **nano-server:** routeMiddleware type ([a05b1a2](https://github.com/AliMD/alwatr/commit/a05b1a2bc79aeca67a81f4758f5d2b0f6c890028)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **nano-server:** `data` type ([f629f3b](https://github.com/AliMD/alwatr/commit/f629f3b7952b775ead78119c699ce93c119b8164)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **nano-server:** path prefix ([83995f7](https://github.com/AliMD/alwatr/commit/83995f7bc9748ecb632d6f8dbea5e2f96fa59c41)) -- **nano-server:** prefixPattern, logger ([f9d203e](https://github.com/AliMD/alwatr/commit/f9d203e65955629f6dd5c468867f20ce578337eb)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **nano-server:** add getUserAuth ([615266f](https://github.com/AliMD/alwatr/commit/615266f06ef47a7a5b36fe3d6abee1653703bf6f)) -- **nano-server:** prefix pattern ([ad5e1b5](https://github.com/AliMD/alwatr/commit/ad5e1b56651c96cb825187604f877fee396b3ec4)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Features - -- **nano-server:** getRemoteAddress ([eff82cb](https://github.com/AliMD/alwatr/commit/eff82cbdba5a35a88d95f6997365210683163d62)) -- **nano-server:** requireClientId ([fccd734](https://github.com/AliMD/alwatr/commit/fccd734f0c08cc624492b30e14c451143706cc00)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **nano-server:** compatible with ParamValueType ([325d896](https://github.com/AliMD/alwatr/commit/325d89651aeba38079d6fb9184adb894df94f083)) -- **nano-server:** null parsedParams ([bb969b2](https://github.com/AliMD/alwatr/commit/bb969b23495f791003225b5c557e40e10e7f8124)) -- **nano-server:** type ([2586061](https://github.com/AliMD/alwatr/commit/25860611f765e67ecddd586d80169ebe7f75701b)) - -### Features - -- **nano-server:** add client-id to IncomingHttpHeaders type ([a4a86c7](https://github.com/AliMD/alwatr/commit/a4a86c7e410edfe69e66cdab6b8ffdc0d9b95eb8)) -- **nano-service:** api prefix support ([21960dc](https://github.com/AliMD/alwatr/commit/21960dce5f25a587b19886e487f7d46af5ca087b)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **nano-server:** math references ([e46071a](https://github.com/AliMD/alwatr/commit/e46071a49bb61cb6f36d2e79e14c32712f3746fa)) -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- inline home route ([ce978f6](https://github.com/AliMD/alwatr/commit/ce978f6e1e2890e853d0db351c08efca665e5fad)) -- **nano-server:** check method on getBody ([9aa9857](https://github.com/AliMD/alwatr/commit/9aa9857fb6ad96f861f31c651bf131813e46b343)) -- **nano-server:** handle utf8 reply issue ([33aa238](https://github.com/AliMD/alwatr/commit/33aa238d99f92c03a5b39e829cb39172dc45d5c6)) -- **nano-server:** remove return null on requireToken ([3c6779f](https://github.com/AliMD/alwatr/commit/3c6779f6b114aa1afe71e9b2054fb6dbe273c26a)) -- **nano-server:** route generic ([94e181b](https://github.com/AliMD/alwatr/commit/94e181ba1172399ac992af6dc969c56e4edffbf0)) -- **nano-server:** update docs and return type ([df949c1](https://github.com/AliMD/alwatr/commit/df949c19ea75921ab9c3e7323dc33ef340bd3ee7)) -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -- improve accident debugging ([d697e6c](https://github.com/AliMD/alwatr/commit/d697e6c4c7d0a4172f4dba9caf6fbd478f79de9c)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- **nano-server:** clear debug info from client for security reasons. ([5814af2](https://github.com/AliMD/alwatr/commit/5814af2ceeac6e2175c4ab924e4b40cef765072c)) -- **nano-server:** maybe promise type ([d782761](https://github.com/AliMD/alwatr/commit/d7827616ea71b7e6328c6a85b80c2daec0b6f512)) -- **nano-server:** reply throw on route ([083dfa5](https://github.com/AliMD/alwatr/commit/083dfa51b391dc689d1d4fed9f1f17d768e7384c)) -- **nano-server:** routeMiddleware type ([a05b1a2](https://github.com/AliMD/alwatr/commit/a05b1a2bc79aeca67a81f4758f5d2b0f6c890028)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/nano-server - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- **demo:** update types ([010b123](https://github.com/AliMD/alwatr/commit/010b123075d073c8583f557608a9781064d7cc5c)) -- **nano-server:** \_sanitizeParam types ([bd4f39d](https://github.com/AliMD/alwatr/commit/bd4f39d32ceef5f2be26fce27a37cc7e1d5f6bd6)) -- **nano-server:** deps ([ea0ceba](https://github.com/AliMD/alwatr/commit/ea0ceba7da3d1bc0542d9eb69d951aa3c3165175)) -- **nano-server:** handle preflight request ([ab575cd](https://github.com/AliMD/alwatr/commit/ab575cd67b3f06dc64c895a7080e766b02ee3c22)) -- **nano-server:** use config for cors ([947dad9](https://github.com/AliMD/alwatr/commit/947dad9473d7408aad9a4640ffdd2157edae10c5)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -### Bug Fixes - -- **nano-server:** getToken ([a2f1ccb](https://github.com/AliMD/alwatr/commit/a2f1ccbe5d81d3f284ba1ce80dd2e54ec2245848)) - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -### Bug Fixes - -- add rest client extension to recommendation ([33a4a25](https://github.com/AliMD/alwatr/commit/33a4a2579208d6026380bbe8eaa9d4f9d2a8a1b9)) - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **nano-server:** method all ([b20afa1](https://github.com/AliMD/alwatr/commit/b20afa1fb8eeb13c4b6e3d811ae6fbbeb7465306)) -- **nano-server:** no-non-null-assertion ([ad5588c](https://github.com/AliMD/alwatr/commit/ad5588c6e0e863aa03cca44c23144dbf371795da)) -- **nano-server:** parse body on PATCH method ([cba790f](https://github.com/AliMD/alwatr/commit/cba790f43dc88c00ee99f5f7d7c872e8f6d1618d)) -- **nano-server:** remove ALL from Methods type ([1f67c07](https://github.com/AliMD/alwatr/commit/1f67c07a5044c6d7cf89605e269af468aa49094c)) -- **nano-server:** review require... methods and fix issues ([a7e4bae](https://github.com/AliMD/alwatr/commit/a7e4bae89440c2fc72a0a9e6060aac894b18eddf)) -- **services/storage:** remove home route ([5b4160d](https://github.com/AliMD/alwatr/commit/5b4160df0237085e43a103a02b9b63404eddda2c)) - -### Features - -- **nano-server:** add \_sanitizeParam ([46edbc3](https://github.com/AliMD/alwatr/commit/46edbc33eb164f6676d8a5c939d52accededfd45)) -- **nano-server:** keep alive performance and options ([5ed78b6](https://github.com/AliMD/alwatr/commit/5ed78b6cf5b7fd1b00c28df26ca250d4025dc676)) -- **nano-server:** parse and validate query params in AlwatrConnection ([1eadd68](https://github.com/AliMD/alwatr/commit/1eadd68d3e1f92e47d743b7412ae247f3414738f)) -- **nano-server:** validate content type header in requireJsonBody ([d99eb74](https://github.com/AliMD/alwatr/commit/d99eb742c0c5ea1b92f44767d570bd42b9c9e342)) -- **services/storage:** add remove route ([d4452cd](https://github.com/AliMD/alwatr/commit/d4452cd0366452ab07d82b338dbba345c32cd61d)) -- **services/storage:** add requireToken to AlwatrConnection ([8073773](https://github.com/AliMD/alwatr/commit/8073773577b88a52baa90c6042bac52260ec3dc1)) - -### Performance Improvements - -- **nano-server:** faster log ([8ff716e](https://github.com/AliMD/alwatr/commit/8ff716e1eaee59047f816e1645aa9dde7635b571)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/nano-server - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Bug Fixes - -- **nano-server:** `incomingMessage` body ([0172390](https://github.com/AliMD/alwatr/commit/01723906f657c35a7a2a329b914308c3d9f06ff8)) -- **nano-server:** host log ([c0c0f97](https://github.com/AliMD/alwatr/commit/c0c0f971d0405f5731cf040962b4609c9472a2fc)) -- **nano-server:** logs ([72cb160](https://github.com/AliMD/alwatr/commit/72cb160b53e7bb04be6b5d24aa04f98d6a597e11)) - -### Features - -- **nano-server:** add token to connection ([8677999](https://github.com/AliMD/alwatr/commit/867799920c917dbafe3a041a8946f7e77577552f)) -- **nano-server:** refactor, add seperate config, cache all routes ([2cdd203](https://github.com/AliMD/alwatr/commit/2cdd2030474b7c1796e311740f20b8f39631bae9)) - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- **nano-server:** logger scope ([73dbf02](https://github.com/AliMD/alwatr/commit/73dbf029325169d900558e2361fec9fa4303e7e4)) - -### Features - -- **nano-server:** make `statusCode` in `ReplySuccessContent` optional ([fe836f4](https://github.com/AliMD/alwatr/commit/fe836f452566c541d25857df34c952b413690d23)) -- **nano-server:** make new package ([2148dfc](https://github.com/AliMD/alwatr/commit/2148dfc910565f917d3cb8eb001cde08f2fc694d)) diff --git a/core/nano-server/README.md b/core/nano-server/README.md deleted file mode 100644 index c055dd0c4..000000000 --- a/core/nano-server/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# Alwatr NanoServer - `@alwatr/nano-server` - -Elegant powerful nodejs server for nanoservice use cases, written in tiny TypeScript module. - -## Example usage - -```ts -import {type AlwatrConnection, AlwatrNanoServer} from 'https://esm.run/@alwatr/nano-server'; - -const nanoServer = new AlwatrNanoServer(); - -nanoServer.route('GET', '/', async (connection: AlwatrConnection) => { - connection.reply({ - ok: true, - data: { - app: 'Alwatr Nanoservice Starter Kit', - message: 'Hello ;)', - }, - }); -}); -``` - -## API - -### `AlwatrNanoServer(config?: Partial)` - -Create a server for nanoservice use cases. - -Example: - -```ts -import {AlwatrNanoServer} from 'https://esm.run/@alwatr/nano-server'; -const nanoServer = new AlwatrNanoServer(); -``` - -### `nanoserver.close()` - -Stops the HTTP server from accepting new connections. - -### `route(method: Methods, route: 'all' |`/${string}`,middleware: (connection: AlwatrConnection) => void)` - -Refers to how an application’s endpoints (URIs) respond to client requests. - -Example: - -```ts -nanoServer.route('GET', '/', middleware); -``` - -### `AlwatrConnection(incomingMessage: IncomingMessage, serverResponse: ServerResponse)` - -???? - -```ts -async function middleware(connection: AlwatrConnection) => { -connection.reply({ - ok: true, - data: { - app: 'Alwatr Nanoservice Starter Kit', - message: 'Hello ;)', - }, - }); -}); -``` - -### `connection.url: URL` - -Request URL. - -### `connection.method: "ALL" | "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "CONNECT" | "TRACE" | "OPTIONS" | "PATCH" - -` - -Request method. - -### `connection.getBody(): Promise` - -Get request body for **POST**, **PUT** and **POST** methods.. - -Example: - -```ts -const body = await connection.getBody(); -``` - -### `connection.getToken(): string | null` - -Get the token placed in the request header. - -### `connection.reply(content: ReplyContent)` - -Example: - -```ts -nanoServer.route('GET', '/', async (connection) => { - connection.reply({ - ok: true, - data: { - app: 'Alwatr Nanoservice Starter Kit', - message: 'Hello ;)', - }, - }); -}); -``` - -### `connection.requireJsonBody()` - -Parse request body. - -Example: - -```ts -const bodyData = await connection.requireJsonBody(); -if (bodyData == null) return; -``` - -### `requireToken(validator: ((token: string) => boolean) | Array | string): string | null` - -Parse and validate request token. -Returns request token. - -Example: - -```ts -const token = connection.requireToken((token) => token.length > 12); -if (token == null) return; -``` - -### `requireQueryParams(params: Record): T | null` - -Parse and validate query params. -Returns query params object. - -Example: - -```ts -const params = connection.requireQueryParams<{id: string}>({id: 'string'}); -if (params == null) return; -console.log(params.id); -``` diff --git a/core/nano-server/package.json b/core/nano-server/package.json deleted file mode 100644 index a562ab40c..000000000 --- a/core/nano-server/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@alwatr/nano-server", - "version": "1.1.2", - "description": "Elegant powerful nodejs server for nanoservice use cases, written in tiny TypeScript module.", - "keywords": [ - "server", - "nanoservice", - "api", - "typescript", - "esm", - "alwatr" - ], - "main": "nano-server.js", - "type": "module", - "types": "nano-server.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/nano-server" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/nano-server#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/math": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/core/nano-server/src/nano-server.ts b/core/nano-server/src/nano-server.ts deleted file mode 100644 index 04c863966..000000000 --- a/core/nano-server/src/nano-server.ts +++ /dev/null @@ -1,645 +0,0 @@ -import {createServer} from 'node:http'; - -import {createLogger, globalAlwatr} from '@alwatr/logger'; -import {isNumber} from '@alwatr/math'; - -import type {NanoServerConfig, ConnectionConfig} from './type.js'; -import type {AlwatrLogger} from '@alwatr/logger'; -import type { - AlwatrServiceResponse, - AlwatrServiceResponseFailed, - AlwatrServiceResponseSuccess, - AlwatrServiceResponseSuccessWithMeta, - MaybePromise, - Methods, - ParamKeyType, - ParamValueType, - QueryParameters, - Stringifyable, - StringifyableRecord, - UserAuth, -} from '@alwatr/type'; -import type {IncomingMessage, ServerResponse} from 'node:http'; -import type {Duplex} from 'node:stream'; - -export type RouteMiddleware< - TData extends Stringifyable = Stringifyable, - TMeta extends StringifyableRecord = StringifyableRecord -> = (connection: AlwatrConnection) => MaybePromise | null>; - -export type { - NanoServerConfig, - ConnectionConfig, - AlwatrServiceResponse, - AlwatrServiceResponseFailed, - AlwatrServiceResponseSuccess, - AlwatrServiceResponseSuccessWithMeta, -}; - -globalAlwatr.registeredList.push({ - name: '@alwatr/nano-server', - version: _ALWATR_VERSION_, -}); - -export class AlwatrNanoServer { - protected _config: NanoServerConfig; - protected _logger: AlwatrLogger; - - /** - * Core HTTP Server. - */ - httpServer; - - /** - * Create a server for nanoservice use cases. - * - * Example: - * - * ```ts - * import {AlwatrNanoServer} from '@alwatr/nano-server'; - * const nanoServer = new AlwatrNanoServer(); - * - * nanoServer.route('GET', '/', async (connection) => { - * ok: true, - * data: { - * app: 'Alwatr Nanoservice Starter Kit', - * message: 'Hello ;)', - * }, - * }; - * ); - * ``` - */ - constructor(config?: Partial) { - this._config = { - host: '0.0.0.0', - port: 80, - requestTimeout: 10_000, - headersTimeout: 130_000, - keepAliveTimeout: 120_000, - healthRoute: true, - allowAllOrigin: false, - prefixPattern: 'api', - ...config, - }; - - this._logger = createLogger('alwatr/nano-server' + (this._config.port !== 80 ? ':' + this._config.port : '')); - this._logger.logMethodArgs?.('constructor', {config: this._config}); - - this._requestListener = this._requestListener.bind(this); - this._errorListener = this._errorListener.bind(this); - this._clientErrorListener = this._clientErrorListener.bind(this); - this._onHealthCheckRequest = this._onHealthCheckRequest.bind(this); - this.httpServer = createServer( - { - keepAlive: true, - keepAliveInitialDelay: 0, - noDelay: true, - }, - this._requestListener, - ); - this.httpServer.requestTimeout = this._config.requestTimeout; - this.httpServer.keepAliveTimeout = this._config.keepAliveTimeout; - this.httpServer.headersTimeout = this._config.headersTimeout; - - this.httpServer.on('error', this._errorListener); - this.httpServer.on('clientError', this._clientErrorListener); - - if (this._config.healthRoute === true) { - this.route('GET', '/health', this._onHealthCheckRequest); - } - - if (this._config.allowAllOrigin === true) { - this.route('OPTIONS', 'all', this._onHOptionRequest); - } - - this.httpServer.listen(this._config.port, this._config.host, () => { - this._logger.logOther?.(`listening on ${this._config.host}:${this._config.port}`); - }); - } - - /** - * Stops the HTTP server from accepting new connections. - * - * Example: - * - * ```ts - * nanoserver.close(); - * ``` - */ - close(): void { - this._logger.logMethod?.('close'); - this.httpServer.close(); - } - - /** - * Refers to how an application’s endpoints (URIs) respond to client requests. - * - * @param method - Acceptable methods. - * @param route - Acceptable request path. - * @param middleware - Request handler. - * - * Example: - * - * ```ts - * nanoServer.route('GET', '/', async (connection) => { - * return { - * ok: true, - * data: { - * app: 'Alwatr Nanoservice Starter Kit', - * message: 'Hello ;)', - * }, - * }); - * }; - * ``` - */ - route< - TData extends Stringifyable = Stringifyable, - TMeta extends StringifyableRecord = StringifyableRecord - >(method: 'ALL' | Methods, route: 'all' | `/${string}`, middleware: RouteMiddleware): void { - this._logger.logMethodArgs?.('route', {method, route}); - - if (this.middlewareList[method] == null) this.middlewareList[method] = {}; - - if (typeof this.middlewareList[method][route] === 'function') { - this._logger.accident('route', 'route_already_exists', 'Route already exists', { - method, - route, - }); - throw new Error('route_already_exists'); - } - - this.middlewareList[method][route] = middleware as RouteMiddleware; - } - - /** - * Responds to the request. - * - * Example: - * ```ts - * nanoServer.route('GET', '/', async (connection) => { - * return { - * ok: true, - * data: { - * app: 'Alwatr Nanoservice Starter Kit', - * message: 'Hello ;)', - * }, - * }; - * }); - * ``` - */ - reply( - serverResponse: ServerResponse, - content: AlwatrServiceResponse, - ): void { - content.statusCode ??= 200; - this._logger.logMethodArgs?.('reply', {ok: content.ok, statusCode: content.statusCode}); - - if (serverResponse.headersSent) { - this._logger.error('reply', 'http_header_sent', 'Response headers already sent'); - if (content.ok === false) return; // prevent loop. - throw new Error('http_header_sent'); - } - - if (!this._logger.devMode && !content.ok && content.meta) { - // clear debug info from client for security reasons. - delete content.meta; - } - - let buffer: Buffer; - - try { - buffer = Buffer.from(JSON.stringify(content), 'utf8'); - } - catch (err) { - this._logger.accident('responseData', 'data_stringify_failed', 'JSON.stringify(data) failed!', err); - return this.reply( - serverResponse, - content.ok === false - ? { - ok: false, - statusCode: content.statusCode, - errorCode: content.errorCode, - } - : { - ok: false, - statusCode: 500, - errorCode: 'data_stringify_failed', - }, - ); - } - - const headers: Record = { - 'Content-Length': buffer.byteLength, - 'Content-Type': 'application/json', - 'Server': 'Alwatr NanoServer', - }; - - if (this._config.allowAllOrigin === true) { - headers['Access-Control-Allow-Origin'] = '*'; - } - - try { - serverResponse.writeHead(content.statusCode ?? 200, headers); - serverResponse.end(buffer, 'binary'); - } - catch (err) { - this._logger.error('reply', 'reply_failed', err); - } - } - - protected _errorListener(err: NodeJS.ErrnoException): void { - if (err.code === 'EADDRINUSE') { - this._logger.incident?.('server.onError', 'address_in_use', 'Address in use, retrying...', err); - setTimeout(() => { - this.httpServer.close(); - this.httpServer.listen(this._config.port, this._config.host, () => { - this._logger.logOther?.(`listening on ${this._config.host}:${this._config.port}`); - }); - }, 2000); - } - else { - this._logger.error('server.onError', 'http_server_catch_error', err.message || 'HTTP server catch an error', err); - } - } - - protected _clientErrorListener(err: NodeJS.ErrnoException, socket: Duplex): void { - this._logger.accident('server.clientError', 'http_server_catch_client_error', 'HTTP server catch a client error', { - errCode: err.code, - errMessage: err.message, - }); - socket.end('HTTP/1.1 400 Bad Request\r\n\r\n'); - } - - protected _onHealthCheckRequest(connection: AlwatrConnection): null { - const body = 'ok'; - connection.serverResponse.writeHead(200, { - 'Content-Length': body.length, - 'Content-Type': 'plain/text', - 'Server': 'Alwatr NanoServer', - }); - connection.serverResponse.end(body); - - return null; - } - - protected _onHOptionRequest(connection: AlwatrConnection): null { - connection.serverResponse.writeHead(204, { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': '*', - 'Access-Control-Allow-Headers': '*', - }); - connection.serverResponse.end(); - - return null; - } - - // prettier-ignore - protected middlewareList: Record> = { - ALL: {}, - }; - - protected async _requestListener(incomingMessage: IncomingMessage, serverResponse: ServerResponse): Promise { - this._logger.logMethod?.('handleRequest'); - - if (incomingMessage.url == null) { - this._logger.accident('handleRequest', 'http_server_url_undefined', 'incomingMessage.url is undefined'); - return; - } - - if (incomingMessage.method == null) { - this._logger.accident('handleRequest', 'http_server_method_undefined', 'incomingMessage.method is undefined'); - return; - } - - const connection = new AlwatrConnection(incomingMessage, serverResponse, { - allowAllOrigin: this._config.allowAllOrigin, - prefixPattern: this._config.prefixPattern, - }); - const route = connection.url.pathname; - - // TODO: handled open remained connections. - - const middleware = - this.middlewareList[connection.method]?.[route] || - this.middlewareList.ALL[route] || - this.middlewareList[connection.method]?.all || - this.middlewareList.ALL.all || - this._notFoundListener; - - try { - const content = await middleware(connection); - if (content !== null) { - this.reply(serverResponse, content); - } - } - catch (errorObject) { - if (typeof errorObject === 'object' && errorObject != null && 'ok' in errorObject) { - this.reply(serverResponse, errorObject as AlwatrServiceResponse); - } - else { - const err = errorObject as Error; - // 500 status code - this._logger.error('handleRequest', 'http_server_middleware_error', err, { - method: connection.method, - route, - }); - this.reply(serverResponse, { - ok: false, - statusCode: 500, - errorCode: 'http_server_middleware_error', - meta: { - name: err?.name, - message: err?.message, - cause: err?.cause as StringifyableRecord, - }, - }); - } - } - } - - protected _notFoundListener = (connection: AlwatrConnection): AlwatrServiceResponseFailed => { - return ( - connection.serverResponse, - { - ok: false, - statusCode: 404, - errorCode: 'not_found', - meta: { - method: connection.method, - route: connection.url.pathname, - }, - } - ); - }; -} - -/** - * Alwatr Connection - */ -export class AlwatrConnection { - static _versionPattern = new RegExp('^/v[0-9]+'); - - /** - * Request URL. - */ - readonly url = new URL( - (this.incomingMessage.url ?? '') - .replace(new RegExp('^/' + this._config.prefixPattern), '') - .replace(AlwatrConnection._versionPattern, ''), - 'http://localhost/', - ); - - /** - * Request method. - */ - readonly method = (this.incomingMessage.method ?? 'GET').toUpperCase() as Methods; - - protected _logger = createLogger('alwatr/nano-server-connection'); - - constructor( - public incomingMessage: IncomingMessage, - public serverResponse: ServerResponse, - protected _config: ConnectionConfig, - ) { - this._logger.logMethodArgs?.('constructor', {method: incomingMessage.method, url: incomingMessage.url}); - } - - /** - * Get the token placed in the request header. - */ - getAuthBearer(): string | null { - const auth = this.incomingMessage.headers.authorization?.split(' '); - - if (auth == null || auth[0].toLowerCase() !== 'bearer') { - return null; - } - - return auth[1]; - } - - /** - * Get request body for POST, PUT and POST methods. - * - * Example: - * ```ts - * const body = await connection.getBody(); - * ``` - */ - async getBody(): Promise { - // method must be POST or PUT or PATCH - if (!(this.method === 'POST' || this.method === 'PUT' || this.method === 'PATCH')) { - return null; - } - - let body = ''; - - this.incomingMessage.on('data', (chunk: unknown) => { - body += chunk; - }); - - await new Promise((resolve) => this.incomingMessage.once('end', resolve)); - - return body; - } - - /** - * Parse request body. - * - * @returns Request body. - * - * Example: - * ```ts - * const bodyData = await connection.requireJsonBody(); - * ``` - */ - async requireJsonBody(): Promise { - // if request content type is json - if (this.incomingMessage.headers['content-type'] !== 'application/json') { - // eslint-disable-next-line no-throw-literal - throw { - ok: false, - statusCode: 400, - errorCode: 'require_json_body', - }; - } - - const body = await this.getBody(); - - if (body == null || body.length === 0) { - // eslint-disable-next-line no-throw-literal - throw { - ok: false, - statusCode: 400, - errorCode: 'require_body', - }; - } - - try { - return JSON.parse(body) as T; - } - catch (err) { - // eslint-disable-next-line no-throw-literal - throw { - ok: false, - statusCode: 400, - errorCode: 'invalid_json', - }; - } - } - - /** - * Parse and validate request token. - * - * @returns Request token. - * - * Example: - * ```ts - * const token = connection.requireToken((token) => token.length > 12); - * if (token == null) return; - * ``` - */ - requireToken(validator?: ((token: string) => boolean) | string[] | string): string { - const token = this.getAuthBearer(); - - if (token == null) { - throw { - ok: false, - statusCode: 401, - errorCode: 'authorization_required', - }; - } - else if (validator === undefined) { - return token; - } - else if (typeof validator === 'string') { - if (token === validator) return token; - } - else if (Array.isArray(validator)) { - if (validator.includes(token)) return token; - } - else if (typeof validator === 'function') { - if (validator(token) === true) return token; - } - throw { - ok: false, - statusCode: 403, - errorCode: 'access_denied', - }; - } - - /** - * Parse and get request user auth (include id and token). - * - * Example: - * ```ts - * const userAuth = connection.requireUserAuth(); - * ``` - */ - getUserAuth(): UserAuth | null { - const auth = this.getAuthBearer() - ?.split('/') - .filter((item) => item.trim() !== ''); - - return auth == null || auth.length !== 2 - ? null - : { - id: auth[0], - token: auth[1], - }; - } - - /** - * Parse query param and validate with param type. - */ - protected _sanitizeParam(name: string, type: ParamKeyType): ParamValueType | null { - let value = this.url.searchParams.get(name); - - if (value == null || value === '') { - return null; - } - - if (type === 'string') { - return value; - } - - if (type === 'number') { - return isNumber(value) ? +value : null; - } - - if (type === 'boolean') { - value = value.trim(); - - if (value === 'true' || value === '1') { - return true; - } - else if (value === 'false' || value === '0') { - return false; - } - else return null; - } - - return null; - } - - /** - * Parse and validate query params. - * - * @returns Query params object. - * - * Example: - * ```ts - * const params = connection.requireQueryParams<{id: string}>({id: 'string'}); - * console.log(params.id); - * ``` - */ - requireQueryParams(params: Record): T { - const parsedParams: Record = {}; - - for (const paramName in params) { - if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue; - const paramType = params[paramName]; - const paramValue = (parsedParams[paramName] = this._sanitizeParam(paramName, paramType)); - if (paramValue == null) { - // eslint-disable-next-line no-throw-literal - throw { - ok: false, - statusCode: 406, - errorCode: 'query_parameter_required', - meta: { - paramName, - paramType, - paramValue, - }, - }; - } - } - - return parsedParams as T; - } - - getRemoteAddress(): string { - return ( - this.incomingMessage.headers['x-forwarded-for'] - ?.split(',') - .pop() - ?.trim() || - this.incomingMessage.socket.remoteAddress || - 'unknown' - ); - } - - requireClientId(): string { - const clientId = this.incomingMessage.headers['client-id']; - - if (!clientId) { - // eslint-disable-next-line no-throw-literal - throw { - ok: false, - statusCode: 401, - errorCode: 'client_denied', - }; - } - - return clientId; - } -} diff --git a/core/nano-server/src/type.ts b/core/nano-server/src/type.ts deleted file mode 100644 index 755a04fdf..000000000 --- a/core/nano-server/src/type.ts +++ /dev/null @@ -1,89 +0,0 @@ -declare module 'http' { - interface IncomingHttpHeaders { - /** - * Alwatr Client UUID - */ - 'client-id'?: string; - - 'x-forwarded-for'?: string; - } -} - -export interface NanoServerConfig { - /** - * The port number to listen on. - * - * @default 80 - */ - port: number; - - /** - * The hostname to listen on. - * - * @default '0.0.0.0' - */ - host: string; - - /** - * Sets the timeout (ms) for receiving the entire request from the client. - * - * @default 10_000 ms - */ - requestTimeout: number; - - /** - * Sets the timeout (ms) for receiving the complete HTTP headers from the client. - * - * This should be bigger than `keepAliveTimeout + your server's expected response time`. - * - * @default 130_000 ms - */ - headersTimeout: number; - - /** - * Sets the timeout (ms) for receiving the complete HTTP headers from the client. - * - * @default 120_000 ms - */ - keepAliveTimeout: number; - - /** - * Add /health route. - * - * @default true - */ - healthRoute: boolean; - - /** - * Add OPTIONS route for preflight requests to allow access all origins. - * - * @default false - */ - allowAllOrigin: boolean; - - /** - * API URL prefix pattern. - * - * @default `api` - */ - prefixPattern: string; -} - -export interface ConnectionConfig { - /** - * Add `Access-Control-Allow-Origin: *` header. - * - * @default false - */ - allowAllOrigin: boolean; - - /** - * API URL prefix pattern. - * - * @default `api` - */ - prefixPattern: string; -} - -export type ParamKeyType = 'string' | 'number' | 'boolean'; -export type ParamValueType = string | number | boolean | null; diff --git a/core/nano-server/tsconfig.json b/core/nano-server/tsconfig.json deleted file mode 100644 index 1181543f3..000000000 --- a/core/nano-server/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../math"}, - {"path": "../type"}, - ] -} diff --git a/core/router/CHANGELOG.md b/core/router/CHANGELOG.md deleted file mode 100644 index 8a514e964..000000000 --- a/core/router/CHANGELOG.md +++ /dev/null @@ -1,299 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/router@1.1.1...@alwatr/router@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/router - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/router@1.1.0...@alwatr/router@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/router - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **router:** add thisArg for routerOutlet ([2bfd1f5](https://github.com/AliMD/alwatr/commit/2bfd1f5b8593f7107b4e84b35600cc07ca3d6c6c)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **router:** home page for sub page routes ([af737f3](https://github.com/AliMD/alwatr/commit/af737f3451fd057f0a2a574be05c34bd06c0f7c0)) -* **router:** make url from router respect empty sectionList ([1fb62f7](https://github.com/AliMD/alwatr/commit/1fb62f774bf5e9e6b68c04d756b32177697e55e8)) - -### Features - -* **router:** internal redirect render template to another route ([de92671](https://github.com/AliMD/alwatr/commit/de9267126935b73dd561d8817346410f00960234)) -* **router:** keepSectionSlice for redirect ([1c3b370](https://github.com/AliMD/alwatr/commit/1c3b370c41f96a8ad612ea9fd5ab9963f6a3b27b)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **route:** cleanup old api ([cf42205](https://github.com/AliMD/alwatr/commit/cf422055b96dbfd33a23732fe3e1def8b86e73c5)) -* **route:** export types ([551f4e3](https://github.com/AliMD/alwatr/commit/551f4e3509cd7b50477c3eefc72a34145e710aa0)) -* **router:** makeRouteContext as soon as posible ([f092b45](https://github.com/AliMD/alwatr/commit/f092b4584cc5fc424ac63cdf40b7c635053b9720)) -* **route:** RouteContextBase type ([9e9ee78](https://github.com/AliMD/alwatr/commit/9e9ee7861bebfe68990171799537d3664ac1a66e)) -* **router:** protocol type ([01fa523](https://github.com/AliMD/alwatr/commit/01fa52381d5ac9760c9af0d595826565548c6841)) - -### Features - -* **route:** makeRouteContext ([16be581](https://github.com/AliMD/alwatr/commit/16be5815a4a44f22bd17c4a87f1b7ef30f9aec6c)) -* **route:** new url method ([580f2b3](https://github.com/AliMD/alwatr/commit/580f2b34396461389da0126d64c3c6ffde99e87b)) -* **route:** redirect with update browser history ([d6d64a0](https://github.com/AliMD/alwatr/commit/d6d64a0fc80284e279db4515d95ff99f530b447f)) -* **router:** enhance logging ([d5930ea](https://github.com/AliMD/alwatr/commit/d5930ea6117b4794c3771a8331c0d6ae063dd52e)) -* **router:** export main api in index and auto init ([58718eb](https://github.com/AliMD/alwatr/commit/58718ebaa10c784255b4a0faa467d35659a1b1df)) -* **router:** initialize process on DOMContentLoaded ([6b114e2](https://github.com/AliMD/alwatr/commit/6b114e2f64a50a40467bff20ecf562d1b7827632)) -* **router:** new api from scratch! ([2b26a8d](https://github.com/AliMD/alwatr/commit/2b26a8d9f95b5968dbda003edc9d540ea95fadd1)) - -# 0.28.0 (2023-01-20) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* **core/router:** preventDefault on svg link click ([e35e935](https://github.com/AliMD/alwatr/commit/e35e9351857d5bcb5128afbc87eb62dd11da865e)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/router - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/router - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **router:** add thisArg for routerOutlet ([2bfd1f5](https://github.com/AliMD/alwatr/commit/2bfd1f5b8593f7107b4e84b35600cc07ca3d6c6c)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **router:** home page for sub page routes ([af737f3](https://github.com/AliMD/alwatr/commit/af737f3451fd057f0a2a574be05c34bd06c0f7c0)) -- **router:** make url from router respect empty sectionList ([1fb62f7](https://github.com/AliMD/alwatr/commit/1fb62f774bf5e9e6b68c04d756b32177697e55e8)) - -### Features - -- **router:** internal redirect render template to another route ([de92671](https://github.com/AliMD/alwatr/commit/de9267126935b73dd561d8817346410f00960234)) -- **router:** keepSectionSlice for redirect ([1c3b370](https://github.com/AliMD/alwatr/commit/1c3b370c41f96a8ad612ea9fd5ab9963f6a3b27b)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **route:** cleanup old api ([cf42205](https://github.com/AliMD/alwatr/commit/cf422055b96dbfd33a23732fe3e1def8b86e73c5)) -- **route:** export types ([551f4e3](https://github.com/AliMD/alwatr/commit/551f4e3509cd7b50477c3eefc72a34145e710aa0)) -- **router:** makeRouteContext as soon as posible ([f092b45](https://github.com/AliMD/alwatr/commit/f092b4584cc5fc424ac63cdf40b7c635053b9720)) -- **route:** RouteContextBase type ([9e9ee78](https://github.com/AliMD/alwatr/commit/9e9ee7861bebfe68990171799537d3664ac1a66e)) -- **router:** protocol type ([01fa523](https://github.com/AliMD/alwatr/commit/01fa52381d5ac9760c9af0d595826565548c6841)) - -### Features - -- **route:** makeRouteContext ([16be581](https://github.com/AliMD/alwatr/commit/16be5815a4a44f22bd17c4a87f1b7ef30f9aec6c)) -- **route:** new url method ([580f2b3](https://github.com/AliMD/alwatr/commit/580f2b34396461389da0126d64c3c6ffde99e87b)) -- **route:** redirect with update browser history ([d6d64a0](https://github.com/AliMD/alwatr/commit/d6d64a0fc80284e279db4515d95ff99f530b447f)) -- **router:** enhance logging ([d5930ea](https://github.com/AliMD/alwatr/commit/d5930ea6117b4794c3771a8331c0d6ae063dd52e)) -- **router:** export main api in index and auto init ([58718eb](https://github.com/AliMD/alwatr/commit/58718ebaa10c784255b4a0faa467d35659a1b1df)) -- **router:** initialize process on DOMContentLoaded ([6b114e2](https://github.com/AliMD/alwatr/commit/6b114e2f64a50a40467bff20ecf562d1b7827632)) -- **router:** new api from scratch! ([2b26a8d](https://github.com/AliMD/alwatr/commit/2b26a8d9f95b5968dbda003edc9d540ea95fadd1)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -**Note:** Version bump only for package @alwatr/router - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **core/router:** preventDefault on svg link click ([e35e935](https://github.com/AliMD/alwatr/commit/e35e9351857d5bcb5128afbc87eb62dd11da865e)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/router - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/router - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/router - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/router - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/router - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/router - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/router - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/router - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/router - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/router - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/router - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/router - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/router - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -**Note:** Version bump only for package @alwatr/router - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/router - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/router - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -### Bug Fixes - -- **router:** export RequestRouteParam type ([d07e0ea](https://github.com/AliMD/alwatr/commit/d07e0eaf7781b8c35f7f47c90fdbbbc7e229a060)) -- **router:** fire first route-change signal as soon as posible ([2ae176b](https://github.com/AliMD/alwatr/commit/2ae176b91f7461258bd7432064d6c81730f6f04e)) -- **router:** outlet default 404 render ([2218483](https://github.com/AliMD/alwatr/commit/22184830c6c93024e335707a60badbbf188745aa)) -- **router:** router.signal type helper ([88b8e26](https://github.com/AliMD/alwatr/commit/88b8e26c83f35c52ff69356f12650e77cc6537d2)) -- **router:** signal define issue ([d3921b5](https://github.com/AliMD/alwatr/commit/d3921b5d8bbe3dc4984a264801f2e992ceb1ece0)) - -### Features - -- **router:** improve 404 template ([3af27f7](https://github.com/AliMD/alwatr/commit/3af27f71dec257e0a245605c6c333816e6e0c317)) - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -### Bug Fixes - -- **router:** updateBrowserHistory issue ([22b16e5](https://github.com/AliMD/alwatr/commit/22b16e599089f3abe5eb9dc285563fa9510ad97e)) - -### Features - -- **router:** make outlet ([45852a8](https://github.com/AliMD/alwatr/commit/45852a809a9f48fb09cf9a8c5ecc3f6519f106cd)) - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -### Bug Fixes - -- **router:** trigger-click error when tagName undefined ([c16328b](https://github.com/AliMD/alwatr/commit/c16328bb6dc96b5c330015ac560cf95920b9c7b2)) - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/router - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -**Note:** Version bump only for package @alwatr/router - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Bug Fixes - -- **router:** build issue for parameterList type [#75](https://github.com/AliMD/alwatr/issues/75) ([5fc1ecd](https://github.com/AliMD/alwatr/commit/5fc1ecd12b938936e2718f9307186493e2712e1f)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -**Note:** Version bump only for package @alwatr/router - -## [0.2.1](https://github.com/AliMD/alwatr/compare/v0.2.0...v0.2.1) (2022-03-05) - -**Note:** Version bump only for package @alwatr/router - -# [0.2.0](https://github.com/AliMD/alwatr/compare/v0.1.2...v0.2.0) (2022-03-05) - -### Bug Fixes - -- **router:** trigger click signal name ([b4a9477](https://github.com/AliMD/alwatr/commit/b4a9477464cb05bb8fa227014de5e8af5b8dd600)) - -### Features - -- **router:** \_updateBrowserHistory ([8933a97](https://github.com/AliMD/alwatr/commit/8933a97cde277708356fc123c7493774cf0b00ec)) -- **router:** base type ([f76d34b](https://github.com/AliMD/alwatr/commit/f76d34b65fbfb9680662dd994136d90be99d496c)) -- **router:** first route request ([e0ad1d4](https://github.com/AliMD/alwatr/commit/e0ad1d403f0023e2df44cb8b7a3a5710fcfbe877)) -- **router:** implement click trigger ([39f5f07](https://github.com/AliMD/alwatr/commit/39f5f075f48ae4323ccca57467dde04ce8c9c3be)) -- **router:** implement popstate trigger ([1613131](https://github.com/AliMD/alwatr/commit/16131312e4bc083ca3d6cf4c1458a93962946ccf)) -- **router:** initialRouter with triggers options ([802405f](https://github.com/AliMD/alwatr/commit/802405fb17846be9fe51a41122c871b5aca9cf6b)) -- **router:** joinParameterList, splitParameterString ([9a4232b](https://github.com/AliMD/alwatr/commit/9a4232b942f36a06cd3278e1a339639c9bcc82fa)) -- **router:** make new package for routing base on signals ([39c9ae8](https://github.com/AliMD/alwatr/commit/39c9ae8cf2d8288cfdefce0826f5fe89b2d7d550)) -- **router:** makeRouteObject ([6e0e5dc](https://github.com/AliMD/alwatr/commit/6e0e5dc6fa10a6c02b1aeb198355040de6e235d2)) -- **router:** parseValue all sections and params value ([9af4079](https://github.com/AliMD/alwatr/commit/9af4079f03dc2b656694f962701fcf75da23fa99)) -- **router:** requestRouteHref ([9341f3f](https://github.com/AliMD/alwatr/commit/9341f3ff444bcdf26fd31f5eca71912dd70b7167)) -- **router:** route base types ([769e863](https://github.com/AliMD/alwatr/commit/769e863b3a1569a01b320390b007bccaa80c3458)) -- **router:** routeSignalProvider ([ad187e7](https://github.com/AliMD/alwatr/commit/ad187e706b6d62abd0668cf9bc7b64c49acab071)) diff --git a/core/router/README.md b/core/router/README.md deleted file mode 100644 index 8a8534691..000000000 --- a/core/router/README.md +++ /dev/null @@ -1,160 +0,0 @@ -# Alwatr Router - `@alwatr/router` - -Elegant powerful router (fundamental advance browser page routing) based on the simplicity of the signals written in tiny TypeScript module. - -## Example usage - -### Prepare - -```ts -import {router} from 'https://esm.run/@alwatr/router'; - -/** - * Initial and config the Router. - */ -router.initial(); - -/** - * Add listener to `route-change` signal. - */ -router.signal.addListener((route) => { - console.log(route); -}); -``` - -### Route object - -Example page url: `https://example.com/product/100/book?cart=1&color=white#description` - -```ts -interface Route { - sectionList: Array; // [product, 100, book] - queryParamList: ParamList; // {cart: 1, color: 'white'} - hash: string; // '#description' -} -``` - -### Dynamic page rendering - -```ts -const routes: routesConfig = { - map: (route: Route) => route.sectionList[0]?.toString(), - - list: { - 'about': { - render: () => html``, - }, - 'product-list': { - render: () => { - import('./page-product-list.js'); // lazy loading page - html``, - } - }, - 'contact': { - render: () => html``, - }, - - 'home': { - render: () => html``, - }, - '404': { - render: () => html``, - }, - }, -}; - -... - -// Any render function can be used. -render() { - router.outlet(routes); -} - -... - -// Request update (call render again) on route change. -router.signal.addListener(() => this.requestUpdate()); -``` - -### Make link from semantic route - -`router.makeUrl(route)` - -Make anchor valid href from route. - -```html - -``` - -### Full example with [lit-element](https://lit.dev) - - -```ts -import {css, html, LitElement} from '@alwatr/element'; -import {customElement} from 'lit/decorators/custom-element.js'; -import {router} from '@alwatr/router'; - -import type {ListenerInterface} from '@alwatr/signal'; -import type {RoutesConfig} from '@alwatr/router'; - -@customElement('my-element') -export class MyElement extends LitElement { - static override styles = css` - :host { - display: block; - } - `; - - private _routes: RoutesConfig = { - map: (route) => route.sectionList[0]?.toString(), - list: { - home: { - render: () => html`Page Home ...`, - }, - about: { - render: () => html`Page About ...`, - }, - article: { - render: (route) => - route.sectionList[1] != null ? - html`Page Article ${route.sectionList[1]} ...` : - this._routes.list['404'], - }, - }, - }; - - constructor() { - super(); - router.initial(); - } - - private _listenerList: Array = []; - - override connectedCallback(): void { - super.connectedCallback(); - this._listenerList.push(router.signal.addListener(() => this.requestUpdate())); - } - - override disconnectedCallback(): void { - super.disconnectedCallback(); - this._listenerList.forEach((listener) => - (listener as ListenerInterface).remove() - ); - } - - override render() { - return html` -

Hello World!

- -
-
  • Home
  • -
  • About
  • -
  • Article 100
  • -
  • Contact
  • -
    - -
    ${router.outlet(this._routes)}
    - `; - } -} -``` diff --git a/core/router/package.json b/core/router/package.json deleted file mode 100644 index 50d75823c..000000000 --- a/core/router/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@alwatr/router", - "version": "1.1.2", - "description": "Elegant powerful router (fundamental advance browser page routing) based on the simplicity of the signals written in tiny TypeScript module.", - "keywords": [ - "router", - "route", - "routing", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/router" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/router#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/math": "^1.1.2", - "@alwatr/signal": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/core/router/src/core.ts b/core/router/src/core.ts deleted file mode 100644 index 097e71af1..000000000 --- a/core/router/src/core.ts +++ /dev/null @@ -1,263 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; -import {isNumber} from '@alwatr/math'; -import {contextConsumer, contextProvider} from '@alwatr/signal'; - -import type {PushState, RouteContext, RouteContextBase, RoutesConfig} from './type.js'; -import type {ParamValueType, QueryParameters} from '@alwatr/type'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/router', - version: _ALWATR_VERSION_, -}); - -export const logger = createLogger('alwatr/router'); - -export const routeContextConsumer = contextConsumer.bind('route-context'); -export const routeContextProvider = contextProvider.bind('route-context'); - -const documentBaseUrl = document.querySelector('base')?.href || '/'; - -/** - * The result of calling the current route's render() callback base on routesConfig. - * - * alias for `routesConfig.templates[routesConfig.routeId(currentRoute)](currentRoute)` - * - * if the location is app root and `routeId()` return noting then redirect to `home` automatically - * if `routeId()` return noting or render function not defined in the `templates` redirected to `_404` routeId. - * - * Example: - * - * ```ts - * const routeConfig = { - * routeId: (routeContext) => routeContext.sectionList[0]?.toString(), - * templates: { - * 'about': () => html``, - * 'product-list': () => { - * import('./page-product-list.js'); // lazy import - * return html``, - * }, - * 'contact': () => html``, - * 'home': () => html``, - * '_404': () => html``, - * }, - * }; - * - * routerOutlet(routeConfig); - * ``` - */ -export const routerOutlet = (routesConfig: RoutesConfig, thisArg: unknown = null): unknown => { - logger.logMethodArgs?.('routerOutlet', {routesConfig}); - - const routeContext = routeContextConsumer.getValue(); - - if (routeContext == null) { - logger.accident('routerOutlet', 'route_context_undefined', 'Route context not provided yet.'); - return; - } - - const routeId = routesConfig.routeId(routeContext) ?? ''; - let render = routesConfig.templates[routeId]; - - while (typeof render === 'string') { - render = routesConfig.templates[render]; - } - - try { - if (typeof render === 'function') { - return render.call(thisArg, routeContext); - } - // else - if (routeId === '') { - return routesConfig.templates.home(routeContext); - } - // else - logger.incident?.('routerOutlet', 'page_not_found', 'Requested page not defined in routesConfig.templates', { - routeId, - routeContext, - routesConfig, - }); - return routesConfig.templates._404(routeContext); - } - catch (err) { - logger.error('routerOutlet', 'render_failed', err); - return routesConfig.templates.home(routeContext); - } -}; - -/** - * Make anchor valid href from RouteContext format. - * - * Example: - * - * ```html - * - * ``` - */ -export const url = (route: Partial): string => { - logger.logMethodArgs?.('url', {route}); - - let href = ''; - - if (Array.isArray(route.sectionList)) { - href += documentBaseUrl + route.sectionList.join('/'); - } - - href += toQueryParamString(route.queryParamList); - - if (route.hash != null && route.hash !== '') { - if (route.hash.indexOf('#') !== 0) { - route.hash = '#' + route.hash; - } - href += route.hash; - } - - return href; -}; - -/** - * Redirect to desire url. - * - * Example: - * - * ```ts - * redirect({ - * sectionList: ['product', 'book', 100], - * queryParamList: {cart: 1}, - * hash: '#description', - * }) - * ``` - */ -export const redirect = ( - route: string | Partial | undefined, - pushState: PushState = true, - keepSectionSlice = 0, -): void => { - if (route == null) return; - logger.logMethodArgs?.('redirect', route); - if (keepSectionSlice > 0 && typeof route === 'object' && Array.isArray(route.sectionList)) { - const routeContext = routeContextConsumer.getValue(); - if (routeContext != null) { - route.sectionList = [...routeContext.sectionList.slice(0, keepSectionSlice), ...route.sectionList]; - } - } - const href = typeof route === 'string' ? route : url(route); - updateBrowserHistory(href, pushState); - routeContextProvider.setValue(makeRouteContext(), {debounce: 'Timeout'}); -}; - -// ---- - -/** - * Update browser history state (history.pushState or history.replaceState). - */ -export const updateBrowserHistory = (url: string, pushState: PushState): void => { - if (pushState === false || globalThis.history == null) return; - - logger.logMethodArgs?.('updateBrowserHistory', url); - if (location.href === url) return; - - if (pushState === 'replace') { - history.replaceState(null, '', url); - } - else { - history.pushState(null, '', url); - } -}; - -/** - * Make route context from url. - */ -export function makeRouteContext(): RouteContext { - logger.logMethod?.('makeRouteContext'); - - const sectionList = location.pathname - .split('/') - .map(_decodeURIComponent) // decode must be after split because encoded '/' maybe include in values. - .filter((section) => section.trim() !== '') - .map(sanitizeValue); - - const queryParamList = parseQueryParamString(location.search); - - const protocol = location.protocol === 'https:' ? 'HTTPS' : 'HTTP'; - - return { - href: location.href, - hostname: location.hostname, - origin: location.origin, - pathname: location.pathname, - port: location.port, - protocol, - sectionList, - queryParamList, - hash: location.hash, - }; -} - -/** - * Sanitize string value to valid parameters types. - */ -export const sanitizeValue = (value?: string | null): ParamValueType => { - if (value == null) { - return ''; - } - // else - value = value.trim(); - if (value === '') { - return value; - } - // else - const lowerValue = value.toLocaleLowerCase(); - if (lowerValue === 'true' || lowerValue === 'false') { - return lowerValue === 'true'; - } - // else - if (isNumber(value)) { - return +value; - } - // else - return value; -}; - -/** - * Convert `QueryParameters` object to `queryParameter` string. - */ -export const toQueryParamString = (queryParameterList?: QueryParameters): string => { - if (queryParameterList == null) return ''; - const list: string[] = []; - for (const key of Object.keys(queryParameterList)) { - list.push(`${key}=${String(queryParameterList[key])}`); - } - return '?' + list.join('&'); -}; - -/** - * Convert `queryParameter` string to `QueryParameters` object. - */ -export const parseQueryParamString = (queryParameter?: string): QueryParameters => { - logger.logMethodArgs?.('parseQueryParamString', {queryParamString: queryParameter}); - - const queryParamList: QueryParameters = {}; - - if (queryParameter == null) return queryParamList; - if (queryParameter.indexOf('?') === 0) queryParameter = queryParameter.substring(1); - if (queryParameter === '') return queryParamList; - - for (const parameter of queryParameter.split('&')) { - const parameterArray = parameter.split('='); - queryParamList[parameterArray[0]] = sanitizeValue(parameterArray[1]); - } - - return queryParamList; -}; - -/** - * decodeURIComponent without throwing error. - */ -export function _decodeURIComponent(val: string): string { - try { - return decodeURIComponent(val); - } - catch (err) { - return val; - } -} diff --git a/core/router/src/index.ts b/core/router/src/index.ts deleted file mode 100644 index a69db07f5..000000000 --- a/core/router/src/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {logger, makeRouteContext, routeContextProvider} from './core.js'; -import {clickTrigger} from './trigger-click.js'; -import {popstateTrigger} from './trigger-popstate.js'; - -export {routerOutlet, routeContextConsumer, url, redirect} from './core.js'; -export {clickTrigger, popstateTrigger}; -export type {RouteContext, RoutesConfig} from './type.js'; - -/** - * Initial process when dom loaded. - */ -((): void => { - logger.logMethod?.('initialize'); - - clickTrigger.enable = popstateTrigger.enable = true; - - if (routeContextProvider.getValue() === undefined) { - routeContextProvider.setValue(makeRouteContext(), {debounce: 'Timeout'}); - } - else { - logger.incident?.('initialize', 'skip_route_context', 'Route context already have value'); - } -})(); diff --git a/core/router/src/trigger-click.ts b/core/router/src/trigger-click.ts deleted file mode 100644 index 0cfbbba12..000000000 --- a/core/router/src/trigger-click.ts +++ /dev/null @@ -1,95 +0,0 @@ -import {logger, redirect} from './core.js'; - -let _enabled = false; - -/** - * A navigation trigger for Alwatr Router that translated clicks on `` links into navigation signal. - * - * Only regular clicks on in-app links are translated. - * Only primary mouse button, no modifier keys, the target href is within the app's URL space. - */ -export const clickTrigger = { - /** - * Alwatr router global click handler. - */ - _clickHandler(event: MouseEvent): void { - logger.logMethod?.('_clickHandler'); - - if ( - // ignore if the default action is prevented. - event.defaultPrevented || - // ignore if the left mouse button is not pressed. - event.button !== 0 || - // ignore if the meta key is pressed. - event.metaKey || - // ignore if the ctrl key is pressed. - event.ctrlKey || - // ignore if the shift key is pressed. - event.shiftKey || - // ignore if the alt key is pressed. - event.altKey - ) { - return; - } - - // prettier-ignore - // find the element that the click is at (or within) - const anchor = event - .composedPath() - .find( - (target) => (target as HTMLElement)?.tagName?.toLowerCase() === 'a', - ) as HTMLAnchorElement | undefined; - - if ( - // ignore if the anchor is not found. - anchor == null || - // ignore if the anchor is not an element. - anchor.tagName?.toLowerCase() !== 'a' || - // ignore if the element has a non-default target. - (typeof anchor.target === 'string' && anchor.target !== '' && anchor.target.toLowerCase() !== '_self') || - // ignore if the element has a download attribute. - anchor.hasAttribute('download') || - // ignore if the element has a rel attribute. - anchor.getAttribute('rel') === 'external' || - // ignore if the element has a `router-ignore` attribute. - anchor.hasAttribute('router-ignore') || - // ignore the anchor protocols other than HTTP and HTTPS (mailto, ftp, ...). - (anchor.protocol !== 'http:' && anchor.protocol !== 'https:') || - // ignore if the anchor points to another origin (include the port number). - anchor.href.indexOf(window.location.origin) !== 0 - ) { - return; - } - - event.preventDefault(); - - // ignore if the target URL is the current page(after prevent default). - if (anchor.href === window.location.href) { - return; - } - - // if none of the above, convert the click into a navigation signal. - redirect(anchor.href, true); - - // for a click event, the scroll is reset to the top position. - if (event.type === 'click') { - window.scrollTo(0, 0); - } - }, - - set enable(enable: boolean) { - logger.logProperty?.('clickTrigger.enable', enable); - - if (enable && !_enabled) { - window.document.addEventListener('click', clickTrigger._clickHandler); - } - if (!enable && _enabled) { - window.document.removeEventListener('click', clickTrigger._clickHandler); - } - _enabled = enable; - }, - - get enable(): boolean { - return _enabled; - }, -}; diff --git a/core/router/src/trigger-popstate.ts b/core/router/src/trigger-popstate.ts deleted file mode 100644 index de8b1b485..000000000 --- a/core/router/src/trigger-popstate.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {logger, redirect} from './core.js'; - -let _enabled = false; - -/** - * A navigation trigger for Alwatr Router that translates popstate events into navigation signal. - */ -export const popstateTrigger = { - /** - * Alwatr router global popstate handler. - */ - _popstateHandler(event: PopStateEvent): void { - const href = globalThis.location?.href; - logger.logMethodArgs?.('_popstateHandler', href); - if (event.state === 'router-ignore') return; - redirect(href, false); - }, - - set enable(enable: boolean) { - logger.logProperty?.('popstateTrigger.enable', enable); - - if (enable && !_enabled) { - globalThis.addEventListener('popstate', popstateTrigger._popstateHandler); - } - if (!enable && _enabled) { - globalThis.removeEventListener('popstate', popstateTrigger._popstateHandler); - } - _enabled = enable; - }, - - get enable(): boolean { - return _enabled; - }, -}; diff --git a/core/router/src/type.ts b/core/router/src/type.ts deleted file mode 100644 index 5635c7551..000000000 --- a/core/router/src/type.ts +++ /dev/null @@ -1,158 +0,0 @@ -import type {QueryParameters, StringifyableRecord} from '@alwatr/type'; - -/** - * Route context base type. - * - * Sample: - * - * ```js - * // http://example.com:8080/product/100/book?cart=1&color=white#description - * { - * sectionList: [product, 100, book], - * queryParamList: {cart: 1, color: 'white'}, - * hash: '#description', - * } - * ``` - */ -export interface RouteContextBase extends StringifyableRecord { - sectionList: (string | number | boolean)[]; - queryParamList: QueryParameters; - hash: string; -} - -/** - * Global route context type. - * - * Sample: - * - * ```js - * { - * href: 'http://example.com:8080/product/100/book?cart=1&color=white#description' - * pathname: '/product/100/book', - * hostname: 'example.com', - * port: 8080, - * origin: http://example.com:8080, - * protocol: 'http', - * sectionList: [product, 100, book], - * queryParamList: {cart: 1, color: 'white'}, - * hash: '#description', - * } - * ``` - */ -export interface RouteContext extends RouteContextBase { - href: string; - pathname: string; - hostname: string; - port: string; - origin: string; - protocol: 'HTTP' | 'HTTPS'; -} - -export type PushState = boolean | 'replace'; - -/** - * Initial router options. - */ -export interface InitOptions { - /** - * A navigation trigger for Alwatr Router that translated clicks on `` links into navigation signal. - * - * Only regular clicks on in-app links are translated. - * Only primary mouse button, no modifier keys, the target href is within the app's URL space. - * - * @default true - */ - clickTrigger?: boolean; - - /** - * @TODO: description - * - * @default true - */ - popstateTrigger?: boolean; -} - -/** - * Type of `routeConfig.templates` items. - */ -export type TemplateCallback = (routeContext: RouteContext) => unknown; - -/** - * Type of `routeConfig.templates`. - */ -export interface RouterTemplates { - [x: string]: TemplateCallback | string | undefined; - home: TemplateCallback; - _404: TemplateCallback; -} - -/** - * Routes config for routerOutlet. - * - * The `routerOutlet` return `list[map(currentRoute)].render(currentRoute)`. - * - * Example: - * - * ```ts - * const routeConfig = { - * routeId: (routeContext) => routeContext.sectionList[0]?.toString(), - * templates: { - * 'about': () => html``, - * 'product-list': () => { - * import('./page-product-list.js'); // lazy import - * return html``, - * }, - * 'contact': () => html``, - * 'home': () => html``, - * '_404': () => html``, - * }, - * }; - * - * routerOutlet(routeConfig); - * ``` - */ -export interface RoutesConfig { - /** - * Define function to generate routeId (same as pageName) from current routeContext. - * - * if the location is app root and `routeId()` return noting then redirect to `home` automatically - * if `routeId()` return noting or render function not defined in the `templates` redirected to `_404` routeId. - * - * Example: - * - * ```ts - * router.outlet({ - * routeId: (routeContext) => routeContext.sectionList[0]?.toString(), - * templates: { - * // ... - * }, - * }) - * ``` - */ - routeId: (routeContext: RouteContext) => string | undefined; - - /** - * Define templates of the routes (pages). - * - * Example: - * - * ```ts - * const routeConfig = { - * routeId: (routeContext) => routeContext.sectionList[0]?.toString(), - * templates: { - * 'about': () => html``, - * 'product-list': () => { - * import('./page-product-list.js'); // lazy import - * return html``, - * }, - * 'contact': () => html``, - * 'home': () => html``, - * '_404': () => html``, - * }, - * }; - * - * routerOutlet(routeConfig); - * ``` - */ - templates: RouterTemplates; -} diff --git a/core/router/tsconfig.json b/core/router/tsconfig.json deleted file mode 100644 index df45a08b6..000000000 --- a/core/router/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../math"}, - {"path": "../type"}, - {"path": "../signal"} - ] -} diff --git a/core/router2/CHANGELOG.md b/core/router2/CHANGELOG.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/core/router2/README.md b/core/router2/README.md deleted file mode 100644 index 672ca02c8..000000000 --- a/core/router2/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Router2 - `@alwatr/router2` - -Elegant powerful router (fundamental advance browser page routing) based on the simplicity of the signals written in tiny TypeScript module. - -## Example usage diff --git a/core/router2/package.json b/core/router2/package.json deleted file mode 100644 index ed74cf7aa..000000000 --- a/core/router2/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@alwatr/router2", - "version": "1.0.0", - "description": "Elegant powerful router (fundamental advance browser page routing) based on the simplicity of the signals written in tiny TypeScript module.", - "keywords": [ - "router", - "route", - "routing", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "private": "true", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/router2" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/router2#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.0.0", - "@alwatr/math": "^1.0.0", - "@alwatr/signal2": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/core/router2/src/index.ts b/core/router2/src/index.ts deleted file mode 100644 index 8492d77eb..000000000 --- a/core/router2/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {AlwatrRouter} from './router2.js'; - -export type {RouteContext} from './type.js'; - -export const router = new AlwatrRouter({ - clickTrigger: true, - popstateTrigger: true, -}); diff --git a/core/router2/src/router2.ts b/core/router2/src/router2.ts deleted file mode 100644 index 2a5f9c77c..000000000 --- a/core/router2/src/router2.ts +++ /dev/null @@ -1,295 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; -import {AlwatrObservable} from '@alwatr/signal2/observable.js'; - -import type {RouterConfig, PushState, RouteContext, RouteContextBase} from './type.js'; -import type {QueryParameters} from '@alwatr/type'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/router2', - version: _ALWATR_VERSION_, -}); - -const documentBaseUrl = document.querySelector('base')?.href || '/'; - -export class AlwatrRouter extends AlwatrObservable { - protected override _logger = createLogger('alwatr/router2'); - - get route(): RouteContext { - return this._$data ?? this._makeRouteContext(); - } - - constructor(config: RouterConfig) { - super({name: 'alwatr_router'}); - - this._notify(this._makeRouteContext()); - this._popstateHandler = this._popstateHandler.bind(this); - this._clickHandler = this._clickHandler.bind(this); - - this.popstateTrigger = config.popstateTrigger === true; - this.clickTrigger = config.clickTrigger === true; - } - - /** - * Make anchor valid href from RouteContext format. - * - * Example: - * - * ```html - * - * ``` - */ - url(route: Partial): string { - let href = ''; - - if (Array.isArray(route.sectionList)) { - href += documentBaseUrl + route.sectionList.join('/'); - } - - href += this._toQueryParamString(route.queryParamList); - - if (route.hash != null && route.hash !== '') { - if (route.hash.indexOf('#') !== 0) { - route.hash = '#' + route.hash; - } - href += route.hash; - } - - return href; - } - - /** - * Redirect to desire url. - * - * Example: - * - * ```ts - * redirect({ - * sectionList: ['product', 'book', 100], - * queryParamList: {cart: 1}, - * hash: '#description', - * }) - * ``` - */ - redirect( - route: string | Partial | undefined, - pushState: PushState = true, - keepSectionSlice = 0, - ): void { - if (route == null) return; - this._logger.logMethodArgs?.('redirect', route); - if (keepSectionSlice > 0 && typeof route === 'object' && Array.isArray(route.sectionList)) { - const routeContext = this._getData(); - if (routeContext != null) { - route.sectionList = [...routeContext.sectionList.slice(0, keepSectionSlice), ...route.sectionList]; - } - } - const href = typeof route === 'string' ? route : this.url(route); - this._updateBrowserHistory(href, pushState); - this._notify(this._makeRouteContext()); - } - - /** - * Update browser history state (history.pushState or history.replaceState). - */ - protected _updateBrowserHistory(url: string, pushState: PushState): void { - if (pushState === false || globalThis.history == null) return; - - this._logger.logMethodArgs?.('updateBrowserHistory', url); - if (location.href === url) return; - - if (pushState === 'replace') { - history.replaceState(null, '', url); - } - else { - history.pushState(null, '', url); - } - } - - /** - * Make route context from url. - */ - protected _makeRouteContext(): RouteContext { - this._logger.logMethod?.('makeRouteContext'); - - const sectionList = location.pathname - .split('/') - .map(this._decodeURIComponent) // decode must be after split because encoded '/' maybe include in values. - .filter((section) => section.trim() !== ''); - - const queryParamList = this._parseQueryParamString(location.search); - - const protocol = location.protocol === 'https:' ? 'HTTPS' : 'HTTP'; - - return { - href: location.href, - hostname: location.hostname, - origin: location.origin, - pathname: location.pathname, - port: location.port, - protocol, - sectionList, - queryParamList, - hash: location.hash, - }; - } - - /** - * Convert `QueryParameters` object to `queryParameter` string. - */ - protected _toQueryParamString(queryParameterList?: QueryParameters): string { - if (queryParameterList == null) return ''; - const list: string[] = []; - for (const key of Object.keys(queryParameterList)) { - list.push(`${key}=${String(queryParameterList[key])}`); - } - return '?' + list.join('&'); - } - - /** - * Convert `queryParameter` string to `QueryParameters` object. - */ - protected _parseQueryParamString(queryParameter?: string): QueryParameters { - this._logger.logMethodArgs?.('parseQueryParamString', {queryParamString: queryParameter}); - - const queryParamList: QueryParameters = {}; - - if (queryParameter == null) return queryParamList; - if (queryParameter.indexOf('?') === 0) queryParameter = queryParameter.substring(1); - if (queryParameter === '') return queryParamList; - - for (const parameter of queryParameter.split('&')) { - const parameterArray = parameter.split('='); - queryParamList[parameterArray[0]] = parameterArray[1] ?? ''; - } - - return queryParamList; - } - - /** - * decodeURIComponent without throwing error. - */ - protected _decodeURIComponent(val: string): string { - try { - return decodeURIComponent(val); - } - catch (err) { - return val; - } - } - - protected _$popstateTrigger = false; - - /** - * Alwatr router global popstate handler. - */ - protected _popstateHandler(event: PopStateEvent): void { - const href = globalThis.location?.href; - this._logger.logMethodArgs?.('_popstateHandler', href); - if (event.state === 'router-ignore') return; - this.redirect(href, false); - } - - set popstateTrigger(enable: boolean) { - this._logger.logProperty?.('popstateTrigger', enable); - if (this._$popstateTrigger === enable) return; - - if (enable) { - globalThis.addEventListener('popstate', this._popstateHandler); - } - else { - globalThis.removeEventListener('popstate', this._popstateHandler); - } - this._$popstateTrigger = enable; - } - - get popstateTrigger(): boolean { - return this._$popstateTrigger; - } - - protected _$clickTrigger = false; - - /** - * Alwatr router global click handler. - */ - protected _clickHandler(event: MouseEvent): void { - this._logger.logMethod?.('_clickHandler'); - - if ( - // ignore if the default action is prevented. - event.defaultPrevented || - // ignore if the left mouse button is not pressed. - event.button !== 0 || - // ignore if the meta key is pressed. - event.metaKey || - // ignore if the ctrl key is pressed. - event.ctrlKey || - // ignore if the shift key is pressed. - event.shiftKey || - // ignore if the alt key is pressed. - event.altKey - ) { - return; - } - - // prettier-ignore - // find the element that the click is at (or within) - const anchor = event - .composedPath() - .find( - (target) => (target as HTMLElement)?.tagName?.toLowerCase() === 'a', - ) as HTMLAnchorElement | undefined; - - if ( - // ignore if the anchor is not found. - anchor == null || - // ignore if the anchor is not an element. - anchor.tagName?.toLowerCase() !== 'a' || - // ignore if the element has a non-default target. - (typeof anchor.target === 'string' && anchor.target !== '' && anchor.target.toLowerCase() !== '_self') || - // ignore if the element has a download attribute. - anchor.hasAttribute('download') || - // ignore if the element has a rel attribute. - anchor.getAttribute('rel') === 'external' || - // ignore if the element has a `router-ignore` attribute. - anchor.hasAttribute('router-ignore') || - // ignore the anchor protocols other than HTTP and HTTPS (mailto, ftp, ...). - (anchor.protocol !== 'http:' && anchor.protocol !== 'https:') || - // ignore if the anchor points to another origin (include the port number). - anchor.href.indexOf(window.location.origin) !== 0 - ) { - return; - } - - event.preventDefault(); - - // ignore if the target URL is the current page(after prevent default). - if (anchor.href === window.location.href) { - return; - } - - // if none of the above, convert the click into a navigation signal. - this.redirect(anchor.href, true); - - // for a click event, the scroll is reset to the top position. - if (event.type === 'click') { - window.scrollTo(0, 0); - } - } - - set clickTrigger(enable: boolean) { - this._logger.logProperty?.('clickTrigger.enable', enable); - if (this._$clickTrigger === enable) return; - - if (enable) { - window.document.addEventListener('click', this._clickHandler); - } - else { - window.document.removeEventListener('click', this._clickHandler); - } - this._$clickTrigger = enable; - } - - get clickTrigger(): boolean { - return this._$clickTrigger; - } -} diff --git a/core/router2/src/type.ts b/core/router2/src/type.ts deleted file mode 100644 index 78ed6a48c..000000000 --- a/core/router2/src/type.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type {QueryParameters} from '@alwatr/type'; - -/** - * Route context base type. - * - * Sample: - * - * ```js - * // http://example.com:8080/product/100/book?cart=1&color=white#description - * { - * sectionList: [product, 100, book], - * queryParamList: {cart: 1, color: 'white'}, - * hash: '#description', - * } - * ``` - */ -export interface RouteContextBase { - sectionList: string[]; - queryParamList: QueryParameters; - hash: string; -} - -/** - * Global route context type. - * - * Sample: - * - * ```js - * { - * href: 'http://example.com:8080/product/100/book?cart=1&color=white#description' - * pathname: '/product/100/book', - * hostname: 'example.com', - * port: 8080, - * origin: http://example.com:8080, - * protocol: 'http', - * sectionList: [product, 100, book], - * queryParamList: {cart: 1, color: 'white'}, - * hash: '#description', - * } - * ``` - */ -export interface RouteContext extends RouteContextBase { - href: string; - pathname: string; - hostname: string; - port: string; - origin: string; - protocol: 'HTTP' | 'HTTPS'; -} - -export type PushState = boolean | 'replace'; - -/** - * Initial router options. - */ -export interface RouterConfig { - /** - * A navigation trigger for Alwatr Router that translated clicks on `` links into navigation signal. - * - * Only regular clicks on in-app links are translated. - * Only primary mouse button, no modifier keys, the target href is within the app's URL space. - * - * @default true - */ - clickTrigger?: boolean; - - /** - * @TODO: description - * - * @default true - */ - popstateTrigger?: boolean; -} diff --git a/core/router2/tsconfig.json b/core/router2/tsconfig.json deleted file mode 100644 index 84df00358..000000000 --- a/core/router2/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../math"}, - {"path": "../type"}, - {"path": "../signal2"} - ] -} diff --git a/core/server-context/CHANGELOG.md b/core/server-context/CHANGELOG.md deleted file mode 100644 index cd369cf99..000000000 --- a/core/server-context/CHANGELOG.md +++ /dev/null @@ -1,56 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/server-context@1.1.1...@alwatr/server-context@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/server-context - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/server-context@1.1.0...@alwatr/server-context@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/server-context - -# 1.1.0 (2023-09-12) - -### Bug Fixes - -* **server-context:** convert some `super` to `this` ([3a79736](https://github.com/AliMD/alwatr/commit/3a7973658daf2ee364aced0c7c4880041dfc9a1a)) -* **server-context:** export `server-context` to use ([b71c9a5](https://github.com/AliMD/alwatr/commit/b71c9a5efa35ac4b5e53fd5cd966277abd7ff592)) - -### Features - -* **server-context:** AlwatrServerContext ([2ca976a](https://github.com/AliMD/alwatr/commit/2ca976afd50b3022a264eef880274a9e1496056a)) -* **server-context:** dynamic extra state/event type ([1cb6db1](https://github.com/AliMD/alwatr/commit/1cb6db1573f9349edecdc7d73e66243cadea40d4)) - -# 1.0.0 (2023-06-14) - -### Bug Fixes - -* **server-context:** add `_request` & `_actionRecord` ([5037fec](https://github.com/AliMD/alwatr/commit/5037fecf68fc59727c7d66afdc2accce4d78f107)) -* **server-context:** arg of `request` in `AlwatrApiRequest` ([d1835eb](https://github.com/AliMD/alwatr/commit/d1835eba2ac024d297b439721a57515eca798f32)) -* **server-context:** export `api-request` ([b91fe96](https://github.com/AliMD/alwatr/commit/b91fe964a14e75aa0d544437e6aa4de1e990272d)) -* **server-context:** review and fix runtime issues ([e2f6814](https://github.com/AliMD/alwatr/commit/e2f6814a0ad8d2da8f2b76a9c10706234364c3c9)) -* **server-context:** tsconfig ([b200a21](https://github.com/AliMD/alwatr/commit/b200a2171fe68f04e7dd839c1746160281ff847b)) -* **server-request:** review and enhance ([ae3b530](https://github.com/AliMD/alwatr/commit/ae3b5301da7a0de76ed1eafbeca62fa34695892f)) - -### Features - -* **api-request:** base on server-request ([8cfd0d9](https://github.com/AliMD/alwatr/commit/8cfd0d971e9b06c3859db3bdaac3afb43ed996ab)) -* **server-context:** add new module ([01d843c](https://github.com/AliMD/alwatr/commit/01d843c4fb6a363dedb6c1fa23d8fa5f87b50cef)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **server-context:** add `_request` & `_actionRecord` ([5037fec](https://github.com/AliMD/alwatr/commit/5037fecf68fc59727c7d66afdc2accce4d78f107)) -- **server-context:** arg of `request` in `AlwatrApiRequest` ([d1835eb](https://github.com/AliMD/alwatr/commit/d1835eba2ac024d297b439721a57515eca798f32)) -- **server-context:** export `api-request` ([b91fe96](https://github.com/AliMD/alwatr/commit/b91fe964a14e75aa0d544437e6aa4de1e990272d)) -- **server-context:** review and fix runtime issues ([e2f6814](https://github.com/AliMD/alwatr/commit/e2f6814a0ad8d2da8f2b76a9c10706234364c3c9)) -- **server-context:** tsconfig ([b200a21](https://github.com/AliMD/alwatr/commit/b200a2171fe68f04e7dd839c1746160281ff847b)) -- **server-request:** review and enhance ([ae3b530](https://github.com/AliMD/alwatr/commit/ae3b5301da7a0de76ed1eafbeca62fa34695892f)) - -### Features - -- **api-request:** base on server-request ([8cfd0d9](https://github.com/AliMD/alwatr/commit/8cfd0d971e9b06c3859db3bdaac3afb43ed996ab)) -- **server-context:** add new module ([01d843c](https://github.com/AliMD/alwatr/commit/01d843c4fb6a363dedb6c1fa23d8fa5f87b50cef)) diff --git a/core/server-context/README.md b/core/server-context/README.md deleted file mode 100644 index 23483b09f..000000000 --- a/core/server-context/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Server Context - `@alwatr/server-context` - -Elegant powerful server-context manager base on alwatr signal, written in tiny TypeScript, ES module. diff --git a/core/server-context/package.json b/core/server-context/package.json deleted file mode 100644 index 28e68e446..000000000 --- a/core/server-context/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@alwatr/server-context", - "version": "1.1.2", - "description": "Elegant powerful context manager base on alwatr signal, written in tiny TypeScript, ES module.", - "keywords": [ - "context", - "server-context", - "signal", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/server-context" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/server-context#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/fetch": "^1.1.2", - "@alwatr/fsm": "^1.1.2", - "@alwatr/logger": "^1.1.2", - "@alwatr/signal": "^1.1.2", - "@alwatr/util": "^1.2.0", - "tslib": "^2.6.2" - } -} diff --git a/core/server-context/src/api-request.ts b/core/server-context/src/api-request.ts deleted file mode 100644 index a6cc1a133..000000000 --- a/core/server-context/src/api-request.ts +++ /dev/null @@ -1,86 +0,0 @@ -import {NODE_MODE} from '@alwatr/logger'; -import {getClientId} from '@alwatr/util'; - -import {AlwatrServerRequestBase} from './server-request.js'; - -import type {ServerRequestState} from './server-request.js'; -import type {FetchOptions} from '@alwatr/fetch/type.js'; -import type {AlwatrServiceResponse} from '@alwatr/type'; - -export abstract class AlwatrApiRequestBase< - T extends AlwatrServiceResponse = AlwatrServiceResponse, - ExtraState extends string = never, - ExtraEvent extends string = never -> extends AlwatrServerRequestBase { - protected _responseJson?: T; - - protected override async _$fetch(options: FetchOptions): Promise { - if (!NODE_MODE) { - options.headers ??= {}; - if (!options.headers['client-id']) { - options.headers['client-id'] = getClientId(); - } - } - - await super._$fetch(options); - - let responseText: string; - try { - responseText = await this._response!.text(); - } - catch (err) { - this._logger.error('_$fetch', 'invalid_response_text', err); - throw err; - } - - try { - this._responseJson = JSON.parse(responseText); - } - catch (err) { - this._logger.error('_$fetch', 'invalid_response_json', err, {responseText}); - throw err; - } - - const responseJson = this._responseJson!; - if (responseJson.ok !== true) { - if (typeof responseJson.errorCode === 'string') { - this._logger.accident('_$fetch', responseJson.errorCode, 'fetch response not ok', {responseJson}); - throw new Error(responseJson.errorCode); - } - else { - this._logger.error('_$fetch', 'fetch_nok', 'fetch response json not ok', {responseJson}); - throw new Error('fetch_nok'); - } - } - } - - protected override _reset(): void { - super._reset(); - delete this._responseJson; - } -} - -export class AlwatrApiRequest extends AlwatrApiRequestBase { - /** - * Current state. - */ - get state(): ServerRequestState { - return this._state; - } - - get response(): T | undefined { - return this._responseJson; - } - - get _fetchResponse(): Response | undefined { - return this._response; - } - - request(options?: Partial): void { - return this._request(options); - } - - cleanup(): void { - this._reset(); - } -} diff --git a/core/server-context/src/index.ts b/core/server-context/src/index.ts deleted file mode 100644 index 2e4921530..000000000 --- a/core/server-context/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './server-request.js'; -export * from './api-request.js'; -export * from './server-context.js'; diff --git a/core/server-context/src/server-context.ts b/core/server-context/src/server-context.ts deleted file mode 100644 index 010a9f018..000000000 --- a/core/server-context/src/server-context.ts +++ /dev/null @@ -1,145 +0,0 @@ -import {AlwatrApiRequestBase} from './api-request.js'; - -import type {ServerRequestState, ServerRequestEvent, ServerRequestConfig} from './server-request.js'; -import type {FetchOptions} from '@alwatr/fetch/type.js'; -import type {AlwatrServiceResponse} from '@alwatr/type'; - -type ExtraState = 'offlineCheck' | 'reloading' | 'reloadingFailed'; -export type ServerContextState = ServerRequestState | ExtraState; - -type ExtraEvent = 'cacheNotFound'; -export type ServerContextEvent = ServerRequestEvent | ExtraEvent; - -export abstract class AlwatrServerContextBase< - T extends AlwatrServiceResponse = AlwatrServiceResponse -> extends AlwatrApiRequestBase { - protected _context?: T; - constructor(protected override _config: ServerRequestConfig) { - super(_config); - - this._stateRecord = { - initial: { - request: 'offlineCheck', - }, - /** - * Just check offline cache data before online request. - */ - offlineCheck: { - requestFailed: 'failed', - cacheNotFound: 'loading', - requestSuccess: 'reloading', - }, - /** - * First loading without any cached context. - */ - loading: { - requestFailed: 'failed', - requestSuccess: 'complete', - }, - /** - * First loading failed without any cached context. - */ - failed: { - request: 'offlineCheck', - }, - reloading: { - requestFailed: 'reloadingFailed', - requestSuccess: 'complete', - }, - /** - * Reloading failed with previously cached context exist. - */ - reloadingFailed: { - request: 'reloading', - }, - complete: { - request: 'reloading', - }, - }; - - this._actionRecord = { - _on_offlineCheck_enter: this._$offlineRequestAction, - _on_loading_enter: this._$onlineRequestAction, - _on_reloading_enter: this._$onlineRequestAction, - _on_requestSuccess: this._$updateContextAction, - }; - } - - protected _$offlineRequestAction(): void { - this._logger.logMethod?.('_$offlineRequestAction'); - this._setOptions({cacheStrategy: 'cache_only'}); - this._$requestAction(); - } - - protected _$onlineRequestAction(): void { - this._logger.logMethod?.('_$onlineRequestAction'); - this._setOptions({cacheStrategy: 'update_cache'}); - this._$requestAction(); - } - - protected _$updateContextAction(): void { - if (this._responseJson === undefined) { - this._logger.accident('_$updateContextAction', 'no_response_json', 'this._responseJson undefined'); - return; - } - - this._logger.logMethod?.('_$updateContextAction'); - - if ( - this._context === undefined || - this._responseJson.meta?.lastUpdated === undefined || - this._responseJson.meta.lastUpdated !== this._context.meta?.lastUpdated - ) { - this._context = this._responseJson; - } - - this._cleanup(); - } - - protected override async _$requestAction(): Promise { - this._logger.logMethod?.('_$requestAction'); - - try { - if (this._$fetchOptions === undefined) { - throw new Error('invalid_fetch_options'); - } - - await this._$fetch(this._$fetchOptions); - - this._transition('requestSuccess'); - } - catch (err) { - if ((err as Error).message === 'fetch_cache_not_found') { - this._transition('cacheNotFound'); - } - else { - this._logger.error('_$requestAction', 'fetch_failed', err); - this._transition('requestFailed'); - } - } - } - - protected _cleanup(): void { - delete this._response; - delete this._responseJson; - } -} - -export class AlwatrServerContext< - T extends AlwatrServiceResponse = AlwatrServiceResponse -> extends AlwatrServerContextBase { - /** - * Current state. - */ - get state(): ServerContextState { - return this._state; - } - - get context(): T | undefined { - return this._context; - } - - request(options?: Partial): void { - return this._request(options); - } -} diff --git a/core/server-context/src/server-request.ts b/core/server-context/src/server-request.ts deleted file mode 100644 index 4c7f0a290..000000000 --- a/core/server-context/src/server-request.ts +++ /dev/null @@ -1,121 +0,0 @@ -import {fetch} from '@alwatr/fetch'; -import {ActionRecord, FiniteStateMachineBase, StateRecord} from '@alwatr/fsm2'; - -import type {FetchOptions} from '@alwatr/fetch/type.js'; - -export interface ServerRequestConfig extends Partial { - name: string; -} - -export type ServerRequestState = 'initial' | 'loading' | 'failed' | 'complete'; -export type ServerRequestEvent = 'request' | 'requestFailed' | 'requestSuccess'; - -export abstract class AlwatrServerRequestBase< - ExtraState extends string = never, - ExtraEvent extends string = never -> extends FiniteStateMachineBase { - protected _$fetchOptions?: FetchOptions; - protected _response?: Response; - - protected override _stateRecord = { - initial: { - request: 'loading', - }, - loading: { - requestFailed: 'failed', - requestSuccess: 'complete', - }, - failed: { - request: 'loading', - }, - complete: { - request: 'loading', - }, - } as StateRecord; - - protected override _actionRecord = { - _on_loading_enter: this._$requestAction, - } as ActionRecord; - - constructor(protected _config: ServerRequestConfig) { - super({name: _config.name, initialState: 'initial'}); - } - - protected _request(options?: Partial): void { - this._logger.logMethodArgs?.('_request', options); - this._setOptions(options); - this._transition('request'); - } - - protected async _$fetch(options: FetchOptions): Promise { - this._logger.logMethodArgs?.('_$fetch', options); - this._response = await fetch(options); - - if (!this._response.ok) { - throw new Error('fetch_nok'); - } - } - - protected async _$requestAction(): Promise { - this._logger.logMethod?.('_$requestAction'); - - try { - if (this._$fetchOptions === undefined) { - throw new Error('invalid_fetch_options'); - } - - await this._$fetch(this._$fetchOptions); - - this._transition('requestSuccess'); - } - catch (err) { - this._logger.error('_$requestAction', 'fetch_failed', err); - this._transition('requestFailed'); - } - } - - protected _setOptions(options?: Partial): void { - this._logger.logMethodArgs?.('_setOptions', {options}); - - const fetchOptions = { - ...this._config, - ...options, - queryParameters: { - ...this._config.queryParameters, - ...options?.queryParameters, - }, - }; - - if (fetchOptions.url == null) { - throw new Error('invalid_fetch_options'); - } - - this._$fetchOptions = fetchOptions as FetchOptions; - } - - protected override _reset(): void { - super._reset(); - delete this._response; - } -} - -export class AlwatrServerRequest extends AlwatrServerRequestBase { - /** - * Current state. - */ - get state(): ServerRequestState { - return this._state; - } - - get response(): Response | undefined { - return this._response; - } - - request(options?: Partial): void { - return this._request(options); - } - - cleanup(): void { - this._reset(); - } -} diff --git a/core/server-context/tsconfig.json b/core/server-context/tsconfig.json deleted file mode 100644 index a4f764ffe..000000000 --- a/core/server-context/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../signal2"}, - {"path": "../util"}, - {"path": "../fetch"}, - {"path": "../fsm2"}, - {"path": "../type"} - ] -} diff --git a/core/signal/CHANGELOG.md b/core/signal/CHANGELOG.md deleted file mode 100644 index 9833e3cdd..000000000 --- a/core/signal/CHANGELOG.md +++ /dev/null @@ -1,371 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/signal@1.1.1...@alwatr/signal@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/signal - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/signal@1.1.0...@alwatr/signal@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/signal - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -* **signal:** dont receivePrevious when listener is disabled ([68ae207](https://github.com/AliMD/alwatr/commit/68ae207ce9ecf104922b24910d8dfcedb13acde7)) -* **signal:** requestableContextProvider.getValue ([0a7111d](https://github.com/AliMD/alwatr/commit/0a7111da7b8eb004566922dc9b35edfc02a55147)) - -### Features - -* **signal:** new RequestableContext with state ([b8a8e55](https://github.com/AliMD/alwatr/commit/b8a8e550d3952863d85ba9d9d87513a668a9430d)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **signal:** NextCycle with own detail ([01f3c79](https://github.com/AliMD/alwatr/commit/01f3c79500927f6384a33abcc9b0cb2355794b3e)) -* **signal:** nodejs compatibility ([69d8a60](https://github.com/AliMD/alwatr/commit/69d8a60ad64d44ee7c3ced002e702f13408a5a50)) -* **signal:** requestableContextConsumer bind issue ([66467f6](https://github.com/AliMD/alwatr/commit/66467f6e5681d84d7f2e0b353206d4bb579b26f2)) -* **signal:** requestContext dispatch issue ([e937ebd](https://github.com/AliMD/alwatr/commit/e937ebd3a90fc6a9946f5c35ef4f6f40b6ab4b00)) - -### Features - -* **signal:** add untilChange for contextProvider ([cb44916](https://github.com/AliMD/alwatr/commit/cb4491698fd5ddfbe055032fc2cb50691de31194)) -* **signal:** defineCommand return ListenerSpec ([21fecac](https://github.com/AliMD/alwatr/commit/21fecacb6aa9423da9e3c177a4bbc59952d94e35)) -* **signal:** dispatch NextCycle option ([b30eb31](https://github.com/AliMD/alwatr/commit/b30eb316d92f594034fc40d195c4033e38e4d2e2)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **signal/core:** _getSignalObject ([1374188](https://github.com/AliMD/alwatr/commit/1374188bdc7e689ded11d04bf4588a1162cc6d86)) -* **signal:** alert [#1455](https://github.com/AliMD/alwatr/issues/1455) ([203307d](https://github.com/AliMD/alwatr/commit/203307df308a12e6c38cb9e0e2301b2015b6ff45)) -* **signal:** clean old interfaces ([b2987ad](https://github.com/AliMD/alwatr/commit/b2987add7bfe0cf609fa355403fb9fb5de3f6b8a)) -* **signal:** export all interfaces ([8704eac](https://github.com/AliMD/alwatr/commit/8704eac6ae7a8a45e77c24ef5e602e36af3fd21e)) -* **signal:** export listeners ([fb05bfb](https://github.com/AliMD/alwatr/commit/fb05bfb9b7eb30427442783677ce1d4da5401160)) -* **signal:** import types ([cc0b88b](https://github.com/AliMD/alwatr/commit/cc0b88be420b1fe057a8640bbffb1af3bf327cef)) -* **signal:** interface bind type ([7b6c820](https://github.com/AliMD/alwatr/commit/7b6c820da2ba216f36e089bf79bdeccf208df3b1)) -* **signal:** reported issues ([75f688f](https://github.com/AliMD/alwatr/commit/75f688faf96a056a256603d05276f5731db86aee)) -* **signal:** TSignal on SignalControllerInterface ([ac42b7c](https://github.com/AliMD/alwatr/commit/ac42b7c7023549e8dd07cd3d9e189f356ffa06ee)) - -### Features - -* **signal-manager:** enhance provider, docs ([c4583a3](https://github.com/AliMD/alwatr/commit/c4583a3b0fcbf38b5e426aaa2bc6e0f52ccac5fd)) -* **signal:** alias in SignalInterface & BoundSignalInterface ([053030b](https://github.com/AliMD/alwatr/commit/053030b96c09d474794f32327d892f1d3690656c)) -* **signal:** bind signal ([de49a13](https://github.com/AliMD/alwatr/commit/de49a13eaffce31660849dfc63285d97e9098c0c)) -* **signal:** command handler/provider interface ([3d23683](https://github.com/AliMD/alwatr/commit/3d236837e13d8cfdcd44a1570bdc9659f48e7f47)) -* **signal:** command signals ([98c1d90](https://github.com/AliMD/alwatr/commit/98c1d90978329e4c5c584e19edb1aaa365632162)) -* **signal:** command trigger interface ([dda9466](https://github.com/AliMD/alwatr/commit/dda94666d9e8e490fea26038044df0e67c203583)) -* **signal:** commandSignal ([5a0d7e5](https://github.com/AliMD/alwatr/commit/5a0d7e5498087620d28548ea5d90036a7b17483a)) -* **signal:** context prover and consumer ([081a51a](https://github.com/AliMD/alwatr/commit/081a51a1ee88e66ebbcd0c58186c00a6aa9e1032)) -* **signal:** contextProvider.expire ([7d0ce93](https://github.com/AliMD/alwatr/commit/7d0ce937f0eadcd9019e6047fbe07aa1a3b579a7)) -* **signal:** event listener interface ([4ca4079](https://github.com/AliMD/alwatr/commit/4ca407938d444027cdbd435173c875fdd9ce8e28)) -* **signal:** event trigger interface ([9b90597](https://github.com/AliMD/alwatr/commit/9b905979a5065640981433ec7d120ba2494966bb)) -* **signal:** new contextConsumer interface ([9ee4a62](https://github.com/AliMD/alwatr/commit/9ee4a624211adb66d9c3d180470cca44ed7df382)) -* **signal:** new contextProvider interface ([e5d29eb](https://github.com/AliMD/alwatr/commit/e5d29ebaa75d71bb5a87bedddb2be7600e68b210)) -* **signal:** new manager interface ([f028306](https://github.com/AliMD/alwatr/commit/f028306f4d7932df65a1bbeade0d29377a370e2e)) -* **signal:** new requestable context consumer interface ([bf6845f](https://github.com/AliMD/alwatr/commit/bf6845f35a98bb63bcfa42196c2f977d64aea59e)) -* **signal:** new requestable context provider interface ([2c8d576](https://github.com/AliMD/alwatr/commit/2c8d57604dcb07a2831d85d4ef1e262863a5fae8)) -* **signal:** new signal dynamic types ([0f1a38e](https://github.com/AliMD/alwatr/commit/0f1a38e356ab73e4e2e1a8f852585e50e86cff0e)) -* **signal:** new simple api ([eb1e478](https://github.com/AliMD/alwatr/commit/eb1e47892d4478fb6c687f6d15e1a5c204b5666c)) -* **signal:** refactor all generic types with Stringifyable ([bdcef63](https://github.com/AliMD/alwatr/commit/bdcef632c81fa5e7c7ae595a7a77092c53821850)) -* **signal:** separate request command with response ([47a779e](https://github.com/AliMD/alwatr/commit/47a779e9a814d5d6a388f1a3e94c23e7fb977dce)) -* **signal:** signal.request ([d791b3e](https://github.com/AliMD/alwatr/commit/d791b3eef846697020b76bfecfbf25a3e31eb3a5)) -* **signal:** signal.untilNext ([9df78c0](https://github.com/AliMD/alwatr/commit/9df78c03dea243b467504fdf422388ab9d2b5660)) -* **signal:** signals.expire ([3591efd](https://github.com/AliMD/alwatr/commit/3591efd5e42f7a981814fd59d7189b5066735302)) - -# 0.28.0 (2023-01-20) - -# 0.27.0 (2022-12-29) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/signal - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/signal - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **signal:** dont receivePrevious when listener is disabled ([68ae207](https://github.com/AliMD/alwatr/commit/68ae207ce9ecf104922b24910d8dfcedb13acde7)) -- **signal:** requestableContextProvider.getValue ([0a7111d](https://github.com/AliMD/alwatr/commit/0a7111da7b8eb004566922dc9b35edfc02a55147)) - -### Features - -- **signal:** new RequestableContext with state ([b8a8e55](https://github.com/AliMD/alwatr/commit/b8a8e550d3952863d85ba9d9d87513a668a9430d)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **signal:** NextCycle with own detail ([01f3c79](https://github.com/AliMD/alwatr/commit/01f3c79500927f6384a33abcc9b0cb2355794b3e)) -- **signal:** nodejs compatibility ([69d8a60](https://github.com/AliMD/alwatr/commit/69d8a60ad64d44ee7c3ced002e702f13408a5a50)) -- **signal:** requestableContextConsumer bind issue ([66467f6](https://github.com/AliMD/alwatr/commit/66467f6e5681d84d7f2e0b353206d4bb579b26f2)) -- **signal:** requestContext dispatch issue ([e937ebd](https://github.com/AliMD/alwatr/commit/e937ebd3a90fc6a9946f5c35ef4f6f40b6ab4b00)) - -### Features - -- **signal:** add untilChange for contextProvider ([cb44916](https://github.com/AliMD/alwatr/commit/cb4491698fd5ddfbe055032fc2cb50691de31194)) -- **signal:** defineCommand return ListenerSpec ([21fecac](https://github.com/AliMD/alwatr/commit/21fecacb6aa9423da9e3c177a4bbc59952d94e35)) -- **signal:** dispatch NextCycle option ([b30eb31](https://github.com/AliMD/alwatr/commit/b30eb316d92f594034fc40d195c4033e38e4d2e2)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **signal/core:** \_getSignalObject ([1374188](https://github.com/AliMD/alwatr/commit/1374188bdc7e689ded11d04bf4588a1162cc6d86)) -- **signal:** alert [#1455](https://github.com/AliMD/alwatr/issues/1455) ([203307d](https://github.com/AliMD/alwatr/commit/203307df308a12e6c38cb9e0e2301b2015b6ff45)) -- **signal:** clean old interfaces ([b2987ad](https://github.com/AliMD/alwatr/commit/b2987add7bfe0cf609fa355403fb9fb5de3f6b8a)) -- **signal:** export all interfaces ([8704eac](https://github.com/AliMD/alwatr/commit/8704eac6ae7a8a45e77c24ef5e602e36af3fd21e)) -- **signal:** export listeners ([fb05bfb](https://github.com/AliMD/alwatr/commit/fb05bfb9b7eb30427442783677ce1d4da5401160)) -- **signal:** import types ([cc0b88b](https://github.com/AliMD/alwatr/commit/cc0b88be420b1fe057a8640bbffb1af3bf327cef)) -- **signal:** interface bind type ([7b6c820](https://github.com/AliMD/alwatr/commit/7b6c820da2ba216f36e089bf79bdeccf208df3b1)) -- **signal:** reported issues ([75f688f](https://github.com/AliMD/alwatr/commit/75f688faf96a056a256603d05276f5731db86aee)) -- **signal:** TSignal on SignalControllerInterface ([ac42b7c](https://github.com/AliMD/alwatr/commit/ac42b7c7023549e8dd07cd3d9e189f356ffa06ee)) - -### Features - -- **signal-manager:** enhance provider, docs ([c4583a3](https://github.com/AliMD/alwatr/commit/c4583a3b0fcbf38b5e426aaa2bc6e0f52ccac5fd)) -- **signal:** alias in SignalInterface & BoundSignalInterface ([053030b](https://github.com/AliMD/alwatr/commit/053030b96c09d474794f32327d892f1d3690656c)) -- **signal:** bind signal ([de49a13](https://github.com/AliMD/alwatr/commit/de49a13eaffce31660849dfc63285d97e9098c0c)) -- **signal:** command handler/provider interface ([3d23683](https://github.com/AliMD/alwatr/commit/3d236837e13d8cfdcd44a1570bdc9659f48e7f47)) -- **signal:** command signals ([98c1d90](https://github.com/AliMD/alwatr/commit/98c1d90978329e4c5c584e19edb1aaa365632162)) -- **signal:** command trigger interface ([dda9466](https://github.com/AliMD/alwatr/commit/dda94666d9e8e490fea26038044df0e67c203583)) -- **signal:** commandSignal ([5a0d7e5](https://github.com/AliMD/alwatr/commit/5a0d7e5498087620d28548ea5d90036a7b17483a)) -- **signal:** context prover and consumer ([081a51a](https://github.com/AliMD/alwatr/commit/081a51a1ee88e66ebbcd0c58186c00a6aa9e1032)) -- **signal:** contextProvider.expire ([7d0ce93](https://github.com/AliMD/alwatr/commit/7d0ce937f0eadcd9019e6047fbe07aa1a3b579a7)) -- **signal:** event listener interface ([4ca4079](https://github.com/AliMD/alwatr/commit/4ca407938d444027cdbd435173c875fdd9ce8e28)) -- **signal:** event trigger interface ([9b90597](https://github.com/AliMD/alwatr/commit/9b905979a5065640981433ec7d120ba2494966bb)) -- **signal:** new contextConsumer interface ([9ee4a62](https://github.com/AliMD/alwatr/commit/9ee4a624211adb66d9c3d180470cca44ed7df382)) -- **signal:** new contextProvider interface ([e5d29eb](https://github.com/AliMD/alwatr/commit/e5d29ebaa75d71bb5a87bedddb2be7600e68b210)) -- **signal:** new manager interface ([f028306](https://github.com/AliMD/alwatr/commit/f028306f4d7932df65a1bbeade0d29377a370e2e)) -- **signal:** new requestable context consumer interface ([bf6845f](https://github.com/AliMD/alwatr/commit/bf6845f35a98bb63bcfa42196c2f977d64aea59e)) -- **signal:** new requestable context provider interface ([2c8d576](https://github.com/AliMD/alwatr/commit/2c8d57604dcb07a2831d85d4ef1e262863a5fae8)) -- **signal:** new signal dynamic types ([0f1a38e](https://github.com/AliMD/alwatr/commit/0f1a38e356ab73e4e2e1a8f852585e50e86cff0e)) -- **signal:** new simple api ([eb1e478](https://github.com/AliMD/alwatr/commit/eb1e47892d4478fb6c687f6d15e1a5c204b5666c)) -- **signal:** refactor all generic types with Stringifyable ([bdcef63](https://github.com/AliMD/alwatr/commit/bdcef632c81fa5e7c7ae595a7a77092c53821850)) -- **signal:** separate request command with response ([47a779e](https://github.com/AliMD/alwatr/commit/47a779e9a814d5d6a388f1a3e94c23e7fb977dce)) -- **signal:** signal.request ([d791b3e](https://github.com/AliMD/alwatr/commit/d791b3eef846697020b76bfecfbf25a3e31eb3a5)) -- **signal:** signal.untilNext ([9df78c0](https://github.com/AliMD/alwatr/commit/9df78c03dea243b467504fdf422388ab9d2b5660)) -- **signal:** signals.expire ([3591efd](https://github.com/AliMD/alwatr/commit/3591efd5e42f7a981814fd59d7189b5066735302)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -**Note:** Version bump only for package @alwatr/signal - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/signal - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/signal - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/signal - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/signal - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/signal - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/signal - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/signal - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/signal - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/signal - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Bug Fixes - -- **signal:** default options ([bbb0d59](https://github.com/AliMD/alwatr/commit/bbb0d59442301344781691bbecad39aed7f6ac40)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/signal - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -### Bug Fixes - -- get signal object of `request` signal ([eec4b62](https://github.com/AliMD/alwatr/commit/eec4b6201d79785aa10f4b9c777449525158a346)) -- **signal:** fix some issues of `review` ([36ceb8b](https://github.com/AliMD/alwatr/commit/36ceb8b25987621065327b4fa475a213562af8e7)) -- **signal:** log performance and security issue ([dbe9483](https://github.com/AliMD/alwatr/commit/dbe9483b672099b91c18c3a103c2878435fd6508)) - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/signal - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/signal - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -**Note:** Version bump only for package @alwatr/signal - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/signal - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -**Note:** Version bump only for package @alwatr/signal - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -### Features - -- **signal:** ListenerInterface ([38ef029](https://github.com/AliMD/alwatr/commit/38ef0291c5ba2e3619080ad89109d805d3d600f2)) - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -### Bug Fixes - -- **signal:** remove once listene in dispatch change imediatly the loop! ([e4d420d](https://github.com/AliMD/alwatr/commit/e4d420d3a086558dc01dcd7a9c5fe3e96677f092)) - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -### Bug Fixes - -- **signal:** promise to multi requests works ([dd59f0e](https://github.com/AliMD/alwatr/commit/dd59f0e5737abec72c41895b93365199fad66fcb)) - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/signal - -# [0.6.0](https://github.com/AliMD/alwatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- alalwatr ([898aa6e](https://github.com/AliMD/alwatr/commit/898aa6ed0888eab9265c83b96a50f1b8c216d143)) -- **packages:** duplicate alwatr keyword ([77d4aa2](https://github.com/AliMD/alwatr/commit/77d4aa2105ad47515c3eee251fd6b8c281d0d1fc)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -### Bug Fixes - -- **signal:** disabled getter and optional dispatch options ([28ced3d](https://github.com/AliMD/alwatr/commit/28ced3d0c4cdf44fc2aebfab98db0883fc5363fe)) - -### Features - -- **signal:** new SignalInterface ([221701a](https://github.com/AliMD/alwatr/commit/221701a54ea9edda4a3a935a7b098e235ec52691)) - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -**Note:** Version bump only for package @alwatr/signal - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -### Bug Fixes - -- **signal:** signal provider type ([0151c57](https://github.com/AliMD/alwatr/commit/0151c57d9b6d4f7e83bb9b1847ebe0ae53cd8f89)) - -## [0.2.1](https://github.com/AliMD/alwatr/compare/v0.2.0...v0.2.1) (2022-03-05) - -### Bug Fixes - -- **signal:** signal value type issue ([292a4a7](https://github.com/AliMD/alwatr/commit/292a4a7d12a2fd143761e67cd1ecd2e5e40f2ee9)) - -# [0.2.0](https://github.com/AliMD/alwatr/compare/v0.1.2...v0.2.0) (2022-03-05) - -### Bug Fixes - -- **router:** rename setSignalProvider callback detail to requestParam ([6e09f87](https://github.com/AliMD/alwatr/commit/6e09f8772d320625fb4c15ccaa0abcfa2932f992)) -- **signal:** fix dispatchSignal value parameters ([4d34cfb](https://github.com/AliMD/alwatr/commit/4d34cfbb5281d5ce4a4f06ddaaf72218dde80cdd)) - -### Features - -- **signal:** add contributors ([64287cd](https://github.com/AliMD/alwatr/commit/64287cd8cea95665a6ed298177df60dadda7642b)) -- **signal:** improve signal provider by dispatch return content ([80c2b27](https://github.com/AliMD/alwatr/commit/80c2b275bcc0521327400c5902f512c778f5eb3f)) - -## [0.1.2](https://github.com/AliMD/alwatr/compare/v0.1.1...v0.1.2) (2022-03-03) - -**Note:** Version bump only for package @alwatr/signal - -## [0.1.1](https://github.com/AliMD/alwatr/compare/v0.1.0...v0.1.1) (2022-03-03) - -### Bug Fixes - -- **packages:** add publish config to public ([9cb3710](https://github.com/AliMD/alwatr/commit/9cb37106b5a35d24d5195ff54232e5769ccc034e)) - -# 0.1.0 (2022-03-02) - -### Bug Fixes - -- **signal:** AlwatrRequestSignals global type ([228e333](https://github.com/AliMD/alwatr/commit/228e3333326b23df51e7834872daf1349826bf09)) - -### Features - -- **signal:** addSignalListener ([e7c5742](https://github.com/AliMD/alwatr/commit/e7c57427ef11e2624eb9a52a166720b1a3c5f66a)) -- **signal:** getSignalObject ([b38954c](https://github.com/AliMD/alwatr/commit/b38954cf4ae1c24eaaa79ecf513995a4678814ee)) -- **signal:** impeliment addSignalProvider, waitForSignal, hasSignalDispatchedBefore, expireSignal ([e0b4d78](https://github.com/AliMD/alwatr/commit/e0b4d7831764d4454591f5105c5512e1657a63e5)) -- **signal:** impeliment dispatchSignal ([cb2dfbe](https://github.com/AliMD/alwatr/commit/cb2dfbe23ea751cba93cb1f6516cd2bfa2ecb18e)) -- **signal:** ListenerObject, SignalObject types ([36d8a33](https://github.com/AliMD/alwatr/commit/36d8a336760bba3808cfd26a28e4d24a31c95f8f)) -- **signal:** make new package for manage signals ([5bf82b3](https://github.com/AliMD/alwatr/commit/5bf82b3f05abc89102634e9b864d81b5b5af527e)) -- **signal:** register to alwatr meta ([9c850e8](https://github.com/AliMD/alwatr/commit/9c850e8df787aa44d289929dc65439e921982dce)) -- **signal:** removeSignalListener ([0088a52](https://github.com/AliMD/alwatr/commit/0088a5269ccce8b50a50e444695c81654fda70ff)) -- **signal:** requestSignal ([111ab5a](https://github.com/AliMD/alwatr/commit/111ab5a1436bc380f5121ef8c130da7010258d90)) diff --git a/core/signal/README.md b/core/signal/README.md deleted file mode 100644 index e3d157582..000000000 --- a/core/signal/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Signal - `@alwatr/signal` - -Elegant powerful event system for handle global signals and states written in tiny TypeScript module. - -Every signal has own value and can be used as a advance **state management** like redux and recoil without the complexities and unnecessary facilities of those libraries. diff --git a/core/signal/package.json b/core/signal/package.json deleted file mode 100644 index 4077ba6a7..000000000 --- a/core/signal/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@alwatr/signal", - "version": "1.1.2", - "description": "Elegant powerful event system for handle global signals and states written in tiny TypeScript module.", - "keywords": [ - "signal", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/signal" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/signal#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/type": "^1.1.1", - "@alwatr/util": "^1.2.0", - "tslib": "^2.6.2" - } -} diff --git a/core/signal/src/command-handler.ts b/core/signal/src/command-handler.ts deleted file mode 100644 index 682ad0019..000000000 --- a/core/signal/src/command-handler.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {defineCommand} from './core.js'; - -/** - * Command handler/define interface. - */ -export const commandHandler = { - /** - * Defines the command and dispatch returned value. - * - * Subscribe commandFunction to request-command-signal and dispatch callback-signal with commandFunction return value. - * - * Example: - * - * ```ts - * commandHandler.define( - * 'show-prompt', - * async (argumentObject) => { - * return await showPrompt(argumentObject); - * }, - * ); - * ``` - */ - define: defineCommand, -} as const; diff --git a/core/signal/src/command-trigger.ts b/core/signal/src/command-trigger.ts deleted file mode 100644 index 456cc244b..000000000 --- a/core/signal/src/command-trigger.ts +++ /dev/null @@ -1,72 +0,0 @@ -import {requestCommand, requestCommandWithResponse} from './core.js'; - -import type {OmitFirstParam, Stringifyable, StringifyableRecord} from '@alwatr/type'; - -/** - * Command trigger/request interface. - */ -export const commandTrigger = { - /** - * Dispatch request command signal with commandArgument as detail. - * - * Example: - * - * ```ts - * commandTrigger.request('show-dialog', {foo: 'bar'}); - * ``` - */ - request: requestCommand, - - /** - * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal. - * - * Request command and wait for answer. - * - * Example: - * - * ```ts - * const response = await commandTrigger.requestWithResponse('show-dialog', {foo: 'bar'}); - * ``` - */ - requestWithResponse: requestCommandWithResponse, - - /** - * Bind define command to special command. - * - * Example: - * - * ```ts - * const showDialog = commandTrigger.bind('show-dialog'); - * ``` - */ - bind: (commandId: string) =>({ - /** - * Command signal Id. - */ - id: commandId, - - /** - * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal. - * - * Example: - * - * ```ts - * showDialog.request({foo: 'bar'}); - * ``` - */ - request: requestCommand.bind(null, commandId) as unknown as - OmitFirstParam>, - - /** - * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal. - * - * Example: - * - * ```ts - * const response = await showDialog.requestWithResponse({foo: 'bar'}); - * ``` - */ - requestWithResponse: requestCommandWithResponse.bind(null, commandId) as unknown as - OmitFirstParam>, - }), -} as const; diff --git a/core/signal/src/context-consumer.ts b/core/signal/src/context-consumer.ts deleted file mode 100644 index 45b26531c..000000000 --- a/core/signal/src/context-consumer.ts +++ /dev/null @@ -1,135 +0,0 @@ -import {getDetail, subscribe, unsubscribe, untilNext} from './core.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Context consumer interface. - */ -export const contextConsumer = { - /** - * Get context value. - * - * Return undefined if context not set before or expired. - * - * Example: - * - * ```ts - * const currentProductList = contextConsumer.getValue('product-list'); - * if (currentProductList === undefined) { - * // productList not set before or expired. - * } - * ``` - */ - getValue: getDetail, - - /** - * Waits until the context value changes. - * - * Example: - * - * ```ts - * const newProductList = await contextConsumer.untilChange('product-list'); - * ``` - */ - untilChange: untilNext, - - /** - * Subscribe to context changes, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = contextConsumer.subscribe('product-list', (productList) => { - * console.log(productList); - * }); - * // ... - * contextConsumer.unsubscribe(listener); - * ``` - */ - subscribe: subscribe, - - /** - * Unsubscribe from context changes, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = contextConsumer.subscribe('product-list', (productList) => { - * console.log(productList); - * }); - * // ... - * contextConsumer.unsubscribe(listener); - * ``` - */ - unsubscribe: unsubscribe, - - /** - * Bind this interface to special context. - * - * Example: - * - * ```ts - * const productListConsumer = contextConsumer.bind('product-list'); - * ``` - */ - bind: (contextId: string) =>({ - /** - * Context signal Id. - */ - id: contextId, - - /** - * Get context value. - * - * Return undefined if context not set before or expired. - * - * Example: - * - * ```ts - * const currentProductList = productListConsumer.getValue(); - * if (currentProductList === undefined) { - * // productList not set before or expired. - * } - * ``` - */ - getValue: getDetail.bind(null, contextId) as OmitFirstParam>, - - /** - * Waits until the context value changes. - * - * Example: - * - * ```ts - * const newProductList = await productListConsumer.untilChange(); - * ``` - */ - untilChange: untilNext.bind(null, contextId) as OmitFirstParam>, - - /** - * Subscribe to context changes, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = productListConsumer.subscribe((productList) => console.log(productList)); - * // ... - * productListConsumer.unsubscribe(listener); - * ``` - */ - subscribe: subscribe.bind(null, contextId) as unknown as - OmitFirstParam>, - - /** - * Unsubscribe from context changes, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = productListConsumer.subscribe((productList) => console.log(productList)); - * // ... - * productListConsumer.unsubscribe(listener); - * ``` - */ - unsubscribe: unsubscribe, - } as const), -} as const; diff --git a/core/signal/src/context-provider.ts b/core/signal/src/context-provider.ts deleted file mode 100644 index eecf1c425..000000000 --- a/core/signal/src/context-provider.ts +++ /dev/null @@ -1,130 +0,0 @@ -import {clearDetail, dispatch, getDetail, untilNext} from './core.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Context provider interface. - */ -export const contextProvider = { - /** - * Get context value. - * - * Return undefined if context not set before or expired. - * - * Example: - * - * ```ts - * const currentProductList = contextProvider.getValue('product-list'); - * if (currentProductList === undefined) { - * // productList not set before or expired. - * } - * ``` - */ - getValue: getDetail, - - /** - * Set context value and send signal to all consumers. - * - * Signal detail changed immediately without any debounce. - * - * Example: - * - * ```ts - * contextProvider.setValue('product-list', newProductList); - * ``` - */ - setValue: dispatch, - - /** - * Clear current context value without send signal to all consumers. - * - * new subscriber options.receivePrevious not work until new signal - * - * Example: - * - * ```ts - * contextProvider.expire('product-list'); - * ``` - */ - expire: clearDetail, - - /** - * Waits until the context value changes. - * - * Example: - * - * ```ts - * const newProductList = await contextProvider.untilChange('product-list'); - * ``` - */ - untilChange: untilNext, - - /** - * Bind this interface to special context. - * - * Example: - * - * ```ts - * const productListProvider = contextProvider.bind('product-list'); - * ``` - */ - bind: (contextId: string) =>({ - /** - * Context signal Id. - */ - id: contextId, - - /** - * Get context value. - * - * Return undefined if context not set before or expired. - * - * Example: - * - * ```ts - * const currentProductList = productListProvider.getValue(); - * if (currentProductList === undefined) { - * // productList not set before or expired. - * } - * ``` - */ - getValue: getDetail.bind(null, contextId) as OmitFirstParam>, - - /** - * Set context value and send signal to all consumers. - * - * Signal detail changed immediately without any debounce. - * - * Example: - * - * ```ts - * productListProvider.setValue(newProductList); - * ``` - */ - setValue: dispatch.bind(null, contextId) as OmitFirstParam>, - - /** - * Clear current context value without send signal to all consumers. - * - * new subscriber options.receivePrevious not work until new signal - * - * Example: - * - * ```ts - * productListProvider.expire(); - * ``` - */ - expire: clearDetail.bind(null, contextId), - - /** - * Waits until the context value changes. - * - * Example: - * - * ```ts - * const newProductList = await productListProvider.untilChange(); - * ``` - */ - untilChange: untilNext.bind(null, contextId) as OmitFirstParam>, - } as const), -} as const; diff --git a/core/signal/src/core.ts b/core/signal/src/core.ts deleted file mode 100644 index 37d081389..000000000 --- a/core/signal/src/core.ts +++ /dev/null @@ -1,482 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; -import {requestAnimationFrame} from '@alwatr/util'; - -import type { - DispatchOptions, - ListenerFunction, - ListenerObject, - SubscribeOptions, - SignalObject, - ProviderFunction, - ProviderOptions, - SignalStorage, - ListenerSpec, -} from './type.js'; -import type {Stringifyable, StringifyableRecord} from '@alwatr/type'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/signal', - version: _ALWATR_VERSION_, -}); - -/** - * Listener `id` - */ -let _lastListenerAutoId = 0; - -const debounceTimeout = 5; - -/** - * Signal stack database. - */ -const _signalStorage: SignalStorage = {}; - -export const logger = createLogger('alwatr/signal'); - -/** - * Get signal object by id, If not available, it will create a new signal with default options. - * - * Don't use it directly. - * - * Example: - * - * ```ts - * const signal = getSignalObject('content-change'); - * signal.disabled = true; - * ``` - */ -export const getSignalObject = (id: string): SignalObject => { - let signal = _signalStorage[id] as SignalObject | undefined; - if (signal == null) { - signal = _signalStorage[id] = { - id, - disabled: false, - debounced: false, - listenerList: [], - }; - } - return signal; -}; - -/** - * Call all listeners callback of special signal. - * - * Used inside dispatch, Don't use it directly. - */ -export const _callListeners = (signal: SignalObject, detail: T): void => { - logger.logMethodArgs?.('_callListeners', {signalId: signal.id, signalDetail: detail}); - - const removeList: ListenerObject[] = []; - - for (const listener of signal.listenerList) { - if (listener.disabled) continue; - if (listener.once) removeList.push(listener); - try { - const ret = listener.callback(detail); - if (ret instanceof Promise) { - ret.catch((err) => - logger.error('_callListeners', 'call_listener_failed', err, { - signalId: signal.id, - }), - ); - } - } - catch (err) { - logger.error('_callListeners', 'call_listener_failed', err, { - signalId: signal.id, - }); - } - } - - removeList.forEach((listener) => unsubscribe(listener)); -}; - -/** - * Subscribe new signal listener to a signal, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = subscribe('content-change', (content) => console.log(content)); - * // ... - * unsubscribe(listener); - * ``` - */ -export const subscribe = ( - signalId: string, - listenerCallback: ListenerFunction, - options: Partial = {}, -): ListenerSpec => { - options.once ??= false; - options.disabled ??= false; - options.receivePrevious ??= 'NextCycle'; - options.priority ??= false; - - logger.logMethodArgs?.('subscribe', {signalId, options}); - - const signal = getSignalObject(signalId); - - const listener: ListenerObject = { - id: ++_lastListenerAutoId, - signalId: signal.id, - once: options.once, - disabled: options.disabled, - callback: listenerCallback, - }; - - const execCallback = signal.detail !== undefined && options.receivePrevious !== 'No' && options.disabled !== true; - if (execCallback) { - // Run callback for old dispatch signal - - const callback = (): void => { - try { - if (signal.detail !== undefined) listenerCallback(signal.detail); - } - catch (err) { - logger.error('subscribe', 'call_signal_callback_failed', err, { - signalId: signal.id, - }); - } - }; - - if (options.receivePrevious === 'AnimationFrame') { - requestAnimationFrame(callback); - } - else { - setTimeout(callback, options.receivePrevious === 'NextCycle' ? 0 : debounceTimeout); - } - } - - // if once then must remove listener after fist callback called! then why push it to listenerList?! - if (!(execCallback && options.once)) { - if (options.priority === true) { - signal.listenerList.unshift(listener); - } - else { - signal.listenerList.push(listener); - } - } - - return { - id: listener.id, - signalId: listener.signalId, - }; -}; - -/** - * Unsubscribe listener from signal, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = subscribe('content-change', (content) => console.log(content)); - * // ... - * unsubscribe(listener); - * ``` - */ -export const unsubscribe = (listener: ListenerSpec): void => { - logger.logMethodArgs?.('unsubscribe', listener); - const signal = getSignalObject(listener.signalId); - const listenerIndex = signal.listenerList.findIndex((_listener) => _listener.id === listener.id); - if (listenerIndex !== -1) { - void signal.listenerList.splice(listenerIndex, 1); - } -}; - -/** - * Unsubscribe all listener from a signal, clear all listeners. - * - * Example: - * - * ```ts - * removeAllListeners('content-change'); - * ``` - */ -export const removeAllListeners = (signalId: string): void => { - logger.logMethodArgs?.('removeAllListeners', signalId); - const signal = getSignalObject(signalId); - if (signal.listenerList.length === 0) return; - signal.listenerList.length = 0; - signal.listenerList = []; -}; - -/** - * Dispatch (send) signal to all listeners. - * - * Signal detail changed immediately without any debounce. - * - * Example: - * - * ```ts - * dispatch('content-change', newContent); - * ``` - */ -export const dispatch = ( - signalId: string, - detail: T, - options: Partial = {}, -): void => { - options.debounce ??= 'AnimationFrame'; - - logger.logMethodArgs?.('dispatch', {signalId, detail, options}); - - const signal = getSignalObject(signalId); - - // set detail before check signal.debounced for act like throttle (call listeners with last dispatch detail). - signal.detail = detail; - - if (signal.disabled) return; // signal is disabled. - - if (options.debounce === 'No') { - return _callListeners(signal, detail); - } - - // else - if (options.debounce === 'NextCycle') { - setTimeout(_callListeners, 0, signal, detail); - return; - } - - // else - if (signal.debounced === true) { - return; // last dispatch in progress. - } - - // else - signal.debounced = true; - const callListeners = (): void => { - _callListeners(signal, signal.detail ?? detail); - signal.debounced = false; - }; - options.debounce === 'AnimationFrame' - ? requestAnimationFrame(callListeners) - : setTimeout(callListeners, debounceTimeout); -}; - -/** - * Get current signal detail/value. - * - * Return undefined if signal not dispatched before or expired. - * - * Example: - * - * ```ts - * const currentContent = getDetail('content-change'); - * if (currentContent === undefined) { - * // signal not dispatched yet - * } - * ``` - */ -export const getDetail = (signalId: string): T | undefined => { - return getSignalObject(signalId).detail; -}; - -/** - * Get the detail/value of the next received signal. - * - * Example: - * - * ```ts - * const newContent = await untilNext('content-change'); - * ``` - */ -export const untilNext = (signalId: string): Promise => { - return new Promise((resolve) => { - logger.logMethodArgs?.('untilNext', signalId); - subscribe(signalId, resolve, { - once: true, - priority: true, - receivePrevious: 'No', - }); - }); -}; - -/** - * Defines the provider of the context signal that will be called when the context requested. - * Subscribe to `request-signalId`. - * - * Example: - * - * ```ts - * setContextProvider('content-change', async (requestParam) => await fetchNewContent(requestParam)); - * ``` - */ -export const setContextProvider = ( - signalId: string, - // eslint-disable-next-line @typescript-eslint/no-invalid-void-type - signalProvider: ProviderFunction, - options: Partial = {}, -): void => { - options.debounce ??= 'AnimationFrame'; - options.receivePrevious ??= 'AnimationFrame'; - logger.logMethodArgs?.('setContextProvider', {signalId, options}); - const requestSignalId = 'request-' + signalId; - removeAllListeners(requestSignalId); - subscribe( - requestSignalId, - async (argumentObject): Promise => { - const signalDetail = await signalProvider(argumentObject); - if (signalDetail !== undefined) { - dispatch(signalId, signalDetail, {debounce: options.debounce}); - } - }, - { - receivePrevious: options.receivePrevious, - }, - ); -}; - -/** - * Defines the command and dispatch returned value. - * - * Subscribe commandFunction to request-command-signal and dispatch callback-signal with commandFunction return value. - * - * Example: - * - * ```ts - * defineCommand( - * 'show-prompt', - * async (argumentObject) => { - * return await showPrompt(argumentObject); - * }, - * ); - * ``` - */ -export const defineCommand = ( - signalId: string, - signalProvider: ProviderFunction, - options: Partial> = {}, -): ListenerSpec => { - options.debounce ??= 'AnimationFrame'; - logger.logMethodArgs?.('defineCommand', {commandId: signalId, options}); - const requestSignalId = 'request-' + signalId; - removeAllListeners(requestSignalId); - return subscribe( - requestSignalId, - async (argumentObject) => { - clearDetail(requestSignalId); // clean argumentObject from memory - if (argumentObject._callbackSignalId == null) { - signalProvider(argumentObject); - } - else { - // prettier-ignore - dispatch( - argumentObject._callbackSignalId, - await signalProvider(argumentObject), - {debounce: options.debounce}, - ); - } - }, - {receivePrevious: 'NextCycle'}, - ); -}; - -/** - * Dispatch request context signal with requestParam as detail. - * - * Example: - * - * ```ts - * requestContext('content-change', {foo: 'bar'}); - * const newContent = await untilNext('content-change'); - * ``` - */ -export const requestContext = ( - contextId: string, - requestParam: TRequest, - options: Partial = {}, -): void => { - logger.logMethodArgs?.('requestContext', {contextId, requestParam}); - return dispatch(`request-${contextId}`, requestParam, options); -}; - -/** - * Dispatch request command signal with commandArgument as detail. - * - * Example: - * - * ```ts - * requestCommand('show-dialog', {foo: 'bar'}); - * ``` - */ -export const requestCommand = ( - commandId: string, - commandArgument: TArgument, -): void => { - logger.logMethodArgs?.('requestCommand', {commandId, commandArgument}); - dispatch(`request-${commandId}`, commandArgument, {debounce: 'No'}); -}; - -/** - * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal. - * - * Request command and wait for answer. - * - * Example: - * - * ```ts - * const response = await requestCommandWithResponse('show-dialog', {foo: 'bar'}); - * ``` - */ -export const requestCommandWithResponse = async < - TArgument extends StringifyableRecord, - TReturn extends Stringifyable ->( - commandId: string, - commandArgument: TArgument, -): Promise => { - logger.logMethodArgs?.('requestCommand', {commandId, commandArgument}); - - const _requestSignalId = `request-${commandId}`; - const _callbackSignalId = `callback-${commandId}-${++_lastListenerAutoId}`; - const untilCallback = untilNext(_callbackSignalId); - - dispatch( - _requestSignalId, - { - ...commandArgument, - _callbackSignalId, - }, - {debounce: 'NextCycle'}, - ); - - const response = await untilCallback; - destroySignal(_callbackSignalId); - return response; -}; - -/** - * Clear current signal detail without dispatch new signal. - * - * new subscriber options.receivePrevious not work until new signal - * - * Example: - * - * ```ts - * clearDetail('product-list'); - * ``` - */ -export const clearDetail = (signalId: string): void => { - logger.logMethodArgs?.('expire', signalId); - const signal = getSignalObject(signalId); - delete signal.detail; -}; - -/** - * Delete signal object with detail and listeners and options. - * - * new subscriber options.receivePrevious not work until new signal - * - * Example: - * - * ```ts - * destroySignal('product-list'); - * ``` - */ -export const destroySignal = (signalId: string): void => { - logger.logMethodArgs?.('destroySignal', signalId); - const signal = _signalStorage[signalId]; - if (signal == null) return; - signal.listenerList.length = 0; - delete _signalStorage[signalId]; -}; diff --git a/core/signal/src/event-listener.ts b/core/signal/src/event-listener.ts deleted file mode 100644 index 99e314a07..000000000 --- a/core/signal/src/event-listener.ts +++ /dev/null @@ -1,131 +0,0 @@ -import {getDetail, subscribe, unsubscribe, untilNext} from './core.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Event signal listener/subscriber interface. - */ -export const eventListener = { - /** - * Get last event dispatched detail. - * - * Return undefined if signal not dispatched before or expired. - * - * Example: - * - * ```ts - * const currentSize = eventTrigger.getLastDetail('window-resize'); - * if (currentSize === undefined) { - * // event-signal not dispatched yet - * } - * ``` - */ - getLastDetail: getDetail, - - /** - * Wait until new event. - * - * Example: - * - * ```ts - * const newSize = await eventTrigger.untilNext('window-resize'); - * ``` - */ - untilNext: untilNext, - - /** - * Subscribe new listener to an event, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = eventTrigger.subscribe('window-resize', (size) => console.log(size)); - * // ... - * eventTrigger.unsubscribe(listener); - * ``` - */ - subscribe: subscribe, - - /** - * Unsubscribe listener from event, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = eventTrigger.subscribe('window-resize', (size) => console.log(size)); - * // ... - * eventTrigger.unsubscribe(listener); - * ``` - */ - unsubscribe: unsubscribe, - - /** - * Bind this interface to special event. - * - * Example: - * - * ```ts - * const resizeEvent = eventTrigger.bind('window-resize'); - * ``` - */ - bind: (eventId: string) => ({ - /** - * Event signal Id. - */ - id: eventId, - - /** - * Get last event dispatched detail. - * - * Return undefined if signal not dispatched before or expired. - * - * Example: - * - * ```ts - * const currentSize = resizeEvent.getLastDetail(); - * if (currentSize === undefined) { - * // signal not dispatched yet - * } - * ``` - */ - getLastDetail: getDetail.bind(null, eventId) as OmitFirstParam>, - - /** - * Wait until new event. - * - * Example: - * - * ```ts - * const newSize = await resizeEvent.untilNext(); - * ``` - */ - untilNext: untilNext.bind(null, eventId) as OmitFirstParam>, - - /** - * Subscribe new listener to an event, work like addEventListener. - * - * Example: - * - * ```ts - * const listener = resizeEvent.subscribe((size) => console.log(size)); - * // ... - * resizeEvent.unsubscribe(listener); - * ``` - */ - subscribe: subscribe.bind(null, eventId) as unknown as - OmitFirstParam>, - - /** - * Unsubscribe listener from event, work like removeEventListener. - * - * Example: - * - * ```ts - * const listener = resizeEvent.subscribe((size) => console.log(size)); - * // ... - * resizeEvent.unsubscribe(listener); - * ``` - */ - unsubscribe: unsubscribe, - } as const), -} as const; diff --git a/core/signal/src/event-trigger.ts b/core/signal/src/event-trigger.ts deleted file mode 100644 index 15640d28f..000000000 --- a/core/signal/src/event-trigger.ts +++ /dev/null @@ -1,82 +0,0 @@ -import {dispatch, getDetail} from './core.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Event signal trigger/dispatcher interface. - */ -export const eventTrigger = { - /** - * Get last event dispatched detail. - * - * Return undefined if signal not dispatched before or expired. - * - * Example: - * - * ```ts - * const currentSize = eventTrigger.getLastDetail('window-resize'); - * if (currentSize === undefined) { - * // event-signal not dispatched yet - * } - * ``` - */ - getLastDetail: getDetail, - - /** - * Dispatch (send) signal to all listeners. - * - * Signal detail changed immediately without any debounce. - * - * Example: - * - * ```ts - * eventTrigger.dispatch('window-resize', newSize); - * ``` - */ - dispatch: dispatch, - - /** - * Bind this interface to special event. - * - * Example: - * - * ```ts - * const resizeEvent = eventTrigger.bind('window-resize'); - * ``` - */ - bind: (eventId: string) =>({ - /** - * Event signal Id. - */ - id: eventId, - - /** - * Get last event dispatched detail. - * - * Return undefined if signal not dispatched before or expired. - * - * Example: - * - * ```ts - * const currentSize = resizeEvent.getLastDetail(); - * if (currentSize === undefined) { - * // signal not dispatched yet - * } - * ``` - */ - getLastDetail: getDetail.bind(null, eventId) as OmitFirstParam>, - - /** - * Dispatch (send) signal to all listeners. - * - * Signal detail changed immediately without any debounce. - * - * Example: - * - * ```ts - * resizeEvent.dispatch(newSize); - * ``` - */ - dispatch: dispatch.bind(null, eventId) as OmitFirstParam>, - } as const), -} as const; diff --git a/core/signal/src/index.ts b/core/signal/src/index.ts deleted file mode 100644 index e8af39947..000000000 --- a/core/signal/src/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export * from './command-handler.js'; -export * from './command-trigger.js'; -export * from './context-consumer.js'; -export * from './context-provider.js'; -export * from './event-listener.js'; -export * from './event-trigger.js'; -export * from './requestable-context-consumer.js'; -export * from './requestable-context-provider.js'; -export type {ListenerSpec, DebounceType, DispatchOptions} from './type.js'; - -/* -TODO: - 1. change signal option like disable - 2. Get signal value without undefined - (Get signal value from last dispatched signal (if any) or wait for new signal received.) - 3. dispatched bool - 4. optional commandProvider debounce -*/ diff --git a/core/signal/src/requestable-context-consumer.ts b/core/signal/src/requestable-context-consumer.ts deleted file mode 100644 index 46c4f99a5..000000000 --- a/core/signal/src/requestable-context-consumer.ts +++ /dev/null @@ -1,63 +0,0 @@ -import {contextConsumer} from './context-consumer.js'; -import {getDetail, requestContext} from './core.js'; -import {RequestableContext} from './type.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Requestable context consumer interface. - */ -export const requestableContextConsumer = { - ...contextConsumer, - - /** - * Send new context request to the provider. - * - * Example: - * - * ```ts - * requestableContextConsumer.request('product-list', {foo: 'bar'}); - * TODO: update me - * ``` - */ - request: requestContext, - - /** - * Bind this interface to special context. - * - * Example: - * - * ```ts - * const productListConsumer = requestableContextConsumer.bind('product-list'); - * ``` - */ - bind: (contextId: string) =>({ - ...contextConsumer.bind>(contextId), - - /** - * Get context value. - * - * Example: - * - * ```ts - * const currentProductList = productListConsumer.getValue(); - * TODO: update me - * ``` - */ - getValue: (): RequestableContext => - getDetail>(contextId) ?? {state: 'initial'}, - - /** - * Send new context request to the provider. - * - * Example: - * - * ```ts - * productListConsumer.request({foo: 'bar'}); - * TODO: update me - * ``` - */ - request: requestContext.bind(null, contextId) as - OmitFirstParam>, - } as const), -} as const; diff --git a/core/signal/src/requestable-context-provider.ts b/core/signal/src/requestable-context-provider.ts deleted file mode 100644 index 3f7f021b9..000000000 --- a/core/signal/src/requestable-context-provider.ts +++ /dev/null @@ -1,73 +0,0 @@ -import {contextProvider} from './context-provider.js'; -import {getDetail, setContextProvider} from './core.js'; -import {RequestableContext} from './type.js'; - -import type {Stringifyable, OmitFirstParam} from '@alwatr/type'; - -/** - * Requestable context provider interface. - */ -export const requestableContextProvider = { - ...contextProvider, - - /** - * Defines the provider of the context signal that will be called when the context requested. - * - * subscribe to request context signal. - * - * Example: - * - * ```ts - * requestableContextProvider.setProvider( - * 'product-list', - * async (requestParam) => { - * return await fetchNewProductList(requestParam) - * }, - * ); - * ``` - */ - setProvider: setContextProvider, - - /** - * Bind this interface to special context. - * - * Example: - * - * ```ts - * const productListProvider = requestableContextProvider.bind('product-list'); - * ``` - */ - bind: (contextId: string) =>({ - ...contextProvider.bind>(contextId), - - /** - * Get context value. - * - * Example: - * - * ```ts - * const currentProductList = productListConsumer.getValue(); - * TODO: update me - * ``` - */ - getValue: (): RequestableContext => - getDetail>(contextId) ?? {state: 'initial'}, - - - /** - * Defines the provider of the context signal that will be called when the context requested. - * - * subscribe to request context signal. - * - * Example: - * - * ```ts - * productListProvider.setProvider(async (requestParam) => { - * return await fetchNewProductList(requestParam) - * }); - * ``` - */ - setProvider: setContextProvider.bind(null, contextId) as - OmitFirstParam, TRquest>>, - } as const), -} as const; diff --git a/core/signal/src/type.ts b/core/signal/src/type.ts deleted file mode 100644 index 411f2da41..000000000 --- a/core/signal/src/type.ts +++ /dev/null @@ -1,170 +0,0 @@ -import type {MaybePromise, Stringifyable} from '@alwatr/type'; - -export type DebounceType = 'No' | 'NextCycle' | 'AnimationFrame' | 'Timeout'; - -/** - * Subscribe options type. - */ -export interface SubscribeOptions { - /** - * If true, the listener will be called only once. - * @default false - */ - once: boolean; - - /** - * If true, the listener will be called before other. - * @default false - */ - priority: boolean; - - /** - * If true, the listener will be defined disabled by default. - * - * @default false - */ - disabled: boolean; - - /** - * Calling this listener (callback) with preview signal value (if dispatched before). - * If Immediate, the listener will be called immediately without any debounce for preview signal. - * - * @default `NextCycle` - */ - receivePrevious: DebounceType; -} - -/** - * dispatchSignal options type - */ -export interface DispatchOptions { - /** - * If 'AnimationFrame' or 'Timeout', the dispatch will be debounced (single dispatch for all changes). - * - * If 'No' or 'NextCycle', every signal is matter and count without debounced (every changes dispatched). - * - * tips: debounce work like throttle this means listeners call with latest dispatch value. - * - * @default `AnimationFrame` - */ - debounce: DebounceType; -} - -/** - * setSignalProvider options type. - */ -export interface ProviderOptions { - /** - * Calling signal provider (request signal callback) with preview signal value (if dispatched before). - * If Immediate, the listener will be called immediately without any debounce for preview signal. - * - * @default `NextCycle` - */ - receivePrevious: DebounceType; - - /** - * If 'AnimationFrame' or 'Timeout', the dispatch will be debounced (single dispatch for all changes). - * - * If 'No' or 'NextCycle', every signal is matter and count without debounced (every changes dispatched). - * - * tips: debounce work like throttle this means listeners call with latest dispatch value. - * - * @default `AnimationFrame` - */ - debounce: DebounceType; -} - -/** - * Subscribe callback function. - */ -export type ListenerFunction = (detail: T) => void | Promise; - -/** - * Command/Context provider/handler function. - */ -export type ProviderFunction = (argumentObject: TArgument) => MaybePromise; - -/** - * Listener spec. - */ -export interface ListenerSpec { - /** - * Unique listener id - */ - id: number; - - /** - * Signal id - */ - signalId: string; -} - -/** - * Signal listeners object in storage. - */ -export type ListenerObject = ListenerSpec & { - /** - * If true, the listener will be called only once and removed automatically after first call - */ - once: boolean; - - /** - * If true, the listener will be disabled. - */ - disabled: boolean; - - callback: ListenerFunction; -}; - -/** - * Signal object in storage. - */ -export interface SignalObject { - /** - * Signal id for direct access. - */ - id: string; - - /** - * Last dispatched detail. - */ - detail?: T; - - /** - * If true, the signal is disabled. - */ - disabled: boolean; - - /** - * Dispatches debounced (delayed). - * Internal use case for debounce dispatch signal. - */ - debounced: boolean; - - /** - * Signal listeners list. - */ - listenerList: ListenerObject[]; -} - -/** - * Signal stack storage. - */ -export type SignalStorage = Record | undefined>; - -/** - * Requestable context value type. - */ -export type RequestableContext = - | { - state: 'initial' | 'pending'; - content?: never; - } - | { - state: 'error'; - content?: T; // last data - } - | { - state: 'complete' | 'reloading'; - content: T; - }; diff --git a/core/signal/tsconfig.json b/core/signal/tsconfig.json deleted file mode 100644 index e7d09db56..000000000 --- a/core/signal/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../type"}, - {"path": "../util"}, - ] -} diff --git a/core/signal2/CHANGELOG.md b/core/signal2/CHANGELOG.md deleted file mode 100644 index 4d6a343cc..000000000 --- a/core/signal2/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/signal2 - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **signal2:** build issue ([5bd3894](https://github.com/AliMD/alwatr/commit/5bd3894e6187c63b70e7108953d388197e016ae7)) -- **signal2:** root exports and reg alwatr module ([19a2124](https://github.com/AliMD/alwatr/commit/19a21249c308efea330d6bcc46989173f7a312c2)) -- **signal:** AlwatrMultithreadContextSignal issue ([0a69993](https://github.com/AliMD/alwatr/commit/0a69993b311f6d707361d8b86f66952a26c50f0b)) - -### Features - -- **signal2/context:** base class ([5ae487a](https://github.com/AliMD/alwatr/commit/5ae487abbd0ae24fa137e095130bfeb176b7b117)) -- **signal2:** add `event` signal class ([7e2db81](https://github.com/AliMD/alwatr/commit/7e2db8119c47e590a48f26695eae639f9548ab00)) -- **signal2:** add multi-thread functionality ([cff2626](https://github.com/AliMD/alwatr/commit/cff26264903aafbc51ff1f11888987d7cc1f459f)) -- **signal2:** AlwatrContext ([56278a2](https://github.com/AliMD/alwatr/commit/56278a2068119e757180c5a32ac289b546c804b6)) -- **signal2:** base package ([10be43a](https://github.com/AliMD/alwatr/commit/10be43ab8972fe158896e9570257e8eb275d767e)) -- **signal2:** external types ([bb19b41](https://github.com/AliMD/alwatr/commit/bb19b4127ec977f549488300c872c9f03ac30f9a)) -- **signal2:** new AlwatrContextSignal extends AlwatrBaseSignal ([9ecdb56](https://github.com/AliMD/alwatr/commit/9ecdb56423a169b6225a8f51228e009158c050f6)) -- **signal2:** new AlwatrEventSignal extends AlwatrBaseSignal ([cedfe31](https://github.com/AliMD/alwatr/commit/cedfe318a5f6d97f8a198c676f520b846d9f70ae)) -- **signal2:** new AlwatrMultithreadContextSignal extends AlwatrBaseSignal ([7320764](https://github.com/AliMD/alwatr/commit/7320764f25d89540fba44826ce64bf1894f2d875)) -- **signal2:** new AlwatrSimpleSignal extends AlwatrBaseSignal ([1e258ba](https://github.com/AliMD/alwatr/commit/1e258bac1a9afc64c7b9eee9f515db2ad69ec1af)) -- **signal2:** new base class for handle all features ([68b62cc](https://github.com/AliMD/alwatr/commit/68b62cce8b41f0067bc09f44097d2fee1cae1327)) -- **signal2:** new context ([966fb63](https://github.com/AliMD/alwatr/commit/966fb6384a378d13692436fcb4a083c9dc778701)) diff --git a/core/signal2/README.md b/core/signal2/README.md deleted file mode 100644 index 800564365..000000000 --- a/core/signal2/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Signal - `@alwatr/signal2` - -Elegant powerful event system for handle global signals and states written in tiny TypeScript module. - -Every signal has own value and can be used as a advance **state management** like redux and recoil without the complexities and unnecessary facilities of those libraries. diff --git a/core/signal2/package.json b/core/signal2/package.json deleted file mode 100644 index 47cbaf896..000000000 --- a/core/signal2/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@alwatr/signal2", - "version": "1.0.0", - "description": "Elegant powerful event system for handle global signals and states written in tiny TypeScript module.", - "keywords": [ - "signal", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "private": true, - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/signal2" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/signal2#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.0.0", - "@alwatr/type": "^1.0.0", - "@alwatr/util": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/core/signal2/src/context.ts b/core/signal2/src/context.ts deleted file mode 100644 index 31fa80ca4..000000000 --- a/core/signal2/src/context.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {AlwatrObservable} from './observable.js'; - -/** - * Alwatr context signal. - */ -export class AlwatrContextSignal extends AlwatrObservable { - constructor(config: {name: string, loggerPrefix?: string}) { - config.loggerPrefix ??= 'context-signal'; - super(config); - } - - /** - * Get context value. - * - * Return undefined if context not set before or expired. - */ - getValue(): T | undefined { - return super._getData(); - } - - /** - * Set context value and notify all subscribers. - */ - setValue(value: T): void { - this._logger.logMethodArgs?.('setValue', {value}); - super._notify(value); - } - - /** - * Clear current context value without notify subscribers. - * - * `receivePrevious` in new subscribers not work until new context changes. - */ - expire(): void { - super._clear(); - } - - /** - * Get the value of the next context changes. - */ - untilChange(): Promise { - return super._untilNewNotify(); - } -} diff --git a/core/signal2/src/index.ts b/core/signal2/src/index.ts deleted file mode 100644 index b52c8fc7e..000000000 --- a/core/signal2/src/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {globalAlwatr} from '@alwatr/logger'; - -export * from './simple-signal.js'; -export * from './signal.js'; -export * from './context.js'; -export * from './multithread-context.js'; -export * from './type.js'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/signal2', - version: _ALWATR_VERSION_, -}); diff --git a/core/signal2/src/multithread-context.ts b/core/signal2/src/multithread-context.ts deleted file mode 100644 index 94851c5d4..000000000 --- a/core/signal2/src/multithread-context.ts +++ /dev/null @@ -1,64 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -import {AlwatrContextSignal} from './context.js'; - -interface AlwatrContextChangedMessage { - type: 'alwatr_context_changed'; - name: string; - payload: unknown; -} - -/** - * Alwatr multithread context signal. - */ -export class AlwatrMultithreadContextSignal extends AlwatrContextSignal { - protected static _logger = createLogger(`alwatr/mt-context`); - protected static _worker?: Worker; - protected static _registry: Record | undefined> = {}; - - static setupChannel(worker: Worker = self as unknown as Worker): void { - AlwatrMultithreadContextSignal._worker = worker; - worker.addEventListener('message', AlwatrMultithreadContextSignal._onMessage); - } - - static _onMessage(event: MessageEvent): void { - const message = event.data as AlwatrContextChangedMessage; - if (message.type !== 'alwatr_context_changed') return; - AlwatrMultithreadContextSignal._logger.logMethodArgs?.('_onMessage', {message}); - const context = AlwatrMultithreadContextSignal._registry[message.name]; - if (context === undefined) { - throw new Error('context_not_define', {cause: 'context not define in this thread yet!'}); - } - context._notify(message.payload); - } - - static _postMessage(name: string, payload: unknown): void { - AlwatrMultithreadContextSignal._logger.logMethodArgs?.('_postMessage', {name, payload}); - if (AlwatrMultithreadContextSignal._worker === undefined) { - throw new Error('worker_not_defined', {cause: 'setupChannel must be called before any setValue.'}); - } - AlwatrMultithreadContextSignal._worker.postMessage({ - type: 'alwatr_context_changed', - name, - payload, - } as AlwatrContextChangedMessage); - } - - constructor(config: {name: string, loggerPrefix?: string}) { - super(config); - - if (AlwatrMultithreadContextSignal._registry[this._name] !== undefined) { - throw new Error('context_name_exist'); - } - - AlwatrMultithreadContextSignal._registry[this._name] = this as AlwatrMultithreadContextSignal; - } - - /** - * Set context value and notify all subscribers. - */ - override setValue(value: TValue): void { - super.setValue(value); - AlwatrMultithreadContextSignal._postMessage(this._name, value); - } -} diff --git a/core/signal2/src/observable.ts b/core/signal2/src/observable.ts deleted file mode 100644 index 3213c6df3..000000000 --- a/core/signal2/src/observable.ts +++ /dev/null @@ -1,150 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -import type { - SubscribeOptions, - ListenerCallback, - Observer, - SubscribeResult, - AlwatrObservableInterface, -} from './type.js'; - -/** - * Alwatr base signal. - */ -export abstract class AlwatrObservable implements AlwatrObservableInterface { - protected _name; - protected _logger; - protected _$data?: T; - protected _$observers: Observer[] = []; - - constructor(config: {name: string; loggerPrefix?: string}) { - config.loggerPrefix ??= 'signal'; - this._name = config.name; - this._logger = createLogger(`{${config.loggerPrefix}: ${this._name}}`); - this._logger.logMethod?.('constructor'); - } - - /** - * Get data. - * - * Return undefined if signal not notify before or expired. - */ - protected _getData(): T | undefined { - this._logger.logMethodFull?.('_getData', {}, this._$data); - return this._$data; - } - - /** - * Execute all observers and remember data. - */ - protected _notify(data: T): void { - this._logger.logMethodArgs?.('_notify', data); - this._$data = data; - setTimeout(() => this._$dispatch(data), 0); - } - - /** - * Execute all observers callback. - */ - protected _$dispatch(data: T): void { - const removeList: Observer[] = []; - - for (const listener of this._$observers) { - if (listener.options.disabled) continue; - if (listener.options.once) removeList.push(listener); - - try { - const ret = listener.callback.call(this, data); - if (ret instanceof Promise) { - ret.catch((err) => this._logger.error('_$dispatch', 'call_listener_failed', err)); - } - } - catch (err) { - this._logger.error('_$dispatch', 'call_listener_failed', err); - } - } - - for (const listener of removeList) { - this.unsubscribe(listener.callback); - } - } - - /** - * Subscribe to context changes. - */ - subscribe(listenerCallback: ListenerCallback, options: SubscribeOptions = {}): SubscribeResult { - this._logger.logMethodArgs?.('subscribe', {options}); - - const _listenerObject: Observer = { - callback: listenerCallback, - options, - }; - - let callbackExecuted = false; - const data = this._$data; - if (data !== undefined && options.receivePrevious === true && options.disabled !== true) { - // Run callback for old dispatch signal - callbackExecuted = true; - setTimeout(() => { - try { - const ret = listenerCallback.call(this, data); - if (ret instanceof Promise) { - ret.catch((err) => this._logger.error('subscribe.receivePrevious', 'call_signal_callback_failed', err)); - } - } - catch (err) { - this._logger.error('subscribe.receivePrevious', 'call_signal_callback_failed', err); - } - }, 0); - } - - // If once then must remove listener after first callback called! then why push it to listenerList?! - if (options.once !== true || callbackExecuted === true) { - if (options.priority === true) { - this._$observers.unshift(_listenerObject); - } - else { - this._$observers.push(_listenerObject); - } - } - - return { - unsubscribe: this.unsubscribe.bind(this, listenerCallback), - }; - } - - /** - * Unsubscribe from context. - */ - unsubscribe(listenerCallback: ListenerCallback): void { - this._logger.logMethod?.('unsubscribe'); - const listenerIndex = this._$observers.findIndex((listener) => listener.callback === listenerCallback); - if (listenerIndex !== -1) { - void this._$observers.splice(listenerIndex, 1); - } - } - - /** - * Clear current data without notify subscribers. - * - * `receivePrevious` in new subscribers not work until new a notify changes the data. - */ - protected _clear(): void { - this._logger.logMethod?.('_clear'); - this._$data = undefined; - } - - /** - * Get the data of next notify. - */ - protected _untilNewNotify(): Promise { - this._logger.logMethod?.('_untilNewNotify'); - return new Promise((resolve) => { - this.subscribe(resolve, { - once: true, - priority: true, - receivePrevious: false, - }); - }); - } -} diff --git a/core/signal2/src/signal.ts b/core/signal2/src/signal.ts deleted file mode 100644 index 3289b6af2..000000000 --- a/core/signal2/src/signal.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {AlwatrObservable} from './observable.js'; - -/** - * Alwatr event signal. - */ -export class AlwatrSignal extends AlwatrObservable { - constructor(config: {name: string, loggerPrefix?: string}) { - config.loggerPrefix ??= 'signal'; - super(config); - } - - /** - * Dispatch an event to all listeners. - */ - notify(detail: T): void { - this._notify(detail); - } - - /** - * Wait until next event. - */ - untilNewNotify(): Promise { - return super._untilNewNotify(); - } -} diff --git a/core/signal2/src/simple-signal.ts b/core/signal2/src/simple-signal.ts deleted file mode 100644 index 56ab09840..000000000 --- a/core/signal2/src/simple-signal.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {AlwatrObservable} from './observable.js'; - -/** - * Alwatr event signal without any data. - */ -export class AlwatrSimpleSignal extends AlwatrObservable { - constructor(config: {name: string, loggerPrefix?: string}) { - config.loggerPrefix ??= 'signal'; - super(config); - } - - /** - * Dispatch an event to all listeners. - */ - notify(): void { - this._notify(undefined); - } - - /** - * Wait until next event signal. - */ - untilNewNotify(): Promise { - return super._untilNewNotify(); - } -} diff --git a/core/signal2/src/type.ts b/core/signal2/src/type.ts deleted file mode 100644 index 5127d82e5..000000000 --- a/core/signal2/src/type.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type {MaybePromise} from '@alwatr/type'; - -/** - * Subscribe options type. - */ -export interface SubscribeOptions { - /** - * If true, the listener will be called only once. - */ - once?: true; - - /** - * If true, the listener will be called before other. - */ - priority?: true; - - /** - * If true, the listener will be defined disabled by default. - */ - disabled?: true; - - /** - * If true, calls the listener (callback) with previous signal value (if dispatched before). - */ - receivePrevious?: boolean; - - /** - * If defined, calls the listener (callback) with debounce. - */ - // debounce?: 'AnimationFrame' | number; -} - -export type ListenerCallback = (this: T, detail: D) => MaybePromise; - -export interface Observer { - callback: ListenerCallback; - options: SubscribeOptions; -} - -export interface SubscribeResult { - unsubscribe: () => void; -} - -export interface AlwatrObservableInterface { - subscribe(listenerCallback: ListenerCallback, options?: SubscribeOptions): SubscribeResult; - unsubscribe(listenerCallback: ListenerCallback): void; -} diff --git a/core/signal2/tsconfig.json b/core/signal2/tsconfig.json deleted file mode 100644 index e7d09db56..000000000 --- a/core/signal2/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../type"}, - {"path": "../util"}, - ] -} diff --git a/core/storage-client/CHANGELOG.md b/core/storage-client/CHANGELOG.md deleted file mode 100644 index 65f8355ea..000000000 --- a/core/storage-client/CHANGELOG.md +++ /dev/null @@ -1,204 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/storage-client@1.1.1...@alwatr/storage-client@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/storage-client - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/storage-client@1.1.0...@alwatr/storage-client@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/storage-client - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -### Bug Fixes - -* **storage-client:** `get` return type ([dfe9728](https://github.com/AliMD/alwatr/commit/dfe9728b033d74f25891cab02fc19a153f760896)) -* **storage-client:** remove some extra types ([017b8ed](https://github.com/AliMD/alwatr/commit/017b8ed262cf009a7ce3eeb9c141761d3d32ba81)) - -### Features - -* **storage-client:** compatibel with new storage server response types ([9b88472](https://github.com/AliMD/alwatr/commit/9b88472ce4f037010c291f5e15b2a480a8439fdf)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* logger new api ([fd86f32](https://github.com/AliMD/alwatr/commit/fd86f324b98dc1d22654f4597a033e8ff10c4dad)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -* **storage-client:** serviceRequest type ([66758e1](https://github.com/AliMD/alwatr/commit/66758e12a6da369f9d2ff90b57a470ff08413f7b)) - -### Features - -* **storage-client:** `cacheApiResponse` method ([4d6ca79](https://github.com/AliMD/alwatr/commit/4d6ca793ef46f1eabed7ed5e07a2fa3234811a1b)) -* **storage-client:** `link` method ([25e2250](https://github.com/AliMD/alwatr/commit/25e22507004d230f809884bbb88d02410571db53)) -* **storage-client:** add touch method ([5a347b3](https://github.com/AliMD/alwatr/commit/5a347b316408c53ed3f5947fed9c1fff41c0c13c)) - -# 0.30.0 (2023-03-06) - -# 0.29.0 (2023-02-10) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **storage-client:** export AlwatrStorageClientConfig ([9d626c2](https://github.com/AliMD/alwatr/commit/9d626c28898c7d97776896317d246b8483ecbe5e)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) - -### Features - -* **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* **storage-client:** build issue ([20df110](https://github.com/AliMD/alwatr/commit/20df1106f8fad4dc916d44467584000cace07541)) -* **storage-client:** getStorage queryParameters ([441c2f8](https://github.com/AliMD/alwatr/commit/441c2f88719d0fd98eb70d26aa4ea79a47acd6b9)) -* **storage-client:** import type ([c1ef85d](https://github.com/AliMD/alwatr/commit/c1ef85d74be28998f5b5ce6b55bb92a6c40fcd89)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -* **storage-client:** error codes ([fc5fe8a](https://github.com/AliMD/alwatr/commit/fc5fe8a650d881b224c9421da3bb34565e1e3fee)) -* **storage-client:** more data validate on get ([4a8200c](https://github.com/AliMD/alwatr/commit/4a8200c42da20fe21dbdf198ef1c3708186e23cc)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/storage-client - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **storage-client:** `get` return type ([dfe9728](https://github.com/AliMD/alwatr/commit/dfe9728b033d74f25891cab02fc19a153f760896)) -- **storage-client:** remove some extra types ([017b8ed](https://github.com/AliMD/alwatr/commit/017b8ed262cf009a7ce3eeb9c141761d3d32ba81)) - -### Features - -- **storage-client:** compatibel with new storage server response types ([9b88472](https://github.com/AliMD/alwatr/commit/9b88472ce4f037010c291f5e15b2a480a8439fdf)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- logger new api ([fd86f32](https://github.com/AliMD/alwatr/commit/fd86f324b98dc1d22654f4597a033e8ff10c4dad)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **storage-client:** serviceRequest type ([66758e1](https://github.com/AliMD/alwatr/commit/66758e12a6da369f9d2ff90b57a470ff08413f7b)) - -### Features - -- **storage-client:** `cacheApiResponse` method ([4d6ca79](https://github.com/AliMD/alwatr/commit/4d6ca793ef46f1eabed7ed5e07a2fa3234811a1b)) -- **storage-client:** `link` method ([25e2250](https://github.com/AliMD/alwatr/commit/25e22507004d230f809884bbb88d02410571db53)) -- **storage-client:** add touch method ([5a347b3](https://github.com/AliMD/alwatr/commit/5a347b316408c53ed3f5947fed9c1fff41c0c13c)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/storage-client - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -**Note:** Version bump only for package @alwatr/storage-client - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **storage-client:** export AlwatrStorageClientConfig ([9d626c2](https://github.com/AliMD/alwatr/commit/9d626c28898c7d97776896317d246b8483ecbe5e)) - -### Features - -- **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/storage-client - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- **storage-client:** build issue ([20df110](https://github.com/AliMD/alwatr/commit/20df1106f8fad4dc916d44467584000cace07541)) -- **storage-client:** getStorage queryParameters ([441c2f8](https://github.com/AliMD/alwatr/commit/441c2f88719d0fd98eb70d26aa4ea79a47acd6b9)) -- **storage-client:** import type ([c1ef85d](https://github.com/AliMD/alwatr/commit/c1ef85d74be28998f5b5ce6b55bb92a6c40fcd89)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -### Features - -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- **storage-client:** error codes ([fc5fe8a](https://github.com/AliMD/alwatr/commit/fc5fe8a650d881b224c9421da3bb34565e1e3fee)) -- **storage-client:** more data validate on get ([4a8200c](https://github.com/AliMD/alwatr/commit/4a8200c42da20fe21dbdf198ef1c3708186e23cc)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -### Features - -- **storage-client:** dynamic storage name ([07cf5fb](https://github.com/AliMD/alwatr/commit/07cf5fb2086d1f8ad0f731470a5dfb313038b51c)) -- **storage-client:** dynamic storage name ([2f0ca5b](https://github.com/AliMD/alwatr/commit/2f0ca5b85241c2298efc503e5f14f994a35be484)) - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/storage-client - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- remove \_updatedBy ([d8d5c83](https://github.com/AliMD/alwatr/commit/d8d5c83884bbd30566001ff84faf9e840503471c)) -- update types ([44cc57f](https://github.com/AliMD/alwatr/commit/44cc57f97a99ed810dae3fde39c9525bd0e8ff3c)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -### Features - -- **storage-client:** use document object from fetch ([1ab7f5d](https://github.com/AliMD/alwatr/commit/1ab7f5da462975bc3b765663d9e3ff97c214a4e3)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/storage-client - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -### Bug Fixes - -- **storage-client:** types issues ([c083bd0](https://github.com/AliMD/alwatr/commit/c083bd08cd2364bc64ebd1e60c668f37784d8502)) - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **storage-client:** fetch in has method ([a6f9098](https://github.com/AliMD/alwatr/commit/a6f909821510c8da2fe9ab7340d3f010165a84c8)) -- **storage-client:** nodejs memory leak issue ([d5e0cde](https://github.com/AliMD/alwatr/commit/d5e0cde091b8eba450a443ceba737aa1cac4fd3e)) -- **storage-client:** remove all null as value ([6fbc6e5](https://github.com/AliMD/alwatr/commit/6fbc6e52e4b3d64ee5f347df6dc92673ce79e7ed)) -- **storage-client:** return array of string in keys ([b838f1f](https://github.com/AliMD/alwatr/commit/b838f1f0161b3b76edc855e227161851bebaf3be)) -- **storage-client:** return boolean has in method ([68123cd](https://github.com/AliMD/alwatr/commit/68123cd92d2ec085dc72d948a163c26796b27adc)) -- **storage-client:** review!!!!! ([c803991](https://github.com/AliMD/alwatr/commit/c8039914aed6b1ad98d60de8b39122542811121b)) -- **storage-client:** types ([f277771](https://github.com/AliMD/alwatr/commit/f277771973908d280b1879e96e77446c9f88bbe9)) -- **storage-client:** use dynamic token ([3c68806](https://github.com/AliMD/alwatr/commit/3c68806762c027af7a2d5e019d08de6a8b079661)) - -### Features - -- **storage-client:** AlwatrStorageClient class structure ([164f44e](https://github.com/AliMD/alwatr/commit/164f44e1028b325941d1b90be670b8f4194bfc75)) -- **storage-client:** forAll method ([40f802a](https://github.com/AliMD/alwatr/commit/40f802aa02b02d8d9341822b36708fc81f16cbce)) -- **storage-client:** get method ([3f2d1a6](https://github.com/AliMD/alwatr/commit/3f2d1a6363daa006a38c40f95d9b528937d38896)) -- **storage-client:** get, set, delete, getAll, keys methods ([2da68ba](https://github.com/AliMD/alwatr/commit/2da68ba81ed5b18fba1c5a63a7e22cbcd98dda47)) -- **storage-client:** has method ([ba64195](https://github.com/AliMD/alwatr/commit/ba6419512b75f3bd17a7d86fc2d41a41d8179d8d)) -- **storage-client:** new package ([cfe72da](https://github.com/AliMD/alwatr/commit/cfe72da75f49f66c4d03875b0cb7c29966bb1c84)) - -### Performance Improvements - -- **storage-client:** refactor for perf improve and keep alive ([ed0b743](https://github.com/AliMD/alwatr/commit/ed0b743a8936602b63d92c216d2d65f6a31d74cf)) diff --git a/core/storage-client/README.md b/core/storage-client/README.md deleted file mode 100644 index d7960dfa2..000000000 --- a/core/storage-client/README.md +++ /dev/null @@ -1,134 +0,0 @@ -# Alwatr Storage Client - `@alwatr/storage-client` - -Elegant micro client for storage server written in tiny TypeScript ES module. - -## Example usage - -```ts -import {type AlwatrDocumentObject, AlwatrStorageClient} from '@alwatr/storage-client'; - -type User = AlwatrDocumentObject & { - email: string; - token?: string; -}; - -const db = new AlwatrStorageClient({ - name: 'user-list', - host: '127.0.0.1', - port: 9000, - token: 'YOUR_SECRET_TOKEN', - timeout: 2_000, -}); - -await db.set({ - id: 'alimd', - email: 'ali@mihandoost.com', -}); - -await db.set({ - id: 'fmd', - email: 'Fatemeh@mihandoost.com', - token: Math.random().toString(36).substring(2, 15), -}); - -console.log("has 'alimd': %o", await db.has('alimd')); -console.log('keys: %o', await db.keys()); -console.log('getAll: %o', await db.getAll()); -console.log('delete: %o', await db.delete('alimd')); -try { - await db.delete('abcd'); -} catch (err) { - console.log('delete 404: %o', (err as Error).message); -} -``` - -## API - -### `config.name: string` - -Storage name (like database name). - -### `config.host: string` - -Storage server host name (URL). - -### `config.token: string` - -Storage server token (like database password). - -### `config.timeout?: number` - -A timeout in ms for the fetch request. - -### `config.debug?: boolean` - -Debug output logs. - -### `get(documentId: string): Promise` - -Get a document object by id. - -- **documentId**: The id of the document object. - -Example: - -```ts -try { - const user = await userStorage.get('user-1'); - console.dir(item); -} catch (err) { - if ((err as Error)?.message === 'document_not_found') { - console.log('user_5000 id not found!'); - } else { - console.error(err); - } -} -``` - -### `has(documentId: string): Promise` - -Check document exists by id. - -- **documentId**: The id of the document object. - -Example: - -```ts -const userExist = await userStorage.has('user-1'); -if (!userExist) console.log('user_not_found'); -``` - -### `set(documentObject: DocumentType, fastInstance?: boolean): DocumentType` - -Insert/update a document object in the storage. - -- **documentObject**: The document object to insert/update contain `id`. - -Example: - -```ts -userStorage.set({ - id: 'user-1', - foo: 'bar', -}); -``` - -### `delete(documentId: string): Promise` - -Delete a document object from the storage. - -Example: - -```ts -userStorage.delete('user-1'); -``` - -### `getStorage(): Promise` - -Dump all storage data. - -Example: - -```ts -const userStorage = await userStorage.getStorage(); -``` diff --git a/core/storage-client/package.json b/core/storage-client/package.json deleted file mode 100644 index 130381be3..000000000 --- a/core/storage-client/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@alwatr/storage-client", - "version": "1.1.2", - "description": "Elegant micro client for storage server written in tiny TypeScript ES module.", - "keywords": [ - "database", - "storage", - "json", - "nosql", - "no-sql", - "data", - "data-storage", - "file", - "typescript", - "esm", - "alwatr" - ], - "main": "storage-client.js", - "type": "module", - "types": "storage-client.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/storage-client" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/storage-client#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/fetch": "^1.1.2", - "@alwatr/logger": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/core/storage-client/src/storage-client.ts b/core/storage-client/src/storage-client.ts deleted file mode 100644 index 8acf918d1..000000000 --- a/core/storage-client/src/storage-client.ts +++ /dev/null @@ -1,383 +0,0 @@ -import {type FetchOptions, serviceRequest} from '@alwatr/fetch'; -import {createLogger, globalAlwatr} from '@alwatr/logger'; - -import type {AlwatrStorageClientConfig} from './type.js'; -import type { - AlwatrDocumentObject, - AlwatrDocumentStorage, - AlwatrServiceResponseSuccess, - StringifyableRecord, -} from '@alwatr/type'; - -export {type AlwatrStorageClientConfig}; - -globalAlwatr.registeredList.push({ - name: '@alwatr/storage-client', - version: _ALWATR_VERSION_, -}); - -/** - * Elegant micro client for storage server written in tiny TypeScript ES module. - * - * Example: - * - * ```ts - * import {type AlwatrDocumentObject, AlwatrStorageClient} from '@alwatr/storage-client'; - * - * interface User extends AlwatrDocumentObject { - * fname: string; - * lname: string; - * email: string; - * token?: string; - * } - * - * const db = new AlwatrStorageClient({ - * name: 'user-list', - * host: 'http://127.0.0.1:80', - * token: 'YOUR_SECRET_TOKEN', - * timeout: 2_000, - * }); - * - * await db.set({ - * id: 'alimd', - * fname: 'Ali', - * lname: 'Mihandoost', - * email: 'ali@mihandoost.com', - * }); - * - * await db.set({ - * id: 'fmd', - * fname: 'Fatemeh', - * lname: 'Mihandoost', - * email: 'Fatemeh@mihandoost.com', - * token: Math.random().toString(36).substring(2, 15), - * }); - * - * console.log('has \'alimd\': %o', await db.has('alimd')); - * console.log('keys: %o', await db.keys()); - * console.log('getStorage: %o', await db.getStorage()); - * console.log('delete: %o', await db.delete('alimd')); - * try { - * await db.delete('abcd'); - * } - * catch (err) { - * console.log('delete 404: %o', (err as Error).message); - * } - */ -export class AlwatrStorageClient { - protected _logger = createLogger( - 'alwatr/storage-client' + (this.config.name == null ? '' : ':' + this.config.name), - this.config.devMode, - ); - - /** - * Default fetch options for service request. - */ - fetchOption: FetchOptions = { - url: 'http://' + this.config.host + ':' + this.config.port + '/', - keepalive: true, - timeout: this.config.timeout ?? 0, - cacheStrategy: 'network_only', - removeDuplicate: 'never', - retry: 3, - retryDelay: 500, - token: this.config.token, - }; - - constructor(public readonly config: AlwatrStorageClientConfig) { - this._logger.logMethodArgs?.('constructor', config); - } - - /** - * Get a document object by id. - * - * @param documentId The id of the document object. - * - * Example: - * - * ```ts - * try { - * const user = await userStorage.get('user-1'); - * console.dir(item); - * } - * catch (err) { - * if ((err as Error)?.message === 'document_not_found') { - * console.log('user_5000 id not found!'); - * } - * else { - * console.error((err as Error)?.message || err); - * } - * } - * ``` - */ - async get( - documentId: string, - storage = this.config.name, - ): Promise { - this._logger.logMethodArgs?.('get', {storage, documentId}); - if (storage == null) throw new Error('storage_not_defined'); - - const responseJson = await serviceRequest>({ - ...this.fetchOption, - queryParameters: { - storage, - id: documentId, - }, - }); - - return responseJson.data; - } - - /** - * Check document exists by id. - * - * @param documentId The id of the document object. - * - * Example: - * - * ```ts - * const userExist = await userStorage.has('user-1'); - * if (!userExist) console.log('user_not_found'); - * ``` - */ - async has(documentId: string, storage = this.config.name): Promise { - this._logger.logMethodArgs?.('has', {storage, documentId}); - if (storage == null) throw new Error('storage_not_defined'); - - const responseJson = await serviceRequest>({ - ...this.fetchOption, - url: this.fetchOption.url + 'has', - queryParameters: { - storage, - id: documentId, - }, - }); - - if (typeof responseJson.data !== 'boolean') { - this._logger.error('has', 'invalid_response_data', {responseJson}); - throw new Error('invalid_response_data'); - } - - return responseJson.data; - } - - /** - * Insert/update a document object in the storage. - * - * @param documentObject The document object to insert/update contain `id`. - * - * Example: - * - * ```ts - * await userStorage.set({ - * id: 'user-1', - * foo: 'bar', - * }); - * ``` - */ - async set( - documentObject: T, - storage = this.config.name, - ): Promise { - this._logger.logMethodArgs?.('set', {storage, documentId: documentObject.id}); - if (storage == null) throw new Error('storage_not_defined'); - - const responseJson = await serviceRequest>({ - ...this.fetchOption, - method: 'PATCH', - queryParameters: { - storage, - }, - bodyJson: documentObject, - }); - - if (typeof responseJson.data?.id !== 'string') { - this._logger.error('set', 'invalid_response_data', {responseJson}); - throw new Error('invalid_response_data'); - } - - return responseJson.data; - } - - /** - * Touch the storage to make sure storage file exist. - * - * Example: - * - * ```ts - * await userStorage.touch(); - * ``` - */ - async touch(storage = this.config.name): Promise { - this._logger.logMethodArgs?.('touch', {storage}); - if (storage == null) throw new Error('storage_not_defined'); - - await serviceRequest({ - ...this.fetchOption, - method: 'GET', - url: this.fetchOption.url + 'touch', - queryParameters: { - storage, - }, - }); - } - - /** - * Make a symbolic link - * - * **CAUTION: the destination path will be removed if exists** - * - * Example: - * - * ```ts - * await storageClient.link('private/user-50/order-list', 'public/token/oder-list'); - * ``` - */ - async link(src: string, dest: string): Promise { - this._logger.logMethodArgs?.('link', {src, dest}); - - await serviceRequest({ - ...this.fetchOption, - method: 'GET', - url: this.fetchOption.url + 'link', - queryParameters: { - src, - dest, - }, - }); - } - - /** - * Make a cache from the api response. - * - * Example: - * - * ```ts - * await storageClient.cacheApiResponse('public/token/user-profile', {id: 'test', ...}); - * ``` - */ - async cacheApiResponse( - path: string, - data: T, - ): Promise { - this._logger.logMethodArgs?.('cacheApiResponse', {path, data}); - - await serviceRequest({ - ...this.fetchOption, - method: 'PUT', - url: this.fetchOption.url + 'cache-api-response', - bodyJson: { - path, - data, - }, - }); - } - - /** - * Delete a document object from the storage. - * - * Example: - * - * ```ts - * await userStorage.delete('user-1'); - * ``` - */ - async delete( - documentId: string, - storage = this.config.name, - ): Promise { - this._logger.logMethodArgs?.('delete', {storage, documentId}); - if (storage == null) { - throw new Error('storage_not_defined'); - } - - const responseJson = await serviceRequest>({ - ...this.fetchOption, - method: 'DELETE', - queryParameters: { - storage, - id: documentId, - }, - }); - - if (typeof responseJson.data !== 'boolean') { - this._logger.error('delete', 'invalid_response_data', {responseJson}); - throw new Error('invalid_response_data'); - } - - return responseJson.data; - } - - /** - * Dump all storage. - * - * Example: - * - * ```ts - * const userStorage = await userStorage.getStorage(); - * ``` - */ - async getStorage( - name = this.config.name, - ): Promise> { - this._logger.logMethodArgs?.('getStorage', {name}); - if (name == null) { - throw new Error('storage_not_defined'); - } - - const responseJson = await serviceRequest>({ - ...this.fetchOption, - url: this.fetchOption.url + 'storage', - queryParameters: { - name, - }, - }); - - const responseJsonHasData = typeof responseJson.data === 'object'; - const responseJsonHasMeta = typeof responseJson.meta === 'object'; - const responseJsonHasLastUpdated = - typeof responseJson.meta.lastUpdated === 'number'; - if ( - !responseJsonHasData || - !responseJsonHasMeta || - !responseJsonHasLastUpdated - ) { - this._logger.error('getStorage', 'invalid_response_data', {responseJson}); - throw new Error('invalid_response_data'); - } - - return responseJson; - } - - /** - * Get all documents keys. - * - * Example: - * - * ```ts - * const userIdArray = await userStorage.keys(); - * ``` - */ - async keys(storage = this.config.name): Promise { - this._logger.logMethodArgs?.('keys', {storage}); - - if (storage == null) { - throw new Error('storage_not_defined'); - } - - const responseJson = await serviceRequest>({ - ...this.fetchOption, - url: this.fetchOption.url + 'keys', - queryParameters: { - storage, - }, - }); - - if (!Array.isArray(responseJson.data)) { - this._logger.error('keys', 'invalid_response_data', {responseJson}); - throw new Error('invalid_response_data'); - } - - return responseJson.data; - } -} diff --git a/core/storage-client/src/type.ts b/core/storage-client/src/type.ts deleted file mode 100644 index 8c31a6eec..000000000 --- a/core/storage-client/src/type.ts +++ /dev/null @@ -1,37 +0,0 @@ -export interface AlwatrStorageClientConfig { - /** - * Storage name (like database name). - */ - name?: string; - - /** - * Storage server host name. - */ - host: string; - - /** - * Storage server port number. - */ - port: number; - - /** - * Storage server token (like database password). - */ - token: string; - - /** - * A timeout in ms for the fetch request. - * - * Use with cation, you will have memory leak issue in nodejs. - * - * @default 0 disabled - */ - timeout?: number; - - /** - * Enable or disable debug mode. - * - * @default undefined Auto detect base on `NODE_ENV` - */ - devMode?: boolean; -} diff --git a/core/storage-client/tsconfig.json b/core/storage-client/tsconfig.json deleted file mode 100644 index 50eaa8ea0..000000000 --- a/core/storage-client/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../fetch"}, - {"path": "../type"} - ] -} diff --git a/core/storage-engine/CHANGELOG.md b/core/storage-engine/CHANGELOG.md deleted file mode 100644 index f6f3be84c..000000000 --- a/core/storage-engine/CHANGELOG.md +++ /dev/null @@ -1,242 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/storage-engine@1.1.1...@alwatr/storage-engine@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/storage-engine - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/storage-engine@1.1.0...@alwatr/storage-engine@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/storage-engine - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -### Bug Fixes - -* import util/node ([ca9e995](https://github.com/AliMD/alwatr/commit/ca9e995567ad267c1730e1c98f9dbbd03ab90331)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* logger new api ([fd86f32](https://github.com/AliMD/alwatr/commit/fd86f324b98dc1d22654f4597a033e8ff10c4dad)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -* **storage-engine:** dev mode ([65491ce](https://github.com/AliMD/alwatr/commit/65491ce7b7ff0756d8e475442d175b880b9894db)) -* **storage-engine:** new _$save method ([21cdf51](https://github.com/AliMD/alwatr/commit/21cdf5138bfced0177af4538d80f88fe2d415f67)) - -### Features - -* **storage-engine:** none blocking save storage ([f668ba0](https://github.com/AliMD/alwatr/commit/f668ba0232c0b3372ee14c40d35b1f7e577b15c7)) -* **storage-engine:** save new empty storage after open ([85bb855](https://github.com/AliMD/alwatr/commit/85bb8551e2dfe976d191d7c7243c29fe71433e54)) - -# 0.30.0 (2023-03-06) - -# 0.29.0 (2023-02-10) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -* **storage-engine:** migrate old storages ([10fc378](https://github.com/AliMD/alwatr/commit/10fc3785ee22bf397dd1448cf0c1568be65fb8cb)) -* **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -* **storage-engine:** AlwatrDocumentStorage ([ca9a7bf](https://github.com/AliMD/alwatr/commit/ca9a7bf5e17b333538e749ada5d481a06c847101)) -* **storage-engine:** export type ([4dbd79f](https://github.com/AliMD/alwatr/commit/4dbd79f746484c870f877b98d556930e9c35b3f9)) -* **storage-engine:** work with new types ([e86c9cd](https://github.com/AliMD/alwatr/commit/e86c9cd8de6fb6b73f3b5e185b4cc7a7afe81a83)) -* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- import util/node ([ca9e995](https://github.com/AliMD/alwatr/commit/ca9e995567ad267c1730e1c98f9dbbd03ab90331)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- logger new api ([fd86f32](https://github.com/AliMD/alwatr/commit/fd86f324b98dc1d22654f4597a033e8ff10c4dad)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **storage-engine:** dev mode ([65491ce](https://github.com/AliMD/alwatr/commit/65491ce7b7ff0756d8e475442d175b880b9894db)) -- **storage-engine:** new \_$save method ([21cdf51](https://github.com/AliMD/alwatr/commit/21cdf5138bfced0177af4538d80f88fe2d415f67)) - -### Features - -- **storage-engine:** none blocking save storage ([f668ba0](https://github.com/AliMD/alwatr/commit/f668ba0232c0b3372ee14c40d35b1f7e577b15c7)) -- **storage-engine:** save new empty storage after open ([85bb855](https://github.com/AliMD/alwatr/commit/85bb8551e2dfe976d191d7c7243c29fe71433e54)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **storage-engine:** migrate old storages ([10fc378](https://github.com/AliMD/alwatr/commit/10fc3785ee22bf397dd1448cf0c1568be65fb8cb)) -- **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- **storage-engine:** AlwatrDocumentStorage ([ca9a7bf](https://github.com/AliMD/alwatr/commit/ca9a7bf5e17b333538e749ada5d481a06c847101)) -- **storage-engine:** export type ([4dbd79f](https://github.com/AliMD/alwatr/commit/4dbd79f746484c870f877b98d556930e9c35b3f9)) -- **storage-engine:** work with new types ([e86c9cd](https://github.com/AliMD/alwatr/commit/e86c9cd8de6fb6b73f3b5e185b4cc7a7afe81a83)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/storage-engine - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- remove \_updatedBy ([d8d5c83](https://github.com/AliMD/alwatr/commit/d8d5c83884bbd30566001ff84faf9e840503471c)) -- **storage-engine:** generic get type ([a287362](https://github.com/AliMD/alwatr/commit/a2873624fe2fd8071944528dba2e0c1d4dd006cc)) -- **storage-engine:** update types ([26bc0ae](https://github.com/AliMD/alwatr/commit/26bc0ae48b0b41cc2a9d18d3bb2883fafb447ede)) -- **storage-engine:** util types ([41f97fd](https://github.com/AliMD/alwatr/commit/41f97fdbd4c902dc11b82b230a805bbf7b77ec81)) -- update types ([44cc57f](https://github.com/AliMD/alwatr/commit/44cc57f97a99ed810dae3fde39c9525bd0e8ff3c)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -### Features - -- **storage-engine:** improve provider debug ([c9cfc8f](https://github.com/AliMD/alwatr/commit/c9cfc8f4914887d4861e67f5a39670a646e9900a)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/storage-engine - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -### Bug Fixes - -- **storage-engine:** auto_increment issue ([ff7bdca](https://github.com/AliMD/alwatr/commit/ff7bdca2138398a3f69551e8235c3d1a9a0fae60)) - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Features - -- **storage-engine:** storage meta and auto_increment id ([3726947](https://github.com/AliMD/alwatr/commit/37269479e483e3108f3b8ef6706ea1d701290222)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -### Bug Fixes - -- **storage:** clear cached keys ([fa2c4be](https://github.com/AliMD/alwatr/commit/fa2c4bed8e2fd84c5eeca57f8f2ff8b87030a58b)) -- **storage:** export DocumentListStorage type ([ea6cc7d](https://github.com/AliMD/alwatr/commit/ea6cc7dd996e6cacba85b71c8448ac22965b8c1b)) - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Bug Fixes - -- **storage:** \_last ket ([a1c452a](https://github.com/AliMD/alwatr/commit/a1c452a50c7b53b03765bf37556264a64ac3ed55)) - -## [0.16.1](https://github.com/AliMD/alwatr/compare/v0.16.0...v0.16.1) (2022-09-10) - -### Bug Fixes - -- **storage:** import exitHook ([c371381](https://github.com/AliMD/alwatr/commit/c37138121f7882239d7ecd38e3496f17919845a2)) -- **storage:** update AlwatrStorageProviderConfig ([bd33e36](https://github.com/AliMD/alwatr/commit/bd33e367c04cf0b7b11e803709da210a75318767)) - -### Features - -- **storage:** force save abd exist hook to prevent data lost ([e327d65](https://github.com/AliMD/alwatr/commit/e327d657217d2e814b007e69eeca4f5c42758979)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -### Bug Fixes - -- **storage:** Clear cached keys on new docId ([2aa648c](https://github.com/AliMD/alwatr/commit/2aa648c4543cfef016b55d8389796445a118c73f)) - -### Features - -- **storage:** forEach ([cc26999](https://github.com/AliMD/alwatr/commit/cc26999e4303c54cdd18c79c4b4515ac50480a6d)) - -### Performance Improvements - -- **storage:** silent get ([c2cbd88](https://github.com/AliMD/alwatr/commit/c2cbd887f20031f86392aec6537bfd699a36480b)) - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/storage-engine - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Bug Fixes - -- **storage:** imports ([8d86a73](https://github.com/AliMD/alwatr/commit/8d86a73c85c117416e2ae0f4c9b879bfbc2d8a7c)) -- **storage:** provider config ([4497dda](https://github.com/AliMD/alwatr/commit/4497ddae726fce45b9d94a600fa19a07d2d6d298)) - -### Features - -- **provider:** show mwmory usage on new data loaded ([1a24df3](https://github.com/AliMD/alwatr/commit/1a24df32d057cfdc91a1c8d47c3a0346065b9a40)) -- **storage:** add \_createdBy and \_updatedBy ([1a70945](https://github.com/AliMD/alwatr/commit/1a70945bc61921f13d839adde25fdfe9fb37eaad)) -- **storage:** improve process and add has, storagePath, keys and length ([4e323ad](https://github.com/AliMD/alwatr/commit/4e323ad10ee0630cfa02edd191167b69e14743ff)) -- **storage:** provider ([92df9f3](https://github.com/AliMD/alwatr/commit/92df9f33a1c5b044d95e2efed51281eb08556c94)) - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -**Note:** Version bump only for package @alwatr/storage-engine diff --git a/core/storage-engine/README.md b/core/storage-engine/README.md deleted file mode 100644 index 2f91b8346..000000000 --- a/core/storage-engine/README.md +++ /dev/null @@ -1,167 +0,0 @@ -# Alwatr Storage Engine - `@alwatr/storage-engine` - -Elegant micro in-memory json-like storage with disk backed, Fastest NoSQL Database written in tiny TypeScript ES module. - -## Example usage - -```ts -import {type AlwatrDocumentObject, AlwatrStorageEngine} from '@alwatr/storage-engine'; - -type User = AlwatrDocumentObject & { - fname: string; - lname: string; - email: string; - token?: string; -}; - -const db = new AlwatrStorageEngine({ - name: 'user-list', - path: 'db', - saveBeautiful: true, - debug: true, -}); - -console.log('db loaded and ready to access.'); - -let ali = db.get('alimd'); - -if (ali == null) { - console.log('ali not found'); - ali = { - id: 'alimd', - fname: 'Ali', - lname: 'Mihandoost', - email: 'ali@mihandoost.com', - }; -} else { - console.log('ali found: %o', ali); - ali.token = Math.random().toString(36).substring(2, 15); -} - -db.set(ali); - -db.set({ - id: 'fmd', - fname: 'Fatemeh', - lname: 'Mihandoost', - email: 'Fatemeh@mihandoost.com', - token: Math.random().toString(36).substring(2, 15), -}); -``` - -## API - -### `readonly name: string` - -Storage name like database table name. - -### `readonly storagePath: string` - -Storage file full path. - -### `readonly saveDebounce: number` - -Save debounce timeout for minimal disk iops usage. - -### `readonly saveBeautiful: boolean` - -Write pretty formatted JSON file. - -Example: - -```ts -const db = new AlwatrStorageEngine('user-list'); -await userStorage.readyPromise; -const user = userStorage.get('user-1'); -``` - -### `keys: Array` - -All document ids in array. - -### `length: number` - -### `set(documentObject: DocumentType, fastInstance?: boolean): DocumentType` - -Insert/update a document object in the storage. - -- **documentObject**: The document object to insert/update contain `id`. -- **fastInstance**: by default it will make a copy of the document before set. - if you set fastInstance to true, it will set the original document. - This is dangerous but much faster, you should use it only if you know what you are doing. - -Example: - -```ts -userStorage.set({ - id: 'user-1', - foo: 'bar', -}); -``` - -### `get(documentId: string, fastInstance?: boolean): DocumentType | null` - -Get a document object by id. - -- **documentId**: The id of the document object. -- **fastInstance**: by default it will return a copy of the document. - if you set fastInstance to true, it will return the original document. - This is dangerous but much faster, you should use it only if you know what you are doing. - -Example: - -```ts -const user = userStorage.get('user-1'); -``` - -### `has(documentId: string): boolean` - -Check documentId exist in the storage or not. - -Example: - -```ts -if (!useruserStorage.has('user-1')) throw new Error('user not found'); -``` - -### `delete(documentId: string): boolean` - -Delete a document object from the storage. - -Example: - -```ts -userStorage.delete('user-1'); -``` - -### `*allObject()` - -Loop over all document objects. - -Example: - -```ts -for (const user of userStorage.allObject()) { - await sendMessage(user.id, 'Happy new year!'); - user.sent = true; // direct change document (use with caution)! -} -``` - -### `save(): void` - -Save the storage to disk. - -### `forceSave(): void` - -Save the storage to disk without any debounce. - -### `unload(): void` - -Unload storage data and free ram usage (auto saved before unload). - -Example: - -```ts -userStorage.unload(); -delete userStorage; -``` diff --git a/core/storage-engine/package.json b/core/storage-engine/package.json deleted file mode 100644 index c79acb9b3..000000000 --- a/core/storage-engine/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "@alwatr/storage-engine", - "version": "1.1.2", - "description": "Elegant micro in-memory json-like storage with disk backed, Faster NoSQL Database written in tiny TypeScript ES module.", - "keywords": [ - "database", - "storage", - "json", - "nosql", - "no-sql", - "data", - "data-storage", - "file", - "typescript", - "esm", - "alwatr" - ], - "main": "storage-engine.js", - "type": "module", - "types": "storage-engine.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/storage-engine" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/storage-engine#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/logger": "^1.1.2", - "@alwatr/util": "^1.2.0", - "exit-hook": "^4.0.0", - "tslib": "^2.6.2" - } -} diff --git a/core/storage-engine/src/provider.ts b/core/storage-engine/src/provider.ts deleted file mode 100644 index a0d48080a..000000000 --- a/core/storage-engine/src/provider.ts +++ /dev/null @@ -1,64 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -import {AlwatrStorageEngine} from './storage-engine.js'; - -import type {AlwatrStorageEngineConfig, AlwatrStorageEngineProviderConfig} from './type.js'; -import type {AlwatrDocumentObject} from '@alwatr/type'; - -// TODO: auto unload base of last usage time and memory limit. - -/** - * Easy access to many storages with auto garbage collector - * - * Example: - * - * ```ts - * import {AlwatrStorageEngineProvider} from '@alwatr/storage-engine'; - * const storageList = new AlwatrStorageEngineProvider(); - * // ... - * const user = (await storageList.get('user-list')).get('userId1'); - * ``` - */ -export class AlwatrStorageEngineProvider { - protected _logger = createLogger('alwatr/storage-provider', this._config.devMode); - protected _list: Record = {}; - - constructor(protected _config: AlwatrStorageEngineProviderConfig) { - this._logger.logMethodArgs?.('constructor', _config); - } - - // TODO: update all jsdoc and readme. - get( - config: AlwatrStorageEngineConfig, - ): AlwatrStorageEngine { - this._logger.logMethodArgs?.('get', {name: config.name}); - if (!this._list[config.name]) { - this._logger.incident?.('get', 'new_storage', 'Create new storage engine', {name: config.name}); - this._list[config.name] = new AlwatrStorageEngine({ - ...this._config, - ...config, - }); - console.log('Memory usage: %sMB', Math.round(process.memoryUsage.rss() / 100_000) / 10); - } - return this._list[config.name] as AlwatrStorageEngine; - } - - unload(name: string): void { - this._logger.logMethodArgs?.('unload', {name}); - if (this._list[name] == null) { - this._logger.accident('unload', 'storage_not_found', 'Storage not defined or unloaded before', {name}); - return; - } - this._list[name].unload(); - delete this._list[name]; - } - - unloadAll(): void { - for (const name in this._list) { - if (!Object.prototype.hasOwnProperty.call(this._list, name)) continue; - this._list[name].unload(); - delete this._list[name]; - } - this._list = {}; - } -} diff --git a/core/storage-engine/src/storage-engine.ts b/core/storage-engine/src/storage-engine.ts deleted file mode 100644 index 5c3ec92c8..000000000 --- a/core/storage-engine/src/storage-engine.ts +++ /dev/null @@ -1,403 +0,0 @@ -import {resolve} from 'node:path'; - -import {createLogger, globalAlwatr, type AlwatrLogger} from '@alwatr/logger'; -import {readJsonFileSync, writeJsonFile, writeJsonFileSync} from '@alwatr/util/node.js'; -import exitHook from 'exit-hook'; - -import type {AlwatrStorageEngineConfig} from './type.js'; -import type {AlwatrDocumentStorage, AlwatrDocumentObject, MaybePromise} from '@alwatr/type'; - -export type {AlwatrDocumentObject, AlwatrDocumentStorage}; - -globalAlwatr.registeredList.push({ - name: '@alwatr/storage-engine', - version: _ALWATR_VERSION_, -}); - -/** - * Elegant micro in-memory json-like storage with disk backed, - * Fastest NoSQL Database written in tiny TypeScript ES module. - * - * Example: - * - * ```ts - * import {type AlwatrDocumentObject, AlwatrStorageEngine} from '@alwatr/storage-engine'; - * - * interface User extends AlwatrDocumentObject { - * fname: string; - * lname: string; - * email: string; - * token?: string; - * } - * - * const db = new AlwatrStorageEngine({ - * name: 'user-list', - * path: 'db', - * saveBeautiful: true, - * debug: true, - * }); - * - * console.log('db loaded and ready to access.'); - * - * let ali = db.get('alimd'); - * - * if (ali == null) { - * console.log('ali not found'); - * ali = { - * id: 'alimd', - * fname: 'Ali', - * lname: 'Mihandoost', - * email: 'ali@mihandoost.com', - * }; - * } - * else { - * console.log('ali found: %o', ali); - * ali.token = Math.random().toString(36).substring(2, 15); - * } - * - * db.set(ali); - * - * db.set({ - * id: 'fmd', - * fname: 'Fatemeh', - * lname: 'Mihandoost', - * email: 'Fatemeh@mihandoost.com', - * token: Math.random().toString(36).substring(2, 15), - * }); - * ``` - */ -export class AlwatrStorageEngine { - static readonly formatVersion = 5; - - /** - * Storage name like database table name. - */ - readonly name: string; - - /** - * Storage file full path. - */ - readonly storagePath: string; - - /** - * Save debounce timeout for minimal disk iops usage. - */ - saveDebounce: number; - - /** - * Write pretty formatted JSON file. - */ - saveBeautiful: boolean; - - /** - * The storage has unsaved changes that have not yet saved. - */ - hasUnsavedChanges = false; - - _storage: AlwatrDocumentStorage; - - protected _logger: AlwatrLogger; - protected _keys: string[] | null = null; - - /** - * All document ids in array. - */ - get keys(): string[] { - if (this._keys === null) { - this._keys = Object.keys(this._storage.data); - } - return this._keys; - } - - /** - * Size of the storage. - */ - get length(): number { - return this.keys.length; - } - - /** - * Get next auto increment id for numerical document id. - */ - protected _nextAutoIncrementId(): string { - this._storage.meta.lastAutoId; - do { - this._storage.meta.lastAutoId++; - } while (this._storage.data[this._storage.meta.lastAutoId.toString()] != null); - return this._storage.meta.lastAutoId.toString(); - } - - protected get _newStorage(): AlwatrDocumentStorage { - return { - ok: true, - meta: { - id: this.name, - formatVersion: AlwatrStorageEngine.formatVersion, - reversion: 0, - lastUpdated: Date.now(), - lastAutoId: -1, - }, - data: {}, - }; - } - - constructor(config: AlwatrStorageEngineConfig) { - this._logger = createLogger(`alwatr-storage:${config.name}`, config.devMode); - this._logger.logMethodArgs?.('constructor', config); - this._$save = this._$save.bind(this); - - this.name = config.name; - this.storagePath = resolve(`${config.path ?? './db'}/${config.name}.json`); - this.saveDebounce = config.saveDebounce ?? 1000; - this.saveBeautiful = config.saveBeautiful || false; - - exitHook(() => this._$save(true)); - this._storage = this.load(); - - if (this._storage.meta?.formatVersion !== AlwatrStorageEngine.formatVersion) { - this._migrateStorage(); - this.save(); - } - } - - /** - * load storage file. - */ - protected load(): AlwatrDocumentStorage { - this._logger.logMethodArgs?.('load', {name: this.name, path: this.storagePath}); - - const storage = readJsonFileSync>(this.storagePath); - - if (storage === null) { - this._logger.incident?.('load', 'file_not_found', 'Storage path not found, empty storage loaded', { - path: this.storagePath, - }); - this.save(); - return this._newStorage; - } - - if (storage.ok !== true) { - this._logger.error('load', 'invalid_storage_data', {storage}); - throw new Error('invalid_storage_data'); - } - - return storage; - } - - protected _migrateStorage(): void { - if (this._storage.meta == null) { - this._storage.meta = { - id: this.name, - formatVersion: 5, - reversion: 0, - lastUpdated: Date.now(), - lastAutoId: -1, - }; - } - - if (this._storage.meta.formatVersion === 4) { - this._storage.meta.id = this.name; - this._storage.meta.formatVersion = 5; - } - - if (this._storage.meta.formatVersion !== AlwatrStorageEngine.formatVersion) { - this._logger.error('load', 'storage_version_incompatible', {storageMeta: this._storage.meta}); - throw new Error('storage_version_incompatible'); - } - } - - /** - * Check documentId exist in the storage or not. - * - * Example: - * - * ```ts - * if(!userStorage.has('user-1')) throw new Error('user not found'); - * ``` - */ - has(documentId: string): boolean { - return this._storage.data[documentId] != null; - } - - /** - * Get a document object by id. - * - * @param documentId The id of the document object. - * @param fastInstance by default it will return a copy of the document. - * if you set fastInstance to true, it will return the original document. - * This is dangerous but much faster, you should use it only if you know what you are doing. - * - * Example: - * - * ```ts - * const user = userStorage.get('user-1'); - * ``` - */ - get(documentId: string, fastInstance?: boolean): DocumentType | null { - this._logger.logMethodArgs?.('get', documentId); - - const documentObject = this._storage.data[documentId] as DocumentType | undefined; - if (typeof documentObject === 'string') { - return this.get(documentObject); - } - else if (documentObject == null) { - return null; - } - else if (fastInstance) { - return documentObject; - } - else { - return JSON.parse(JSON.stringify(documentObject)); - } - } - - /** - * Insert/update a document object in the storage. - * - * @param documentObject The document object to insert/update contain `id`. - * @param fastInstance by default it will make a copy of the document before set. - * if you set fastInstance to true, it will set the original document. - * This is dangerous but much faster, you should use it only if you know what you are doing. - * - * Example: - * - * ```ts - * userStorage.set({ - * id: 'user-1', - * foo: 'bar', - * }); - * ``` - */ - set(documentObject: DocumentType, fastInstance?: boolean): DocumentType { - this._logger.logMethodArgs?.('set', documentObject.id); - - if (fastInstance !== true) { - documentObject = JSON.parse(JSON.stringify(documentObject)); - } - - if (documentObject.id === 'auto_increment') { - documentObject.id = this._nextAutoIncrementId(); - } - - const oldData = this._storage.data[documentObject.id] as DocumentType | undefined; - - if (oldData == null) { - this._keys = null; // Clear cached keys - } - - // update meta - documentObject.meta ??= { - rev: 0, - updated: 0, - created: 0, - }; - documentObject.meta.updated = Date.now(); - documentObject.meta.created = oldData?.meta?.created ?? documentObject.meta.updated; - documentObject.meta.rev = (oldData?.meta?.rev ?? 0) + 1; - - this._storage.meta.lastUpdated = documentObject.meta.updated; - - this._storage.data[documentObject.id] = documentObject; - - this.save(); - return documentObject; - } - - /** - * Delete a document object from the storage. - * - * Example: - * - * ```ts - * userStorage.delete('user-1'); - * ``` - */ - delete(documentId: string): boolean { - this._logger.logMethodArgs?.('delete', documentId); - - if (this._storage.data[documentId] == null) { - return false; - } - // else - delete this._storage.data[documentId]; - - // Clear cached keys - this._keys = null; - - this.save(); - return true; - } - - /** - * Loop over all document objects. - * - * Example: - * - * ```ts - * for(const user of userStorage.allObject()) { - * await sendMessage(user.id, 'Happy new year!'); - * user.sent = true; // direct change document (use with caution)! - * } - * ``` - */ - * allObject(): Generator { - for (const documentId of this.keys) { - const documentObject = this.get(documentId); - if (documentObject != null) yield documentObject; - } - this.save(); - } - - private _saveTimer: NodeJS.Timeout | null = null; - - /** - * Save the storage to disk (debounced and none blocking). - */ - save(): void { - this._logger.logMethod?.('save'); - this.hasUnsavedChanges = true; - if (this._saveTimer != null) return; // save already requested - this._saveTimer = setTimeout(this._$save, this.saveDebounce); - } - - /** - * Save the storage to disk without any debounce (none blocking) when `this.hasUnsavedChanges` is true. - * - * @param [emergency=false] - Recommend to ignore it (default is false) for none blocking IO. - */ - private _$save(emergency = false): MaybePromise { - this._logger.logMethod?.('_$save'); - - if (this._saveTimer != null) { - clearTimeout(this._saveTimer); - this._saveTimer = null; - } - - if (this.hasUnsavedChanges) { - this.hasUnsavedChanges = false; - this._storage.meta.reversion++; - if (emergency) { - return writeJsonFileSync(this.storagePath, this._storage, 'rename', this.saveBeautiful ? 2 : undefined); - } - // else - return writeJsonFile(this.storagePath, this._storage, 'replace', this.saveBeautiful ? 2 : undefined); - } - } - - /** - * Unload storage data and free ram usage (auto saved before unload). - * - * Example: - * - * ```ts - * userStorage.unload(); - * delete userStorage; - * ``` - */ - unload(): void { - this._logger.logMethod?.('unload'); - this._$save(); - this._keys = null; - this._storage = this._newStorage; - } -} diff --git a/core/storage-engine/src/type.ts b/core/storage-engine/src/type.ts deleted file mode 100644 index 07c4076ae..000000000 --- a/core/storage-engine/src/type.ts +++ /dev/null @@ -1,64 +0,0 @@ -export interface AlwatrStorageEngineConfig { - /** - * Storage name. - */ - name: string; - - /** - * Storage path. - * - * @default './db' - */ - path?: string; - - /** - * Save debounce timeout for minimal disk iops usage. - * - * @default 1000 - */ - saveDebounce?: number; - - /** - * Write pretty formatted JSON file. - * - * @default false - */ - saveBeautiful?: boolean; - - /** - * Enable or disable debug mode. - * - * @default undefined Auto detect base on `NODE_ENV` - */ - devMode?: boolean; -} - -export interface AlwatrStorageEngineProviderConfig { - /** - * Default storage path. you can override it in get config params. - * - * @default './db' - */ - path?: string; - - /** - * Save debounce timeout for minimal disk iops usage. - * - * @default 100 - */ - saveDebounce?: number; - - /** - * Write pretty formatted JSON file. - * - * @default false - */ - saveBeautiful?: boolean; - - /** - * Enable or disable debug mode. - * - * @default undefined Auto detect base in NODE_ENV - */ - devMode?: boolean; -} diff --git a/core/storage-engine/tsconfig.json b/core/storage-engine/tsconfig.json deleted file mode 100644 index 8b72465a6..000000000 --- a/core/storage-engine/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../logger"}, - {"path": "../util"}, - {"path": "../type"} - ] -} diff --git a/core/type/CHANGELOG.md b/core/type/CHANGELOG.md deleted file mode 100644 index dc80b3b66..000000000 --- a/core/type/CHANGELOG.md +++ /dev/null @@ -1,261 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/type@1.1.0...@alwatr/type@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/type - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -### Bug Fixes - -* **type/photo:** make meta optional ([5cea716](https://github.com/AliMD/alwatr/commit/5cea716d77bfe4db57c8f25307c4ee18862bb716)) - -# 0.32.0 (2023-05-27) - -### Bug Fixes - -* **com-api:** user-list-inc-order permission ([91beb27](https://github.com/AliMD/alwatr/commit/91beb27cbe372e6b66c99928e26fa4679b751c23)) -* **fetch:** userAuth in StringifyableFetchOptions ([f554b57](https://github.com/AliMD/alwatr/commit/f554b575584cb1464d48fbe8a8c4006125365853)) -* **type/com:** orderInfoSchema ([b90d872](https://github.com/AliMD/alwatr/commit/b90d87268429fc802fb9966fd6efd43912bc851a)) -* **type:** `data` type ([0601384](https://github.com/AliMD/alwatr/commit/06013843612fb2400d664a4dd084f70278a5eaa4)) -* **type:** `orderInfoSchema` ([47ca524](https://github.com/AliMD/alwatr/commit/47ca5243f6de3c966c3fb3bd10256134d100e4e9)) - -### Features - -* **com-pwa:** car count ([d2ea9c1](https://github.com/AliMD/alwatr/commit/d2ea9c12863d214afe5daa7d07997175c19ca859)) -* **type/com:** ComUserIncOrder ([8ddf5bf](https://github.com/AliMD/alwatr/commit/8ddf5bf0b75b601582751f017f293a26c74b1815)) -* **type/com:** rewrite ([1829673](https://github.com/AliMD/alwatr/commit/1829673cf63746d4356aaa3673aefc001b042258)) -* **type/user:** add token! ([de23795](https://github.com/AliMD/alwatr/commit/de237957a7a045c1998cf43b585125027fad5d7d)) -* **type:** add `priceListName` to `ComUser` ([b22555e](https://github.com/AliMD/alwatr/commit/b22555ebe508cc0d732e6af0e1bbf99f99eaca16)) -* **type:** user permissions ([e3d7091](https://github.com/AliMD/alwatr/commit/e3d70916fb7e93f8daf51a8c4aaf856f109b01be)) -* **type:** user permissions ([6bb0aac](https://github.com/AliMD/alwatr/commit/6bb0aacb991e11a930a30dc9071a5de0edf77368)) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **com-pwa/new-order:** debugging ([9027eb0](https://github.com/AliMD/alwatr/commit/9027eb013e6803b1f77dc7cbf4cc14704f49557d)) -* **type/service-response:** default generics ([04dfe54](https://github.com/AliMD/alwatr/commit/04dfe549c272878756544481f0a0d301d6e3c228)) -* **type:** fix `ComUser` ([670660f](https://github.com/AliMD/alwatr/commit/670660fb3b18e63ad54d22a76297b982c77533be)) -* **type:** Stringifyable ([058381b](https://github.com/AliMD/alwatr/commit/058381b50641ba44f4ac60e2173b5b91449e58cd)) -* **validator:** array support ([08f5215](https://github.com/AliMD/alwatr/commit/08f521534a0e937e5cf0f92bf5ca274838f41f93)) - -### Features - -* **com-pwa:** `sing-in` process ([407e9c6](https://github.com/AliMD/alwatr/commit/407e9c640899efdd2bc4633bb966665c6f9b00be)) -* **com-pwa:** change order_shipping_car i18n key ([b8f7daa](https://github.com/AliMD/alwatr/commit/b8f7daa2622506d45e85274db38dbe20a2518f1f)) -* **com-pwa:** validate shipping form and item list before enable submit ([9af59d7](https://github.com/AliMD/alwatr/commit/9af59d72a2678249776d738ea79e4f248a442c5c)) -* **type/com:** ComUser/permissions ([a962366](https://github.com/AliMD/alwatr/commit/a9623669a83f1cce0f96428d5c2d126ad3e5984b)) -* **type/com:** order schema ([d1aacdb](https://github.com/AliMD/alwatr/commit/d1aacdb56cb9995bc05d54bb78bc67e3f629e12c)) -* **type/com:** qtyStep const ([3c928d4](https://github.com/AliMD/alwatr/commit/3c928d406859c85cf939827ece98db6fc39ff914)) -* **type:** ArrayItems ([4f20d8a](https://github.com/AliMD/alwatr/commit/4f20d8ab312787d3073a43594e813bcddeb99aeb)) -* **type:** MaybeArray ([0c61708](https://github.com/AliMD/alwatr/commit/0c6170890faad306a052c3d8242df21f780ef1c3)) -* **type:** SingleOrArray, Prop, Values, Merge ([c3d2a86](https://github.com/AliMD/alwatr/commit/c3d2a8669f4ae83abeb69a1cfef51ecc23c76a10)) -* **type:** user permissions ([aff0853](https://github.com/AliMD/alwatr/commit/aff08538d183e3f6b2d637e56fe2f2281c4da768)) -* **type:** UserAuth ([c902144](https://github.com/AliMD/alwatr/commit/c9021444743c5a0a5a333688830cd0a7dd7d9867)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **type:** com orderStatusCS ([b789640](https://github.com/AliMD/alwatr/commit/b789640b01165e403e9e12a014c9c777b61689b7)) -* **type:** export user and photo ([27e352e](https://github.com/AliMD/alwatr/commit/27e352e231aed966d4d049cc2f1f93781f386952)) - -### Features - -* **button:** click signal with detail ([03c2dc1](https://github.com/AliMD/alwatr/commit/03c2dc1e64562815505b468c761ac245554470ed)) -* **com-pwa:** carType/ladingType ([94a2e96](https://github.com/AliMD/alwatr/commit/94a2e969465c20f7b52b7f18050b9ae0d3fec62d)) -* **i18n:** l18eReadyPromise ([85c7570](https://github.com/AliMD/alwatr/commit/85c7570d71c3d5b9ec87b0e357ecf41f47f96227)) -* **type/com:** OrderDraft, orderDeliverySchema ([4417877](https://github.com/AliMD/alwatr/commit/44178779fbeba5d14a465380541c64ffb3f4f597)) -* **type:** ProductPrice ([7fe7b32](https://github.com/AliMD/alwatr/commit/7fe7b321c0ab94c8abc4527b4aa33191cf5a9213)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **storage-server:** type ([5e033d7](https://github.com/AliMD/alwatr/commit/5e033d75d158a3b634a0d05da741241ff76f58d9)) - -### Features - -* **icon-button:** new content prop with click signal event ([bb5dae6](https://github.com/AliMD/alwatr/commit/bb5dae6048fcacb4a4e70aab514e4900fd5a96ea)) -* **route:** makeRouteContext ([16be581](https://github.com/AliMD/alwatr/commit/16be5815a4a44f22bd17c4a87f1b7ef30f9aec6c)) -* **router:** new api from scratch! ([2b26a8d](https://github.com/AliMD/alwatr/commit/2b26a8d9f95b5968dbda003edc9d540ea95fadd1)) -* **type:** enhance com types ([ed91385](https://github.com/AliMD/alwatr/commit/ed9138584b0096377e73251557cc4ff8aa92a3cc)) -* **type:** OmitFirstParam ([b5a778f](https://github.com/AliMD/alwatr/commit/b5a778f3da03244a0ad693ab15ef8dd782039163)) -* **type:** Stringifyable ([c2e0771](https://github.com/AliMD/alwatr/commit/c2e077118e0371fb32a5fc3fc81cf7f87d65104b)) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **type:** ChatPhotoMessage ([c72bcb2](https://github.com/AliMD/alwatr/commit/c72bcb24bfa936cd325728b42ad0f2acf463865d)) -* **type:** cleanup ([15c7d64](https://github.com/AliMD/alwatr/commit/15c7d648819914820374e752b91d41f287db574b)) -* **type:** export alwatrRegisteredList ([fa308b5](https://github.com/AliMD/alwatr/commit/fa308b5208e0a2ef0ed33e0fe7299cae0af51a97)) -* **type:** import type ([efaf4eb](https://github.com/AliMD/alwatr/commit/efaf4eb0ccbbf5eba5f34ece72bf27758f175521)) -* **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) - -### Features - -* **type:** add optional text on ChatPhotoMessage ([af83f5b](https://github.com/AliMD/alwatr/commit/af83f5b8604cecd3c9b0cb2375267458fd02431d)) -* **type:** C.O.M ([d4655d8](https://github.com/AliMD/alwatr/commit/d4655d83f196990a3ffad2e4753be7b77639ee19)) -* **type:** chat ([4b7ac95](https://github.com/AliMD/alwatr/commit/4b7ac95522dcb637ebab2eda0b8f3e0cd80d59b0)) -* **type:** i18nString ([614037d](https://github.com/AliMD/alwatr/commit/614037d690415b257f34fb13c7143f76dfa2c6ca)) -* **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) -* **type:** order ([79426ea](https://github.com/AliMD/alwatr/commit/79426ea696a0ca0723a8c7bfb6259c83a15c32d9)) -* **type:** order storage ([bd5f11c](https://github.com/AliMD/alwatr/commit/bd5f11c93f35ff235fb2f85df6cecd8823ea34fc)) -* **type:** photo ([7e38283](https://github.com/AliMD/alwatr/commit/7e38283113606a0a01c705caeb1f773a75dfd97c)) -* **type:** photo ([742005f](https://github.com/AliMD/alwatr/commit/742005f8588e408e818188a60eb9cf4a1fe9592f)) -* **type:** service-response ([18f8be3](https://github.com/AliMD/alwatr/commit/18f8be3f91f1678d6f5fb779c1f782736e29a010)) -* **type:** storage ([d4b3a95](https://github.com/AliMD/alwatr/commit/d4b3a956fb17b80b748d0587f12e818c021e3985)) -* **type:** user ([a0d8242](https://github.com/AliMD/alwatr/commit/a0d824202d91d75678945d72497965a55c4deba7)) -* **type:** user ([30b8edb](https://github.com/AliMD/alwatr/commit/30b8edb17aad0f20ccb887c1a71c65c385104ee3)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* **core/type:** remove extras ([63fe462](https://github.com/AliMD/alwatr/commit/63fe462e88e1d3e0dca8696f0c4c073ebc94c490)) -* resolve conflict ([052314d](https://github.com/AliMD/alwatr/commit/052314d2adb3b9b0e44e54f9b8e6d60fc1827075)) -* review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) - -### Features - -* **core/type:** make package ([1d8d1bd](https://github.com/AliMD/alwatr/commit/1d8d1bdfc39c4b1e238770a69d7c8e0cad593251)) -* **type:** add types ([2de3842](https://github.com/AliMD/alwatr/commit/2de384297b70b9818ec8d62ce8d31be4822d95a4)) -* **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) -* **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -* **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) -* **type:** define constructor type ([39c5ab7](https://github.com/AliMD/alwatr/commit/39c5ab74f0a1471d5e20beff89f6885265907633)) -* **type:** define math types ([8c19f40](https://github.com/AliMD/alwatr/commit/8c19f4058d4361b7d3f4f714595e34cb6fa21109)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **com-api:** user-list-inc-order permission ([91beb27](https://github.com/AliMD/alwatr/commit/91beb27cbe372e6b66c99928e26fa4679b751c23)) -- **type/photo:** make meta optional ([5cea716](https://github.com/AliMD/alwatr/commit/5cea716d77bfe4db57c8f25307c4ee18862bb716)) - -### Features - -- **type/com:** ComUserIncOrder ([8ddf5bf](https://github.com/AliMD/alwatr/commit/8ddf5bf0b75b601582751f017f293a26c74b1815)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **fetch:** userAuth in StringifyableFetchOptions ([f554b57](https://github.com/AliMD/alwatr/commit/f554b575584cb1464d48fbe8a8c4006125365853)) -- **type/com:** orderInfoSchema ([b90d872](https://github.com/AliMD/alwatr/commit/b90d87268429fc802fb9966fd6efd43912bc851a)) -- **type:** `data` type ([0601384](https://github.com/AliMD/alwatr/commit/06013843612fb2400d664a4dd084f70278a5eaa4)) -- **type:** `orderInfoSchema` ([47ca524](https://github.com/AliMD/alwatr/commit/47ca5243f6de3c966c3fb3bd10256134d100e4e9)) - -### Features - -- **com-pwa:** car count ([d2ea9c1](https://github.com/AliMD/alwatr/commit/d2ea9c12863d214afe5daa7d07997175c19ca859)) -- **type/com:** rewrite ([1829673](https://github.com/AliMD/alwatr/commit/1829673cf63746d4356aaa3673aefc001b042258)) -- **type/user:** add token! ([de23795](https://github.com/AliMD/alwatr/commit/de237957a7a045c1998cf43b585125027fad5d7d)) -- **type:** add `priceListName` to `ComUser` ([b22555e](https://github.com/AliMD/alwatr/commit/b22555ebe508cc0d732e6af0e1bbf99f99eaca16)) -- **type:** user permissions ([e3d7091](https://github.com/AliMD/alwatr/commit/e3d70916fb7e93f8daf51a8c4aaf856f109b01be)) -- **type:** user permissions ([6bb0aac](https://github.com/AliMD/alwatr/commit/6bb0aacb991e11a930a30dc9071a5de0edf77368)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **com-pwa/new-order:** debugging ([9027eb0](https://github.com/AliMD/alwatr/commit/9027eb013e6803b1f77dc7cbf4cc14704f49557d)) -- **type/service-response:** default generics ([04dfe54](https://github.com/AliMD/alwatr/commit/04dfe549c272878756544481f0a0d301d6e3c228)) -- **type:** fix `ComUser` ([670660f](https://github.com/AliMD/alwatr/commit/670660fb3b18e63ad54d22a76297b982c77533be)) -- **type:** Stringifyable ([058381b](https://github.com/AliMD/alwatr/commit/058381b50641ba44f4ac60e2173b5b91449e58cd)) -- **validator:** array support ([08f5215](https://github.com/AliMD/alwatr/commit/08f521534a0e937e5cf0f92bf5ca274838f41f93)) - -### Features - -- **com-pwa:** `sing-in` process ([407e9c6](https://github.com/AliMD/alwatr/commit/407e9c640899efdd2bc4633bb966665c6f9b00be)) -- **com-pwa:** change order_shipping_car i18n key ([b8f7daa](https://github.com/AliMD/alwatr/commit/b8f7daa2622506d45e85274db38dbe20a2518f1f)) -- **com-pwa:** validate shipping form and item list before enable submit ([9af59d7](https://github.com/AliMD/alwatr/commit/9af59d72a2678249776d738ea79e4f248a442c5c)) -- **type/com:** ComUser/permissions ([a962366](https://github.com/AliMD/alwatr/commit/a9623669a83f1cce0f96428d5c2d126ad3e5984b)) -- **type/com:** order schema ([d1aacdb](https://github.com/AliMD/alwatr/commit/d1aacdb56cb9995bc05d54bb78bc67e3f629e12c)) -- **type/com:** qtyStep const ([3c928d4](https://github.com/AliMD/alwatr/commit/3c928d406859c85cf939827ece98db6fc39ff914)) -- **type:** ArrayItems ([4f20d8a](https://github.com/AliMD/alwatr/commit/4f20d8ab312787d3073a43594e813bcddeb99aeb)) -- **type:** MaybeArray ([0c61708](https://github.com/AliMD/alwatr/commit/0c6170890faad306a052c3d8242df21f780ef1c3)) -- **type:** SingleOrArray, Prop, Values, Merge ([c3d2a86](https://github.com/AliMD/alwatr/commit/c3d2a8669f4ae83abeb69a1cfef51ecc23c76a10)) -- **type:** user permissions ([aff0853](https://github.com/AliMD/alwatr/commit/aff08538d183e3f6b2d637e56fe2f2281c4da768)) -- **type:** UserAuth ([c902144](https://github.com/AliMD/alwatr/commit/c9021444743c5a0a5a333688830cd0a7dd7d9867)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **type:** com orderStatusCS ([b789640](https://github.com/AliMD/alwatr/commit/b789640b01165e403e9e12a014c9c777b61689b7)) -- **type:** export user and photo ([27e352e](https://github.com/AliMD/alwatr/commit/27e352e231aed966d4d049cc2f1f93781f386952)) - -### Features - -- **button:** click signal with detail ([03c2dc1](https://github.com/AliMD/alwatr/commit/03c2dc1e64562815505b468c761ac245554470ed)) -- **com-pwa:** carType/ladingType ([94a2e96](https://github.com/AliMD/alwatr/commit/94a2e969465c20f7b52b7f18050b9ae0d3fec62d)) -- **i18n:** l18eReadyPromise ([85c7570](https://github.com/AliMD/alwatr/commit/85c7570d71c3d5b9ec87b0e357ecf41f47f96227)) -- **type/com:** OrderDraft, orderDeliverySchema ([4417877](https://github.com/AliMD/alwatr/commit/44178779fbeba5d14a465380541c64ffb3f4f597)) -- **type:** ProductPrice ([7fe7b32](https://github.com/AliMD/alwatr/commit/7fe7b321c0ab94c8abc4527b4aa33191cf5a9213)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **storage-server:** type ([5e033d7](https://github.com/AliMD/alwatr/commit/5e033d75d158a3b634a0d05da741241ff76f58d9)) - -### Features - -- **icon-button:** new content prop with click signal event ([bb5dae6](https://github.com/AliMD/alwatr/commit/bb5dae6048fcacb4a4e70aab514e4900fd5a96ea)) -- **route:** makeRouteContext ([16be581](https://github.com/AliMD/alwatr/commit/16be5815a4a44f22bd17c4a87f1b7ef30f9aec6c)) -- **router:** new api from scratch! ([2b26a8d](https://github.com/AliMD/alwatr/commit/2b26a8d9f95b5968dbda003edc9d540ea95fadd1)) -- **type:** enhance com types ([ed91385](https://github.com/AliMD/alwatr/commit/ed9138584b0096377e73251557cc4ff8aa92a3cc)) -- **type:** OmitFirstParam ([b5a778f](https://github.com/AliMD/alwatr/commit/b5a778f3da03244a0ad693ab15ef8dd782039163)) -- **type:** Stringifyable ([c2e0771](https://github.com/AliMD/alwatr/commit/c2e077118e0371fb32a5fc3fc81cf7f87d65104b)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- resolve conflict ([052314d](https://github.com/AliMD/alwatr/commit/052314d2adb3b9b0e44e54f9b8e6d60fc1827075)) -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **type:** ChatPhotoMessage ([c72bcb2](https://github.com/AliMD/alwatr/commit/c72bcb24bfa936cd325728b42ad0f2acf463865d)) -- **type:** cleanup ([15c7d64](https://github.com/AliMD/alwatr/commit/15c7d648819914820374e752b91d41f287db574b)) -- **type:** export alwatrRegisteredList ([fa308b5](https://github.com/AliMD/alwatr/commit/fa308b5208e0a2ef0ed33e0fe7299cae0af51a97)) -- **type:** import type ([efaf4eb](https://github.com/AliMD/alwatr/commit/efaf4eb0ccbbf5eba5f34ece72bf27758f175521)) -- **type:** revert paramkey ([f1ad066](https://github.com/AliMD/alwatr/commit/f1ad06621f7fe80018573e50804e9f3c1b2edde1)) - -### Features - -- **type:** add optional text on ChatPhotoMessage ([af83f5b](https://github.com/AliMD/alwatr/commit/af83f5b8604cecd3c9b0cb2375267458fd02431d)) -- **type:** add types ([2de3842](https://github.com/AliMD/alwatr/commit/2de384297b70b9818ec8d62ce8d31be4822d95a4)) -- **type:** C.O.M ([d4655d8](https://github.com/AliMD/alwatr/commit/d4655d83f196990a3ffad2e4753be7b77639ee19)) -- **type:** chat ([4b7ac95](https://github.com/AliMD/alwatr/commit/4b7ac95522dcb637ebab2eda0b8f3e0cd80d59b0)) -- **type:** define alwatrRegistredList ([25406c2](https://github.com/AliMD/alwatr/commit/25406c268f39cf3e055ea05c9fc7b50bd3dd0a17)) -- **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -- **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) -- **type:** define constructor type ([39c5ab7](https://github.com/AliMD/alwatr/commit/39c5ab74f0a1471d5e20beff89f6885265907633)) -- **type:** define math types ([8c19f40](https://github.com/AliMD/alwatr/commit/8c19f4058d4361b7d3f4f714595e34cb6fa21109)) -- **type:** i18nString ([614037d](https://github.com/AliMD/alwatr/commit/614037d690415b257f34fb13c7143f76dfa2c6ca)) -- **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) -- **type:** order ([79426ea](https://github.com/AliMD/alwatr/commit/79426ea696a0ca0723a8c7bfb6259c83a15c32d9)) -- **type:** order storage ([bd5f11c](https://github.com/AliMD/alwatr/commit/bd5f11c93f35ff235fb2f85df6cecd8823ea34fc)) -- **type:** photo ([7e38283](https://github.com/AliMD/alwatr/commit/7e38283113606a0a01c705caeb1f773a75dfd97c)) -- **type:** photo ([742005f](https://github.com/AliMD/alwatr/commit/742005f8588e408e818188a60eb9cf4a1fe9592f)) -- **type:** service-response ([18f8be3](https://github.com/AliMD/alwatr/commit/18f8be3f91f1678d6f5fb779c1f782736e29a010)) -- **type:** storage ([d4b3a95](https://github.com/AliMD/alwatr/commit/d4b3a956fb17b80b748d0587f12e818c021e3985)) -- **type:** user ([a0d8242](https://github.com/AliMD/alwatr/commit/a0d824202d91d75678945d72497965a55c4deba7)) -- **type:** user ([30b8edb](https://github.com/AliMD/alwatr/commit/30b8edb17aad0f20ccb887c1a71c65c385104ee3)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **core/type:** remove extras ([63fe462](https://github.com/AliMD/alwatr/commit/63fe462e88e1d3e0dca8696f0c4c073ebc94c490)) - -### Features - -- **core/type:** make package ([1d8d1bd](https://github.com/AliMD/alwatr/commit/1d8d1bdfc39c4b1e238770a69d7c8e0cad593251)) diff --git a/core/type/README.md b/core/type/README.md deleted file mode 100644 index 1b351e97b..000000000 --- a/core/type/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Types - `@alwatr/type` - -Alwatr projects common entities types. diff --git a/core/type/package.json b/core/type/package.json deleted file mode 100644 index c27a59b3b..000000000 --- a/core/type/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@alwatr/type", - "version": "1.1.1", - "description": "Alwatr projects common entities types", - "keywords": [ - "type", - "typescript", - "esm", - "alwatr" - ], - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/**/*.{d.ts.map,d.ts,js.map,js,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/type" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/type#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - } -} diff --git a/core/type/src/chat.ts b/core/type/src/chat.ts deleted file mode 100644 index 19477cc23..000000000 --- a/core/type/src/chat.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type {AlwatrDocumentObject, AlwatrDocumentStorage} from './storage.js'; - -type CommonMessage = AlwatrDocumentObject & { - from: string; - replyId?: string; -}; - -export type ChatTextMessage = CommonMessage & { - type: 'text'; - text: string; -}; - -export type ChatPhotoMessage = CommonMessage & { - type: 'photo'; - photo: unknown; -}; - -export type ChatMessage = ChatTextMessage | ChatPhotoMessage; - -export type ChatStorage = AlwatrDocumentStorage; diff --git a/core/type/src/customer-order-management.ts b/core/type/src/customer-order-management.ts deleted file mode 100644 index ade9bb1ce..000000000 --- a/core/type/src/customer-order-management.ts +++ /dev/null @@ -1,218 +0,0 @@ -import type {MultiLangStringObj} from './i18n.js'; -import type {Photo} from './photo.js'; -import type {AlwatrDocumentObject} from './storage.js'; -import type {StringifyableRecord} from './type-helper.js'; -import type {User} from './user.js'; - -// -- Const value -- - -export const ladingTypeCS = ['hand', 'pallet'] as const; -export type LadingType = (typeof ladingTypeCS)[number]; - -export const carTypeCS = [ - 'trailer_truck', - 'camion_dual', - 'camion_solo', - 'camion_911', - 'camion_800', - 'camion_600', - 'camion_mini', - 'nissan', -] as const; -export type CarType = (typeof carTypeCS)[number]; - -export const timePeriodCS = ['auto', '3_4w', '2_3w', '1_2w'] as const; -export type TimePeriod = (typeof timePeriodCS)[number]; - -export const discountTypeCS = ['number', 'percent'] as const; -export type DiscountType = (typeof discountTypeCS)[number]; - -export const orderStatusCS = [ - 'draft', - 'registered', - 'processing', - 'payment_pending', - 'preparing', - 'shipping', - 'delayed', - 'on_hold', - 'canceled', - 'refunded', -] as const; -export type OrderStatus = (typeof orderStatusCS)[number]; - -export const userPermissionsCS = ['user/patch', 'price/patch', 'product/patch', 'user-list-inc-order/read'] as const; -export type UserPermission = (typeof userPermissionsCS)[number]; - -// -- Document object -- - -export interface Product extends AlwatrDocumentObject { - /** - * Product global unique id. - */ - id: string; - - /** - * Product title - */ - title: MultiLangStringObj; - - /** - * Product image - */ - image: Photo; -} - -export interface ProductPrice extends AlwatrDocumentObject { - /** - * Product global unique id. - */ - id: string; - - /** - * Product price in this list. - */ - price: number; -} - -export interface Order extends AlwatrDocumentObject { - /** - * Order auto incremental unique id. - */ - id: string; - - /** - * Order Status - */ - status: OrderStatus; - - /** - * Order cart list. - */ - itemList: OrderItem[]; - - /** - * Delivery info - */ - shippingInfo: Partial; - - // discount: number; - // discountType: DiscountType; - - /** - * The total price of this order exclude shippings. - */ - subTotalMarket: number; - - subTotalAgency: number; - - /** - * The cost of lading the order. - */ - ladingFee: number; - - /** - * The cost of pallet. - */ - palletCost: number; - - /** - * The cost of shipping price. - */ - shippingFee: number; - - /** - * Total shipping const. - */ - totalShippingFee: number; - - /** - * Customer device uuid. - */ - clientId: string; - - /** - * Customer device ip address. - */ - remoteAddress: string; -} - -export interface OrderDraft extends Partial { - id: 'new'; - status: 'draft'; -} - -// -- child types -- - -export interface OrderItem extends StringifyableRecord { - productId: string; - - /** - * The selling price of single product in the market. - */ - marketPrice: number; - - /** - * The selling price of a product after any discounts to this buyer. - */ - agencyPrice: number; - - /** - * Quantity of this item. - */ - qty: number; -} - -export interface OrderShippingInfo extends StringifyableRecord { - recipientName: string; - recipientNationalCode: string; - address: string; - description: string; - ladingType: LadingType; - carType: CarType; - timePeriod: TimePeriod; -} - -export interface ComUser extends User { - permissions?: UserPermission[] | 'root'; - shopName?: string; - priceListName?: string; -} - -export interface ComUserIncOrder extends ComUser { - orderList: Record; -} - -// -- Schema -- - -export const orderInfoSchema = { - id: String, - status: String, - itemList: [ - { - productId: String, - marketPrice: Number, - agencyPrice: Number, - qty: Number, - }, - ], - shippingInfo: { - recipientName: String, - recipientNationalCode: String, - address: String, - carType: String, - ladingType: String, - timePeriod: String, - // description: String, - }, - // discount: Number, - // discountType: String, - subTotalMarket: Number, - subTotalAgency: Number, - ladingFee: Number, - palletCost: Number, - shippingFee: Number, - totalShippingFee: Number, -}; - -export const orderShippingInfoSchema = orderInfoSchema.shippingInfo; diff --git a/core/type/src/event-signal.ts b/core/type/src/event-signal.ts deleted file mode 100644 index 7c3ff0c2a..000000000 --- a/core/type/src/event-signal.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type {Stringifyable, StringifyableRecord} from './type-helper.js'; - -export interface ClickSignalType extends StringifyableRecord { - readonly x: number; - readonly y: number; - readonly altKey: boolean; - readonly ctrlKey: boolean; - readonly metaKey: boolean; - detail: T; -} diff --git a/core/type/src/flight-finder.ts b/core/type/src/flight-finder.ts deleted file mode 100644 index 782b55346..000000000 --- a/core/type/src/flight-finder.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type {AlwatrDocumentObject} from './storage.js'; -import type {StringifyableRecord} from './type-helper.js'; - -export interface Job extends AlwatrDocumentObject { - detail: JobDetail; - resultList: JobResult[]; -} - -export interface JobDetail extends StringifyableRecord { - origin: string; - destination: string; - date: string; - seatCount: number; - maxPrice: number | null; - description: string; - minHour: number | null; - maxHour: number | null; -} - -export interface JobResult extends StringifyableRecord { - price: number; - time: string; - seatCount: number; - airline: string; - airplane: string; - flightId: string; - arrivalTime: string; -} diff --git a/core/type/src/global.ts b/core/type/src/global.ts deleted file mode 100644 index b5dc03679..000000000 --- a/core/type/src/global.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* eslint-disable no-var */ - -export interface AlwatrPackageInfo { - name: string; - version: string; -} - -export interface GlobalAlwatr { - registeredList: AlwatrPackageInfo[]; -} - -declare global { - var _ALWATR_VERSION_: string; - var Alwatr: GlobalAlwatr; -} diff --git a/core/type/src/i18n.ts b/core/type/src/i18n.ts deleted file mode 100644 index f734b85a1..000000000 --- a/core/type/src/i18n.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {AlwatrServiceResponseSuccessWithMeta} from './service-response.js'; -import {StringifyableRecord} from './type-helper.js'; - -export type LocaleCode = `${Lowercase}-${Uppercase}`; - -export type L18eContext = AlwatrServiceResponseSuccessWithMeta, { - code: LocaleCode; - rev: number; -}>; - -export interface LocaleContext extends StringifyableRecord { - /** - * fa-IR, en-US, ... - */ - code: LocaleCode; - - /** - * fa, en, ... - */ - language: Lowercase; - - /** - * ltr, rtl - */ - direction: 'rtl' | 'ltr'; -} - -/** - * Multi language string - * - * {fa: 'سلام', en: 'hello'} - */ -export type MultiLangStringObj = Record, string>; diff --git a/core/type/src/index.ts b/core/type/src/index.ts deleted file mode 100644 index a6181eded..000000000 --- a/core/type/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export * from './chat.js'; -export * from './service-response.js'; -export * from './storage.js'; -export * from './global.js'; -export * from './i18n.js'; -export * from './type-helper.js'; -export * from './event-signal.js'; -export * from './user.js'; -export * from './photo.js'; - -Alwatr.registeredList.push({ - name: '@alwatr/type', - version: _ALWATR_VERSION_, -}); diff --git a/core/type/src/photo.ts b/core/type/src/photo.ts deleted file mode 100644 index 0c7920c94..000000000 --- a/core/type/src/photo.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {AlwatrDocumentObject} from './storage.js'; - -export type Photo = AlwatrDocumentObject & { - /** - * Primary Photo ID - * - * like full relative path (include extension) to image CDN (temporary) - */ - id: string; // path/file-name.png - - /** - * Photo extra meta information for future maintenances - */ - meta?: Record; // meta: {order: 1233, customer: 1334} -}; diff --git a/core/type/src/service-response.ts b/core/type/src/service-response.ts deleted file mode 100644 index f620081fe..000000000 --- a/core/type/src/service-response.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {Stringifyable, StringifyableRecord} from './type-helper.js'; - -export type Methods = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'CONNECT' | 'TRACE' | 'OPTIONS' | 'PATCH'; - -export type ParamKeyType = 'string' | 'number' | 'boolean'; -export type ParamValueType = string | number | boolean; -export type QueryParameters = Record; - -export interface AlwatrServiceResponseFailed extends StringifyableRecord { - ok: false; - statusCode: number; - errorCode: string; - meta?: StringifyableRecord; - data?: never; -} - -export interface AlwatrServiceResponseSuccess - extends StringifyableRecord { - ok: true; - statusCode?: number; - errorCode?: never; - meta?: never; - data: TData; -} - -export interface AlwatrServiceResponseSuccessWithMeta< - TData extends Stringifyable = Stringifyable, - TMeta extends StringifyableRecord = StringifyableRecord -> extends StringifyableRecord { - ok: true; - statusCode?: number; - errorCode?: never; - meta: TMeta; - data: TData; -} - -export type AlwatrServiceResponse< - TData extends Stringifyable = Stringifyable, - TMeta extends StringifyableRecord = StringifyableRecord -> = - | AlwatrServiceResponseSuccess - | AlwatrServiceResponseSuccessWithMeta - | AlwatrServiceResponseFailed; diff --git a/core/type/src/storage.ts b/core/type/src/storage.ts deleted file mode 100644 index 011232ef1..000000000 --- a/core/type/src/storage.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {AlwatrServiceResponseSuccessWithMeta} from './service-response.js'; -import {StringifyableRecord} from './type-helper.js'; - -export interface AlwatrDocumentObject extends StringifyableRecord { - id: string; - meta?: { - rev: number; - created: number; - updated: number; - }; -} - -export interface AlwatrStorageMeta extends StringifyableRecord { - id: string; - formatVersion: number; - reversion: number; - lastUpdated: number; - lastAutoId: number; -} - -// export type AlwatrDocumentStorage = Omit< -// AlwatrServiceResponseSuccessWithMeta, AlwatrStorageMeta>, -// 'statusCode' | 'errorCode' -// >; - -export type AlwatrDocumentStorage = - AlwatrServiceResponseSuccessWithMeta, AlwatrStorageMeta>; diff --git a/core/type/src/type-helper.ts b/core/type/src/type-helper.ts deleted file mode 100644 index 03d2fedab..000000000 --- a/core/type/src/type-helper.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -export type Constructor = new (...args: any[]) => T; - -export type MaybePromise = T | Promise; -export type SingleOrArray = T | T[]; - -export type OmitFirstParam = F extends (x: any, ...args: infer A) => infer R ? (...args: A) => R : never; - -/** - * Object that can be JSON.stringify. - */ -export type Stringifyable = - | string - | number - | boolean - | null - | undefined - | { [P: string]: Stringifyable } - | Stringifyable[]; - -export type StringifyableRecord = Record; - -export type Prop = K extends keyof T ? T[K] : never; - -export type Values = T[keyof T]; -export type ArrayItems = T extends (infer K)[] ? K : T; - -export type Merge = Omit & N; diff --git a/core/type/src/user.ts b/core/type/src/user.ts deleted file mode 100644 index 5b5fc183f..000000000 --- a/core/type/src/user.ts +++ /dev/null @@ -1,69 +0,0 @@ -import {StringifyableRecord} from './type-helper.js'; - -import type {AlwatrDocumentObject} from './storage.js'; - -export const genderCS = ['male', 'female'] as const; -export type Gender = typeof genderCS[number]; - -export interface User extends AlwatrDocumentObject { - /** - * User global unique id (verifiable) - */ - id: string; - - /** - * Link pass epoch number, started from 1 and increased by token revoke. - */ - lpe: number; - - /** - * User token, used for user authorization. - * DANGER: This field should not be save in public storage. - */ - token?: string; - - /** - * User authorization permissions list. - */ - permissions?: string[] | 'root'; - - fullName: string; - - phoneNumber: number; - - gender: Gender; - - email?: string; - - landlinePhone?: string; - - /** - * Country Code. - */ - country: string; - - /** - * Province Code. - */ - province?: string; - - /** - * City Code. - */ - city?: string; - - /** - * User full address. - */ - address?: string; - - /** - * Postal code - */ - postalCode?: string; -} - -export interface UserAuth extends StringifyableRecord { - id: string; - token: string; -} diff --git a/core/type/tsconfig.json b/core/type/tsconfig.json deleted file mode 100644 index 7af594af9..000000000 --- a/core/type/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - // files, include and exclude from the inheriting config are always overwritten. - "include": ["src/**/*.ts"], - "exclude": [], - "references": [] -} diff --git a/core/util/CHANGELOG.md b/core/util/CHANGELOG.md deleted file mode 100644 index 6acb0e726..000000000 --- a/core/util/CHANGELOG.md +++ /dev/null @@ -1,113 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [1.2.0](https://github.com/AliMD/alwatr/compare/@alwatr/util@1.1.1...@alwatr/util@1.2.0) (2023-09-12) - -### Features - -* **util:** browser-task ([efc4c6e](https://github.com/AliMD/alwatr/commit/efc4c6efe5d0f716a4855e5c0fd7778a81b53885)) by @AliMD - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/util@1.1.0...@alwatr/util@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/util - -# 1.1.0 (2023-09-12) - -### Features - -* **util:** defaultExport ([82cc24e](https://github.com/AliMD/alwatr/commit/82cc24e84b9e18cebf7c149e6f6cbb1c2c44858c)) -* **util:** renderState ([19a6030](https://github.com/AliMD/alwatr/commit/19a603018c87065191f99a55cdcdfc8193dc493d)) - -# 1.0.0 (2023-06-14) - -### Bug Fixes - -* **util/fs:** makeLinkForce throw error ([8bfcc80](https://github.com/AliMD/alwatr/commit/8bfcc80b11ad59538478440fe6e88cc9ee12df77)) - -### Features - -* **util:** add string capitalize ([c499456](https://github.com/AliMD/alwatr/commit/c4994562f75471184d49f46ba3c6d7acdb4ab796)) - -# 0.32.0 (2023-05-27) - -### Features - -* **util/fs:** existFile option option ([c8c2020](https://github.com/AliMD/alwatr/commit/c8c202097f6a1fb568993f7987977a140dde5273)) -* **util:** flatStr ([09462ec](https://github.com/AliMD/alwatr/commit/09462ec88082a2339e633975c346f2fa17997400)) - -# 0.31.0 (2023-05-08) - -### Features - -* **util/node:** makeLinkForce ([f0c091e](https://github.com/AliMD/alwatr/commit/f0c091e454c1cb0b47b5126bd025b450e05b81fb)) -* **util:** generic types ([7a69fa7](https://github.com/AliMD/alwatr/commit/7a69fa78b6b36834816fcdb4376f9d53d3243713)) -* **util:** readJsonFile ([940cba6](https://github.com/AliMD/alwatr/commit/940cba67d2e56c6292aba02d01d0395edfa1b217)) -* **util:** readJsonFileSync ([659b2ea](https://github.com/AliMD/alwatr/commit/659b2ead425264073d53b561c0a7f6e2476ff8cc)) -* **util:** setLocalStorageItem ([46e248c](https://github.com/AliMD/alwatr/commit/46e248cb79b7846f568eadc5a6d5a2214fe4faf3)) -* **util:** writeJsonFile ([3707070](https://github.com/AliMD/alwatr/commit/3707070ef0c7716718e84ccfb6c44e316983e2f2)) -* **util:** writeJsonFileSync ([230f415](https://github.com/AliMD/alwatr/commit/230f4157a19ea539f6c245ef77e02512b7c9c91a)) - -# 0.30.0 (2023-03-06) - -### Features - -* **util:** add getClientId ([f9c1008](https://github.com/AliMD/alwatr/commit/f9c1008da682555e22178aa8d23cf742937b76a4)) -* **util:** add getLocalStorageItem ([dc5fa8b](https://github.com/AliMD/alwatr/commit/dc5fa8b9620a9add1aa3c838d38fb9ed9d364010)) -* **util:** add parseJson ([543da2c](https://github.com/AliMD/alwatr/commit/543da2cbb7079f74fe3f280f9c07b8fe6fc8e987)) -* **util:** polyfil requestAnimationFrame, requestIdleCallbackFallback ([6dc4b73](https://github.com/AliMD/alwatr/commit/6dc4b7347b97d2d2fdd562917e02cbe4d6d1328b)) - -# 0.29.0 (2023-02-10) - -### Features - -* **util:** arrow fn and untilEvent types ([ced1de6](https://github.com/AliMD/alwatr/commit/ced1de64f7d7458d14578096484f492be35665fc)) -* **util:** new package ([a7b1fb3](https://github.com/AliMD/alwatr/commit/a7b1fb38d93867b5013ec35c4a0a06d6ffe8716a)) -* **util:** until functions ([3b17ef2](https://github.com/AliMD/alwatr/commit/3b17ef22e2074c0a76751795af15330b6cb08090)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **util/fs:** makeLinkForce throw error ([8bfcc80](https://github.com/AliMD/alwatr/commit/8bfcc80b11ad59538478440fe6e88cc9ee12df77)) - -### Features - -- **util/fs:** existFile option option ([c8c2020](https://github.com/AliMD/alwatr/commit/c8c202097f6a1fb568993f7987977a140dde5273)) -- **util:** add string capitalize ([c499456](https://github.com/AliMD/alwatr/commit/c4994562f75471184d49f46ba3c6d7acdb4ab796)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Features - -- **util:** flatStr ([09462ec](https://github.com/AliMD/alwatr/commit/09462ec88082a2339e633975c346f2fa17997400)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Features - -- **util/node:** makeLinkForce ([f0c091e](https://github.com/AliMD/alwatr/commit/f0c091e454c1cb0b47b5126bd025b450e05b81fb)) -- **util:** generic types ([7a69fa7](https://github.com/AliMD/alwatr/commit/7a69fa78b6b36834816fcdb4376f9d53d3243713)) -- **util:** readJsonFile ([940cba6](https://github.com/AliMD/alwatr/commit/940cba67d2e56c6292aba02d01d0395edfa1b217)) -- **util:** readJsonFileSync ([659b2ea](https://github.com/AliMD/alwatr/commit/659b2ead425264073d53b561c0a7f6e2476ff8cc)) -- **util:** setLocalStorageItem ([46e248c](https://github.com/AliMD/alwatr/commit/46e248cb79b7846f568eadc5a6d5a2214fe4faf3)) -- **util:** writeJsonFile ([3707070](https://github.com/AliMD/alwatr/commit/3707070ef0c7716718e84ccfb6c44e316983e2f2)) -- **util:** writeJsonFileSync ([230f415](https://github.com/AliMD/alwatr/commit/230f4157a19ea539f6c245ef77e02512b7c9c91a)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Features - -- **util:** add getClientId ([f9c1008](https://github.com/AliMD/alwatr/commit/f9c1008da682555e22178aa8d23cf742937b76a4)) -- **util:** add getLocalStorageItem ([dc5fa8b](https://github.com/AliMD/alwatr/commit/dc5fa8b9620a9add1aa3c838d38fb9ed9d364010)) -- **util:** add parseJson ([543da2c](https://github.com/AliMD/alwatr/commit/543da2cbb7079f74fe3f280f9c07b8fe6fc8e987)) -- **util:** polyfil requestAnimationFrame, requestIdleCallbackFallback ([6dc4b73](https://github.com/AliMD/alwatr/commit/6dc4b7347b97d2d2fdd562917e02cbe4d6d1328b)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Features - -- **util:** arrow fn and untilEvent types ([ced1de6](https://github.com/AliMD/alwatr/commit/ced1de64f7d7458d14578096484f492be35665fc)) -- **util:** new package ([a7b1fb3](https://github.com/AliMD/alwatr/commit/a7b1fb38d93867b5013ec35c4a0a06d6ffe8716a)) -- **util:** until functions ([3b17ef2](https://github.com/AliMD/alwatr/commit/3b17ef22e2074c0a76751795af15330b6cb08090)) diff --git a/core/util/README.md b/core/util/README.md deleted file mode 100644 index 9fc301040..000000000 --- a/core/util/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Util - `@alwatr/util` - -Util library written in tiny TypeScript module. diff --git a/core/util/package.json b/core/util/package.json deleted file mode 100644 index d0b7273d4..000000000 --- a/core/util/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@alwatr/util", - "version": "1.2.0", - "description": "Util library written in tiny TypeScript module.", - "keywords": [ - "util", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost ", - "contributors": [ - "S. Amir Mohammad Najafi (njfamirm.ir)" - ], - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/util" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/util#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "exports": { - ".": { - "default": "./index.js" - }, - "./node.js": { - "default": "./node/index.js" - } - }, - "dependencies": { - "@alwatr/math": "^1.1.2", - "@alwatr/type": "^1.1.1", - "tslib": "^2.6.2" - }, - "devDependencies": { - "flatstr": "^1.0.12" - } -} diff --git a/core/util/src/_logger.ts b/core/util/src/_logger.ts deleted file mode 100644 index 5ee3e8dca..000000000 --- a/core/util/src/_logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('alwatr/util'); diff --git a/core/util/src/browser-task.ts b/core/util/src/browser-task.ts deleted file mode 100644 index 2ea86667b..000000000 --- a/core/util/src/browser-task.ts +++ /dev/null @@ -1,17 +0,0 @@ -const {port1, port2} = new MessageChannel(); -port2.start(); - -export const browserTask = (): Promise => { - return new Promise((resolve) => { - const uid = Math.random(); - const onMessage = (event: MessageEvent) => { - if (event.data !== uid) { - return; - } - port2.removeEventListener('message', onMessage); - resolve(); - }; - port2.addEventListener('message', onMessage); - port1.postMessage(uid); - }); -}; diff --git a/core/util/src/client-id.ts b/core/util/src/client-id.ts deleted file mode 100644 index 289f8c077..000000000 --- a/core/util/src/client-id.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {random} from '@alwatr/math'; - -import {getLocalStorageItem, setLocalStorageItem} from './local-storage.js'; - -const localStorageId = 'client_id_x1'; -let clientId: string | null = null; - -export const getClientId = (): string => { - if (clientId != null) { - return clientId; - } - // else - clientId = getLocalStorageItem(localStorageId, null); - if (clientId == null) { - clientId = random.uuid; - setLocalStorageItem(localStorageId, clientId); - } - return clientId; -}; diff --git a/core/util/src/default-export.ts b/core/util/src/default-export.ts deleted file mode 100644 index 879702126..000000000 --- a/core/util/src/default-export.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Get default export from dynamic es-module import without resolve promise. - * - * Example: - * - * ```ts - * const starIcon = defaultExport(import('@alwatr/icon/svg/star-outline.svg')); - * - * render(`
    ${await starIcon}
    `) - * ``` - */ -export const defaultExport = (m: Promise): Promise => - m.then((_m) => _m.default); diff --git a/core/util/src/delay.ts b/core/util/src/delay.ts deleted file mode 100644 index 8fbade652..000000000 --- a/core/util/src/delay.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {requestAnimationFrame} from './polyfill.js'; - -export const delay = (duration: number): Promise => { - return new Promise((resolve) => setTimeout(resolve, duration)); -}; - -export const untilNextFrame = (): Promise => { - return new Promise((resolve) => requestAnimationFrame(resolve)); -}; - -export const untilIdle = (timeout?: number): Promise => { - return new Promise((resolve) => requestIdleCallback(resolve, {timeout})); -}; - -export const untilEvent = ( - element: HTMLElement, - eventName: T, -): Promise => { - return new Promise((resolve) => element.addEventListener(eventName, resolve, {once: true, passive: true})); -}; diff --git a/core/util/src/flat-str.ts b/core/util/src/flat-str.ts deleted file mode 100644 index a8f97994d..000000000 --- a/core/util/src/flat-str.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Flattens the underlying C structures of a concatenated JavaScript string. - */ -export const flatStr = (s: string): string => { - // @ts-expect-error because it alters wrong compilation errors. - s | 0; - return s; -}; diff --git a/core/util/src/index.ts b/core/util/src/index.ts deleted file mode 100644 index 5f98d7dcd..000000000 --- a/core/util/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './delay.js'; -export * from './json.js'; -export * from './local-storage.js'; -export * from './client-id.js'; -export * from './polyfill.js'; -export * from './flat-str.js'; -export * from './string.js'; -export * from './render-state.js'; -export * from './default-export.js'; diff --git a/core/util/src/json.ts b/core/util/src/json.ts deleted file mode 100644 index 6a2d441e4..000000000 --- a/core/util/src/json.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type {Stringifyable} from '@alwatr/type'; - -export const parseJson = (str: string): T | null => { - try { - return JSON.parse(str) as T; - } - catch (err) { - console.error(err); - return null; - } -}; diff --git a/core/util/src/local-storage.ts b/core/util/src/local-storage.ts deleted file mode 100644 index d1c21eabb..000000000 --- a/core/util/src/local-storage.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {parseJson} from './json.js'; - -import type {Stringifyable} from '@alwatr/type'; - -export const getLocalStorageItem = (name: string, defaultValue: T): T => { - const value = localStorage.getItem(name); - if (value === 'null' || value === 'undefined') return defaultValue; - return value == null ? defaultValue : parseJson(value) ?? defaultValue; -}; - -export const setLocalStorageItem = (name: string, value: T): void => { - if (value == null) { - localStorage.removeItem(name); - } - localStorage.setItem(name, JSON.stringify(value)); -}; diff --git a/core/util/src/node/fs.ts b/core/util/src/node/fs.ts deleted file mode 100644 index dc8f469e0..000000000 --- a/core/util/src/node/fs.ts +++ /dev/null @@ -1,240 +0,0 @@ -import {existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, renameSync} from 'node:fs'; -import {mkdir, writeFile, readFile, rm, symlink, copyFile, rename} from 'node:fs/promises'; -import {dirname} from 'node:path'; - -import {createLogger} from '@alwatr/logger'; - -import {flatStr} from '../flat-str.js'; - -import type {StringifyableRecord} from '@alwatr/type'; - -const logger = createLogger('alwatr/util/fs', true); - -/** - * Enhanced read json file. - * @example - * const fileContent = readJsonFileSync('./file.json'); - */ -export const readJsonFileSync = (path: string): T | null => { - logger.logMethodArgs?.('readJsonFileSync', path); - - if (!existsSync(path)) { - return null; - } - - const timeKey = path.substring(path.lastIndexOf('/') + 1); - - let fileContent: string; - logger.time?.(`readFileSync ${timeKey}`); - try { - fileContent = flatStr(readFileSync(path, {encoding: 'utf-8', flag: 'r'})); - } - catch (err) { - logger.error('readJsonFileSync', 'read_file_failed', err); - throw new Error('read_file_failed'); - } - logger.timeEnd?.(`readFileSync ${timeKey}`); - - let data; - logger.time?.(`jsonParse ${timeKey}`); - try { - data = JSON.parse(fileContent) as T; - } - catch (err) { - logger.error('readJsonFileSync', 'invalid_json', err); - throw new Error('invalid_json'); - } - logger.timeEnd?.(`jsonParse ${timeKey}`); - - return data; -}; - -/** - * Enhanced read json file. - * @example - * const fileContent = await readJsonFile('./file.json'); - */ -export const readJsonFile = async ( - path: string, -): Promise => { - logger.logMethodArgs?.('readJsonFileSync', path); - - if (!existsSync(path)) { - // existsSync is much faster than access. - return null; - } - - const timeKey = path.substring(path.lastIndexOf('/') + 1); - - let fileContent: string; - logger.time?.(`readFile ${timeKey}`); - try { - fileContent = flatStr(await readFile(path, {encoding: 'utf-8', flag: 'r'})); - } - catch (err) { - logger.error('readJsonFile', 'read_file_failed', err); - throw new Error('read_file_failed'); - } - logger.timeEnd?.(`readFile ${timeKey}`); - - let data; - logger.time?.(`jsonParse ${timeKey}`); - try { - data = JSON.parse(fileContent) as T; - } - catch (err) { - logger.error('readJsonFile', 'invalid_json', err); - throw new Error('invalid_json'); - } - logger.timeEnd?.(`jsonParse ${timeKey}`); - - return data; -}; - -/** - * Enhanced write json file. - * @example - * writeJsonFileSync('./file.json', { a:1, b:2, c:3 }); - */ -export const writeJsonFileSync = ( - path: string, - data: T, - existFile: 'replace' | 'copy' | 'rename' = 'replace', - space?: string | number, -): void => { - logger.logMethodArgs?.('writeJsonFileSync', path); - - const timeKey = path.substring(path.lastIndexOf('/') + 1); - - let jsonContent; - logger.time?.(`jsonParse ${timeKey}`); - try { - jsonContent = flatStr(JSON.stringify(data, null, space)); - } - catch (err) { - logger.error('writeJsonFileSync', 'stringify_failed', err); - throw new Error('stringify_failed'); - } - logger.timeEnd?.(`jsonParse ${timeKey}`); - - if (existsSync(path)) { - try { - if (existFile === 'copy') { - copyFileSync(path, path + '.bk'); - } - else if (existFile === 'rename') { - renameSync(path, path + '.bk'); - } - } - catch (err) { - logger.error('writeJsonFileSync', 'rename_copy_failed', err); - } - } - else { - try { - mkdirSync(dirname(path), {recursive: true}); - } - catch (err) { - logger.error('writeJsonFileSync', 'make_dir_failed', err); - throw new Error('make_dir_failed'); - } - } - - logger.time?.(`writeFileSync ${timeKey}`); - try { - writeFileSync(path, jsonContent, {encoding: 'utf-8', flag: 'w'}); - } - catch (err) { - logger.error('writeJsonFileSync', 'write_file_failed', err); - throw new Error('write_file_failed'); - } - logger.timeEnd?.(`writeFileSync ${timeKey}`); -}; - -/** - * Enhanced write json file. - * @example - * await writeJsonFile('./file.json', { a:1, b:2, c:3 }); - */ -export const writeJsonFile = async ( - path: string, - data: T, - existFile: 'replace' | 'copy' | 'rename' = 'replace', - space?: string | number, -): Promise => { - logger.logMethodArgs?.('writeJsonFile', path); - - const timeKey = path.substring(path.lastIndexOf('/') + 1); - logger.time?.(`writeJsonFile(${timeKey})`); - - let jsonContent; - logger.time?.(`jsonParse ${timeKey}`); - try { - jsonContent = flatStr(JSON.stringify(data, null, space)); - } - catch (err) { - logger.error('writeJsonFile', 'stringify_failed', err); - throw new Error('stringify_failed'); - } - logger.timeEnd?.(`jsonParse ${timeKey}`); - - if (existsSync(path)) { - try { - if (existFile === 'copy') { - await copyFile(path, path + '.bk'); - } - else if (existFile === 'rename') { - await rename(path, path + '.bk'); - } - } - catch (err) { - logger.error('writeJsonFile', 'rename_copy_failed', err); - } - } - else { - try { - await mkdir(dirname(path), {recursive: true}); - } - catch (err) { - logger.error('writeJsonFile', 'make_dir_failed', err); - throw new Error('make_dir_failed'); - } - } - - logger.time?.(`writeFile ${timeKey}`); - try { - await writeFile(path, jsonContent, {encoding: 'utf-8', flag: 'w'}); - } - catch (err) { - logger.error('writeJsonFile', 'write_file_failed', err); - throw new Error('write_file_failed'); - } - logger.timeEnd?.(`writeFile ${timeKey}`); -}; - -/** - * Make a symbolic link - * - * **CAUTION: the destination path will be removed if exists** - */ -export const makeLinkForce = async (src: string, dest: string): Promise => { - logger.logMethodArgs?.('makeLink', {src, dest}); - - try { - if (existsSync(dest)) { - await rm(dest, {recursive: false, force: true}); - } - else { - const destDir = dirname(dest); - if (!existsSync(destDir)) { - await mkdir(dirname(dest), {recursive: true}); - } - } - - await symlink(src, dest); - } - catch (error) { - logger.error('makeLink', 'symlink_failed', error); - throw error; - } -}; diff --git a/core/util/src/node/index.ts b/core/util/src/node/index.ts deleted file mode 100644 index e4b5d1a5d..000000000 --- a/core/util/src/node/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './fs.js'; diff --git a/core/util/src/polyfill.ts b/core/util/src/polyfill.ts deleted file mode 100644 index 8e1255e01..000000000 --- a/core/util/src/polyfill.ts +++ /dev/null @@ -1,24 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type IndexableWindow = Record; - -export const win = globalThis as IndexableWindow; - -const requestAnimationFrameFallback = (callback: FrameRequestCallback): ReturnType => - setTimeout(() => callback(Date.now()), 1000 / 60); - -export const requestAnimationFrame: typeof globalThis.requestAnimationFrame = - win.requestAnimationFrame || - win.webkitRequestAnimationFrame || - win.mozRequestAnimationFrame || - requestAnimationFrameFallback; - -const requestIdleCallbackFallback = ( - callback: () => void, - options?: IdleRequestOptions, -): ReturnType => setTimeout(callback, options?.timeout ?? 2000); - -export const requestIdleCallback: typeof globalThis.requestIdleCallback = - win.requestIdleCallback || - win.webkitRequestIdleCallback || - win.mozRequestIdleCallback || - requestIdleCallbackFallback; diff --git a/core/util/src/render-state.ts b/core/util/src/render-state.ts deleted file mode 100644 index 3f11badbd..000000000 --- a/core/util/src/render-state.ts +++ /dev/null @@ -1,46 +0,0 @@ -import {logger} from './_logger.js'; - -export const renderState = ( - state: T, - renderRecord: Record R)>, - thisArg: unknown = null, -): R | undefined => { - logger.logMethodArgs?.('renderState', {state, renderRecord}); - - let render = renderRecord[state]; - - if (typeof render === 'string') { - render = renderRecord[render as T]; - } - - if (render === undefined) { - if (renderRecord._default === undefined) { - logger.error('renderState', 'invalid_render_state'); - return; - } - // else - if (typeof renderRecord._default === 'string') { - if (renderRecord[renderRecord._default] === undefined) { - logger.error('renderState', 'invalid_default_render'); - return; - } - // else - return renderState(renderRecord._default, renderRecord, thisArg); - } - // else - render = renderRecord._default; - } - - if (typeof render !== 'function') { - logger.error('renderState', 'invalid_render_state'); - return; - } - - try { - return render.call(thisArg); - } - catch (err) { - logger.error('renderState', 'render_error', err); - return; - } -}; diff --git a/core/util/src/string.ts b/core/util/src/string.ts deleted file mode 100644 index 214d23d83..000000000 --- a/core/util/src/string.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const capitalize = (str: T): Capitalize => { - return (str[0].toUpperCase() + str.substring(1).toLowerCase()) as Capitalize; -}; diff --git a/core/util/tsconfig.json b/core/util/tsconfig.json deleted file mode 100644 index f3c2df152..000000000 --- a/core/util/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../type"}, - {"path": "../math"}, - ] -} diff --git a/core/validator/CHANGELOG.md b/core/validator/CHANGELOG.md deleted file mode 100644 index 0ab7f55bc..000000000 --- a/core/validator/CHANGELOG.md +++ /dev/null @@ -1,132 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/validator@1.1.1...@alwatr/validator@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/validator - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/validator@1.1.0...@alwatr/validator@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/validator - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **type:** Stringifyable ([058381b](https://github.com/AliMD/alwatr/commit/058381b50641ba44f4ac60e2173b5b91449e58cd)) -* **validator:** add 98 in start of phone number ([a26b6ae](https://github.com/AliMD/alwatr/commit/a26b6ae63e20e4d2c1f69951f244b8f430e6a755)) -* **validator:** array schema f**ing issue! ([f38a4a5](https://github.com/AliMD/alwatr/commit/f38a4a55d93f885f60b3c2a4678e80b4682af039)) -* **validator:** array support ([08f5215](https://github.com/AliMD/alwatr/commit/08f521534a0e937e5cf0f92bf5ca274838f41f93)) -* **validator:** improve `sanitizePhoneNumber` structure ([fb90f2f](https://github.com/AliMD/alwatr/commit/fb90f2ffcef7bf0d2c4a41a9fd0d578e3b9d40a7)) -* **validator:** local country code issue ([07e9cc0](https://github.com/AliMD/alwatr/commit/07e9cc08bd6067580dc33f839bdc842e178f7e5b)) -* **validator:** remove an unused expression ([d1fe2b4](https://github.com/AliMD/alwatr/commit/d1fe2b4cb3e8f44d37bd681b04c51d35e932268a)) - -### Features - -* **validator:** add some new functions to validate ([aea3ec1](https://github.com/AliMD/alwatr/commit/aea3ec1a242d5577d0e93895724dcacfce48532d)) -* **validator:** array in JsonSchema ([58c9c56](https://github.com/AliMD/alwatr/commit/58c9c56f47b18db5d1aa128b35d0e6c8352d2492)) -* **validator:** fix default value of `replaceNumberToLang` ([0345add](https://github.com/AliMD/alwatr/commit/0345addfa9d03acdc4113a07caf8ee3f1ccdddf9)) -* **validator:** sanitizePhoneNumber ([41f2050](https://github.com/AliMD/alwatr/commit/41f2050269bd74ff9c4908f984bfe3716fc01bc7)) -* **validator:** support array ([b632a7a](https://github.com/AliMD/alwatr/commit/b632a7a6b752fcd8666e6d42da64ebf3b0917c8d)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **validator:** change ValidType to StringifyableRecord ([ca1e191](https://github.com/AliMD/alwatr/commit/ca1e19166edfd206a3901a2a3390d4be3daaa7bc)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **validator:** not accept empty string ([433236b](https://github.com/AliMD/alwatr/commit/433236bc440f315b08b811d82ea57d3118e3fc6e)) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **validator:** boolean validator ([593b4a4](https://github.com/AliMD/alwatr/commit/593b4a499529d995836c7a91abc979c4b3a5543b)) -* **validator:** deps ([635866d](https://github.com/AliMD/alwatr/commit/635866d81134df0db46fc44b7ed7575e0486f9cd)) -* **validator:** readme ([af237db](https://github.com/AliMD/alwatr/commit/af237db8e0c2f5cd37d487304f2097bed95e3a90)) -* **validator:** return validObject ([aa44ed0](https://github.com/AliMD/alwatr/commit/aa44ed0b18cca15a0c689f9bdb9ce584b0a55eb0)) - -### Features - -* **validator:** additionalProperties ([60829a6](https://github.com/AliMD/alwatr/commit/60829a6280fdc3138f8702cee776e0dae11f548f)) -* **validator:** demo ([9e577ca](https://github.com/AliMD/alwatr/commit/9e577cad18be45942d36d633932ef0aa2c2ec512)) -* **validator:** enum values ([7c02422](https://github.com/AliMD/alwatr/commit/7c02422e9caf9ab5dd8e352714db346518229d59)) -* **validator:** export schema type ([da91546](https://github.com/AliMD/alwatr/commit/da915461583440d655f26c89c0c29b5c9cb74c6e)) -* **validator:** new package ([5aa48c3](https://github.com/AliMD/alwatr/commit/5aa48c354c116655e7824366d4efcd5965172fe3)) -* **validator:** rename var ([b68b2e4](https://github.com/AliMD/alwatr/commit/b68b2e4671ff30efcc817213e4bf9bee9c322d90)) -* **validator:** throw value in error ([4e99b80](https://github.com/AliMD/alwatr/commit/4e99b8078455443e70aab5ebdbe30c21152b48ae)) -* **validator:** update demo ([d49929f](https://github.com/AliMD/alwatr/commit/d49929fca0007aa94482010b7a6245f0bb360bc0)) -* **validator:** update demo ([cc21a90](https://github.com/AliMD/alwatr/commit/cc21a906b371f51696c3619fc0df0f392be99dee)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/validator - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/validator - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **type:** Stringifyable ([058381b](https://github.com/AliMD/alwatr/commit/058381b50641ba44f4ac60e2173b5b91449e58cd)) -- **validator:** add 98 in start of phone number ([a26b6ae](https://github.com/AliMD/alwatr/commit/a26b6ae63e20e4d2c1f69951f244b8f430e6a755)) -- **validator:** array schema f\*\*ing issue! ([f38a4a5](https://github.com/AliMD/alwatr/commit/f38a4a55d93f885f60b3c2a4678e80b4682af039)) -- **validator:** array support ([08f5215](https://github.com/AliMD/alwatr/commit/08f521534a0e937e5cf0f92bf5ca274838f41f93)) -- **validator:** improve `sanitizePhoneNumber` structure ([fb90f2f](https://github.com/AliMD/alwatr/commit/fb90f2ffcef7bf0d2c4a41a9fd0d578e3b9d40a7)) -- **validator:** local country code issue ([07e9cc0](https://github.com/AliMD/alwatr/commit/07e9cc08bd6067580dc33f839bdc842e178f7e5b)) -- **validator:** remove an unused expression ([d1fe2b4](https://github.com/AliMD/alwatr/commit/d1fe2b4cb3e8f44d37bd681b04c51d35e932268a)) - -### Features - -- **validator:** add some new functions to validate ([aea3ec1](https://github.com/AliMD/alwatr/commit/aea3ec1a242d5577d0e93895724dcacfce48532d)) -- **validator:** array in JsonSchema ([58c9c56](https://github.com/AliMD/alwatr/commit/58c9c56f47b18db5d1aa128b35d0e6c8352d2492)) -- **validator:** fix default value of `replaceNumberToLang` ([0345add](https://github.com/AliMD/alwatr/commit/0345addfa9d03acdc4113a07caf8ee3f1ccdddf9)) -- **validator:** sanitizePhoneNumber ([41f2050](https://github.com/AliMD/alwatr/commit/41f2050269bd74ff9c4908f984bfe3716fc01bc7)) -- **validator:** support array ([b632a7a](https://github.com/AliMD/alwatr/commit/b632a7a6b752fcd8666e6d42da64ebf3b0917c8d)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **validator:** change ValidType to StringifyableRecord ([ca1e191](https://github.com/AliMD/alwatr/commit/ca1e19166edfd206a3901a2a3390d4be3daaa7bc)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **validator:** not accept empty string ([433236b](https://github.com/AliMD/alwatr/commit/433236bc440f315b08b811d82ea57d3118e3fc6e)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **validator:** boolean validator ([593b4a4](https://github.com/AliMD/alwatr/commit/593b4a499529d995836c7a91abc979c4b3a5543b)) -- **validator:** deps ([635866d](https://github.com/AliMD/alwatr/commit/635866d81134df0db46fc44b7ed7575e0486f9cd)) -- **validator:** readme ([af237db](https://github.com/AliMD/alwatr/commit/af237db8e0c2f5cd37d487304f2097bed95e3a90)) -- **validator:** return validObject ([aa44ed0](https://github.com/AliMD/alwatr/commit/aa44ed0b18cca15a0c689f9bdb9ce584b0a55eb0)) - -### Features - -- **validator:** additionalProperties ([60829a6](https://github.com/AliMD/alwatr/commit/60829a6280fdc3138f8702cee776e0dae11f548f)) -- **validator:** demo ([9e577ca](https://github.com/AliMD/alwatr/commit/9e577cad18be45942d36d633932ef0aa2c2ec512)) -- **validator:** enum values ([7c02422](https://github.com/AliMD/alwatr/commit/7c02422e9caf9ab5dd8e352714db346518229d59)) -- **validator:** export schema type ([da91546](https://github.com/AliMD/alwatr/commit/da915461583440d655f26c89c0c29b5c9cb74c6e)) -- **validator:** new package ([5aa48c3](https://github.com/AliMD/alwatr/commit/5aa48c354c116655e7824366d4efcd5965172fe3)) -- **validator:** rename var ([b68b2e4](https://github.com/AliMD/alwatr/commit/b68b2e4671ff30efcc817213e4bf9bee9c322d90)) -- **validator:** throw value in error ([4e99b80](https://github.com/AliMD/alwatr/commit/4e99b8078455443e70aab5ebdbe30c21152b48ae)) -- **validator:** update demo ([d49929f](https://github.com/AliMD/alwatr/commit/d49929fca0007aa94482010b7a6245f0bb360bc0)) -- **validator:** update demo ([cc21a90](https://github.com/AliMD/alwatr/commit/cc21a906b371f51696c3619fc0df0f392be99dee)) diff --git a/core/validator/README.md b/core/validator/README.md deleted file mode 100644 index d9e0003ab..000000000 --- a/core/validator/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Math - `@alwatr/validator` - -Simple useful validator library written in tiny TypeScript module. diff --git a/core/validator/package.json b/core/validator/package.json deleted file mode 100644 index 758441f4c..000000000 --- a/core/validator/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@alwatr/validator", - "version": "1.1.2", - "description": "Simple useful validator library written in tiny TypeScript module.", - "keywords": [ - "validator", - "typescript", - "esm", - "alwatr" - ], - "main": "validator.js", - "type": "module", - "types": "validator.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "core/validator" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/core/validator#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/math": "^1.1.2", - "@alwatr/type": "^1.1.1", - "tslib": "^2.6.2" - } -} diff --git a/core/validator/src/type.ts b/core/validator/src/type.ts deleted file mode 100644 index 611f6e4fa..000000000 --- a/core/validator/src/type.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface JsonSchema { - [key: string]: - | JsonSchema[] - | JsonSchema - | StringConstructor - | NumberConstructor - | BooleanConstructor - | string - | number - | boolean - | null; -} diff --git a/core/validator/src/validator.ts b/core/validator/src/validator.ts deleted file mode 100644 index 58047f78f..000000000 --- a/core/validator/src/validator.ts +++ /dev/null @@ -1,158 +0,0 @@ -import {UnicodeDigits, isNumber} from '@alwatr/math'; - -import type {JsonSchema} from './type.js'; -import type {Stringifyable, StringifyableRecord} from '@alwatr/type'; - -export type {JsonSchema}; - -export function validator( - validSchema: JsonSchema, - targetObject?: StringifyableRecord | null, - additionalProperties = false, - path = '.', -): T { - if (targetObject == null || typeof targetObject !== 'object') { - throw new Error('invalid_type', { - cause: { - message: 'targetObject root not valid', - itemPath: path, - itemSchema: 'JsonSchema', - itemValue: String(targetObject), - }, - }); - } - - if ( - additionalProperties === false && - Object.keys(validSchema).sort().join() !== Object.keys(targetObject).sort().join() - ) { - throw new Error('invalid_type', { - cause: { - message: 'Object.keys(validSchema) !== Object.keys(targetObject)', - itemPath: path, - itemSchema: String(validSchema), - itemValue: String(targetObject), - }, - }); - } - - for (const itemName in validSchema) { - if (!Object.prototype.hasOwnProperty.call(validSchema, itemName)) continue; - - const itemPath = `${path}/${itemName}`; - const itemSchema = validSchema[itemName]; - const itemValue = targetObject[itemName] as Stringifyable; - - if (Array.isArray(itemSchema)) { - // array - if (!Array.isArray(itemValue)) { - throw new Error('invalid_type', { - cause: { - message: 'invalid type', - itemPath, - itemSchema: 'Array', - itemValue: String(itemValue), - }, - }); - } - // else - const schema = itemSchema[0]; - for (let index = itemValue.length - 1; index >= 0; index--) { - const item = itemValue[index]; - itemValue[index] = validator( - schema, - item as StringifyableRecord, // @FIXME: DeMastmalize - additionalProperties, - `${itemPath}[${index}]`, - ); - } - } - else if (typeof itemSchema === 'object' && itemSchema != null) { - // nested object - targetObject[itemName] = validator( - itemSchema, - itemValue as StringifyableRecord, - additionalProperties, - itemPath, - ); - } - else if (itemSchema === Boolean) { - const strValue = String(itemValue).toLowerCase(); - if (strValue === 'true') { - targetObject[itemName] = true; - } - else if (strValue === 'false') { - targetObject[itemName] = false; - } - else { - throw new Error('invalid_type', { - cause: { - message: 'invalid type', - itemPath, - itemSchema: 'Boolean', - itemValue: String(itemValue), - }, - }); - } - } - else if (itemSchema === Number) { - if (isNumber(itemValue)) { - targetObject[itemName] = +(itemValue as string); - } - else { - throw new Error('invalid_type', { - cause: { - message: 'invalid type', - itemPath, - itemSchema: 'Number', - itemValue: String(itemValue), - }, - }); - } - } - else if (itemSchema === String) { - if (typeof itemValue !== 'string' || itemValue === '') { - throw new Error('invalid_type', { - cause: { - message: 'invalid type', - itemPath, - itemSchema: 'String', - itemValue: String(itemValue), - }, - }); - } - } - else { - if (itemValue !== itemSchema) { - throw new Error('invalid_type', { - cause: { - message: 'invalid enum value', - itemPath, - itemSchema: String(itemSchema), - itemValue: String(itemValue), - }, - }); - } - } - } - - return targetObject as T; -} - -/** - * Validate a phone number and return it in a standard format with country code. - */ -export const sanitizePhoneNumber = (input?: string | number | null, countryCode = '98'): number | null => { - if (input == null) return null; - - const unicodeDigits = new UnicodeDigits('en'); - input = unicodeDigits.translate(input + ''); - - input = - countryCode + - input.replace(/[ )(-]+/g, '').replace(new RegExp(`^(\\+${countryCode}|${countryCode}|\\+|0)`), ''); - - if (input.length !== countryCode.length + 10 || !isNumber(input)) return null; - - return +input; -}; diff --git a/core/validator/tsconfig.json b/core/validator/tsconfig.json deleted file mode 100644 index b75a2be7e..000000000 --- a/core/validator/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../math"}, - {"path": "../type"}, - ] -} diff --git a/demo/CHANGELOG.md b/demo/CHANGELOG.md deleted file mode 100644 index 4cc6becf3..000000000 --- a/demo/CHANGELOG.md +++ /dev/null @@ -1,353 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- import util/node ([ca9e995](https://github.com/AliMD/alwatr/commit/ca9e995567ad267c1730e1c98f9dbbd03ab90331)) - -### Features - -- **es-bench:** enhance with optional count and warning ([0d21ee7](https://github.com/AliMD/alwatr/commit/0d21ee79210cf86b6b94904afdac09d5698c3cec)) -- **es-bench:** test flatStr ([961fe4e](https://github.com/AliMD/alwatr/commit/961fe4edb9bb686cc5da8325726eb19099149173)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- build issues ([e1060bc](https://github.com/AliMD/alwatr/commit/e1060bccbfe3c775c32b85e9b8eb601e48b2998c)) -- **demo/crypto:** `logger`s & `token` ([3a777fb](https://github.com/AliMD/alwatr/commit/3a777fb8c7d4deba682c1a84c472c502604f1d2b)) -- **demo/crypto:** log ([0e12cfd](https://github.com/AliMD/alwatr/commit/0e12cfd5fc97a4099353bc12a32d1db179be4720)) -- **demo/crypto:** revert last demo ([8a350a5](https://github.com/AliMD/alwatr/commit/8a350a5554907329cf2c6efc61ea8fef23a0a548)) -- **demo/crypto:** use all token status ([66ae2b7](https://github.com/AliMD/alwatr/commit/66ae2b7286bd8b422e31296f2c17fc477656ab29)) -- **demo/fsm:** new demo for new fsm ([32fa215](https://github.com/AliMD/alwatr/commit/32fa2155d73be3c1328b4926273176ee47505c39)) -- **demo/icon:** remove preloadIcon in demo ([72fe224](https://github.com/AliMD/alwatr/commit/72fe224aeebe4abd6508d0132e4f1943efbd9123)) -- **demo/storage-engine:** use save ([b21408f](https://github.com/AliMD/alwatr/commit/b21408f430608249bb82c418fcaf08b35f4d166e)) -- **demo/token:** import type ([046403a](https://github.com/AliMD/alwatr/commit/046403ab5e3a01642e9a171e2953f087d35c15c5)) -- **demo:** fix demo based on latest `fsm`s changes ([551e5fe](https://github.com/AliMD/alwatr/commit/551e5fe75fa106bc3252bbbbf108a68bf0dc19e7)) -- **demo:** token ([ad03a19](https://github.com/AliMD/alwatr/commit/ad03a19fc4970c01c39ac1b40e8d933a8d0539a0)) -- **es-bench:** logger dev mode ([c2d6cf3](https://github.com/AliMD/alwatr/commit/c2d6cf3753d28cd3c760ab9cd34efa3d3cc50232)) -- **es-bench:** remove `stat` ([9dc52c7](https://github.com/AliMD/alwatr/commit/9dc52c7801cde62d90e962c69635162c416e55ee)) -- **fsm/demo:** signalList ([d53202c](https://github.com/AliMD/alwatr/commit/d53202c7daf3f55682e47e78f9a8a1b8bc70441d)) -- **lint:** ignore es-bench ([a6f59e4](https://github.com/AliMD/alwatr/commit/a6f59e433f6104b934b24ae90676fd0273eea3e8)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **storage-engine:** dev mode ([65491ce](https://github.com/AliMD/alwatr/commit/65491ce7b7ff0756d8e475442d175b880b9894db)) - -### Features - -- **bench:** improve bench mark logs ([8d3121b](https://github.com/AliMD/alwatr/commit/8d3121be52493440906c9788a90c69e4c8d05789)) -- **bench:** test logger benchmark impact ([8ed98d8](https://github.com/AliMD/alwatr/commit/8ed98d8764834431c6806545660ba3a77eadc9c6)) -- **bench:** test object vs map ([f60a9fc](https://github.com/AliMD/alwatr/commit/f60a9fce1ca9491e3916fd40fb7a1443927f9d65)) -- **com-pwa/sign-in:** use simple hash for phoneNumber ([4b88494](https://github.com/AliMD/alwatr/commit/4b884940a536f02928692fbf8686c5ca04dea23a)) -- **crypto/hash:** new crc length strategy ([7a6c27e](https://github.com/AliMD/alwatr/commit/7a6c27e2f1b78df4aaa03a764f1b57477f1220fc)) -- **crypto:** add `user factory` demo ([94236c8](https://github.com/AliMD/alwatr/commit/94236c8ece66a1ced6cbf3f35603d2716ab1d5c1)) -- **demo/crypto:** random ([d820445](https://github.com/AliMD/alwatr/commit/d8204451e356c60572df3862edbdb02c06bf6b9f)) -- **demo/fsm:** new demo for state machine ([136b563](https://github.com/AliMD/alwatr/commit/136b563220310d8ec637b4e776c48c1d3bb62ecc)) -- **demo/fsm:** update ([6080469](https://github.com/AliMD/alwatr/commit/60804694ccab53b5c22ea636992f54ef1dde6a4b)) -- **demo/fsm:** update with new api ([9170694](https://github.com/AliMD/alwatr/commit/917069457630eecfa24c6fe83b7d34fb281a9d2d)) -- **demo:** crypto hash ([445b865](https://github.com/AliMD/alwatr/commit/445b8650a1abd98696b7fe954bcfca23f76afba8)) -- **es-bench:** compare `bind` vs `class` ([b949f87](https://github.com/AliMD/alwatr/commit/b949f87234353cd7238730aa26c353422fb06951)) -- **es-bench:** date locale ([7591331](https://github.com/AliMD/alwatr/commit/7591331f08adf1cad855cfcaeca98122d3045009)) -- **es-bench:** new bench model ([3ef68b0](https://github.com/AliMD/alwatr/commit/3ef68b034562a96a927d969d35a54966997aff6e)) -- **es-bench:** test node exist methods ([73bb495](https://github.com/AliMD/alwatr/commit/73bb495deea5df537e42f7c604ab262dba17026a)) -- **fsm:** custom signal callback ([47c22e9](https://github.com/AliMD/alwatr/commit/47c22e92a8a8085148b44b316d649b695ff8071a)) -- **validator:** add `phone` validation ([e5c19ca](https://github.com/AliMD/alwatr/commit/e5c19ca67e7c804cf3e63841890e68c11620d796)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **demo/fsm:** context object ([1fa8aac](https://github.com/AliMD/alwatr/commit/1fa8aac30ca6b1e15fd29309384466962b4b9f64)) -- **demo/math:** remove getClientId ([8be5a4a](https://github.com/AliMD/alwatr/commit/8be5a4a5c85c1129387667f4f6ceab56ebfb97e6)) -- **fsm:** demo ([079abf9](https://github.com/AliMD/alwatr/commit/079abf9b46bd0a271a30b942dcb0405993010be6)) -- **fsm:** every signal mather ([0dc504d](https://github.com/AliMD/alwatr/commit/0dc504dacbb1ec68f154244619d644ff8e43cc04)) - -### Features - -- Alwatr Finite State Machines ([d5900b4](https://github.com/AliMD/alwatr/commit/d5900b4ee8685b120188888871405853f5a69417)) -- **demo:** fsm light machine ([fe168e3](https://github.com/AliMD/alwatr/commit/fe168e373fa0463124acb5f9b3bf971d1d64a596)) -- es bench ([a6ec86b](https://github.com/AliMD/alwatr/commit/a6ec86bc71dba2aec4dc6c4b42a64af75bb2b012)) -- **fsm:** $all and $self state ([69adf41](https://github.com/AliMD/alwatr/commit/69adf41064ca0f55497484c50e298ebc26c42dcc)) -- **fsm:** enhance types ([3b13046](https://github.com/AliMD/alwatr/commit/3b130463a102f59c38603b0de470be5c87ee88c9)) -- **fsm:** share state events ([de42522](https://github.com/AliMD/alwatr/commit/de42522a97fdf6be8bee73d91a35820e2a5e6efb)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Features - -- **demo/router:** enhance demo ([3595b83](https://github.com/AliMD/alwatr/commit/3595b83b49e34b9d3d7b172bd12509b258839d0b)) -- **i18n:** add replaceNumber and auto detect setLocale from html ([3413471](https://github.com/AliMD/alwatr/commit/341347149f8685bc259034f5593048aa7db0b927)) -- **math:** getDeviceUuid ([946dad3](https://github.com/AliMD/alwatr/commit/946dad3544f2741462ff239edab8b4a9ea323bd6)) -- **math:** rename deviceId to clientId ([b211fd4](https://github.com/AliMD/alwatr/commit/b211fd42245d51d7109186ddb2f41574d0f0b786)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -- **signal:** new demo ([10ffc20](https://github.com/AliMD/alwatr/commit/10ffc2061a463b980da0dcd65d4afb2f850e2553)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **validator:** remove extra trim ([ee9b601](https://github.com/AliMD/alwatr/commit/ee9b601198ea8dded43497df6824e09f65be86b3)) -- **validator:** validate boolean ([c0cfdc2](https://github.com/AliMD/alwatr/commit/c0cfdc21a99cf02bb4d56c00ba186429e72d3aa2)) - -### Features - -- **validator:** demo ([9e577ca](https://github.com/AliMD/alwatr/commit/9e577cad18be45942d36d633932ef0aa2c2ec512)) -- **validator:** demo ([b48a30b](https://github.com/AliMD/alwatr/commit/b48a30bac9f02f0b7edb3b4069c324f835f6d49b)) -- **validator:** update demo ([d49929f](https://github.com/AliMD/alwatr/commit/d49929fca0007aa94482010b7a6245f0bb360bc0)) -- **validator:** update demo ([cc21a90](https://github.com/AliMD/alwatr/commit/cc21a906b371f51696c3619fc0df0f392be99dee)) -- **validator:** update demo ([4f11b61](https://github.com/AliMD/alwatr/commit/4f11b61af433f348cc4a4bd5f837848c6c1298a4)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/demo - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **demo/storage-client:** getStorage ([21b2361](https://github.com/AliMD/alwatr/commit/21b2361a2de49097a5e70ff5282a3df0d393e3d2)) -- set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -- tsconfig path ([02a1fdf](https://github.com/AliMD/alwatr/commit/02a1fdfc8491e0fade218f00c6790e1409fafcaa)) -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -### Features - -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/demo - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/demo - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- **demo/storage-client:** set default token ([f7a8962](https://github.com/AliMD/alwatr/commit/f7a896202e4a6acd2c248904cdc32dae2773550b)) -- **demo/storage-client:** update config ([2c71396](https://github.com/AliMD/alwatr/commit/2c71396f628942e776814a8bc08705bac679e5ab)) -- **demo:** update types ([010b123](https://github.com/AliMD/alwatr/commit/010b123075d073c8583f557608a9781064d7cc5c)) -- remove \_updatedBy ([d8d5c83](https://github.com/AliMD/alwatr/commit/d8d5c83884bbd30566001ff84faf9e840503471c)) -- update types ([44cc57f](https://github.com/AliMD/alwatr/commit/44cc57f97a99ed810dae3fde39c9525bd0e8ff3c)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/demo - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/demo - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **demo/storage-client:** handle document not found ([fb73532](https://github.com/AliMD/alwatr/commit/fb73532fd1a1b52552d0b79f97847db059444785)) -- **demo/storage-client:** use host in config ([f3bd04d](https://github.com/AliMD/alwatr/commit/f3bd04dd047afebd99650f57fe6a2715b014dfb2)) -- **storage-client:** demo ([83fa9d0](https://github.com/AliMD/alwatr/commit/83fa9d0bde2a65a02c225bcb9829a87667606fb6)) -- **storage-client:** demo get not found ([5070912](https://github.com/AliMD/alwatr/commit/507091267f06a8f854833ccac5b9a3f77c46ae70)) -- **storage-client:** demo security issue ([85a71d4](https://github.com/AliMD/alwatr/commit/85a71d496bd9e62863ce85c5abb994648f69a36c)) -- **storage-client:** handle 404 in benchmark ([b149c85](https://github.com/AliMD/alwatr/commit/b149c857ae8ec46ae854eb5fd3893395945d5da2)) -- **storage:** performance demo test ([17b2c1a](https://github.com/AliMD/alwatr/commit/17b2c1a54132b524b2389976fb2e21f84e20e9c1)) -- **tsconfig:** rename storage to storage-engine ([229dd77](https://github.com/AliMD/alwatr/commit/229dd77a0aa928013f93ac43514309e163631a29)) - -### Features - -- **demo:** forAll storage-client ([a856099](https://github.com/AliMD/alwatr/commit/a856099f5644a0b059fd0ff25521376d5f9b97eb)) -- **demo:** storage-client ([e19abc4](https://github.com/AliMD/alwatr/commit/e19abc4ecd59200204be7f26ce0021157a26e262)) -- **fetch:** support nodejs ([2ed2ef4](https://github.com/AliMD/alwatr/commit/2ed2ef42e9f204d4896ada4e20b839cfabdc7284)) -- **storage-client:** benchmark test ([7c0fc92](https://github.com/AliMD/alwatr/commit/7c0fc92fa910168775459dc2be484844a6a178cb)) -- **storage-client:** performance demo ([186832c](https://github.com/AliMD/alwatr/commit/186832cfea21b02aa6f7c9ec3eba768fa0ea64ed)) - -### Performance Improvements - -- **storage-client:** refactor for perf improve and keep alive ([ed0b743](https://github.com/AliMD/alwatr/commit/ed0b743a8936602b63d92c216d2d65f6a31d74cf)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/demo - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -### Features - -- **`alwatr-icon`:** icon component ([4a24cdc](https://github.com/AliMD/alwatr/commit/4a24cdcfbb55bdc3928dd39ca9e6372caec386b2)) -- **demo:** dynamic icon demo ([f9c57f5](https://github.com/AliMD/alwatr/commit/f9c57f52bb8ebcbe5f2d26d2aa3287cda48df5c5)) -- **demo:** fetch revalidateCallback ([55a58b7](https://github.com/AliMD/alwatr/commit/55a58b7174065bc01b52de32816505e189cbdf34)) -- **fetch:** update demo ([441c084](https://github.com/AliMD/alwatr/commit/441c08418c67283cf192ca192bfd5f0e238ecdc5)) - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- **font:** review ([a371bf2](https://github.com/AliMD/alwatr/commit/a371bf2bcf6477487ceeadeaa596919066f5c468)) - -### Features - -- **`demo`:** improve icon demo ([6519f6f](https://github.com/AliMD/alwatr/commit/6519f6f05567b8a4ce3db0bd3a442139902a01d4)) -- **demo:** improve demo dark mode ([b89217e](https://github.com/AliMD/alwatr/commit/b89217eb2bd271e1d62ebe29b41ac2599852d7da)) -- **demo:** seprate fonts ([222e014](https://github.com/AliMD/alwatr/commit/222e014d488416042bf1d8575bfc0eb84d6009e8)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -### Features - -- **fetch:** cache strategy ([106eabd](https://github.com/AliMD/alwatr/commit/106eabdd10574b24f9919049d0b509ae40168a9a)) -- **fetch:** cache strategy demo ([47dd239](https://github.com/AliMD/alwatr/commit/47dd2391cd1d760cfec8b0f54a249d05b83b4c33)) -- **fetch:** improve demo ([638830f](https://github.com/AliMD/alwatr/commit/638830f817923a71ce0900776622a858e4905cad)) - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -### Bug Fixes - -- **storage:** \_last ket ([a1c452a](https://github.com/AliMD/alwatr/commit/a1c452a50c7b53b03765bf37556264a64ac3ed55)) - -### Features - -- add math demo ([7a92dc2](https://github.com/AliMD/alwatr/commit/7a92dc22ab323ddea9ed166e597ea1924cf368e9)) -- **demo:** fetch ([2bf7a69](https://github.com/AliMD/alwatr/commit/2bf7a694f53921b3096b4092f85bd212ec32881b)) -- **fetch:** docs & pattern ([459ad1c](https://github.com/AliMD/alwatr/commit/459ad1c5996f851769306639136d79c0f7270770)) -- **Math:** translateUnicodeDigits ([996c507](https://github.com/AliMD/alwatr/commit/996c507abb4708b9ef32377eb4045efb8a3f0939)) - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/demo - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/demo - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/demo - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Bug Fixes - -- **token:** calc benchs ([f1240cc](https://github.com/AliMD/alwatr/commit/f1240cce9247c6fb53dd63a940bd95123ba628d1)) - -### Features - -- **storage:** add \_createdBy and \_updatedBy ([1a70945](https://github.com/AliMD/alwatr/commit/1a70945bc61921f13d839adde25fdfe9fb37eaad)) -- **storage:** improve process and add has, storagePath, keys and length ([4e323ad](https://github.com/AliMD/alwatr/commit/4e323ad10ee0630cfa02edd191167b69e14743ff)) -- **token:** generate and verify HOTP tpkens ([d0372f8](https://github.com/AliMD/alwatr/commit/d0372f805a45d6fd6571b50821529068cec7d424)) -- **token:** new package files ([fe620e0](https://github.com/AliMD/alwatr/commit/fe620e0d9f84c4e6d8e0eed47d6b398e218429ad)) - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- all package refrences ([11b027d](https://github.com/AliMD/alwatr/commit/11b027d4cdbe142e1f5ef6c6f87c1812fbb2d94b)) - -### Features - -- **font:** demo for sahel ([bb087ef](https://github.com/AliMD/alwatr/commit/bb087eff880aceaedfb253494581d1f363632573)) -- **jatabase:** demo ([17beb7e](https://github.com/AliMD/alwatr/commit/17beb7ecdf3e89b0ffee43f4365f3b2dc4950f99)) -- **logger:** node coloring support ([2b4aab6](https://github.com/AliMD/alwatr/commit/2b4aab655bc0707761587a7439de98bbd4ad0e08)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/demo - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -### Bug Fixes - -- **font:** cleanup ([cdd4ee1](https://github.com/AliMD/alwatr/commit/cdd4ee15332cb9f1ec19bf34ec02cb1f5999cad5)) -- try to fix typescript importer in eslint ([ceb508c](https://github.com/AliMD/alwatr/commit/ceb508c9d8152aba4f3833b1c1f4930828e2014d)) - -### Features - -- **demo:** add font demo ([33f3825](https://github.com/AliMD/alwatr/commit/33f3825a7e23b86281d047dd3be3b2f8eb862b8d)) -- **demo:** font ([8035d73](https://github.com/AliMD/alwatr/commit/8035d73dc99d4ff9c8eec0f70bec43b97b80320c)) - -# [0.9.0](https://github.com/AliMD/alwatr/compare/v0.8.0...v0.9.0) (2022-03-22) - -**Note:** Version bump only for package @alwatr/demo - -# [0.8.0](https://github.com/AliMD/alwatr/compare/v0.7.2...v0.8.0) (2022-03-14) - -### Features - -- **demo:** router outlet demo ([54576f0](https://github.com/AliMD/alwatr/commit/54576f0397df1d1471467564529a01b4e75335bf)) -- **router:** improve demo for test signal! ([59a1017](https://github.com/AliMD/alwatr/commit/59a1017f3ed323fea8e9e798f612f0f54b74b399)) -- **router:** simple demo ([884359a](https://github.com/AliMD/alwatr/commit/884359ac2c77a306c2410d6fd351382b416c36fe)) - -## [0.7.2](https://github.com/AliMD/alwatr/compare/v0.7.1...v0.7.2) (2022-03-12) - -### Features - -- **signal:** demo as test ([fc3f9fd](https://github.com/AliMD/alwatr/commit/fc3f9fdd8c76c6bc5117f3ee894480500f81cc80)) - -# [0.7.0](https://github.com/AliMD/alwatr/compare/v0.6.1...v0.7.0) (2022-03-12) - -**Note:** Version bump only for package @alwatr/demo - -# [0.6.0](https://github.com/AliMD/vatr/compare/v0.5.0...v0.6.0) (2022-03-11) - -### Bug Fixes - -- **demo:** package ([c2b2339](https://github.com/AliMD/vatr/commit/c2b2339f1ca08207ae0d0f8f0d7fff9c98a822ce)) -- old One repo links ([1156b07](https://github.com/AliMD/vatr/commit/1156b077e0abc4712207183e01896fe86f7a05f6)) - -# [0.5.0](https://github.com/AliMD/alwatr/compare/v0.4.0...v0.5.0) (2022-03-11) - -**Note:** Version bump only for package @alwatr/demo - -# [0.4.0](https://github.com/AliMD/alwatr/compare/v0.3.0...v0.4.0) (2022-03-11) - -### Features - -- **logger:** add logProperty, logMethodFull ([8b0317d](https://github.com/AliMD/alwatr/commit/8b0317db88ed73604a27935a3a30cd5c31cb0804)) -- **logger:** complete refactor the logger with new API and fix show correct line number ([7efe8cf](https://github.com/AliMD/alwatr/commit/7efe8cf0f566e148406f38fdd60fa3d747c9bc51)) - -# [0.3.0](https://github.com/AliMD/alwatr/compare/v0.2.1...v0.3.0) (2022-03-06) - -**Note:** Version bump only for package @alwatr/demo - -## [0.2.1](https://github.com/AliMD/alwatr/compare/v0.2.0...v0.2.1) (2022-03-05) - -**Note:** Version bump only for package @alwatr/demo - -# [0.2.0](https://github.com/AliMD/alwatr/compare/v0.1.2...v0.2.0) (2022-03-05) - -### Bug Fixes - -- **util:** remove package ([b337d9a](https://github.com/AliMD/alwatr/commit/b337d9a97c8f73c2a87e722b23a50718321d1648)) - -## [0.1.2](https://github.com/AliMD/alwatr/compare/v0.1.1...v0.1.2) (2022-03-03) - -**Note:** Version bump only for package @alwatr/demo - -## [0.1.1](https://github.com/AliMD/alwatr/compare/v0.1.0...v0.1.1) (2022-03-03) - -**Note:** Version bump only for package @alwatr/demo - -# 0.1.0 (2022-03-02) - -### Bug Fixes - -- add type module ([2649798](https://github.com/AliMD/alwatr/commit/2649798c752138742cbdd14ee78768daa26f5b5a)) -- **bug:** rootDir `src` to `.` ([4ad87ee](https://github.com/AliMD/alwatr/commit/4ad87ee4a84b80afe563db5d42671ec9624ffce3)) -- change all [@one](https://github.com/one) to [@alwatr](https://github.com/alwatr) ([e0573bf](https://github.com/AliMD/alwatr/commit/e0573bf8b55c9e25bad3f7b407cc2c3d509f36d3)) -- fix import module ([38dff29](https://github.com/AliMD/alwatr/commit/38dff29a99e21f75f35be31bc11fb84e1f9d4a55)) -- remove `src` and move all content to `root` ([3323322](https://github.com/AliMD/alwatr/commit/33233220ed576f30249aa1197105219b62c65945)) - -### Features - -- build demo ([e50b310](https://github.com/AliMD/alwatr/commit/e50b3106f428a2a11cc0d960970017d564caa017)) -- build index ([93b604f](https://github.com/AliMD/alwatr/commit/93b604f44d43eedec5df1dd47ad84b96a99ed9b7)) -- demo html ([de43204](https://github.com/AliMD/alwatr/commit/de432043c1b46f2c8f0d9c4f46580b31f3eee066)) -- **demo:** add error and force sample ([0aa2edd](https://github.com/AliMD/alwatr/commit/0aa2edd896b417ea79a249f3332ad629e80a17fa)) -- **demo:** add alwatr logger demo ([f759a06](https://github.com/AliMD/alwatr/commit/f759a06f65545d3589a136f2b9a553dfdb1f2af2)) -- **demo:** alwatr logger demo ([302c6f4](https://github.com/AliMD/alwatr/commit/302c6f46fcc00796e6c030c6fe98a6c2b9f21d04)) -- **svg-icon:** init svg-icon package (ionicons) ([#14](https://github.com/AliMD/alwatr/issues/14)) ([5b3a8f6](https://github.com/AliMD/alwatr/commit/5b3a8f67f5676e0a2139cfa30b60666190c991cf)) diff --git a/demo/crypto/benchmark.ts b/demo/crypto/benchmark.ts deleted file mode 100644 index 32224a752..000000000 --- a/demo/crypto/benchmark.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {AlwatrTokenGenerator, type CryptoAlgorithm} from '@alwatr/crypto'; -import {delay} from '@alwatr/util'; - -if (process.env.NODE_ENV !== 'production') { - console.log('Please run node in production for benchmark. NODE_ENV=production node demo/crypto/benchmark.js'); - process.exit(); -} - -const tokenGenerator = new AlwatrTokenGenerator({ - secret: 'my-very-secret-key', - duration: null, - algorithm: 'md5', - encoding: 'base64url', -}); - -const sampleData = 'Lorem ipsum dolor sit amet consectetur adipisicing elit.'; - -function benchmark(algorithm: CryptoAlgorithm): void { - tokenGenerator.config.algorithm = algorithm; - const now = Date.now(); - const testRun = 1_000_000; - let i = testRun; - for (; i > 0; i--) { - tokenGenerator.generate(sampleData); - } - const runPerSec = Math.round((testRun / (Date.now() - now)) * 1000); - console.log(`Benchmark for ${algorithm} runs %s per sec`, runPerSec); -} - -benchmark('md5'); -await delay(500); -benchmark('sha1'); -await delay(500); -benchmark('sha224'); -await delay(500); -benchmark('sha256'); -await delay(500); -benchmark('sha384'); -await delay(500); -benchmark('sha512'); diff --git a/demo/crypto/hash.ts b/demo/crypto/hash.ts deleted file mode 100644 index 117294d6f..000000000 --- a/demo/crypto/hash.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {AlwatrHashGenerator} from '@alwatr/crypto'; - -const hashGenerator = new AlwatrHashGenerator({ - algorithm: 'sha1', - encoding: 'base64url', - crcLength: 8, -}); - -const test = (): void => { - const hash = hashGenerator.randomSelfValidate(); - console.log('hash: %s validation: %s', hash, hashGenerator.verifySelfValidate(hash)); -}; - -for (let index = 0; index < 10; index++) { - test(); -} diff --git a/demo/crypto/rand.ts b/demo/crypto/rand.ts deleted file mode 100644 index cc484aae5..000000000 --- a/demo/crypto/rand.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {AlwatrHashGenerator, secretGeneratorPreConfig} from '@alwatr/crypto'; - -const hashGenerator = new AlwatrHashGenerator(secretGeneratorPreConfig); - -for (let i = 0; i <= 10; i++) { - console.log('hash: %s', hashGenerator.randomSelfValidate()); -} - diff --git a/demo/crypto/token.ts b/demo/crypto/token.ts deleted file mode 100644 index 7f24f30f2..000000000 --- a/demo/crypto/token.ts +++ /dev/null @@ -1,55 +0,0 @@ -import {type TokenStatus, AlwatrTokenGenerator} from '@alwatr/crypto'; -import {createLogger} from '@alwatr/logger'; - -const logger = createLogger('token/demo', true); - -const tokenGenerator = new AlwatrTokenGenerator({ - secret: 'my-very-secret-key', - duration: '2s', - algorithm: 'sha512', - encoding: 'base64url', -}); - -interface User { - id: string; - name: string; - role: 'admin' | 'user'; - auth: string; -} - -const user: User = { - id: 'alimd', - name: 'Ali Mihandoost', - role: 'admin', - auth: '', // Generated in first login -}; - -// ------ - -// For example when user authenticated we send user data contain valid auth token. -function login(): User { - user.auth = tokenGenerator.generate(`${user.id}-${user.role}`); - logger.logMethodFull?.('login', {}, {user}); - return user; -} - -// Now request received and we want to validate the token to ensure that the user is authenticated. -function userValidate(user: User): TokenStatus { - const validateStatus = tokenGenerator.verify(`${user.id}-${user.role}`, user.auth); - logger.logMethodFull?.('userValidate', {user}, {validateStatus}); - return validateStatus; -} - -// demo -const userData = login(); -userValidate(userData); // { validateStatus: 'valid' } - -setTimeout(() => { - // 2s later - userValidate(user); // { validateStatus: 'expired' } -}, 2001); - -setTimeout(() => { - // 4s later - userValidate(user); -}, 4001); // { validateStatus: 'invalid' } diff --git a/demo/crypto/user.ts b/demo/crypto/user.ts deleted file mode 100644 index d55e643fb..000000000 --- a/demo/crypto/user.ts +++ /dev/null @@ -1,47 +0,0 @@ -import {AlwatrUserFactory} from '@alwatr/crypto'; -import {createLogger} from '@alwatr/logger'; -import {delay} from '@alwatr/util'; - -import type {User} from '@alwatr/type'; - -const logger = createLogger('crypto/user', true); - -const userFactory = new AlwatrUserFactory( - { - algorithm: 'sha1', - encoding: 'base64url', - crcLength: 4, - }, - { - secret: 'my-very-secret-key', - duration: '2s', - algorithm: 'sha512', - encoding: 'base64url', - }, -); - -const user: User = { - id: userFactory.generateId(), - country: 'iran', - fullName: 'امیرمحمد نجفی', - gender: 'male', - lpe: 1, - phoneNumber: 989151234567, -}; - -const userIdValidation = userFactory.verifyId(user.id); -logger.logOther?.('user id validation:', userIdValidation); - -const userToken = userFactory.generateToken([user.id, user.lpe]); -logger.logOther?.('user token:', userToken); - -const userTokenValidation = (): void => { - const tokenValidationStatus = userFactory.verifyToken([user.id, user.lpe], userToken); - logger.logOther?.('user token validation status:', tokenValidationStatus); -}; - -userTokenValidation(); -await delay(2000); -userTokenValidation(); -await delay(1000); -userTokenValidation(); diff --git a/demo/es-bench/bench.ts b/demo/es-bench/bench.ts deleted file mode 100644 index 184e74cb6..000000000 --- a/demo/es-bench/bench.ts +++ /dev/null @@ -1,25 +0,0 @@ -if (globalThis.process && (globalThis.process?.env.NODE_ENV !== 'production' || typeof globalThis.gc !== 'function')) { - console.warn('Please run node in production with `--expose-gc` for benchmark\nNODE_ENV=production node --expose-gc demo/...'); -} - -export const bench = (name: string, func: () => void, count = 1_000_000): void => { - globalThis.gc?.(); - let i = count; - const startMemory = globalThis.process?.memoryUsage.rss() ?? 0; - const startTime = performance.now(); - - while (i--) { - func(); - } - - const duration = performance.now() - startTime; - const runPerSec = Math.ceil((count / duration) * 1000); - const memoryUsage = Math.round(((globalThis.process?.memoryUsage.rss() ?? 0) - startMemory) / 10) / 100; - - console.log( - `run ${name} ${runPerSec.toLocaleString()}/s with ${ - globalThis.process?.memoryUsage.rss !== undefined ? memoryUsage.toLocaleString() : '?' - }kb` - ); - globalThis.gc?.(); -}; diff --git a/demo/es-bench/compare.ts b/demo/es-bench/compare.ts deleted file mode 100644 index 97ba890f1..000000000 --- a/demo/es-bench/compare.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {bench} from './bench.js'; - -const value = undefined; - -function test_1(): boolean { - if (value === true) { - return true; - } - else { - return false; - } -} - -function test_2(): boolean { - if (value) { - return true; - } - else { - return false; - } -} - - -bench('test_1', test_1); -bench('test_2', test_2); - -bench('test_1', test_1); -bench('test_2', test_2); diff --git a/demo/es-bench/date-locale.ts b/demo/es-bench/date-locale.ts deleted file mode 100644 index 63c222e9d..000000000 --- a/demo/es-bench/date-locale.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {bench} from './bench.js'; - -// 18,303,355/s with 44,597.25kb -bench('date_now', () => { - Date.now(); -}); - -// 12,177,203/s with 51,511.3kb -bench('new_date', () => { - new Date(); -}); - -// 677,056/s with 52,559.87kb -const dateTimeFormat = Intl.DateTimeFormat('fa'); -bench('date_time_format_new', () => { - dateTimeFormat.format(new Date()); -}); - -// 9,770/s with 2,381,545.47kb -bench('new_date_time_format_new', () => { - const dateTimeFormat = Intl.DateTimeFormat('fa'); - dateTimeFormat.format(new Date()); -}); - -// 766,025/s with 2,227,060.74kb -bench('date_time_format_now', () => { - dateTimeFormat.format(Date.now()); -}); - -// 9,616/s with 1,784,446.98kb -bench('new_date_time_format_now', () => { - const dateTimeFormat = Intl.DateTimeFormat('fa'); - dateTimeFormat.format(Date.now()); -}); - -// 757,297/s with 1,626,062.85kb -bench('to_locale_date_string', () => { - const time = Date.now(); - new Date(time).toLocaleDateString('fa'); -}); - -globalThis.document?.body.append(' Done. Check the console.'); diff --git a/demo/es-bench/flat-str.ts b/demo/es-bench/flat-str.ts deleted file mode 100644 index 1d1c6e037..000000000 --- a/demo/es-bench/flat-str.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {bench} from './bench.js'; - -function flatstr (s: string) { - // @ts-ignore - s | 0 - return s -} - -let temp = ''; - -function test_1(): void { - let s = ''; - let n = 1_000_000; - while(n--) { - s += 'ali'; - } - temp = s; -} - -function test_2(): void { - let s = ''; - let n = 1_000_000; - while(n--) { - s += 'ali'; - } - temp = flatstr(s); -} - - -bench('test_1', test_1, 10); -bench('test_2', test_2, 10); - -bench('test_1', test_1, 10); -bench('test_2', test_2, 10); - -bench('test_1', test_1, 10); -bench('test_2', test_2, 10); - - -console.log(temp.length) diff --git a/demo/es-bench/for-in-vs-of.ts b/demo/es-bench/for-in-vs-of.ts deleted file mode 100644 index 2a596125b..000000000 --- a/demo/es-bench/for-in-vs-of.ts +++ /dev/null @@ -1,80 +0,0 @@ -import {random} from '@alwatr/math'; - -import {bench} from './bench.js'; - -const obj: Record> = {}; -let userName = ''; -console.log(userName); - -function prepare(): void { - for (let i = 100; i; i--) { - obj[i] = { - id: 'user_' + i, - fname: random.string(4, 16), - lname: random.string(4, 32), - email: random.string(8, 32), - token: random.string(16), - }; - } -} - -function test_for_in(): void { - for (const key in obj) { - if (!Object.prototype.hasOwnProperty.call(obj, key)) continue; - userName = obj[key].id; - } -} - -function test_for_of_values(): void { - for (const item of Object.values(obj)) { - userName = item.id; - } -} - -function test_for_of_keys(): void { - for (const key of Object.keys(obj)) { - userName = obj[key].id; - } -} - -prepare(); - -bench('for-of-values', test_for_of_values); -bench('for-of-keys', test_for_of_keys); -bench('for-in', test_for_in); - -globalThis.document?.body.append(' Done. Check the console.'); - -/* -1000 items, key is numberString (obj[i]) - for-of-values: 1s - for-of-keys: 3s - for-in: 6s - -1000 items, if key is string (obj['user_'+i]) - for-of-keys: 11s - for-in: 15s - for-of-values: 26s - - -100 items, key is numberString (obj[i]) - for-of-values: 139ms - for-of-keys: 342ms - for-in: 599ms - -100 items, if key is string (obj['user_'+i]) - for-of-keys: 651ms - for-in: 960ms - for-of-values: 2159ms - - -10 items, key is numberString (obj[i]) - for-of-values: 54ms - for-of-keys: 70ms - for-in: 107ms - -10 items, if key is string (obj['user_'+i]) - for-in: 28ms - for-of-values: 35ms - for-of-keys: 53ms -*/ diff --git a/demo/es-bench/import-tmp.ts b/demo/es-bench/import-tmp.ts deleted file mode 100644 index a8ada0913..000000000 --- a/demo/es-bench/import-tmp.ts +++ /dev/null @@ -1,3 +0,0 @@ -export {} - -console.log('test'); diff --git a/demo/es-bench/import.ts b/demo/es-bench/import.ts deleted file mode 100644 index b4d1a4380..000000000 --- a/demo/es-bench/import.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {bench} from './bench.js'; - -const a = await import('./import-tmp.js'); - -function test_1(): unknown { - return a; -} - -function test_2(): unknown { - return import('./import-tmp.js'); -} - -bench('test_1', test_1); -bench('test_2', test_2); -bench('test_1', test_1); - -globalThis.document?.body.append(' Done. Check the console.'); diff --git a/demo/es-bench/index.html b/demo/es-bench/index.html deleted file mode 100644 index b0c1e7792..000000000 --- a/demo/es-bench/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - ES Bench - - - - - Waiting... -
    - - diff --git a/demo/es-bench/logger.ts b/demo/es-bench/logger.ts deleted file mode 100644 index 150e7da35..000000000 --- a/demo/es-bench/logger.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {createLogger} from '@alwatr/logger'; -// import {delay} from '@alwatr/util'; - -import {bench} from './bench.js'; - -const logger = createLogger('logger-bench', false); - -const getUserList = (): Record> => { - const userList: Record> = {}; - for (let i = 10; i; i--) { - const userId = 'user_' + i; - userList[userId] = { - user: userId, - fname: 'ali', - lname: 'md', - email: 'i@ali.md', - token: '1234abcd', - }; - } - return userList; -}; - -function test_without_logger(obj: Record): number { - return Object.values(obj).length; -} - -function test_with_logger(obj: Record): number { - logger.logMethodArgs?.('test_with_logger', obj); - return Object.values(obj).length; -} - -bench('test_with_logger 1st', () => test_with_logger(getUserList())); -bench('test_without_logger 1st', () => test_without_logger(getUserList())); - -bench('test_with_logger 2nd', () => test_with_logger(getUserList())); -bench('test_without_logger 2nd', () => test_without_logger(getUserList())); - - -globalThis.document?.body.append(' Done. Check the console.'); diff --git a/demo/es-bench/many-bind.ts b/demo/es-bench/many-bind.ts deleted file mode 100644 index f5c070d94..000000000 --- a/demo/es-bench/many-bind.ts +++ /dev/null @@ -1,53 +0,0 @@ -import {bench} from './bench.js'; - -function test1(id: string): void { - console.log(id); -} -function test2(id: string): void { - console.log(id); -} -function test3(id: string): void { - console.log(id); -} - -const bind = (id: string) => ({ - id, - test1: test1.bind(null, id), - test2: test2.bind(null, id), - test3: test3.bind(null, id), -} as const); - -class MyClass { - constructor(public id: string) { - } - - test1(): void { - console.log(this.id); - } - test2(): void { - console.log(this.id); - } - test3(): void { - console.log(this.id); - } -} - -function test_bind(): string { - const a = bind('123'); - return a.id; -} - -function test_class(): string { - const a = new MyClass('123'); - return a.id; -} - -test_class(); -test_bind(); - -bench('test_bind', test_bind); -bench('test_class', test_class); -bench('test_bind', test_bind); -bench('test_class', test_class); - -globalThis.document?.body.append(' Done. Check the console.'); diff --git a/demo/es-bench/memory-arrow-func.ts b/demo/es-bench/memory-arrow-func.ts deleted file mode 100644 index 956810199..000000000 --- a/demo/es-bench/memory-arrow-func.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {random} from '@alwatr/math'; - -export function heavyObject() { - const obj: Record> = {}; - for (let i = 100_000; i; i--) { - const id = 'user_' + i; - obj[id] = { - id, - fname: random.string(4, 16), - lname: random.string(4, 32), - email: random.string(8, 32), - token: random.string(16), - }; - } - return obj; -} - -(() => { - // @ts-ignore - const temp = heavyObject(); - window.addEventListener('click', () => { - console.log(1); - }); -})(); - -/** - * Empty html: 3.1MB - * Simple event: 3.3MB - * Use heavyObject: 64MB - * Make heavyObject but don`t use it: 3.3MB (برگام!) - */ diff --git a/demo/es-bench/memory-many-func.js b/demo/es-bench/memory-many-func.js deleted file mode 100644 index 0eab094d8..000000000 --- a/demo/es-bench/memory-many-func.js +++ /dev/null @@ -1,39 +0,0 @@ -class test1 { -} - -for(let i=0; i<1000; i++) { - test1.prototype['method' + i] = function (a) { - a++; - return a; - } -} - -console.time('bench'); -const a1 = new test1(); -let n1=0; -for(let i=0; i<1000; i++) { - n1 += a1.method500(i); -} -console.timeEnd('bench'); - - -/// -- - - -class test2 { -} - -test2.prototype.methodN = function() { - return function (a) { - a++; - return a; - } -} - -console.time('bench'); -const a2 = new test2(); -let n2=0; -for(let i=0; i<1000; i++) { - n2 += a2.methodN()(i); -} -console.timeEnd('bench'); diff --git a/demo/es-bench/node-exist.ts b/demo/es-bench/node-exist.ts deleted file mode 100644 index 539d0adc7..000000000 --- a/demo/es-bench/node-exist.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {accessSync, existsSync, constants} from 'node:fs'; -import { bench } from './bench.js'; - -const filePath = './temp-file.txt'; -function exist(): boolean { - return existsSync(filePath); -} - -function access(): boolean { - try { - accessSync(filePath, constants.F_OK); - return true; - } - catch { - return false - } -} - -console.log('exist(%s) => %s', filePath, exist()) -console.log('access(%s) => %s', filePath, access()) - -bench('exist', exist); -bench('access', access); diff --git a/demo/es-bench/object-vs-map.ts b/demo/es-bench/object-vs-map.ts deleted file mode 100644 index b4ea24161..000000000 --- a/demo/es-bench/object-vs-map.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {bench} from './bench.js'; - -const size = 1_000; - -let userListRecord: Record> = {}; -let userListMap = new Map>(); - -function test_make_map() { - userListMap = new Map>(); - for (let i = size; i; i--) { - const userId = 'user_' + i; - - const user = new Map(); - user.set('user', userId); - user.set('fname', 'ali'); - user.set('lname', 'md'); - user.set('email', 'i@ali.md'); - user.set('token', '1234abcd'); - - userListMap.set(userId, user); - } -} - -function test_make_obj() { - userListRecord = {}; - for (let i = size; i; i--) { - const userId = 'user_' + i; - userListRecord[userId] = { - user: userId, - fname: 'ali', - lname: 'md', - email: 'i@ali.md', - token: '1234abcd', - }; - } -} - -function test_access_map() { - if (userListMap.get('user_' + size / 2)!.get('user') !== 'user_' + size / 2) throw new Error('not_match'); -} - -function test_access_obj() { - if (userListRecord['user_' + size / 2]['user'] !== 'user_' + size / 2) throw new Error('not_match'); -} - -bench('test_make_map_1st', test_make_map, 10_000); -bench('test_make_obj_1st', test_make_obj, 10_000); -bench('test_access_map_1st', test_access_map, 10_000); -bench('test_access_obj_1st', test_access_obj, 10_000); - -bench('test_make_map_2nd', test_make_map, 10_000); -bench('test_make_obj_2nd', test_make_obj, 10_000); -bench('test_access_map_2nd', test_access_map, 10_000); -bench('test_access_obj_2nd', test_access_obj, 10_000); - -globalThis.document?.body.append(' Done. Check the console.'); diff --git a/demo/es-bench/reg-cost.ts b/demo/es-bench/reg-cost.ts deleted file mode 100644 index 0233f5cc0..000000000 --- a/demo/es-bench/reg-cost.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {bench} from './bench.js'; - -function test_1(input = 'ali'): string { - return input.replace(/[l i]/g, ''); -} - -const regex = /[l i]/g; -function test_2(input = 'ali'): string { - return input.replace(regex, ''); -} - -function test_3(input = 'ali'): string { - return input.replace(new RegExp('[l i]', 'g'), ''); -} - -const regex2 = new RegExp('[l i]', 'g'); -function test_4(input = 'ali'): string { - return input.replace(regex2, ''); -} - -bench('test_1', test_1); -bench('test_2', test_2); -bench('test_3', test_3); -bench('test_4', test_4); - -globalThis.document?.body.append(' Done. Check the console.'); diff --git a/demo/fetch/index.html b/demo/fetch/index.html deleted file mode 100644 index 13e88e746..000000000 --- a/demo/fetch/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - @alwatr/fetch - - - - - -

    @alwatr/fetch

    - -
    - - - - - - - - -
    - -
    - - - - -
    - -

    Check the console for result

    - - diff --git a/demo/fetch/index.ts b/demo/fetch/index.ts deleted file mode 100644 index ccbfefa48..000000000 --- a/demo/fetch/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {type CacheStrategy, type CacheDuplicate, fetch} from '@alwatr/fetch'; - -const buttons = document.querySelectorAll('button') as NodeListOf; - -for (const button of buttons) { - const url = button.dataset.url; - - if (button && url) { - button.addEventListener('click', async () => { - try { - const response = await fetch({ - url, - mode: 'cors', - timeout: +document.querySelector('#timeout')!.value, - cacheStrategy: document.querySelector('#cacheStrategy')!.value as CacheStrategy, - removeDuplicate: document.querySelector('#removeDuplicate')!.value as CacheDuplicate, - async revalidateCallback(response) { - console.log('Demo revalidateCallback: %o', {url, response, text: await response.text()}); - }, - }); - console.log('Demo response: %o', {url, response, text: await response.text()}); - } - catch (error) { - console.warn('Demo catch error: %o', {url, error}); - } - }); - } -} diff --git a/demo/fetch/node.ts b/demo/fetch/node.ts deleted file mode 100644 index 3607a95ba..000000000 --- a/demo/fetch/node.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {fetch} from '@alwatr/fetch'; - -try { - const response = await fetch({ - url: 'http://httpbin.org/uuid', - timeout: 3_000, - removeDuplicate: 'auto', - }); - console.log('ok: %s', response.ok); - console.log('text: %s', await response.text()); -} -catch (err) { - console.error(err); -} diff --git a/demo/fetch/style.css b/demo/fetch/style.css deleted file mode 100644 index 879203c12..000000000 --- a/demo/fetch/style.css +++ /dev/null @@ -1,64 +0,0 @@ -html { - color-scheme: light dark; -} - -body { - font-family: system-ui; - width: 20em; - margin: 5em auto 0; -} - -h1, -h3 { - text-align: center; -} - -button { - --border-size: 3px; - --corner-size: 0.45em; /* size of the corner */ - --color: #373b44; - - margin: var(--corner-size); - padding: calc(0.5em + var(--corner-size)) calc(0.9em + var(--corner-size)); - color: var(--color); - --_p: var(--corner-size); - background: - conic-gradient(from 90deg at var(--border-size) var(--border-size),#0000 90deg,var(--color) 0) - var(--_p) var(--_p)/calc(100% - var(--border-size) - 2*var(--_p)) calc(100% - var(--border-size) - 2*var(--_p)); - transition: .3s linear, color 0s, background-color 0s; - outline: var(--border-size) solid #0000; - outline-offset: 0.6em; - font-size: 16px; - border: 0; - user-select: none; - -webkit-user-select: none; - touch-action: manipulation; -} - -button:hover, -button:focus-visible { - --_p: 0px; - outline-color: var(--color); - outline-offset: 0.05em; -} - -button:active { - background: var(--color); - color: #fff; -} - -.option-container, -.button-container { - display: flex; - flex-direction: column; - margin: 1em; -} - -@media (prefers-color-scheme: dark) { - button { - --color: #d8dbdf; - } - button:active { - background: #373b44; - } -} diff --git a/demo/finite-state-machine/index.html b/demo/finite-state-machine/index.html deleted file mode 100644 index 497593dbf..000000000 --- a/demo/finite-state-machine/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - FSM - - - - - - diff --git a/demo/finite-state-machine/light-machine.ts b/demo/finite-state-machine/light-machine.ts deleted file mode 100644 index 02ddf22e4..000000000 --- a/demo/finite-state-machine/light-machine.ts +++ /dev/null @@ -1,143 +0,0 @@ -import {finiteStateMachineConsumer, finiteStateMachineProvider, type FsmTypeHelper} from '@alwatr/fsm'; -import {delay} from '@alwatr/util'; - -// Provider -const lightMachineConstructor = finiteStateMachineProvider.defineConstructor('light_machine', { - initial: 'green', - context: { - a: 0 as number, - b: 0 as number, - }, - stateRecord: { - $all: { - entry: 'action_all_entry', - exit: 'action_all_exit', - on: { - POWER_LOST: { - target: 'flashingRed', - actions: 'action_all_POWER_LOST', - }, - }, - }, - green: { - entry: 'action_green_entry', - exit: 'action_green_exit', - on: { - TIMER: { - target: 'yellow', - actions: 'action_green_TIMER', - }, - }, - }, - yellow: { - entry: 'action_yellow_entry', - exit: 'action_yellow_exit', - on: { - TIMER: { - target: 'red', - actions: 'action_yellow_TIMER', - }, - }, - }, - red: { - entry: 'action_red_entry', - exit: 'action_red_exit', - on: { - TIMER: { - target: 'green', - actions: 'action_red_TIMER', - }, - }, - }, - flashingRed: { - entry: 'action_flashingRed_entry', - exit: 'action_flashingRed_exit', - on: { - POWER_BACK: { - target: 'green', - actions: 'action_flashingRed_POWER_BACK', - }, - }, - }, - }, -}); - -type LightMachine = FsmTypeHelper; - -// entries actions -finiteStateMachineProvider.defineActions('light_machine', { - 'action_all_entry': (m): void => console.log('$all entry called', m.getState()), - 'action_green_entry': (): void => console.log('green entry called'), - 'action_yellow_entry': (): void => console.log('yellow entry called'), - 'action_red_entry': (): void => console.log('red entry called'), - 'action_flashingRed_entry': (): void => console.log('flashingRed entry called'), -}); - -// exits actions -finiteStateMachineProvider.defineActions('light_machine', { - 'action_all_exit': (): void => console.log('$all exit called'), - 'action_green_exit': (): void => console.log('green exit called'), - 'action_yellow_exit': (): void => console.log('yellow exit called'), - 'action_red_exit': (): void => console.log('red exit called'), - 'action_flashingRed_exit': (): void => console.log('flashingRed exit called'), -}); - -// transition events actions -finiteStateMachineProvider.defineActions('light_machine', { - 'action_all_POWER_LOST': (): void => console.log('$all.POWER_LOST actions called'), - 'action_green_TIMER': (): void => console.log('green.TIMER actions called'), - 'action_yellow_TIMER': (): void => console.log('yellow.TIMER actions called'), - 'action_red_TIMER': (): void => console.log('red.TIMER actions called'), - 'action_flashingRed_POWER_BACK': (): void => console.log('flashingRed.POWER_BACK actions called'), -}); - -finiteStateMachineProvider.defineSignals('light_machine', [ - { - signalId: 'new_content_received', - transition: 'POWER_BACK', - contextName: 'a', - receivePrevious: 'NextCycle', - }, -]); - -// signals -// 'action_ali_signal': (a): void => console.log('ali signal ', a), - -// Consumer -const lightMachineConsumer = finiteStateMachineConsumer('light_machine-50', 'light_machine'); - -lightMachineConsumer.defineSignals([ - { - signalId: 'power_button_click_event', - transition: 'POWER_BACK', - receivePrevious: 'No', - }, - { - signalId: 'jafang', - callback: (signalDetail: Record): void => { - console.log(signalDetail); - }, - receivePrevious: 'NextCycle', - }, - { - callback: (): void => { - console.log('subscribe_callback', lightMachineConsumer.getState()); - }, - receivePrevious: 'NextCycle', - }, -]); - -console.log('start', lightMachineConsumer.getState()); - -await delay(1000); -lightMachineConsumer.transition('TIMER', {a: 1}); -await delay(1000); -lightMachineConsumer.transition('TIMER', {b: 2}); -await delay(1000); -lightMachineConsumer.transition('TIMER'); -await delay(1000); -lightMachineConsumer.transition('POWER_LOST', {a: 4}); -await delay(1000); -lightMachineConsumer.transition('TIMER', {a: 5, b: 5}); -await delay(1000); -lightMachineConsumer.transition('POWER_BACK', {a: 6}); diff --git a/demo/finite-state-machine2/light-machine.ts b/demo/finite-state-machine2/light-machine.ts deleted file mode 100644 index dc69f44aa..000000000 --- a/demo/finite-state-machine2/light-machine.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {FiniteStateMachine} from '@alwatr/fsm2'; -import {delay} from '@alwatr/util'; - -type State = 'green' | 'yellow' | 'red' | 'flashingRed'; -type Event = 'timer' | 'powerBack' | 'powerLost'; - -class LightMachine extends FiniteStateMachine { - constructor(name: string) { - super({name, initialState: 'green'}); - - this._stateRecord = { - _all: { - powerLost: 'flashingRed', - }, - green: { - timer: 'yellow', - }, - yellow: { - timer: 'red', - }, - red: { - timer: 'green', - }, - flashingRed: { - powerBack: 'green', - }, - }; - - this._actionRecord = { - _on_powerLost: this._onPowerLost, - }; - } - - protected _onPowerLost(): void { - console.warn('_onPowerLost'); - } -} - -// ---- - -const lightMachine = new LightMachine('demo.light-machine.1'); - -lightMachine.subscribe(function StateChanged() { - console.log('state changed: %s', this.state); -}); - -console.log('start', lightMachine.state); - -await delay(1000); -lightMachine.transition('timer'); -await delay(1000); -lightMachine.transition('timer'); -await delay(1000); -lightMachine.transition('timer'); -await delay(1000); -lightMachine.transition('powerLost'); -await delay(1000); -lightMachine.transition('timer'); -await delay(1000); -lightMachine.transition('powerBack'); diff --git a/demo/font/index.html b/demo/font/index.html deleted file mode 100644 index 8dd192e8a..000000000 --- a/demo/font/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - @alwatr/font - - - - - - - - - - -

    @alwatr/font

    -
    -

    فونت وزیر‌متن

    -

    - بِسْمِ اللهِ الرَّحْمنِ الرَّحِیمِ -
    - به نام خداوند بخشنده مهربان -

    - اللَّهُمَ کُنْ لِوَلِیکَ الحُجَةِ بنِ الحَسَن صَلَواتُکَ علَیهِ و عَلی آبائِهِ فِی هَذِهِ السَّاعَةِ وَ فِی - کُلِّ سَاعَةٍ وَلِیاً وَ حَافِظاً وَ قَائِداً وَ نَاصِراً وَ دَلِیلًا وَ عَیناً حَتَّی تُسْکِنَهُ أَرْضَکَ - طَوْعاً وَ تُمَتِّعَهُ فِیهَا طَوِیلًا. -
    - خدایا برای ولی‌ات حجّة بن الحسن كه درود‌هاى تو بر او و بر پدرانش باد، در این ساعت و در هر ساعت، سرپرست و نگهبان - و پیشوا و یاور و راهنما و دیده‌بان باش، تا او را با رغبت مردم در زمینت سکونت دهی و زمانی طولانی بهره‌مندش سازی. -
    - 0123456789 ۰۱۲۳۴۵۶۷۸۹ ٠١٢٣٤٥٦٧٨٩ -

    -
    - -
    -

    فونت وزیر‌متن نقطه‌گرد

    -

    -
    - -
    -

    فونت ساحل

    -

    -
    - - - - diff --git a/demo/font/simple.html b/demo/font/simple.html deleted file mode 100644 index 7e37cf282..000000000 --- a/demo/font/simple.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - @alwatr/font - - - - - - - - - - - -

    - بِسْمِ اللهِ الرَّحْمنِ الرَّحِیمِ -
    - به نام خداوند بخشنده مهربان -

    -
    -

    - اللَّهُمَ کُنْ لِوَلِیکَ الحُجَةِ بنِ الحَسَن صَلَواتُکَ علَیهِ و عَلی آبائِهِ فِی هَذِهِ السَّاعَةِ وَ فِی - کُلِّ سَاعَةٍ وَلِیاً وَ حَافِظاً وَ قَائِداً وَ نَاصِراً وَ دَلِیلًا وَ عَیناً حَتَّی تُسْکِنَهُ أَرْضَکَ - طَوْعاً وَ تُمَتِّعَهُ فِیهَا طَوِیلًا. -

    - -

    - خدایا برای ولی‌ات حجّة بن الحسن كه درود‌هاى تو بر او و بر پدرانش باد، در این ساعت و در هر ساعت، سرپرست و نگهبان - و پیشوا و یاور و راهنما و دیده‌بان باش، تا او را با رغبت مردم در زمینت سکونت دهی و زمانی طولانی بهره‌مندش سازی. -

    - -

    - 0 1 2 3 4 5 6 7 8 9 (english) -
    - ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ (فارسی) -
    - ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ (عربی) -

    -
    - - diff --git a/demo/i18n/i18n.ts b/demo/i18n/i18n.ts deleted file mode 100644 index 85b22f4a5..000000000 --- a/demo/i18n/i18n.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {l10n} from '@alwatr/i18n2'; -import {createLogger} from '@alwatr/logger'; -import {delay} from '@alwatr/util'; -const logger = createLogger('demo/l18n', true); - -l10n.subscribe(() => { - logger.logProperty?.('locale', l10n.locale); - logger.logProperty?.('hi', l10n.message('hi')); -}); - -logger.logProperty?.('hi', l10n.message('hi')); - -l10n.setResourceLoader((locale) => { - return { - ok: true, - meta: { - code: locale.language === 'fa' ? 'fa-IR' : 'en-US', - rev: 2, - }, - data: locale.language === 'fa' ? { - 'hi': 'سلام', - } : { - 'hi': 'hello', - }, - }; -}); - -l10n.setLocale('fa'); - -const now = Date.now(); -// @ts-expect-error constructor type -for (const unit of l10n.constructor._timeUnits) { - const sec = unit.seconds * 1000; - logger.logProperty?.('time ' + unit.label, l10n.relativeTime(now, now - sec)); - logger.logProperty?.('time ' + unit.label, l10n.relativeTime(now, now - 2 * sec)); - logger.logProperty?.('time ' + unit.label, l10n.relativeTime(now, now - 3 * sec)); - logger.logProperty?.('time ' + unit.label, l10n.relativeTime(now, now + sec)); - logger.logProperty?.('time ' + unit.label, l10n.relativeTime(now, now + 2 * sec)); - logger.logProperty?.('time ' + unit.label, l10n.relativeTime(now, now + 3 * sec)); -} - -await delay(500); - -l10n.setLocale('en'); diff --git a/demo/icon/index.html b/demo/icon/index.html deleted file mode 100644 index 36ece63b8..000000000 --- a/demo/icon/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - @alwatr/icon - - - - - -

    @alwatr/icon

    - -
    - - diff --git a/demo/icon/index.ts b/demo/icon/index.ts deleted file mode 100644 index d89d2f050..000000000 --- a/demo/icon/index.ts +++ /dev/null @@ -1,435 +0,0 @@ -import '@alwatr/icon'; -// import {preloadIcon} from '@alwatr/icon'; -import {random} from '@alwatr/math'; - -const iconList = [ - 'accessibility', - 'add-circle', - 'add', - 'airplane', - 'alarm', - 'albums', - 'alert-circle', - 'alert', - 'american-football', - 'analytics', - 'aperture', - 'apps', - 'archive', - 'arrow-back-circle', - 'arrow-back', - 'arrow-down-circle', - 'arrow-down', - 'arrow-forward-circle', - 'arrow-forward', - 'arrow-redo-circle', - 'arrow-redo', - 'arrow-undo-circle', - 'arrow-undo', - 'arrow-up-circle', - 'arrow-up', - 'at-circle', - 'at', - 'attach', - 'backspace', - 'bag-add', - 'bag-check', - 'bag-handle', - 'bag', - 'bag-remove', - 'balloon', - 'ban', - 'bandage', - 'bar-chart', - 'barbell', - 'barcode', - 'baseball', - 'basket', - 'basketball', - 'battery-charging', - 'battery-dead', - 'battery-full', - 'battery-half', - 'beaker', - 'bed', - 'beer', - 'bicycle', - 'bluetooth', - 'boat', - 'body', - 'bonfire', - 'book', - 'bookmark', - 'bookmarks', - 'bowling-ball', - 'briefcase', - 'browsers', - 'brush', - 'bug', - 'build', - 'bulb', - 'bus', - 'business', - 'cafe', - 'calculator', - 'calendar-clear', - 'calendar-number', - 'calendar', - 'call', - 'camera', - 'camera-reverse', - 'car', - 'car-sport', - 'card', - 'caret-back-circle', - 'caret-back', - 'caret-down-circle', - 'caret-down', - 'caret-forward-circle', - 'caret-forward', - 'caret-up-circle', - 'caret-up', - 'cart', - 'cash', - 'cellular', - 'chatbox-ellipses', - 'chatbox', - 'chatbubble-ellipses', - 'chatbubble', - 'chatbubbles', - 'checkbox', - 'checkmark-circle', - 'checkmark-done-circle', - 'checkmark-done', - 'checkmark', - 'chevron-back-circle', - 'chevron-back', - 'chevron-down-circle', - 'chevron-down', - 'chevron-forward-circle', - 'chevron-forward', - 'chevron-up-circle', - 'chevron-up', - 'clipboard', - 'close-circle', - 'close', - 'cloud-circle', - 'cloud-done', - 'cloud-download', - 'cloud-offline', - 'cloud', - 'cloud-upload', - 'cloudy-night', - 'cloudy', - 'code-download', - 'code', - 'code-slash', - 'code-working', - 'cog', - 'color-fill', - 'color-filter', - 'color-palette', - 'color-wand', - 'compass', - 'construct', - 'contract', - 'contrast', - 'copy', - 'create', - 'crop', - 'cube', - 'cut', - 'desktop', - 'diamond', - 'dice', - 'disc', - 'document-attach', - 'document-lock', - 'document', - 'document-text', - 'documents', - 'download', - 'duplicate', - 'ear', - 'earth', - 'easel', - 'egg', - 'ellipse', - 'ellipsis-horizontal-circle', - 'ellipsis-horizontal', - 'ellipsis-vertical-circle', - 'ellipsis-vertical', - 'enter', - 'exit', - 'expand', - 'extension-puzzle', - 'eye-off', - 'eye', - 'eyedrop', - 'fast-food', - 'female', - 'file-tray-full', - 'file-tray', - 'file-tray-stacked', - 'film', - 'filter-circle', - 'filter', - 'finger-print', - 'fish', - 'fitness', - 'flag', - 'flame', - 'flash-off', - 'flash', - 'flashlight', - 'flask', - 'flower', - 'folder-open', - 'folder', - 'football', - 'footsteps', - 'funnel', - 'game-controller', - 'gift', - 'git-branch', - 'git-commit', - 'git-compare', - 'git-merge', - 'git-network', - 'git-pull-request', - 'glasses', - 'globe', - 'golf', - 'grid', - 'hammer', - 'hand-left', - 'hand-right', - 'happy', - 'hardware-chip', - 'headset', - 'heart-circle', - 'heart-dislike-circle', - 'heart-dislike', - 'heart-half', - 'heart', - 'help-buoy', - 'help-circle', - 'help', - 'home', - 'hourglass', - 'ice-cream', - 'id-card', - 'image', - 'images', - 'infinite', - 'information-circle', - 'information', - 'invert-mode', - 'journal', - 'key', - 'keypad', - 'language', - 'laptop', - 'layers', - 'leaf', - 'library', - 'link', - 'list-circle', - 'list', - 'locate', - 'location', - 'lock-closed', - 'lock-open', - 'log-in', - 'log-out', - 'magnet', - 'mail-open', - 'mail', - 'mail-unread', - 'male-female', - 'male', - 'man', - 'map', - 'medal', - 'medical', - 'medkit', - 'megaphone', - 'menu', - 'mic-circle', - 'mic-off-circle', - 'mic-off', - 'mic', - 'moon', - 'move', - 'musical-note', - 'musical-notes', - 'navigate-circle', - 'navigate', - 'newspaper', - 'notifications-circle', - 'notifications-off-circle', - 'notifications-off', - 'notifications', - 'nuclear', - 'nutrition', - 'open', - 'options', - 'paper-plane', - 'partly-sunny', - 'pause-circle', - 'pause', - 'paw', - 'pencil', - 'people-circle', - 'people', - 'person-add', - 'person-circle', - 'person', - 'person-remove', - 'phone-landscape', - 'phone-portrait', - 'pie-chart', - 'pin', - 'pint', - 'pizza', - 'planet', - 'play-back-circle', - 'play-back', - 'play-circle', - 'play-forward-circle', - 'play-forward', - 'play', - 'play-skip-back-circle', - 'play-skip-back', - 'play-skip-forward-circle', - 'play-skip-forward', - 'podium', - 'power', - 'pricetag', - 'pricetags', - 'print', - 'prism', - 'pulse', - 'push', - 'qr-code', - 'radio-button-off', - 'radio-button-on', - 'radio', - 'rainy', - 'reader', - 'receipt', - 'recording', - 'refresh-circle', - 'refresh', - 'reload-circle', - 'reload', - 'remove-circle', - 'remove', - 'reorder-four', - 'reorder-three', - 'reorder-two', - 'repeat', - 'resize', - 'restaurant', - 'return-down-back', - 'return-down-forward', - 'return-up-back', - 'return-up-forward', - 'ribbon', - 'rocket', - 'rose', - 'sad', - 'save', - 'scale', - 'scan-circle', - 'scan', - 'school', - 'search-circle', - 'search', - 'send', - 'server', - 'settings', - 'shapes', - 'share', - 'share-social', - 'shield-checkmark', - 'shield-half', - 'shield', - 'shirt', - 'shuffle', - 'skull', - 'snow', - 'sparkles', - 'speedometer', - 'square', - 'star-half', - 'star', - 'stats-chart', - 'stop-circle', - 'stop', - 'stopwatch', - 'storefront', - 'subway', - 'sunny', - 'swap-horizontal', - 'swap-vertical', - 'sync-circle', - 'sync', - 'tablet-landscape', - 'tablet-portrait', - 'telescope', - 'tennisball', - 'terminal', - 'text', - 'thermometer', - 'thumbs-down', - 'thumbs-up', - 'thunderstorm', - 'ticket', - 'time', - 'timer', - 'today', - 'toggle', - 'trail-sign', - 'train', - 'transgender', - 'trash-bin', - 'trash', - 'trending-down', - 'trending-up', - 'triangle', - 'trophy', - 'tv', - 'umbrella', - 'unlink', - 'videocam-off', - 'videocam', - 'volume-high', - 'volume-low', - 'volume-medium', - 'volume-mute', - 'volume-off', - 'walk', - 'wallet', - 'warning', - 'watch', - 'water', - 'wifi', - 'wine', - 'woman', -]; - -const container = document.querySelector('.icons')!; - -function addIcon(): void { - const iconElement = document.createElement('alwatr-icon'); - iconElement.name = iconList[random.integer(0, iconList.length - 1)] + '-outline'; - container.appendChild(iconElement); -} - -document.addEventListener('click', addIcon); -addIcon(); - -// for (const iconName of iconList) { -// preloadIcon(iconName + '-outline'); -// } diff --git a/demo/index.html b/demo/index.html deleted file mode 100644 index 0ef107705..000000000 --- a/demo/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - Alwatr - - - - -
      -
    1. Logger
    2. -
    3. Fetch
    4. -
    5. Signal
    6. -
    7. Signal Simple
    8. -
    9. Context Signal
    10. -
    11. Signal multithread
    12. -
    13. Router
    14. -
    15. Router2
    16. -
    17. Font
    18. -
    19. Math
    20. -
    21. Icon
    22. -
    23. ES Bench
    24. -
    25. FSM
    26. -
    27. Validator
    28. -
    29. Server Context
    30. -
    - - diff --git a/demo/logger/index.html b/demo/logger/index.html deleted file mode 100644 index 46b7c8cab..000000000 --- a/demo/logger/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - @alwatr/logger - - - - - -

    Check the console

    - - diff --git a/demo/logger/index.ts b/demo/logger/index.ts deleted file mode 100644 index 21338042f..000000000 --- a/demo/logger/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -const logger1 = createLogger('logger/demo1'); -const logger2 = createLogger('logger/demo2'); - -console.debug('--- logger.logProperty ---'); -logger1.logProperty?.('name', 'ali'); -logger2.logProperty?.('options', {a: 1, b: 2}); - -console.debug('--- logger.logMethod ---'); -logger1.logMethod?.('myMethod1'); -logger2.logMethod?.('myMethod2'); - -console.debug('--- logger.logMethodArgs ---'); -logger1.logMethodArgs?.('myMethod1', {a: 1, b: 2}); -logger2.logMethodArgs?.('myMethod2', {a: 1, b: 2}); - -console.debug('--- logger.logMethodFull ---'); -logger1.logMethodFull?.('add', {a: 1, b: 2}, 3); - -console.debug('--- logger.incident ---'); -logger1.incident?.('myMethod', 'abort_signal', 'Aborted signal received', {url: '/test.json'}); - -console.debug('--- logger.accident ---'); -logger2.accident('myMethod', 'file_not_found', 'Url requested return 404 not found', { - url: '/test.json', -}); - -console.debug('--- logger.logOther ---'); -logger1.logOther?.('foo:', 'bar', {a: 1}); - -console.debug('--- logger.error ---'); -try { - throw new Error('my_error_message'); -} -catch (err) { - logger1.error('myMethod', 'error_code', err, {a: 1, b: 2}); -} diff --git a/demo/math/index.html b/demo/math/index.html deleted file mode 100644 index cb631516e..000000000 --- a/demo/math/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - @alwatr/math - - - - - -

    Check the console

    - - diff --git a/demo/math/translate-unicode-digits.ts b/demo/math/translate-unicode-digits.ts deleted file mode 100644 index 59f3547b1..000000000 --- a/demo/math/translate-unicode-digits.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {UnicodeDigits} from '@alwatr/math'; - -const unicodeDigits = new UnicodeDigits('fa', 'all'); - -const list = [ - '0123456789', - '٠١٢٣٤٥٦٧٨٩', - '߀߁߂߃߄߅߆߇߈߉', - '०१२३४५६७८९', - '০১২৩৪৫৬৭৮৯', - '੦੧੨੩੪੫੬੭੮੯', - '૦૧૨૩૪૫૬૭૮૯', - '୦୧୨୩୪୫୬୭୮୯', - '௦௧௨௩௪௫௬௭௮௯', -].join('\n'); - -console.log(list); -console.log('-----'); - -console.log(unicodeDigits.translate(list)); - -const start = Date.now(); -const count = 20_000; - -for (let i = count; i > 0; i--) { - unicodeDigits.translate(list); -} - -console.log((count / (Date.now() - start)) * 1000); diff --git a/demo/package.json b/demo/package.json deleted file mode 100644 index 0335882ac..000000000 --- a/demo/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@alwatr/demo", - "version": "1.0.0", - "main": "index.js", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "type": "module", - "private": "true", - "dependencies": { - "@alwatr/crypto": "^1.0.0", - "@alwatr/fetch": "^1.0.0", - "@alwatr/icon": "^1.0.0", - "@alwatr/logger": "^1.0.0", - "@alwatr/math": "^1.0.0", - "@alwatr/router": "^1.0.0", - "@alwatr/signal": "^1.0.0", - "@alwatr/storage-client": "^1.0.0", - "@alwatr/storage-engine": "^1.0.0", - "@alwatr/type": "^1.0.0", - "@alwatr/util": "^1.0.0", - "@alwatr/validator": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/demo/router/index.html b/demo/router/index.html deleted file mode 100644 index 911013444..000000000 --- a/demo/router/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - @alwatr/router - - - - - -

    Check the console

    -
      - - - - - - - - -
    - -
    - - - - diff --git a/demo/router/index.ts b/demo/router/index.ts deleted file mode 100644 index bc1a3c72f..000000000 --- a/demo/router/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {routerOutlet, routeContextConsumer, redirect, type RouteContext, type RoutesConfig} from '@alwatr/router'; - -const routes: RoutesConfig = { - routeId: (routeContext: RouteContext): string | undefined => routeContext.sectionList[0]?.toString(), - templates: { - 'home': () => '

    Home Page

    ', - '_404': () => '

    404 Not Found!

    ', - 'about': () => '

    About Page

    ', - 'product-list': () => '

    Product List

    ', - 'product': (routeContext) => `

    Product ${routeContext.sectionList[1]}

    `, - 'contact': () => '

    Product Page

    ', - }, -}; - -/** - * Your render process, can be lit-element requestUpdate or any other framework request render method. - */ -function render(): void { - console.info('render'); - document.querySelector('textarea')!.value = JSON.stringify(routeContextConsumer.getValue(), null, 2); - document.querySelector('.render')!.innerHTML = routerOutlet(routes) as string; -} - -/** - * Request update in route change. - */ -routeContextConsumer.subscribe(render); - -redirect('/'); diff --git a/demo/router2/index.html b/demo/router2/index.html deleted file mode 100644 index 79cd83f4c..000000000 --- a/demo/router2/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - @alwatr/router - - - - - -

    Check the console

    -
      - - - - - - - - -
    - -
    - - - - diff --git a/demo/router2/index.ts b/demo/router2/index.ts deleted file mode 100644 index 888a01042..000000000 --- a/demo/router2/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {router} from '@alwatr/router2'; -import {renderState} from '@alwatr/util'; - -type PageName = 'home' | 'about' | 'products' | 'product' | 'contact'; - -/** - * Your render process, can be lit-element requestUpdate or any other framework request render method. - */ -function render(): void { - console.info('render'); - document.querySelector('textarea')!.value = JSON.stringify(router.route, null, 2); - document.querySelector('.render')!.innerHTML = renderState( - router.route.sectionList[0] as PageName ?? 'home', - { - home: 'about', - about: () => '

    About Page

    ', - products: () => '

    Product List

    ', - product: () => `

    Product ${router.route.sectionList[1]}

    `, - contact: () => '

    Product Page

    ', - _default: () => '

    404 Not Found!

    ', - }, - ) ?? 'error!'; -} - -/** - * Request update in route change. - */ -router.subscribe(render); - -router.redirect('/'); diff --git a/demo/server-context/api-request.ts b/demo/server-context/api-request.ts deleted file mode 100644 index 4727e05c9..000000000 --- a/demo/server-context/api-request.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {AlwatrApiRequest} from '@alwatr/server-context'; - -const apiRequest = new AlwatrApiRequest({ - name: 'demo.server-request', -}); - -apiRequest.request({ - url: 'https://order.soffit.co/api/v1/publistore/', -}); - -apiRequest.subscribe(() => { - console.log('serverRequest: %o', {state: apiRequest.state, response: apiRequest.response}); -}); diff --git a/demo/server-context/index.html b/demo/server-context/index.html deleted file mode 100644 index e5e18bd27..000000000 --- a/demo/server-context/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Server Context - - - - - - diff --git a/demo/server-context/server-context.ts b/demo/server-context/server-context.ts deleted file mode 100644 index 6687197ff..000000000 --- a/demo/server-context/server-context.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {AlwatrServerContext} from '@alwatr/server-context'; - -const serverContext = new AlwatrServerContext({ - name: 'demo.server_context', - url: 'https://order.soffit.co/api/v1/publistore/', -}); - -serverContext.request(); -serverContext.subscribe(async function StateChaned() { - console.log('serverContext => result', {state: this.state, context: this.context}); -}); diff --git a/demo/server-context/server-request.ts b/demo/server-context/server-request.ts deleted file mode 100644 index 3d9ca300c..000000000 --- a/demo/server-context/server-request.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {AlwatrServerRequest} from '@alwatr/server-context'; - -const serverRequest = new AlwatrServerRequest({ - name: 'demo.server-request', -}); - -serverRequest.request({ - url: 'http://httpbin.org/uuid', -}); - -serverRequest.subscribe(async () => { - console.log('serverRequest: %o', {state: serverRequest.state, response: await serverRequest.response?.text()}); -}); diff --git a/demo/signal/index.html b/demo/signal/index.html deleted file mode 100644 index 4dd4687a3..000000000 --- a/demo/signal/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - @alwatr/signal - - - - - -

    Check the console

    - - - - diff --git a/demo/signal/index.ts b/demo/signal/index.ts deleted file mode 100644 index 0801a3518..000000000 --- a/demo/signal/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {commandHandler, commandTrigger} from '@alwatr/signal'; - -commandHandler.define<{a: number; b: number}, number>( - 'command-add', - (argumentObject) => argumentObject.a + argumentObject.b, -); - -// ---- - -const commandAddTrigger = commandTrigger.bind<{a: number; b: number}, number>('command-add'); - -document.getElementById('requestButton')?.addEventListener('click', async () => { - console.info('1. request command'); - const value = await commandAddTrigger.request({a: 10, b: 20}); - console.info('2. returned: ', value); -}); - -document.getElementById('requestButton2')?.addEventListener('click', async () => { - console.info('1. request command (10+20)'); - const value = await commandAddTrigger.request({a: 10, b: 20}); - console.info('2. returned (10+20): ', value); - - console.info('3. request command (10+30, 10+40)'); - const value1p = commandAddTrigger.request({a: 10, b: 30}); - const value2p = commandAddTrigger.request({a: 10, b: 40}); - console.info('4. returned (%s)', (await Promise.all([value1p, value2p])).join(', ')); -}); diff --git a/demo/signal2/context/index.html b/demo/signal2/context/index.html deleted file mode 100644 index 1b98cbfd7..000000000 --- a/demo/signal2/context/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - @alwatr/signal2/context - - - - - -

    Check the console

    - - - - - - - - diff --git a/demo/signal2/context/index.ts b/demo/signal2/context/index.ts deleted file mode 100644 index eeb1ad5fb..000000000 --- a/demo/signal2/context/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {AlwatrContextSignal} from '@alwatr/signal2'; - -const context = new AlwatrContextSignal<{name: string; age: number}>({name: 'user-info-context'}); - -function subscribeHandler(): void { - console.log('subscribe: a new context signal received', context.getValue()); -} -context.subscribe(subscribeHandler); - -document.getElementById('myButton1')?.addEventListener('click', () => { - context.setValue({name: 'Ali', age: 20}); -}); - -document.getElementById('myButton2')?.addEventListener('click', () => { - context.subscribe(subscribeHandler); -}); - -document.getElementById('myButton3')?.addEventListener('click', () => { - context.unsubscribe(subscribeHandler); -}); - -document.getElementById('myButton4')?.addEventListener('click', () => { - context.expire(); -}); - -document.getElementById('myButton5')?.addEventListener('click', () => { - console.log('value:', context.getValue()); -}); - -document.getElementById('myButton6')?.addEventListener('click', async () => { - await context.untilChange(); - console.log('until change reolved'); -}); diff --git a/demo/signal2/multithread-context/index.html b/demo/signal2/multithread-context/index.html deleted file mode 100644 index bbebc36f2..000000000 --- a/demo/signal2/multithread-context/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - @alwatr/signal/multithread-context - - - - - -

    Check the console

    - - - diff --git a/demo/signal2/multithread-context/index.ts b/demo/signal2/multithread-context/index.ts deleted file mode 100644 index e5ea4f139..000000000 --- a/demo/signal2/multithread-context/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {AlwatrMultithreadContextSignal} from '@alwatr/signal2'; - -import './main.js'; - -const worker = new Worker('./worker.js', {type: 'module'}); -AlwatrMultithreadContextSignal.setupChannel(worker); diff --git a/demo/signal2/multithread-context/main.ts b/demo/signal2/multithread-context/main.ts deleted file mode 100644 index 6fac99464..000000000 --- a/demo/signal2/multithread-context/main.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -import {messageContext} from './share-context.js'; - -const logger = createLogger('demo/signal2', true); - -let i = 0; - -document.getElementById('changeContext')?.addEventListener('click', () => { - logger.logMethod?.('main/setValue'); - messageContext.setValue({type: 'demo.signal', payload: {i: ++i}}); -}); - -messageContext.subscribe(() => { - logger.logMethodArgs?.('main/subscribe', messageContext.getValue()); -}); diff --git a/demo/signal2/multithread-context/share-context.ts b/demo/signal2/multithread-context/share-context.ts deleted file mode 100644 index f59a1f8ac..000000000 --- a/demo/signal2/multithread-context/share-context.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {AlwatrMultithreadContextSignal} from '@alwatr/signal2'; - -import type {Stringifyable} from '@alwatr/type'; - -interface Message { - type: string; - payload: Stringifyable -} -export const messageContext = new AlwatrMultithreadContextSignal({name: 'demo.message'}); diff --git a/demo/signal2/multithread-context/worker.ts b/demo/signal2/multithread-context/worker.ts deleted file mode 100644 index 82f4ce5ec..000000000 --- a/demo/signal2/multithread-context/worker.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {createLogger} from '@alwatr/logger'; -import {AlwatrMultithreadContextSignal} from '@alwatr/signal2'; - -AlwatrMultithreadContextSignal.setupChannel(); - -import {messageContext} from './share-context.js'; - -const logger = createLogger('demo/signal2', true); - -let i = 0; - -messageContext.subscribe((message) => { - logger.logMethodArgs?.('worker/subscribe', message); -}); - -setInterval(() => { - logger.logMethod?.('worker/setValue'); - messageContext.setValue({type: 'demo.signal', payload: {i: ++i}}); -}, 5000); - -globalThis.addEventListener('message', (event) => { - logger.logMethodArgs?.('onMessage', event.data); - globalThis.postMessage('aleyk ' + event.data); -}); diff --git a/demo/signal2/simple/index.html b/demo/signal2/simple/index.html deleted file mode 100644 index fe9e1d7af..000000000 --- a/demo/signal2/simple/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - @alwatr/signal2/event - - - - - -

    Check the console

    - - - - - - diff --git a/demo/signal2/simple/index.ts b/demo/signal2/simple/index.ts deleted file mode 100644 index e72092fa1..000000000 --- a/demo/signal2/simple/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {AlwatrSignal, AlwatrSimpleSignal} from '@alwatr/signal2'; - -// button 1 -const clickEvent = new AlwatrSimpleSignal({name: 'button-1-click-event'}); -document.getElementById('myButton1')?.addEventListener('click', () => clickEvent.notify()); -function clickEventSubscribeHandler(): void { - console.log('subscribe: a new signal received'); -} -clickEvent.subscribe(clickEventSubscribeHandler); - - -// button 2 -const clickEvent2 = new AlwatrSignal({name: 'button-2-click-event'}); -document.getElementById('myButton2')?.addEventListener('click', () => clickEvent2.notify({clickedBy: 'BTN_2'})); -function clickEvent2SubscribeHandler(detail: unknown): void { - console.log('subscribe: a new signal received ', detail); -} -clickEvent2.subscribe(clickEvent2SubscribeHandler); - - -// button 3 -document.getElementById('myButton3')?.addEventListener('click', () => { - clickEvent.subscribe(clickEventSubscribeHandler); - clickEvent2.subscribe(clickEvent2SubscribeHandler); -}); - - -// button 4 -document.getElementById('myButton4')?.addEventListener('click', () => { - clickEvent.unsubscribe(clickEventSubscribeHandler); - clickEvent2.unsubscribe(clickEvent2SubscribeHandler); -}); diff --git a/demo/storage-client/benchmark.ts b/demo/storage-client/benchmark.ts deleted file mode 100644 index 8e0583a84..000000000 --- a/demo/storage-client/benchmark.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {random} from '@alwatr/math'; -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import type {AlwatrDocumentObject} from '@alwatr/type'; - -type User = AlwatrDocumentObject & { - fname: string; - lname: string; - email: string; - token: string; -}; - -const token = process.env.TOKEN ?? 'YOUR_SECRET_TOKEN'; - -const db = new AlwatrStorageClient({ - name: 'junk-data', - host: '127.0.0.1', - port: 9000, - token, -}); - -const max = 100_000; -let i = 0; -let last = 0; - -setInterval(() => { - const speed = (i - last) / 2; - console.log('Index: %s, Speed: %s r/s, Memory: %s MB', last, speed, Math.round(process.memoryUsage.rss() / 1000_000)); - last = i; -}, 2_000); - -console.time('set all items'); - -async function request(): Promise { - const parallelRequest: Promise[] = []; - - for (let j = 0; j < 100; j++) { - i++; - const newUser: User = { - id: 'user_' + i, - fname: random.string(4, 16), - lname: random.string(4, 32), - email: random.string(8, 32), - token: random.string(16), - }; - - parallelRequest.push(db.set(newUser)); - } - - await Promise.all(parallelRequest); - - if (i < max) { - setImmediate(request); - } - else { - console.timeEnd('set all items'); - } -} - -async function getBench(): Promise { - console.time('get item'); - try { - const item = await db.get('user_5000'); - console.dir(item); - } - catch (err) { - if ((err as Error)?.message === 'document_not_found') { - console.log('user_5000 id not found!'); - } - else { - throw err; - } - } - console.timeEnd('get item'); - - console.time('get keys'); - const keys = await db.keys(); - console.timeEnd('get keys'); - console.log('keys.length: %s', keys.length); - - console.time('get all'); - await db.getStorage(); - console.timeEnd('get all'); -} - -await getBench(); - -request(); diff --git a/demo/storage-client/index.ts b/demo/storage-client/index.ts deleted file mode 100644 index 0cec5b244..000000000 --- a/demo/storage-client/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import type {AlwatrDocumentObject} from '@alwatr/type'; - -type User = AlwatrDocumentObject & { - fname: string; - lname: string; - email: string; - token?: string; -}; - -const token = process.env.TOKEN ?? 'YOUR_SECRET_TOKEN'; - -const db = new AlwatrStorageClient({ - name: 'user-list', - host: '127.0.0.1', - port: 9000, - token, -}); - -let ali: User | null; - -try { - ali = await db.get('alimd'); - - if (ali == null ) { - console.log('ali not found'); - const ali = { - id: 'alimd', - fname: 'Ali', - lname: 'Mihandoost', - email: 'ali@mihandoost.com', - }; - await db.set(ali); - } - else { - console.log('ali found: %o', ali); - ali.token = Math.random().toString(36).substring(2, 15); - } -} -catch (err) { - console.error(err); -} - -await db.set({ - id: 'fmd', - fname: 'Fatemeh', - lname: 'Mihandoost', - email: 'Fatemeh@mihandoost.com', - token: Math.random().toString(36).substring(2, 15), -}); - -console.log('has \'alimd\': %o', await db.has('alimd')); -console.log('keys: %o', await db.keys()); -console.log('getAll: %o', await db.getStorage()); -await db.delete('alimd'); -await db.delete('fmd'); - -try { - await db.delete('abcd'); -} -catch (err) { - console.log('delete 404: %o', (err as Error).message); -} diff --git a/demo/storage-engine/benchmark.ts b/demo/storage-engine/benchmark.ts deleted file mode 100644 index 12a9ebf04..000000000 --- a/demo/storage-engine/benchmark.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {random} from '@alwatr/math'; -import {AlwatrStorageEngine} from '@alwatr/storage-engine'; - -import type {AlwatrDocumentObject} from '@alwatr/type'; - -type User = AlwatrDocumentObject & { - fname: string; - lname: string; - email: string; - token: string; -}; - -const db = new AlwatrStorageEngine({ - name: 'junk-data', - path: 'db', - saveBeautiful: false, - devMode: false, -}); - -console.time('set all items'); - -const max = 100_000; -for (let i = 0; i < max; i++) { - db.set({ - id: 'user_' + i, - fname: random.string(4, 16), - lname: random.string(4, 32), - email: random.string(8, 32), - token: random.string(16), - }); -} - -console.timeEnd('set all items'); - -console.time('get item'); -const item = db.get('user_' + max / 2); -console.timeEnd('get item'); -console.dir(item); diff --git a/demo/storage-engine/index.ts b/demo/storage-engine/index.ts deleted file mode 100644 index 0864f6f0c..000000000 --- a/demo/storage-engine/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {AlwatrStorageEngine} from '@alwatr/storage-engine'; - -import type {AlwatrDocumentObject} from '@alwatr/type'; - -type User = AlwatrDocumentObject & { - fname: string; - lname: string; - email: string; - token?: string; -}; - -const db = new AlwatrStorageEngine({ - name: 'user-list', - path: 'db', - saveBeautiful: true, - devMode: true, -}); - -console.log('db loaded and ready to access.'); - -let ali = db.get('alimd'); - -if (ali == null) { - console.log('ali not found'); - ali = { - id: 'alimd', - fname: 'Ali', - lname: 'Mihandoost', - email: 'ali@mihandoost.com', - }; -} -else { - console.log('ali found: %o', ali); - /** - * { - * id: 'alimd', - * fname: 'Ali', - * lname: 'MM', - * email: 'i@ali.md', - * } - */ - - ali.token = Math.random().toString(36).substring(2, 15); -} - -db.set(ali); - -db.set({ - id: 'fmd', - fname: 'Fatemeh', - lname: 'Mihandoost', - email: 'Fatemeh@mihandoost.com', - token: Math.random().toString(36).substring(2, 15), -}); diff --git a/demo/tsconfig.json b/demo/tsconfig.json deleted file mode 100644 index 0e914122d..000000000 --- a/demo/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "extends": "../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": ".", - "outDir": "." - }, - - "include": ["**/*.ts"], - "exclude": ["*.d.ts", "node_modules"], - "references": [ - {"path": "../core/logger"}, - {"path": "../core/fetch"}, - {"path": "../core/signal"}, - {"path": "../core/signal2"}, - {"path": "../core/router"}, - {"path": "../core/router2"}, - {"path": "../core/type"}, - {"path": "../core/storage-client"}, - {"path": "../core/crypto"}, - {"path": "../core/math"}, - {"path": "../core/util"}, - {"path": "../core/fsm"}, - {"path": "../core/fsm2"}, - {"path": "../core/context"}, - {"path": "../ui/icon"}, - {"path": "../core/storage-engine"}, - {"path": "../core/validator"}, - {"path": "../core/i18n2"} - ] -} diff --git a/demo/validator/index.html b/demo/validator/index.html deleted file mode 100644 index f2078038f..000000000 --- a/demo/validator/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - @alwatr/signal - - - - - - -

    Check the console

    - - diff --git a/demo/validator/phone.ts b/demo/validator/phone.ts deleted file mode 100644 index 1ae8637ab..000000000 --- a/demo/validator/phone.ts +++ /dev/null @@ -1,46 +0,0 @@ -import {sanitizePhoneNumber} from '@alwatr/validator'; - -let phoneNumber: string | number | null | undefined; -console.log('sanitizedPhoneNumber(%s): %s', (phoneNumber = null), sanitizePhoneNumber(phoneNumber)); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = '91 is not a valid phone 55'), - sanitizePhoneNumber(phoneNumber), -); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = 1234), - sanitizePhoneNumber(phoneNumber), -); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = '+ 98 915 11 22 123'), - sanitizePhoneNumber(phoneNumber), -); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = '98 (915) 11 22 123'), - sanitizePhoneNumber(phoneNumber), -); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = '0 (915) 11-22-123'), - sanitizePhoneNumber(phoneNumber), -); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = '91511-22123'), - sanitizePhoneNumber(phoneNumber), -); - -console.log( - 'sanitizedPhoneNumber(%s): %s', - (phoneNumber = '۹۸ ۹15۱۱-۲۲-۱۲۳'), - sanitizePhoneNumber(phoneNumber), -); diff --git a/demo/validator/validator.ts b/demo/validator/validator.ts deleted file mode 100644 index f151fe63c..000000000 --- a/demo/validator/validator.ts +++ /dev/null @@ -1,132 +0,0 @@ -import {validator} from '@alwatr/validator'; - -console.log('basic test'); -console.log( - validator< - {num: number; str: string; bool: boolean; _null: null; ali: 'ali'; five: 5; true: true} - >( - {num: Number, str: String, bool: Boolean, _null: null, ali: 'ali', five: 5, true: true}, - {num: 123, str: 'test', bool: false, _null: null, ali: 'ali', five: 5, true: true}, - ), -); - -console.log('sanitize value test'); -console.log( - validator< - {num: number; str: string; bool: boolean; _null: null; ali: 'ali'; five: 5; true: true} - >( - {num: Number, str: String, bool: Boolean, _null: null, ali: 'ali', five: 5, true: true}, - {num: '123', str: 'test', bool: 'false', _null: null, ali: 'ali', five: 5, true: true}, - ), -); - -console.log('nested value test'); -console.log( - validator< - {a: {num: number; str: string; bool: boolean; _null: null; ali: 'ali'; five: 5; true: true}} - >( - {a: {num: Number, str: String, bool: Boolean, _null: null, ali: 'ali', five: 5, true: true}}, - {a: {num: '123', str: 'test', bool: 'false', _null: null, ali: 'ali', five: 5, true: true}}, - ), -); - -console.log('not valid test'); -try { - console.log( - validator< - {num: number} - >( - {num: Number}, - {num: 'test'}, - ), - ); - throw new Error('validator_not_work'); -} -catch (err) { - if ((err as Error).message !== 'validator_not_work') { - console.log('test ok, error message `%s`, error cause: %s', (err as Error).message, (err as Error).cause); - } - else { - throw err; - } -} - -try { - console.log( - validator< - {num: boolean} - >( - {num: Boolean}, - {num: 'true'}, - ), - ); - throw new Error('validator_not_work'); -} -catch (err) { - if ((err as Error).message !== 'validator_not_work') { - console.log('test ok, error message `%s`, error cause: %s', (err as Error).message, (err as Error).cause); - } - else { - throw err; - } -} - -try { - console.log( - validator< - {num: null} - >( - {num: null}, - {num: 'test'}, - ), - ); - throw new Error('validator_not_work'); -} -catch (err) { - if ((err as Error).message !== 'validator_not_work') { - console.log('test ok, error message `%s`, error cause: %s', (err as Error).message, (err as Error).cause); - } - else { - throw err; - } -} - -try { - console.log( - validator< - {num: number} - >( - {num: Number}, - {num: 'test'}, - ), - ); - throw new Error('validator_not_work'); -} -catch (err) { - if ((err as Error).message !== 'validator_not_work') { - console.log('test ok, error message `%s`, error cause: %s', (err as Error).message, (err as Error).cause); - } - else { - throw err; - } -} - -try { - console.log( - validator< - {num: string} - >( - {num: 'test'}, - {num: 'tes'}, - ), - ); - throw new Error('validator_not_work'); -} -catch (err) { - if ((err as Error).message !== 'validator_not_work') { - console.log('test ok, error message `%s`, error cause: %s', (err as Error).message, (err as Error).cause); - } - else { - throw err; - } -} diff --git a/index.html b/index.html deleted file mode 100644 index bd5cf0f4e..000000000 --- a/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/labs/rnnoise-model/README.md b/labs/rnnoise-model/README.md deleted file mode 100644 index 40328e164..000000000 --- a/labs/rnnoise-model/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ffmpeg rnnoise models - -## Models - -- `general.rnnn` - - General use in a noisy recording environment. - -- `general-record.rnnn` - - General use in a reasonable recording environment. Fans, AC, computers, etc. - -- `voice.rnnn` - - Voice in a noisy recording environment. - -- `voice-record.rnnn` - - Voice in a reasonable recording environment. Fans, AC, computers, etc. - -- `speech-record.rnnn` - - Speech in a reasonable recording environment. Fans, AC, computers, etc. - Note that "speech" means speech, not other human sounds; laughter, coughing, etc are not included. - -## How to use - -`ffmpeg -i input.mp3 -c:a aac -q:a 1 -af arnndn=m=./general-record.rnnn -strict experimental output.mp4` diff --git a/labs/rnnoise-model/general-record.rnnn b/labs/rnnoise-model/general-record.rnnn deleted file mode 100644 index bcbf6b567..000000000 --- a/labs/rnnoise-model/general-record.rnnn +++ /dev/null @@ -1,22 +0,0 @@ -rnnoise-nu model file version 1 -42 24 0 --7 -20 -22 13 -4 -54 11 -9 -3 0 6 23 15 -20 -5 12 25 3 -22 18 -4 -18 -16 -14 -35 -14 -17 4 36 -42 -30 -21 19 -10 28 9 -4 6 -13 1 -6 -32 1 31 -49 14 19 0 -1 -35 -32 29 -26 -29 -99 -40 -39 13 -25 22 29 -15 -19 8 -33 52 55 44 -2 35 13 9 -55 54 -16 50 -57 60 -31 -20 -66 16 12 50 50 -8 -17 5 26 -51 29 -2 10 42 24 10 26 50 43 67 7 34 64 -12 -6 1 26 -1 28 22 50 7 29 55 41 37 28 -16 -32 -4 -69 -7 40 52 57 -17 58 -1 7 31 13 -48 47 -4 -9 5 -66 -59 57 -9 2 6 -12 20 -12 106 64 65 108 7 -86 65 123 110 -67 -86 107 18 -89 -56 92 94 86 -13 119 -63 -99 3 -1 8 -14 16 -106 40 -35 25 104 -24 -93 -28 51 -119 -125 104 127 -110 -35 -66 -38 7 39 -11 -24 127 65 15 99 -20 42 -6 127 -49 -116 -128 20 -119 -118 -96 126 121 -54 73 115 64 -20 118 -23 118 121 83 85 63 -120 122 63 -58 17 64 104 -58 -120 -1 61 -52 -54 -100 123 -47 -29 -6 21 30 53 -37 -18 -30 -120 36 -4 -6 9 -49 -19 3 27 -128 24 106 -94 4 77 -27 -36 -23 -28 -121 38 92 74 -32 19 35 -112 -37 104 -46 -51 120 -125 -81 -106 5 47 -57 121 0 83 -52 -64 -8 85 23 96 -50 118 71 -111 -84 58 -5 -35 -72 107 -6 83 127 -128 97 -64 48 -97 -13 -52 30 -46 87 73 72 56 10 -92 -39 -4 -128 -101 40 -118 10 32 -38 -6 106 -119 2 -34 -84 -75 -118 -119 -19 -90 -72 -110 -48 -37 -19 -98 -112 55 -99 76 -80 61 105 -111 0 -125 -87 -119 -122 -100 -119 -110 87 63 -5 -117 -101 -59 24 -26 -67 56 -112 83 -1 126 72 -127 127 -107 60 -119 -118 -101 23 26 49 84 -18 -119 -98 -78 127 -128 -128 -37 -122 -17 -55 109 -16 -94 -6 -112 80 -91 -13 -51 112 -78 114 10 109 38 -23 -52 -72 89 -63 -61 34 3 122 -93 1 -62 59 -114 -107 -128 -39 -45 73 56 76 121 74 -76 122 -33 37 31 58 -93 56 -13 -4 59 101 -82 -13 -112 -53 -84 -34 -118 -23 -18 -60 68 32 -112 -4 -47 105 -61 59 -66 -34 -128 -62 24 -22 -45 -63 -88 -61 20 42 -38 55 35 -128 46 -4 -55 -83 -127 -49 -76 -27 -78 127 -51 11 -47 27 88 119 30 122 -115 10 -54 127 32 -128 78 -127 -32 -92 127 88 -104 -125 61 -113 -22 5 84 -26 -54 78 -97 -24 113 -13 52 -49 -119 -13 -36 17 -75 -88 -48 -10 39 35 127 127 120 127 -25 -3 39 127 -16 -128 -120 -78 -13 -120 10 -41 2 -104 -31 -103 -68 94 -45 106 66 127 124 127 -44 -28 36 97 26 92 -101 -99 -95 -122 -114 107 -122 11 -102 -113 -14 102 -35 -6 22 -23 -56 65 -127 57 -14 91 0 102 -96 112 50 112 -110 -37 -94 37 15 -101 -17 -34 127 107 20 5 119 89 14 -46 -54 -67 -25 -39 84 -1 85 11 -78 73 -24 -5 -50 -126 -22 70 -12 -85 -5 84 19 -49 -59 4 -73 24 3 25 15 64 26 91 -47 -46 121 28 36 -84 49 38 -5 -20 -6 119 -84 74 82 3 -107 -81 67 -123 -20 -71 -18 16 113 -89 8 -128 -61 25 25 -1 25 48 -44 86 111 126 -67 18 106 -21 -26 41 71 -96 101 -37 -24 102 -9 68 -10 -13 -22 89 8 48 71 61 37 0 -119 -30 101 20 29 72 -27 -64 -117 1 56 -36 7 -98 75 -6 111 127 67 -51 -92 9 70 66 -66 97 80 -124 -72 67 56 -75 9 44 -5 13 -17 71 23 -57 47 5 28 -126 -15 -70 -107 64 -4 -31 -95 93 -109 17 -1 -6 -22 65 -24 -39 27 -57 -29 3 -36 10 63 18 71 70 11 -12 -14 117 -12 -93 71 0 10 47 -94 12 1 -34 0 36 -4 17 73 11 -36 -22 71 88 -73 -22 -82 -51 57 90 119 -84 6 2 117 -120 -120 -110 127 -128 127 -126 19 -128 127 127 121 116 -30 127 -53 -10 42 121 67 -32 39 -127 121 -120 -120 -21 127 -128 121 -122 -89 -128 127 60 121 -65 127 127 -5 38 11 121 57 -70 -125 -128 6 49 -42 121 -109 -19 49 -65 -120 22 -102 23 16 -108 88 -49 90 -44 -69 74 -21 -98 -85 -6 -14 -1 -86 115 -20 -28 127 0 12 -15 96 -26 -58 -4 39 -51 -25 -89 8 -9 8 -27 92 47 2 87 -72 98 -30 -35 122 -80 -9 8 24 11 12 -12 13 0 -30 -22 7 -33 -78 67 99 53 15 89 65 -100 34 38 -8 99 31 39 -19 78 -36 68 -65 -1 -67 35 -64 -68 -117 -21 -8 99 121 50 -47 106 -121 30 -89 61 65 -12 -49 -108 -57 -66 12 82 33 39 -9 28 49 49 12 19 76 51 -90 80 -61 -122 50 47 12 4 81 36 41 8 21 -26 55 15 -51 -16 -79 -1 -118 -100 -122 -52 -26 127 -107 124 81 61 -128 -5 -127 -118 43 54 -77 61 -128 -67 98 9 122 101 21 -44 -24 24 0 -113 -120 49 -37 121 83 34 -73 -124 83 -114 -128 -81 -112 18 -102 -52 -71 31 -45 -102 67 -107 -116 -15 -60 30 -51 121 -39 -56 -24 -14 -15 -25 -121 -80 68 -18 -33 -53 -75 84 -28 25 115 -43 -79 -13 31 19 26 -23 -23 11 108 18 54 61 29 -56 -33 -12 -43 -16 -11 -33 -5 -12 -46 25 5 -39 -35 0 58 16 65 61 127 -40 63 107 -18 -23 99 -71 -31 77 127 81 127 82 58 108 83 -66 -20 101 -35 -36 80 21 -17 126 -89 -122 61 36 -7 29 114 -9 9 88 11 31 -71 108 -14 54 69 -21 -124 -31 -9 -82 111 -35 13 26 -74 -11 90 -105 63 90 63 11 -96 121 2 -93 -33 117 49 -11 -15 65 -25 9 -21 -11 -17 -46 -29 -67 -23 105 -71 16 118 29 73 36 47 -30 120 -76 45 -10 -86 81 64 18 -41 43 -80 -39 14 37 -124 -89 107 -87 48 56 -48 58 -3 121 -119 -40 52 26 13 -54 33 -111 34 -97 19 -13 -4 13 123 -18 59 41 40 25 4 56 34 -44 -82 -36 -99 -4 -72 114 44 115 -15 -76 127 -90 -53 -63 27 -11 -42 3 -57 26 107 -13 38 122 -112 104 -71 101 -34 30 111 127 -50 35 -8 -120 77 40 91 120 124 18 42 35 -5 95 -100 -43 46 59 22 2 13 65 -13 -31 -35 14 -4 -3 -2 -8 31 45 -23 32 18 -18 36 -67 36 -52 30 94 -3 -121 99 -120 -33 42 -100 28 -77 -128 52 36 25 53 6 45 75 -120 -119 -76 63 -82 65 60 -25 -30 30 -5 34 -31 41 -128 27 57 51 -127 -118 -47 -31 -29 -82 -128 -86 -126 52 -38 -31 -11 -77 57 0 -18 19 62 20 95 -50 35 34 20 7 13 -72 2 54 -35 -1 -36 17 119 11 110 90 -80 -106 127 78 -85 50 14 51 11 -113 -21 4 -71 -2 -18 -125 41 127 30 -55 54 111 -29 54 93 -97 80 10 -25 33 10 8 -45 18 61 -8 -38 -28 -90 -31 119 -79 4 -37 71 -26 87 12 80 -38 23 -21 -33 -25 -57 -22 33 -43 -62 11 32 -7 31 50 -19 -57 6 24 -12 -63 127 -127 69 -119 60 81 -45 -124 -100 75 -52 -118 -74 -127 -47 73 37 -33 71 -122 -49 -104 -112 -53 -52 -103 -98 30 41 10 -38 46 19 -87 -121 -81 -97 35 -72 101 47 46 -44 31 66 121 -34 -34 57 -13 15 37 25 -68 31 -44 -48 58 17 39 9 40 -6 34 30 41 41 93 -57 -38 55 86 99 -113 108 -105 127 117 58 84 -106 123 -119 -122 -107 -112 -26 23 51 -17 122 119 -111 72 -30 -29 -53 -42 -31 48 6 -29 -18 -122 -58 -98 -23 -2 102 -40 20 39 -9 24 127 -8 80 -28 125 -41 78 27 -29 -115 -80 63 -67 32 -45 65 109 -9 -74 119 -84 76 127 116 36 -61 21 9 -78 64 13 -112 16 95 -127 -117 47 124 117 -66 0 -36 6 -9 53 117 -56 118 -2 90 80 41 -91 106 66 -10 66 29 -18 -47 64 55 -10 -39 44 101 -96 -93 -52 -18 -8 -20 -46 48 -63 -95 33 14 -32 -37 51 8 48 -25 78 54 -38 -27 0 75 48 67 -76 93 -39 -50 -10 1 -11 64 33 28 0 127 52 -4 -76 11 100 49 104 117 119 127 -2 112 -98 107 22 89 124 124 111 -119 116 36 80 74 40 24 -1 -65 -31 -56 -127 -27 119 75 91 43 16 -13 127 111 52 119 40 5 59 76 106 -65 -56 -8 14 41 -122 -5 -14 -60 11 -35 -59 51 16 21 47 -68 7 -54 41 15 -108 31 -12 -123 -35 68 -128 -55 -73 50 12 -81 29 61 -41 -9 43 -78 1 -34 -55 -59 -53 92 -10 -107 -14 6 -36 12 -14 8 90 31 -87 52 -27 83 -123 -95 -55 60 31 -115 -114 16 -18 4 14 15 -67 14 -30 43 -6 -61 12 -32 68 20 -96 7 -3 -58 28 -35 -27 -71 -18 9 -71 26 10 -20 1 -30 -59 93 -128 22 -28 1 -36 -29 25 20 116 -19 -40 -100 7 -74 -1 -2 -109 11 79 -48 56 46 10 1 -77 -15 -48 56 -75 21 7 55 -59 6 24 -113 52 30 -37 78 -62 32 34 55 -64 -63 -68 75 -29 -8 0 -81 -7 19 -6 89 11 23 98 -82 -111 -58 -3 61 -20 -29 -10 -6 -75 0 -3 -63 38 21 -34 98 -24 -15 -5 -88 -31 101 17 -24 42 -111 -7 -3 55 103 116 -10 38 20 -58 -39 -23 -57 5 92 -61 95 -84 -13 32 73 79 -50 48 -33 -26 32 -24 90 -107 70 -79 -45 13 33 -10 70 125 6 27 20 -44 20 -16 -7 72 -54 -32 -91 -24 -56 -4 2 71 -38 0 -112 -30 -34 19 93 -6 -23 -11 -30 -2 18 11 32 12 -71 -21 -95 64 1 -49 50 -52 103 30 38 70 -53 -24 53 -51 34 -23 24 116 64 12 1 36 -59 29 -103 83 -11 -5 13 115 -32 -71 -71 -28 46 -32 12 -28 -61 19 -10 58 52 10 28 -12 -24 -64 -65 4 15 -7 9 101 -62 -116 18 -63 -2 -72 -110 65 -123 -17 -100 34 -9 48 -9 58 -53 -73 -15 26 -86 -102 -49 23 28 46 12 -118 92 -55 -128 -10 -9 -53 -54 82 91 37 50 19 -95 110 51 97 12 0 -61 -20 127 -34 -72 -62 80 -79 -36 91 4 -5 -97 58 100 -32 52 44 -88 -60 -52 -65 27 43 -128 -20 -98 39 -121 15 -73 20 12 -51 33 -56 -100 57 -28 -52 -22 61 -86 51 50 98 -11 -119 5 -75 76 111 -103 -124 33 61 65 127 86 96 -37 -65 -42 21 53 127 66 100 -54 8 29 25 -128 -3 103 -11 -23 79 103 31 59 75 -29 57 41 127 88 4 -125 127 4 -83 -80 -35 24 -67 -127 -17 -120 -25 -45 16 19 -113 -99 84 120 127 -73 50 -38 -55 68 7 91 108 121 -77 110 91 119 124 64 18 -10 -61 3 -128 -81 127 4 19 -90 12 127 63 -61 25 59 75 -104 -51 75 87 -128 -40 5 65 -9 -61 -85 28 -5 -11 0 -29 -76 -3 -2 18 -53 -1 -5 19 7 4 30 -17 51 5 -21 -87 67 -70 82 8 -51 43 -117 -47 85 -91 104 -1 62 -91 -21 -76 -111 12 -120 16 -33 30 37 -7 35 -9 17 65 -1 -128 38 3 26 35 16 -10 64 -13 -42 -106 31 55 4 22 100 -50 -36 54 67 -2 -108 -82 83 -14 67 10 10 -54 -35 -85 67 15 24 16 99 3 -70 65 -115 -15 50 53 123 -109 -13 119 9 1 -118 -116 88 54 27 -8 -18 68 -120 -116 -117 -14 -95 -118 -119 32 -25 10 100 -11 -82 19 -28 -53 -24 58 -39 -17 -37 -113 43 49 -89 -111 50 67 -37 -36 109 58 -79 14 61 44 14 -40 -23 47 13 -38 23 -66 -2 -61 59 28 63 1 -44 20 -10 107 -102 14 -41 8 10 -19 27 -73 -122 20 -12 44 -47 -52 104 -37 107 -3 -58 -62 -31 -13 -119 97 102 54 -46 88 -66 25 26 -106 21 39 47 89 21 -12 -18 -30 34 -20 -8 34 -52 20 -80 -75 9 -128 32 -1 0 -8 62 24 44 64 -36 53 -6 -30 53 -38 -123 13 -57 -25 -30 -47 85 -81 25 36 -120 -35 47 25 -80 127 102 -52 -64 -101 104 47 -33 -17 2 94 -65 6 -2 24 40 -97 5 16 34 82 110 18 -56 84 64 63 16 19 -46 -29 -68 103 -9 32 46 -13 85 19 -33 77 32 73 -12 44 -34 -15 -78 -62 79 1 43 -43 59 31 23 -36 20 -63 -12 32 61 28 -3 24 50 5 4 -106 105 -31 -115 19 -42 -10 -120 17 -57 -126 -12 19 -104 14 -42 35 -49 -85 -56 -107 -119 -122 -91 6 -2 42 -74 54 72 -5 -33 -34 -47 -20 -63 -75 105 -25 20 -13 96 31 -125 5 34 -49 -13 -37 -28 -5 -91 -51 75 -14 10 -76 19 -53 -82 -67 107 -55 45 15 62 68 -27 12 -24 -90 61 76 25 33 67 93 44 -94 -120 115 71 12 12 3 -11 -20 -76 30 108 -56 -35 28 -12 -123 35 -96 -64 1 -113 62 127 106 -47 102 90 -68 -31 -87 -49 74 -7 -47 -45 -90 -14 -47 -78 69 -56 10 72 -24 36 21 -52 -80 -46 -67 95 -27 -21 22 36 13 96 -31 -48 -18 7 50 67 -26 -21 55 100 52 69 -61 -44 -31 12 82 121 72 115 -11 127 8 -6 6 93 52 97 126 -64 78 -5 15 94 37 -18 -114 -4 45 -128 12 -75 -50 100 37 27 -52 7 -31 123 95 73 -76 -110 92 -26 127 99 42 -111 51 -40 -120 49 -108 26 -11 -101 13 -54 -49 92 47 -54 23 2 26 103 -65 24 --102 43 -24 -86 127 105 23 -26 -17 29 60 62 55 -42 24 9 -51 36 117 33 -27 58 51 40 -43 31 -36 -4 -28 7 -68 46 90 44 3 29 113 -14 25 -44 45 113 92 89 3 46 27 40 -8 19 -27 10 -110 8 25 -16 -13 127 64 -3 43 14 22 -8 -45 -81 -42 25 -36 28 -35 -2 -41 36 -72 -66 73 -99 -75 -65 -59 -120 98 21 127 29 -93 -122 75 -34 41 -13 2 58 -36 90 -57 56 -45 5 -20 -11 16 40 -60 -40 -44 -21 1 36 -31 2 56 -24 30 -20 -20 -46 21 12 -29 53 -113 -125 110 -21 -48 30 -64 -81 0 -59 -42 58 1 -33 -1 1 127 -86 97 38 -37 33 -98 41 -73 99 127 -112 117 -29 111 -115 -122 83 -87 54 101 29 -106 50 76 -51 21 106 31 56 -46 17 -41 -83 -7 -61 -91 60 100 35 -122 53 -8 -43 -31 -46 -14 52 74 30 72 99 -31 -79 9 -14 36 112 -98 23 89 -57 6 -48 85 54 38 -10 83 -33 -98 -54 -113 101 -56 8 96 -21 107 -127 24 28 -6 34 20 -110 67 105 -28 -94 -123 -36 2 -9 -103 -65 4 -59 2 35 7 -128 75 9 18 -7 55 102 33 54 77 -5 51 -10 -24 59 24 34 -84 -66 18 61 43 3 -94 -40 -36 57 -6 96 21 -38 97 -5 36 -23 -2 51 8 -29 32 -65 -113 -38 -71 0 -17 -66 -2 11 -127 -3 76 -128 112 127 -121 -21 -94 89 127 -73 -15 -119 127 -81 124 -84 -124 -68 -120 78 -19 -4 -93 -26 -91 16 58 -1 -120 76 -26 -123 3 -61 -64 107 -55 -7 -100 -52 80 -89 -67 80 -9 37 108 61 -18 -114 117 -22 76 111 -112 70 -26 -103 -107 111 -72 108 -9 109 81 -102 90 -114 -71 -10 -66 -21 117 -81 127 -11 -19 -88 12 -128 82 -106 0 -34 71 59 -128 -46 94 91 98 81 -128 19 18 28 -82 55 -25 -28 -67 -40 99 65 -41 38 97 -43 9 -9 -17 52 29 -10 106 -47 -45 44 -23 -79 21 45 -63 102 -12 -100 115 -13 108 27 70 -49 40 -84 25 -111 -75 84 -38 -19 93 -35 24 -72 82 -128 46 88 15 -58 -6 34 -66 -128 -46 -21 123 54 -45 -49 -48 -128 -107 -60 -112 -20 19 61 -17 8 67 -57 17 93 13 13 -27 94 45 16 46 34 -64 107 29 0 3 83 -52 76 -6 -77 -60 109 58 -56 38 -57 127 -45 46 63 123 -124 85 -115 -110 -104 -77 105 -71 -118 0 -17 -128 20 -82 -18 -6 -128 -35 -128 -96 -127 -76 80 -5 2 -70 -18 99 46 6 -105 6 19 90 118 -33 -117 -2 -17 36 -31 1 -41 16 -36 24 -42 -24 -8 9 36 81 31 -8 8 -73 23 36 28 7 -5 29 -106 13 -7 -21 104 -47 7 -66 -33 4 -8 -77 13 27 62 -14 -9 26 91 -79 124 18 -11 107 15 -85 14 106 -12 127 15 -43 -37 -75 50 66 94 -52 -50 -90 -53 5 -22 -96 -127 94 3 120 24 -40 -22 76 79 -11 122 -1 41 -9 37 27 7 -11 -21 46 72 -27 -63 -34 45 -7 -123 -22 86 6 75 -56 -85 116 32 0 117 78 -12 9 4 -81 -79 -51 50 -84 -88 22 8 -105 6 57 -114 127 105 8 -70 -4 -40 46 -101 11 -35 95 61 -128 -105 123 119 2 86 -71 -4 -8 49 42 -120 58 76 99 11 66 79 -7 -13 50 9 80 108 -3 23 92 61 118 44 13 25 -51 -62 30 46 20 43 24 -70 44 46 48 59 49 -29 25 -39 -86 -112 -64 47 6 -34 -13 -117 8 -123 123 76 127 117 56 120 60 114 105 4 22 -70 119 63 -126 -86 121 113 -1 18 45 -62 13 -25 -74 -16 3 35 -83 -35 17 -17 33 11 19 -41 -70 -9 -84 -106 32 12 49 39 -14 -67 -33 -74 43 116 88 -63 -30 -128 62 -6 127 21 -7 -45 29 -1 16 -48 -86 127 -125 -35 31 -109 34 -29 87 107 55 90 127 68 127 64 -103 49 -126 54 98 106 22 71 -111 -41 56 48 87 -1 17 38 5 -10 19 33 77 23 74 54 41 88 28 8 -15 42 -30 16 11 77 100 25 -56 -15 -2 -128 -5 125 29 -20 50 -48 109 42 43 78 43 -63 -27 -87 -126 -111 -62 70 -114 -111 87 -60 48 45 46 127 -19 45 127 127 127 -6 -9 118 -33 110 125 127 -38 127 -23 105 116 95 118 -53 -7 20 58 15 10 36 36 96 115 28 4 95 2 -14 6 15 -84 -13 -12 88 16 -87 -23 30 -44 -116 -8 127 -34 -58 -10 -6 64 -103 23 87 127 -16 -65 79 -102 -127 -127 0 -73 -110 35 -91 -27 -121 1 -126 24 114 69 42 69 19 5 -127 -45 41 35 93 -69 53 126 127 7 -104 80 -14 42 11 33 -37 48 23 -70 2 -54 23 119 4 67 -55 -24 25 86 -8 -32 -17 -15 2 100 -74 -10 65 10 3 11 -27 -51 49 -50 0 -85 -92 -127 89 -110 121 79 69 59 -122 -11 0 -102 127 90 -13 77 -128 45 72 -28 -75 66 98 -5 -110 -3 -31 127 127 -94 -107 34 -30 -70 -79 -110 -25 -23 55 13 -87 -1 7 -8 10 51 9 -104 91 35 23 88 17 -19 112 96 7 20 1 -120 -90 -19 -73 -11 104 122 10 71 -73 123 -18 47 101 115 -33 84 -71 -99 -120 -36 125 -73 1 81 -68 -17 -5 -71 115 25 3 -39 50 -9 -53 -6 24 80 59 -62 -125 71 56 86 127 48 87 127 -6 -79 -54 -32 -98 -35 47 -31 -26 28 -45 12 -2 -71 34 8 -11 -23 -45 10 -34 -17 11 59 -35 23 123 -55 -70 -87 78 -96 100 -121 61 28 -19 -49 89 -93 94 64 39 46 -72 86 9 -41 56 -98 -89 -38 -118 -75 -85 -116 -128 -116 -60 -27 -35 59 -99 -74 -102 -41 -5 88 -24 -118 -94 -127 63 -15 -39 -84 13 -11 -26 -23 -29 -29 -20 -36 11 -13 -7 41 91 72 -28 -8 -17 -28 10 -70 44 115 12 117 -35 -12 113 44 -91 -25 103 101 -76 -58 -69 95 -30 49 60 68 16 39 68 -68 85 -119 -108 -22 -128 66 37 -115 -128 -105 -53 -28 -109 -30 -101 -57 -104 56 -110 53 63 -94 -118 -78 53 16 -28 -70 76 27 11 -66 0 6 -45 -110 -83 -58 -19 -34 17 32 6 11 -93 -67 49 -41 33 72 32 37 -127 66 -29 11 89 -104 33 -102 -72 -124 2 103 -21 127 127 49 21 56 55 -81 94 -123 124 -110 -91 -38 -23 -56 -57 -117 -127 122 17 88 48 -84 -99 103 -26 -63 -112 -13 -48 -95 99 -52 90 -1 -2 -37 -119 -12 55 89 -103 6 -15 3 107 -16 -116 -70 14 22 86 12 -16 67 96 -87 127 -118 -121 68 -127 -46 116 -90 -118 -124 -122 -48 92 -66 -3 79 127 82 -110 116 44 -50 52 120 -123 61 -115 77 118 68 119 54 126 80 -101 -72 -76 109 76 -103 -73 -4 43 -58 11 -50 -119 70 26 -50 111 13 71 -15 -16 28 65 -5 48 -31 20 37 46 37 -9 -11 41 1 10 -47 -20 13 -119 18 94 -16 8 103 -114 6 -28 78 118 75 -6 72 14 -38 -42 -126 66 -85 -126 110 -127 -70 104 -86 -34 -5 -116 -75 -52 -128 -45 64 1 86 75 -128 -27 40 59 78 30 -9 -46 15 118 -26 3 29 1 0 -72 -79 32 -50 -88 -1 -77 11 -42 -12 -1 -11 20 -66 5 -83 51 117 -1 104 93 9 -126 -54 -67 -63 49 -81 -2 -89 -64 -110 5 -32 -33 109 91 85 -128 36 111 -49 122 -33 20 -99 26 -4 -57 -72 -91 -86 -127 -72 -3 107 -18 -125 -17 95 113 31 3 -71 -13 -105 20 -33 -23 -84 -13 -81 22 65 -90 -62 -11 70 -78 -71 -65 -61 -69 50 -30 -44 -64 -93 -42 4 8 -87 14 -64 92 46 -18 75 -118 75 -92 31 11 70 6 86 -61 -31 -109 64 41 -106 0 -1 -121 24 94 -85 127 -5 -8 0 76 77 -41 -128 72 -72 83 4 23 -55 -30 -123 -120 5 92 89 19 26 41 -51 -6 -39 9 -53 -53 -23 52 -57 70 2 -58 -123 -45 -76 -85 -52 4 -41 91 30 3 -128 -84 -42 127 -47 -25 59 -51 38 -119 -30 127 84 -108 -1 -72 -45 -85 -118 86 -29 -75 73 -88 -63 -53 -54 -22 -59 -70 -107 -126 -79 -12 -85 -88 115 -26 -128 -107 105 16 45 -105 -121 -119 -93 123 -2 -47 38 -1 27 8 -68 -10 -43 4 24 -76 -51 3 48 -38 35 26 -47 -55 -61 50 27 65 65 26 29 -100 -36 97 -28 0 -63 109 -73 -127 -35 39 -25 31 -11 98 66 -39 55 -70 -91 57 --78 -70 122 -124 127 119 -107 -72 -88 117 127 -128 12 -102 35 -50 -22 -112 76 119 -80 -99 -104 -92 10 34 53 -24 72 92 57 0 -10 13 63 28 127 28 113 83 37 19 127 47 79 -28 55 46 44 -11 -4 59 53 4 50 -53 19 78 62 25 -48 -15 42 -31 -69 8 29 13 -20 -43 10 -36 -90 48 2 -0 48 -94 -16 -92 -34 12 5 1 -9 37 63 18 21 49 -39 8 59 -41 15 5 47 15 26 -2 36 -16 6 55 -12 45 -44 -14 -74 0 6 106 -4 -11 -19 -59 -30 12 -38 -36 46 27 -10 -53 5 -2 -21 13 22 65 -4 36 -7 59 -44 -10 36 -21 11 24 14 -14 -40 -29 -11 21 7 75 11 19 15 -2 24 -11 44 -4 -11 12 17 67 -9 -73 -2 44 11 36 25 17 -17 24 -20 9 -41 -2 18 -33 15 12 41 27 3 -25 13 49 -27 -25 -42 29 -9 -17 -25 49 0 -17 21 -69 5 73 51 10 -26 9 -9 -12 1 -10 -8 -1 -2 14 43 9 19 45 -53 31 18 -22 22 73 -100 89 -6 65 28 -36 70 -20 -4 -24 -47 114 54 109 33 7 40 56 -25 -15 77 -26 -17 72 48 -115 0 -53 8 5 -46 47 53 -48 -46 10 11 63 4 86 56 26 84 -74 60 32 31 -22 -53 -38 76 56 7 -68 47 19 -8 -52 59 9 -41 49 -33 62 -19 -50 2 35 -49 11 21 18 43 110 -10 70 -20 43 -2 70 13 -10 -62 -98 75 5 -8 -35 52 23 7 -107 29 1 36 -42 -27 13 37 -5 19 -1 -4 -38 -106 31 30 39 26 9 10 31 -11 15 -8 -5 43 31 13 11 -39 64 66 32 -3 -2 -33 -33 26 -42 -49 -49 -38 12 2 -28 -6 -27 -113 -27 22 -21 30 44 56 25 29 44 -82 -15 -47 -55 52 -49 -15 -31 25 -29 84 -6 99 63 42 -20 36 -57 -24 -10 -14 -41 42 45 -24 6 -47 25 -25 43 -21 -36 -110 -70 7 -20 -95 -8 34 -71 73 -76 -5 -58 -9 -43 7 -9 -24 65 44 71 50 102 81 -7 -72 -7 5 -65 -28 12 54 30 57 -13 -19 21 63 91 -42 23 -8 -42 -50 50 -27 36 41 66 -5 61 49 -9 55 47 38 3 0 -11 -79 41 -10 -55 46 1 37 -48 -4 56 -30 12 53 -33 5 -28 36 -27 37 26 27 8 -4 6 20 -20 19 6 -7 14 -13 -5 -46 5 28 28 -22 78 -21 13 11 -39 -7 44 -26 -15 0 -16 3 56 -34 127 -28 68 -41 44 -71 -10 15 -11 -28 20 74 77 43 6 59 20 -46 9 58 -59 65 -4 6 -23 -20 -26 9 -26 -36 29 -70 30 52 18 86 -26 40 19 23 37 92 -53 66 33 10 15 47 6 68 30 14 -5 2 32 -34 -25 -51 1 -64 -53 8 28 -29 22 -100 -22 -32 -87 31 11 -11 29 35 27 -91 -12 95 -41 -49 12 -45 -73 47 8 24 -43 76 105 -17 -123 18 -83 51 -22 6 -2 55 -36 18 35 -13 -5 18 27 -32 50 12 -16 63 0 28 18 17 21 10 -11 30 -6 -1 23 9 8 -28 25 -57 16 19 33 -12 45 3 10 19 37 -10 -41 -61 -3 5 2 1 -49 9 -25 34 -67 4 -10 -6 59 26 -70 -128 5 -36 -76 -31 -39 18 -56 27 -3 -21 10 52 -38 -5 34 -14 25 -40 -48 4 -51 -13 -21 -53 -95 -9 16 -22 50 -32 -40 -123 0 -40 -10 27 4 57 95 14 -16 -2 43 -31 -6 -82 13 12 71 15 -57 73 66 14 -49 -5 -46 -39 -10 -34 -54 -15 -30 7 20 3 -3 -15 51 -9 64 21 6 -23 -52 -8 54 18 -39 41 51 -33 13 7 44 -22 -21 -28 -5 33 12 -18 40 13 18 -29 -22 -34 -11 -14 -38 -31 -31 39 -19 30 -36 -25 31 8 19 -4 24 22 5 20 -18 -3 -3 10 92 -15 19 10 34 -9 21 82 27 -35 -15 -9 14 -37 -7 45 49 48 -5 29 9 -32 16 7 -24 1 33 -31 65 50 6 23 -3 22 32 13 19 31 -89 -40 63 -26 -45 1 32 51 -37 -4 78 8 2 17 -37 -2 -12 87 -13 12 25 8 -26 14 14 -32 0 8 -9 38 -8 -1 -4 58 55 -90 73 78 28 -38 -54 -53 71 63 -23 33 -1 4 30 -20 61 27 -32 43 37 -57 -12 -112 8 4 18 -61 7 -74 0 -23 -10 41 -6 -28 -25 13 11 1 15 -19 -9 -15 -16 -27 -13 19 -3 27 -52 -39 30 31 -28 20 68 -5 26 -2 -10 13 7 36 13 8 -9 -17 -9 29 48 7 22 7 -36 23 -23 -6 -13 -4 13 -8 -23 -15 -5 -46 -74 -15 -8 40 8 -31 28 -6 72 92 -81 -46 18 -34 52 13 6 0 47 -39 9 31 34 -5 54 20 48 -35 -127 -33 14 45 -44 -21 -65 52 -48 55 -48 -38 52 -29 -9 22 -49 -8 -63 15 -12 4 -83 46 -3 -21 -13 18 -7 -111 23 -14 23 74 3 72 -40 -29 64 -5 -24 -67 76 -36 123 1 25 40 10 -4 27 -61 -15 -116 49 -20 -16 2 17 32 16 6 -37 -68 -30 -57 -30 -3 3 -29 -68 -19 64 9 14 -9 50 -26 -34 0 -36 -25 15 -24 46 -22 20 -42 -57 2 -70 -2 3 -52 -34 23 -24 16 13 -18 19 51 -18 -9 -9 -10 -2 -12 13 30 32 -8 -13 31 0 -103 10 12 123 -57 -114 24 -72 -1 55 17 48 7 98 41 14 62 108 8 -33 9 -20 13 99 -10 -21 3 37 -12 14 -18 6 43 -77 -18 -35 -59 5 55 30 52 81 113 -38 -49 70 -53 -9 -35 8 -87 36 -85 15 17 5 -34 -2 -80 -15 -22 -80 -19 11 5 -22 -47 6 53 30 14 63 60 14 -3 30 -18 -11 -99 8 -43 60 -27 120 25 -37 17 2 18 126 73 -40 -39 -17 27 3 -44 37 -18 62 31 23 -41 -49 -38 14 20 70 -7 -2 -24 -63 3 28 29 33 55 -10 -7 -40 7 72 -15 -23 -30 22 -1 7 75 19 -7 52 52 11 -4 1 -30 40 104 -27 46 -31 -17 -19 -30 -30 -54 -51 11 -97 -78 23 -16 -42 6 33 9 79 -15 -31 92 20 8 117 -50 -2 29 9 10 -79 31 -46 14 47 -2 -23 84 -11 -66 -86 -13 45 45 10 36 27 -14 38 20 -76 25 -43 15 19 -64 21 28 8 45 29 33 -6 -70 -71 -81 -79 71 18 13 -15 22 -88 -48 90 45 56 -16 29 -5 12 -17 32 -47 -28 -11 2 -15 -61 -41 42 45 65 -59 21 6 -17 -31 44 -32 -35 -21 35 -26 -23 39 -40 -16 -14 44 7 0 -34 -4 41 35 32 32 -24 -34 -24 17 22 -19 61 7 -79 -21 7 39 8 20 -50 -9 1 -58 23 2 12 1 18 -59 -28 -17 -24 -73 -29 -67 -11 8 33 -114 26 -28 -13 68 -72 101 -49 51 50 17 67 27 20 -60 -6 -1 76 -2 7 49 44 21 -22 -20 -25 62 -96 -61 68 4 17 -56 -25 -2 13 23 30 2 18 -2 -14 53 -15 51 -75 0 -36 -1 124 -49 97 -48 -50 -26 -31 -5 -11 -39 54 -34 -31 -21 50 -1 -30 114 -44 -37 -29 34 -117 -19 -22 22 -75 -1 6 11 50 12 -31 -1 -43 77 -72 51 102 26 11 -48 -30 80 51 -81 14 -23 64 52 44 -75 5 -105 -8 65 -7 53 41 25 -37 -13 46 -26 -3 -7 -23 -77 64 69 1 88 -25 -70 40 21 -36 44 2 -18 -30 -5 -8 -15 -4 119 48 -77 24 -5 55 -34 22 -2 15 -44 15 -7 -4 -22 -1 34 -19 -10 77 42 -122 4 -32 54 -39 20 18 -27 13 -13 17 -32 99 -3 -21 36 -21 54 -40 -54 32 6 -83 -39 45 15 9 8 -22 -54 34 6 2 2 17 11 37 29 30 24 52 -37 -44 38 -39 -84 -60 26 -22 6 -39 56 -50 54 18 -73 2 -18 -2 -59 -13 -27 -2 -41 1 62 -5 15 -46 -2 20 -10 -39 -27 3 5 -46 -24 -43 -10 -3 47 34 32 -15 -17 15 30 2 11 -9 16 -18 -25 -4 8 -10 9 -14 -29 14 -49 -27 -18 23 19 7 9 -22 -29 -23 -26 2 38 2 9 11 9 6 -44 5 -6 29 -35 -11 47 13 16 -18 30 22 66 41 -18 -18 -3 -23 28 -15 -8 -4 -21 10 40 21 -28 17 -38 -27 -14 56 -34 7 -46 -12 -41 33 -28 -20 -34 53 47 36 -24 -8 27 -30 -31 2 0 50 45 -10 -15 -14 4 -39 -25 -76 -6 54 51 -31 -23 38 -20 -44 5 -36 40 -85 1 9 45 4 -23 -84 63 -2 21 80 -15 -4 2 3 -25 -45 -33 -33 -33 -20 29 -55 29 -8 13 11 18 -27 -104 -19 -58 -26 -57 42 47 -25 25 -9 -25 19 44 -26 11 1 21 24 -8 0 15 19 26 -33 4 6 11 -52 0 -3 11 24 49 -29 12 -18 20 -52 30 -8 27 -14 -14 -6 3 0 19 20 -12 -1 -6 0 -9 -12 -10 -20 -88 -72 35 11 23 56 17 22 -64 -58 -94 2 -94 -5 -23 10 -82 -70 -15 -71 112 12 -92 -1 25 -23 -61 -21 22 18 -5 30 -93 -5 33 5 7 2 -73 65 44 -6 -5 31 11 24 -28 -10 -50 -42 26 -22 -20 -96 50 82 -29 -116 -2 -44 3 21 -75 96 -31 -28 -46 -23 -65 43 -23 83 19 47 -7 -31 -93 27 53 -69 53 38 -48 -84 -35 -45 -28 77 -85 14 -14 5 22 -24 17 21 -14 2 10 20 -10 -61 6 -63 1 6 22 -58 -12 -22 59 7 -54 -46 -31 -58 -16 -36 57 24 3 -40 -18 34 16 27 -53 3 1 -38 -49 21 -8 -57 -50 21 -16 -51 101 20 45 17 46 23 21 3 -18 -25 -9 18 78 -27 37 -42 -40 15 -13 -28 -46 -6 19 -109 59 45 -49 0 -38 -52 17 -55 -25 -18 69 -25 -14 14 -83 -23 -10 -27 -115 -9 34 59 -26 -1 32 86 60 -82 -28 -19 8 -25 3 -4 -58 1 -10 49 25 -67 29 -119 35 -60 18 23 14 -14 -53 31 -8 -23 20 -23 -37 22 7 -36 -51 9 42 13 -44 -39 -48 -66 12 -64 52 7 78 -29 -44 23 -19 -55 12 -25 -11 12 18 -5 -26 -19 29 9 -17 14 -4 -51 5 -26 22 32 -10 6 -24 9 -5 41 102 -5 -16 -76 -15 -25 24 -19 -29 -24 -15 -18 -23 75 -68 -27 -14 -17 -4 18 -30 60 -5 4 2 -34 53 -71 35 39 -8 53 37 -32 -7 7 -100 9 31 -14 -3 -59 77 -124 15 -30 -16 13 -91 -35 -1 -16 33 -82 25 -78 53 -66 -68 -107 -11 35 -77 -74 -62 -91 -4 -48 96 6 -102 3 31 -75 14 -40 -58 114 50 55 -62 -23 -34 4 -24 122 13 23 20 25 35 -110 23 -89 -15 -15 10 -27 31 -48 126 91 -46 -62 82 -61 48 31 34 66 -10 -70 -24 3 -31 -73 -15 -37 -64 45 89 42 64 -36 74 32 73 -8 8 -13 18 -95 6 -97 52 -15 8 45 -32 -39 -9 -31 23 1 88 24 -26 -70 -43 -21 8 20 -6 10 86 8 -34 -97 -8 -46 -47 -19 2 37 26 25 54 72 35 -37 -14 -19 -61 -2 -56 47 -30 31 4 11 -84 12 20 -128 71 -8 1 -122 -16 -88 39 8 -49 -44 29 2 71 68 -29 -84 4 23 -3 -41 78 52 -76 -1 -49 52 -45 -41 31 90 -71 20 -14 40 -29 -16 55 -77 32 -48 98 -5 3 19 59 -23 -12 4 -13 -2 -38 -47 67 92 -22 -12 -13 64 97 -7 -17 95 45 23 3 -120 9 53 -14 -36 43 94 1 117 68 3 -14 29 -18 -28 -10 -11 2 -37 27 5 6 29 -2 5 -2 36 -37 -15 -30 -65 -46 -15 -12 -102 47 -36 -25 8 43 -45 49 -2 -40 -2 57 -86 34 -6 21 -15 -55 31 -20 -66 47 23 85 -31 -1 64 17 -72 18 57 23 50 11 80 22 -12 -5 55 13 55 18 68 27 16 43 -57 32 58 9 46 20 5 44 31 -5 12 15 12 -16 -89 58 31 87 -47 -46 -39 -3 21 16 -4 28 52 9 -35 3 40 -24 -47 18 -20 20 -47 17 -21 0 -22 -10 14 -5 29 -19 41 24 46 -16 -38 -13 35 -63 56 14 57 25 -71 -48 -20 7 -1 -5 77 24 -56 -3 -21 0 62 19 -26 -93 -26 -4 -39 5 -34 -59 -20 2 36 -6 20 58 -26 8 -13 -3 -6 0 -7 -8 35 28 -24 55 41 -58 -25 6 8 1 48 8 -9 -17 -33 -19 -18 33 -16 10 21 -16 -10 4 -28 8 59 1 -27 70 -30 13 -3 -27 -29 44 -23 -19 -54 -8 -4 -13 -27 20 20 21 -15 29 -23 45 -22 8 -48 52 70 -17 -1 14 23 -1 -38 56 -58 -21 37 20 1 -80 44 -64 112 14 -36 30 31 -20 -63 68 -58 11 107 -7 44 25 -90 -44 -23 -7 4 -51 33 73 16 17 41 -15 -3 20 18 47 5 -55 34 39 -52 57 69 -103 -26 -10 -108 29 88 8 100 -29 43 -66 50 8 9 49 20 11 40 48 56 75 3 58 20 -38 16 -24 27 45 19 0 3 -13 8 -3 1 -6 51 -13 -43 -42 29 -44 12 39 -6 -35 -45 -40 18 -11 41 1 83 29 15 -4 14 18 -25 -17 1 -31 -56 -59 54 20 23 19 26 -9 -30 36 18 -21 -42 36 -3 67 -61 -37 51 -32 -49 -39 -4 20 52 48 -82 39 39 -25 25 -69 -58 -37 54 11 79 113 31 13 -52 -41 -9 -4 -27 -69 11 6 -40 -31 30 51 82 -16 44 25 -75 -14 -18 -12 -22 22 -11 34 -37 85 0 54 0 -4 -37 8 7 -22 -6 -27 45 -20 -16 -45 9 39 -13 3 32 -31 18 62 -49 -13 12 50 52 -56 -37 19 43 32 36 -12 7 15 45 59 10 -30 27 8 -19 -60 21 -9 18 17 -14 10 -26 12 -30 -45 15 -41 -58 -43 -7 15 -10 13 0 -31 -2 21 -46 18 -15 -20 -25 -30 -8 -6 31 4 -2 8 -50 46 45 -3 66 -13 16 18 -22 56 36 34 -13 -1 41 -49 -18 -45 -69 -9 6 -46 -56 -1 69 -30 -17 -56 37 38 62 49 114 14 95 5 -45 23 127 6 12 -13 -89 49 2 68 30 -69 40 -47 -40 -10 28 42 -25 3 -60 78 -122 -9 -16 23 -40 86 46 22 37 59 -32 63 71 14 38 -37 35 -16 24 -89 23 119 4 -39 24 -20 -123 -42 9 -7 -59 -32 -56 -14 -17 -29 15 71 10 -12 -22 20 89 3 -47 8 10 20 32 -37 19 17 26 16 -26 7 16 2 -54 5 -44 -19 -25 6 -23 -52 41 3 -10 25 -11 9 -23 15 51 -24 17 -49 -28 -57 -16 -38 -64 -41 -8 28 -48 15 -37 7 21 10 -20 -26 -11 7 57 -28 22 4 79 -4 -50 -25 43 -88 -29 47 -72 -57 23 13 -12 -16 -48 81 -78 7 -5 7 -89 -53 80 -94 -35 -11 35 -60 -40 27 53 41 3 -51 -59 -14 -38 75 0 8 91 -50 26 -58 -58 6 -16 4 -25 -24 28 10 4 127 48 -5 7 -7 71 -27 55 14 77 79 -49 -14 17 67 -23 -25 16 -2 -10 -2 54 -9 86 -32 28 -1 12 -25 -26 12 6 26 42 50 -58 13 50 -21 -19 18 36 -7 -37 38 14 4 5 49 -3 -20 -21 -41 -9 -15 37 -45 -12 20 -27 14 -54 5 20 53 21 22 -2 -29 9 -6 5 -61 3 15 33 74 25 -16 41 33 19 -5 -22 31 20 27 23 5 -34 -52 -9 23 101 -2 -2 5 -42 51 58 -29 38 35 -68 11 118 -8 52 -36 -28 31 -1 -19 -28 8 79 -47 25 -43 0 12 57 -18 -35 -103 -96 45 -40 19 -35 -68 69 106 31 15 40 24 -22 -1 26 -4 33 -32 26 46 -25 1 -83 4 47 -27 -14 -61 43 6 -3 -6 -14 -40 24 -9 -1 -23 51 -6 -37 12 -46 16 -29 -50 17 47 4 8 -29 -31 44 -40 -23 -29 -14 -55 -35 25 4 -53 32 20 -12 -48 37 -21 40 -5 -54 -5 11 12 63 27 10 4 -64 -9 -62 -42 14 -19 10 -13 3 11 1 -13 -17 67 -26 -27 10 12 32 -14 -7 -69 48 -33 -40 47 118 -6 34 36 11 25 -55 0 30 63 -33 -16 14 10 -26 -15 39 -19 51 -6 44 11 -20 40 27 30 21 63 52 5 -57 12 13 -6 19 68 50 -45 42 0 13 -17 35 2 3 -14 -40 -13 2 -25 17 43 -42 -25 -27 -15 -18 0 29 4 -59 69 -10 27 17 -8 33 -4 37 -50 5 -47 23 0 -50 27 -32 27 39 40 -72 -16 27 114 -5 -14 65 -53 -10 65 10 -35 13 12 53 10 2 54 -4 -33 -41 -42 -29 -11 61 23 -2 -36 32 0 -34 -31 44 -15 -25 -4 -7 4 -43 10 -17 -4 17 -11 4 35 -5 -7 13 -10 -13 17 47 -7 50 -10 -24 -42 -11 -16 -34 2 -35 -5 -1 -10 76 9 102 -29 -27 -10 0 0 54 10 -104 80 89 -56 67 -12 117 -40 21 29 -48 80 20 -69 22 29 31 -2 120 -84 61 2 -48 31 62 55 38 55 1 69 62 70 -54 27 65 -103 55 18 9 32 68 1 -17 25 12 64 -56 -14 40 -36 -5 -27 70 3 94 -38 -67 49 -39 -13 -19 -31 -57 -67 -28 59 -45 23 46 -66 -25 55 -56 27 51 47 2 72 119 -13 -6 51 14 5 42 -16 50 -67 16 28 -2 -70 16 5 63 -38 3 15 78 -11 -97 4 38 17 26 0 -37 -97 -44 23 2 89 -42 -39 9 -31 -45 -30 -40 -27 -29 14 -18 -25 -36 -50 55 -19 -23 -12 5 -79 52 -4 -57 7 -24 -11 97 -16 -15 9 -21 -37 1 7 -11 22 0 -29 -18 -27 -46 14 1 7 -11 -9 -17 23 -15 5 -51 -30 15 -21 -22 10 -11 15 0 28 51 26 -18 7 -6 -27 22 -75 1 -49 37 13 -13 49 -13 15 13 18 33 1 82 24 13 68 8 5 45 -27 39 28 -16 -17 0 20 53 8 0 17 31 -15 20 0 -35 -36 36 -38 -13 -7 -9 60 34 38 6 49 4 21 17 -1 5 33 -45 2 5 -24 -29 -16 29 28 -15 21 -2 23 -4 -25 -8 7 -19 -1 -47 -19 12 21 16 -39 -7 -4 9 -22 -12 -20 -13 11 -4 -9 -12 -10 -15 9 -8 17 42 12 -2 30 -27 -11 -6 -19 -18 -41 9 12 -34 -10 -47 0 -10 -35 7 25 -61 -10 -82 -9 -15 18 -51 4 -21 8 31 -27 -4 79 13 -11 36 9 -47 39 32 22 36 34 20 19 17 -64 47 -17 19 10 -70 36 25 3 0 2 -12 33 -55 -16 -7 35 0 -17 11 28 55 -33 57 21 43 -41 -4 25 11 -2 4 12 -25 39 -29 31 9 23 -39 -9 -17 -2 16 -8 8 -57 -42 45 23 15 -29 23 -7 34 25 6 -41 1 7 31 -4 1 -13 26 -5 -9 34 2 7 -28 -41 -2 4 -21 -33 -33 30 -7 9 15 66 19 17 -32 -25 2 -30 -12 -28 -55 -29 8 -40 10 10 3 -44 5 -38 -8 -22 35 -46 6 -16 28 33 -4 -61 -3 -59 -3 -89 -2 -32 -33 -38 56 -64 -14 -10 77 -31 -8 -38 68 -78 27 25 65 35 -41 -98 99 -83 -2 -19 0 1 -6 -7 7 15 -36 -63 100 -7 -57 6 -70 11 -29 -7 43 63 7 69 91 9 39 7 -71 13 8 6 -64 34 -46 -105 -29 -17 -49 -20 54 43 19 59 29 61 -1 27 1 -9 37 2 14 -2 34 -20 56 -43 15 -46 32 34 -65 5 -2 -11 -8 13 12 39 26 30 37 23 -58 70 57 -62 -10 -22 2 -23 31 30 23 48 -24 6 -41 -3 -10 -17 -45 5 -23 0 -33 -43 23 43 29 15 -12 -2 12 49 19 6 40 8 0 1 10 31 -18 -39 38 -47 14 -43 -32 -29 23 -24 5 -20 24 -27 21 -42 -12 50 29 25 -38 2 19 -28 -9 -21 10 -8 -2 -18 -23 -31 4 -21 20 15 32 -49 -47 4 11 40 18 -16 -40 10 34 26 -8 -1 15 -9 9 35 -2 -25 12 -24 -37 -38 31 -35 -13 -83 20 -48 23 -40 -16 -32 -28 43 -38 44 -19 -21 -25 -26 -27 15 19 23 -6 23 -19 18 -4 65 -27 9 46 -32 -33 -10 -38 44 24 -20 -7 -12 39 -32 -23 42 -10 50 21 11 1 13 -24 12 16 40 32 -6 -8 8 -19 -3 5 -21 -39 18 -42 -24 -17 -49 -5 -5 -30 9 -1 -2 -1 -21 -14 -29 9 19 -14 51 39 76 -2 -57 57 20 -62 106 42 8 22 89 103 37 -1 -14 25 53 105 25 30 -22 -10 5 58 -91 6 70 -45 -64 91 106 5 33 42 -11 -101 51 -45 62 16 -38 -23 62 77 -35 -38 83 5 0 -29 -30 -15 -79 36 -30 -79 -42 -10 -45 -16 30 -37 62 39 -86 56 -56 18 -20 -13 45 74 -66 1 46 -19 -8 -58 -58 27 94 -70 -49 -3 36 -16 -20 5 27 48 21 -85 3 -34 10 -23 -12 -12 -36 25 4 -15 -5 14 -14 -26 -58 -37 -25 11 57 -12 -10 19 -21 -23 -5 -51 21 38 -22 4 113 -8 -8 0 94 41 -20 5 -56 30 -15 22 -11 -43 -48 -14 -76 -3 20 -50 -55 22 -25 -111 30 11 99 8 -57 34 -31 30 -84 -40 33 -26 38 -42 -24 33 -81 -6 -53 53 61 47 -5 12 40 33 32 93 -36 -10 -34 24 -11 77 67 31 47 -20 16 28 -18 26 72 56 0 4 -3 -69 -13 -30 -20 -8 -13 -17 53 1 -66 -7 6 -94 -37 -82 43 48 85 -52 43 8 18 -38 -45 -29 -20 -28 -61 -26 74 11 -18 -21 -1 6 -1 58 -43 28 -42 23 90 21 4 -4 27 -35 46 5 -7 25 -4 -63 -72 -5 -38 44 79 20 -3 -33 16 -51 0 54 -13 26 -20 41 -37 -46 -15 12 9 3 18 21 -10 -13 -29 46 -27 -20 -30 -28 47 -20 -6 0 39 -8 -9 53 -45 43 38 9 44 3 11 -4 26 0 8 1 -29 41 41 36 1 22 -88 -1 -31 1 -30 -96 24 39 -47 -68 -2 -12 5 10 -27 15 -50 -42 -25 -5 33 36 -3 51 15 3 26 15 -17 7 49 -5 -4 -29 -13 41 -83 4 -16 19 -13 -7 -37 -24 -49 10 22 -16 -23 13 -32 -94 29 -54 -24 -1 70 55 -12 11 10 7 -22 31 4 -59 12 -64 -39 -6 18 -27 0 32 -8 28 -74 20 15 5 -3 29 -3 -18 -7 -13 -30 51 -32 38 18 52 29 -14 44 2 -26 -20 -45 63 -28 -9 -20 -54 8 13 -19 -26 26 -26 44 10 -14 16 5 11 19 -54 -9 -24 -63 -24 -23 5 -54 27 24 15 -50 -12 -15 10 -1 36 -60 0 30 -16 18 25 -2 -15 -8 -75 -10 -17 12 4 42 22 -40 -18 -15 0 -1 0 17 -9 -74 -36 -51 -29 -24 -18 -41 -58 -18 -27 -23 40 -37 17 -27 24 7 -7 -35 -21 7 -16 78 35 25 21 67 39 51 -4 -17 -13 27 34 13 -8 -11 -4 -29 20 6 -4 51 -7 72 -15 14 17 13 -6 6 -51 26 69 15 7 -33 60 -20 44 -6 4 33 -27 35 -36 6 -3 32 -9 32 19 -2 -14 30 -9 -10 13 -24 -24 7 13 -6 19 -19 -8 -23 -10 -5 40 -13 29 23 -18 35 -49 -16 15 15 -17 57 22 -16 -5 25 15 1 -6 29 -43 15 25 -2 -48 -53 -13 -25 23 1 16 -26 -22 -57 25 31 -24 -6 -10 -45 50 32 -20 11 -45 0 -25 21 -49 -32 -6 -8 37 -51 -45 -9 11 -19 35 19 23 39 -22 20 -27 34 -48 33 -7 -27 -3 -7 -12 5 4 10 13 -19 -44 6 -47 -20 -29 18 2 -38 -14 -38 30 -17 32 10 -32 5 24 -81 46 56 44 37 32 4 -18 37 48 30 34 -26 -2 1 1 -8 -32 -19 -14 -15 19 12 3 -3 -13 26 -12 -3 -19 -19 -12 14 -23 -26 19 -9 18 22 -12 -8 -18 -32 30 -23 -28 -19 -39 16 -12 26 3 -15 9 37 25 8 -29 9 5 18 1 42 -20 -38 -19 -11 -14 12 3 32 18 -14 -33 92 42 57 5 25 3 15 68 63 -39 0 19 38 19 116 38 23 -52 20 69 31 49 57 46 -5 31 84 92 43 36 46 -22 26 40 16 71 60 78 7 47 75 -47 -7 -1 8 1 -11 -37 3 38 36 9 -11 -30 -33 51 -7 -43 -87 32 -44 -6 10 -36 47 20 49 -6 -38 -10 -38 63 4 8 7 -12 30 -16 52 -13 54 31 -66 -22 -24 -45 35 44 33 8 64 3 -12 68 -8 -22 -26 16 -9 -46 -28 27 -3 20 0 2 23 -1 -24 -80 -7 -71 0 -4 -10 -1 13 -29 -43 -22 18 54 -16 -10 2 -24 32 -52 -28 -27 4 -32 11 10 -18 13 22 81 -11 -9 -19 14 -26 -20 7 7 8 44 4 -8 8 -38 28 -87 82 34 53 24 -23 20 16 18 4 -29 14 -21 -39 35 63 4 9 54 8 43 46 32 -16 -19 -16 -41 -4 6 -21 5 -27 -32 -2 12 6 16 6 6 -32 55 38 44 -26 19 -12 -68 36 -32 2 17 -9 60 -57 30 -10 -9 -24 12 -13 -44 3 48 -11 -3 47 19 -41 -1 20 47 -5 23 26 -12 -37 16 -61 69 -2 -12 -23 103 48 9 11 -41 -45 55 40 -19 11 58 -4 -26 26 21 20 -65 22 -24 15 -10 -39 16 -26 38 38 -9 40 -8 -12 -47 -5 -6 19 39 -16 23 25 -23 34 -24 -10 11 8 12 51 59 -27 -43 -19 -24 -11 -39 21 -15 77 -5 5 49 33 -23 -25 17 14 -13 -18 -23 -22 39 -24 36 0 36 -7 47 9 -15 -39 -27 42 -22 10 1 18 -7 -23 31 -16 -4 -18 -3 -28 2 32 43 16 -20 -63 0 44 3 -50 -22 -15 -8 27 -60 9 0 41 -23 30 14 -23 -1 -40 21 -17 -11 -39 31 58 23 14 47 -28 43 23 -33 -24 -13 18 -45 -24 21 11 -1 32 9 44 -4 -30 21 -40 -4 23 11 -14 30 -12 -17 -1 11 0 0 26 15 -17 21 -9 -11 3 -14 -41 4 -21 23 -10 10 -19 19 15 26 -15 20 -10 8 -6 -15 -10 -7 -14 -6 7 -13 -45 -16 8 -6 7 8 -18 -7 0 -26 56 32 12 -15 57 -7 -75 -6 -9 18 37 2 41 13 6 -40 22 -33 112 -22 17 -43 41 18 -50 1 0 34 6 -12 57 29 4 36 64 -37 -6 6 -19 -9 69 10 -16 -22 -28 29 41 30 14 9 -48 31 54 -28 -41 35 -42 6 -21 62 35 -27 -2 12 -5 38 -11 40 20 -26 55 -75 -26 13 -30 37 53 -18 41 -23 -43 -32 -32 51 19 3 -7 -44 50 20 7 6 -15 20 -10 56 -31 1 7 14 -9 -33 -25 8 14 11 5 29 -37 -35 49 12 26 38 4 -15 0 5 -6 -7 23 38 23 -2 29 -5 -14 -33 -25 36 26 -28 -14 -45 6 -46 -18 -6 -40 -19 11 1 -28 29 0 -45 33 -45 -26 -22 58 -6 -47 41 -48 -17 25 3 47 -7 -10 50 -28 51 -35 2 -67 -24 -55 2 -40 -2 -12 10 14 28 -19 -83 -12 -31 -21 -4 -9 33 21 -34 -31 55 -28 24 29 36 -40 -6 -1 10 51 -22 19 -29 14 5 -56 -15 1 -41 -26 22 7 14 -12 49 -54 27 -84 0 76 13 44 -10 37 -22 -26 -62 22 -37 66 0 -13 -45 10 -1 -19 94 44 -3 -53 -36 -78 44 -54 -40 -38 12 -19 1 -24 27 -38 42 19 15 -18 -26 -6 63 1 -7 25 8 -4 -19 19 15 0 -42 -40 -3 10 5 20 -19 45 25 75 -43 85 8 53 17 9 -43 -2 30 -75 31 7 61 41 74 10 29 40 -33 16 33 -7 38 57 31 -59 -11 7 13 -11 14 -34 22 41 -24 33 -33 -36 27 -6 -38 -13 15 -4 70 -28 26 17 13 47 -21 12 -24 -18 -6 62 26 -33 7 15 -32 -14 -42 71 -41 -39 40 -78 4 -11 -113 20 -12 -26 21 -2 3 -57 4 -18 40 31 12 -16 -45 14 42 -69 1 11 34 -6 22 -14 14 5 -27 7 -46 4 59 -19 38 8 15 -3 37 -33 92 9 -21 37 -37 2 -16 -20 -27 37 -18 17 -8 53 -48 -13 -45 42 -7 30 -15 18 1 -20 7 -21 16 -30 5 -30 25 -33 13 35 -8 36 -16 31 -44 6 -11 -11 43 37 -45 -21 -10 -20 -38 -9 -31 36 9 -20 -17 0 18 10 -19 18 47 38 15 -51 -9 -22 85 60 -9 -44 51 1 29 3 -21 75 11 -20 -45 -23 -12 11 73 8 15 56 22 -50 -65 3 10 11 18 -21 -19 -16 22 2 -19 -6 17 36 2 102 80 18 -9 -31 -9 7 30 25 -30 -7 13 30 -15 -12 36 12 -1 67 -16 -8 -23 26 -54 23 5 -43 -72 14 5 26 21 69 -19 -32 33 -27 -6 -13 -63 46 -83 42 45 19 23 11 -27 7 -5 -25 -32 2 -37 -52 -23 -40 21 -23 4 -29 63 29 -1 -37 22 3 -9 3 14 44 36 13 -25 25 9 27 -51 -5 -37 23 14 55 31 30 1 6 56 17 -58 18 43 -45 3 10 23 73 -3 -23 -37 20 -12 4 30 42 -67 -31 -19 -14 -19 -66 10 -9 47 -55 18 -31 -12 28 22 29 -15 -31 45 -47 48 12 -14 -41 -32 -47 10 29 10 -53 10 -7 44 13 7 10 -8 -4 43 50 -23 16 -54 20 -25 31 -44 21 -12 13 2 44 -37 -21 -24 -37 25 45 -31 -18 26 -57 -49 -21 10 0 30 38 -64 -1 -21 -20 83 27 -25 86 -17 6 -6 -46 -36 -41 2 -10 17 2 29 32 -22 6 -1 26 1 24 33 35 36 -43 8 27 31 -6 27 29 11 4 -11 -11 12 -24 -38 31 -23 15 -46 1 -39 -14 18 13 -24 10 -3 10 16 -8 12 23 41 30 -2 22 -15 19 49 42 9 -11 22 -2 9 38 18 -18 33 -5 17 17 29 -38 -3 33 -34 -28 21 34 -13 24 -28 26 19 -2 -30 2 -51 -22 -12 -1 -25 -8 8 34 43 -15 23 -13 36 16 -35 22 -14 25 15 41 1 8 -46 2 26 11 -1 2 -14 -11 -7 57 -59 32 -41 24 18 18 3 -2 -10 16 -5 36 25 5 21 29 -101 2 22 -23 10 8 -21 8 39 24 4 -1 5 -41 21 -9 -12 12 -20 -29 -14 1 -28 46 -21 35 -15 -7 10 15 -49 -27 20 -19 42 -1 3 -20 23 10 17 -19 6 -22 23 -36 -35 -5 17 4 -37 18 -25 -28 23 12 14 -10 34 20 -23 -113 12 -14 15 21 37 -52 26 -16 35 19 -5 46 -20 -45 -37 22 -12 -55 -1 61 -34 -52 -43 63 5 -7 -3 -65 9 1 -23 50 -17 32 -7 -37 21 19 -7 19 -11 14 27 -9 -21 -36 -49 -17 33 42 -35 -26 -20 29 -40 6 64 -1 17 23 -54 -56 32 53 -29 -11 22 42 16 8 -18 10 -6 31 10 -7 32 -49 47 -36 53 96 11 -7 16 26 42 89 -18 -24 -1 10 17 -20 9 32 2 -27 35 12 -16 -29 -15 31 11 -24 -14 3 24 -2 -57 8 23 37 15 -11 21 -14 -8 5 -1 -19 -24 -4 -1 -12 13 -22 41 -31 0 48 47 -4 46 3 -9 -15 12 -47 28 -9 3 -18 -2 2 25 7 -3 15 -19 -30 51 -67 13 8 71 -31 34 65 -32 0 30 -22 3 42 -46 -72 -24 91 39 28 2 -32 1 -5 -40 -25 -48 -4 17 -76 -2 -52 -10 38 -43 10 -67 31 24 -23 71 -68 33 -47 -24 -52 -19 2 -47 3 31 -62 44 26 20 -25 49 -19 -42 -92 -8 26 30 0 25 -3 0 -34 -21 -61 -13 -12 -33 -56 -21 33 -25 20 -42 -16 21 -16 -20 -25 -83 -19 23 19 -2 46 -28 -15 -15 6 -8 -38 0 -33 -34 -42 -39 -13 -39 -44 13 19 -13 4 28 -32 10 -9 -9 19 3 33 8 15 -7 -18 17 -4 15 -2 20 -12 24 -45 -38 -5 15 -65 -7 -31 -2 11 70 2 21 43 -3 14 6 0 32 -21 -32 9 -25 4 20 -22 -8 0 48 22 18 16 -32 5 -42 -18 31 12 21 29 -5 -67 -8 -45 -39 -5 -15 25 -18 73 34 17 -4 -40 37 -10 -9 -38 30 -33 -22 32 11 35 -27 -3 48 16 1 25 29 21 22 -25 -38 13 -18 33 -18 -36 29 -1 1 -3 21 7 7 14 -36 32 29 -8 -21 26 -12 47 3 6 -21 9 -2 22 -39 36 18 18 -35 -41 -1 32 5 26 -23 16 13 18 28 5 -9 -26 -13 9 0 -42 -5 -5 14 -9 26 17 17 8 28 -10 -8 -20 -13 18 -18 -21 -9 13 -6 -5 3 5 -2 -26 -46 30 -38 32 -7 43 1 -34 33 -31 -10 47 -49 6 -17 10 -15 -11 -58 -48 -9 -21 1 33 -57 -29 -33 30 27 -6 -42 61 -17 25 -27 62 -42 -33 3 39 33 -76 94 1 -4 17 -5 3 -33 -27 -42 -28 40 -3 17 -26 13 -31 12 25 16 7 -35 0 -85 -6 27 5 46 3 14 69 -73 5 -33 -47 -17 -1 0 -39 -36 4 9 12 16 38 -13 -18 -31 45 33 -15 -8 2 33 -14 4 54 -52 9 40 5 -22 -23 -19 -42 -32 -14 14 8 -1 -45 -11 3 -40 29 -5 11 15 41 2 -26 -1 -9 -14 0 -11 -38 -4 28 37 28 28 -52 -3 -1 27 10 2 2 -35 41 -5 4 17 38 2 -19 -25 -16 21 -51 31 -36 16 -12 5 33 9 33 -57 -4 -35 0 -46 -25 29 -37 -49 0 -7 3 43 13 -32 56 -49 -21 -54 -39 8 13 -53 -27 -45 -67 -5 24 -54 -34 25 44 38 1 -25 -17 6 -17 59 -44 -21 -24 6 -42 -17 -3 -6 2 -62 6 39 -46 -44 -65 34 -46 1 -54 -59 30 -31 -4 20 42 6 20 -8 -32 -19 -28 12 -18 40 -22 -30 12 -51 0 -33 -8 -7 31 -78 97 -52 -47 -8 -4 15 12 12 24 1 -16 -40 22 -13 -1 58 -15 4 -45 -34 8 21 2 54 19 -7 -23 23 -4 -9 -3 23 32 11 42 -7 2 64 12 -18 35 -17 2 -14 15 89 74 5 10 -1 -2 -28 -5 -13 -18 22 48 -35 41 -28 6 -21 -13 -7 -11 12 21 50 -24 -58 11 10 -56 -30 36 23 -62 -6 6 45 27 38 -24 -29 -19 23 -34 -7 50 34 -40 -22 30 12 -27 -40 -60 -4 12 -65 32 7 8 31 22 -62 -22 53 6 -48 11 -37 -46 0 12 13 38 21 20 -31 5 -14 -44 -13 10 42 -61 -36 28 -18 -37 25 -32 -65 -19 13 -39 38 40 -24 -18 -24 -22 42 12 5 -5 0 38 -13 30 -20 37 -4 2 -22 -24 16 -11 -30 22 27 -3 -19 4 -32 2 11 25 19 -2 -1 32 -2 10 -24 -11 14 -33 -16 7 -32 -25 9 37 -42 -4 21 -4 22 23 -29 -11 -38 -8 -9 -21 -3 7 -23 4 30 -8 -11 -1 -5 -6 2 10 -10 11 37 -9 -31 -45 1 7 -8 -7 12 -20 -36 8 50 11 -20 -29 -1 -19 -2 18 6 -1 49 -18 4 16 -20 -6 4 18 12 34 -2 -23 10 10 18 7 -24 -11 7 11 -3 28 -4 -7 -22 -9 -9 -94 -11 -59 4 -13 2 40 28 4 17 -1 -19 11 6 13 11 -11 11 8 -5 -14 38 -7 19 13 -25 11 13 1 22 -9 -6 19 0 1 -11 2 11 1 -7 2 9 22 7 -11 -9 -17 -5 -13 -5 20 17 9 8 -7 -17 8 -1 -20 -9 3 -8 -7 -10 -3 13 9 -16 -2 7 -10 5 26 8 19 -3 5 11 -47 43 -2 -43 1 16 20 15 -36 -31 -23 -27 -3 -19 -15 41 -17 28 -20 13 -15 23 -17 -20 13 1 -10 20 16 -1 13 20 23 -59 21 16 25 72 -31 -18 -28 -2 -26 -9 30 12 8 -19 50 -62 -10 12 19 -38 0 1 53 14 23 16 -53 43 43 70 38 -42 -26 -35 3 -18 12 24 -115 -43 35 55 9 -4 43 21 -48 -21 29 43 -27 -73 -24 -4 -64 72 34 -34 38 52 38 -21 33 -35 6 -30 25 -5 15 -5 -10 7 -16 2 -9 -44 18 -12 -8 -24 27 19 2 -22 -7 -18 -42 -13 -19 27 32 48 -33 -13 25 11 -25 -8 -24 10 -1 24 -32 -3 21 4 8 -15 -30 17 -18 40 8 -39 -10 -26 -7 -36 -53 8 -11 -30 2 -5 -28 14 -43 -51 -30 22 -8 7 -39 -23 -13 -10 -20 5 -18 13 -35 -28 13 -40 38 -4 39 52 0 17 13 24 -50 -39 36 0 15 -50 -16 -25 -8 39 10 -46 5 58 -18 -9 -16 -69 -20 37 23 -36 -39 58 20 -3 -14 3 -21 36 61 37 -128 4 -52 5 56 98 -3 -4 62 -21 -44 -105 -55 47 27 -21 29 1 3 10 27 76 42 23 -26 -48 16 -6 39 10 19 -31 5 -20 16 -44 -7 -24 -5 18 -5 -48 -15 -58 0 -8 2 14 8 24 32 53 -6 -19 -19 0 -45 -20 -21 32 -11 10 -64 -9 -19 4 -13 -12 -39 13 40 2 -21 6 -18 62 36 -40 -75 22 16 -29 -69 67 -64 42 37 -29 13 -23 15 37 55 -50 -72 9 15 -15 -32 25 -45 -23 59 48 82 37 43 -14 34 12 21 59 -4 92 -10 -56 -48 -84 43 -74 -19 73 -28 30 -8 -23 5 -12 -72 51 49 30 28 -102 38 -24 -24 -15 52 49 44 15 22 -51 1 -27 -25 -33 56 119 -31 42 -8 -61 -7 -1 11 -37 -32 -82 -16 -28 -73 -31 -6 1 -39 41 15 -24 -43 6 40 49 -6 -46 29 -44 12 35 22 -4 -35 12 -27 -10 -36 -3 22 11 52 29 9 -16 -13 27 -40 -36 -50 22 -9 0 -22 -39 0 -5 -10 -1 -71 -24 -4 26 -18 15 28 -54 2 -29 0 12 39 -20 -26 17 30 -42 56 115 -44 12 -1 101 -15 12 -34 13 -13 -55 32 -29 37 -25 -36 -31 29 12 13 -7 34 5 29 2 32 51 -19 30 15 45 10 -28 -124 -78 16 -91 -5 66 56 4 4 121 124 -29 -125 -51 -20 -81 13 78 8 43 -45 -61 6 -89 -80 2 -15 -21 84 11 -25 -118 -21 109 40 -48 -5 14 50 72 31 -5 13 14 9 -32 -35 54 -15 -1 -45 -32 2 0 -64 -9 9 -32 -26 -63 16 5 -60 42 20 34 -12 66 -29 -37 -28 13 46 -4 -33 -10 -29 12 -26 -21 65 -30 16 12 10 9 29 -20 9 -34 48 -19 15 -22 -16 21 71 14 -44 -3 24 -9 9 -54 23 -68 -72 -1 -14 -96 19 22 -11 17 -12 -20 24 61 33 -5 -80 -23 37 -33 -38 -43 -7 54 -2 -2 -12 77 5 -27 -35 -18 -22 15 -27 -10 1 -9 -11 70 -18 0 32 44 2 16 38 42 85 2 -45 -43 -13 7 111 -69 0 98 76 -25 59 -23 -26 -48 -51 25 13 35 -30 -47 54 -11 16 -3 -22 -6 67 -106 -29 32 -93 -69 9 38 43 -32 -61 72 -68 -55 58 18 0 -21 -32 11 -33 -17 28 -28 0 59 -38 -17 2 24 16 -49 -22 47 -3 3 -9 -5 -12 -9 26 -23 3 24 -81 -62 5 13 -15 -41 32 -36 -11 -10 27 -13 49 91 -30 -41 90 -2 10 -120 33 87 -27 -120 116 -17 75 -53 -49 -16 -3 -121 -62 -22 8 0 13 71 6 34 -40 -38 -47 -59 -73 5 46 70 -128 3 45 23 63 -117 45 54 123 78 121 74 -66 10 69 124 100 48 -24 -87 -79 58 -52 89 -127 106 87 63 50 7 -35 -127 -92 -123 37 -124 -45 1 120 -60 -64 90 15 24 102 -111 -15 -28 123 -89 48 86 127 -4 -71 -125 6 19 -46 -119 125 51 -70 31 -125 12 20 -14 -30 18 40 31 -121 55 -91 -80 127 127 66 -36 3 91 -65 20 -9 19 -38 -44 10 -88 127 79 94 19 15 -31 127 -66 -26 60 9 -100 -1 -82 79 -56 13 -18 -10 81 -99 -128 81 15 49 -117 50 -28 12 -13 124 -76 -41 34 108 26 52 -115 77 18 41 53 74 -49 0 -89 -126 -85 3 26 -92 -126 65 -66 -25 -34 -24 117 20 -121 58 65 117 123 39 123 -26 -22 -1 -85 -48 25 -79 -52 -77 -21 -112 106 -124 127 78 -48 126 -20 -128 114 -109 -72 -33 -125 65 -73 -85 13 -33 -31 125 45 36 -15 60 -37 32 -62 -66 66 50 20 -89 127 124 -46 -70 -79 -69 74 -90 124 33 -55 -62 68 29 95 -117 -3 -127 79 35 -41 8 123 -103 61 92 14 77 28 16 12 -35 81 -12 -3 -87 -31 43 -32 31 -63 -128 -59 -67 -38 -63 -52 -125 -33 125 11 -36 -13 -32 -8 -54 127 -120 -2 -27 -113 18 -26 -7 -74 21 -117 -72 -96 56 -98 -31 -60 52 -19 4 15 36 -70 -58 -25 -125 -5 18 -5 -109 -44 -86 -25 -6 -126 -58 39 -32 -87 29 -99 103 70 117 127 -110 -90 -10 16 28 33 82 -66 58 -66 28 109 -119 127 108 63 127 68 30 -41 20 -63 110 -15 31 57 9 -38 -55 17 -114 37 125 -52 -104 -3 61 -127 88 29 -121 -68 14 -93 126 -9 78 -18 5 126 -10 -58 -102 -10 -32 36 -31 -40 -16 53 -78 113 -28 11 40 123 0 77 68 127 55 20 52 -18 51 -18 3 40 41 -10 124 -15 89 -69 52 -18 121 -81 -74 -18 -30 22 124 -95 -2 -47 27 -23 59 108 -127 62 68 -43 125 20 -53 -41 -32 -59 40 56 -39 -98 -29 62 39 -46 29 -65 28 -20 -118 17 61 9 62 -20 62 -30 -84 -62 -43 -47 40 122 -108 -52 51 -128 39 127 -62 126 -42 10 35 -20 127 -44 127 39 49 38 2 -124 -124 -19 37 -7 -3 127 -125 7 -127 -106 39 -76 -68 -93 27 -127 82 123 29 -100 22 26 46 -20 17 4 122 -22 -11 -18 106 -107 -28 -67 71 69 127 -63 77 -39 56 -26 57 46 1 19 127 0 -127 -59 92 0 32 126 -64 -23 15 95 -68 23 16 83 -53 -45 102 104 -20 -43 126 -9 1 48 -27 -126 -32 7 4 -52 127 -5 79 -50 -14 -126 -67 70 -117 -59 -54 70 -19 112 -115 -118 -126 -125 21 -16 -127 -36 126 118 -106 13 -80 -98 9 -55 33 -93 -24 41 -17 26 107 7 -32 15 -127 22 108 -81 -113 -128 28 -113 -58 10 -29 -101 -106 85 -4 -125 -114 -108 32 -113 23 -92 44 -102 1 -81 -125 12 39 -94 127 -122 -53 -108 28 -58 -83 -128 55 -48 -123 12 51 83 9 -127 45 27 127 126 127 57 -12 124 21 -54 27 67 126 -109 85 23 -72 14 -60 124 118 112 20 119 -67 38 44 124 -127 27 12 -40 -122 -15 10 46 -88 122 26 -45 19 18 -23 1 127 45 69 -102 94 -50 -44 -24 -11 -35 32 21 63 -80 -22 18 109 -29 114 -118 -56 120 4 -45 21 33 -27 75 76 -95 -14 -120 124 -35 -128 -55 127 54 2 41 -77 -3 -91 -55 -102 51 110 -41 -69 88 104 -80 -1 2 89 26 119 -12 63 -128 37 39 -76 59 -107 126 10 -127 125 -68 19 -45 18 -94 -1 123 126 127 -9 -20 94 39 -121 31 -1 -114 5 127 125 80 22 -45 33 -42 123 48 4 -16 -127 -56 -119 30 -116 -5 -33 65 40 -2 125 22 112 6 -78 67 -119 127 -73 49 62 127 -104 25 -21 -127 -81 40 12 -62 -119 -20 42 83 -96 -128 92 -40 -43 24 75 19 38 -41 -59 -98 -93 -99 -51 -18 -33 19 48 11 -6 -42 31 94 127 -72 84 -123 127 -47 108 93 57 109 111 111 126 53 -82 13 -104 87 127 -115 116 30 21 -8 78 29 -19 -38 116 -31 -46 63 111 41 -44 -48 -71 -33 6 -63 -4 -99 65 -23 52 27 -82 -110 26 26 104 96 -76 60 -100 -119 -118 -124 -128 77 81 -77 -93 121 -101 88 -74 55 -25 7 -44 26 31 -79 39 -2 29 -1 112 42 -3 127 -54 38 -50 102 -125 -95 -79 15 -106 6 -18 -92 127 -87 16 -6 127 6 24 -55 -45 -125 52 69 5 -45 -128 74 45 122 -56 52 2 54 -59 69 23 5 17 -44 62 36 -52 83 39 -94 2 -16 12 0 -127 -110 -128 -15 123 -18 41 68 -105 -104 82 -23 88 10 126 -124 -36 1 2 -6 120 119 40 88 95 96 -62 31 107 70 123 -107 127 -123 58 96 19 106 56 -111 -125 -47 61 79 -82 -26 -124 -8 -47 -128 71 62 125 -47 -66 79 127 124 -106 2 70 -5 -127 28 -1 80 -128 -14 -83 -115 113 122 127 -128 -52 76 61 -127 82 -34 11 120 115 -109 119 -127 127 60 40 -9 -51 84 -20 -122 123 -43 -57 121 22 24 127 72 88 -21 -7 -121 94 -35 75 13 119 37 -127 8 -128 -127 40 65 -90 -128 -127 -51 -126 -99 -118 110 -52 121 11 -124 -80 -11 121 -9 -102 12 89 56 -68 -25 67 -79 71 6 57 99 -51 -18 127 23 125 18 89 -40 123 -45 30 126 -15 -124 21 61 -5 -125 -73 -51 -27 108 76 -42 -2 -126 101 -20 56 -44 -14 117 126 -127 -122 48 -127 12 -49 -109 -102 35 13 -39 -49 108 125 35 -104 95 68 -57 22 -122 34 119 -94 -117 92 -64 100 -2 21 -127 -84 -2 -100 95 24 22 5 8 61 88 72 -128 12 86 90 25 -10 23 76 2 100 -18 24 -20 -127 -2 -14 -88 -30 21 -2 65 36 -96 -128 121 -66 -91 126 123 -11 -19 -117 -53 37 -116 -123 -73 -122 -128 -50 -18 -62 108 -44 -128 -125 88 68 126 -126 23 40 -62 -121 -20 11 -37 -48 -117 -34 108 -90 -121 -24 115 -21 27 -7 24 96 24 41 -128 -80 -55 2 124 -127 -103 31 32 -127 51 29 -9 126 -77 -13 -30 -24 -73 117 -123 94 19 29 124 -90 -56 -126 -12 -71 -114 -74 127 -121 96 -111 -117 -47 -128 30 -125 -45 -17 84 127 120 -45 88 95 20 -126 15 30 -87 33 -61 -68 127 70 -117 -77 64 110 127 -68 -41 -126 20 67 57 -1 -123 43 -62 80 121 -17 -124 -20 114 123 11 127 39 -46 -59 34 54 -69 33 96 91 127 -120 -64 96 -63 -15 -68 -95 49 126 -58 123 -72 4 127 99 -115 -87 -119 45 64 76 127 112 -117 54 -125 117 50 -122 127 127 -56 -128 -17 17 1 -8 16 -58 104 -120 99 -9 -27 -122 61 126 34 41 -4 -100 -66 101 118 -119 127 -123 -123 54 82 -126 38 118 -98 -30 -29 -11 37 39 -77 127 -38 5 -17 -127 94 -55 10 113 -75 127 53 -7 127 -3 113 -111 -62 76 5 -99 -112 -81 -94 -21 108 -126 -31 -106 125 -49 -98 -128 90 -35 101 -39 -76 114 74 60 -18 56 127 78 -81 -43 -106 114 117 -124 127 -26 86 -22 6 48 44 -108 23 120 114 80 -70 124 65 -19 48 35 -127 -96 15 10 127 -106 -118 97 58 41 127 122 -128 -127 -98 62 -22 -127 127 -18 61 -120 127 -101 32 -12 92 -80 -127 -82 -43 -62 127 -4 29 59 5 -79 -113 119 118 -29 12 69 94 -16 47 42 -95 -127 -45 -88 -123 13 12 69 -12 124 17 -62 3 25 -127 -45 104 71 -94 119 16 24 117 -66 -122 -78 31 55 65 127 -30 -1 127 23 26 111 -115 -21 71 -66 127 6 112 46 -127 -101 127 -59 34 -123 127 -115 74 -60 37 82 17 71 35 126 112 -26 -92 126 83 38 -81 75 -68 63 6 53 71 17 76 -10 70 116 -44 -87 80 26 126 -36 27 41 -6 127 -48 44 -51 23 16 -86 14 -49 -50 -49 -47 -103 127 -128 -60 97 79 127 123 124 7 -90 -4 126 -18 -108 -29 22 43 -121 -127 127 119 -123 122 -128 -43 -125 -30 -78 124 -18 82 126 83 -86 -126 126 114 -127 29 121 127 78 63 -38 13 8 -101 114 120 -127 -124 127 55 -2 -54 61 -35 123 -63 -38 126 -7 -106 69 111 -28 -86 109 -72 -65 5 117 30 -108 77 26 -38 55 125 41 13 -113 -64 117 119 44 -48 -115 -118 -22 -15 -12 49 98 123 -29 -31 46 -123 -83 -71 -119 67 80 57 -53 -106 106 -9 127 -87 -9 72 33 5 -117 -19 -38 -45 29 81 79 34 -2 -126 95 80 60 14 -49 -11 119 -127 -5 -48 -67 67 45 82 -64 -73 -120 -48 -88 63 -46 -69 -58 -10 120 45 117 -125 -16 10 127 91 85 90 60 -110 -1 3 -50 36 -20 117 -38 69 -125 53 -125 101 -113 90 -126 5 -19 -69 49 44 -19 85 73 105 70 61 -120 62 -17 59 82 117 -69 71 29 117 -12 15 -31 13 -74 -47 50 -23 -52 57 90 -58 -65 40 106 -53 14 72 -87 53 55 114 119 -96 -128 97 -125 -53 117 -113 15 127 -1 109 -59 -107 127 -125 -8 126 64 27 127 127 27 -49 -73 -83 99 98 -116 85 -102 127 104 -40 127 -18 119 -9 30 123 -77 -81 -73 5 -11 103 -36 74 -23 -127 42 29 28 -70 87 -56 23 116 39 -80 -120 -80 23 124 68 95 -37 127 -107 127 62 -68 27 -66 -126 7 -15 11 126 126 117 -8 -110 127 127 38 -127 -83 127 20 -20 -25 24 71 44 -53 -49 -42 98 111 123 112 -128 -2 -7 124 -78 48 89 125 -122 127 -74 126 84 87 85 -67 -20 88 -25 118 36 -41 87 120 -40 -122 66 66 -78 -1 127 -123 -60 -103 54 -56 -128 -61 -117 -120 -45 103 85 -105 86 -118 -35 -122 -126 -122 99 127 -51 73 118 -125 127 -60 -66 -41 -28 -86 -35 41 120 -39 126 -122 56 -104 -39 -95 -19 6 118 -91 42 39 77 -50 -41 10 -96 18 38 42 79 -35 -122 21 49 -118 -124 -109 -61 94 -126 -30 127 -31 -103 109 -76 40 -69 5 24 34 42 -3 125 59 91 -12 124 -121 -72 13 -82 -17 90 49 11 -25 -116 127 123 0 1 -57 50 16 82 81 -121 -122 36 73 -126 12 -111 14 26 126 -37 -9 127 -24 -127 44 29 22 -21 14 116 73 107 -38 127 39 -7 -92 111 60 97 -94 -78 70 119 -124 -118 46 1 -25 77 -10 -116 -122 -125 35 97 39 -125 -86 -128 43 -14 127 -94 -70 -8 -87 127 -121 26 79 -32 -105 -8 11 -43 -16 -73 -31 6 -24 -112 66 -25 106 -73 -7 -127 -98 126 127 113 -127 -123 -102 -125 -65 20 -60 -128 58 74 -89 -53 -106 -59 52 22 -127 -35 127 115 -51 -8 -39 -6 -90 117 -127 22 -32 127 25 -128 46 -11 -11 -127 -107 21 -51 38 118 -27 -12 100 10 -42 -111 -54 28 -63 -22 38 -43 -67 40 -86 123 -125 -33 -90 -64 -107 -127 -124 -125 47 118 -14 -40 -55 45 -54 -26 -111 -93 -124 -122 51 -128 -12 116 18 -121 -21 67 -15 -83 -128 68 65 -55 127 43 107 -45 -128 72 90 -128 -6 -118 -128 36 119 127 -125 -128 -98 -49 -65 127 -46 61 60 34 -24 23 80 92 -41 -5 -79 -95 -26 -38 -87 -37 -1 76 -127 -44 -14 121 -12 -122 2 47 -21 47 5 -26 -29 -24 -63 11 20 85 25 -92 -18 73 28 -57 74 -53 -2 30 36 -19 -107 -18 -79 -25 16 118 32 22 -118 71 -41 38 -62 1 71 -17 1 1 94 94 -59 1 -17 107 68 39 -49 24 0 -91 33 20 11 41 -32 33 -9 0 39 -13 -115 -52 -83 -4 12 68 -50 63 16 -29 -29 127 -12 127 -58 119 -46 -5 -128 76 -27 18 34 -47 22 21 -121 -63 -23 -39 58 40 21 -5 36 15 25 -77 72 16 4 -18 -14 -81 54 -16 -128 -16 -127 64 -16 -15 28 126 25 8 7 10 53 26 -95 -106 -7 -62 -69 127 -13 54 52 -101 -21 -7 -27 -32 -76 82 8 -97 -17 -127 28 22 -41 12 122 49 31 -32 87 -22 -18 -37 -16 14 -16 -57 75 114 -92 33 127 64 -53 -56 -127 -32 -47 -1 -53 -22 4 -96 50 91 112 24 109 127 109 100 -67 50 111 85 -88 43 -71 -50 -33 5 127 7 66 -125 -61 52 -44 14 -49 57 -54 -127 -27 12 29 59 -128 -117 -52 -81 -28 -97 12 -127 -20 106 88 -100 45 -62 121 78 -107 16 -113 71 -20 46 41 18 -34 21 -8 55 -44 48 -22 4 -119 50 111 30 -65 115 -47 15 74 -101 8 55 -68 72 -54 101 10 26 18 62 -63 56 -40 -35 4 -27 -58 -6 48 56 21 20 63 -91 21 -12 79 -53 3 -14 12 -99 -23 -127 -17 110 6 44 15 -28 -111 2 -42 -90 -39 -27 67 32 66 47 -66 -16 -52 37 -53 12 21 124 71 -81 69 127 -113 21 13 -117 -5 -45 99 -4 -30 -39 20 -17 62 -1 -126 75 -32 43 55 -12 95 -40 -13 -17 -26 -20 -65 53 11 127 -60 61 122 -110 -26 52 65 108 83 12 127 67 120 -47 47 27 93 -47 -26 27 55 28 15 -126 74 -69 122 -69 -64 1 -88 112 13 8 73 -7 -96 -27 -108 -74 -78 78 109 87 53 -11 -3 -36 -52 -35 -17 -65 -15 -9 30 -45 -17 27 102 -120 -27 -118 -71 17 -76 100 64 -80 54 16 81 -37 -118 -30 63 27 53 119 -74 -57 -88 -92 -52 -16 64 76 81 104 -26 -4 68 -54 -127 -48 -113 4 19 25 51 -63 17 99 47 -74 127 64 -73 -58 16 -5 80 -127 -57 27 57 115 122 -59 -6 67 127 31 -120 -44 -52 -126 28 -51 25 115 97 80 -107 55 65 41 71 19 -9 20 -104 35 -99 127 72 115 23 -42 -128 3 45 -55 3 45 -126 -125 -120 51 126 -40 42 110 -60 -95 -39 49 45 52 -71 -122 113 -100 -98 127 -78 -102 31 -20 -63 -128 -57 79 -4 -17 88 57 -32 -23 -117 15 -45 124 -67 56 -16 -50 -39 -79 14 -86 9 -3 56 -112 41 -102 -43 127 -48 -108 -29 -95 88 -46 127 42 71 127 76 54 -104 84 29 -123 34 -13 -44 92 76 -86 -99 15 -68 -120 -119 -99 -128 25 -20 -25 84 -62 59 -48 -34 35 -55 -114 2 67 -128 55 -69 29 -122 -10 72 -125 -31 56 120 -113 79 127 127 -85 -62 39 69 -107 83 126 -11 -106 58 -73 109 7 -25 -52 40 63 11 -101 -50 83 111 13 123 -35 34 72 83 93 78 -50 -40 127 -71 -94 -46 -29 55 67 35 -120 -70 126 94 -34 -9 52 4 52 -11 26 -8 29 -10 35 -22 -34 -24 -19 75 41 -56 55 26 -122 47 -119 -123 36 127 -45 -106 42 28 -90 -9 -76 91 -8 -19 -28 124 -120 51 61 59 -10 -90 -4 15 16 70 123 57 113 44 -16 89 -47 6 -19 37 -80 -25 48 92 83 2 -119 67 -41 -6 127 98 42 -121 -93 -7 -72 -14 -121 125 -58 4 80 -101 -27 51 42 14 73 54 69 -127 127 -128 127 -80 118 91 5 -116 -48 -1 81 -11 -2 -127 -126 -32 -99 42 121 -25 -114 96 -64 -63 126 -50 90 50 -54 81 41 -22 -114 123 -107 -99 -125 37 6 -52 115 110 38 127 102 51 -56 71 12 102 90 32 -47 -3 31 83 123 -75 127 77 110 127 37 115 -58 -61 25 -47 124 -2 -61 50 44 64 -8 95 -78 -95 -36 -127 -123 7 21 124 -3 115 -58 -25 -120 124 -12 127 33 36 -83 54 115 -13 6 108 -10 -4 -28 -9 -47 -14 38 -24 -78 33 37 24 -76 61 5 8 95 40 -53 -22 32 11 9 -45 64 -68 -52 -21 17 -51 -89 67 -34 116 -127 -4 -35 -26 -53 -2 72 33 8 42 23 3 50 -114 19 46 6 -84 -17 -111 44 117 28 -30 -29 -127 -41 -5 -31 50 78 91 -65 -11 20 1 -26 -36 79 -9 -14 -7 127 26 -126 33 59 33 28 -51 46 42 -6 -40 30 40 -63 -15 8 -21 95 64 101 46 11 -57 -103 50 -1 -54 92 47 -37 -37 -43 -42 -113 -58 100 -26 -38 21 87 -17 108 -64 -45 -27 -118 97 -15 7 3 25 52 47 -121 94 -28 -119 -73 44 -70 -66 42 30 12 88 125 -80 13 18 -4 -28 52 16 -45 -88 -21 115 -83 61 -41 98 -5 -41 -42 61 22 -58 -122 -16 9 -38 -36 12 -87 39 92 88 -71 -23 36 1 -19 7 14 61 30 34 -77 -10 -17 -18 70 18 -78 -104 88 38 -115 11 89 81 -104 5 32 -15 -2 -29 43 -100 90 35 13 -102 78 123 -65 57 63 12 8 72 -71 -101 -38 -1 -5 -64 -30 5 124 -42 -34 16 56 69 -5 -5 -46 -27 78 -17 43 -21 50 54 -60 61 96 7 -59 111 62 13 12 -2 -3 32 -37 48 28 -8 75 -25 50 19 52 87 9 -62 43 -25 69 126 -37 -45 48 -37 -10 -20 -52 56 -23 -4 18 66 13 36 72 -13 9 66 28 -124 -1 36 -76 -36 -65 56 41 -35 -10 26 -22 -69 22 -97 70 -54 -1 12 26 92 -38 109 -85 83 -12 -29 1 20 -51 27 -27 -106 33 5 47 43 19 -103 -22 -12 63 -62 33 -61 -104 -13 32 -38 127 -27 4 -46 -3 -115 -74 -27 -50 45 2 5 -4 -51 -92 -102 29 -15 -14 29 -42 68 43 -10 15 -19 56 -37 114 -9 51 -65 -114 45 -64 -101 -40 -45 -10 -69 28 5 72 -101 -118 52 123 -23 8 69 6 12 3 14 -16 -33 32 -62 34 -13 32 122 -81 -72 -7 -64 -10 -5 89 25 -19 -20 70 -10 -43 -88 8 -56 -34 -90 89 -68 -25 12 45 121 16 21 46 24 94 74 44 -37 -40 -60 50 19 28 -112 -82 23 -4 127 41 118 16 63 -35 44 -86 47 -94 -103 10 -11 -48 -56 109 -39 16 54 72 127 30 90 125 18 -127 -46 -7 -83 -19 -43 -92 69 47 -12 -111 -45 120 67 108 126 -55 -107 5 -116 -89 -120 38 -7 -106 15 -8 6 40 32 34 125 -19 -75 -17 123 -24 32 24 -107 109 -105 55 -32 88 61 -83 -89 -108 31 -65 -28 -28 -22 -70 114 127 100 29 -11 16 48 20 64 -45 109 41 -38 42 16 79 -54 -40 -50 127 75 58 40 60 39 -100 -26 -20 -57 -55 -32 71 123 -23 21 21 -10 75 97 -112 -26 -16 98 6 -14 26 -43 -13 13 -12 36 -80 10 5 25 -90 -47 -48 -54 -55 15 36 -81 89 83 1 91 -69 67 -62 -126 -15 -26 33 -125 -22 127 24 -73 -117 8 81 -53 -13 -8 48 33 9 26 102 -66 -9 35 127 -95 -19 6 -5 -1 -20 94 -19 -29 -41 47 -8 -120 -53 -36 -70 8 120 -125 -8 92 -75 126 -40 65 67 24 100 24 -3 -45 -87 -48 -20 10 19 127 -42 60 -49 64 127 114 79 3 8 -127 124 -69 -62 21 -20 1 -62 44 -24 -10 95 12 44 85 -36 27 -3 62 -31 -41 105 -77 -47 7 -45 35 -70 -20 -10 -27 -13 121 -9 14 -64 -95 -105 -8 -7 -98 -48 -79 -62 52 94 24 -88 -43 -80 120 -39 -114 -4 26 108 26 63 18 10 -42 2 -74 13 -52 -54 -79 0 -120 50 79 -118 75 5 56 25 4 -97 0 -108 -125 -42 70 87 -64 43 38 16 42 24 25 -28 105 30 52 -93 62 -52 63 64 72 19 -80 -7 -54 99 44 79 -96 29 -33 -106 43 42 70 -56 4 97 44 -128 -9 116 -57 -27 -72 106 22 -26 -67 -8 120 -22 38 24 -72 20 65 62 -128 -94 87 -97 -4 -6 74 -116 -63 45 -2 -71 6 76 -6 -5 33 -98 -40 114 -98 95 37 104 70 -1 10 34 -18 68 120 -64 38 58 15 -14 -29 -5 22 90 31 28 -78 21 -30 -49 -14 120 89 -92 33 -48 -25 4 15 -57 -111 41 102 1 -6 -81 75 -38 -65 122 -128 29 53 -60 127 -96 -64 -84 -80 -125 -128 -39 -124 -11 -121 -59 77 -110 0 21 -117 24 64 6 -29 -123 32 36 -57 -30 5 17 -106 35 62 -128 60 -16 -57 -123 -32 -10 80 -74 -22 -24 41 127 -128 127 -128 44 69 116 93 -118 -30 -74 -125 -42 61 20 -45 -36 16 -127 71 31 38 15 88 -124 -39 69 123 74 -120 27 63 -10 -64 -98 53 118 127 -83 -101 39 127 -23 -30 -113 -105 -124 10 9 -127 -75 -11 29 -77 127 3 -5 -46 -105 -127 26 43 -70 -128 106 -96 -13 40 107 27 57 9 -90 65 127 95 35 -42 -96 -34 -86 123 7 85 125 -126 -33 -128 126 41 -127 -128 8 -3 -117 -45 127 -122 79 46 -50 28 -101 4 -19 -44 -116 -128 30 -77 -38 -80 67 33 -121 -43 73 -119 98 70 39 29 -22 -46 56 -10 -24 -18 116 6 1 26 -128 75 -32 -22 -35 13 -36 -26 59 111 -73 3 126 -128 126 -122 62 -3 22 0 -64 16 101 15 10 -62 34 -38 -82 -14 -127 37 -12 -56 -93 42 -115 107 -42 34 -120 -98 -50 29 -79 92 -121 -89 126 127 0 -115 101 127 -13 26 -123 10 -61 115 85 -126 17 -23 125 -13 127 47 -48 -51 -123 -124 -38 104 -62 -127 -89 -90 -9 13 89 -86 -44 48 -116 21 127 99 -70 3 -8 -21 4 -84 125 -127 121 87 54 -128 122 107 -56 -75 93 -16 -118 66 56 127 123 26 10 -29 102 25 -47 85 -4 64 33 115 -44 83 3 12 92 28 52 -49 61 -33 -52 87 127 9 8 -45 89 65 124 121 -128 79 71 -66 0 123 -34 -92 101 91 127 0 123 -9 126 -58 115 -69 13 -34 -108 -111 -67 71 115 126 79 68 81 123 72 -60 53 -119 -15 -37 -74 -22 102 113 -128 -127 96 123 -103 -46 -50 -52 117 111 -30 -88 19 -49 127 28 20 79 95 97 56 68 100 73 122 -109 109 34 -53 110 -2 15 -27 117 111 -24 -39 113 -105 88 29 -53 123 -124 -15 4 127 57 -126 -59 -66 -5 -22 119 127 -126 54 33 -127 17 100 107 -127 18 3 11 -28 22 14 94 116 20 29 -20 123 37 -3 -42 -24 85 -55 72 26 -78 29 -5 -100 126 56 105 -23 -66 -10 -27 49 120 59 26 -47 -101 -127 -104 127 -9 -110 -32 121 72 124 124 -95 -128 95 -107 -28 -111 -77 36 127 -127 1 -68 -62 78 6 -126 -62 -74 -110 -34 -106 118 -52 84 -43 19 -34 -124 -119 127 101 25 -23 -9 -127 -39 123 91 64 -51 -56 -122 61 72 -70 -48 -9 -17 84 76 -128 45 101 21 -119 126 30 44 -27 -21 -122 22 127 55 -54 92 31 -28 38 -27 -47 60 38 48 70 -21 46 -27 34 -14 116 -30 -109 102 108 46 54 90 120 120 -127 38 -127 -33 56 -1 -125 34 -33 8 -5 -60 30 -1 121 93 30 69 65 14 -128 104 -15 -41 84 -29 -45 -10 94 -29 -37 -28 57 37 125 -110 44 -56 123 17 -7 -33 -84 43 -127 38 93 -128 33 -125 121 -85 27 62 -62 -128 -53 -42 -36 -123 105 112 127 -94 -39 -92 -37 67 18 -122 -56 55 -92 36 5 96 -45 0 -120 -24 -62 -90 -119 3 28 -1 -126 -28 -94 -96 109 -93 -2 -34 -74 77 -66 127 126 13 -31 -8 -86 -128 12 55 -58 -37 78 86 8 -30 48 26 -74 35 127 -16 -51 33 -9 -3 54 11 81 -19 18 23 41 6 22 13 16 -8 -81 -118 47 26 55 -70 -59 -82 51 66 25 67 -59 16 16 0 32 -1 4 61 26 -90 -39 5 32 105 -47 50 33 -118 104 -33 -118 -5 -49 120 22 94 7 127 -124 -115 49 -100 65 -116 -49 -58 5 -14 -18 0 -111 31 50 -40 -53 -128 63 31 53 -120 32 -19 74 -77 -12 9 -111 -68 119 -62 127 -67 89 -115 40 41 99 -75 21 116 -28 55 49 -50 -50 9 -37 21 81 -6 53 125 -30 -69 36 117 -113 -101 18 26 -44 1 -117 -38 -95 126 126 53 78 127 -60 -58 127 17 5 -23 55 -36 24 15 5 41 -96 35 54 0 -22 27 86 41 13 10 68 -24 0 114 118 38 17 9 54 -60 -31 -56 -8 -47 -74 63 35 73 -17 83 -36 -33 -44 34 -27 -30 -94 66 38 30 30 -14 32 -1 -27 -32 -97 8 -51 -6 -13 6 -15 38 71 45 110 -16 34 -53 73 23 31 25 -14 19 -29 -76 34 40 -3 -21 61 -9 127 -14 -12 126 47 10 71 37 -8 6 127 -36 41 -32 16 -17 15 -45 6 35 39 -63 47 23 -53 11 104 2 32 95 10 106 -38 -14 -120 35 22 93 21 77 85 -7 -36 33 5 -37 -33 29 28 -25 -86 -110 65 41 -7 -66 -3 49 11 -17 106 41 -29 -13 -3 13 1 37 56 -28 -29 -1 -35 62 2 -21 76 49 -122 -39 -3 -23 -66 88 -19 15 35 14 -29 -4 -41 32 -20 -13 -48 51 4 8 -22 -123 31 -17 19 8 2 -3 -110 8 2 55 23 -59 18 -49 4 -21 89 4 41 -16 -27 14 -12 -57 23 63 19 41 -12 5 -72 -32 -17 -27 -73 -42 22 86 -78 -125 -20 31 -12 -3 -51 13 -53 -102 -51 27 -21 13 12 57 -30 -82 6 -28 28 16 -69 -15 12 -18 45 35 52 10 -55 -122 -33 -29 8 -54 -8 -9 60 -49 55 -62 26 38 8 -22 31 -17 -22 -48 -18 22 0 33 68 36 -32 -2 -24 2 -27 120 -26 2 42 -28 -14 25 -20 -20 7 -10 -12 33 -67 -42 7 -128 -5 -7 10 -15 42 8 7 43 -1 -39 -39 -16 -45 -15 1 31 36 -7 -88 1 -64 21 -19 6 -40 -11 2 -28 -16 -24 -25 -11 -50 46 -1 61 -45 -15 62 --65 -18 10 -5 -42 31 -1 77 22 -4 82 6 -64 -31 6 -7 89 -78 -119 -45 20 -93 64 17 -17 99 -39 -30 22 29 -55 92 23 33 60 43 68 115 -38 49 -8 86 61 -25 5 -59 -35 -6 -18 8 -6 28 37 89 -44 51 -22 -23 -20 -68 -38 104 12 4 40 13 87 71 -91 99 -29 -23 48 52 38 -2 -76 -45 -39 -28 -92 -2 -8 103 -27 24 77 68 -27 58 2 -26 62 22 -27 22 -33 -14 74 48 53 -13 45 94 13 -27 -4 -4 93 -10 -75 -19 9 94 -39 -10 30 80 39 -35 -61 -55 -39 -39 -65 12 67 -59 74 -19 53 40 -61 115 -61 58 -127 -7 -33 -44 58 3 46 29 -65 -1 104 -8 -18 7 -75 55 -13 82 42 -37 22 29 -82 3 -63 51 -31 37 45 48 31 -48 26 -7 -5 19 -60 83 -3 29 -50 -20 12 -128 -68 -24 18 -73 -56 29 32 -55 30 43 11 -5 93 -32 105 5 43 -6 66 15 -11 -38 70 -15 13 -66 -77 -40 -85 -44 -7 120 -31 46 -43 26 0 -13 -13 -45 -116 -49 -6 102 28 -19 -58 -10 19 -29 -27 -51 -8 -128 -56 -14 -127 1 -9 55 95 110 -4 17 103 -18 -38 25 43 -102 -20 48 -127 29 -18 48 56 -41 -36 -1 3 4 -46 -67 69 60 42 -12 0 20 -67 31 -110 3 93 -17 5 -91 -21 33 -15 15 -28 -61 -55 -60 -31 -40 71 -34 95 7 -12 84 8 7 10 93 52 27 37 77 5 -2 -28 -23 -1 110 127 82 -41 75 67 71 65 55 29 -82 29 70 87 -23 22 -14 23 -62 41 -39 -17 20 -16 33 -1 9 -25 -35 -27 -49 5 -97 -33 23 -8 59 56 12 -75 -26 -26 69 52 66 57 29 -18 -25 -11 25 -40 29 14 -52 -25 -85 -27 -24 -36 -74 -19 -116 -71 53 28 33 -37 58 8 -25 -18 95 7 -27 83 35 -23 -26 -10 -35 54 58 21 -78 68 10 47 41 -81 48 12 51 -18 20 -9 61 19 -26 16 -98 18 40 -11 -65 36 -67 40 33 -14 51 -26 -52 0 91 59 -66 93 37 -69 -127 -25 -35 -16 -110 -10 -69 -23 -54 5 -58 29 115 -29 -18 -28 -34 -25 -6 31 3 39 16 -32 1 2 70 -20 -24 -4 122 15 4 100 117 -64 16 22 40 -34 82 -18 15 37 94 23 8 99 50 -20 42 27 7 -23 -34 58 -64 -11 34 -23 43 48 104 84 -22 -63 7 23 27 -28 -93 19 -29 67 -69 9 -20 -98 6 38 31 0 22 35 9 2 16 7 16 48 -24 -86 27 -45 73 -116 26 16 -21 11 42 57 -125 46 11 52 4 -46 14 -69 16 69 30 6 -23 -82 -31 109 -39 -63 -30 -127 -30 -68 44 -89 -47 -24 -3 8 9 31 -43 -54 -40 -51 30 21 -63 15 6 -107 11 -88 -128 -22 -122 -17 67 71 4 94 -4 -36 -31 20 -22 -50 -5 22 37 -65 34 22 -44 7 39 57 67 -5 -9 65 21 -31 -99 28 105 -115 89 -59 1 66 -46 52 -57 18 -35 -47 31 -27 -24 7 -80 -33 57 54 12 -15 -4 -60 -81 9 -5 -23 41 63 -122 -77 3 -57 74 -5 -9 44 -102 39 18 -8 0 -31 61 18 -18 -87 -36 -31 33 -106 -13 52 -80 -8 -14 37 14 -34 -8 -22 -45 6 -58 13 8 59 7 16 6 12 -5 57 -53 -44 59 -13 -92 -28 18 -28 11 64 -51 -7 34 23 -72 38 56 -21 -91 -44 9 -25 52 24 -39 7 -35 11 11 -7 -24 13 -4 -23 24 24 -87 -17 -59 -11 43 22 -84 16 -39 6 3 72 -20 47 82 -10 -54 -11 -55 83 -28 -5 -29 67 60 -38 -83 -120 14 -46 56 14 69 4 -57 44 16 -8 15 -23 -35 -55 -65 -21 9 50 86 -54 69 124 114 -128 5 24 17 -46 -3 -105 29 91 14 -7 -32 -46 69 33 -12 78 -3 -25 19 27 38 85 33 -61 43 54 45 -93 30 47 9 -26 -68 -58 33 2 -61 -95 29 38 -19 -2 90 26 48 55 -48 12 42 50 23 -80 59 -10 75 -31 19 -125 46 -74 66 -6 44 -115 86 -67 0 2 -87 -37 -53 47 13 23 46 -70 10 -37 -45 -66 -2 -38 -9 -14 -74 -1 22 28 -36 -48 -1 -31 68 68 44 46 -63 1 89 44 114 21 2 17 -16 -61 -24 53 -38 -33 -4 25 39 -52 -61 -15 -72 -42 -41 71 -65 20 63 91 16 9 -38 13 -40 -39 25 42 48 1 31 -97 46 39 -17 64 -56 -1 -42 46 2 67 18 -15 25 -6 -61 -13 -45 24 0 -71 -128 -21 -83 -31 60 -25 40 -24 63 -50 -116 29 6 9 -38 36 39 28 -20 -17 34 38 -56 18 29 -75 -28 -25 50 12 46 32 21 -1 123 -50 16 -13 79 79 53 -32 -50 24 -1 -5 2 -6 -13 15 -125 1 19 -6 0 -44 85 9 20 -65 0 -23 -25 84 61 -4 87 39 69 36 40 32 16 -2 -8 52 -46 32 -6 9 -24 -8 9 -60 -34 27 -65 82 -9 106 96 -106 -49 -94 5 -12 -12 -19 -12 102 23 -72 -36 3 49 2 -39 101 -11 -27 -73 -102 -46 16 -102 -56 59 -111 88 92 32 113 97 -80 43 105 53 63 -40 24 -51 113 -54 -121 -41 127 9 22 73 127 77 -36 -45 -76 -73 3 14 58 4 39 58 43 -33 43 46 41 -43 -111 -82 -59 -28 -83 -123 -30 26 8 36 -15 -44 -4 127 49 -24 50 63 17 32 -56 38 38 22 -26 49 67 29 -25 51 8 30 -36 1 3 54 44 -29 -104 -104 -128 -3 114 2 -120 48 -114 6 41 64 35 68 23 -49 -6 12 -22 -52 -22 20 -126 -5 -11 67 -23 -68 -59 47 -35 -55 3 -10 25 -38 92 -28 -16 3 38 16 97 -59 -49 21 -127 5 104 45 -72 39 113 -21 115 3 -93 -16 -102 -42 17 43 -60 32 -71 78 62 -8 89 59 13 51 -4 20 -33 -3 -106 42 8 -18 105 -79 34 94 34 10 31 67 48 4 122 21 -46 24 22 1 48 59 11 60 14 5 23 3 -17 7 -43 -72 6 -1 -62 -87 -9 -28 -25 57 92 -36 -11 -38 31 19 46 -27 32 -11 4 35 -59 53 15 51 -33 -33 13 2 -24 -16 38 -50 -4 -12 -41 -117 -125 17 -116 -10 -55 -45 -32 32 -8 -50 -69 53 -55 49 28 -41 -9 29 91 98 -57 22 -24 -15 26 -20 8 57 21 -123 -32 86 -60 31 -38 52 58 -18 23 -47 127 -9 -59 -45 121 -44 24 -32 24 12 -53 56 98 39 71 10 55 -124 107 105 84 48 74 51 45 -37 -3 59 26 -14 27 -69 9 -32 71 -80 -42 10 62 7 -2 -36 81 5 -25 -8 33 -76 -36 3 -127 29 -44 -6 -45 98 -1 -58 -118 -99 -60 -4 -21 -15 -25 -124 -19 -44 -46 44 49 2 31 -54 64 -66 -19 23 -87 -69 -25 -12 88 53 -13 -27 77 55 21 -48 62 33 18 -71 6 1 -11 34 -40 -35 -20 45 5 -48 64 14 -32 -111 -18 -35 -68 24 -38 43 1 -97 -109 -43 -30 -123 42 60 24 -44 -82 -67 -9 -32 -34 -91 -25 -20 -54 35 -24 24 80 -34 -22 -70 22 -56 102 5 90 18 -39 7 -46 89 -32 -57 39 -33 31 -48 127 69 63 -30 24 -17 -127 30 28 -84 -17 85 20 41 -26 -12 61 7 95 39 96 10 -45 38 -25 -6 -20 -13 51 11 -50 11 54 -9 -10 33 -19 12 64 57 19 -76 -34 -38 51 -13 11 -21 108 -18 45 -19 -31 32 -4 19 49 48 -6 -120 112 55 -56 26 41 -105 20 16 -101 -22 -13 -14 49 -58 19 -102 -59 -32 56 -17 4 41 -82 40 6 51 -71 -6 58 -33 17 -24 -50 -64 101 -21 -80 23 90 -2 10 49 41 -53 -1 -13 110 -46 10 -26 13 113 -61 32 -31 -75 -94 -24 106 15 42 -24 -55 -14 -33 21 -48 -9 11 24 53 -42 0 16 125 -19 82 -1 -83 -72 -33 -36 -19 65 -35 43 -53 56 -14 -36 -16 -56 53 125 -22 20 -5 118 55 46 -95 -24 4 -60 -21 -13 21 -27 7 -32 -2 -17 -2 20 -23 79 114 -10 -18 -65 15 54 -11 108 84 -7 50 -35 31 -89 -12 23 -20 59 -21 -78 56 22 -12 50 24 -48 -24 40 -60 -60 31 -11 -17 97 102 -9 -77 2 32 5 28 -16 -62 34 -109 39 1 -17 36 0 28 6 49 -46 -127 36 -29 61 -35 43 -104 43 41 54 -20 44 -6 -17 -6 48 -8 -65 44 -7 22 8 -30 -62 -24 71 31 -17 -35 -40 19 87 -58 64 110 -48 -33 -4 -68 26 6 -42 126 -119 95 11 50 41 48 -13 -46 31 -17 -24 73 -69 -35 44 57 -61 78 70 86 -76 -44 -22 75 44 50 -41 12 -49 -10 56 114 44 61 -13 6 -24 -23 -2 14 -27 25 29 9 -26 -67 -39 4 47 -3 11 -23 -127 -95 -17 36 -34 -20 -38 12 -84 -45 65 62 23 6 -28 -57 7 -34 3 90 46 32 -68 -6 -39 -16 22 41 -12 -32 57 13 -13 74 4 65 -15 -13 -12 -62 -9 33 97 -50 9 -26 -31 38 14 26 31 39 71 37 -9 -76 -39 86 -9 -58 10 -4 -11 -31 -60 -92 -23 3 94 -8 75 73 0 -27 44 30 49 -41 -34 -61 -59 34 31 17 -41 25 -27 -70 11 7 -13 34 -127 72 19 -43 -66 -5 32 37 19 -55 -20 -2 -69 -44 -85 2 38 45 -2 54 -33 -49 -25 -4 -67 -111 85 -27 101 -5 -24 -102 -62 47 8 13 112 -72 86 37 24 -28 -25 22 61 -102 29 52 -21 -46 44 -11 -58 71 95 106 -10 2 -11 105 -23 15 -41 47 68 9 36 53 42 33 -75 107 -62 58 -43 -42 -11 5 -54 12 -82 39 -20 -80 12 -23 14 -107 33 14 12 -7 24 68 -27 73 -58 -31 -27 -25 16 62 32 -20 -34 -66 30 -21 -8 20 -8 -43 -16 31 -58 30 -7 7 24 -105 -44 23 78 26 75 -97 9 -1 -53 8 -13 -37 -27 -1 6 -85 -2 17 80 -38 -20 0 42 -7 -71 3 -27 -31 7 38 13 -35 -18 -72 -47 26 -14 -72 -57 4 41 -21 17 -16 -38 -38 6 -74 -28 -89 77 -6 43 64 -42 -55 2 17 -22 -3 -9 -103 45 -13 6 28 -63 -77 13 -80 115 65 11 -22 -61 -45 25 2 7 80 60 -5 48 3 -48 -5 24 -52 -57 -7 -85 30 43 -15 28 -40 -33 36 -8 -94 -40 -34 -34 4 -46 -2 15 -84 -5 3 8 -5 -19 40 -33 -96 38 -2 -28 -13 -26 -76 46 -32 22 66 92 18 -45 7 12 -49 -42 -12 2 7 38 -6 -85 11 -22 -20 31 -64 -21 -31 76 46 -41 -92 15 -46 -81 -124 -32 -31 -21 -56 -32 -42 49 60 -72 30 31 24 -14 23 13 -41 -2 35 19 81 -28 -77 -54 46 -38 -126 16 21 -65 25 -65 -5 -13 43 87 -15 -63 27 94 -117 -6 5 -125 -40 27 -98 41 16 3 18 -62 45 -33 -92 12 18 23 -96 -31 76 69 -9 -70 -51 75 18 -17 5 -83 -44 42 31 49 33 -56 -72 -37 -31 -10 -35 -85 -68 -63 -11 -70 49 21 119 24 -113 -25 -52 47 -5 38 43 63 79 -40 23 127 25 -47 -21 62 -19 -49 -35 -77 -77 37 -32 -20 -45 -80 10 -104 -22 -22 -70 32 -6 -64 -55 -5 37 17 -16 -46 34 -12 -10 66 -49 -51 -16 -29 -15 -33 -69 32 -20 -39 11 -41 67 2 -26 -96 -18 61 -31 -38 9 -40 9 2 -31 -33 -25 9 47 19 15 123 66 -48 67 -64 70 -22 0 -10 29 -42 -56 6 27 -6 30 -66 -10 54 -15 57 -45 26 16 19 -4 -74 -28 53 77 68 12 111 -27 23 59 -32 -115 44 -15 4 9 41 -46 31 28 15 -13 -127 12 62 -19 -71 2 22 -19 41 -15 -65 52 -48 -51 -30 16 -44 -14 27 -2 -46 39 -37 18 -29 -36 92 -37 24 -128 -7 -20 -82 -88 10 127 -9 0 -11 42 45 16 -44 106 -9 -11 -14 -109 34 25 33 -49 37 -9 -24 23 -50 -51 -71 -10 -18 -9 40 -74 -4 30 -30 -6 -11 -92 -51 9 -37 27 -55 18 26 32 -64 45 -17 -69 41 27 87 -2 -30 -28 74 13 32 -16 -28 -15 -26 52 10 -48 38 -79 -1 10 30 48 12 58 -37 56 -21 67 69 -41 66 40 77 -1 -25 4 -46 17 14 84 -5 37 29 20 -68 8 -17 49 10 19 -14 -15 -8 -37 -12 -20 -40 -3 -51 -10 35 -22 0 63 127 -14 31 -14 -28 -46 -34 -63 8 -14 -117 32 -9 41 45 19 -17 33 12 -18 26 -12 -19 -16 46 38 16 -60 -19 43 16 63 27 54 -81 28 -2 19 -65 29 -54 119 -13 -6 -29 39 46 -45 9 12 -25 -8 -35 -36 50 -56 -56 -40 -128 4 -65 1 11 -128 -40 -3 -6 26 57 1 58 19 7 -30 26 74 -44 -13 22 -12 -25 -10 -49 42 -22 5 40 -13 -4 95 24 14 -16 26 112 79 17 85 -83 -86 15 36 25 103 40 -10 -7 30 22 -41 32 -15 47 -16 13 54 9 57 -4 -43 -27 79 76 57 60 0 41 -126 55 61 -67 -25 -20 119 120 -37 27 -47 -3 6 -36 57 16 95 35 47 12 -116 39 11 72 -2 6 14 -63 39 72 21 64 26 -87 108 -6 -47 19 9 44 -2 -26 -14 120 -21 -40 18 -12 41 15 37 26 26 31 73 17 4 26 51 -5 2 68 32 60 68 -91 16 30 -125 -18 11 -45 -66 -10 -58 -3 -95 -128 2 42 -71 -29 -27 51 27 -63 -4 52 15 -81 29 105 24 -84 8 13 -1 16 91 -49 -11 -20 33 -28 96 -97 94 28 -27 97 43 51 90 41 -64 34 11 30 64 6 117 0 -32 -125 -106 42 5 28 116 -18 26 60 106 -41 41 81 -31 43 87 -20 39 40 12 13 -19 -23 32 -66 72 -69 26 2 71 -110 -63 -54 -13 4 27 41 0 -69 25 26 30 -43 21 110 -37 -121 13 9 29 23 -58 12 -17 58 67 -83 -69 48 127 73 62 6 40 61 -16 -39 28 -68 -3 23 44 22 -93 99 54 18 55 -34 -60 33 18 6 -8 120 -2 -68 99 -85 -33 -102 29 -3 -43 -18 12 37 2 -27 -4 -25 -18 -38 46 65 -33 13 -62 -94 -36 -46 -57 5 40 13 -72 -10 -111 49 127 15 51 49 -29 46 49 -124 34 -28 -49 -4 -33 -37 -42 -49 23 89 1 44 -19 92 78 -14 12 39 -9 4 -12 47 -94 -28 -126 73 53 40 29 -60 43 -100 -7 -8 -14 41 8 37 20 -76 -56 -90 0 60 -15 13 127 -1 -25 -69 33 66 126 43 -23 -42 43 -27 25 47 -2 39 -34 -67 65 50 26 16 -18 38 54 45 9 -121 54 -12 -33 71 28 13 20 -14 -5 27 121 7 78 109 33 8 -25 -21 -20 55 39 -22 -39 -8 -11 -62 47 -38 38 -55 23 45 67 29 -41 -13 -4 -1 -106 -30 119 -27 28 3 -34 87 -41 106 18 108 42 31 -2 116 -41 86 -53 -35 -35 6 46 -3 43 29 -53 -52 75 -58 -1 -10 50 -3 -16 -18 -107 27 19 8 -49 -55 37 -81 -34 14 126 50 114 28 46 24 -62 1 -28 3 -94 -36 35 -25 31 13 68 26 14 86 -38 -29 -1 -35 -101 -16 -16 47 11 -39 -72 49 -12 3 -64 -12 9 -100 25 6 -33 -4 6 95 24 3 -31 -44 98 -21 -93 -85 -44 -7 -127 25 127 107 60 -126 -7 -9 -7 -2 13 -7 -69 -12 -46 -69 9 -48 76 -11 -10 31 16 -10 67 14 31 -44 -35 30 41 44 -39 -48 -21 35 43 -93 -27 -3 54 31 -78 17 -14 -64 -18 -76 -18 -68 10 -5 -42 19 6 -21 0 60 5 33 4 -40 -36 109 84 42 22 -79 7 -38 -9 26 -48 -106 31 -32 19 25 -18 47 30 22 127 -12 14 4 64 -3 -26 90 28 -27 -60 -43 46 66 -52 127 -50 68 28 -47 -8 36 48 -53 32 1 47 31 -16 -27 120 -26 -21 37 -20 3 39 -43 -77 60 113 -14 96 -66 -6 85 -20 6 6 -45 -7 39 -66 -6 -3 -38 -35 6 12 -38 -48 51 30 -40 3 -50 46 33 -18 -25 -31 -23 24 121 -1 -12 -19 70 -37 60 -18 -47 -20 -33 -13 36 4 0 -9 -42 2 16 -21 -21 -15 42 -67 -18 -35 -72 -40 -36 -10 -16 -36 -126 81 -61 67 14 -49 14 -32 2 19 -22 -6 -22 -65 51 -16 -100 -7 12 -3 72 4 -51 36 74 -1 73 -20 -53 18 62 70 -34 8 16 -21 -51 -97 21 -21 54 50 -22 29 -38 37 10 -7 45 -43 41 -19 -36 1 41 17 53 68 15 4 86 -9 75 -21 -28 43 -72 10 -16 42 20 -33 -3 -45 -49 4 -30 23 7 75 26 -31 -28 51 -16 -2 5 26 -3 -46 -3 -28 -28 -61 10 -76 56 -40 -43 21 2 -15 -10 9 -53 82 66 -77 28 -37 -28 -2 -7 -18 -6 48 34 -21 19 55 -36 -71 72 -18 8 -1 26 46 -27 34 -7 1 -11 106 23 0 -8 26 32 3 -23 -62 7 -55 40 -55 6 -58 17 15 67 8 82 114 66 32 5 -35 -15 -2 -13 -92 20 -46 -98 16 38 -16 -110 -28 -52 -79 -56 60 5 83 -57 18 -28 -28 20 89 7 112 38 23 -15 62 61 6 16 -51 -7 -16 15 63 27 65 -17 -95 47 -43 77 -28 -47 -67 -18 50 -14 -48 -73 28 76 18 3 -8 40 -12 108 7 30 -36 23 27 24 79 -59 -55 39 -60 -16 52 48 -23 -25 56 -58 -61 -24 -20 27 -10 35 -16 125 -13 -38 -8 -6 -117 -70 -58 77 -22 -19 -1 63 -43 -30 -14 -47 -4 -76 21 -53 -62 -45 -108 9 -81 -47 56 -34 76 42 -29 -102 -12 -38 -37 -12 -4 8 -42 -1 -19 -12 -72 -2 -12 -44 -12 13 41 -3 55 41 -13 16 -37 -68 54 8 41 19 12 -36 -6 22 3 75 -18 -59 -77 -79 -49 34 -29 0 22 -45 -36 -55 5 5 63 75 74 -35 47 1 -27 -11 -96 24 64 -43 -34 65 3 46 12 -22 -39 26 -115 42 0 -65 -8 25 -48 53 -53 -21 73 61 -13 -3 -67 21 -20 -38 -127 66 41 -5 29 -31 -59 11 -17 49 -7 -36 -53 24 -47 -60 54 83 0 13 -29 27 39 29 8 9 -15 -31 15 7 -8 1 36 -19 7 -14 -14 75 36 -56 -54 -34 40 26 -75 59 -27 53 20 16 0 -14 -39 -106 -17 -82 53 -23 -18 -104 18 23 -99 -5 17 -9 5 -44 -71 -39 -16 -51 93 81 -72 -20 -4 -21 18 63 0 -65 34 32 -9 -63 13 52 -16 2 -19 53 -59 34 44 17 -5 7 -29 -31 -111 2 72 39 17 15 6 -15 -21 -53 20 82 49 -7 68 10 18 -2 110 -11 -56 49 -106 -35 -21 12 0 21 -27 95 76 -61 37 33 -28 10 52 -52 -57 41 -63 14 -1 -13 -55 -29 -10 64 45 -5 -20 -9 -3 -68 -43 28 14 1 27 -26 81 31 83 -14 40 -2 106 3 -7 50 -8 -38 -40 -9 -26 -98 -128 -66 14 -65 71 -9 -17 -3 20 -128 -39 -44 -25 -60 -24 -65 -44 20 -74 67 -68 -38 -87 21 -59 -16 -58 62 10 -29 126 5 -48 -10 52 62 17 -52 64 -66 -46 -23 -11 24 67 -19 33 -27 -29 -15 -7 -22 56 -5 -33 19 11 40 -11 68 59 -53 -39 -53 9 7 6 13 78 -120 49 46 -41 97 -88 64 -125 -19 -41 59 -44 -12 3 -95 61 -25 47 -82 40 51 -118 125 11 67 -123 -77 86 46 14 -35 29 -84 16 68 -48 51 55 127 -17 -4 104 -85 66 -25 -42 58 42 62 11 32 33 73 -18 3 -28 60 -10 33 -57 -25 -80 -35 64 71 -24 -32 -1 -10 -35 -1 -1 21 -47 6 -63 -7 -11 -30 63 -28 -55 9 -119 -4 -24 5 102 -2 9 64 8 -1 -71 -33 54 54 -34 38 66 -42 28 46 -74 -48 24 22 18 43 -35 -108 22 -59 17 -3 45 54 -45 -50 36 -41 -77 -17 -55 -9 29 16 4 18 -41 22 1 74 -36 -8 -73 -31 52 -68 -40 14 15 61 26 -31 12 47 -22 -39 82 125 -19 -11 -76 -57 -122 -1 21 -26 4 7 -61 12 18 -20 -71 57 -3 58 -97 -63 41 33 16 -6 18 3 8 5 14 8 -51 -1 -68 1 67 -65 -91 50 -75 33 -60 10 -12 -12 36 110 -18 -124 -50 121 -116 -41 -40 -53 38 48 -31 8 39 -92 -48 41 -35 33 23 43 84 63 8 10 17 68 4 72 -35 55 -28 -55 28 119 -5 82 10 -30 -32 -21 46 28 30 -4 11 31 -8 34 -77 -24 -52 29 7 84 -50 31 -27 -103 -13 -20 2 -63 58 58 85 97 -22 -69 -18 0 -63 -8 -3 -65 42 -47 -9 -8 55 -61 -40 26 39 73 73 -44 62 50 41 47 -12 127 -36 103 127 -4 31 35 83 -2 4 -117 41 -39 44 -10 0 -13 -21 -128 124 -126 -71 -10 0 24 -20 19 -30 78 -63 43 79 -62 84 48 122 50 113 30 96 -19 100 -21 -22 56 81 34 87 73 29 55 106 22 26 -105 -54 17 -87 -21 -101 127 -27 -5 -29 -43 53 8 19 8 13 43 -56 -52 2 6 6 -23 33 60 67 25 15 41 -13 -34 16 -15 72 105 96 -59 -17 40 -41 -39 39 11 2 45 -26 -52 -66 34 -27 -117 -53 24 39 -121 -53 53 44 -14 21 -90 -114 -81 -59 -11 -102 -28 41 57 -29 13 41 40 85 -125 -96 -62 -18 1 -41 82 -62 25 -73 -79 -74 44 30 -122 115 -21 90 36 65 73 14 -15 -25 68 -122 -9 -24 16 -48 57 40 -24 -70 11 25 -38 -32 -54 -98 -67 14 113 -16 -21 26 56 -4 -33 3 1 34 21 -6 -17 -19 48 22 24 -83 53 27 49 41 -128 -103 17 51 -23 -112 16 58 -30 22 1 40 -23 -3 2 -23 64 19 -9 -54 -98 -68 -25 23 6 38 -53 -10 -120 25 44 65 -23 61 -105 9 100 27 15 -12 30 -43 -8 84 61 65 51 -25 -69 -34 -7 -4 48 -93 42 -70 -86 -2 118 -19 4 -11 17 67 36 12 -7 -28 -14 30 -95 36 -10 38 63 -49 -124 54 -12 36 72 -16 -5 -96 12 -20 42 -3 -127 -100 -19 -54 -3 -36 8 17 82 58 -37 -35 12 -78 23 -73 19 66 -88 15 27 -118 48 -23 10 -7 -40 10 43 14 -20 61 -13 -50 -18 49 -32 -74 43 11 100 -32 32 44 7 -85 7 -2 -24 30 4 97 -24 -51 12 19 21 -55 -59 28 -46 -3 -66 42 19 24 55 -30 37 -78 45 -33 -85 -36 -23 44 28 -38 67 20 10 -20 -103 -9 -36 70 -30 -63 62 81 -23 -14 11 -38 33 -48 -29 -18 26 16 14 2 47 55 -96 32 -116 -24 24 -5 18 -84 75 -22 -29 -1 -22 -7 127 -108 -2 -20 -55 -39 -48 -3 42 -66 -28 -128 -35 -19 85 18 -18 -10 19 -43 -2 61 -39 -33 39 -128 -36 -42 -75 -52 -80 59 38 69 26 117 100 -8 35 63 77 -24 76 45 -30 32 33 6 -29 39 49 -39 -23 44 22 -71 36 21 80 -7 -34 20 -25 -77 18 -14 11 59 -73 43 -3 56 36 -31 -12 17 -49 -31 -16 -4 24 -19 -55 -65 -6 33 72 71 2 -78 67 -41 49 89 -13 20 10 46 -19 30 -7 -103 31 -41 -11 84 2 75 -36 -1 -97 -63 32 -21 -25 65 60 -57 24 -21 -44 2 20 20 63 16 -20 0 -36 70 -45 -60 -17 -27 28 -55 53 -45 41 -42 57 -65 -13 25 68 12 64 -32 -43 -32 18 -50 -99 -43 86 -53 -45 4 -14 12 -55 -26 -44 -26 59 35 -39 -3 -29 58 -35 65 -8 65 -19 25 -86 62 25 35 -63 29 41 94 97 -2 7 -10 -66 -46 -54 47 57 2 5 -52 36 10 29 37 -22 -11 91 -64 7 69 10 47 -38 34 -73 -34 9 -14 54 -90 39 19 20 33 6 -32 14 -70 50 -4 -5 9 46 -72 54 -7 -34 -33 49 -110 -67 5 47 42 -6 -72 -47 18 -33 55 47 -71 -13 -6 -28 46 -7 45 -46 11 47 34 -18 -4 43 -27 24 5 -66 8 -49 -40 1 3 43 -34 27 -2 -41 -127 30 70 2 -37 16 -58 33 24 51 82 100 -39 17 6 -27 -18 -86 98 113 -37 -80 3 -44 35 8 -36 16 102 5 27 2 -95 66 -40 87 -35 -100 -50 21 40 -26 118 32 -37 21 -77 -39 10 -14 20 94 -111 -87 107 32 4 -12 50 -8 -60 124 10 16 -67 -49 52 -31 13 2 63 59 30 3 -25 -57 16 0 92 -31 39 -77 0 67 -45 28 -45 -36 -61 -42 9 -73 -29 31 -10 -72 -11 21 -74 -11 -1 57 7 -32 12 54 -16 -5 24 -69 -90 -74 -5 0 91 39 -25 -57 57 10 86 -44 -5 -126 3 -59 -52 23 -38 14 26 29 16 77 -96 -57 -79 -29 -44 58 44 -85 50 -122 -54 -14 51 31 38 70 -20 -97 -7 33 -12 -127 -46 -12 -6 -3 14 -40 -64 -24 37 57 -107 -28 40 18 31 -27 60 24 -34 6 1 24 24 -57 -25 -4 -108 -28 -11 46 122 -126 -27 -6 118 38 114 44 -66 -20 9 19 101 30 11 -34 18 -82 -2 1 49 96 117 68 24 -79 40 16 45 34 -77 -42 -68 -71 -13 89 63 69 -17 -21 -20 -118 39 -30 -9 11 -78 -53 3 41 -2 -11 -90 17 74 -56 -27 -128 32 -3 45 -10 38 13 16 28 -10 123 -26 59 -70 -101 26 23 -69 -45 34 39 -8 2 30 7 31 45 46 -19 63 38 -52 96 -38 15 21 56 19 41 -45 67 -9 2 31 4 20 30 -20 -45 32 7 4 9 33 -11 -40 -13 28 -3 -38 -23 119 -16 -31 -31 -97 -51 13 3 29 -8 -25 -101 35 -25 -16 17 9 -41 25 122 81 -29 42 -30 -2 -43 -64 31 -14 -24 48 73 -35 -24 88 69 50 -44 19 43 -70 -73 90 -99 68 95 50 -12 0 -6 -44 -10 40 -28 28 79 -12 31 29 -24 4 -12 122 124 54 -35 -27 -96 -11 23 -26 18 -24 -72 119 -60 72 69 -17 -41 51 22 -40 -32 -6 11 -108 44 -56 18 23 4 -124 36 -57 66 -33 -5 -100 -76 -58 -56 -2 102 17 -7 -3 127 11 13 57 15 42 65 -30 -71 -42 64 -16 69 -88 -45 42 -36 -109 27 98 -10 46 -40 -16 44 26 -44 16 -19 55 -4 17 -101 49 -117 32 -55 -88 24 -69 2 -29 -123 -24 66 36 70 28 -87 14 -47 80 127 35 28 44 -8 47 -48 63 -3 -10 43 15 -31 -31 -122 -44 -15 12 -41 -57 -17 34 117 6 23 52 58 22 106 -3 -78 -21 81 -6 9 15 70 27 -9 -9 75 -61 18 22 72 40 19 16 1 13 91 77 2 -40 -108 -30 39 -8 -32 -97 19 -7 -11 51 36 40 -21 41 38 -20 30 -19 -19 16 5 38 -80 19 24 73 81 -24 36 51 34 46 -11 41 62 33 -25 63 -36 63 -58 -74 -3 -10 65 -18 -45 -127 -15 27 14 88 -103 -7 -47 -21 9 -9 12 79 -5 -16 0 8 85 18 -47 -22 -75 -20 -53 -34 -13 -71 -30 0 32 -30 -38 92 76 -20 -60 74 -45 -21 -16 -22 4 -98 -71 -40 102 15 9 25 -12 -23 -20 -4 12 127 -2 22 127 10 -64 9 -3 0 53 15 36 -4 55 -35 41 -75 -34 -32 15 13 -5 42 0 -69 -34 -9 7 -27 1 -28 45 -103 -29 -32 62 -52 -15 68 -59 26 47 -24 -19 -15 49 8 59 -23 33 68 57 32 26 -19 -39 -5 -59 -11 -13 -8 11 -2 -4 -5 -67 -8 -69 -36 -94 -51 -64 -32 43 32 32 33 -92 111 -8 -9 -17 -80 -19 -3 -70 9 37 -12 -65 -19 -38 25 -59 -6 -18 -41 -11 62 -62 -99 -48 -121 -27 -21 -7 -7 40 -44 -49 -28 19 -61 -22 -7 20 -30 -61 29 11 -127 -127 -14 8 -48 25 14 26 14 -24 -22 84 61 -23 -66 -71 -20 -69 16 -8 -5 -98 -10 -46 -120 32 -70 -48 0 -41 67 6 46 34 65 -40 73 60 40 6 80 -53 12 126 59 0 -1 9 85 61 17 -51 -8 -69 118 38 70 77 -127 99 127 44 78 62 10 -17 15 -3 32 29 38 -40 23 -56 44 -33 56 65 -30 10 46 -35 -35 -24 14 -58 8 16 -30 45 -126 -73 -50 -51 1 -23 63 60 -58 -47 62 -4 -30 -37 21 21 -68 -29 5 -41 -75 54 -60 -38 -60 30 -27 -40 -84 -2 55 -43 -6 -37 -7 -35 60 24 -18 -33 13 50 -42 -24 -36 28 -36 -79 -8 -24 32 35 8 46 -125 -19 27 -22 3 -110 -19 -17 -56 44 13 41 -23 -60 -74 8 -33 57 20 -52 21 0 -13 -57 10 8 -71 76 96 -76 96 5 55 19 -36 49 23 47 47 -6 -36 81 25 -29 79 56 -5 11 65 -50 26 -3 -46 16 3 1 -65 -21 -55 19 27 46 3 -6 -125 23 -52 -2 -82 -73 -4 21 20 122 -76 12 -44 10 -111 -65 -14 -14 34 -14 -7 66 24 35 95 -27 -6 13 -4 -48 -63 -25 81 40 -90 -41 -14 61 69 -42 -13 21 -34 -46 17 -81 -29 3 52 36 -29 -12 41 0 -29 23 -76 45 -41 -2 -66 26 30 -52 -56 26 -24 -83 -39 16 -47 -70 -11 -107 -4 -77 21 -95 -51 -86 -126 -5 -5 22 -3 39 53 38 -94 -30 20 36 61 -20 6 -58 -6 40 -39 81 35 -102 -26 6 -22 8 -39 -29 -19 -33 -57 66 51 -21 107 115 49 -15 -83 26 49 22 72 -41 61 -24 -1 66 4 11 -17 -11 36 61 -41 37 95 60 -56 80 15 -32 18 -44 -4 -2 -9 34 -78 -46 121 6 -20 -49 26 -3 59 -38 11 47 11 14 -58 -8 -79 27 -16 63 18 100 -45 -14 -14 -20 11 67 49 -65 -39 -87 5 84 0 93 17 -85 -107 -16 -110 113 -59 65 55 22 -37 79 35 56 -114 93 2 -18 -18 21 26 -68 29 -50 53 2 -32 9 19 22 -29 -11 32 -14 -53 -9 69 -104 -10 -13 4 44 17 41 7 -127 -84 13 -90 -78 -32 -73 -30 27 42 61 39 31 -19 -81 17 28 -25 -25 33 -91 23 127 20 -58 35 84 -23 -62 38 -11 15 6 18 -18 -31 6 7 37 127 1 69 -31 -17 98 -59 26 5 22 -6 20 -5 -61 -45 5 39 18 81 -14 56 82 -36 57 42 -62 -12 33 40 -29 6 -2 17 86 -11 50 45 -6 87 -9 16 -12 29 101 13 -40 -21 88 -62 -47 27 -31 -118 43 -64 56 -1 37 29 -54 63 14 32 -73 -51 -92 -56 101 -5 127 35 -36 58 13 -26 -33 25 69 20 -31 32 71 -24 -50 21 14 -25 65 -5 5 112 -26 -17 37 37 27 -112 8 40 -25 -16 -15 -16 -83 -11 40 -5 89 -67 -31 120 -64 -6 -55 15 -39 29 40 81 -23 67 11 -4 28 -40 -35 -30 -9 64 48 -37 -47 17 -52 76 4 50 -11 -95 -65 1 -100 40 19 -28 -78 11 96 -88 53 -1 4 37 -73 2 -59 99 -5 -9 -4 -66 123 -53 -1 8 -128 -7 24 16 -54 -17 10 -23 13 88 44 43 -86 28 74 17 -58 -24 46 -15 1 19 53 86 -30 -52 2 -86 26 64 -23 5 -53 11 -15 -18 -128 3 -92 -45 121 -4 -7 -33 -40 24 6 -8 -95 -120 -18 36 48 -22 9 117 120 19 -18 14 -31 36 -18 2 35 -56 -15 31 0 22 92 -2 -110 36 117 59 -54 21 -33 -1 44 62 61 -20 -27 -15 120 31 127 -4 -110 -21 59 32 -10 28 -2 15 8 -107 17 -95 -39 -17 -115 6 23 126 41 -2 24 -23 -1 1 81 -22 102 57 12 -43 -62 -40 -3 -83 121 29 -65 -64 62 69 84 -27 25 16 26 -15 68 -56 -12 8 -35 23 -29 -19 -5 -44 -40 -85 11 -22 7 -26 -11 50 -36 79 -38 -23 -6 38 -1 37 43 -20 -15 43 -54 -59 99 -52 -9 -3 27 -16 32 7 -16 10 -45 0 25 37 63 63 -9 -38 -42 -27 38 -20 -38 -107 50 -47 39 67 68 29 -43 -11 -42 85 -49 126 5 -3 -13 -24 30 81 50 47 5 -54 4 7 -51 30 4 -3 -1 -66 -55 -116 -40 16 50 57 -81 -73 24 -26 47 26 71 10 -111 91 61 48 -44 -104 15 0 -6 41 -41 3 -48 -2 -19 -23 -43 123 42 -3 17 127 61 -31 19 -100 34 41 -16 -33 24 90 23 -88 122 -22 -55 35 -23 -25 63 -5 90 1 66 -13 -20 22 -48 22 62 19 53 -4 40 -3 -76 -3 -4 -14 -10 13 -39 122 11 19 -37 -19 44 53 65 51 45 -9 9 -20 79 -36 9 12 45 11 -44 74 -15 58 8 39 -49 28 15 -40 -95 41 -12 51 5 10 -8 22 -45 -15 56 -15 5 -86 64 -45 -25 -18 -55 11 18 30 106 -100 8 -78 62 3 7 -20 49 36 -26 17 23 -23 71 22 -86 -65 -70 -11 -12 -71 -2 -13 33 -36 -86 -11 19 25 -40 -69 -27 16 -11 36 3 -19 64 -21 33 -22 0 11 4 29 -81 61 70 36 -24 18 60 75 36 20 51 119 -10 13 82 -57 -58 -42 46 83 26 10 -25 22 55 -75 -1 80 -23 -34 -5 53 30 50 90 29 73 14 30 32 28 53 26 -23 -2 -9 -76 -18 -5 12 28 -47 91 72 -72 22 103 1 -23 47 -1 3 2 -42 30 60 -12 17 56 -11 -56 -20 6 -48 62 -11 -107 -4 13 103 39 25 1 -24 10 24 70 -51 41 58 -12 -38 68 -59 -20 2 -7 25 3 -57 2 11 8 -4 4 14 -102 -10 -31 -58 -23 -27 58 43 -23 -74 47 76 59 82 30 -39 -7 -19 49 -41 24 17 59 7 43 6 -18 -81 -82 66 60 51 15 -107 -116 0 15 66 -23 -5 57 -1 2 -4 50 59 -102 -21 8 -38 -111 62 25 41 48 -52 119 -11 -34 3 -52 -56 83 1 -33 -45 75 13 93 86 -2 -57 -57 112 -13 42 24 23 84 -67 -38 -9 -58 121 33 57 5 -50 70 48 19 -51 81 -12 10 -27 5 15 -29 -64 -11 -21 11 -74 16 38 14 -3 0 2 77 1 62 37 10 24 -59 4 -95 -39 45 -76 -3 8 21 -27 -48 -9 71 -100 -82 -34 45 -1 -19 12 -77 78 -73 57 -73 35 -18 9 -12 17 -10 103 31 114 28 10 -12 -62 -22 -22 -6 -8 119 0 32 58 -78 13 -28 36 98 -5 -43 -31 -8 -11 -40 -38 -7 50 -59 57 -23 -36 -30 -36 -16 99 -2 2 36 22 -5 11 -1 49 -45 19 1 -11 29 109 -2 63 -31 14 44 16 48 19 58 -22 24 62 49 -78 45 73 32 8 91 20 18 -28 62 -8 39 61 -64 40 -50 80 78 24 -27 -24 11 -4 -14 -30 23 5 -23 27 0 -41 -13 -32 21 19 -9 1 -32 29 -16 -16 -17 10 46 23 -19 18 1 -13 2 -22 -5 38 48 -16 -4 -26 8 24 39 16 14 15 10 -18 18 28 -44 12 18 -4 -33 -35 25 14 18 37 9 -11 -84 -33 -31 -8 -18 10 21 -38 -19 -11 1 -66 -12 26 10 -6 -8 28 19 -17 -17 -9 -27 31 18 9 10 -12 -3 -10 51 -8 -11 -43 -17 -114 96 0 -13 9 -28 -63 23 -8 37 1 -40 14 -14 -2 -47 7 32 -33 -9 19 26 81 -15 26 36 47 22 -26 27 -3 9 -22 34 -57 -18 71 -3 38 -42 -34 -10 47 -15 9 6 5 -77 12 -37 51 -20 2 28 18 27 -33 -38 15 -29 -8 43 18 4 -72 22 -18 44 -22 27 22 -7 21 4 -40 16 -9 18 -2 85 10 -18 74 14 -23 5 -22 4 21 14 -25 -1 -5 -2 42 -29 10 -53 -23 13 33 -12 28 -18 41 45 7 3 -35 13 -39 52 33 35 -44 1 -31 -7 -22 2 11 -10 -19 -20 26 12 -32 42 5 -6 -7 9 25 19 -17 15 34 -20 5 2 2 28 14 -36 35 14 17 24 -19 0 -18 2 40 0 -10 0 21 41 1 24 4 48 18 35 7 -14 6 -14 20 26 -8 32 15 -5 -1 -28 -27 -12 14 20 28 14 30 3 8 25 -34 21 43 -17 19 -17 4 -10 36 -24 -20 10 -5 -4 -3 10 3 8 15 6 14 -8 16 14 19 3 12 18 2 -6 4 1 19 5 -17 14 -10 -19 -20 -6 3 9 20 -7 14 -11 -4 -19 -2 -44 -14 0 22 10 -16 34 -21 2 -7 -8 -40 -21 -26 -5 -2 20 18 -16 -18 -14 -6 -2 2 5 25 12 -6 -6 18 -7 6 8 -28 -22 -36 2 -23 -24 10 2 39 15 0 -14 -2 -32 -18 -33 34 -13 16 41 10 33 16 -15 16 -5 -7 13 -3 6 -23 35 -34 -15 -3 10 31 -16 45 29 -13 -30 -55 6 32 23 -12 7 19 3 -39 -41 77 48 -7 -9 52 -19 -10 -3 -38 -30 9 -38 -20 19 3 53 -25 -25 20 32 0 8 -2 -19 42 20 -33 -35 -45 -2 3 54 24 66 -68 22 -79 31 27 11 42 -17 27 9 21 -6 -6 34 -9 -33 44 0 39 -25 96 -54 -8 -10 56 -30 -31 28 31 21 15 92 -59 -1 25 8 14 -10 -1 -28 -12 0 4 7 42 -21 -14 55 24 -26 12 66 3 -10 26 -5 -3 11 46 -28 -14 38 -22 10 -7 -3 -50 40 12 22 1 24 30 -16 32 11 -24 -11 -14 11 -17 29 26 -7 -17 27 -28 4 -9 6 7 -26 -30 8 -24 -34 31 5 17 0 -27 -4 29 6 -22 4 38 19 -19 19 34 55 1 -18 -9 -19 -35 -21 15 37 10 4 -44 15 -2 27 -3 12 34 -21 -1 38 30 6 -3 -54 33 -5 -6 -8 -24 6 -19 -4 -5 1 27 10 31 -26 -3 -25 -33 32 -10 16 24 25 -39 20 -3 -25 -53 45 12 -32 -30 7 0 -5 -20 -21 -18 -1 29 -12 -13 9 14 -10 21 -2 -25 11 24 -13 5 -16 -12 9 14 -4 -46 -12 6 -13 -13 6 -30 -1 -27 -16 19 -20 -6 -14 28 25 15 24 -9 9 5 4 27 0 16 22 -21 16 17 -30 36 -21 -13 -28 27 -78 23 -17 -95 -26 54 -30 -44 5 -14 -43 -74 48 -24 55 -5 -2 106 -77 -29 -59 -21 -12 14 45 18 -91 42 -2 12 -25 13 1 -5 -31 3 -2 40 -72 18 16 -13 35 -4 -43 -13 -17 5 40 -5 -50 -16 -121 -25 35 -35 4 -23 22 -9 115 -19 58 72 -113 -32 29 -27 29 -34 -31 -8 -14 -44 -50 25 -8 -15 0 -57 -8 -84 44 -15 10 -75 -26 -63 -71 2 -15 -71 12 -26 -60 55 -1 66 2 5 -23 37 35 -78 44 31 80 -8 -53 28 15 7 -22 -48 5 -41 -5 37 51 1 39 0 13 42 19 17 -1 30 25 25 14 -16 -1 10 -24 4 -46 29 -47 10 47 -17 20 -44 11 -24 4 56 23 42 19 19 33 39 0 10 46 52 -66 91 38 11 33 30 4 21 36 -20 26 48 27 19 41 54 4 -7 7 -34 36 25 40 -65 28 22 61 31 -23 21 12 45 -6 -15 -16 -22 18 15 -18 18 0 17 16 55 11 34 -48 16 27 -5 -27 -14 -12 -45 -11 -7 23 7 -67 12 52 23 -13 -1 -52 -38 10 10 -46 -4 -13 -11 -40 6 0 35 11 11 4 -17 -27 -8 8 -8 -18 -17 27 -47 -7 -44 -5 -31 -4 25 15 54 -46 0 5 -10 4 -24 11 -32 -1 -2 5 -10 13 -17 24 -1 44 -18 10 -20 -5 2 -6 -1 -26 29 27 22 45 11 26 7 -14 -21 -41 14 18 -25 -34 30 -1 -29 -6 -21 -36 -26 -19 -21 20 0 -18 -39 19 -16 26 26 -18 9 -22 -18 0 -9 -6 -8 27 23 -30 -4 10 -6 11 11 -8 -17 -4 5 -8 28 6 -29 -15 -28 -15 -14 -4 59 -31 -5 -14 -15 -13 -12 1 34 45 -49 -10 10 8 -13 22 -4 17 19 -31 5 33 -30 16 17 -4 16 -13 -15 -11 -42 -18 -15 -36 4 -57 -17 -13 -20 36 -7 29 17 -16 -26 -25 34 -6 -7 -11 6 -6 29 -6 30 4 20 -11 -16 -6 -16 4 9 -4 -7 38 -25 40 -14 2 2 -8 -8 25 -19 -56 16 28 -29 -29 -42 -16 35 42 -16 23 -16 -10 16 18 -18 -52 -38 -16 -55 -21 2 -11 10 -11 12 7 -10 -6 -10 17 11 -26 31 -9 39 -14 -54 52 -7 -41 24 17 -3 -12 13 22 -15 -3 6 -5 -26 -39 -20 16 0 -19 0 -3 -19 -16 -9 -9 2 2 21 16 18 3 -4 -15 8 -17 -6 -2 15 2 -7 10 -5 -31 -16 2 19 -22 -45 12 20 -10 -20 -33 -6 38 17 8 17 -28 15 -47 1 35 4 9 -13 -23 -19 21 12 1 -22 2 -27 -7 25 22 -22 -4 -11 3 -10 33 8 3 6 14 12 24 10 18 -25 -2 -23 15 -26 -33 -1 -8 -29 -25 -32 -20 -10 -22 7 5 -30 -17 19 -10 -1 3 -12 -17 5 14 29 -13 27 7 -19 26 -2 -50 4 7 5 -33 -9 -29 0 1 -4 19 23 -34 19 8 70 60 7 24 -34 -25 20 57 28 11 47 62 -60 -27 67 19 -48 84 49 16 90 7 23 -25 -76 26 -47 -38 41 61 29 -18 6 -20 40 61 8 123 -66 23 34 -37 78 -44 -9 -14 -37 20 -28 -20 14 20 -1 67 15 -49 35 85 -21 33 -11 20 -28 -3 109 30 58 59 -21 7 51 17 53 44 24 62 -49 -67 93 -47 -20 18 -19 34 -4 35 -38 -40 42 -21 1 -76 -5 42 52 -35 15 41 100 -10 -107 -27 20 -1 41 -35 -33 10 105 -15 -55 91 15 10 -17 -30 75 40 -72 19 -40 -10 14 9 13 -19 -64 40 -23 -59 -11 -32 -27 -120 -8 87 -33 -80 7 -2 -14 39 -27 21 -9 38 -64 -19 -28 89 -4 -46 -8 12 -54 -23 44 11 48 52 -32 47 20 45 83 12 28 34 26 7 -28 45 -19 -33 -15 -6 14 4 -15 -38 -76 -33 5 -38 -45 -59 -23 -12 18 16 -2 -25 26 16 22 -16 6 -12 15 2 22 1 -19 6 -91 29 -9 22 -31 -22 6 24 16 34 45 -44 26 51 16 -26 -21 -8 -15 -24 14 54 -9 29 28 -15 7 -19 23 22 27 -37 -28 -12 -16 43 1 22 9 -11 44 -15 -28 -24 -2 -18 15 11 -43 -21 -12 -17 -13 -29 -3 12 23 -4 7 23 -9 19 42 -51 -17 -7 -97 34 -29 23 -32 12 22 20 -54 -11 -93 13 -30 37 -20 -11 -19 -48 -6 -1 -12 10 33 39 -21 -83 -26 39 -34 11 -69 30 24 10 -14 -56 11 -46 -17 -2 -12 -6 16 27 -23 -27 -1 -65 30 -8 -31 16 -31 3 -52 47 -27 -2 -22 -39 38 -2 -19 -29 8 -64 -26 -11 -31 6 -10 69 10 -6 11 -23 -6 27 25 -7 21 7 18 -9 9 -29 41 -3 -12 -49 6 -23 -15 23 -12 -47 -64 -2 -17 36 -57 11 -28 -95 8 0 1 11 -20 3 4 -23 41 12 -16 -25 -71 0 13 -22 11 -46 -10 37 -14 -76 26 -4 -42 -7 42 -16 13 -32 16 31 29 -43 0 -7 39 -37 -17 -26 2 21 -1 37 46 -14 -7 89 30 -13 -20 24 34 19 4 55 -15 39 -16 -34 34 -14 16 21 11 24 -35 12 -33 -58 -55 -41 25 35 15 24 -34 10 -14 81 -42 8 76 4 -34 -16 -15 -3 -5 11 -25 21 4 -40 -27 18 12 65 14 -10 -13 -1 -8 -20 46 7 34 17 -17 -9 -35 -10 18 12 11 -22 33 49 -25 43 11 -17 16 23 5 28 27 -21 -34 29 -19 -27 25 12 41 8 6 12 -30 48 -4 13 19 2 -37 9 -17 -35 13 5 -10 -17 15 -1 13 29 -18 -37 8 -5 -56 25 -17 16 -15 -29 -34 6 10 -5 -60 36 18 2 23 14 -24 -40 -15 -5 4 24 32 16 -16 -14 37 -6 -2 -52 -73 -22 -53 -11 21 -6 35 16 -33 -6 46 29 -46 -54 15 22 1 0 -47 -6 54 2 40 -30 11 11 17 4 7 -9 -41 -41 -66 11 9 22 -17 29 16 68 -14 -15 -65 24 6 7 11 -42 -20 -9 8 -51 -4 -48 15 16 -18 -19 4 1 16 -34 23 15 -14 26 13 -4 4 -86 42 0 -41 37 23 3 17 0 -34 -30 39 7 -27 -40 -26 7 -29 -28 -10 26 -106 -34 -2 5 -6 44 -7 -24 19 -15 -49 -17 -21 18 18 17 4 -1 14 -9 -36 10 -28 3 -64 71 -19 -43 -14 -33 12 -26 -12 15 27 6 -18 25 9 2 12 15 -52 -74 1 -39 -35 10 54 -13 8 -15 -14 14 -7 -5 -9 -15 -5 14 19 -13 -45 -6 -15 -8 5 7 3 51 -77 8 3 -22 21 42 -23 28 0 29 -53 50 12 33 15 35 66 -47 -2 7 8 0 8 -7 15 16 70 -2 -6 11 12 9 26 13 56 24 13 19 -4 16 22 -7 38 9 -12 9 -15 -24 4 -36 -32 24 -19 23 -36 33 -5 15 42 -10 -15 6 -21 -32 4 20 -36 35 -15 12 30 -20 -11 -15 0 -18 -1 7 40 -22 1 8 21 -19 -12 -13 0 6 -15 -30 -64 -3 -15 -19 13 -18 28 6 39 -8 6 -1 24 5 24 -7 -22 -7 1 -16 -13 -33 13 55 13 -52 -39 18 49 -19 24 -24 -48 -23 -10 2 -50 65 25 -15 -15 -14 21 32 30 -43 -31 -14 2 20 1 -15 74 -40 -6 -17 -38 10 30 -31 4 10 0 1 15 20 -25 27 -2 26 -21 -12 17 16 51 -47 29 36 -7 -3 -8 4 0 -12 -7 -11 -27 -34 11 27 4 29 -14 -32 35 -8 -34 -17 42 29 22 -26 8 19 -46 -55 -25 1 10 -39 -36 -8 48 12 -47 6 -48 30 -15 4 0 -19 -21 -9 -42 -8 9 -7 3 29 4 27 -15 8 -27 17 8 -17 -13 12 -18 10 4 23 8 -10 -26 -7 32 7 -34 -49 32 -7 -42 11 17 15 -42 -24 -25 -25 -33 37 34 21 -15 -50 -16 12 -7 -38 -4 6 14 -7 42 -23 26 -15 28 -24 19 -5 0 8 -7 19 -6 11 -20 43 -20 -19 20 3 30 25 16 4 22 -1 -15 -15 -11 -2 4 -2 81 40 30 -34 7 31 -29 -4 33 13 51 -25 -31 -20 54 -25 0 -12 -3 25 33 15 -34 14 -17 -23 -26 17 -1 15 1 -8 11 7 -18 -1 7 15 -13 7 3 -10 19 -23 -4 6 2 -43 2 23 -13 -45 -30 -10 -2 0 -23 24 10 17 0 15 13 7 -8 -5 -2 29 -3 12 1 -11 2 15 -13 2 -17 -4 -15 -4 74 9 16 18 17 5 34 -26 -40 0 -23 6 -15 -28 -4 10 -5 -20 2 -14 18 -22 -1 24 -31 -17 -11 -2 21 11 13 -2 13 -13 12 17 -9 -16 16 -6 30 -7 27 20 46 -52 29 -14 10 21 5 14 3 -12 42 12 -14 -23 0 31 -12 -19 -26 -4 21 -6 -9 -46 -19 -4 25 -7 16 -28 4 -10 5 26 36 -36 13 -14 -6 -7 10 -10 -12 43 -39 4 -7 -43 43 -37 -10 -10 -15 -32 -35 17 -8 -14 19 -52 16 31 25 -4 0 35 10 36 -12 -5 14 -4 -6 -36 10 -6 72 1 9 -13 8 38 -5 2 2 12 -28 12 -29 -7 19 16 -40 -17 -7 -25 -2 12 -5 15 -3 43 -31 12 -20 -23 5 -13 3 -35 -27 -10 3 -37 1 15 23 -5 33 32 36 -31 11 29 -29 10 -21 5 -31 29 -6 -5 35 8 25 29 21 -2 18 -10 -9 -12 -7 -3 9 40 -28 4 -5 3 13 -6 -29 30 -4 -7 -7 -17 6 14 8 51 -64 -9 -12 -10 -21 25 3 6 17 7 30 27 -36 -23 43 14 5 26 5 -24 -12 32 17 -22 -20 24 15 -28 -16 4 -2 4 12 -15 14 -7 -13 5 13 13 -29 -27 1 -13 -10 -3 -27 -3 -4 25 -3 24 -10 11 -7 12 -11 9 6 1 -8 26 5 42 34 -5 -10 -25 2 -8 -11 -19 -9 -10 -48 41 0 -13 3 8 -23 -19 10 -21 33 -4 -8 33 7 5 -4 -3 18 26 2 -16 42 50 -16 19 -11 -13 11 -25 30 34 -6 -20 -25 0 -15 20 2 -4 -15 109 2 -28 -38 -90 30 7 -48 -8 2 -85 11 -68 14 50 37 -36 55 -23 -2 89 -9 -15 -25 34 28 -3 33 1 -5 24 -5 18 37 52 29 15 -55 -7 75 14 14 26 23 9 -17 -14 7 36 -66 10 50 -7 50 23 66 3 -25 70 19 -23 2 69 -32 8 23 -25 41 29 0 1 3 27 -3 -38 -30 -79 67 39 29 57 -18 11 -17 71 -34 0 -8 -21 -30 0 5 61 -3 29 -6 24 51 -11 -19 -25 42 9 -11 40 -5 -8 -69 71 37 8 28 -34 64 -50 -54 -2 -37 30 -31 29 27 10 -52 -6 -35 -10 -13 7 -5 23 -17 -1 44 4 11 -38 50 14 30 -48 -22 10 -65 -14 -12 -6 -31 -7 38 54 40 5 -26 31 24 12 30 35 -52 -10 33 -23 -34 51 76 -3 -2 -2 14 9 69 -28 -3 -7 -8 -15 -14 9 0 -10 -15 7 -38 -18 19 12 12 -24 18 32 35 10 27 46 -30 5 16 -6 16 20 -9 -26 17 5 19 -9 -14 14 -2 2 29 -36 -28 -23 -9 -17 19 24 10 -15 10 30 25 -6 -17 0 -3 -13 -3 -2 -3 -26 -36 -10 -33 -9 29 -12 11 -31 25 1 17 25 24 13 -5 -14 -47 -4 15 -17 -21 5 -34 0 -5 9 -10 7 10 7 -22 -10 37 11 -22 12 5 25 -21 18 6 35 18 -14 23 -2 -28 12 -9 -7 25 1 -6 -4 -43 -19 28 -32 -26 0 48 27 63 8 -7 35 30 -69 32 -20 -12 29 -14 8 -20 3 26 -27 27 13 29 10 50 6 -6 4 -23 49 27 28 45 40 -30 22 59 42 40 -73 75 -25 -18 -21 -31 51 37 -51 20 2 -26 -55 14 7 10 37 30 -13 24 -11 -12 63 36 57 -15 9 -41 -2 20 -42 -18 -9 14 31 19 49 14 7 -12 71 6 28 -13 -23 -61 35 6 6 -23 14 -12 19 -17 -5 2 5 -14 7 1 -11 14 41 -28 25 -13 6 5 45 -14 28 -19 -55 39 -25 21 -18 1 -8 -19 31 4 -12 38 1 42 1 16 9 -24 -60 63 33 -14 -18 22 32 -20 -25 12 -17 10 6 15 4 -38 15 50 49 14 -63 -5 68 -20 -36 17 70 27 0 20 11 -25 15 -2 47 6 -7 -41 -10 55 27 23 -5 -12 10 -7 -22 7 -9 17 4 0 6 -13 68 44 -31 20 20 -19 26 -10 41 -1 -3 -15 15 14 3 5 9 46 5 13 -5 0 49 -39 -25 -11 -46 -14 12 5 -5 -24 -4 -8 -18 -3 -13 12 -6 -30 -10 -18 -31 5 -18 -9 -17 19 36 -22 -22 -33 9 -7 -10 15 33 17 3 1 24 -5 0 -11 8 -8 -5 -2 -21 -21 -1 30 19 -23 13 -14 11 -30 38 9 11 -28 -7 7 -26 0 -5 41 23 19 -16 11 -15 -7 -8 24 -19 -16 18 -19 -2 31 -28 -15 8 -19 10 25 20 -12 -4 18 -51 18 9 33 3 29 11 -45 -19 42 -4 27 25 -47 6 -30 -15 3 -13 22 23 -23 -19 -24 10 -9 -17 -9 -25 -36 28 44 3 -14 29 7 -9 11 -18 -55 36 -16 -1 -33 -26 19 -12 -2 -45 -5 -14 -25 -36 -1 11 -4 27 -2 -7 -3 23 -39 -26 30 -16 12 -92 -46 13 79 23 0 -13 45 5 -12 -14 -22 25 1 24 17 14 39 -16 -11 -28 4 -17 -13 -15 -10 -26 5 -20 -27 34 -26 9 20 29 -26 9 -23 -9 8 -13 13 32 17 -6 -13 -19 -37 -28 3 25 27 0 -7 3 13 -31 8 -30 16 -2 21 -32 17 17 -28 5 -38 -48 13 -1 -36 -34 -27 29 -25 -6 12 -3 13 15 -29 -37 -33 6 6 24 -5 -8 21 11 -22 -6 -7 -33 -25 30 19 -18 -1 9 -14 -34 -8 18 -9 1 16 -20 8 15 -28 14 -14 -15 5 5 -11 -25 15 15 -21 -20 -18 19 10 -8 -1 2 0 -19 17 18 31 30 16 20 23 10 -27 -3 1 36 28 21 20 -8 13 28 -12 5 24 -5 13 -20 6 6 -8 3 -9 5 8 -6 14 2 -14 -6 1 0 26 21 27 7 -9 -1 -25 -25 -10 -22 16 22 13 19 -6 -23 -4 -6 5 -13 26 -14 -14 7 18 10 29 2 -5 -9 12 -22 -8 -6 -30 3 -6 -22 28 2 2 -6 11 19 22 -3 -50 7 11 14 4 -22 -34 11 -6 -31 -2 3 -1 -24 51 0 9 37 61 -13 -55 47 29 83 8 24 3 -13 30 -36 -68 -31 91 8 3 -47 36 10 37 2 27 5 33 1 -45 2 43 52 6 9 -54 -2 -17 64 4 13 -45 -30 -36 -33 -49 -23 12 22 6 -13 -9 9 -33 -16 -15 16 -3 22 27 -13 -8 14 -13 -19 34 74 -22 29 43 29 10 -13 -9 -35 41 9 54 38 -6 -21 35 -26 33 -7 26 4 42 5 25 27 20 2 1 -14 9 -6 26 -37 0 44 -31 -26 -3 -35 -39 -4 17 15 17 -33 6 -47 18 10 2 12 -11 -22 26 34 32 -2 -66 19 -1 -27 -21 31 -38 3 -2 33 -26 16 2 -44 -29 -6 -14 15 -17 -20 15 -8 24 46 -4 21 -13 26 45 -17 42 -10 19 -9 1 28 -42 -27 -16 -13 -43 6 6 -14 40 11 -25 64 32 0 11 21 5 2 -27 11 3 -12 -17 27 22 -21 -7 -20 -35 -14 1 50 17 -13 15 -7 32 -1 3 -20 8 17 0 -35 -21 37 -25 24 -2 12 10 25 -12 -2 12 -3 6 -25 7 -6 -32 -2 18 -14 -14 -23 9 12 3 -21 40 -7 8 6 -20 -6 17 3 40 -1 -18 9 28 27 -16 11 -31 37 -13 11 25 -1 1 34 -13 7 -23 -25 8 12 -4 -13 -16 32 -3 10 20 3 -30 -35 -2 10 -18 -53 -1 -70 42 -3 -6 -7 -8 17 12 -77 -2 -2 59 30 -26 14 -6 -25 -40 3 -38 21 11 21 29 46 -3 2 38 15 -12 -2 49 -18 -61 -95 21 52 -11 -53 52 -125 32 -36 -66 -48 -29 -15 -9 -48 -85 18 51 8 6 10 -1 -56 -17 -69 101 -7 -9 47 -69 11 30 -29 -8 -42 -15 10 -36 -80 11 15 -5 -1 14 14 -1 -50 -100 -8 -17 34 50 17 -47 -40 -61 -18 -11 -29 23 -35 42 -33 18 -8 17 -47 6 -15 -34 32 -4 -56 0 -42 -2 -18 -21 6 -18 -7 -15 15 -30 0 -89 -9 25 -32 -19 -19 -18 -23 12 44 8 -90 34 -19 3 -30 23 -4 2 25 -3 4 -6 34 -40 13 3 37 33 -23 7 25 -38 6 -52 -28 -25 2 20 27 27 -5 -20 18 -5 -2 -1 -45 -14 -43 -2 -10 -28 -48 -27 8 4 42 -2 0 -27 -7 12 11 7 3 15 -28 -11 6 39 -24 18 -15 -8 -36 -1 -15 -7 10 -15 19 -9 28 16 -6 -13 12 -15 45 -41 -25 22 -47 -32 12 27 14 -3 0 0 16 -22 11 4 55 49 3 -18 -9 4 -8 -12 -31 15 54 0 -1 -9 -3 -26 14 -34 -13 40 41 -12 14 -11 4 8 47 -73 36 5 -20 -8 34 37 18 29 9 -56 13 -5 -47 7 -29 16 -19 -42 8 -19 -56 -9 22 -6 6 -26 -6 8 30 -7 -61 2 15 12 6 22 9 22 17 -50 23 30 13 -16 43 26 32 -39 0 -36 -32 11 3 28 37 -48 -30 -5 -32 -12 16 32 41 -39 -20 2 -26 -18 -29 7 44 -28 28 9 46 -42 32 -76 -24 8 30 17 -17 25 -12 9 -9 -5 11 9 7 -38 84 -41 96 19 -45 -24 -17 -17 -38 21 37 -8 25 -33 27 8 33 2 -19 21 57 -8 4 18 -19 32 -7 42 43 13 -37 21 -31 -25 23 -6 -5 -6 -53 15 23 -44 -20 7 36 25 -17 -36 -4 4 21 -8 7 20 19 -54 -25 -35 31 -62 52 -29 21 18 -2 21 42 10 -31 68 22 -7 52 -27 1 41 -10 -13 5 -1 -24 -24 10 14 -47 -29 -5 22 4 -24 24 22 -25 -11 19 21 -5 22 20 29 -33 -35 33 -32 -9 13 -5 46 67 28 -16 10 25 -7 30 -2 40 -11 0 -5 -1 29 32 1 -12 -15 52 19 17 -32 26 -17 -26 -13 1 -8 6 -24 8 22 -34 -1 10 12 20 -2 3 -18 -17 -28 8 15 -12 -2 9 -5 -9 29 41 11 -7 -2 21 15 -1 30 -19 17 6 6 20 10 4 2 -24 19 14 -4 13 30 16 4 4 44 2 12 18 -33 -12 8 -3 -9 6 -9 25 -28 21 22 -18 -16 -17 7 -19 21 -6 17 -7 4 -21 -6 -11 -6 32 -12 -7 1 -4 -10 0 8 32 -16 14 31 12 11 1 20 25 0 54 26 33 57 29 65 -16 -36 34 -44 -57 -37 27 6 -5 30 31 50 -30 -19 -72 -61 4 -16 -40 15 -14 37 9 4 7 10 16 -14 38 45 14 40 63 -28 19 3 -29 11 -31 -21 -11 -29 -30 -10 20 57 -23 5 -5 2 65 -12 29 12 23 -3 34 84 -37 -41 21 -12 57 13 -23 -11 38 0 -6 -5 -12 -13 -16 -11 -7 0 -36 -65 16 24 4 1 7 -15 46 -55 13 17 27 11 -10 -32 7 18 -21 -31 12 11 10 -34 17 23 32 -39 -40 43 -1 -11 30 30 3 9 1 6 -16 -14 2 17 14 -36 -23 -9 -13 -15 -16 -43 44 -42 -12 21 38 -5 -13 18 -8 -62 26 7 6 -21 -59 20 -31 -45 7 33 -48 -26 -22 -19 29 -6 -34 96 18 17 -23 53 30 8 -11 -24 -26 4 7 60 -11 43 30 1 -26 -25 -29 -44 24 21 -23 -10 32 6 7 -31 21 15 8 19 10 9 12 -10 10 -15 2 -5 -12 18 28 19 -29 -32 -23 6 7 -3 44 -2 -31 -8 7 -17 -3 -8 -45 8 10 -12 -13 -5 -9 35 15 -2 -8 -36 -29 -9 -62 -18 -24 -18 -32 4 2 -18 -14 36 2 17 2 9 20 12 -28 -16 -1 20 17 34 20 -1 -41 -13 23 21 3 10 -14 -25 8 14 -21 -20 -9 -20 -20 14 3 -18 -21 0 -53 -3 -12 56 15 -5 -16 -5 -27 -3 8 -11 -34 7 -20 0 -2 -11 39 32 -22 -10 14 66 9 30 -21 6 1 66 -23 -24 11 -59 -44 20 -15 -15 -29 21 -14 13 -7 -11 -10 -5 13 -46 -45 -5 9 39 3 -6 26 18 6 -27 -28 -33 38 -24 66 -23 -24 -8 -37 12 13 -26 -19 17 21 39 -14 -1 -12 42 -25 17 7 -35 9 -15 10 4 10 -16 38 38 80 -61 -28 -27 28 48 -13 13 37 -22 4 -21 53 -13 -8 12 0 -14 -20 -6 32 4 -16 5 28 -12 7 18 -16 -16 -43 5 40 -19 9 -30 -10 9 -4 -1 0 -42 34 22 17 52 31 34 -1 -19 -24 -49 -18 -40 -75 3 -25 13 -12 5 -6 24 12 25 7 -7 11 -5 -40 5 -26 28 -18 -17 31 13 28 -9 60 -11 19 7 -11 -29 12 4 -17 3 21 21 -43 31 36 -5 7 41 -20 -7 9 -26 6 -23 -11 15 4 -5 34 -6 -19 -35 -5 -45 34 -15 -27 -28 -9 -13 12 -17 32 30 18 19 -12 17 16 4 25 1 -9 -5 -40 7 13 -15 -14 -21 -5 -16 19 49 -25 27 -10 31 2 23 -8 13 -19 19 9 -23 5 31 5 -17 7 -4 -12 -14 9 -23 -11 -16 -22 -9 15 10 20 5 8 10 -11 12 5 -1 -16 -7 -13 0 -10 5 -14 19 14 -11 -7 7 22 -4 -10 20 0 7 -27 -4 14 -34 -25 -3 17 29 4 -10 -6 -19 0 -5 -2 -8 -42 19 -13 -32 -38 13 -91 2 26 14 -4 -29 -44 -2 -25 15 19 18 -15 -30 -18 13 46 11 7 -14 -17 14 12 -79 -15 9 14 67 -37 -5 -28 6 -5 31 -44 6 -21 -83 0 -37 -7 -7 9 -12 -42 -1 23 25 4 -7 5 -24 -21 55 -32 39 29 -7 -52 -11 -27 -25 -32 -21 -43 16 -30 -35 54 -34 -4 -8 -24 1 59 -5 -11 -55 25 9 -13 -18 -39 -5 -40 1 -34 -3 -37 15 -9 29 5 22 -27 6 -30 41 10 44 -15 -47 18 -32 -15 28 33 14 -33 37 17 -30 4 -19 33 27 -4 17 10 7 -43 -24 26 -17 18 -27 28 -6 -38 10 -14 -21 20 6 42 -10 4 45 2 -15 -5 -42 -41 51 -2 7 -24 -36 -18 2 11 0 -12 24 -9 11 12 13 13 -8 -33 33 23 28 -21 6 -13 -6 16 57 61 -32 -31 10 -10 46 15 -2 -8 -11 41 5 -8 25 -8 4 13 -1 26 8 -8 -34 -28 12 21 1 -23 13 -10 12 5 -2 31 -15 -10 8 -9 21 20 -11 -54 30 4 16 30 24 18 -18 10 12 -37 22 -1 2 46 -4 11 -16 -9 2 -19 -10 -3 -24 18 16 12 14 11 -10 -8 -17 -19 -24 -15 22 6 -2 27 46 -26 -32 -7 5 5 13 -1 13 20 -29 -1 22 17 -34 3 -15 -16 3 3 -19 8 -12 -11 -3 26 1 -30 -1 2 0 10 42 -21 -70 10 53 -12 9 47 39 -16 59 -7 -37 -22 -12 -7 -21 49 50 -6 -2 -47 -8 -7 32 16 -52 -1 -7 28 -22 -64 -14 -27 50 -6 -51 18 -26 -15 -62 3 -28 -64 -9 -2 54 0 -36 -18 14 -52 54 -24 27 -24 -40 12 -3 -19 -112 -22 -11 64 -9 -12 -30 -37 24 -5 -8 -11 -31 -36 -11 -1 26 29 75 1 43 -4 22 -14 9 -12 -6 -12 14 -41 -29 -24 -1 35 -45 30 -37 5 48 -32 -7 16 -10 -13 7 59 72 16 -36 8 32 -44 -10 -43 18 8 -2 -58 -49 -5 3 -3 -33 -13 2 -24 -15 -47 14 2 -11 25 -1 17 -7 13 4 10 -2 -3 14 -2 -29 39 -24 11 16 24 20 -38 15 7 -23 -29 7 -60 -23 1 -29 -37 -67 -55 -32 -21 -32 19 40 36 12 -21 -51 -31 -62 25 0 -2 80 1 0 -9 -19 0 -13 -28 -5 1 -45 -3 44 20 -6 15 -3 -18 7 11 5 1 -8 -14 -8 -1 -28 17 9 11 -35 15 -4 -26 -52 13 13 -27 12 -4 -19 51 1 19 -25 -32 -5 -14 -8 -3 2 38 -20 13 19 3 22 27 33 -18 12 5 17 11 19 -22 -19 36 -21 10 21 -10 30 4 -49 -17 -12 -5 -9 -8 -22 -22 3 -11 5 3 -24 -3 15 -8 -10 -3 -9 12 -35 -49 34 24 -15 41 1 11 -25 -20 25 -4 -29 11 -5 -16 -50 3 -2 -59 -53 12 -17 -27 -30 -20 37 -30 -58 -15 -17 -2 28 20 19 -32 33 -22 78 22 -59 4 13 19 -26 9 -25 6 -7 3 -28 11 18 -19 -5 33 -55 -73 11 0 10 -30 -19 5 26 -30 -10 -61 5 5 19 23 4 -14 9 5 -30 -15 74 -40 16 49 19 -37 -27 -54 63 -33 -9 -44 11 -64 -6 -17 -56 -22 53 -45 28 -32 -20 11 28 -3 -18 36 -30 -28 -7 -8 -27 -53 42 -2 20 12 -3 17 8 -36 30 31 21 14 36 -2 -17 -25 -10 57 28 -42 -25 23 33 -15 -18 19 8 -9 -26 25 -6 4 -7 -5 17 -48 41 -36 -29 60 -7 14 -1 -6 8 10 26 -1 -2 12 -36 -24 -33 -57 31 -10 -24 -52 -29 -15 -18 -3 -32 -34 4 25 7 -26 -32 6 -21 -38 19 -11 0 -10 16 9 -24 -31 -47 19 24 44 18 13 -15 -20 -15 -43 12 -15 -24 -16 1 0 3 0 -8 -29 -2 0 3 -31 -19 0 -29 -5 -17 24 -7 -44 -5 22 7 -21 -16 33 26 0 -17 9 -4 3 -22 -8 -2 -1 36 32 -16 -15 -3 -2 -9 -21 0 32 -8 0 -9 -19 16 21 0 13 -5 -23 -12 45 29 -19 14 -16 36 11 10 8 -52 -2 -14 -27 -9 1 24 4 -11 -11 -9 -7 4 -7 -17 -18 23 17 -7 -39 -8 4 -4 -23 -10 19 -26 -1 20 -4 -2 -29 -12 -11 -9 -5 -8 20 33 5 -4 45 -26 4 -13 36 -12 7 10 21 1 -24 8 31 -3 -17 5 5 8 40 27 -13 24 -27 15 -21 36 21 13 -9 -31 -4 -18 -46 31 -23 -2 3 -49 -33 -51 -23 19 -6 55 -24 -35 -11 6 29 -53 -20 5 25 7 7 36 14 4 14 -20 -50 -19 32 30 -44 -10 -10 -4 -10 -13 -16 22 -50 -21 46 -5 -60 12 11 6 5 -9 32 -7 -82 30 48 14 5 -8 1 -16 11 20 -11 1 7 -29 8 10 -18 -52 25 2 -4 -5 -12 -9 -8 -18 -19 13 -16 -1 22 -11 -21 -12 9 -4 14 -18 21 -27 -12 29 -41 -6 -15 -7 -6 44 7 -23 37 11 -18 -34 -35 41 54 -37 41 -7 -11 13 13 38 16 40 -9 -8 44 0 39 -27 -22 -16 0 2 18 1 5 -24 -47 -41 1 -15 -14 25 22 -9 6 25 30 21 -1 14 -7 -15 -21 -4 -11 -49 -32 23 17 -14 60 -2 -4 30 20 19 30 32 -31 27 13 22 9 -12 -7 13 10 -5 43 -29 -9 -33 -24 -26 24 -22 8 7 24 4 6 14 34 17 0 39 11 4 -28 -5 -40 -14 1 -23 14 -5 32 18 10 -29 -6 -18 -15 -10 8 5 -2 -2 30 -29 7 -16 18 1 -26 22 17 -10 -7 -1 4 -5 -22 33 -6 -27 6 -11 25 27 -7 -12 -12 -6 -2 19 9 1 -31 -23 1 16 9 -16 5 -42 -24 -3 -17 20 -20 14 -29 2 -14 3 19 27 -19 33 -3 -4 37 -2 33 -12 -17 -71 12 -80 -68 -6 -14 -15 -43 -8 1 28 -66 57 1 -9 14 -13 -3 2 -13 39 29 19 35 14 19 -40 13 8 39 3 10 51 -2 31 -47 -87 -22 -43 -49 22 -22 28 22 44 8 -92 46 -4 10 -11 -29 25 19 -28 11 -20 -8 23 47 69 -4 -31 37 11 -38 -16 15 14 15 -13 1 21 7 28 -1 1 -26 10 2 0 -9 4 -9 17 0 -28 43 -5 -37 54 -19 -31 -24 -23 34 7 -9 -5 -11 -16 12 17 0 9 19 67 -1 -32 13 12 -23 44 37 -25 -8 -20 -7 -31 23 -10 -19 1 -3 -5 16 -26 15 46 -4 59 9 -21 -11 44 1 -9 -9 -4 13 0 -6 -10 -44 -30 4 17 -14 37 1 26 4 -26 -41 -23 25 -4 -11 4 -8 -16 50 -6 5 -3 -2 41 -16 -22 -6 3 -14 18 24 -7 17 8 -5 5 1 -4 -25 3 22 18 8 8 -11 11 25 10 -10 18 15 4 18 4 7 2 -5 -6 -33 23 9 -11 -4 -11 -13 2 -19 26 9 -43 -23 0 -20 -3 -34 19 13 18 -9 13 32 20 -12 11 -11 21 -11 14 18 -8 1 -19 24 -10 -49 0 20 -10 11 5 30 36 7 10 24 25 -29 6 18 -16 -8 -36 29 -20 -20 25 3 14 16 -4 -65 -57 -6 -45 -59 44 62 -43 -8 -10 -53 27 101 33 19 -55 -63 24 -16 -14 22 15 -32 0 -54 10 13 -35 -18 34 -48 -9 -48 -8 3 -15 -3 5 -49 -34 -15 -32 -38 3 19 -25 -42 -93 3 -21 -19 1 68 19 59 100 40 3 79 6 64 8 -18 80 -24 36 10 26 -60 24 -19 -29 -26 -16 -42 -17 31 24 10 5 9 -37 -21 68 36 37 -14 -46 40 -37 -34 -13 -51 -33 17 20 28 51 15 -44 -51 -33 -9 -11 -26 13 -36 32 -6 -31 9 -54 17 54 -8 -37 25 -15 -17 22 -26 9 37 -46 -11 -44 56 19 31 -31 -12 -21 36 3 -56 5 -35 28 -18 36 -40 21 17 24 -14 -32 -20 5 10 -18 21 -47 -12 1 3 17 -28 29 -20 -40 -28 14 26 11 -48 -5 -67 -27 10 -2 25 -33 -1 19 2 -22 -3 -19 -5 46 11 3 -23 38 8 32 22 -13 -64 7 31 13 -19 -5 18 -2 33 -10 50 -30 22 29 31 11 -11 43 -2 22 33 -5 22 -4 -23 22 39 23 3 54 -28 -6 30 17 -44 11 -47 -30 -45 24 9 -39 -22 -2 0 -22 -32 -6 -20 -12 -31 -44 -4 14 4 10 -15 -22 0 -9 9 9 -27 -29 13 -27 26 1 27 -13 -13 12 -11 17 7 -23 -5 -6 22 11 6 12 40 -17 17 25 -23 3 8 -6 -20 -8 -1 -12 -18 14 -6 19 -38 57 -71 4 4 -42 -20 -50 -6 4 11 -6 34 30 30 13 -57 1 -30 -61 -25 -55 1 101 62 34 -21 11 16 -1 0 4 -2 -12 -33 -19 -58 -26 3 -56 -2 -26 5 6 -38 -47 -1 10 -16 -1 -33 -5 -26 -26 15 35 49 -40 8 -36 -72 -8 9 30 39 17 12 12 -47 -34 -17 -15 -16 -4 4 -20 3 22 64 2 -13 -49 22 -9 -6 -6 -25 33 -44 19 -10 -32 -56 1 -20 16 18 4 28 6 -5 -32 -36 -35 -4 -2 1 -24 -6 -6 14 4 -39 26 -4 -39 12 -10 9 1 -28 29 -25 -27 5 -35 17 -8 7 5 -8 14 12 -20 32 -14 -39 1 3 -13 -20 -21 4 -28 21 42 31 36 23 15 -17 -31 -56 -2 6 -58 22 -8 5 -27 -23 8 12 0 -15 33 -1 -31 -1 -17 8 0 28 -34 21 0 28 14 -5 15 7 -9 -21 54 39 -49 18 -32 21 -4 26 -2 -23 24 15 -22 -10 -3 6 10 -12 7 17 24 8 -16 -26 -13 -16 -1 28 -11 19 15 -9 22 -17 -16 9 15 -19 8 4 6 3 -2 -21 -8 -23 -13 5 3 33 -6 13 -7 26 18 15 -8 6 9 1 7 -9 -31 -25 -3 -20 -13 -26 -1 8 -13 4 -25 7 -36 -28 1 -5 14 4 -21 17 28 3 6 -29 -14 -2 23 49 12 6 -18 -28 5 20 13 -31 40 20 -37 26 -20 -14 -20 -15 17 18 47 17 33 -9 -17 6 47 11 -6 4 36 56 62 61 -101 94 -51 11 15 41 104 21 27 31 46 -4 57 4 -5 23 11 45 -10 37 -2 47 -86 27 61 22 -24 -115 54 46 19 54 -2 5 -17 -45 26 23 48 39 30 -47 -36 61 39 15 67 20 91 100 -24 64 -79 -52 -77 -28 91 -16 13 6 -8 10 -41 17 -4 -36 -49 37 -26 6 -25 -4 29 34 -27 22 29 -1 3 75 -19 10 1 -14 0 47 -29 12 32 -3 -21 -8 -17 -13 27 -22 -39 54 25 -15 75 -2 -13 80 -18 -31 97 68 -1 110 20 82 43 -4 -41 24 24 -33 -70 17 -35 -79 19 -7 66 -48 83 38 11 38 -83 8 -7 36 22 24 -20 -17 18 22 21 -7 66 11 -51 -52 -25 27 -72 1 -7 19 -6 19 0 -10 69 22 7 43 -23 52 46 15 -50 -14 -13 11 -3 -29 -6 -21 -28 -40 36 73 -21 -5 4 58 -52 -7 -10 18 13 -59 26 25 13 8 40 14 11 -75 -34 16 2 -44 -37 -14 -5 40 25 7 15 13 26 32 25 17 -27 7 -11 -9 4 -23 38 -6 -13 -22 -13 -36 4 1 -32 6 -27 -1 30 16 7 4 -22 -15 -12 3 -8 34 18 -3 90 -5 -18 -4 -9 11 -15 -4 3 37 -12 -39 -23 -3 6 6 30 -3 10 5 21 -57 45 -10 -20 -17 -2 1 3 31 38 9 -5 18 30 17 -31 -54 32 55 -14 -16 66 32 4 4 34 -6 -115 -53 38 -25 -86 -80 45 -62 92 7 109 -34 -31 18 -65 52 39 -46 -25 -72 -28 62 35 27 44 -1 -54 30 -39 -124 -21 -13 -62 21 -16 -25 49 42 -3 -47 -67 -44 14 61 -43 -26 56 2 95 22 64 109 -52 -3 4 26 -16 6 125 14 -18 6 -60 -13 14 16 24 -26 0 12 -4 -74 -61 -31 -4 -16 66 25 -29 53 -41 85 40 -42 15 -89 14 7 1 -10 19 -24 29 -57 56 -35 -71 40 -11 31 69 -2 -10 11 -106 -31 47 -103 25 -9 -23 -3 61 119 -18 -8 36 123 -65 47 -4 16 -52 -54 -10 -20 -43 -73 23 -30 18 21 8 -98 29 -33 13 -48 18 -47 -60 -91 14 -16 22 26 108 -12 6 -6 54 -12 -40 0 -12 48 31 -33 -36 88 35 66 -37 -67 51 -39 20 -67 -57 -16 51 -16 -4 68 -33 -8 0 12 -12 39 4 17 -51 71 -59 24 -11 -1 29 47 -1 31 -27 -54 -4 -21 35 -11 43 45 25 -19 -15 6 17 35 -21 -19 36 9 -9 -5 -25 -2 48 19 14 9 7 81 -26 -48 -51 17 38 22 20 -39 35 53 -15 -6 16 -15 26 32 -17 -40 11 -18 -59 5 -51 16 25 -3 7 -42 -68 -11 -35 12 3 8 -15 -30 9 -9 11 2 -73 -27 -36 31 -3 125 29 -30 9 -38 -11 36 0 7 26 -3 -31 -56 -23 -25 -11 -9 40 -72 -16 57 94 -26 -28 -21 32 -49 -9 42 37 21 -51 5 -12 13 16 59 -78 30 -8 15 -29 34 -2 30 12 -45 0 17 -18 39 23 -45 -6 32 -5 -13 47 31 11 37 -38 79 72 51 24 -36 -5 -33 43 -38 -49 -67 -25 24 -18 -14 83 22 -75 0 47 36 -2 5 -21 1 19 -9 65 -46 40 30 -37 27 113 14 15 50 -23 0 -1 -1 1 13 -28 -7 -34 20 83 -51 -30 20 46 -61 -7 -22 23 40 -4 -43 -64 -31 8 47 -25 -116 74 31 -36 -53 -56 63 11 -97 -43 51 22 -32 19 24 -32 47 2 26 -61 19 4 55 -24 17 -3 78 -52 28 29 -42 -126 -22 -21 42 30 -31 -14 -20 -41 -120 -59 37 -20 11 -29 21 11 30 -16 -22 -13 -39 -15 -10 -18 -49 -33 -38 13 -19 75 7 4 9 -22 -38 2 5 -21 24 7 -56 18 -19 15 -50 53 -10 -31 -45 -35 14 -37 -60 -3 -8 -64 61 7 -58 8 2 -4 55 0 -19 18 -11 12 18 -42 -11 -51 12 -51 41 -23 11 16 4 -17 19 43 41 17 -8 -24 7 18 10 -4 -6 28 -16 -10 25 11 -24 41 13 5 40 44 -15 -40 -16 -39 5 9 34 54 13 -28 -9 -26 -26 -49 14 36 11 -16 5 -4 -30 -6 -19 -24 11 8 -6 18 23 -22 25 -33 -28 -42 -46 -71 -7 5 -69 -28 -50 -37 33 0 67 69 -29 52 29 -17 -4 -1 -45 8 -9 4 31 25 106 35 -75 -15 -4 -66 1 -6 86 -33 36 -112 -10 -53 -39 -51 25 38 15 -26 48 26 -6 86 -2 -24 4 -12 7 44 -56 -75 -65 36 -3 -70 -61 -6 -42 15 84 44 8 -31 33 33 -17 20 -13 60 -51 25 1 42 -4 76 9 58 -3 26 -27 17 6 8 4 18 -81 -6 -29 50 55 27 -41 29 17 46 -46 -7 -9 -5 -3 80 -20 -9 -22 -15 49 -42 -28 68 -31 41 9 41 -2 3 21 13 36 -43 39 21 15 13 -17 22 -55 30 -34 -47 -65 -81 98 27 -48 -15 -41 23 -9 5 -12 -14 31 17 -18 6 -4 -40 -15 37 11 -11 27 7 30 -53 -26 29 24 -9 -60 16 -3 -32 3 12 79 11 -59 8 59 26 57 8 6 -29 -18 -37 -28 -4 -5 -31 -11 -1 10 5 37 53 15 30 -35 -31 8 -31 7 25 -37 -5 -5 -18 8 0 -15 3 -12 14 47 5 11 22 -39 -21 -28 -4 39 -17 -8 -4 -1 19 28 20 25 1 -9 11 -45 -12 37 13 -34 8 8 -1 11 13 11 -4 45 30 26 13 -10 -41 17 -40 -8 -21 -64 34 11 -8 -34 -29 -17 27 -9 -25 32 -38 37 21 6 -63 26 -15 -21 -16 33 37 37 -9 -10 -21 31 27 -25 -6 62 -23 16 -14 7 -8 -8 -25 7 36 91 -31 -28 -13 12 9 -47 27 24 -11 37 -5 51 -42 51 -7 12 -36 0 3 -45 80 37 90 -18 86 126 -9 -16 -7 -26 -19 27 1 71 80 31 88 62 -35 -17 109 126 -70 75 -6 -28 -40 -23 108 10 47 67 44 51 41 2 44 -28 31 -121 10 84 -2 68 43 -72 97 -8 42 119 6 39 58 63 13 3 -77 -27 -4 14 -52 47 -1 54 4 -39 67 105 -24 -51 -59 51 11 36 -28 58 16 -4 89 -6 43 -73 29 -37 -4 -112 4 32 35 15 -54 4 50 34 14 -25 -57 55 29 -61 85 16 -73 55 -23 28 -85 -4 -121 -55 -89 70 -2 16 -2 57 44 -36 -4 28 -15 -30 -28 37 92 66 -32 106 34 -6 -53 49 -47 -88 40 -20 -60 54 -93 53 37 25 13 -4 -14 56 4 -18 -33 -14 -54 14 25 -44 -30 -47 -2 16 -36 11 -42 -12 -50 -5 -71 -73 -84 59 -52 29 15 -19 1 2 -49 -45 -14 -35 -37 -3 -13 18 -59 28 33 -45 2 -36 -1 -11 29 -3 43 -20 11 50 -15 9 -35 17 -14 21 2 -7 -21 23 21 3 87 -9 39 -25 -70 -45 20 33 -6 19 -7 50 -84 37 40 30 21 -5 11 15 -11 8 18 10 -87 -28 31 41 51 -37 57 3 -39 15 -10 -23 -9 11 16 -58 -14 -30 -46 -4 50 -6 -38 -28 49 0 41 19 -23 12 11 -28 10 -65 20 -22 -6 50 53 -7 -18 10 -53 15 -8 18 16 103 21 24 -33 -18 -31 45 85 -28 88 -60 0 42 8 17 53 26 12 -14 -30 -27 2 -8 32 43 34 26 -45 7 24 -15 0 -25 47 -2 43 78 -30 28 10 80 81 -34 16 -15 26 1 37 -40 115 79 71 -36 4 29 69 55 4 11 -1 -29 -90 -1 47 58 17 39 -44 -12 55 -38 52 -20 49 126 -12 24 1 97 33 44 73 -99 70 -1 -23 -2 4 2 24 10 20 51 2 5 -44 -21 -81 8 -8 -15 6 -1 4 19 -13 12 56 -12 -33 85 -25 -49 3 -96 -52 -66 -6 35 54 -22 -8 -65 29 19 -5 -18 13 24 22 39 -50 -69 13 38 90 13 31 20 -6 -44 42 29 33 52 -45 5 7 31 -37 -13 62 -28 19 -7 44 -23 -39 -16 -5 5 -9 50 19 -38 -105 -16 -28 9 -31 -40 -5 14 18 49 56 -26 -24 -22 4 35 7 30 62 63 19 -38 32 -11 48 -10 35 -1 3 45 25 2 -8 -25 -31 -10 8 -2 55 -16 9 14 83 -13 -14 -27 -46 -42 5 26 1 -15 9 29 -14 19 -25 -36 15 -17 9 10 14 -24 -11 -15 -20 45 -19 11 -15 -15 19 -11 11 26 -4 -72 -23 11 -35 45 18 75 -4 -26 12 23 -15 19 3 23 -15 44 28 -1 -4 -7 18 1 -16 -2 -16 22 16 36 38 -11 17 -6 34 109 35 -35 118 79 64 -66 78 19 49 -37 50 64 -47 3 83 15 -12 123 -68 -11 -11 3 -32 13 19 3 77 99 -45 27 -73 18 91 40 100 -6 3 85 -95 -37 -4 59 16 34 -60 -67 8 23 10 124 -56 14 -38 -37 44 -31 31 8 48 36 39 9 28 41 21 113 -2 102 27 27 -24 -24 -25 -47 -3 37 -27 -26 32 3 117 49 -78 103 -19 30 24 -19 41 -54 52 86 19 87 -16 17 -58 28 -43 -2 -16 47 10 -38 28 -26 -41 -5 89 -28 -49 -35 82 -11 71 44 13 123 38 -11 -10 -21 18 65 5 17 38 52 44 -7 6 25 -7 -21 -12 23 117 42 117 15 14 2 -55 -39 102 -7 11 -19 29 -3 5 29 -99 -9 25 -1 -26 75 4 25 -83 -17 -27 9 -38 20 -16 14 -14 11 -42 -88 -33 22 -5 -18 -29 34 33 15 32 13 63 -32 -25 -71 -16 12 -65 -1 -51 32 33 -24 -28 -10 55 63 -14 44 67 -5 -47 23 41 28 27 1 -34 -19 27 1 37 -3 -16 22 3 42 -13 48 -5 -38 -16 -11 -27 28 12 -39 -4 -2 23 -12 15 12 -44 -4 4 -34 24 -37 -10 31 9 -47 14 27 20 32 -4 -21 -35 -3 29 39 -9 17 7 -14 40 6 55 39 14 -17 22 46 64 7 17 11 16 -17 -6 -66 -28 48 44 5 3 28 -26 4 22 44 2 -17 54 122 -19 25 19 -22 32 48 83 -78 53 1 35 60 -7 -57 120 42 6 -3 32 49 54 35 63 -73 73 -84 10 10 4 49 -40 -16 -25 42 23 -80 1 18 -18 59 -9 44 40 73 -34 50 51 -4 -16 -9 29 97 36 18 -1 -8 -13 3 58 58 -16 -30 -27 -5 51 30 70 26 24 -18 28 -34 97 39 -27 9 -16 -43 91 49 27 -40 -74 4 32 100 39 -20 50 25 29 -4 -41 -55 -77 49 43 50 5 -24 -36 7 -16 -9 -6 -46 31 36 -6 35 44 -31 -18 49 31 112 -23 28 7 -8 -15 34 -6 80 9 33 29 -23 -31 7 59 24 -48 60 44 40 -13 54 23 -14 -112 17 19 35 6 -16 62 -113 51 -25 7 34 -36 -10 -46 -15 28 12 75 -34 -10 -2 -41 22 0 17 36 22 7 52 -4 18 -73 24 27 -28 32 34 -44 -10 -20 -75 -4 12 7 -42 -36 52 78 0 22 -54 1 -21 -17 -28 34 20 -29 4 5 -5 1 -4 -4 2 31 6 -7 -38 -2 4 -8 2 -11 0 -37 6 -17 -17 -11 33 0 8 -28 53 -8 38 39 -17 -28 16 20 -16 -24 17 22 7 -5 13 8 2 -8 20 10 8 20 2 12 2 -13 -50 -81 7 2 9 3 -21 -10 -10 35 19 23 -15 -24 9 -6 -24 48 -46 -28 -13 26 19 -7 -10 15 51 -13 20 -13 -6 -20 -17 -15 -7 -64 69 127 -35 17 26 47 55 51 96 6 -79 72 13 -53 2 125 14 66 24 25 -9 -27 81 14 43 95 11 49 -15 16 -22 41 31 42 -16 97 0 87 14 7 -30 19 -24 18 60 -59 84 -10 -10 15 96 8 14 -4 9 39 127 66 1 51 20 23 127 44 54 74 107 -5 1 -14 4 55 42 0 -9 54 15 -77 -11 -16 58 106 9 -60 23 -19 62 -1 -49 81 -2 26 15 114 -16 -20 33 7 39 -31 9 60 22 -16 39 -29 -45 -9 51 18 47 22 -5 58 -49 25 29 -55 -53 36 24 47 11 -8 72 -6 -24 -20 -65 -22 -25 38 91 -29 -9 25 39 57 24 87 -28 -59 7 -14 -22 -43 18 39 37 36 37 20 -17 31 44 26 21 -84 3 -42 -53 37 71 -37 22 9 48 -13 33 -2 -33 37 24 10 23 29 -20 -52 33 30 -14 -60 -46 34 -56 8 23 -16 46 -15 37 11 -24 -49 12 -14 26 -22 -11 15 -28 -6 -40 26 6 -50 -28 45 -23 -41 14 24 -21 11 -11 -2 24 -16 -14 -5 -5 -14 -41 -17 29 -23 14 36 -1 -10 14 6 -42 1 -51 6 -50 -2 -48 -32 -31 6 -17 18 -14 40 30 -8 -14 20 -16 44 -6 -89 73 16 5 26 45 -1 -6 -20 -38 38 -10 -76 -19 -12 -50 -3 1 -12 29 4 -17 -5 -10 -25 28 21 -51 20 -29 48 -58 -23 42 31 -68 31 -30 -14 45 -82 8 -39 -24 45 22 34 11 5 -1 -1 41 22 40 34 83 35 -14 -37 -7 -58 -1 -38 62 -57 8 -30 36 11 2 46 6 -22 -30 -9 -41 -38 -87 37 41 15 -16 34 -94 -13 -21 -8 64 -44 63 57 73 6 27 36 -14 59 -31 67 -27 52 -56 -65 -21 -25 13 16 -20 44 19 27 52 100 -30 -15 35 79 -17 94 74 123 33 -31 70 9 25 -87 -27 -69 -36 34 93 7 -40 47 81 -24 41 80 -87 14 47 22 -35 -69 -56 35 -12 -33 -76 -37 30 -54 71 18 26 43 67 107 51 31 -22 -1 94 15 18 -33 -29 0 19 3 -52 5 49 45 -8 -9 63 0 100 11 22 23 -9 -1 -66 -53 3 7 36 29 7 -16 32 66 27 12 -88 -35 23 -19 -50 0 52 -40 -27 -10 79 97 -116 -47 9 -45 1 -9 71 -126 -4 -46 -48 -58 -62 -65 -13 -53 -17 -58 9 -16 -11 -49 17 17 -94 12 52 -52 0 41 27 -15 -29 -24 47 18 25 -38 38 48 28 12 7 -13 8 19 -28 -41 9 13 -9 44 1 -7 23 -12 11 -3 89 0 5 3 -55 -46 -25 -8 -12 17 -38 4 55 -14 7 -12 -29 -8 17 -17 -54 -126 -5 4 -23 8 29 -41 16 34 36 46 -23 26 24 29 -22 -6 27 29 -33 -23 58 2 44 63 46 -36 25 -46 56 60 24 30 96 93 44 -5 19 69 -23 85 -35 73 38 91 41 26 -35 1 47 15 11 -22 15 -29 15 48 47 -31 6 -30 50 -76 6 2 26 44 -7 14 39 93 -42 91 19 52 -11 75 2 3 99 -16 24 47 0 -27 22 15 -38 15 50 83 60 -26 116 52 67 3 -9 -72 40 82 -53 25 -3 -36 -7 -1 92 29 24 49 -59 44 73 37 31 18 66 -12 127 10 5 39 26 31 38 63 -45 27 -24 9 25 -30 -17 39 -88 -71 19 20 -62 32 48 41 31 23 -68 58 33 -22 12 5 89 5 30 3 -39 7 45 -18 40 -13 -77 10 -24 123 49 28 46 -18 49 46 40 -1 -3 30 14 39 102 4 26 56 -3 40 21 -15 15 35 -66 -25 50 30 42 -38 7 -3 33 -9 -60 7 14 22 21 46 9 28 33 -16 -41 -20 17 18 16 -54 3 -3 22 -25 -31 73 -72 -15 -49 -17 19 11 -93 -59 40 -37 -9 10 -48 -37 -21 -52 15 -30 6 12 19 14 -35 8 17 5 -23 13 -18 14 -31 13 -5 -38 4 -50 -13 -11 -16 -19 55 42 20 2 -15 -31 -14 -19 -36 12 -9 38 35 27 -24 19 22 -2 -22 57 1 9 -18 18 -4 -22 -19 -19 16 -25 13 13 -52 24 -27 -10 5 -19 -19 16 -13 46 25 -5 28 24 34 -43 -46 -61 -6 31 31 12 -40 26 -37 12 26 -4 28 -31 -21 126 -50 3 3 -97 -44 26 74 25 46 55 26 72 22 32 -17 31 -81 -24 -18 47 113 -7 41 55 0 78 61 90 -9 -27 -33 -23 3 -10 49 102 -30 115 90 19 -2 24 0 -28 106 -7 2 -42 121 10 39 -120 24 -12 -61 -77 -6 -40 -58 -13 -124 -46 19 10 47 -37 -2 3 8 -48 45 -18 12 -65 28 23 13 -96 -60 -8 3 -25 69 -16 97 -49 -57 64 81 71 -9 -12 95 -8 20 -36 -21 -34 -38 -23 -77 97 -29 -99 -5 27 -107 16 32 63 -16 -24 11 -11 -9 -66 -2 -33 -45 68 25 5 -14 -31 46 58 34 64 -14 8 -35 -108 -18 73 -70 50 -74 -43 -57 16 56 49 -29 -31 31 -9 62 32 -5 3 81 24 -5 -32 58 60 -43 -81 -30 48 60 -38 75 -62 -17 -70 -1 102 -51 -32 49 -29 34 18 47 -40 -63 -18 93 -14 -45 -36 16 -45 -28 23 -30 42 -25 -65 59 -32 54 18 1 -42 25 31 -6 -24 14 34 26 -38 60 -11 -47 -30 -22 -28 -107 -72 28 20 -4 15 9 35 22 -36 29 -54 45 3 17 -30 16 56 6 36 -25 9 30 4 14 -10 -11 27 39 -24 127 -19 42 -42 -26 1 17 16 35 0 5 15 -21 -55 -6 27 41 2 -10 44 -18 -55 36 -3 7 0 21 31 20 -75 -35 10 11 4 -126 12 -24 14 58 69 -13 5 -41 7 48 25 35 44 -9 17 -23 81 -5 81 -42 33 30 64 21 -48 -51 -18 7 37 -13 -36 86 -28 -8 -108 -18 34 -39 51 30 21 82 59 -90 -56 37 60 -54 26 -20 41 34 -27 34 -86 -30 10 5 26 54 -73 106 -26 27 -39 27 61 -90 79 -13 27 38 89 -14 5 -44 -32 19 -22 -47 -12 -41 -13 -33 -73 118 -8 1 -11 -1 -23 53 27 -19 -46 35 -27 41 -51 -13 34 81 51 -41 27 66 41 -53 -30 -41 -70 -11 25 15 -21 58 31 35 11 20 -8 -3 -45 23 13 -8 17 -25 5 -13 -43 28 -3 17 23 -20 48 -44 -26 -13 -53 31 7 7 -62 16 3 22 72 -14 -29 -28 7 39 -22 28 1 -7 23 -62 21 27 -26 18 27 17 32 21 1 -44 -17 -40 -68 -9 32 2 77 -38 -15 -6 -3 -37 -40 59 9 17 46 9 -2 63 33 -14 -39 54 -17 -30 -48 41 59 -42 -28 41 -35 13 21 -39 28 -8 -20 -34 -31 -21 -7 -7 -8 17 -27 42 -39 -6 6 -34 -33 -39 43 10 -47 -44 -21 -22 -11 -23 -26 -10 -20 -13 -27 75 54 6 -3 9 -10 29 5 38 -20 -48 -17 -2 24 -42 12 -4 -36 4 25 -44 -5 15 -7 -12 2 -8 6 17 -27 23 -25 6 5 -19 39 -52 -44 4 -15 17 8 -18 14 -13 0 -6 -7 -10 -4 -8 -8 26 12 5 -39 54 -10 -10 -29 -32 -22 -9 17 94 -27 29 38 11 110 -86 7 41 -23 13 60 45 39 45 37 10 59 62 -41 -104 20 31 -37 -5 28 18 37 -34 -8 -32 -4 63 39 70 6 -15 126 -20 -73 40 30 15 21 62 -25 -63 -2 35 1 10 -5 13 48 -66 1 -2 64 15 54 23 -30 53 61 -5 18 -77 123 -43 65 39 15 74 -41 -109 11 18 -4 -6 24 1 9 -61 18 51 54 -70 66 -17 34 16 -19 3 -14 -4 -98 40 -1 16 1 -69 2 4 18 62 -33 -4 -36 31 42 1 -75 -92 17 27 7 -30 48 -61 38 -1 6 101 74 -40 24 -17 -19 -20 -94 -17 2 -19 16 2 -20 -18 32 46 2 -11 -30 10 -53 -40 19 -66 8 7 72 -16 -53 94 -55 12 71 -93 -20 72 7 18 -20 -2 23 -83 25 -22 33 12 9 20 -14 -81 -77 14 84 -105 -54 -49 -71 67 -58 -12 28 32 27 18 -24 20 -51 21 -44 10 -24 -3 -68 -36 -1 -45 -10 -3 9 41 -1 -57 6 -5 1 -17 -23 34 -23 27 46 -29 -35 -10 -8 -27 -20 8 0 -36 0 51 18 41 -14 -37 66 -20 12 -40 -4 -4 -44 69 -16 -18 -15 22 -25 42 54 -64 -24 -13 21 42 20 -15 20 -9 52 18 -14 5 -19 24 -3 -17 3 -13 -12 3 17 4 -51 12 37 7 16 32 42 -15 31 -21 -32 34 44 12 41 -32 -34 42 -3 77 -11 26 -29 45 27 -4 2 -34 -18 36 -118 48 3 31 -31 -1 -22 27 15 -45 6 -34 56 -16 28 45 25 87 61 -35 28 91 -12 84 62 68 -35 -3 18 -25 -35 -48 43 53 39 59 -34 -44 -30 -4 7 30 68 2 120 -21 -14 54 21 1 47 39 -3 70 64 62 -7 -71 31 15 101 3 36 15 8 6 10 21 31 -14 -3 -60 0 16 16 38 -25 -3 17 18 24 -4 -39 -26 21 -35 -6 -22 -14 46 -50 -16 50 -8 -49 -35 32 -26 9 -12 -9 44 10 -15 29 39 -15 11 60 -5 18 0 -52 -46 -10 1 -26 8 1 -30 50 1 -14 47 -74 -17 26 23 41 16 58 0 -19 7 4 -46 -22 38 23 -48 -20 18 -41 34 -26 -19 43 21 -29 16 11 1 -16 21 28 -36 17 -2 5 21 43 -3 20 9 -26 32 -2 -12 -39 -14 5 -61 39 13 39 64 25 51 12 23 -12 36 49 -4 -24 8 -4 -43 -50 59 -18 0 -4 46 -53 22 1 -34 5 -5 -11 -12 -5 -26 2 -5 -12 -33 43 -36 11 -1 -11 35 25 -23 -5 54 33 -11 -15 -29 -4 -7 -42 -12 10 15 26 5 13 -4 -49 -4 -9 -49 -9 13 16 -26 -6 -12 44 19 -54 31 -16 59 38 -14 19 -16 7 -14 -50 19 -41 23 -18 -43 20 -12 16 44 13 -45 11 18 -14 -4 76 6 16 -33 -11 -7 30 75 -56 21 -3 29 -16 95 15 -32 -9 22 -3 103 2 -104 21 -79 80 -27 70 11 33 68 -6 -43 27 10 20 -29 15 15 10 10 -11 12 21 -4 -47 -22 26 86 -29 65 46 84 -39 -103 -33 -8 32 107 25 32 103 37 55 65 -6 -2 19 -38 30 -110 -15 85 -35 -26 -53 55 85 43 -45 64 67 -54 42 -1 -3 47 63 -1 66 -3 51 -112 -23 -4 -9 -62 26 16 66 1 -31 26 1 5 40 -6 -67 -14 57 -59 37 52 71 -27 27 -15 -23 -32 28 -36 -46 24 49 -11 34 -51 -24 29 -29 -19 46 -53 31 22 43 15 23 -14 -8 5 39 18 45 28 43 7 -40 26 20 35 -25 33 17 23 -78 -30 -31 -3 8 18 34 -25 42 18 0 -25 -28 10 -6 -3 -105 -23 -7 7 51 17 84 -41 -8 -22 9 -2 -74 -2 -61 -40 12 6 26 23 -26 -57 -8 20 -8 38 -19 -11 3 -11 -12 11 36 -2 30 -37 -8 29 52 -20 33 9 7 25 6 -7 -4 33 22 -30 19 -52 42 9 72 -5 -11 2 27 40 -8 -30 -17 -23 -21 -65 10 -25 -12 20 -19 -26 10 39 -41 36 1 23 6 -20 -10 -30 29 -28 -39 31 -7 -11 46 16 -29 9 12 -39 2 -9 -27 -8 5 -15 7 -20 -69 -7 5 33 -1 39 1 -38 -30 -16 -5 29 64 5 -32 39 -33 25 21 11 -13 -2 10 66 32 29 26 -65 11 -23 -47 44 -63 24 -27 11 -85 6 10 -19 -40 54 25 -13 48 -33 4 -5 32 42 21 -4 30 -35 -16 -9 35 71 -1 -2 -57 43 6 -15 -10 -41 118 18 6 -26 2 33 -51 52 55 -44 43 -26 54 33 -9 23 6 -14 -65 37 7 99 -14 -27 15 1 -62 24 -34 -5 24 15 -23 50 31 16 -7 15 7 -28 -7 -25 -31 13 -97 -16 24 -25 -37 48 -24 23 -22 -38 -44 -21 38 5 -33 -19 60 115 23 32 -31 50 61 -31 10 30 3 19 -59 -12 0 17 -98 74 22 26 30 50 -79 31 18 -78 67 -59 -4 -22 83 -16 33 -72 -61 -51 15 38 24 34 -28 45 23 27 -37 6 16 29 -9 -43 -76 19 48 12 56 26 2 -30 4 -31 -3 -19 28 -21 -50 52 -17 5 -20 86 -59 25 7 63 25 -22 -65 -36 -8 -33 57 -73 -31 -9 7 -15 -3 21 -20 50 -46 25 -12 19 7 29 41 -51 9 58 -1 9 2 -15 -31 -30 -45 -24 -15 -67 -6 -57 -31 -6 -30 -13 44 -2 59 1 38 -77 -15 -13 12 29 14 -26 6 -41 -6 -9 8 15 -2 14 -16 -6 3 35 -11 7 -8 41 6 -38 -75 18 -42 4 34 28 -9 -33 14 36 -7 52 -3 20 4 53 -17 25 12 -22 -13 -25 -29 43 26 27 5 -8 -4 -44 -11 -1 -14 25 99 37 50 -4 14 10 0 28 8 -108 40 71 29 121 23 13 63 -40 -12 23 31 -65 -7 -24 78 -63 25 27 54 -11 12 -52 2 -20 31 7 -40 19 26 48 6 27 -8 -31 -54 3 -2 -48 -28 -21 100 21 -3 -3 -27 -21 10 -26 -35 -32 -6 -89 5 37 -30 -64 72 38 50 37 -30 -28 23 58 100 2 -37 -49 -91 10 63 -61 75 -23 2 65 16 -31 24 24 56 1 53 57 16 36 79 21 0 8 66 27 -52 1 63 15 13 -69 21 -5 35 -23 -1 -36 -69 15 11 14 -2 1 -28 15 -18 -89 20 97 -32 16 34 112 31 34 -19 -5 -26 -22 -60 -16 0 37 74 52 -12 17 -9 30 -15 47 15 113 -42 -15 40 25 23 35 -38 -8 -3 32 -32 -31 -9 -34 -19 50 -22 25 53 -75 -17 -15 44 74 7 -33 6 -67 -49 -5 76 36 -48 -20 -1 -7 -71 -18 -12 7 4 37 -38 -56 -49 -26 13 31 5 -32 -5 9 -29 -5 2 23 -20 -22 6 10 22 -8 -25 19 19 9 0 2 8 47 -13 -53 7 9 55 49 -1 34 35 -33 -23 12 -22 11 25 -25 28 3 -21 8 43 -1 -2 -17 18 -28 15 -17 -21 45 -16 12 29 -7 -11 -12 14 5 -38 -2 41 -23 15 0 18 -13 34 26 -41 18 51 -6 3 -20 10 19 18 -29 2 -18 -7 -26 0 8 102 -7 32 7 -32 -17 -51 47 31 90 -17 45 61 -44 90 11 47 85 46 31 54 17 21 54 2 37 26 -1 32 -30 26 52 36 16 83 -32 59 -15 -19 -19 45 16 38 82 13 20 -16 60 41 27 -24 127 69 69 -31 -11 -76 35 -10 -9 64 -28 16 21 22 23 19 7 45 23 44 -3 40 17 39 15 8 -21 50 26 61 48 46 79 -3 4 23 85 3 11 59 84 52 84 -106 26 101 54 -4 -39 70 40 36 89 52 -34 -23 13 -28 -35 -9 15 -24 5 -11 42 -56 -8 -20 11 12 21 -18 38 -40 21 46 21 29 32 -1 -12 8 3 -18 20 -3 50 -4 -18 -24 22 14 45 -42 -12 -13 18 32 -17 81 96 -45 63 15 -48 16 -46 52 7 -37 53 22 -35 8 13 11 36 -39 29 41 104 -38 -22 20 -30 -5 44 -31 -6 11 -37 71 -26 -33 -58 -35 -53 -1 -6 -2 31 -11 10 -9 52 15 -50 -8 -22 -13 10 1 3 16 -13 -48 15 -26 -6 -23 8 -39 25 -4 -10 5 -48 -33 7 28 -5 -21 19 -6 -11 34 4 1 -57 36 10 34 33 -20 -6 -11 0 7 -24 -11 -19 5 19 -20 -11 -8 45 27 -25 -5 -10 23 18 20 -51 -23 4 13 18 21 24 29 10 -17 9 -23 44 4 -20 42 -72 5 21 -63 33 -63 -12 -14 -9 20 -11 -38 6 15 -8 7 -54 -9 43 86 -17 -22 21 -21 -23 25 -2 3 -81 -5 58 -64 -29 55 -61 59 -32 127 -19 100 65 -44 37 -2 24 90 -2 11 -17 44 -39 88 30 88 20 87 -39 -75 22 -24 -11 16 75 -19 -91 40 39 -25 0 72 -29 11 -14 -42 -34 74 16 9 13 -28 27 93 36 16 50 90 0 27 49 28 -46 7 -28 25 0 7 20 -17 1 27 57 2 26 -29 18 31 5 67 -55 60 62 17 0 -71 -28 -10 -13 -12 58 67 38 -30 40 -4 21 -18 20 -42 5 -24 -5 22 41 -4 96 21 5 -31 -38 -7 -64 -128 -13 -47 55 76 9 -47 22 -58 -18 24 19 -6 21 39 64 1 45 -33 -55 94 40 -7 91 -18 -23 11 35 27 56 64 -10 -21 26 0 22 69 34 -21 -11 -49 8 37 34 42 -37 -13 -6 -99 67 -16 21 -1 -65 39 35 5 -39 -52 -51 65 -27 7 4 -5 28 -24 24 -12 -15 -1 2 33 25 -26 -48 15 -50 0 13 -67 -26 -9 -35 -48 -16 0 -26 -31 27 7 -21 4 15 36 -14 -14 1 12 -26 20 17 19 33 11 -28 4 -3 -23 -20 -10 -47 13 3 7 42 2 31 2 7 2 23 18 -4 27 -8 -42 15 25 22 34 -25 30 5 -4 5 67 -6 -21 13 -76 19 -17 13 53 -12 -58 43 11 24 11 24 58 7 14 26 -59 17 -17 29 39 -4 3 23 9 -107 23 -24 6 -30 34 -22 8 -56 -34 -53 0 -7 -51 -31 -35 -91 15 9 -11 -85 63 -28 -35 8 -39 -13 -74 -19 -15 -14 -25 -20 85 4 39 55 37 -22 0 -56 42 62 4 56 12 -29 74 -78 -12 -58 68 -25 44 23 -71 14 -22 -51 6 -30 2 4 -46 15 60 0 -6 14 1 -48 -33 -50 -33 21 14 -57 -36 55 -42 44 -4 100 -73 39 -1 -23 -17 -15 59 -33 83 67 -22 43 -19 -78 18 97 -54 -5 12 12 20 29 42 -17 -31 20 35 -44 -5 78 10 -15 4 -61 23 -30 89 1 -17 -28 92 21 -33 -23 32 9 14 -26 -12 1 41 29 -21 38 -33 -5 -86 35 43 6 2 -22 -39 -49 -29 8 10 40 -31 55 -16 -18 8 -37 20 66 -40 32 9 7 -25 -36 4 -41 17 53 -68 -28 39 -1 15 -10 -22 2 -40 39 -23 6 16 -9 14 3 22 -3 17 19 73 8 -23 44 8 22 15 22 43 -47 73 25 25 -12 -11 -13 -1 0 -38 -29 -52 -52 -3 15 -22 16 29 1 7 -15 -3 -6 -28 -24 5 8 -24 -9 54 -13 -17 -2 -4 34 1 31 -22 3 -40 34 25 47 30 48 -19 -27 15 -22 -1 -12 29 1 -14 -26 4 29 -34 36 20 8 25 -13 1 27 -31 6 0 1 19 -17 -24 1 13 1 27 21 -22 -9 51 -60 12 -3 -25 35 46 14 -22 14 -39 -5 39 -38 -19 26 8 29 36 -28 38 120 34 -34 -42 42 58 26 -17 74 71 -82 -10 50 -30 14 97 15 -9 28 51 26 21 -17 -10 -13 59 -4 20 25 46 -85 12 3 24 11 60 -24 -22 39 -4 -10 24 33 58 48 32 29 62 0 -56 -11 9 -49 10 -30 50 2 56 -15 33 33 5 -49 -14 58 50 37 -3 106 46 42 -79 93 52 47 63 -32 47 -6 37 26 -54 -38 56 86 41 43 74 7 79 -42 -2 34 -23 -65 -4 24 -2 25 -70 24 -13 -6 15 -45 -26 -47 91 -18 -25 -40 -7 -19 17 -12 -3 68 -16 29 -25 1 49 11 34 4 -50 -2 -20 -25 44 23 2 -3 86 34 47 -29 -30 -13 18 22 2 54 -1 2 4 -42 -1 -61 18 -9 42 11 24 49 -9 -96 -21 -20 -11 30 59 -15 -19 -79 4 30 -1 5 -33 -6 5 -1 -18 -53 21 45 -15 6 -9 -5 -43 -20 12 12 -78 -27 37 4 25 32 35 -8 22 13 -21 -8 -36 31 -22 -3 -2 -11 -49 3 -12 -36 -23 12 -43 25 -16 -19 -13 -7 14 -31 -11 -9 -30 -16 -35 -13 10 19 6 18 -13 22 -14 26 -9 -9 -24 -4 -4 -27 -7 -34 33 -5 -3 -2 29 -1 12 19 26 8 32 -46 -8 25 -44 4 -7 18 10 -5 -12 -48 35 -47 22 -29 37 -12 -31 -5 0 -24 -19 -28 13 -23 -17 52 17 40 -48 -32 -32 5 17 -24 4 -24 15 25 33 -43 -8 25 4 31 63 -20 45 -34 4 24 22 -77 -14 -61 -124 -31 60 97 -6 -11 -12 1 -46 0 52 66 -22 -15 -15 -20 -31 27 -39 -4 -57 -12 -51 29 0 18 85 37 -4 -31 32 116 -27 64 1 75 -38 16 -13 19 12 15 -4 -16 31 3 7 -63 -82 74 60 27 34 25 38 61 27 -12 36 -36 19 -14 47 16 -15 -35 52 25 -43 14 15 -4 41 -32 21 36 68 16 15 8 -36 15 -19 16 36 -20 -36 -87 62 -82 -58 44 112 41 51 -67 -5 -11 14 -3 5 -6 -17 7 -4 37 37 71 95 -27 4 25 66 -65 -18 30 42 -20 -17 -22 -7 58 33 -27 10 58 -55 30 69 25 61 5 -51 7 2 -14 39 -2 -10 18 -12 -24 3 -28 -79 47 -13 28 -6 -15 39 12 0 -8 16 -22 9 89 8 -14 -45 -16 23 -2 32 -22 43 6 -39 48 38 32 23 -28 -15 -8 32 -7 16 6 65 -18 -9 40 -13 44 -3 15 17 -6 -20 12 6 29 13 68 -8 38 39 19 19 -49 2 -1 1 -20 -22 -2 -12 42 -19 -10 -5 23 -17 18 -35 21 -14 -9 19 23 11 27 -2 9 16 -10 -31 14 -9 -43 51 31 -20 -16 10 -23 -22 -6 -2 4 -26 3 -65 -19 36 8 20 -8 7 18 -20 15 -12 -15 -50 7 6 18 65 38 -11 -15 76 -27 -44 23 -32 -43 53 -58 -54 -70 -67 -61 -32 46 14 -17 -52 21 -3 -13 19 29 24 -89 -47 -37 -54 96 10 -15 -39 4 -6 -59 -25 39 -38 46 51 -1 -33 -46 3 -40 2 20 -38 78 -97 -127 122 -47 57 35 -31 37 -5 -45 -24 9 -33 -87 -64 -58 -9 -89 -74 -65 -51 -60 -53 -23 94 -15 -60 42 -47 -17 -12 -18 20 2 -6 -48 -5 29 42 -6 33 -1 46 30 6 -13 8 -77 -48 5 5 26 6 22 58 -3 -5 -13 -4 -45 29 45 37 -2 12 -9 -10 -24 45 -14 29 -76 -55 -9 46 -20 42 -40 -12 -12 50 45 -5 50 -103 -16 -59 9 37 11 -21 55 57 38 9 1 -35 30 46 -18 -68 98 31 6 71 0 -56 0 2 15 -23 -35 -51 -6 52 -78 -32 4 -16 -48 -48 24 -74 -4 33 -53 39 -19 -19 -13 -94 -8 -14 9 -17 56 -40 20 -15 -12 10 -18 9 -24 88 30 20 -10 11 42 -28 1 -14 -10 14 -24 46 13 -23 -36 2 5 7 -11 19 13 15 11 11 -27 47 -16 4 36 -14 -29 -44 2 -30 18 -16 -16 -14 -23 34 -12 1 11 36 -27 -29 -39 29 4 -11 36 19 -28 22 -39 25 -6 -4 28 13 -28 -18 11 9 -35 -58 -12 52 -45 19 -16 67 3 -41 11 -11 25 53 -8 36 15 19 19 31 20 24 -23 -7 52 -7 59 -2 23 -51 13 -16 -33 -2 25 -52 19 -47 20 15 -29 -1 -43 -2 52 -16 -1 -14 91 -7 32 -51 15 -8 -32 90 -39 -50 15 -16 0 52 22 75 23 76 17 2 41 52 -33 23 77 102 18 -3 14 -19 -29 0 -127 23 112 -19 9 -19 4 84 49 -52 58 38 27 69 1 55 52 -7 -53 16 -38 45 15 78 -69 -35 -12 61 14 85 7 7 4 -44 57 43 -11 8 -9 35 -26 -70 -3 -42 -8 14 38 -23 20 -14 -43 -63 79 -24 -81 -21 -71 4 24 35 33 60 -93 -65 -34 38 39 -1 6 -2 -49 -35 -70 0 16 -18 43 85 -7 31 -72 5 27 -13 50 -27 8 -31 -2 -49 -3 5 -5 118 11 87 -8 9 36 54 23 -32 49 118 -57 -5 -21 -33 -28 27 -29 35 -26 -6 -29 -47 27 -71 -7 23 -11 -76 -93 32 26 -25 -41 -50 15 -68 8 -68 34 67 -8 53 22 -78 -4 43 -44 92 -69 12 -27 48 -14 -49 -15 -46 2 -35 -8 -23 4 -38 -25 23 -3 15 74 -13 -5 13 -27 -20 9 -13 -58 27 18 6 -7 7 72 7 -49 23 10 12 17 37 15 -52 50 28 10 -26 45 -23 -27 -26 -6 -71 -44 -11 -3 -28 31 -16 25 -1 15 36 17 -16 -27 -10 62 8 -42 -15 22 7 26 24 23 23 19 -86 6 28 -35 13 7 -15 -8 17 0 -24 -13 -66 -8 13 20 14 82 -26 -28 18 32 39 -21 -1 7 -29 27 -40 -9 -24 -59 -69 5 -51 28 48 -19 -7 33 -62 20 -24 -41 -26 -5 -6 27 -43 20 4 40 36 -17 11 27 -21 4 4 41 -2 4 20 -1 14 -23 -14 -68 46 -10 98 3 30 19 -39 48 58 -13 -27 70 19 34 23 46 -18 -46 -26 -70 81 -36 14 -24 7 -36 73 34 0 -8 -4 37 -86 -11 20 -1 4 55 -18 -84 5 -44 27 43 -19 -110 28 -46 -72 -9 -75 63 -28 -34 -13 -60 -8 -4 -21 8 79 36 31 -26 -39 20 3 -44 87 -35 -25 0 5 -62 -37 -3 -6 71 -42 -10 -21 46 -36 -4 7 -63 22 10 -48 45 1 -37 6 -6 -33 7 -9 45 20 37 52 34 -29 18 44 1 -45 5 15 24 -72 50 65 18 54 -27 -13 42 1 10 11 41 43 -25 5 -31 31 15 39 47 -50 -26 15 55 -6 -45 4 -22 -24 19 -18 43 -26 -25 -23 -23 59 -8 -32 46 1 -5 -24 -8 -55 -26 40 -19 -5 22 14 -39 -35 7 39 12 -1 -14 11 -19 18 50 3 -24 -16 -26 34 5 -20 13 -1 -50 25 -19 -39 -29 7 8 10 -17 -1 -48 21 20 -3 -21 5 -37 -1 1 -14 -13 30 40 -17 2 -99 6 38 3 44 -21 5 0 17 27 -51 18 -7 19 -46 34 12 32 9 -17 22 14 24 17 40 -22 -27 5 4 -24 9 73 27 13 43 8 59 23 37 88 78 7 22 89 67 36 15 42 43 -37 -23 -71 -5 -20 -23 -17 65 36 20 63 -55 16 40 38 52 63 -16 -4 66 120 -38 20 -5 20 18 72 20 -42 14 42 -20 1 23 -69 -42 85 -12 4 23 31 -20 -19 -37 -8 -32 -26 38 0 3 -27 12 71 37 -12 -11 25 15 20 -83 -50 25 21 -71 -13 35 -35 -14 -6 10 -20 16 9 -15 9 8 46 11 1 61 14 33 40 33 25 -33 -70 -9 -39 -27 -6 102 -18 -46 83 1 -17 -22 121 43 -39 33 23 -1 33 20 3 3 71 24 -14 50 26 -5 44 22 43 -9 -28 14 -16 125 20 -12 16 -69 -4 31 -23 33 -94 35 40 10 22 -22 -11 46 -13 71 116 -41 67 3 -3 0 -34 15 16 -21 -53 23 -16 6 -30 84 -27 -43 38 23 -26 -33 32 3 1 1 55 -1 -21 -14 45 -21 31 18 -18 30 -60 -52 -45 46 -13 19 -54 -18 30 26 4 7 33 48 -28 -58 3 21 -4 -24 31 -19 -13 -24 -22 -22 1 12 24 -33 -31 -10 57 40 -49 -1 -32 -12 -2 -15 0 27 16 62 -7 -21 -13 -11 12 -4 -10 14 -20 -5 -14 -45 -20 3 4 -26 6 -79 65 17 43 -34 -11 -50 -15 -54 42 14 46 9 37 30 -9 -27 11 -55 10 -1 39 -19 -26 36 -31 -51 -5 -6 -44 -26 40 -7 39 -1 -52 6 31 -25 51 -43 30 12 74 57 3 0 -5 -27 6 -21 43 9 -66 107 55 -11 90 32 7 -23 56 88 127 -33 5 29 8 89 93 17 16 -12 -39 -9 43 27 44 11 -4 53 78 46 127 77 1 27 62 -34 51 77 49 44 6 121 77 60 18 6 60 -2 37 57 60 4 3 4 28 -23 45 66 39 19 5 54 -66 57 -36 -4 -17 5 6 39 -14 53 -10 -28 86 -4 -1 49 -2 56 42 77 36 -28 123 71 -25 62 -42 36 66 -15 55 -2 44 43 12 -16 1 20 -14 -31 23 3 -3 -31 -54 -54 -34 16 -1 3 24 30 92 59 21 1 -8 -64 -68 -56 -16 -66 1 -58 -17 -26 41 38 23 7 -15 -11 -42 21 18 60 19 -7 23 22 -82 -12 25 2 90 16 17 66 49 2 19 19 20 16 0 16 20 44 17 -20 7 -24 -9 -83 -18 -81 -25 -10 16 -39 -30 -4 -40 -8 -55 -16 -6 -15 -61 -2 60 7 -19 -17 -20 1 14 2 -4 -10 -39 35 -7 -43 3 9 3 21 -20 -24 6 -13 -30 -52 -23 21 37 -6 -24 -2 -21 -21 29 -43 22 -10 1 49 -21 -12 35 17 -6 -39 21 -1 -12 -13 25 -2 -2 9 -12 -21 -4 0 21 3 -2 22 33 -42 32 -3 10 -5 -10 -9 55 -27 -8 15 -14 -40 -27 8 -12 -7 15 -33 12 12 -29 -5 -20 -11 21 26 23 7 17 9 29 2 -3 -8 -29 -36 -86 -25 3 19 -80 54 18 78 -6 -13 39 13 8 58 18 87 24 30 31 -21 -30 42 42 -52 -12 7 30 11 34 -26 -38 -55 -54 7 -11 -75 20 -2 84 -22 43 32 -3 -10 0 14 58 6 -94 -5 29 -28 46 -60 -62 50 -22 -85 -15 47 -33 45 28 -19 56 -16 -28 40 28 10 47 40 32 36 -10 7 16 34 -18 -28 23 -12 20 28 -52 -20 74 83 29 -50 76 -38 126 -24 -39 -2 -30 33 7 29 -12 -8 -9 -34 3 37 -31 19 -8 14 17 -16 -38 -10 25 4 15 6 20 22 89 20 -31 -11 -22 5 29 51 6 -10 -57 49 48 -30 36 -40 -16 13 -6 39 -21 -51 71 40 -65 16 -14 63 7 -52 -26 36 21 -10 47 -22 16 -27 -12 1 6 -11 -23 1 20 -37 17 -20 -101 1 -17 18 61 24 3 -78 -25 28 37 -5 -77 -40 42 9 0 58 -23 6 -7 37 11 13 -30 -28 32 24 77 37 -15 -45 -10 10 -43 -8 12 8 -9 10 -68 -17 50 8 51 -36 -23 9 44 -6 -9 -15 -40 -7 -10 -35 -44 13 -47 -33 45 -21 17 10 18 29 20 -2 17 8 -1 27 1 1 29 -45 1 -34 -3 -14 3 25 -17 -10 14 21 -9 -6 -3 39 48 -7 28 61 17 -16 -28 5 31 -5 0 -15 -19 -11 1 29 -10 41 33 0 19 -15 5 34 -19 10 8 -17 -95 43 20 -70 40 52 -44 11 -25 18 -32 -1 24 -55 23 13 -1 55 -3 23 12 -1 21 -59 -20 -11 36 21 116 2 78 21 -71 17 -125 -43 40 -2 22 -103 37 -46 -116 -27 -37 2 54 -9 21 -21 6 20 -9 84 -20 46 46 -12 -31 -82 -38 82 -44 20 -27 -6 125 24 21 23 48 -26 -18 34 -28 28 33 -43 67 55 -54 50 -10 38 -5 -11 -48 -43 86 49 19 8 120 -59 -46 2 43 -50 35 35 -21 -19 -2 -34 23 30 26 32 14 -20 52 -19 -52 -11 -66 3 -3 6 48 12 76 29 76 -69 35 9 23 59 50 -32 -80 -45 -46 18 115 -103 39 21 -87 54 14 58 -8 -91 10 21 57 -6 112 32 -38 7 4 19 -65 20 -3 -26 -26 33 -2 22 6 27 -24 103 -48 -42 -22 -27 32 15 28 -104 -30 14 1 0 17 24 -26 -28 -16 36 3 -13 -18 45 114 -14 5 -40 15 8 -3 -32 47 -23 46 38 22 40 -42 19 -22 -11 24 31 22 -21 -40 25 34 -5 -20 -7 -24 51 -9 -22 -18 -7 -5 -17 10 -18 -25 -6 -73 -47 24 -9 117 3 35 -4 -38 -41 -24 -15 46 23 23 -13 -20 -24 -27 -8 -7 8 -18 -47 -15 -67 -43 -9 -23 -16 -13 -23 -2 1 -2 53 -11 44 -1 1 36 -12 -18 -27 54 22 -17 5 6 -7 52 20 -19 -8 24 3 40 -16 -71 50 80 34 -80 -124 12 -20 -63 74 83 -28 -74 125 53 15 -61 -35 43 -85 95 37 -62 -9 64 19 54 23 124 -32 52 -83 70 -71 76 8 -8 -1 57 44 15 3 57 58 -52 -11 62 -48 23 -87 -118 -6 -16 -37 -1 85 -10 44 -13 -6 -30 33 -40 -108 57 -2 23 36 18 25 -80 29 60 -63 125 -13 12 -31 35 -2 2 11 -35 57 38 -54 -13 -14 -39 -16 33 15 -41 31 67 6 42 -33 72 -35 112 77 -10 23 -40 0 67 -121 -7 36 9 -119 63 63 49 -91 -77 -55 27 37 -35 53 -52 12 45 5 -71 -61 28 49 -100 86 17 -68 -14 -18 38 7 -66 57 -14 4 24 -117 43 47 33 -13 42 41 125 89 -30 -16 47 -5 -56 39 -33 -99 19 -41 -40 14 16 -85 -100 -44 -19 -18 51 -121 -57 -8 21 23 -71 10 -11 27 -54 -8 -45 -6 9 21 -9 -17 37 120 -59 23 -16 72 1 -4 26 33 6 -6 -24 -24 -96 -41 40 -72 -51 -10 12 24 -27 -39 46 12 -26 -35 8 -1 5 38 46 -46 -5 -8 -6 13 25 17 -25 55 -15 46 118 64 4 7 -58 -35 -11 -4 -13 -51 18 5 22 -28 42 -7 -11 3 6 118 -22 27 7 -82 28 51 -57 28 11 4 29 -51 16 -14 -25 49 -12 -19 -14 -47 8 -16 29 89 -2 18 27 -119 -7 3 14 -32 -19 25 80 9 43 22 3 -84 -7 -17 62 16 64 -33 -3 118 65 -1 -50 -8 -91 67 -11 -19 55 71 37 24 49 -8 40 12 79 -101 8 -6 19 -40 -5 39 40 -31 44 -12 -15 26 -34 12 -62 -13 9 -36 33 51 58 -40 -22 -76 18 36 19 -43 -15 1 65 -54 31 6 123 -78 -63 8 37 -12 -12 -30 -58 13 2 5 65 79 10 -76 24 -52 19 -72 58 -1 28 30 124 32 -36 14 -33 16 16 -5 -61 19 -116 45 -19 85 3 -1 100 -32 39 -31 -81 7 -12 -34 24 -64 -25 -9 -70 68 -33 26 -22 106 20 45 -56 -10 18 39 -10 -28 27 62 38 17 6 -57 112 32 35 56 -35 15 -19 81 -6 75 -11 13 82 -72 -28 48 80 32 44 67 -25 73 25 -51 40 11 21 -9 -36 -22 -108 -24 35 -19 15 7 13 13 -25 -32 36 -55 -2 -45 -27 -31 13 21 -53 18 -2 27 -109 42 79 -69 34 28 1 -35 -29 -27 -72 13 -48 1 -11 7 -23 2 20 -40 2 -24 5 40 -7 14 10 56 47 58 -39 -1 -49 27 -38 12 39 -15 -17 -41 -2 13 -14 33 -6 -23 -50 41 6 19 -18 -19 -3 -25 -16 2 -3 31 14 -7 28 49 28 23 2 23 -5 -27 -15 -1 3 -39 33 4 -72 -11 -27 17 -18 -3 3 16 34 7 -42 -3 -10 -61 -2 -21 -26 24 28 2 7 27 -5 16 30 -16 12 -36 50 26 127 47 36 4 34 43 21 27 -25 22 67 13 23 64 17 19 34 80 84 -42 -7 48 28 6 23 16 13 26 33 22 53 -3 24 -28 32 -36 52 -66 4 6 -11 20 33 6 -29 -49 90 18 67 56 3 -18 30 9 3 49 8 1 2 40 49 -6 5 99 7 104 43 -18 -2 5 21 -7 -46 -38 -24 -33 59 25 -31 28 7 9 -26 80 40 -44 -27 66 7 54 -8 1 22 22 -34 -13 47 -11 -3 -50 38 -19 46 -3 15 7 4 19 -21 17 49 95 3 -19 12 -22 -7 -20 -19 -55 66 72 -23 6 67 -50 53 16 80 22 21 -21 -58 0 84 75 32 40 39 -10 59 -41 -9 -3 -8 -31 17 2 28 -102 -36 -62 19 31 7 36 20 50 61 -48 -13 29 40 -97 54 38 26 28 -29 -32 65 -17 -25 -17 -14 -45 -3 -17 -77 23 55 -34 5 59 64 -4 -29 18 -29 32 81 14 65 14 -33 -8 -14 6 24 86 -3 -66 8 35 -17 -24 -10 20 -50 -50 -18 -33 -35 -2 14 -3 -28 -1 16 15 -23 -25 -81 -21 -36 23 -33 14 -12 1 -8 2 -33 -4 -6 14 30 -11 27 0 18 -27 -31 -30 -25 -25 36 -65 -12 27 -20 -18 -10 11 48 3 -22 -25 -22 0 -43 -22 -29 -11 -39 -4 -16 5 6 -13 -26 -7 -30 22 12 -17 -3 12 13 -7 -2 -17 -37 2 46 -14 -25 -12 -28 15 -61 34 42 85 7 -48 61 12 102 64 44 -49 -4 52 35 -42 106 -43 -61 86 24 -24 -2 41 29 55 30 24 79 -19 10 98 56 -2 -38 39 33 -37 35 45 21 -33 12 -19 -57 64 2 -48 26 41 22 -17 24 10 48 29 57 -28 41 15 -21 -14 -20 -18 82 82 19 24 21 10 -13 -5 83 -10 -94 42 23 69 11 -3 29 -47 -125 -47 2 49 11 -9 63 -34 45 31 -8 -6 63 -25 -67 51 -22 -15 -10 30 4 31 -4 -18 -50 1 -2 18 7 15 7 -7 -48 -4 4 10 -51 6 -41 -8 -12 -12 -22 -49 18 89 59 13 -57 1 39 23 30 -31 62 6 -30 -61 47 -29 20 -45 -13 5 1 12 18 -2 12 8 22 -17 32 5 45 4 -68 -23 -5 50 47 -8 22 -5 -24 22 -3 5 -30 57 0 -1 -48 26 52 -13 -64 31 -33 -19 38 -44 9 -41 16 -31 -31 27 11 -58 1 4 49 23 -1 9 16 -27 2 -15 -21 27 -36 -5 -3 -37 16 -2 -9 -17 25 5 11 -21 -14 10 -37 -31 18 -2 32 -9 9 46 -6 21 37 16 -13 29 -17 30 -35 -5 3 -40 32 -2 17 -22 9 10 23 5 29 -8 -29 -78 3 11 52 4 7 -3 10 -16 23 -19 3 -13 -51 28 -11 -36 -6 -5 27 33 -53 -23 9 -50 64 1 -9 27 -2 -21 35 7 -69 32 -10 -18 -9 56 18 -10 -33 9 31 -87 12 -4 -24 -25 -5 9 -7 7 -38 15 49 1 -27 2 14 -43 14 -22 -7 -18 53 7 -23 70 -53 -6 -76 24 -35 -11 -22 19 -10 -113 38 -1 15 -27 -21 31 -74 -39 9 2 53 23 -4 12 -16 -81 -32 -7 40 -37 10 3 -30 17 28 -12 -43 67 -13 -7 7 22 -1 32 15 -17 -21 -20 -7 19 57 14 -32 -14 28 39 69 40 40 33 -43 -40 -6 66 24 12 -11 -52 15 45 -10 25 -22 -16 -14 45 -5 -17 -69 101 -23 1 43 -28 -13 32 -32 27 81 11 -4 33 18 -49 45 49 -15 106 -33 -11 49 6 97 66 61 -3 2 -1 79 -36 -1 -4 25 -53 39 1 -7 10 -6 -77 -24 62 9 -23 76 -41 12 12 -17 50 -20 25 -6 -2 -13 -5 13 -5 -12 -16 21 -19 31 -86 36 -38 72 47 -31 -16 13 -64 -31 43 -3 -14 50 -10 70 -13 1 -22 -31 31 20 3 -4 -45 -31 9 18 -54 19 -57 6 16 28 0 -20 -12 16 21 -20 -20 19 11 -13 9 1 30 -2 -23 -29 -11 -5 -17 -53 -2 -33 -38 -33 43 5 0 -12 6 -33 33 13 -3 -22 -10 -5 11 -40 24 7 -32 34 -1 -60 -20 -28 -27 -9 -43 27 -25 -44 -8 -9 -8 -3 -8 -30 5 -1 27 9 -19 13 -14 -18 -28 67 36 19 -33 22 -4 48 18 78 42 55 2 38 30 14 59 22 74 4 34 -11 59 -90 -3 -35 44 30 40 -12 -41 -16 -23 -2 26 -1 6 -1 127 -39 66 16 -12 -41 18 57 85 -41 8 2 -5 25 -27 -42 12 -3 17 23 27 -35 7 40 -23 32 9 3 47 51 59 -35 -6 -6 33 78 23 61 83 38 -2 33 86 10 -13 60 -25 3 22 -15 -19 51 21 34 -21 2 54 43 -1 39 116 46 -13 2 13 61 -19 14 -32 6 35 31 24 15 -25 -12 63 -39 28 47 -20 6 11 -35 -24 15 2 -52 28 -38 85 2 -11 5 -8 34 55 -15 -51 -11 -30 -21 -19 20 12 25 34 -2 40 -8 -7 -5 26 -12 -12 76 50 -2 33 -21 -12 77 -31 -39 6 16 -4 79 -6 39 -16 125 4 19 41 -38 7 -4 -26 38 2 -15 0 4 8 1 40 -91 -15 35 2 -49 -44 58 5 -47 4 16 -44 -14 -9 -46 -7 -24 5 -28 9 -17 15 -45 -15 -9 -37 12 -10 2 10 47 -1 -23 8 20 -25 17 10 33 -42 -23 0 14 -7 -49 1 21 -22 28 -1 32 27 32 -28 6 35 23 38 48 -22 22 31 48 18 18 14 3 -35 24 -23 1 -33 26 -44 9 21 -2 -21 37 -41 -7 -5 35 9 24 -41 -5 17 -17 -25 -17 17 -18 11 12 -12 -33 -46 -6 -21 -21 -47 -19 14 38 -10 40 -61 11 -20 -46 -12 -82 4 -17 38 -32 8 38 -56 52 -8 38 34 19 15 126 98 -46 56 -6 124 127 87 35 31 -33 -30 -23 39 21 41 69 -128 -42 -12 49 -8 -33 62 -28 -69 71 -29 22 -19 24 -7 -16 13 36 0 62 -15 -25 8 0 40 13 57 12 17 23 -9 -42 5 -9 -3 67 -36 39 69 45 46 10 -14 18 73 15 39 61 49 -52 -53 11 0 3 35 -36 1 43 65 -3 4 -17 -62 21 72 9 86 -46 17 -50 69 4 4 -15 51 86 28 100 65 47 -23 -31 -15 -27 -43 -81 21 58 -12 56 -23 -3 33 15 115 -14 90 -8 118 37 62 80 56 2 102 -4 -4 -57 11 -5 -14 89 42 -80 5 18 -19 24 12 82 -81 -21 -73 7 12 32 -36 36 -84 5 27 83 -79 -30 36 -12 22 28 -7 0 42 6 12 66 -12 23 23 53 7 73 43 -11 -24 -30 127 26 3 30 -50 36 -10 6 10 12 -23 -45 -26 -1 62 16 108 8 22 -44 -12 -30 14 40 -8 -2 -6 27 -27 -12 -7 9 38 -34 -11 -22 -7 3 -14 -66 21 26 18 -28 -19 26 -46 -6 -41 -4 8 8 -39 -67 -27 -48 3 48 35 -24 10 -3 23 14 29 -30 -27 9 -24 -67 27 -18 -7 -9 -9 35 17 -36 9 24 60 -45 13 14 21 0 3 0 0 -21 -61 -11 1 0 51 0 -36 11 -1 17 32 -18 41 8 1 -35 -27 3 25 -45 -17 66 47 -40 46 9 10 24 -56 34 70 -12 116 7 69 -6 -2 27 88 -10 3 38 38 14 -52 30 -65 62 -28 34 16 83 -50 -43 -38 8 -8 26 -17 30 74 29 -25 7 -10 91 36 -24 -19 43 11 -41 24 -26 4 -47 60 -62 -52 -45 -22 30 37 56 -28 9 61 -7 -29 29 76 -53 -45 23 -18 22 3 1 20 9 104 11 35 -43 -51 -12 18 102 -40 -36 23 42 -61 12 -10 -29 9 10 47 -38 -12 -61 29 -2 -27 -11 24 -59 -9 42 11 45 -66 -43 -14 39 -77 -15 -4 -18 -77 4 19 34 -40 4 -34 38 23 75 -57 49 75 -21 57 42 -12 -5 -67 51 32 39 43 -71 -39 -37 51 -5 -1 -9 9 -93 12 -2 -11 -72 5 0 9 -17 54 16 -76 57 31 35 44 -11 63 -21 38 -8 17 -58 67 -75 -32 72 24 -99 -34 26 16 50 0 -23 15 -29 -31 -47 -38 13 7 6 29 -51 17 21 30 -8 -11 -3 29 -24 18 -14 -19 8 -26 3 35 48 4 13 0 39 30 -8 3 -7 -2 4 41 15 -4 -13 36 -4 38 -23 6 48 -26 -11 24 7 22 11 -11 -25 -21 14 -26 -1 32 -8 -14 -3 6 10 -2 19 -15 11 -39 -26 -13 15 -8 -47 29 -33 -29 -6 -12 27 16 30 16 -8 4 -27 72 -9 46 37 60 2 31 -31 13 90 48 12 20 -9 58 -66 -13 -5 71 -2 7 13 12 -48 -36 15 44 -29 -40 -9 13 -13 -10 -1 -96 40 96 9 46 -1 -26 -2 -7 -1 2 52 86 -113 -15 96 -9 4 23 46 41 -5 71 4 -19 73 54 122 -76 35 42 -61 23 75 18 23 85 -58 -111 90 41 58 -51 17 -21 10 -32 23 25 15 -49 5 -103 -11 -16 16 -3 -95 27 17 48 14 -58 -45 87 56 30 26 -21 41 13 -9 -12 -19 -89 49 48 -28 -1 20 11 -23 1 19 -47 -77 -6 -37 -11 -18 19 1 4 -36 14 -12 60 -33 -2 55 -3 5 22 -23 -8 -38 -17 24 -47 -32 -27 126 23 -89 -21 13 2 -8 -42 35 -36 -64 -76 53 -80 28 10 37 73 29 66 84 -16 -33 0 13 -39 0 -30 -56 -3 -18 -34 44 2 28 5 42 -34 -65 -10 31 -90 -17 -2 -6 58 -9 -36 -12 11 -7 -62 -8 -6 -38 45 -45 -13 -2 -51 -2 -67 -10 -18 -38 -12 -71 -24 17 24 63 -8 -39 8 -13 -5 -5 9 -8 13 -18 5 43 17 36 -69 13 6 -42 30 23 -43 35 40 -31 27 -21 -15 -21 13 -9 -10 35 11 -9 -7 23 -6 71 -24 -19 40 -19 4 17 34 -36 -9 -21 -49 -31 30 35 16 -24 -33 -9 -22 4 -63 74 50 43 22 57 -14 22 -21 -28 -53 -69 21 41 -35 6 12 1 -34 -4 -41 -17 -41 83 60 -51 -3 -82 -31 36 4 74 41 -6 65 -6 -2 -9 -35 -45 -20 5 -72 3 48 -36 -26 -50 24 -21 -8 62 -32 -21 28 49 -76 -7 -41 25 15 -65 22 23 -19 90 -30 -18 107 33 -11 -16 108 -5 17 -69 43 26 15 -1 13 -44 28 40 71 43 69 56 7 21 40 -10 -26 -8 61 12 55 -9 16 -31 -9 14 24 -1 3 -44 -39 -9 -23 58 72 127 94 82 60 53 20 -25 2 -32 -7 -24 -21 -8 48 72 -55 34 18 48 -12 10 -56 77 -39 -19 -5 22 49 -14 17 124 -18 27 10 -28 -4 103 17 67 57 12 76 -4 8 -6 -84 -5 18 25 -6 35 -23 32 47 -5 -27 12 -85 13 -2 -28 -64 -6 -57 5 7 36 -53 -86 -9 10 -14 -20 19 -44 -75 -62 -46 48 53 -50 17 -29 -19 -1 -9 56 -97 -9 -93 -47 22 -18 -68 11 -50 -25 12 -31 -37 -12 -57 127 25 2 -11 29 -22 18 16 -38 23 5 7 9 -14 -32 -34 -7 56 -4 -4 3 -4 -102 8 0 11 32 5 43 15 -40 -38 26 22 7 24 -45 -1 -35 -16 5 2 -8 2 -10 -9 1 -35 20 -15 -32 -18 -10 -12 -45 52 3 16 -9 25 -26 -1 -1 15 -2 48 34 3 -22 -39 -18 -1 -34 -23 7 23 15 30 2 8 27 24 24 -38 -26 8 16 15 -32 16 32 38 28 29 -32 44 46 -7 -46 -46 -82 16 -97 53 42 3 -21 122 -27 51 -7 -10 -6 36 48 -26 73 -60 -34 25 27 99 28 -17 66 84 -4 55 56 23 125 -62 11 11 50 46 12 34 55 9 -45 22 39 1 28 10 -8 -61 -4 44 10 -72 6 31 32 -46 11 -29 -26 -3 -54 -95 4 -28 90 -13 -41 -22 -53 60 -14 -15 -24 45 26 73 -26 -12 -18 50 -54 53 29 48 -37 -7 23 -89 44 89 17 14 39 3 33 107 3 0 -9 21 29 -72 -57 17 -37 36 31 -51 -25 -42 -6 82 -85 120 30 -14 42 -29 -24 23 -55 -4 23 -40 34 41 38 -19 46 34 11 -72 29 -48 67 3 118 16 6 -80 -14 15 23 -30 36 7 -6 -78 -23 -17 50 104 -49 41 -12 24 -124 -8 -23 -29 -61 59 55 -14 20 -41 22 8 56 1 31 83 -55 -82 -15 -30 -44 -10 13 52 -64 40 -29 -35 -19 10 -80 -10 -74 0 28 -24 21 -35 7 -13 -4 -2 15 -61 21 -25 -27 -12 23 10 -37 -5 -23 -10 -17 47 8 -22 -58 19 51 -9 1 -64 41 32 -34 -10 34 -45 44 32 -1 36 -37 -10 -8 -68 16 -115 28 9 -46 39 -37 1 64 33 7 23 15 7 54 -7 18 -26 -31 -20 -2 17 -19 8 30 -21 21 71 -3 1 -28 19 23 6 31 -30 17 -19 -21 -54 -34 -23 10 2 -16 0 -54 11 7 -10 -13 -18 -28 -66 -106 -33 -60 -39 -2 -109 59 -5 -17 -3 -127 -8 64 -77 -39 8 42 -58 86 -30 88 4 -74 30 -9 -11 47 -18 92 18 49 -48 -39 -40 40 53 71 32 9 -27 61 -7 -30 21 35 -27 48 9 100 -28 -33 -44 -5 -65 0 -56 -22 -73 38 -52 -10 64 -33 -11 -6 25 38 -25 56 -62 1 1 27 -66 47 30 -24 -48 56 66 -50 7 -17 75 -34 10 -30 30 -24 36 28 -27 -66 -44 -41 -12 -45 52 -20 -8 -29 43 34 9 27 -31 30 4 -26 15 -47 -60 -13 -34 -11 14 103 -40 10 -64 46 -93 -12 85 41 -20 -41 127 -31 60 7 45 49 -66 -47 -124 0 20 -2 29 34 103 53 -55 -39 -64 27 109 -20 -21 -2 -44 -19 8 9 -22 124 45 28 26 -8 -101 43 24 11 41 43 75 29 20 -21 -14 -22 -2 108 63 -85 47 -50 79 66 -13 -11 82 38 29 -13 23 2 -49 -2 -10 -15 -1 -47 36 -44 33 -17 14 6 15 -45 0 5 -11 22 -12 5 18 19 -30 24 26 -6 3 -29 -6 51 15 -5 13 -7 -15 2 2 9 -21 -17 -9 -54 -5 -28 45 12 -24 -25 32 33 -29 -13 -7 -14 28 -10 -2 8 -6 -9 1 24 0 -6 -5 -6 3 22 -60 35 -36 -20 3 9 34 -24 5 -11 -12 -6 -13 39 14 -19 -3 -4 0 -9 17 -34 -6 10 -9 23 13 14 -7 -14 101 114 -2 33 -23 33 79 9 -3 5 26 26 -48 -15 10 10 30 2 19 -37 66 19 -6 5 28 -31 -2 36 33 11 50 54 19 62 49 4 41 -68 51 18 14 -79 10 -6 -22 114 -5 10 42 26 -17 34 6 -68 -114 35 18 -47 16 -17 20 32 17 36 17 1 29 74 16 13 -7 -14 44 51 79 27 -48 -34 2 16 -44 36 -14 26 -57 33 77 81 17 14 10 -12 30 -14 24 -14 -59 1 32 -18 -39 42 -127 61 -8 21 2 -9 34 -81 -9 -49 43 12 -14 -12 -15 53 -34 -31 55 -57 31 22 -40 -34 44 -61 19 4 34 52 -128 77 -28 35 -44 -16 -67 13 -69 84 -28 9 21 -17 -25 7 15 45 -58 7 -12 -7 -3 2 -15 11 5 -43 -31 -2 28 72 -21 -36 -48 -14 -27 9 -43 -17 -11 -2 9 70 4 -14 63 -25 -36 -54 -26 -18 66 15 127 50 -60 -4 52 -41 9 -68 12 -3 16 -37 -20 -51 -42 -3 -20 16 -24 47 25 -27 27 14 -15 -11 -11 25 -46 -9 -17 -13 -30 22 -41 -3 5 46 36 30 31 14 -14 9 37 20 37 54 24 -13 3 34 7 17 15 3 -14 -13 -3 -44 60 -2 26 27 -9 -12 -32 -17 -110 19 -9 10 33 -13 -6 33 66 -5 -38 12 -8 -24 3 -15 26 -33 -15 -19 -6 26 -27 11 2 29 27 -21 1 -25 1 -64 -20 31 31 9 -3 83 -29 12 22 -20 43 -20 123 -32 -15 26 78 -85 -6 -18 -11 115 -17 1 -18 -37 -20 -60 -49 -55 -55 -16 5 -55 97 -37 -69 -104 -28 14 -52 -16 -87 60 -116 -104 -43 33 -49 38 -11 65 -70 -28 -17 22 -62 -100 -37 -26 2 -21 38 -57 44 -40 23 -20 -53 -65 -17 41 75 -66 2 23 29 0 106 47 -9 27 -69 -14 -58 56 21 65 28 47 16 -70 -11 43 88 -85 -28 73 -6 75 7 7 40 55 -9 -5 -19 -38 59 0 -38 17 -31 40 -17 -46 -85 -81 -15 38 49 -64 -45 -6 28 -60 23 12 31 6 -22 -15 -26 19 97 -28 121 16 25 -25 -18 -6 3 121 -11 -22 13 -34 -43 23 120 -81 -13 40 23 -50 -128 -78 12 -43 -46 -15 -61 72 13 -81 -82 -9 -35 -109 -48 44 -36 30 21 -23 -32 -4 -35 104 -5 9 59 39 -29 -86 53 -83 41 -50 25 25 1 -9 12 -37 10 -2 28 11 -2 -18 -46 12 2 -27 9 -6 22 -10 33 39 -17 2 35 15 -7 28 39 -47 14 13 -7 6 -23 -21 -30 20 -45 0 59 -36 -5 37 -4 4 -3 17 22 -101 -12 -1 13 13 40 9 23 10 -52 20 37 -13 29 21 -3 -28 -83 53 -2 -25 64 11 12 39 94 28 56 -24 20 -35 -13 -5 -33 10 17 -28 21 -12 8 63 18 20 14 -13 26 53 16 -96 45 25 11 41 23 -39 52 -12 24 17 -47 25 23 -33 -25 20 -40 -23 36 -22 6 45 55 122 -42 18 -57 -46 22 39 1 4 -27 -57 22 -11 -5 -66 -11 65 -3 85 -33 -31 4 -7 24 -35 -17 26 86 58 37 18 -117 4 23 -31 32 -14 26 4 7 -65 34 -15 -62 47 -76 17 -42 41 -63 3 -58 3 -3 3 -3 54 -24 21 36 -28 -9 -10 49 37 31 5 52 -28 87 -25 11 -19 -19 -59 -19 23 -42 46 -26 -8 -23 92 50 -51 66 22 9 60 27 -8 17 -16 6 -89 -22 8 -35 103 -58 -33 35 37 78 18 24 -64 -41 -53 -11 10 17 12 62 -5 -47 108 85 14 63 37 20 35 -39 29 23 73 13 -71 2 2 -26 22 -17 17 -2 22 1 28 9 -60 41 -31 10 23 -7 -38 22 82 9 36 46 -41 6 34 -119 -36 -60 -22 -3 13 42 -21 49 2 -2 -63 36 11 -28 3 19 26 17 -14 -17 37 4 5 -27 7 -21 1 -16 -27 29 0 39 2 -5 -8 36 32 1 7 -1 -11 -15 -47 40 25 -36 -61 16 14 -11 -12 0 -16 7 75 25 -24 0 5 48 -42 6 -54 4 -37 -4 -30 30 -51 17 -27 -10 26 -9 -26 24 18 10 30 1 -18 -36 29 -8 -11 -13 -31 -63 36 44 4 -4 30 23 -13 34 -32 -29 -12 37 -37 -22 -35 -25 -19 -39 -15 17 8 -11 44 6 39 17 -55 -15 -11 -58 -38 24 -22 -65 -10 12 -37 -1 -43 -30 -63 -12 6 -20 -79 42 -70 15 -30 -4 10 -55 20 -37 38 49 11 31 -33 -116 41 71 -10 -42 -51 -21 12 53 -20 29 -22 -14 92 65 10 -31 20 -37 -88 -18 -94 7 11 32 -12 46 33 -40 3 19 18 16 -8 51 40 26 -37 -1 4 -85 26 32 18 -7 -55 23 9 -12 95 -1 -88 13 -27 16 -19 -22 35 31 72 -21 -60 -65 -39 6 -40 23 -10 -36 50 21 -29 -33 -44 34 -16 2 27 -11 -35 11 -17 42 -6 26 40 7 1 -23 21 38 69 30 39 -41 33 13 33 23 -19 -70 -4 47 -47 -1 -7 -27 31 15 17 11 -60 -43 3 8 -80 -42 61 44 -36 17 7 19 3 -83 107 49 58 -17 5 5 -18 86 52 -19 14 -3 98 12 102 10 2 4 32 32 -19 30 -10 11 17 -30 -49 -4 54 14 66 -10 -18 48 -29 -30 28 96 -14 45 -14 -20 21 -30 43 -35 -23 -4 -1 11 -61 -10 -70 -21 63 1 -27 67 19 26 35 -7 -53 48 7 -54 -32 19 -9 17 -17 24 12 10 -28 -32 45 15 21 -36 4 15 -55 -83 25 -16 -32 -64 -20 1 -49 9 11 -39 -8 -5 12 -28 -21 33 -10 -23 1 -18 -21 -41 -20 25 -48 21 33 -13 13 20 38 65 18 18 11 0 -46 -20 -9 1 -29 -7 0 15 -25 -59 -8 -71 -30 41 49 11 -87 36 38 -11 10 -43 -42 35 -33 -26 29 127 14 40 13 19 -2 35 34 -48 100 31 45 -17 -20 15 26 -49 -42 15 47 -14 37 -47 -62 18 3 -62 -41 69 42 9 -29 -41 -8 -53 -40 -4 35 35 90 32 18 72 -74 1 -15 1 17 26 -1 -16 -32 123 -22 15 15 -21 80 12 39 -15 2 85 43 -27 8 20 67 49 -9 19 24 -69 10 9 9 85 3 10 -2 38 23 15 -10 -31 -18 15 -9 -40 -25 -1 -36 89 -50 17 -9 -5 47 72 58 -95 11 -28 8 92 50 -8 61 -50 98 19 -43 -41 9 2 0 -2 6 76 57 14 23 33 86 -1 46 23 0 84 -8 10 -54 -64 47 -46 -39 62 -4 -21 -25 -35 99 -112 80 1 -18 0 16 23 29 -31 61 11 88 -1 37 7 -41 -24 41 30 30 59 -2 -14 -22 21 4 19 -45 -11 -52 25 -22 21 -19 -5 15 92 -28 -66 42 -14 -54 22 10 51 -26 -32 7 -1 36 9 -15 -4 -9 12 11 -25 41 7 18 30 3 27 -22 -4 -39 -40 0 -39 8 -37 3 -19 -4 -64 23 -17 9 -8 -21 -11 -46 3 44 0 -68 16 -33 -1 57 4 -47 43 43 -2 -17 -83 7 38 -20 38 51 22 -30 -29 22 6 22 37 59 -6 -38 -4 58 5 54 -1 -28 16 29 78 27 -32 32 29 63 15 -8 43 -57 15 -17 10 -50 40 9 -4 -22 -2 -26 -59 18 14 63 12 -56 -20 52 -95 -5 -30 27 9 -37 73 3 2 -33 -74 -16 47 -6 44 -10 -37 -48 -29 -12 38 -55 25 -18 3 67 8 6 -29 21 -9 27 -40 0 42 9 34 0 13 17 8 29 9 1 -71 -75 -21 -30 10 6 60 24 -53 1 -58 1 -15 23 -34 -32 -9 56 -84 12 -28 30 -37 -41 -44 45 -25 17 -51 -41 25 38 -10 -16 34 57 -74 -7 3 2 9 121 50 15 -46 57 -21 -12 -86 -21 -17 113 -74 18 -43 -12 -45 50 33 54 -25 -80 40 -37 -38 4 61 98 -73 53 2 28 48 27 25 -32 25 28 -8 24 -32 15 13 115 -43 45 63 67 34 -37 -48 36 -22 26 -75 5 -69 11 42 -94 15 42 25 14 -13 -22 -1 32 -27 49 -3 -1 8 2 -67 82 12 -5 -25 -73 -8 39 76 70 -2 -4 -21 -24 -6 -52 22 2 -2 -63 -13 3 0 -16 46 -16 13 0 -17 -11 -2 -33 10 7 -8 -42 15 -38 -40 9 15 -26 -30 -5 -8 2 28 -24 -11 -4 -2 -6 -19 80 29 37 49 1 39 23 35 1 36 0 19 -4 -2 38 -11 34 -52 10 2 -78 19 -21 7 -23 -17 20 -21 42 -51 22 5 -1 52 20 -13 1 -4 37 -12 -31 -12 58 -30 12 18 20 -59 5 67 17 -2 -62 -45 7 -4 -8 2 1 2 -9 -11 9 -19 3 -2 -8 -5 14 0 6 -19 6 17 -10 5 -1 10 0 7 17 -6 -6 5 -3 -6 6 18 -1 -2 3 -16 12 2 4 7 -5 7 8 -2 -19 4 0 -17 -6 12 -10 11 -9 5 -7 -15 7 0 1 -17 10 21 17 8 -13 -9 8 -15 -4 -8 0 -3 -16 -16 -8 19 2 4 10 -14 -5 -11 -9 6 -9 -9 1 -11 -15 2 14 -12 24 -5 13 21 -2 16 -1 29 -1 16 40 -10 9 -7 11 -18 -12 3 10 14 -6 -10 2 0 16 -8 0 6 21 2 -14 -8 2 9 -13 0 8 -9 1 37 -29 5 -33 4 -24 6 -14 2 -3 8 -9 15 -7 -4 13 16 19 4 -8 -16 14 13 2 13 18 10 -6 10 -3 -2 4 -1 3 8 14 -10 10 13 -7 2 3 39 9 11 -7 -32 -5 8 3 5 36 6 -1 27 -1 23 4 0 -2 -6 14 -10 8 4 13 7 -22 12 9 10 -2 20 -13 -4 13 -8 -3 5 -8 -14 -8 -4 3 1 -9 11 11 20 4 10 -16 -6 -7 -4 -6 2 -18 -7 -20 -4 -25 4 0 0 -1 -4 1 -14 15 5 0 -8 2 -12 -2 -16 -7 -9 7 15 2 6 -15 1 0 -11 9 1 16 -26 9 -2 10 -12 -8 0 2 1 10 9 13 6 -6 5 -13 -10 -13 11 5 13 13 13 7 15 -10 -19 -26 -24 -22 -24 -3 1 -8 -30 35 -4 -21 6 18 13 2 17 -9 -28 -40 -7 -12 16 -6 -8 0 -8 14 -27 6 -14 -12 19 1 3 7 20 -17 21 -14 12 -4 -7 -22 -27 -18 44 18 8 14 13 -34 1 -20 -6 -11 -15 -23 20 -15 4 1 -5 16 -11 -9 9 -21 -27 -28 27 4 -3 0 -23 6 6 6 3 -12 3 -10 11 -15 40 15 -11 4 37 -12 3 3 -17 -42 7 -24 13 6 2 -43 19 -14 -4 -15 16 24 -46 9 2 10 -12 -18 -51 6 -16 62 -4 21 4 21 25 18 55 -8 -8 7 -31 -1 55 -13 14 -7 3 -31 4 11 -15 -21 9 -20 44 -1 11 -3 2 12 13 38 28 40 63 25 16 28 23 -17 18 29 -41 21 -38 7 -6 35 8 -40 22 -10 -3 10 17 29 -30 -14 -50 35 11 -14 13 -4 -46 38 3 24 24 -21 40 11 12 39 -30 10 -10 0 -7 -31 0 10 27 9 11 -5 -37 -13 -7 -17 -32 17 26 -13 -2 15 5 3 -8 6 2 -17 6 25 -10 -13 -24 -8 30 41 10 -17 -19 -10 -6 10 2 -35 -13 -7 17 -8 -11 -19 4 3 12 -12 25 -6 3 23 5 -18 22 0 -1 23 1 11 -3 -3 -16 43 10 -25 6 6 22 -9 -10 3 -14 -6 -2 -13 5 21 -2 8 -3 -2 -3 -14 10 12 12 1 10 23 17 29 -17 2 -33 39 -5 -4 -11 -31 -28 18 1 -2 -16 27 5 36 -7 13 -2 -54 -10 2 26 -19 -18 -3 -31 34 -22 -26 12 -15 23 19 13 4 23 -5 13 -45 -7 -1 -20 -31 -35 -31 28 -12 33 0 11 -58 29 6 -19 8 -13 -36 10 -5 33 44 30 19 22 13 -2 -37 -16 47 -1 39 34 -20 -30 -15 1 -1 -6 -55 0 -20 -7 -2 31 -8 8 -50 1 -8 24 -2 -9 5 21 -3 -64 48 -48 -40 -12 12 -33 -11 12 38 37 -6 -21 24 -6 -74 -94 57 -12 12 -7 -18 0 32 -1 -12 64 26 -18 2 -17 -31 66 -9 -7 -24 -22 42 -44 32 -23 0 -13 -7 46 -51 14 -7 -17 7 16 -3 10 41 37 24 -5 -7 -18 -52 -39 10 29 -34 40 -31 -76 -50 -22 55 -8 -61 -4 26 -4 28 -20 -6 28 -22 -106 -25 -26 -32 -35 27 -10 0 38 -53 4 -4 -38 -3 0 -8 -30 9 2 34 18 -14 -11 0 20 -7 2 4 -16 -42 31 -3 67 3 22 38 24 -16 -7 13 22 -9 1 -1 5 -39 -39 -5 18 -27 18 -6 -28 -15 8 30 8 -9 -46 -12 10 -18 -14 -7 34 3 21 -20 20 5 13 18 31 -10 25 -23 -10 22 -12 1 16 29 21 9 -2 3 -26 -39 1 -5 16 14 -21 -6 4 15 5 -6 9 7 6 5 -7 18 -12 31 -5 -39 -11 41 23 -1 64 34 -10 -3 -7 37 -8 -8 -19 -5 18 8 3 49 -57 48 12 -16 -23 0 43 -35 32 -33 -18 21 -68 24 -5 28 -8 14 -15 34 -14 19 -45 -28 -29 -8 -2 29 -49 -29 -7 38 -22 -28 37 -27 -26 -43 62 -11 16 21 6 -5 -13 -14 21 26 23 42 23 -7 -13 -1 20 -34 -6 -7 28 -27 13 -27 -32 -4 -33 -6 -62 11 -8 25 -11 -3 -48 -31 -65 -13 20 -8 -4 -3 -12 58 9 48 19 91 1 -56 14 24 9 -3 -27 15 -6 -4 -53 -50 1 -13 -8 25 -29 9 -9 -1 42 2 77 -31 -40 -16 49 -6 17 -7 39 55 47 45 43 8 -13 23 -30 -25 -52 73 8 21 1 13 25 -45 17 61 -22 -84 -39 -18 -3 -35 1 -15 -66 2 11 46 -41 -60 -23 -42 114 -46 -6 54 0 8 -20 44 -13 8 87 36 -25 -72 -49 4 -9 -10 27 -20 39 6 -13 0 -46 -27 -24 51 -18 4 9 -32 -14 5 11 8 -1 44 26 -34 34 -30 -21 19 -5 32 6 -15 -24 25 4 4 10 -30 -9 -52 6 10 1 33 26 -13 18 -33 29 -3 2 25 -17 0 -31 -25 -25 9 12 36 -6 -11 -30 -4 11 -66 -18 10 -45 -46 -15 2 -9 30 14 -13 35 -51 4 -10 -36 -33 -12 21 30 -14 -26 -19 34 -14 39 -47 1 14 -1 24 19 26 -13 18 39 6 -34 5 22 13 73 -20 27 -74 10 -43 -4 9 -39 -21 7 50 25 16 -61 47 0 9 -7 13 -23 -31 18 -14 26 3 -36 -16 12 30 -27 33 -23 -37 -18 12 -40 -10 0 4 -4 -8 -2 4 4 20 -6 -24 18 21 -28 10 53 16 15 30 36 83 3 40 -8 -29 61 -15 -36 -15 5 -18 -34 -4 -24 0 23 -56 6 7 -13 30 -13 14 -19 13 -11 3 33 -33 -33 -31 -35 28 3 -25 -48 -9 -39 11 47 52 -17 -110 33 -52 24 -43 -15 -23 -66 27 29 -13 -3 -26 19 -88 58 44 -2 -11 29 39 32 66 59 33 -48 17 -3 -8 1 -16 11 1 9 16 101 26 37 -13 -30 -14 -11 -2 -15 15 15 -18 -52 -19 30 66 33 -126 25 28 24 -27 37 -35 -42 -33 -117 12 -41 5 25 -10 75 -40 14 -25 19 21 16 46 -42 -35 -49 66 -10 16 5 21 -10 -12 20 -51 -12 -26 16 -19 -29 -12 5 -32 -18 -44 -30 -36 -52 -36 -9 -28 -57 50 -14 -9 -19 -8 -43 18 -1 19 8 22 10 0 38 21 0 0 -4 -39 -11 -2 -8 21 10 15 -3 18 21 10 4 9 -42 15 -34 -4 0 -7 -18 -15 -28 15 -13 8 6 -102 -25 -1 13 1 -12 -33 39 4 -62 -29 40 -38 -12 9 -20 -31 -25 -12 27 10 12 -2 11 -10 40 -44 14 21 -10 19 4 5 -27 -2 -1 10 -23 -3 17 44 30 -17 15 47 56 -16 28 60 -22 3 -21 18 -38 -46 19 8 -25 -19 -23 -8 -17 77 -18 -1 -1 23 -18 -24 13 -53 -38 39 32 25 1 41 -20 29 51 21 17 -42 50 -12 -9 30 11 15 -11 25 -3 -17 -14 -8 17 20 -4 56 5 55 -12 -7 -34 28 9 -34 -7 -14 -7 34 -19 27 20 23 -27 -52 10 10 10 -18 2 2 -17 -12 31 8 35 45 34 13 29 34 -40 -13 3 -35 32 -1 33 1 16 -64 18 70 22 -14 108 70 -17 -11 -13 5 -51 -47 59 5 -17 -79 -3 64 0 19 55 -31 -31 -57 -14 -63 56 14 32 25 23 45 -47 -19 9 3 -37 -49 -15 -21 -73 26 14 18 -99 29 22 27 21 0 45 71 20 29 31 13 53 69 45 19 24 77 13 -7 19 -15 21 74 -4 23 18 -17 14 11 80 11 -13 36 -31 -15 20 -16 12 -34 66 57 -21 -24 0 -14 29 -27 18 44 -49 -20 -16 -44 6 -29 35 -10 29 27 50 17 -6 -27 2 49 -9 45 3 -34 3 -22 -7 17 -2 -17 -1 19 16 -40 19 -26 -4 28 -2 11 26 17 -22 -11 1 -15 11 12 4 -2 -32 13 47 -25 -2 -38 10 -15 38 75 24 -48 29 -8 10 -4 26 53 13 -49 -20 27 27 -22 -21 -2 36 22 6 -13 17 7 6 5 -2 35 19 -50 16 -39 15 -40 -21 -25 7 38 50 -117 -8 91 -9 59 93 11 -89 108 20 -7 -34 -54 -32 101 -84 57 37 -10 -60 88 -126 -6 -33 127 -61 -87 126 -80 -84 127 -107 85 -49 -21 22 -5 85 -85 60 -54 101 -120 -40 32 -77 14 -124 9 -25 -91 -118 -37 -24 72 -41 127 109 127 72 54 -36 71 126 38 -24 2 -12 -48 27 -22 1 66 -107 -73 54 -29 -58 -72 -5 31 9 126 4 102 -99 49 127 12 46 1 -72 -34 -11 -96 -68 8 98 -23 -35 -74 -91 -93 3 -128 -128 121 -8 116 56 -30 17 124 33 -76 -46 -95 42 -93 49 47 29 -34 -45 -3 -33 -125 47 -68 -4 44 -8 -94 -42 -4 7 -91 -66 78 -95 120 -32 -12 22 -100 10 8 -115 82 -38 127 -53 80 12 86 -28 -44 -73 89 -74 29 87 -117 -98 -44 -90 16 98 -120 -88 77 124 15 -121 -124 -99 -58 -123 68 -128 70 67 -32 23 31 -41 -128 -63 -114 -18 -64 30 -81 5 -72 -17 -64 -127 16 53 34 -122 -64 -51 45 -116 -66 19 -127 -123 124 53 68 0 -75 -35 10 0 18 67 -51 36 46 62 127 -6 58 127 20 -16 112 75 -39 3 -91 -30 59 -1 25 -32 20 -48 59 -12 17 55 127 54 -1 45 127 20 -126 -35 81 56 44 -32 59 -16 65 -3 37 -90 61 -42 74 68 33 70 32 -95 64 4 -95 -89 -56 72 54 103 4 -23 82 -60 -9 -33 -41 50 -44 -56 -100 -79 -17 -95 -36 74 -32 31 -62 -5 -17 -72 -12 -108 81 107 80 -34 -127 6 -36 -33 9 -68 30 116 10 30 125 103 35 16 -7 -127 -21 66 51 57 -70 125 -2 126 -20 -65 61 -12 45 50 -18 8 18 20 -96 -46 106 -39 -87 -47 127 -128 30 -4 122 1 34 99 119 -63 -53 -54 -127 11 -106 127 -41 8 11 11 57 -37 126 -54 122 -99 63 8 -90 -49 21 73 -69 33 -14 -103 -85 77 17 -69 33 -45 10 14 -39 99 123 19 -21 -98 -32 87 79 -34 127 93 -45 117 -114 -1 -7 8 112 36 -60 127 -12 -8 -27 -6 -23 -55 28 21 22 75 -116 38 -125 -100 -75 -108 -35 -127 33 95 -128 -57 88 -108 127 56 20 22 4 -89 -126 51 96 101 -128 0 96 37 127 116 -99 25 125 124 111 108 80 127 124 -89 -63 -76 -73 -16 13 -43 -87 0 127 40 -55 66 123 5 88 -34 -21 1 -11 -33 70 -53 3 -16 15 67 51 36 24 -21 25 -59 -96 126 34 -22 -48 -17 3 -42 -1 -15 -94 24 -109 28 24 -91 -127 -4 73 104 -33 90 10 -5 2 20 26 -36 64 38 55 -37 -24 -91 92 -100 -59 8 126 -5 10 -51 -82 -45 -69 -5 -28 -43 78 -105 -32 -5 -40 -116 -82 -104 61 18 99 120 74 49 -23 -30 -74 -60 -43 -87 24 -29 127 2 15 -76 -124 -118 -73 -37 18 86 -107 119 -72 -38 -83 -94 21 5 -12 27 57 43 26 -13 -97 -54 84 127 -51 36 -121 -128 -45 58 -89 -15 -12 122 -85 -64 -4 -127 51 -11 19 8 -112 -41 69 42 13 127 122 -37 -60 19 20 -42 10 19 44 -124 43 19 25 38 69 -34 -121 -16 -50 -72 124 -32 -38 26 -17 4 -37 -58 -15 -20 -120 -87 -23 43 79 -40 -35 -1 54 -9 76 -2 125 -25 117 -5 51 17 -65 -15 21 86 100 -22 -62 -35 105 3 -88 -23 127 -102 -114 -8 19 77 53 86 65 99 -78 72 -27 -104 -14 -18 127 -44 -60 50 81 1 34 95 -111 -68 -127 -46 55 93 -93 -6 53 -87 9 -67 125 -18 94 -126 95 89 24 9 108 -34 -127 36 -96 26 18 -81 -127 55 -56 -7 -95 18 -103 -107 -39 -62 -97 33 -83 -10 -127 -3 -18 85 22 -128 -96 -36 -81 37 125 -119 -124 -67 -15 -71 -100 -7 -84 -23 -78 125 -65 -27 -123 55 65 40 -10 20 35 -97 -37 10 125 -72 67 74 34 -5 -50 -109 0 75 -70 91 -29 44 80 -4 -6 42 0 -69 -52 -11 26 -28 101 74 -51 14 -29 126 -39 70 32 -4 24 92 -4 28 1 -45 74 -91 -15 36 -7 -85 51 5 -128 8 62 58 45 -43 19 103 -20 2 -45 78 -69 15 -4 42 127 116 -78 -2 -30 -128 25 -53 1 -116 51 -40 4 63 -71 72 38 -74 -66 29 -58 123 0 52 107 -24 -78 -8 -1 47 -97 -92 61 -23 43 120 31 81 -43 123 -19 -57 -13 -128 -34 -24 -107 -43 -44 88 -29 127 -91 -125 111 45 64 112 -128 -52 121 25 -117 -117 -124 -72 123 -48 -30 -97 31 -20 71 54 9 63 117 62 33 -105 -126 5 27 127 59 50 -52 -39 0 14 127 -68 -27 79 -67 -87 -88 -66 40 -90 -126 -73 50 127 79 -113 8 -127 52 -23 -114 -124 7 -9 -40 -13 72 127 -110 90 -125 63 -121 -12 -127 23 -128 -36 -122 -112 -16 -18 53 -105 -127 115 -121 26 14 2 -39 70 115 124 51 -92 -56 -16 40 -73 -19 39 41 56 -69 40 93 1 -60 51 -103 21 -117 -70 -117 -117 -96 65 -49 48 121 -100 -127 -22 8 -51 -127 -89 97 -128 38 120 -8 -13 44 40 0 -63 -55 -50 123 127 70 60 124 125 -4 -128 -103 1 127 5 64 112 13 -128 -112 -57 127 -35 10 59 -58 24 10 116 39 35 92 -93 19 -46 94 -16 127 123 -1 -47 66 65 59 -124 41 -40 25 -56 34 -14 105 -41 79 33 -17 -56 105 -53 89 5 6 55 -82 -35 -8 97 29 -53 -37 32 -19 97 39 -22 20 4 114 30 102 -71 -86 -34 -38 -43 -47 -15 63 119 -41 -40 24 -17 62 25 115 -38 37 -6 5 59 120 105 -8 -72 -109 -121 57 53 -84 5 106 17 -43 100 -125 37 -30 -62 -36 -87 -13 33 12 -17 55 4 35 76 -43 55 -74 30 20 -47 -125 65 36 127 -75 87 3 29 116 -120 0 -62 -126 -84 -17 -124 -109 100 -121 -20 -38 123 93 7 -122 16 77 -113 -101 -63 -79 47 120 -107 49 -77 -116 56 69 -127 5 34 -99 -74 127 25 -32 23 -125 41 -75 -127 11 -114 -20 44 -111 -111 11 124 -127 101 -128 68 -67 106 40 -122 -20 -11 -41 -48 28 -22 -73 -16 18 -32 -32 12 -85 -3 38 64 -38 -119 108 123 -69 121 57 38 -34 55 109 -128 -42 -104 68 95 -60 -57 127 -97 47 -3 -127 127 -103 91 -5 71 -41 127 60 -50 9 -6 -121 -27 7 60 -8 90 -22 -32 127 -53 -77 -114 2 -79 98 7 53 -32 -116 -42 -70 12 126 35 -39 -75 -103 86 31 118 -123 -29 -59 55 116 55 113 -53 28 -85 114 -124 -95 -42 -128 68 106 -44 93 -31 -125 -44 -106 -128 -84 -83 -127 109 -119 104 9 -70 64 -20 -10 37 102 -33 34 -25 39 63 -40 53 52 118 18 15 120 77 127 -127 110 83 22 62 127 -64 -55 -20 -75 -33 -23 -106 -95 64 115 -6 -27 90 -54 126 125 -85 37 7 72 -41 52 109 55 -38 116 -60 -60 -73 118 -3 -38 71 127 -6 -78 120 60 -49 109 -47 91 -17 -128 -14 51 4 124 33 126 18 69 23 12 24 120 -79 -106 -6 87 15 -35 -91 -56 90 -67 -13 -32 42 -31 47 -17 -125 -128 10 -18 53 -96 -46 -122 -50 -17 22 -57 -69 -60 0 94 8 -125 31 83 -75 50 -15 -42 32 -111 -127 30 -46 -127 -117 -70 60 126 126 -128 -9 -88 -52 72 -47 100 86 -6 -126 40 -38 -25 86 -37 -117 1 16 -125 62 21 124 -31 99 -19 53 19 -18 56 -100 -11 36 6 -24 -1 -89 -40 99 -128 113 -82 -124 -66 -37 15 -43 77 22 104 -29 -98 -34 80 25 -124 -124 19 4 127 -128 -125 -70 -127 123 -74 -128 -7 -16 58 -89 122 127 12 93 -98 104 123 -5 -127 -99 -85 127 127 -127 -75 15 117 43 16 -109 51 -49 -128 -113 23 -16 -97 -127 89 126 -70 118 -87 -109 14 -79 -36 87 -46 8 -79 5 26 119 121 28 -29 127 -37 49 97 127 17 -126 114 127 -77 28 2 -120 -55 84 71 -103 53 27 7 -81 72 -60 119 54 46 127 126 127 -38 -58 87 -34 106 -12 80 86 10 -93 -77 -82 -83 118 -59 42 -12 5 35 -91 -128 -88 45 -126 110 19 59 -101 127 36 -18 34 -20 -26 127 -46 -125 59 -18 -88 -42 18 125 -119 79 -121 -80 10 -99 36 74 5 44 -49 -108 -46 -61 4 12 -34 58 -77 38 8 59 -8 -12 87 86 -102 -38 -25 -2 14 -40 -17 68 55 75 37 127 19 -19 0 92 120 24 -106 50 -106 -11 -19 -49 127 -62 -94 -128 61 -104 -61 25 -71 -16 98 -57 98 121 -22 83 120 2 46 -123 125 -2 -12 76 -63 -41 125 87 103 127 14 -41 20 -91 -127 -102 -3 85 -127 19 -128 -29 -103 76 89 -125 25 -86 125 -79 -95 -84 79 -60 17 127 -127 -26 -128 -53 -122 -64 50 127 -11 -42 7 104 -9 62 -109 -122 127 59 -11 39 101 53 122 18 5 5 -1 -109 43 -128 43 -128 -114 127 -127 -26 -121 -84 -121 49 -105 0 -102 -127 -106 8 67 60 -128 127 118 -15 -39 -128 19 11 26 -68 -116 -121 -38 0 125 -101 15 -13 -65 -18 -67 127 -22 27 17 -120 11 127 -128 -49 101 58 43 11 -49 127 -55 127 44 70 -128 -126 34 15 89 -38 102 70 28 98 127 27 122 53 -12 -88 -24 -56 54 -34 -64 -50 -111 -39 -86 19 -100 -127 -90 127 -121 -1 29 -106 -126 42 46 -34 -89 -57 62 125 43 -7 -62 -122 3 7 51 -10 22 58 -127 -128 -105 52 -64 -87 127 -31 25 84 61 36 121 -7 42 -56 -86 82 -21 -126 91 47 65 -48 -21 -124 127 85 -71 -47 34 0 -101 9 73 124 87 13 32 32 -49 -107 -86 -26 28 -70 -101 -42 13 127 65 91 25 -16 -39 108 127 -58 30 -39 -11 1 51 -122 17 37 -127 -67 17 -35 127 -55 70 -27 66 -13 34 -94 10 -12 85 -38 5 127 -10 -124 34 -64 -54 -62 -40 -10 -33 83 9 -7 -97 -95 -33 49 -88 14 48 44 108 -66 3 5 119 24 -125 9 84 32 -51 127 82 -59 -69 -125 -122 99 -54 -22 -21 127 -62 -60 57 -47 36 -43 -122 -34 -13 -6 75 11 88 60 104 -70 -20 -19 -126 -57 -125 -104 -28 -41 -31 69 -66 71 -76 -15 -40 119 3 -8 -88 112 -33 49 -94 127 -112 59 107 1 127 -3 114 13 -68 126 126 -36 -112 -128 -127 87 -128 -74 -126 109 -53 18 -64 106 -10 6 -104 -81 108 -55 -98 -104 -30 95 125 -75 75 -93 126 -100 -114 86 -68 43 -29 -125 42 110 120 -53 127 127 6 -128 7 32 37 -124 122 -126 36 127 -73 121 -121 77 -14 39 97 127 16 -13 -14 117 -34 -43 -122 56 -77 -98 127 -13 -102 -96 123 -124 -49 10 42 -10 8 -11 -103 -90 -64 127 -77 32 -128 72 -89 -128 70 127 109 103 109 52 -86 110 -49 56 -127 -54 -27 -104 83 85 -50 127 108 76 -101 50 100 -126 -128 127 -66 -29 14 26 20 23 81 -18 55 -33 -26 -78 -43 -46 22 -33 23 -22 104 -127 33 -128 -60 82 126 98 -27 51 74 21 33 28 75 96 30 -124 -84 -33 38 -102 -120 36 49 -114 -38 22 -38 83 -104 127 -114 23 79 -8 -127 -24 -95 -3 13 -75 91 -128 43 -7 -29 5 16 -89 -101 -122 -9 127 24 -60 -37 31 125 127 11 -99 -35 -127 -55 -51 -126 -4 127 74 15 14 60 89 98 74 55 4 10 125 64 -127 123 -128 101 -128 -54 -45 -109 105 127 125 -43 -128 -128 110 75 -127 -106 -127 -52 107 74 -59 108 -1 58 -19 -128 11 3 -63 -12 -62 11 -26 123 -111 -128 16 5 124 55 -47 52 63 -56 125 -118 56 -127 -96 -124 -126 -126 -128 -17 -12 -125 -87 9 94 -127 15 127 31 40 126 -21 -83 -121 -13 123 -107 -113 -128 -97 -56 -119 18 -14 -17 -45 127 -127 66 40 -82 -107 46 126 28 14 94 -128 123 -23 -128 19 -36 43 121 -10 106 -72 -122 -108 -127 117 -50 53 -124 -128 -127 40 122 79 -107 127 123 -87 -126 8 24 32 -39 -124 -81 -37 55 75 -123 -68 -1 0 111 -64 -124 -122 -123 64 -11 127 105 72 87 126 125 86 127 -93 -91 121 -110 31 79 -58 -3 118 -67 -86 -126 -108 32 -120 -110 106 -118 -126 121 -9 127 102 -39 -88 -119 -115 19 126 127 127 -9 86 54 43 43 127 -122 96 57 -63 3 38 -74 -20 -112 33 25 -39 -12 5 80 -6 -64 88 95 57 70 122 127 61 41 91 122 125 14 3 30 -79 19 7 51 127 21 53 -12 -126 10 -81 -100 -33 10 51 55 -114 -90 -46 88 -16 14 43 -5 66 100 119 -122 -52 126 -47 62 -122 120 -101 42 23 71 113 96 -15 109 -77 -127 -37 63 -91 46 127 127 101 127 39 -71 -124 -121 -79 114 -40 65 -52 -128 -20 125 -23 52 47 32 -69 121 108 127 124 -14 -30 -3 45 -127 69 -94 -32 119 -127 -37 -28 33 48 -128 -114 -5 -49 -57 92 -113 26 -10 -48 7 -118 44 3 -72 -126 -128 -26 122 -122 -117 -128 62 12 -119 -2 55 13 21 -127 92 -1 -85 -99 112 -120 68 -128 -124 12 68 127 -126 -12 98 -97 71 -126 121 -8 95 126 124 118 -122 -75 -40 -42 -117 -9 -32 -55 124 -20 17 74 127 -67 16 -68 69 -101 -116 -19 -39 127 -24 -122 -66 53 -120 -119 -123 124 44 9 117 -121 -127 -77 -127 120 -84 -39 -101 -4 -128 -75 -72 123 30 126 28 113 55 19 46 -55 72 -61 -128 6 56 123 -127 -43 -30 -56 -86 76 95 85 -80 121 20 127 105 -106 11 16 121 90 -4 -24 -121 125 -19 -126 127 -32 118 -123 21 127 -85 -114 85 -36 81 -58 -114 -2 73 123 124 -103 -124 -65 127 5 127 89 127 45 -122 125 -90 127 64 -51 -122 100 124 111 -91 127 31 -75 -17 42 -1 99 -23 -125 2 -1 92 65 -43 102 -42 86 125 41 -87 120 112 126 118 97 24 -127 127 -37 -121 -51 -48 -120 50 -57 14 -128 -75 -83 4 4 52 15 78 -110 -23 2 17 -10 -77 -12 97 -88 -20 28 61 7 -52 127 127 -60 12 111 122 -52 -47 -21 40 -12 127 -7 5 -44 36 125 125 127 127 125 126 -65 -38 127 -54 124 -2 21 -95 -106 61 46 -74 29 127 12 103 127 70 -118 -74 10 126 -36 108 25 4 -109 96 -70 -124 -94 -126 -9 -43 -44 -34 104 36 -29 7 -125 -12 121 -5 -5 -8 -123 -57 17 -18 -81 0 91 -125 27 -58 114 -65 123 30 100 -111 -103 -124 61 54 -122 33 37 75 46 52 -90 101 -19 -74 122 127 -50 106 127 124 48 121 127 64 -27 18 -42 127 -68 -121 113 31 -15 -124 -55 -17 61 -115 -43 122 -125 53 -81 -2 94 2 -41 117 -128 -72 10 -24 102 -33 77 5 123 -128 76 122 -5 -72 126 17 20 -21 28 126 116 -2 58 -87 -91 127 -8 127 26 -23 -127 89 -3 -128 -57 27 -30 18 77 -19 120 -54 115 -124 -32 -128 -26 -121 31 28 -22 -17 -23 85 10 -89 -21 -59 83 127 127 54 -27 122 -97 -126 22 82 -9 57 -63 -95 -122 52 -31 13 -36 12 17 63 -31 114 35 -44 -19 123 -4 83 105 34 -124 102 -35 68 58 -128 105 -116 -40 21 16 64 102 97 -27 95 -107 -117 -43 65 -119 78 62 -93 63 10 -50 -34 49 104 47 -118 -63 -122 31 127 -79 -35 -56 32 17 11 -107 -64 -34 -75 -18 33 28 -74 -60 126 -57 20 -101 16 -1 72 -103 -59 6 88 47 -127 30 -86 26 93 -24 20 -27 52 4 -116 -47 -63 -8 -82 62 8 -49 -55 -39 93 119 40 -55 -122 81 -44 0 -88 124 92 -68 -65 -108 90 25 121 124 -35 -120 107 127 39 4 -118 -8 2 80 -5 100 -21 27 42 13 -48 -128 -106 83 127 93 37 19 -22 -123 -47 89 119 103 110 96 -67 -61 16 95 -89 43 96 119 -127 127 -128 -91 -121 127 77 -85 -69 -19 -128 82 62 -49 10 -114 -128 -41 115 13 127 -128 89 45 127 -17 -18 127 121 116 -113 15 -11 -28 38 3 -128 -97 -126 -112 92 -54 33 -11 -128 -110 -73 78 114 -13 54 127 8 -33 5 -126 126 -13 119 85 -13 102 -127 50 -96 34 -87 126 -35 87 -121 -27 -31 121 38 -78 127 15 53 119 -119 30 -9 -122 127 126 -101 -128 -10 -110 96 -59 -113 127 98 53 78 95 -116 9 -18 -128 -66 113 -39 6 110 -128 61 127 -124 -75 -87 126 -125 -119 -115 -127 -127 127 124 -128 23 -124 -99 116 47 -32 44 47 81 124 116 -42 12 -81 127 127 62 27 -127 -111 -57 -82 -57 127 98 9 -25 -117 -98 66 108 -15 -50 -41 33 109 18 127 104 -77 -32 -45 78 40 -85 -18 126 105 -12 -27 -126 118 -40 113 -81 127 -123 -128 -45 57 -125 -12 59 103 20 125 -93 -83 73 -39 -86 -71 126 -27 123 -10 -91 127 100 124 14 63 -30 -68 -51 0 124 11 -126 -3 68 -110 -72 -27 34 107 -127 49 -127 -60 -58 -12 127 13 37 19 127 -21 126 53 11 75 33 -128 -128 -78 51 102 -11 -23 -23 -85 -27 63 25 -20 1 -97 125 -99 -52 -128 44 51 -50 -73 -1 27 104 -8 19 -50 -8 -3 -40 -69 115 -43 -105 -24 22 2 69 27 30 23 27 -120 -124 -29 -113 80 -48 39 56 -116 -119 -85 62 -14 -89 127 -3 103 -33 -121 -107 120 47 -35 -4 10 49 -109 -83 -87 121 -116 4 -69 -66 -85 127 -128 43 61 43 -110 -110 -29 -127 -121 -11 -115 -80 -124 124 -68 73 127 -67 -101 -101 46 43 -58 -52 127 36 -24 84 123 103 35 -17 -87 -128 22 -20 78 -63 36 41 76 -65 22 121 43 9 5 65 32 -44 122 -73 112 -33 -101 -118 120 -126 -73 -21 -97 -2 127 30 -25 -71 -6 -33 54 34 -59 -39 -27 -60 -99 82 -66 86 -22 65 86 36 -20 100 -14 -106 127 56 -46 119 -83 -2 -6 79 61 -65 -33 17 37 -65 125 -70 79 3 -17 -118 126 83 -114 0 13 49 47 15 -75 88 56 -35 99 -88 122 116 -42 -25 20 40 -39 20 -22 45 -94 -60 -39 -28 53 -74 0 -85 -127 69 62 8 46 32 11 -63 27 -76 67 -32 125 -126 21 -19 -84 -14 -11 9 -45 -9 57 -12 17 53 -76 18 -33 44 33 127 -36 -58 54 27 60 -66 104 -9 -15 42 -124 -3 120 53 -29 45 33 -110 127 10 -1 -50 -42 -24 59 -128 104 -127 -36 -112 -52 14 5 115 11 -100 20 -63 -97 63 -40 22 121 12 124 -36 17 52 -89 41 127 -20 -20 21 -124 124 37 9 67 -126 -24 -126 94 -45 127 60 119 -64 -122 110 -107 -128 -96 -1 -122 -50 -107 126 -84 -92 -50 -122 101 -35 102 -112 -126 -78 -79 126 -25 -118 17 127 127 -26 103 17 -101 32 -75 -71 124 66 -35 -74 -41 -30 -101 55 -118 78 111 -127 -127 -128 1 127 107 -44 -62 61 61 122 107 37 8 -76 54 14 44 -122 -123 -58 -40 -20 22 76 47 126 -112 127 -41 117 -127 4 127 -83 -127 1 -126 38 -42 5 54 49 126 91 3 47 -90 -127 -3 7 -123 27 -52 -128 126 -68 127 -123 121 127 127 -110 -126 -16 -71 109 127 26 -76 -15 -123 -124 89 -53 -12 -127 -100 -20 -1 -71 27 40 123 63 -12 37 -127 105 47 34 127 106 127 -101 119 127 -39 117 35 124 79 -122 -34 -115 -61 28 -40 -116 -123 -128 -115 81 -125 -126 83 -11 99 127 12 127 116 -126 -14 12 95 118 123 -44 -120 -53 15 -87 7 -18 -87 67 -5 70 -45 -94 -8 -115 -84 125 -50 -1 -6 -77 11 89 -22 -128 123 -57 125 111 127 -96 8 14 -85 18 -127 -126 99 35 -86 69 78 -128 5 -44 115 -4 -110 127 65 84 -109 60 57 -101 -84 17 -128 -122 -20 127 -81 127 44 127 111 -2 -17 107 27 127 92 87 127 -29 -127 -123 102 98 107 127 127 124 -88 -14 -19 -72 125 -38 39 127 -6 -128 40 -18 -100 35 126 72 -80 111 -19 115 -127 2 34 45 78 -125 -128 -119 -67 117 -88 -128 -127 127 -83 -8 3 67 -127 -45 -123 -128 1 -16 73 -128 3 -54 -71 -23 127 -72 -91 113 107 -18 120 -96 127 -3 -26 82 -98 -71 -110 -2 -90 67 60 -1 -38 -128 53 -46 59 -47 -104 126 -127 -128 -128 -115 -80 -126 -86 -72 120 80 5 73 -12 -96 -51 -125 -7 32 -97 125 -30 99 43 115 112 118 30 -40 26 -69 -35 -20 -68 41 110 -27 -123 58 -59 1 16 -125 90 -66 -78 -9 8 15 -127 -64 -14 126 98 75 113 42 -69 -89 10 32 117 -62 122 -94 15 -128 72 5 117 -13 47 -82 90 87 127 -73 -33 67 15 -128 -19 120 -12 50 -17 -14 127 -124 26 -103 -38 97 -39 -58 -76 126 113 127 4 99 96 -101 121 -127 67 -25 -17 32 -96 55 -34 -127 90 17 97 8 64 125 -122 62 -22 -126 90 9 126 -25 -10 -59 -38 44 -1 127 -82 74 11 -83 26 -27 -46 2 83 12 -34 60 33 28 20 122 -79 60 76 -125 -26 33 124 106 -12 6 -78 -128 89 -120 -57 -97 -4 17 -40 125 123 9 -28 -71 89 114 -59 -41 -28 -60 0 -50 68 58 -85 -32 -127 22 8 18 -37 -40 87 127 -71 -113 115 -39 -123 127 127 -23 38 -88 -98 48 -61 127 -36 72 29 45 -11 122 -79 -2 -63 127 58 -123 108 101 88 -18 -111 53 127 97 125 -52 -34 116 -31 -77 -39 -88 -124 -19 124 54 127 -128 127 29 -124 34 -127 127 1 104 37 8 -77 -127 123 16 -9 -40 -54 37 6 97 -121 126 9 31 -1 33 -124 34 -33 78 11 111 74 -78 -127 -23 -38 -36 124 -128 42 59 -22 -23 -36 121 -128 -6 -128 72 -107 29 127 49 83 125 -100 -17 65 110 -126 127 71 -80 -35 7 60 -40 -48 -116 113 127 30 101 -30 -123 -50 -63 114 61 -127 120 40 99 -15 -127 -21 -71 -25 52 -73 -69 -84 126 -5 127 60 17 -64 -50 -127 127 -7 126 -95 16 82 33 -128 -122 -78 89 31 62 -125 -128 106 -95 -122 -34 56 105 -83 59 -101 -37 -59 122 -86 -127 30 -111 -76 58 11 121 -121 -36 68 123 27 123 -128 -128 -128 4 127 -105 -126 -4 19 24 29 25 24 115 -117 111 57 -62 126 127 -107 124 123 29 -111 -27 -126 127 -80 -30 127 118 -6 -54 127 -60 -72 49 107 67 -13 -36 26 -128 127 32 65 -72 25 -128 -77 17 29 122 -125 -127 105 -11 -116 122 -35 -127 -127 -95 -113 47 -30 -52 74 123 14 -56 27 -65 -126 13 -124 -127 -29 127 -116 33 7 75 -30 -78 -126 -122 54 55 111 -102 108 127 127 -49 -98 -128 26 -79 -127 -10 123 48 -119 -128 -59 -127 1 120 61 55 127 103 -90 -102 3 79 127 -125 -64 122 74 -127 29 121 49 -46 127 48 91 73 123 30 0 17 -127 -45 -66 -86 18 -40 -10 51 18 -6 -48 74 -8 43 -59 -15 -32 -31 -4 28 -76 -36 -65 20 34 -20 11 31 49 4 -53 -1 24 -13 -4 40 -14 -58 8 -47 -32 28 14 -8 -21 -50 20 55 22 -47 -13 -13 -19 -20 -41 -79 49 -41 30 -7 -7 -54 15 5 1 -45 78 -38 20 16 -12 -48 52 7 -65 -54 -11 -48 -33 -65 -10 -63 42 -58 14 -24 -51 -11 -79 54 28 0 -51 -24 -47 18 -9 93 85 9 126 127 117 16 39 35 -20 -1 28 127 -31 -35 -72 -37 -75 -85 54 -1 -21 0 42 -39 67 17 75 -69 -43 42 -102 -8 -115 -60 110 -127 -85 -48 -48 -126 -60 70 68 -38 92 -55 17 43 -66 -3 -50 -5 -101 -36 52 28 48 89 65 110 69 -1 -17 46 -9 27 40 -48 97 57 -127 -50 -8 127 9 35 -2 -66 -111 -31 115 69 101 15 -42 84 81 118 127 43 -107 6 37 -78 127 52 -65 -3 124 0 14 83 -76 -4 32 -54 -12 40 80 -25 -20 -24 -56 50 -126 54 -26 11 28 34 110 -65 9 -6 8 -25 -51 60 -75 26 -21 90 3 -103 -69 -4 11 48 -34 98 -10 78 51 -15 -118 127 -26 -1 -120 -83 -49 -9 1 -40 12 -49 -127 -3 -4 -4 -18 -40 -7 74 35 -56 -127 -38 58 -66 -10 92 36 13 52 53 11 -22 -56 -2 -76 43 -56 25 73 68 74 84 -61 6 66 -17 107 123 24 15 13 91 -9 -20 125 116 -50 -19 18 54 -41 -1 65 81 -54 -80 3 -62 15 3 38 -112 -41 -42 -124 -12 50 1 -20 -55 124 18 -22 -44 104 -33 -28 34 1 -121 -56 -67 45 -71 -72 5 51 -10 -88 -128 -9 -11 6 68 87 38 48 33 -7 -7 59 -27 -23 26 -16 -78 -29 51 41 -36 -55 -52 68 -12 -47 -107 -16 27 49 -3 -63 -85 122 -49 50 -73 -56 -23 -26 97 -56 -126 -41 44 117 -109 -30 107 -120 -35 -10 -15 31 -108 -128 25 -67 12 -26 44 10 -4 122 34 127 -15 -127 -74 -66 8 55 -77 -24 29 103 2 127 127 19 -80 -14 -25 125 9 -32 -86 89 11 44 38 -36 118 127 23 126 113 96 -13 127 9 -87 42 -127 110 -76 -23 48 -67 32 18 23 42 110 24 -84 -5 58 23 8 -78 41 -114 -116 12 73 28 65 -100 90 -78 52 62 -127 81 -85 -89 -120 -73 -76 -82 41 18 -70 -51 117 -22 6 14 -34 -14 -108 -17 17 -71 -30 11 -101 127 -113 -35 23 42 8 -47 -112 26 125 25 -39 50 -110 -49 -47 -127 27 39 0 -10 114 39 -64 94 6 -67 92 -34 127 -74 -115 67 -10 -127 6 30 25 -83 41 36 127 93 -14 -32 127 23 -28 -77 -2 -49 -95 15 -60 -126 -76 -15 -45 49 66 75 -64 -4 74 -13 -120 59 61 2 -29 36 83 4 -42 -68 127 -7 60 -16 37 -80 44 64 9 35 -102 27 20 127 83 108 31 45 -19 10 -98 8 -20 44 4 -47 10 85 26 48 20 -8 -67 -56 -127 93 51 106 63 0 -28 50 -89 -21 8 15 51 -7 123 -78 -27 127 -11 40 127 -64 80 7 42 110 -6 53 -78 -9 28 21 31 -86 40 21 59 -21 5 4 59 45 -10 -6 30 -37 -52 -122 -25 86 -73 104 -42 -128 17 24 59 -82 -55 -101 -115 127 -118 54 48 -93 -42 -51 64 45 126 -109 -10 121 -28 -128 -127 127 97 96 -100 -105 17 -68 -103 -61 127 -122 124 -37 -53 -68 125 5 -1 6 -116 4 82 -29 -46 12 70 64 127 -110 -108 60 31 48 15 -59 -4 108 73 -70 -78 -81 -114 -54 -119 -46 -5 -92 127 29 23 -96 -55 124 -55 -70 110 54 127 19 -101 -125 75 -60 16 -83 -126 -126 91 127 77 -127 -5 -69 64 21 -120 -60 -99 106 -122 -118 -81 126 -21 -37 17 12 -10 -111 -128 20 -16 5 52 -34 -128 25 37 30 87 70 -120 32 30 11 41 2 -79 63 -87 -35 34 28 -71 12 -124 -76 28 -114 4 -83 -51 18 79 114 -4 8 79 -38 110 21 13 -122 -55 49 56 -25 105 -80 30 43 -69 15 4 17 63 65 -48 122 85 -106 -78 -73 29 24 -121 21 46 10 -102 -33 53 45 -46 -108 -51 14 -57 18 -35 -72 3 -111 89 -120 -33 126 -122 -25 -118 -82 -16 27 67 -124 14 -69 -52 -40 -67 -13 -4 26 6 13 -108 22 -90 29 -120 -42 81 18 29 86 40 -85 64 33 -72 -71 40 -11 -127 -72 5 -37 -122 39 34 -32 -55 -37 -44 63 101 81 -119 -125 -92 -35 121 15 -115 -101 -23 -46 -25 -29 -102 -27 -34 49 12 105 -52 -51 44 -32 9 -32 -32 -71 -74 -10 127 50 -34 -126 -123 -126 -89 8 -33 -8 -5 118 67 -60 -66 78 127 55 108 122 33 -128 57 118 127 -2 -37 116 11 127 -123 -1 113 105 80 -49 -66 -57 -128 -77 126 61 116 -38 -48 -43 127 63 -100 -19 -37 122 -94 15 -127 28 -44 28 117 -16 -128 -98 -40 -69 48 61 89 41 127 78 -125 -128 -127 32 118 -127 -82 -82 -72 30 89 -58 9 -128 14 -128 121 -75 -66 -24 -77 -62 -73 -41 -82 19 127 126 54 -119 -28 -10 -127 -100 -80 -102 15 -88 21 -38 -79 -15 -80 32 127 5 -79 -47 105 -54 -94 40 -5 127 53 67 46 19 125 27 -14 51 -30 95 -127 -105 -114 -113 -37 87 -65 -128 127 -29 -38 -36 -94 74 25 -58 114 123 20 -22 70 -58 78 123 4 64 16 -73 67 -28 -46 -80 127 -128 -46 -82 -96 -127 6 -33 25 -7 -43 -66 -14 -30 1 -100 94 96 90 52 127 -13 -22 53 89 10 -109 -54 -115 -17 -83 119 -27 48 -62 -109 16 -33 12 -70 89 -95 -42 98 40 -127 5 103 5 -5 -68 1 51 102 106 125 -35 -126 46 -100 16 96 -72 -30 -128 103 70 83 69 72 55 -80 -119 92 -127 -124 -53 -45 15 49 62 4 -17 -6 95 -41 -99 -114 -70 -127 66 4 127 80 -127 83 0 -6 106 117 104 127 22 -105 86 -127 58 -16 10 -8 -8 -2 101 34 29 -5 -44 -48 63 76 11 -98 -64 2 85 -88 -74 24 -5 -104 56 115 -18 -96 -123 -74 -70 122 76 67 -127 -128 38 -121 -6 -127 -77 13 -123 -78 127 126 96 120 70 -107 -6 84 17 -71 0 127 -42 53 125 -20 21 79 -85 -125 -121 -100 101 4 -121 46 121 -28 120 -2 -3 100 39 52 -122 -127 39 -45 72 -92 40 126 54 -128 -29 125 -78 -126 -15 -128 -110 -127 -128 124 -57 -21 -128 68 26 -78 -127 55 58 2 114 127 56 -84 -54 127 -100 127 35 2 -24 -35 36 -27 -51 -65 -96 -126 -125 -27 29 108 -53 -126 68 -67 -18 -106 19 66 5 93 -11 -24 -39 72 -34 30 14 77 -63 -120 -122 -30 -6 -25 17 95 8 116 -36 -86 12 -71 -62 52 -53 -39 16 -3 -26 17 48 91 -6 -11 50 47 -126 -47 95 31 -72 64 -85 -127 -28 12 50 60 -32 -128 -15 5 -5 -63 -13 -81 28 -48 -54 -127 -85 127 -70 -13 41 77 -15 11 77 -44 127 81 -55 -41 -25 -80 33 -128 -22 -10 70 -112 35 -77 91 -77 57 124 127 -89 -63 -126 -1 11 -8 98 -22 -15 68 51 28 -20 3 -20 -85 42 -65 124 35 23 56 -12 41 52 -21 127 113 -95 35 -119 -53 3 -67 -24 124 -47 -125 -5 125 67 8 -2 40 34 108 -8 -127 79 112 19 29 11 -65 127 -36 -87 -20 57 -98 56 1 -74 0 -125 31 41 -49 -46 -23 73 -23 -54 40 7 -128 -10 88 39 -38 104 -23 44 52 124 51 11 -121 18 9 -66 82 -78 107 123 -1 5 -23 127 -59 -18 127 21 -42 -29 -70 -25 -126 -25 94 80 24 -84 -126 96 -22 114 110 68 -118 -113 -101 -123 7 126 127 124 41 29 -128 5 43 -29 75 4 15 -128 37 -19 -2 62 -118 119 9 -40 -82 -58 23 -104 127 125 -122 -127 79 -80 127 43 -63 127 -72 55 29 -11 -104 85 127 61 -19 -114 42 18 59 -39 13 111 -72 72 47 -102 88 42 127 127 -47 107 -117 95 79 -73 25 127 -5 15 47 -125 34 -42 -73 -60 -71 -65 127 10 33 -59 21 44 -31 100 -128 -123 124 6 -25 127 30 -47 41 -122 -112 43 -5 127 95 15 127 29 37 48 -72 15 29 -28 -16 -7 50 -5 63 -62 83 -82 56 -29 -5 -92 -55 127 -104 -79 -4 7 -48 -112 -18 0 -88 -86 -59 -118 12 -18 33 -4 110 43 65 60 94 10 -81 -68 -81 -8 -65 -63 -38 -126 40 -48 -39 -126 28 26 6 -11 -72 -99 -16 -14 29 39 8 3 48 -19 -9 -109 -73 -24 -48 -43 -24 122 44 -94 -4 31 9 -73 29 -38 -54 34 52 -3 13 -61 -32 24 -36 -61 48 -20 -2 60 -6 -48 -22 -24 -34 4 49 -1 44 -55 -35 -7 -4 -37 -117 56 -31 -15 29 -95 75 0 -13 -1 -48 -35 -18 -9 -4 -6 37 -36 -18 -50 -73 -22 -28 16 12 -11 16 27 50 -40 -64 -74 -51 35 -16 -25 -25 -6 -45 60 -9 -12 9 67 5 44 121 57 -28 34 57 20 -29 34 -51 -19 -7 11 -34 99 -7 1 16 -15 -6 57 44 40 -81 38 43 -38 -84 24 -75 -16 6 -11 95 -107 118 -77 83 -16 -16 -10 40 13 108 -32 -25 -4 -39 -8 19 0 -25 -37 -13 31 58 -93 59 74 -16 30 -52 7 17 28 51 -19 24 31 -17 66 60 74 65 -21 58 86 -59 26 7 48 58 70 -40 86 105 125 25 40 -31 39 123 -21 74 46 -49 31 26 45 -15 80 -27 -21 42 55 -5 38 29 -17 -17 -12 -61 114 -28 1 -54 18 -11 46 38 -1 -6 -30 -12 -4 -98 -15 -66 4 -78 -27 -11 28 -60 5 0 108 -19 27 -49 30 -4 -42 43 -39 36 5 -87 -52 -6 6 -7 52 -35 -26 -126 -17 4 2 70 -72 52 -43 -4 79 -61 -32 -17 -58 -2 -11 34 7 -64 35 27 127 -125 32 76 58 -29 -23 -9 9 21 19 6 21 -6 115 -19 32 -85 6 70 9 -3 87 -54 38 3 -112 -43 -42 -47 127 86 -7 50 10 93 -54 -72 39 -2 30 -11 -33 8 -16 -73 -74 -67 -7 -7 -34 24 -6 -2 71 52 60 22 -104 -32 16 61 -56 -16 6 33 38 -61 -127 113 -9 33 -25 -56 -113 -12 -63 -8 49 1 -25 39 5 -64 5 -69 -19 101 36 -42 54 15 -26 2 30 -42 71 18 62 16 -86 6 2 84 81 7 -18 95 84 46 -78 -2 27 46 -25 -11 17 -53 -80 15 -36 13 60 -22 -17 6 -38 52 97 -74 -66 33 125 117 -103 -74 -22 67 31 -109 14 -55 -73 22 25 74 42 7 127 -18 35 64 1 -1 4 -19 66 20 -72 69 -43 -69 2 -40 -109 4 15 3 -48 39 15 57 49 92 -67 -124 -7 18 72 -96 1 115 125 -9 -7 51 -2 -24 27 -26 -44 -126 21 127 15 48 -18 103 -74 -11 -29 -88 -3 44 5 -15 -74 -50 -67 -33 1 11 -95 126 -44 -49 109 18 34 -90 -3 10 52 -31 -79 67 7 -45 28 -21 31 5 -127 -85 -3 81 -120 -86 -52 -102 11 -32 82 1 23 78 9 68 -55 17 72 -7 3 -21 -30 42 85 -18 9 -43 -80 -45 42 -4 21 42 112 127 97 -60 -18 49 41 18 69 -128 71 0 -38 -82 -57 -92 12 -2 25 40 102 -24 25 8 26 49 29 -57 -29 3 -34 35 -53 -55 40 78 -53 78 63 -56 115 2 1 109 45 15 -71 15 42 0 68 13 107 63 24 -34 109 -60 -8 24 -71 -21 39 2 -37 -56 1 -58 74 -42 -17 -5 21 20 68 17 114 7 -85 54 -43 23 47 109 12 -12 94 17 50 122 0 24 74 -127 69 43 -50 -30 0 -41 -62 -37 32 41 -25 -46 -12 4 -77 57 124 -29 -12 41 10 -42 53 -49 -23 38 125 8 -86 -19 -24 47 107 -37 -80 29 123 9 24 53 2 -116 47 25 -91 108 -117 43 35 -76 -106 -118 83 -83 127 -38 -119 -52 56 -30 -120 87 46 -56 -13 -57 -3 117 -76 126 -14 2 -63 65 6 -104 52 -118 31 67 20 -63 -76 65 14 29 -45 60 65 103 7 86 -24 -55 -35 51 4 -24 -122 -1 -118 30 60 13 10 46 101 4 40 58 -60 52 -56 -38 35 51 -113 -42 15 92 57 -126 -32 39 -101 91 28 -118 -124 -81 -117 -119 65 -55 67 -3 -3 23 -90 15 -78 -28 -6 127 126 -24 2 -3 -5 15 8 54 -37 67 -83 18 33 47 106 -4 120 6 -42 57 2 -115 -28 -37 4 -53 29 11 -61 67 3 7 -93 24 14 -19 24 42 68 67 -23 -71 55 31 36 41 -77 -53 -11 -60 -15 -33 -14 34 6 -76 -33 14 -12 -2 68 52 32 -114 37 35 -17 -78 -4 -53 25 -45 7 11 21 -43 -40 -64 15 -11 -128 12 54 1 101 -110 -26 -21 -55 84 53 -52 -7 9 -24 -45 -108 -74 -10 61 25 -94 88 -26 10 59 10 -128 -98 4 -122 -30 -68 123 -30 -106 76 -122 14 40 -56 20 -23 22 -13 -50 -78 -60 100 34 91 54 -16 125 26 28 -21 -121 41 100 -60 -41 29 10 31 -9 -9 38 34 96 36 -33 26 -122 -52 -51 -125 -66 49 -125 -51 -55 -12 30 21 -13 10 -36 30 83 -58 -21 33 7 -42 121 -23 -90 31 108 -87 127 -17 -32 -66 -57 2 7 101 3 81 60 -121 -38 -2 125 -14 10 -38 21 -17 -27 -120 -21 127 86 -71 58 -13 22 -75 -48 17 77 -9 -4 -111 60 -23 111 -113 -87 13 -123 -102 -84 -40 40 56 22 -51 89 -59 -108 -120 -41 -127 24 -118 -122 -62 -2 -112 41 -41 -52 -127 -51 3 29 -43 16 -59 61 61 -64 23 -125 -70 58 41 35 -47 -20 3 -119 -33 7 -18 -41 -44 -73 35 68 -127 -128 -31 97 15 -62 -28 3 18 9 71 33 77 46 57 -1 52 -45 13 3 -60 21 -2 19 -49 -79 -105 -9 29 43 77 37 127 15 1 -86 126 -22 -38 -83 39 10 -28 122 -57 21 -28 39 -79 52 -16 74 -28 -69 30 9 -20 12 -4 -30 -51 32 -57 -20 63 -37 -63 -30 45 -60 -121 31 117 -49 -28 17 8 2 0 28 22 -38 -23 10 64 -49 -26 22 -25 126 10 -78 -9 35 -97 4 38 -63 7 55 16 -101 125 -27 -20 21 7 16 57 76 -17 -52 59 25 -54 -16 73 105 -73 21 19 -78 57 -41 -54 127 -76 -43 -88 7 27 -54 34 -64 69 -106 55 -64 -12 127 23 20 24 -9 36 32 36 100 -35 -104 -70 -36 50 -35 30 -1 -18 15 -32 24 7 -16 96 98 67 -7 27 -51 24 42 -45 -12 -39 -43 -60 29 -80 22 -61 88 -14 21 126 -57 -127 8 0 52 -91 -63 94 -61 6 -36 59 -116 9 -53 13 5 -29 37 21 -18 -81 57 80 23 -40 30 14 -111 67 -17 -71 -37 122 -40 -98 103 48 -8 39 45 -33 46 -67 -57 0 -1 -70 -27 21 66 98 22 91 -53 -45 -41 -18 49 -16 91 -127 76 49 85 -38 -10 -58 -74 -12 -19 15 -19 -51 -80 101 110 -27 -100 -12 -34 -14 -93 -9 4 79 13 -6 -2 120 -51 -25 -56 46 -25 1 -19 -125 58 -7 35 32 -29 14 52 -91 21 116 -12 -59 41 -32 -14 -120 -57 26 85 5 127 19 -20 22 -22 24 -7 99 -4 -74 -22 -60 -91 63 -127 112 -20 118 -61 62 -20 23 -111 118 -34 68 -7 34 -9 -74 23 62 43 51 30 8 -47 127 90 16 -77 -124 60 -63 7 0 32 -17 41 -38 -85 -2 55 78 13 91 -56 10 39 -59 -27 -7 -68 -12 -42 -29 19 -46 8 0 -67 36 -10 58 -32 1 -63 9 25 -51 10 -128 7 -15 10 20 2 11 127 64 23 45 -71 -1 -3 -37 33 64 18 -5 91 12 78 22 52 -54 46 118 28 -17 22 -6 -1 -13 -14 -79 39 -73 -64 -78 13 49 -110 -19 81 -4 -114 -30 -106 -77 -128 -42 -68 -84 67 83 -112 38 18 -76 -13 -65 26 -46 41 -34 117 -84 -25 69 -35 -80 15 6 -111 74 -116 -44 54 15 -55 -16 7 -112 -48 6 60 -4 -47 13 -9 -16 -35 52 -79 -26 -45 -10 -23 -109 51 93 -13 -13 46 -21 -37 65 -72 -71 120 -57 71 -18 -69 -31 -61 -12 13 -12 -55 -37 79 -5 18 30 70 -36 33 -9 -72 56 90 73 -52 -35 -125 -66 -84 -24 -7 -61 -55 45 -41 -104 -24 -25 58 24 -119 127 79 -88 -79 -66 40 23 -90 93 71 3 64 -43 35 -62 -58 -35 126 14 -50 -82 -41 -31 -11 -125 70 -5 56 14 125 -22 -42 89 -88 -33 -49 94 -22 3 23 72 -86 32 -88 -10 -36 82 37 61 31 -92 -13 -14 -8 -8 -126 22 127 -43 -10 -4 -69 7 16 -69 93 -128 77 19 63 19 119 6 -31 67 35 -8 -18 15 -73 93 57 -13 124 3 33 3 6 -24 -87 -9 -8 -77 17 36 26 -14 -11 20 10 -43 14 75 -28 10 -119 -61 7 -22 -63 -115 7 84 -40 -70 -118 -105 -39 -34 74 18 103 13 24 23 2 12 73 -14 -64 -10 -35 -122 -112 -32 -10 -18 -121 -116 1 -16 -85 9 -103 -45 -96 101 -39 48 -71 22 -81 -46 -58 -56 0 -65 83 -46 90 58 -128 48 -127 -20 -126 -64 -120 -110 89 53 -128 -125 -3 -13 -128 -75 80 4 -96 25 -61 66 -1 -128 26 -37 127 120 0 -17 -128 -26 40 30 -46 42 93 -71 17 127 -126 68 -16 -34 36 -125 -29 111 -60 9 -55 118 -69 108 -46 17 85 125 32 -58 31 -122 29 17 71 -61 -51 24 -60 -63 -6 9 80 73 -127 -45 80 126 -127 -12 -17 125 -123 80 -93 47 94 82 33 -79 -91 -99 -55 -54 -126 -67 -113 27 -44 11 13 -14 125 6 -106 52 113 1 54 126 36 120 0 32 36 13 24 -126 -122 -27 45 -65 -86 -91 -117 13 -94 -60 -110 35 -34 55 65 27 127 -1 -68 -9 -128 -122 76 30 -108 2 -102 -82 59 -123 -19 10 -56 10 -10 -5 -31 47 40 79 127 3 46 2 25 4 34 -128 24 -89 -43 -1 37 -74 46 80 -1 -4 -42 100 109 10 122 -51 3 -58 74 -127 61 75 -37 -77 -19 -78 19 21 27 127 127 -52 -89 -77 -127 8 -125 -116 114 -112 94 -115 59 -18 18 27 -68 -11 105 125 -52 -93 -128 -44 -57 15 127 -8 43 16 -97 46 22 3 -29 31 4 -115 -17 -76 -53 -71 -24 -21 -108 18 -103 -18 127 98 115 68 34 50 -68 7 61 -126 -53 56 19 -75 75 -91 -83 55 -56 53 67 75 14 -14 64 -96 -126 125 60 125 81 57 -9 4 49 27 2 -126 2 -125 71 -11 119 -17 81 64 111 -64 -126 -59 -126 -120 1 -1 14 -56 69 24 -126 -100 55 127 127 -17 -81 -55 -116 68 -65 -54 127 76 58 0 -128 45 96 107 75 -3 77 39 -97 92 -127 -21 -113 -5 43 -97 8 -20 -74 -59 -19 -77 -67 83 -24 96 6 122 124 -56 68 -128 29 -3 68 -51 41 -43 -126 -9 109 55 -64 -33 -128 -87 -101 125 -11 -90 -88 122 -99 -112 -87 28 35 -19 43 103 -55 -15 115 6 -49 10 -25 14 -128 -7 24 -64 23 -52 -120 -21 -75 51 85 126 125 -61 -31 24 13 89 -33 31 -124 -48 38 -119 -12 37 -28 23 -126 60 -6 107 -59 -45 126 -70 -58 -124 -88 -122 -12 -64 -97 -58 -24 -64 -77 -54 90 -22 -107 -7 -124 3 52 111 -26 59 -7 114 56 -108 15 34 -116 18 -99 -128 -58 -43 -73 55 76 -117 -127 16 -81 55 114 16 25 -48 78 17 29 -63 -127 -128 8 30 -14 -13 -18 -50 -60 -1 -111 99 74 -42 -126 40 -67 82 -19 -122 -64 -19 127 -127 58 48 61 36 -32 -24 121 -9 -12 -73 -127 -17 -5 24 127 -62 37 82 24 65 10 -47 -45 -37 -36 -52 68 49 79 -66 11 -59 -88 20 96 -39 20 -15 110 -48 -10 -47 36 -62 -60 -97 35 103 2 -42 21 -16 -45 -42 28 44 29 20 -126 76 125 -104 52 64 71 -47 121 74 34 19 -73 127 -42 -126 -43 124 123 -8 11 -60 116 126 -125 -38 44 44 -126 -33 21 107 127 116 44 99 -83 -123 67 127 127 55 6 -39 -8 127 -76 96 124 54 -53 -1 -10 113 -69 45 95 -47 -59 108 73 -102 127 16 -128 84 50 106 121 114 -26 -4 5 -89 120 -21 66 -38 -20 -125 127 -127 120 -128 -6 27 25 65 123 -40 2 81 62 15 -113 10 -127 -105 -52 53 85 124 -13 -15 107 33 -80 124 -4 -21 0 82 60 72 119 94 127 41 -122 21 -127 -48 4 124 -87 -10 68 -89 -90 37 -9 -66 16 -127 62 74 -25 115 2 -5 -68 121 120 -120 110 114 53 -49 -124 56 126 -89 -35 -10 127 -122 -60 -8 -64 -17 68 118 -57 -70 -33 -66 114 76 -3 9 -47 -21 50 -43 34 24 53 59 -119 -48 -111 -127 74 -125 -89 -110 -128 -119 -12 -13 -91 -127 70 41 -121 -5 101 -48 127 -60 -90 24 -113 91 -127 82 111 -90 -15 -127 -44 8 -8 29 -71 -62 87 -30 -53 -18 -128 -16 77 125 82 93 30 -39 127 -127 -14 -33 127 -38 -18 -121 62 -128 115 68 -15 91 127 5 124 15 22 -76 -71 -3 0 -26 -7 34 -59 42 126 -38 -8 127 17 -70 39 -67 108 -40 -127 -1 -127 -54 -44 2 -33 -82 -101 -8 68 70 14 -17 -127 36 73 -64 -91 -66 -67 -32 -126 72 -119 126 116 -5 -65 -13 102 123 -9 -43 -36 -73 -47 127 94 127 -15 27 -71 36 2 125 -89 -20 -61 -65 -44 48 -64 37 -79 67 124 -1 -117 -37 2 124 -21 115 24 -58 101 -39 70 96 123 58 8 41 95 68 -123 27 -127 -14 -30 26 119 -125 123 118 -29 -16 3 -39 -45 127 48 -33 35 56 20 28 121 -36 110 -15 -71 8 104 26 5 -78 111 60 27 70 -85 -42 64 -30 126 70 -12 31 116 -69 -128 120 25 -59 37 126 -16 -126 -7 103 3 -128 -28 -125 27 -7 -121 -30 -62 26 -75 -94 59 15 80 68 94 -26 65 -55 1 0 -36 77 88 127 11 16 28 7 27 43 -13 -31 28 126 -22 36 -128 -95 48 23 -124 -9 -87 85 73 125 51 -7 81 -4 5 59 -46 -9 125 -41 -35 126 74 11 97 25 -94 -114 -27 -16 -46 -26 32 -126 127 100 59 -59 -126 10 21 -39 18 -96 -110 93 127 -45 77 -17 -77 -65 -24 17 -37 -45 -43 23 51 43 -5 -125 -127 1 -35 23 -37 -76 52 -3 -14 -8 -63 -84 -30 -127 -26 -51 72 6 127 -12 -73 92 77 49 -23 -118 -22 127 106 79 7 55 -78 -2 -125 -29 19 30 -122 -46 5 25 -15 6 70 38 66 -97 -39 -69 -124 -87 -19 56 -1 -126 -4 -35 11 59 16 66 -27 -36 119 -44 41 64 1 -38 14 -25 -112 83 -127 -7 61 -39 45 94 -2 126 -57 88 3 -51 32 -7 -18 -3 76 -37 -32 124 -83 26 -40 33 -20 86 118 97 -127 33 -106 -34 -10 116 7 61 -21 124 24 42 -114 25 -17 75 41 -3 -5 119 70 -115 126 -9 19 -7 -80 127 43 32 -12 73 -30 15 18 -8 -55 15 -64 -20 -30 -125 -62 -126 110 0 -48 -92 10 35 -45 72 99 49 44 -34 89 45 -38 5 -56 -34 -82 -77 -84 -33 -51 8 16 22 -49 -27 80 0 -10 -3 -100 -32 56 -34 9 69 22 -29 10 -41 -127 6 108 -67 48 -13 -42 -69 30 45 -62 56 -18 -92 118 125 12 -117 2 30 -67 3 40 -21 52 4 35 -51 94 42 32 -99 -74 -22 -40 127 68 123 -128 -44 88 -70 14 -126 67 78 106 2 70 -126 90 -82 -113 -32 -13 -22 113 -32 26 -69 -18 -46 14 61 -35 41 86 -46 -14 -40 69 -9 125 -32 -66 28 -97 27 1 -13 81 -87 -84 -20 95 -87 30 -4 -126 -50 13 3 2 -12 -4 0 -111 64 34 82 9 -47 24 -12 49 -117 76 -39 90 9 -19 108 72 -125 42 22 -45 98 127 7 56 -109 48 39 7 21 -67 71 52 -1 8 4 124 -103 -128 -24 41 105 -38 14 -10 0 42 -19 -30 97 16 -109 53 -128 127 57 -91 59 16 -63 54 -19 -30 3 -80 65 11 29 51 26 39 42 11 24 104 -1 -128 58 -70 11 70 -6 43 51 -55 22 31 -40 19 -115 -49 -6 -128 -123 -117 3 56 49 17 48 -87 -17 -62 -23 127 77 -63 105 38 44 -29 34 -18 36 34 124 -61 -76 -5 -7 -128 -35 -15 -45 56 -75 -40 48 58 -3 115 -126 21 126 75 6 -46 -50 -14 -48 52 -13 40 75 -18 87 10 37 8 86 -57 -68 13 14 51 -101 -107 -79 11 57 24 -9 -22 -18 -68 -4 -119 39 35 -11 -67 -103 54 103 99 -31 -37 3 121 -93 -40 -15 -86 93 90 23 -56 40 -43 -125 -108 67 -10 11 99 100 126 9 95 -7 -47 47 -113 -79 -18 -18 127 27 -7 6 -25 -126 -46 -62 59 112 -4 -30 -127 -53 -128 107 34 29 18 75 -37 122 83 2 15 -76 -12 -40 -78 -18 -83 126 109 7 125 -35 24 82 70 13 88 -10 124 24 -23 96 116 51 121 26 -41 -76 -66 -27 -37 -113 -95 -54 -59 -18 -34 74 -84 92 -62 -79 -8 -52 -128 126 3 -71 48 7 -125 18 -48 47 78 -33 -52 -23 -128 -19 -25 -23 34 17 14 74 2 84 -126 -50 -28 111 -4 -74 25 -47 91 101 9 -17 59 52 -35 70 10 -71 27 -32 2 -73 -38 -26 28 39 72 -127 -128 5 46 -94 80 -32 50 -70 7 8 -33 65 9 -127 -4 96 -24 79 -98 13 -21 59 93 100 -127 -14 -46 -72 10 -37 27 -6 -114 -70 23 -121 -30 30 63 -56 -33 15 -40 -74 88 110 74 32 24 0 -22 43 -30 -17 -85 -13 -9 -53 28 -51 20 47 21 0 -13 10 -12 84 40 98 24 18 9 33 28 56 55 46 -12 -19 27 12 -21 -7 127 15 3 -25 89 -26 61 43 7 -37 13 5 -15 34 23 -34 39 9 2 16 29 -13 -51 5 18 25 18 14 54 40 -24 15 64 -56 -25 -10 2 3 -29 25 14 -8 -13 18 -3 8 -26 -24 38 -71 -27 53 119 11 -8 -46 -10 -32 -29 -27 54 27 -11 -61 9 -7 -16 -66 -15 48 -3 35 -3 52 -19 1 24 57 -9 -72 -12 -38 19 -1 5 74 -33 -47 -2 -10 -37 -18 -59 49 -25 56 -59 4 -4 4 -50 -27 -29 -43 -59 121 74 -31 127 12 -46 -2 -33 1 -8 11 -2 18 -9 -9 13 52 39 -3 81 50 -11 -8 -26 -13 31 -27 -18 59 24 -36 0 8 -47 -33 -47 -4 -57 -15 -21 -7 -39 43 17 7 -6 25 -16 5 -9 75 -4 1 -12 -39 -1 29 -33 -15 -14 24 -21 -45 -22 9 19 -8 4 0 -33 26 4 50 -7 8 -51 -110 -3 53 16 -23 29 -28 -1 10 6 -6 117 -6 -1 -13 -20 -29 -12 66 18 -9 21 -7 -4 5 2 -50 39 -10 -18 -9 8 -16 30 52 81 -80 3 12 -6 40 0 17 1 14 -58 17 -10 -11 -18 -22 16 -4 -34 39 -19 -49 0 -30 -1 9 34 -47 -20 -24 -22 34 -8 8 29 2 60 10 -81 -18 -69 -7 -41 -10 -6 -48 38 -8 -8 -6 3 29 -1 -10 -34 36 5 20 117 11 -37 25 -10 40 14 67 3 10 -18 -31 -15 32 -18 45 -5 11 -16 -118 7 -17 24 -42 -17 -6 -34 -13 -27 9 -9 -11 -31 -8 -2 -50 20 -115 -75 14 -8 12 -69 -2 1 6 -41 -19 -8 -24 -51 20 -1 -43 -89 16 -2 -33 18 -7 12 65 5 -49 14 17 24 -26 -18 29 10 52 -55 -4 3 -20 -57 13 43 -52 57 32 11 -26 56 -64 -38 -21 0 -3 50 -47 -29 -14 10 35 -51 3 -30 -1 -47 48 -6 -4 112 -29 -15 -12 56 67 1 -49 -25 -15 -4 34 6 80 59 8 -119 55 -1 -19 -25 -41 51 -5 -14 -4 75 -16 16 -47 36 120 -17 -11 -5 -12 -22 -21 34 -121 1 -32 -128 -59 -19 -7 15 8 -9 70 14 20 40 14 31 25 -43 2 -36 -5 -35 -37 96 89 -23 -63 97 0 -32 8 -4 3 13 13 7 -25 -47 28 -5 14 -10 10 13 -3 9 -77 -2 7 -20 -1 -16 -10 0 83 -7 46 1 -12 -10 12 -10 -34 26 119 7 35 13 -9 65 -21 25 102 -11 -34 -9 8 -13 -93 10 -4 -3 -1 1 -1 -14 -12 -11 18 3 -19 11 -1 -12 -56 0 2 5 41 -33 -4 5 -8 14 2 -6 3 -26 -6 2 -10 14 -9 -6 74 -56 5 -12 50 4 -127 36 100 58 -32 -52 -33 116 12 -102 57 13 48 82 23 -3 106 13 50 27 127 -14 40 -85 14 124 97 -27 68 -45 -17 6 10 -65 22 39 24 57 -25 113 -68 39 -39 17 -120 -75 6 2 -110 -92 73 53 -34 2 127 -28 -6 83 -57 42 84 74 108 -1 26 6 98 115 -109 -1 -66 -69 79 61 -14 -128 -128 -58 -3 -86 83 -84 -58 115 1 72 60 65 -2 -4 6 -60 -128 -6 20 -30 22 -16 20 105 48 81 -42 16 49 71 110 -8 16 -96 6 66 -22 7 -45 127 127 84 30 -73 -41 64 -92 -20 38 66 7 -41 35 -124 -104 34 51 -83 -97 -60 -40 9 45 -56 -53 29 -56 86 -42 -39 80 -26 -14 16 -52 -1 -115 12 -27 48 23 104 58 55 123 -39 13 75 -71 108 -39 13 -22 -77 -36 21 56 -30 -13 43 -56 -20 -125 79 -20 -27 59 103 57 39 6 96 -124 -111 38 0 109 57 -23 -65 -8 -44 30 66 91 -2 -120 -95 -52 -60 17 -69 -2 -62 -37 -23 10 21 -118 17 -65 -2 -92 -28 -68 -9 31 -37 40 -127 29 -15 -14 -8 -23 37 47 80 0 -84 -107 6 29 23 -67 -2 -7 -40 6 -26 -126 -25 17 -84 0 103 36 -6 -47 -62 -17 -101 81 3 -19 -80 -127 -69 -38 -2 55 19 -12 -58 -8 32 -20 -35 -25 -35 -41 22 -59 4 -79 35 73 -64 -46 -19 28 48 51 74 -122 6 33 -6 79 -41 45 -113 -124 17 22 -127 35 -56 22 120 -68 121 -126 34 -54 -68 -105 -105 55 18 -74 90 -26 16 -22 -91 -44 -20 76 0 -85 55 85 -127 35 46 11 -30 -110 -62 -30 112 33 -10 33 -42 29 110 124 -124 -6 -6 57 32 54 11 -127 47 -105 -80 -41 56 43 -124 119 -18 -81 -31 -72 -72 0 -36 12 -9 -53 90 -89 -21 50 -3 -59 -63 -125 66 75 -68 -39 14 108 1 40 -42 76 -123 51 -42 113 -36 -50 -5 -32 -16 -112 -20 -48 45 -57 -120 67 -20 -16 -23 82 -66 -24 13 37 -81 -31 -55 -128 111 28 -32 124 27 105 114 11 19 61 17 -9 -31 -54 -35 -18 18 6 -1 -27 10 -18 -75 -32 26 -33 -69 -98 10 66 -125 -20 78 -124 15 -23 99 -47 -100 62 34 10 73 -88 -51 -48 119 88 17 -90 -76 4 -119 -9 120 17 55 57 88 -49 -39 61 -31 -67 -15 88 41 11 27 -5 -4 -67 45 6 17 30 11 -39 29 3 11 40 -17 -33 60 15 -12 -45 94 -4 -17 -48 29 -34 -53 39 12 -24 71 -69 38 -29 -37 60 -13 28 41 79 32 -42 31 -5 -57 -20 80 -32 -22 46 -57 24 26 -86 -103 11 -26 -1 61 -63 -20 -43 -2 44 -90 62 -2 7 103 123 33 80 -45 -92 26 -41 -38 1 -32 0 -31 -40 -4 31 36 27 37 -34 47 42 -16 69 -9 -69 -58 25 112 -20 -76 91 -13 -25 70 -60 12 -115 17 -8 10 73 -22 -36 -1 81 -68 10 47 -69 -42 -2 72 40 -57 76 62 -34 70 2 12 15 121 -29 -121 30 -26 -30 6 69 -53 0 -31 79 -123 -3 47 -6 32 -128 -51 -15 -61 -31 -44 -15 30 45 3 9 71 69 -76 47 -46 -25 81 45 56 -90 127 -37 49 -81 6 37 -121 -16 -11 -56 -50 -30 25 96 -44 106 -91 60 -38 -44 -7 -27 53 -53 63 -73 -110 -57 11 97 -50 115 71 94 6 74 -14 34 -34 48 72 16 0 17 -123 117 -71 -49 -82 83 -5 89 117 48 -120 -49 40 -25 64 5 -7 -76 -45 -33 0 27 -36 -13 11 27 116 -79 -46 121 -18 30 -7 -52 -125 -42 -111 -31 -97 66 -12 -8 -39 43 -69 -14 57 -44 -4 2 31 -12 113 123 -19 87 -28 76 -95 60 -105 1 -77 1 -37 -5 3 64 18 -16 26 -32 6 126 -43 -52 60 -87 28 -36 75 -64 -33 -33 -53 -108 35 31 92 -29 -8 -96 -11 -5 76 127 89 -127 -28 -10 -115 -4 16 -25 -95 -29 37 -59 -11 30 43 35 -106 -40 26 28 -68 -22 -68 -4 108 51 41 -86 7 8 -54 -19 78 -106 46 17 -93 2 4 -42 -34 -93 -66 9 -82 10 81 18 30 61 24 47 11 64 7 -10 -51 -35 41 127 97 -15 20 121 96 -7 17 21 43 105 -98 -55 -104 44 30 -84 -50 -22 13 26 53 -107 127 66 -66 -18 35 84 126 34 40 6 36 118 70 -27 -34 60 -88 -96 110 45 24 3 13 -126 -60 19 -53 -21 -62 -99 13 -62 -20 -10 18 -36 -56 -30 13 34 -36 -6 -36 103 -75 -9 -125 11 -128 -118 -58 -45 65 18 22 -71 47 92 1 -69 -16 15 60 -13 -13 15 -30 -84 42 -82 -30 -12 -42 -118 1 10 -56 122 -107 -43 27 91 -48 20 -123 97 26 -32 26 -69 -25 8 48 28 91 -125 51 -47 -37 -21 -23 2 -40 81 -3 -54 63 -22 -30 -44 -52 76 -32 101 79 43 24 -3 34 -31 11 -39 113 -48 26 -76 -35 -49 -50 12 -119 1 27 50 16 12 2 -103 16 50 -5 32 38 86 -107 15 -110 -22 -12 12 -12 -1 0 -27 25 -10 -23 2 66 -62 -38 -95 -6 -20 -54 123 116 -29 4 -34 63 28 -119 -17 -17 59 -16 -17 58 4 87 -23 -29 11 94 -13 -100 80 127 -45 9 122 83 2 125 -11 109 -13 -7 11 -2 -1 -34 -127 2 -54 -92 -20 59 -36 65 0 91 24 -30 -58 -19 22 21 -99 -124 50 -114 -41 71 85 35 -13 55 112 80 25 -21 12 -96 -10 -93 -50 -1 -92 -95 41 -36 47 20 -77 -30 71 29 -61 -94 127 31 122 10 45 58 7 -37 -8 125 77 -109 -55 28 44 2 83 -32 69 -122 -104 -126 6 -60 30 84 67 -72 -40 48 -127 -112 -60 26 -66 59 43 -128 -40 -13 -28 29 -4 -7 -65 9 -36 -20 -20 -36 -75 -48 14 -68 30 -73 33 -116 43 -30 126 -21 -83 -96 -15 -3 37 80 -103 -28 78 -89 -20 -7 -39 -21 -53 -49 -69 -121 -63 67 -62 -1 -47 90 -108 50 -22 -106 -15 -122 -19 8 -66 69 -114 0 20 -18 -7 1 -68 30 17 123 -27 -61 -120 24 12 -38 -51 -50 -50 -96 -64 -46 -84 -88 22 -23 -39 -9 63 -85 5 -19 31 49 -2 -25 66 -80 38 -17 7 -44 -7 -49 15 29 25 -40 -9 -14 8 49 -54 62 -56 -40 -90 -9 36 -35 20 -14 32 55 -16 -8 -23 43 -51 -2 -49 66 -35 -55 -38 21 -47 -36 -7 4 4 -18 62 -50 13 34 -3 49 -51 -90 23 -95 48 20 7 16 -56 -29 -19 -98 -20 34 9 33 6 13 -78 -80 29 4 -10 -3 -105 -2 27 27 48 -41 88 -7 64 -50 1 7 11 -46 -5 3 20 0 -64 8 -128 15 -2 -76 -62 28 24 -31 -117 -100 -13 58 19 9 8 0 15 -41 21 20 -31 -31 17 -11 -27 70 38 37 -11 13 81 78 -14 3 -89 -26 -46 -40 -31 -64 50 29 -13 3 27 72 7 10 -11 54 -13 43 23 2 115 54 0 72 27 24 31 -39 44 13 -30 -33 -2 -51 -26 -4 -26 -13 31 66 92 95 43 -58 58 18 19 13 8 27 41 3 -47 -8 -43 -19 38 -127 22 -23 -102 43 -4 -85 17 19 53 -56 -32 -67 -34 20 -29 1 -30 65 -12 -24 -115 -95 -27 -48 -45 28 -44 -79 -35 -17 -34 -14 5 4 -34 -39 -17 -60 24 -61 6 -40 -59 -56 -57 -15 -7 -22 -35 17 -51 -9 -51 -13 -32 68 18 -69 -90 2 -27 -25 -85 101 -55 -60 -39 -56 -82 19 9 -68 -21 -25 7 -7 -8 -17 -65 -29 -88 62 -42 -74 -7 -92 -31 10 -39 -24 1 2 49 -21 23 -4 63 24 -48 -15 33 57 -42 1 21 -41 5 51 32 60 14 -13 -34 61 13 24 -14 -14 -12 2 -10 -22 61 16 -16 -41 16 13 9 -3 5 31 -3 37 45 56 -121 -14 -56 41 -23 7 45 36 2 -22 13 15 -42 23 -65 -5 -1 34 5 -45 35 3 9 -29 -41 1 39 -36 6 -52 -19 12 39 19 -30 -28 32 9 6 -12 1 12 11 12 8 -6 127 -9 -34 -8 14 -5 1 -79 13 -37 14 -39 -70 -35 -20 64 -4 4 0 -75 -45 -57 -46 -11 65 -42 2 -69 30 -5 18 26 -6 34 30 23 7 26 -9 -8 -40 31 38 -20 44 43 -18 43 -46 -6 14 -42 25 -61 46 53 31 -77 -19 37 -3 34 2 -40 -7 8 0 99 -44 37 -6 -3 -13 -9 1 56 -59 -17 -36 -30 -82 -37 -46 -37 26 1 56 41 -1 -40 28 -99 -52 22 -66 -4 17 52 -76 40 -73 19 3 -29 23 -1 -128 42 -89 -28 21 -38 24 24 75 -87 48 -46 20 3 -26 0 -68 4 -84 74 -13 -58 5 -11 -118 56 -20 -36 -11 -11 -31 -36 -22 -8 -35 -26 -67 -15 52 -30 23 -1 -49 -104 -46 43 -27 -89 -24 -39 37 -21 -40 7 42 60 -31 -98 -44 -30 2 16 -78 -54 -26 -10 26 -32 5 -5 -31 -92 -29 -73 13 0 -33 -36 57 -2 -33 24 -29 -106 -8 -120 -113 -67 59 -14 -66 -16 -5 -44 33 -8 8 62 1 -13 -14 46 -51 -52 0 12 64 12 -38 86 -6 -19 -21 -11 -46 16 -70 59 -36 7 -36 -16 -33 3 15 54 8 48 -118 -25 -59 26 25 44 20 -17 4 26 18 -51 -6 -14 39 -22 -51 7 25 -40 27 -11 -8 29 -11 -33 27 -18 -9 -45 -16 -13 -11 -60 29 -65 70 -22 -47 20 -33 30 12 9 22 -31 -16 33 -33 -8 41 -41 75 -3 45 -29 11 -7 50 49 -70 103 54 -13 93 -58 37 -36 43 -37 -2 3 58 -20 -128 45 -44 -77 20 71 -40 -21 -124 35 93 127 -14 86 -40 16 13 103 48 -57 -16 19 87 75 11 127 40 -123 -91 -28 -3 74 15 34 -68 -47 79 -33 58 5 -98 42 121 -28 -74 23 42 -15 16 7 36 63 -121 -31 -59 106 -41 9 -12 0 -13 -75 -7 -1 3 34 98 -13 -89 -30 -18 28 -5 23 35 -96 -107 -24 -34 95 108 115 80 -31 -67 49 5 -57 74 56 119 127 37 49 127 127 46 50 74 64 56 120 44 73 84 -45 125 91 42 101 -16 -27 109 116 78 32 58 69 50 127 92 -54 27 118 103 113 -56 51 127 -2 125 27 28 -29 78 99 -32 21 114 112 38 -99 62 83 -9 -9 42 -77 56 10 15 96 109 32 21 10 100 113 102 24 35 -19 41 84 98 54 -75 -1 123 2 91 64 22 80 122 117 -8 26 113 -39 55 35 11 31 76 77 113 31 -17 15 87 -41 26 -112 72 -90 89 -57 65 -77 96 18 -46 62 -42 -12 16 -31 53 -38 9 -68 56 -15 32 67 -43 -60 -17 -95 -127 -21 114 87 -87 -36 -39 105 121 16 58 -60 -110 -38 -103 5 -114 115 56 -48 -44 7 -62 -38 8 12 20 10 53 41 23 -34 -49 16 116 -44 17 -10 -34 -47 21 -84 -34 64 82 22 6 -27 68 41 -6 -50 105 -8 -48 -91 -10 -63 26 101 -70 56 -68 39 78 -27 -47 -36 -46 -93 -49 -46 -1 -7 -89 32 -16 -6 -86 1 -65 -102 117 36 60 -123 53 7 -31 126 78 105 -49 53 18 -50 -33 119 38 -46 -90 -7 59 -33 112 -62 -26 20 -19 1 99 -81 -80 26 78 -29 -30 -13 75 -51 -46 17 15 51 5 36 25 46 20 7 65 -110 73 32 -22 44 -128 106 -34 -36 -60 -75 -35 -3 -29 -20 24 73 62 -7 -7 44 51 109 -96 -8 12 -8 9 11 -44 12 63 -73 44 -7 29 21 -128 83 47 29 65 15 -34 41 9 -18 -47 -19 -67 63 2 -34 78 -79 34 11 110 -38 11 5 80 -38 -26 5 48 27 24 -40 -86 40 64 -21 11 -54 -24 34 32 -60 11 10 -124 24 -71 -41 116 -89 87 -38 60 7 26 -36 60 61 -25 83 47 82 -32 -44 -9 49 -44 33 -7 33 -25 123 -4 -42 37 -18 50 84 -66 2 -20 -3 -21 54 37 -17 12 59 55 29 -70 -39 30 51 27 4 -84 2 -2 -22 16 -128 114 -18 23 30 43 11 -66 59 1 6 -47 0 -75 13 -54 19 127 6 10 -25 61 76 -21 41 37 32 29 88 1 -53 6 -65 114 41 -4 19 38 20 40 38 33 -21 22 27 44 18 -7 27 124 14 -35 108 18 15 -23 60 -37 -77 -10 37 72 34 -1 40 29 6 -73 29 23 43 -42 23 87 30 67 15 35 42 49 24 12 -12 -7 66 -46 60 65 -58 -1 46 -2 -23 33 43 85 60 -23 47 7 87 -25 -22 -90 -23 -82 10 6 -29 -104 -33 -82 15 10 6 34 -6 -45 14 2 -51 39 -1 -9 -28 -7 -45 8 -83 -65 -43 24 -7 44 54 -48 -20 16 -67 -73 1 29 -40 18 102 127 0 35 56 80 45 22 36 37 34 -19 7 -7 -39 -19 1 28 -81 -10 56 92 13 15 11 16 -45 33 87 -126 100 20 -127 -43 -42 83 21 -28 -8 -4 -119 -20 -42 10 50 -75 -6 9 43 -9 20 -69 -70 -127 30 -86 56 16 91 36 -67 -49 1 -37 35 -45 17 -88 -91 -5 -40 -34 31 -17 -6 -36 -15 -54 66 45 3 -92 -8 87 5 -13 -16 40 -61 38 42 -34 -76 12 -22 -30 -27 -10 -79 -6 -23 -21 -65 42 -40 -47 -48 -3 -24 -98 -59 -90 -68 -2 -37 -64 -94 -19 127 -10 6 9 -16 17 -9 -3 77 -26 -42 -36 0 -26 10 62 103 37 -9 -45 26 34 21 -78 -18 -42 50 -5 3 17 40 0 116 74 -25 15 -127 -1 11 25 -30 -35 -112 -17 21 34 37 13 115 -8 -16 127 -16 70 12 9 -11 35 -57 32 -70 40 42 22 30 38 -3 67 121 -44 -2 89 -12 90 10 97 30 9 -43 -10 17 36 20 -27 -52 -12 -47 -32 112 -1 -81 -2 -46 -91 -61 19 -126 55 23 13 -51 55 35 41 -29 -25 67 -30 17 -5 -18 -16 -42 -33 -21 -13 -10 13 21 -34 6 37 -37 115 -80 -93 34 -41 -54 -6 0 34 47 -43 4 33 -45 -68 30 -8 -45 30 -46 -90 7 -66 -40 -37 32 20 0 9 38 -6 36 -39 18 56 66 28 -29 -40 19 -9 -13 -13 -63 71 11 8 38 -57 -14 43 -15 14 2 -21 13 -59 -37 -82 -6 -118 13 -20 24 19 -13 -10 -55 4 36 -111 47 78 35 11 -42 34 17 -11 86 32 126 10 14 -71 -28 44 125 -29 50 -7 90 37 10 -65 40 -77 92 1 77 38 80 16 -98 -117 63 -28 -84 -48 53 45 -40 -47 -59 -112 127 80 26 35 -101 97 -41 47 -9 -2 -18 -51 -124 123 -77 -12 23 42 51 51 124 -35 -67 115 -81 25 31 -30 -6 -43 53 35 50 -59 30 48 45 -35 -123 -5 -29 -69 -107 74 4 -25 53 127 -51 -43 11 -26 -55 -61 73 -41 20 44 46 18 65 28 -8 -21 5 -27 -62 80 18 -1 -38 7 83 71 -16 -6 -8 93 13 0 7 79 12 41 107 100 3 -45 88 -19 9 -114 -11 28 -19 -79 -35 41 74 -8 -37 127 43 -66 2 -61 -72 -46 120 -47 -100 -98 -6 30 -37 -4 57 17 -26 14 -30 21 -56 -1 59 9 24 29 37 123 16 19 50 -77 -78 -12 46 -61 27 21 -46 29 -19 -28 75 71 65 -34 -46 20 -103 84 -10 30 -61 -18 -20 12 82 51 66 64 11 -40 -86 -115 -110 -7 1 100 83 -57 -89 -78 -4 -51 -95 28 51 84 -38 -120 102 126 -63 -16 99 -85 67 125 -71 -35 -120 18 -36 44 -4 -37 -20 53 -73 33 105 -101 -3 89 2 -20 100 -28 77 -108 -15 71 0 0 -18 125 62 -91 23 35 26 27 59 36 87 18 -57 91 -32 71 -52 -60 -37 -60 -81 -22 -27 6 21 -41 -69 -37 -10 49 -37 -127 -115 -54 69 -96 -93 20 89 103 -14 32 123 61 54 52 121 -4 -26 -54 -116 -45 23 30 -57 19 66 11 -42 88 -88 -26 -16 -2 50 -86 12 -85 55 1 -5 -23 -50 13 16 -8 81 -12 22 61 47 -22 15 -8 -1 94 90 -7 67 4 121 33 -124 -23 9 -101 15 -108 19 -126 -36 -30 -5 -84 -17 39 -44 2 -14 -46 125 10 -51 -21 -22 36 -29 75 -84 74 -58 -59 -43 -48 104 -21 44 -69 6 -31 16 -79 -27 -21 -128 41 -128 24 79 -9 -125 -65 -123 -52 -10 8 -64 -53 64 12 40 -94 -126 16 88 32 30 -46 -29 -12 33 -14 18 -33 -52 -74 -128 -34 1 52 116 42 10 -70 51 -48 6 -55 18 -44 38 49 23 68 55 -21 -122 -66 -41 14 -84 -50 -8 -126 -9 111 8 -127 60 22 -63 -51 -25 -25 -87 -27 6 52 -43 -30 20 20 5 -17 -18 -31 93 1 -33 37 12 -35 -54 127 20 53 22 -16 24 -128 104 47 -126 -43 -78 -61 102 -127 -128 1 -52 23 24 -82 57 -17 -73 47 -127 -116 86 5 96 127 -12 21 106 62 85 25 127 27 53 -50 -27 -3 -20 -63 -126 65 45 94 -28 -30 125 73 -9 81 125 -28 62 72 71 126 123 -79 119 51 -18 56 -15 -28 33 -110 9 -106 -73 11 -102 25 78 93 114 -126 106 4 53 77 -23 -33 -57 69 52 54 112 95 72 109 58 94 61 -49 123 67 -49 -9 -68 -27 13 -45 66 49 -44 14 23 -44 -51 -11 -25 30 59 -54 -22 -3 8 50 -64 73 48 52 39 92 -33 -72 35 -46 53 -59 127 -3 68 91 -61 -85 -43 -94 71 -45 38 -77 4 118 126 -91 81 -23 121 121 8 37 -121 12 15 60 77 -3 64 2 -12 8 -100 -117 -51 14 33 -121 33 40 -64 -18 24 37 122 -4 -2 12 1 -55 40 -27 30 -15 48 60 -20 4 40 21 24 13 -43 -47 17 -51 27 -83 14 104 48 -42 59 47 -17 -2 -21 -58 38 -44 -37 7 -5 -28 -31 -7 -90 -52 -110 -26 98 -5 -17 -37 81 -60 54 48 -34 23 -29 50 35 -58 -7 76 45 13 -64 13 9 19 -23 -2 33 55 -75 -39 -9 -37 48 -39 31 48 60 -16 -60 -25 -26 21 -51 3 49 -22 32 67 -15 -20 -17 -82 -20 -72 33 43 -11 32 0 12 3 -12 25 -43 27 -31 -27 -70 -5 46 -24 -48 10 75 -8 60 -62 -36 -28 -10 -27 -56 -49 -28 -5 38 37 108 26 -55 -3 -34 -28 -43 61 53 59 77 127 24 -10 -49 65 20 -72 -22 30 -22 -109 -96 12 127 -13 64 -56 43 -102 27 3 78 -29 -19 85 4 -56 13 -12 -17 -10 -30 16 45 -44 -92 -95 8 -43 -51 88 -46 -22 -33 16 90 81 -110 -14 33 23 -43 19 14 -29 81 38 12 -21 -16 39 -32 -19 21 49 71 35 -70 -19 -81 -49 11 103 -17 -79 -45 -27 -55 -80 -19 -65 -58 27 5 -3 -28 25 -5 -61 -65 -85 46 -8 10 40 -14 25 -26 45 -116 -127 38 -46 -83 -43 51 94 -18 13 20 -36 73 -34 -37 -21 37 53 -66 -18 -49 -3 -72 49 -34 39 -25 33 47 -71 15 -118 -33 0 -15 105 30 -5 -25 -15 43 72 106 57 -17 -31 -56 94 -52 25 41 -111 3 50 -44 13 -51 -48 14 -97 17 9 8 -5 -46 -8 9 -11 -17 -34 -20 39 30 52 -52 -6 -1 45 37 78 -24 -23 28 -49 -76 0 32 -73 52 23 -52 -12 22 85 -18 -68 91 52 5 10 92 -2 3 -41 75 -53 17 28 41 -33 -19 -3 -49 86 32 -81 -15 -35 67 25 28 -60 14 12 -12 -22 64 15 -38 32 -100 -13 39 54 36 12 -50 21 2 103 5 -38 -6 -16 -38 10 75 -11 -54 -128 -7 -12 7 25 -44 37 -98 -22 4 -25 14 4 -47 -127 -6 71 16 -9 8 -47 -26 -48 77 45 -11 54 -3 -42 112 32 -31 -67 -31 -64 5 45 -116 11 5 10 60 -3 24 29 -59 -39 -23 42 -68 16 -42 -48 -121 -3 94 12 -40 -18 -1 40 17 73 -12 -23 -16 23 16 -75 -27 -45 3 63 -72 53 -48 30 59 5 27 -49 -20 -29 5 24 22 -86 -10 -92 26 46 8 -40 3 -67 -23 46 -31 44 53 -17 56 58 83 -7 53 34 -11 -79 -29 58 22 -89 -76 -19 49 14 24 45 20 -35 19 -26 -59 49 50 -38 122 69 64 91 9 28 -89 2 49 -14 2 28 -37 -30 3 41 7 19 11 -25 -66 -7 11 39 14 93 43 -39 65 -34 4 -106 -15 8 1 77 -34 31 2 23 19 1 3 -9 50 -16 -82 -100 1 -58 -41 6 5 -48 27 16 -126 65 -33 -43 72 37 8 45 13 -31 37 71 -27 52 -96 58 -63 13 8 20 47 32 -34 -34 -53 -19 -34 4 -11 -25 96 42 -24 -48 19 105 5 -42 19 -9 24 51 -39 -98 10 40 -17 39 15 11 30 0 82 77 0 55 -18 -60 -17 -44 20 -44 8 -53 8 20 30 104 54 43 -47 30 -15 -81 -7 60 -20 -33 -34 27 -41 -22 54 32 21 -21 -78 -102 34 -33 -26 -26 -5 99 25 6 19 88 -36 -96 -24 70 -27 19 4 11 -36 64 -84 -21 -98 83 -38 -57 -3 -124 4 -127 3 8 -13 -37 89 -17 -113 99 23 -7 27 -13 -73 47 -121 -24 23 76 122 64 -27 -51 18 10 63 32 11 57 -46 22 36 70 -6 46 23 77 17 46 -2 89 3 -88 42 34 50 -18 -51 40 127 46 -21 18 -12 -110 1 47 -32 65 -96 40 63 11 61 30 -65 -70 -40 15 -20 23 -2 -61 -39 6 22 -128 -18 42 12 -84 -34 64 -25 32 -41 35 13 9 -117 24 28 -23 26 -83 52 -20 83 60 24 -36 50 -9 -37 76 65 111 -85 93 7 53 -15 -127 -25 -74 48 84 120 -11 58 -97 -33 -82 -125 40 -11 10 72 -8 13 -122 52 12 -74 93 34 6 60 -6 3 34 29 -120 -6 -21 -10 31 -46 -107 -61 -1 -15 8 -123 26 5 -50 -101 -104 -46 -18 -63 -49 16 25 -24 17 69 46 18 97 51 72 -17 -41 17 36 -10 39 -22 43 -81 -44 -9 72 -21 -56 -4 34 44 -3 31 67 -49 -31 127 33 -45 -12 -25 53 -27 -40 -25 89 15 -61 73 -52 4 26 -19 19 -30 -37 15 54 25 22 -3 8 -70 82 11 -19 -37 -36 44 19 27 18 53 6 37 41 64 59 23 72 -36 -53 -17 -49 16 -3 -30 -2 -119 29 -64 -27 11 7 -24 14 39 -6 27 76 -2 -93 -52 -21 94 51 -21 -27 68 -22 27 9 34 8 -63 55 -81 80 -23 17 54 -127 78 -73 -98 26 111 36 -18 0 31 104 -39 17 69 -37 -6 16 10 11 -15 25 -43 28 21 -25 -78 -106 7 -14 -46 46 38 -22 -18 103 9 -51 -64 -79 -96 -115 71 38 30 15 -15 107 -16 40 29 5 11 72 -106 29 57 0 -60 -128 17 -125 -73 102 2 59 -48 -116 16 32 13 6 37 72 -1 22 21 8 20 42 -26 -39 -21 -21 56 -43 38 89 21 -56 89 125 4 -48 -13 -106 -75 -125 -123 68 -103 -47 -22 11 -45 -37 -97 -17 24 -16 28 -54 14 58 -18 -17 -62 60 34 12 80 -125 -70 -78 -35 -43 -23 33 -115 -72 -62 -103 -128 58 2 -8 -5 -63 -1 -117 -82 -7 -37 -44 -70 107 62 37 -1 -59 39 -114 16 -20 17 15 -92 -121 -94 123 -56 -112 -60 -52 -65 -78 -36 -96 -59 9 16 -33 56 -1 -47 -7 127 75 -44 23 58 -32 -69 25 33 0 -35 -1 -23 49 -53 -92 -1 1 -68 2 33 10 -32 18 -59 -13 -48 -22 -26 -29 44 -69 40 -41 -43 17 -9 12 -47 -53 -23 -22 -18 -10 -1 -18 13 -1 13 46 -22 55 19 12 25 2 -9 -21 29 -31 -39 -64 -3 -11 -53 1 -14 28 0 -44 -76 10 -39 11 -85 -23 -25 -41 -19 -6 -13 -18 -44 9 3 -4 -9 -16 -59 -24 49 -34 -24 92 48 -46 20 -36 40 10 25 55 24 -19 67 33 73 -8 -33 -14 15 -1 127 -82 -9 -16 -14 -35 20 70 -58 111 -67 29 -86 -62 -43 72 60 56 23 -16 -26 127 50 -33 9 62 -58 -84 -23 -85 27 -14 -119 -17 -30 16 -74 -9 34 -39 -43 -79 -21 81 21 2 -73 1 -47 -101 -109 3 50 127 -39 107 71 -46 -42 51 -6 -87 51 -70 -29 16 -103 -65 84 -45 16 81 42 25 2 95 -3 -69 100 -7 49 100 -5 20 17 79 51 92 -113 -12 88 32 116 -27 -73 -14 -23 127 127 12 17 39 -69 -106 -14 -59 -73 121 -29 -29 12 127 -99 -103 13 -9 28 30 31 6 108 39 83 50 43 -5 92 83 25 -41 -119 26 26 -64 24 -40 57 -2 -48 -96 -10 100 27 39 -23 -22 -58 -52 28 50 50 26 -48 -124 36 -101 43 -117 11 38 22 -88 85 -55 10 -39 101 127 -95 34 57 90 91 12 -42 14 69 118 57 -57 94 -95 13 -73 29 -49 -24 112 121 -43 -34 100 26 -42 -30 -5 -106 79 -41 -25 61 -20 -81 29 114 50 27 -17 110 89 -49 -65 -79 -7 -28 -84 -25 36 127 -5 61 28 52 48 -37 -19 117 -35 22 69 94 -102 -33 29 -38 -1 111 -61 8 -50 -41 -46 65 86 -74 50 73 -70 87 62 -37 -109 -27 -4 113 -128 -47 42 37 53 42 9 -2 -6 -56 9 -8 16 -10 74 31 17 94 95 -14 -121 37 -37 41 83 24 -126 -29 6 -29 -33 23 -20 -103 -22 -59 12 -94 -18 -31 1 -44 23 127 -25 44 105 56 59 33 -42 120 21 69 66 8 -38 -27 34 94 8 121 -90 1 15 2 -21 -59 -35 -22 65 -6 19 -66 -70 56 -51 96 35 47 30 -11 -19 -110 -30 33 79 125 -120 -15 -87 26 -127 70 -34 -21 53 -25 -20 -71 80 20 77 108 5 46 22 -38 -60 18 119 -22 58 71 -117 11 -126 -122 -6 -3 32 -48 14 23 55 34 -12 -126 29 -19 48 -82 74 12 78 52 -18 5 -28 12 127 83 -114 -96 6 44 127 -7 61 13 28 -45 -44 17 -57 -96 6 11 127 109 127 -38 -11 -46 10 -119 127 -121 41 14 -82 8 -96 -54 33 -18 33 61 16 -22 10 127 102 -37 -86 -16 -94 118 -13 42 -70 12 39 105 105 29 -31 97 -63 -20 -15 -38 119 -111 33 -74 36 -87 21 7 18 118 -28 3 -25 -7 -124 -94 -54 76 67 91 -24 -22 -119 75 -60 -19 127 14 99 113 -127 83 63 28 83 -68 114 -63 -77 -123 32 -94 -57 99 116 87 70 -3 -23 127 2 51 77 20 -33 27 116 82 74 -119 -35 70 116 54 76 61 -116 -2 -57 -27 15 25 -43 -18 -18 95 5 84 -14 -127 127 -119 -66 -97 36 109 57 -21 28 -120 -41 -8 45 44 52 -28 18 26 46 31 -123 -25 29 69 120 -4 -105 97 121 -23 14 -14 -7 3 56 -58 115 -36 18 -9 -126 44 -90 58 53 2 14 -18 29 -120 26 127 -8 1 -1 -128 -124 -128 -128 -44 34 27 5 -26 -17 -2 -64 -34 -125 24 125 98 -11 -44 -43 121 79 30 55 -93 99 127 -85 -72 -60 23 -78 -95 -54 -86 -37 127 -76 28 126 -126 127 127 11 -105 -76 47 -60 58 -25 19 32 6 74 -50 -12 -123 -112 -13 -43 -42 -20 -42 -69 3 -35 127 87 -90 -74 -2 -107 16 49 -70 122 46 29 3 -94 16 27 -81 -1 -26 -120 99 8 99 100 14 120 52 -94 -24 -64 14 121 5 -26 -113 61 3 48 -89 -120 -36 -41 17 7 50 110 32 -68 -117 -16 -79 63 43 -49 61 -33 93 -80 -61 30 26 -55 78 114 126 -112 75 87 -20 -50 -46 -119 -34 -127 19 -99 63 -52 36 122 -47 -47 26 -64 104 -39 -84 116 -67 16 -31 32 -52 3 126 4 15 -116 31 -20 -24 -12 4 -30 -23 90 127 5 37 -92 32 -56 -29 127 -10 24 -77 -36 50 91 -25 121 88 59 41 55 -53 -68 43 46 105 92 2 25 88 -86 35 14 12 56 -122 -84 58 57 -16 -52 -35 26 23 -2 -6 -71 -81 8 -81 -16 -82 127 -26 -13 18 95 -115 1 117 -13 -50 8 -55 -126 2 -69 15 79 18 36 -85 -113 -81 -75 81 85 -39 15 77 70 24 -77 -11 113 127 -74 -66 -40 -74 -11 -76 34 -104 -11 66 59 14 -3 39 20 87 -71 0 41 -39 124 28 34 -124 53 98 107 -27 -31 -23 69 0 -42 11 -36 24 -15 -55 11 23 -116 -51 -29 28 12 31 90 53 -53 18 -73 -40 19 -64 -35 -85 -77 40 -47 -7 52 -26 -4 31 -22 29 -37 67 19 -6 -38 2 -2 -45 -49 -28 -125 63 38 91 94 -52 26 71 1 121 29 18 8 -23 -33 -44 -8 104 -76 119 -28 -22 -36 -3 -49 -68 74 85 -59 -27 116 -75 -21 16 -3 -41 -73 7 -15 -39 -27 36 -12 -75 -43 -60 -66 34 127 32 -22 -37 -70 30 49 15 -17 -104 -27 -41 -94 -24 64 -50 -75 -126 -100 -19 -22 -20 41 30 4 10 -6 42 -2 2 -32 65 -41 -81 -65 -16 55 -115 78 -69 -16 -40 -16 62 9 26 113 70 -73 40 63 38 -71 -59 15 85 12 -24 -86 -24 -128 -15 10 -6 -75 -36 -38 -29 6 -4 -25 -13 -59 -49 -33 -68 -40 -64 -47 -43 27 -23 -18 39 9 43 -9 58 -49 -2 119 -75 -90 -76 -50 3 -37 -15 -4 -65 -17 -64 4 32 -113 -55 58 -127 35 -53 -57 -12 45 30 31 13 39 39 -39 48 -27 -34 -5 6 -48 21 13 32 -53 37 0 10 -43 28 -49 34 -22 -127 16 -16 -83 52 95 39 95 -21 27 -39 -1 3 -8 28 48 -16 -54 115 -43 58 -45 -94 8 -61 49 -105 -48 28 67 -49 28 -24 25 0 25 -21 -109 -85 -52 -86 -37 -13 7 -22 -65 97 -78 9 17 -70 -11 -15 -43 -1 60 7 -73 12 -82 -12 -30 66 69 22 -52 2 -33 41 12 57 -52 -31 -6 39 27 -45 -27 -15 -15 29 54 9 11 -24 0 26 43 -86 -38 20 -87 -1 -11 70 100 -10 30 -28 1 11 -11 -41 50 25 -17 61 17 12 -70 29 21 -47 -23 -47 9 -39 -34 -14 -19 -117 -15 -41 49 72 -61 45 48 12 -6 28 -43 -28 40 39 -14 14 34 -46 -10 20 -6 14 32 -29 54 -68 -55 31 -127 115 -58 -2 13 71 -80 -53 -28 -45 -121 -119 -126 81 -101 112 17 51 61 -93 -27 73 -90 20 102 -10 -30 -63 119 -105 17 -73 11 -31 -94 17 19 -66 -127 -117 96 105 -29 -62 0 -58 119 36 52 81 -72 1 -19 -30 -72 -28 125 -109 86 -21 -16 53 55 49 -126 -69 -59 -67 14 18 -127 -128 52 -38 94 -5 -117 -89 -16 -26 -60 -121 -127 62 -81 48 -61 31 -3 -15 29 -3 50 7 -31 -91 53 19 56 -6 71 -27 -62 -81 -37 -1 7 -15 20 36 19 -35 -40 44 21 16 61 -15 44 54 42 -19 -2 -27 -6 13 -119 -65 41 101 16 12 42 25 -20 60 105 -50 8 57 33 75 -116 -4 11 105 22 13 -22 63 -10 67 -20 62 56 5 -16 -28 9 43 40 5 -43 -104 83 28 -1 -58 -32 -42 -44 20 54 -16 60 -6 -30 -37 0 48 -62 107 46 16 9 54 34 0 31 48 23 73 -61 -66 53 -6 -25 -40 119 97 -25 64 124 8 102 53 51 -119 67 31 44 -70 -4 -52 18 -51 106 42 -112 -30 1 52 60 -9 21 123 -28 54 21 26 41 -118 16 -128 30 -67 -18 31 -82 4 -59 29 75 -47 -89 -102 8 16 -110 -86 -72 21 -26 48 103 -46 -29 56 112 47 86 -127 -58 -124 -77 27 17 -33 -33 -30 93 59 -60 -128 -69 78 40 127 25 -32 -17 93 -11 47 -123 -77 -8 -76 7 10 -123 -33 -71 -4 5 -42 55 31 -7 -124 87 36 8 10 12 17 -11 -87 -2 -126 15 -1 -10 -60 -72 -106 17 49 -13 -92 -56 -8 -73 -4 8 72 87 42 -69 -46 -14 13 87 -50 -90 -24 -89 -39 -123 52 81 77 -36 -106 11 121 -122 -63 -17 -45 -73 13 -95 -65 122 -31 105 -14 68 -52 -56 -29 35 -5 -47 -4 -16 -127 -124 126 1 59 -49 41 -3 -3 2 34 4 9 0 -31 51 -74 -96 89 -11 -73 -49 81 43 6 -48 -90 9 17 -54 79 -56 108 -69 1 -50 12 19 -32 31 -37 -52 -9 -35 -54 -31 -128 -36 85 -7 31 36 -2 28 -10 39 -12 18 107 31 127 -109 89 -85 29 -62 -33 -47 70 -48 6 5 -99 -14 31 27 -71 62 29 12 7 43 -51 20 -52 -14 13 43 16 -113 -75 13 -58 -37 48 96 -97 -21 19 -12 21 -6 -24 47 102 39 95 85 -41 -8 -28 97 18 8 -21 127 -100 46 117 55 19 23 -79 21 52 -21 53 37 -26 41 -9 70 -15 39 -53 -5 11 -19 -31 -30 -14 -83 -70 -127 12 98 73 -8 -60 73 -71 59 15 40 -5 -3 19 -66 -51 -33 -23 -32 20 8 4 -36 -66 46 26 -70 35 -4 -8 -36 82 -23 82 -21 -57 62 45 54 3 15 25 88 54 -42 -3 -43 -17 68 25 -32 47 69 3 -42 -76 13 -17 77 -123 6 -34 -84 -74 53 28 -13 101 70 60 15 124 -11 23 34 25 1 -2 96 -45 -58 30 -20 -43 -12 17 -36 -45 75 95 -56 61 -122 7 33 -34 -20 -124 -47 97 -87 -45 8 -87 -33 -15 -33 13 7 -25 -120 26 -24 -12 33 40 -22 -11 -17 77 5 107 124 -33 -12 -111 -121 24 59 13 40 -40 -80 -14 -16 -29 -71 29 -100 14 -23 29 -116 -8 -96 64 11 -105 12 -18 -33 59 -23 11 -49 -73 96 16 15 53 25 -18 -100 -45 57 16 -47 -19 11 -31 48 48 79 -54 -6 21 58 -19 -66 43 -56 16 7 93 -75 61 7 6 25 -53 18 -1 -98 -107 103 62 76 -78 36 49 15 75 39 -30 88 59 69 -11 -19 23 -61 46 -9 -21 2 66 8 -18 -83 20 33 -92 105 -67 -27 -24 2 66 4 13 39 51 40 -10 112 50 34 -79 -12 -52 55 78 40 -54 -48 -2 -61 -11 -41 90 37 87 58 18 -18 -36 4 26 -60 78 79 22 62 -41 21 21 45 -71 127 -27 106 -28 127 -78 -125 -34 -47 -52 -26 19 -6 -35 123 73 -43 -122 1 65 -28 0 -26 19 27 69 -85 -25 87 -6 -74 -3 31 -118 35 -45 -18 37 4 -17 -22 -27 75 -90 -44 -30 27 -77 102 -76 -30 -28 69 99 41 54 22 77 -4 -35 51 -43 -73 31 24 17 52 -27 39 62 -57 11 -87 69 0 -32 60 -40 -102 79 -120 -100 -28 -66 -7 -25 -12 8 -3 -24 5 -19 -65 7 -20 -51 5 -107 74 43 -18 52 -103 -15 -114 -46 125 61 -1 -69 -39 -24 -88 42 -110 -28 -34 55 -125 -121 107 -45 -41 127 5 3 22 -38 103 -86 -38 -68 57 -121 1 48 -105 -35 38 -16 -114 -63 20 -13 -123 -14 48 -65 50 -53 -3 1 -22 -24 -66 10 22 -16 -16 -38 35 -15 -5 -59 126 -20 -120 -40 -13 13 -28 -13 -14 20 120 55 120 -19 105 -17 15 74 -16 -114 16 72 -22 -19 -1 -47 -88 -74 30 -61 -19 -66 116 74 -46 -30 -45 57 26 41 25 -30 -102 -64 -7 -12 -5 -46 33 -81 -41 -70 -51 -19 -19 -35 45 -6 26 14 -1 31 -60 -17 -63 16 -48 -31 31 16 5 -6 19 -27 -27 -11 -51 64 19 -54 16 -46 27 53 49 58 -98 6 -27 65 37 -33 -15 -19 -45 78 -19 -57 12 -33 -63 119 56 -6 0 63 4 51 93 15 29 -41 104 -53 -54 91 28 -83 -77 5 -53 -69 -11 -65 -45 62 -51 11 72 -32 -23 28 -23 13 -23 -72 41 -41 -22 -27 49 56 -12 -31 69 -31 -20 -2 -67 -72 -114 -48 -58 51 -13 16 -46 -17 -74 -5 -11 13 68 -17 13 127 -22 15 2 45 42 67 -108 16 49 -21 -7 5 12 -52 -18 -32 -31 44 57 80 58 -38 -14 -8 -55 -108 -25 -127 13 19 -17 -25 -16 126 20 73 -19 98 22 47 16 34 49 57 -53 126 64 -118 -1 105 39 -5 88 -94 -1 118 83 123 -60 -125 -56 38 109 -4 103 -77 22 112 -87 -127 -9 22 -10 34 -23 79 -50 10 -6 46 47 59 3 80 -108 46 0 31 -121 -6 -109 4 36 39 -12 34 29 76 -32 -3 -118 43 -35 3 31 -35 11 71 78 -9 64 -88 80 -79 14 79 -59 -62 -125 -4 -88 99 -92 -84 35 25 -4 79 -91 -5 -27 -33 -63 -59 7 -74 -21 32 53 59 18 -8 90 -42 -26 90 -17 -13 -20 -59 43 -68 -7 127 -35 91 -49 3 -127 69 126 -27 110 -5 58 33 127 -27 -19 -30 76 36 30 65 -52 -11 -65 -70 59 -19 29 -46 -75 46 -40 3 47 -16 -43 -18 -68 -109 -127 12 30 35 -71 -39 -27 -22 42 -54 -13 -50 125 60 33 -25 -103 -54 61 42 -18 -82 6 31 -86 29 23 32 107 102 102 10 79 -43 17 67 22 -69 -49 -45 39 -21 87 127 26 3 54 -19 82 -29 126 94 109 -102 22 11 27 127 -8 -76 -23 -16 55 -24 38 -57 39 -46 58 -51 -18 -93 -81 28 -117 -26 5 46 -27 -54 -47 45 127 99 11 -81 -10 -28 -107 -34 -3 44 -127 -9 -70 -67 74 -65 -5 -25 -8 -50 -94 23 -34 -29 49 -39 11 -13 77 40 77 -85 -81 -86 30 17 -89 -40 -22 -9 10 86 -57 -77 -99 11 -128 35 -25 -93 37 35 -41 -116 -17 15 -117 -3 13 11 -23 34 4 -27 99 -24 34 -126 -30 -31 56 -63 33 0 -100 -43 -65 32 103 -76 -14 -82 28 -47 29 10 -16 23 8 -21 -61 -1 -59 -34 27 -90 2 40 119 -65 19 12 8 7 -62 -57 -66 -17 -80 -61 6 -23 55 -74 -111 -32 51 -71 -121 57 -23 -128 -12 30 -31 -40 -67 91 -40 14 -37 -121 -13 -98 4 -117 12 -39 -85 30 -78 -36 22 32 -4 -36 45 -7 -54 -26 31 24 -62 -127 -36 75 -28 -61 -5 -61 -11 -82 -119 -8 -104 5 127 -20 -61 -19 -10 -34 118 -9 -9 -19 35 42 -46 -22 -85 43 -9 108 14 -40 126 -13 32 -58 77 -2 -128 38 -19 -80 -4 -57 127 5 -43 25 123 104 -21 57 3 -19 39 -4 43 35 113 32 -24 99 127 29 22 -22 -124 -128 10 -17 2 -68 -76 -12 65 7 42 -75 11 41 -7 -38 -48 -43 -84 98 6 -28 -11 -24 -55 -27 -3 80 -45 2 -17 -54 15 126 26 4 -10 54 12 14 -93 -95 49 15 63 -2 -1 -33 18 1 31 7 72 82 -33 -61 10 52 49 -17 -19 15 74 -32 63 -44 104 69 4 108 -2 -77 -66 -25 -121 15 22 -124 -38 40 -71 11 -38 -48 12 -27 -58 -54 -55 -15 -14 127 -87 14 -90 -110 -125 -112 123 50 -128 -76 -44 48 15 -111 53 62 -11 34 -100 21 -16 12 -52 -39 92 50 96 -52 97 26 126 28 41 29 38 57 -45 76 -81 -30 61 15 54 59 -35 43 -62 -94 -32 121 29 -78 52 73 45 -28 -44 -44 105 45 126 116 -38 -18 -1 -65 69 3 -55 63 66 2 31 54 61 95 -126 51 33 -36 116 50 77 -120 84 23 -7 -39 40 42 7 -4 33 53 103 34 11 -30 -51 -41 41 -13 2 4 -47 -42 93 40 83 9 -47 -46 -73 112 8 48 100 33 -36 -15 -2 -23 26 -37 39 126 32 47 7 -60 65 1 -82 -125 36 -26 -27 38 -36 -113 -18 5 95 17 -12 51 -11 -121 68 35 -86 -54 38 -32 60 107 -69 -16 34 57 71 -58 -101 -89 -42 42 -28 -26 -79 -67 -109 9 35 7 7 32 75 -58 28 127 -7 103 35 127 -64 -40 -68 -20 -9 51 -65 57 33 36 -75 -84 -15 -43 114 -71 31 -19 10 122 93 16 26 54 96 11 -20 -93 19 -113 -63 -34 -13 -49 29 10 26 100 -57 -10 -92 22 -35 34 48 127 -69 59 -40 14 -91 29 10 -12 -46 -127 8 127 125 74 24 -40 43 -53 84 -35 -125 -54 127 127 53 111 123 -22 -6 -127 59 -23 -74 4 -81 -52 -115 121 80 12 -27 37 14 125 20 19 -24 -34 -24 127 -27 41 71 -62 18 -61 11 19 1 -49 -59 -40 -127 -60 -127 127 2 122 57 -128 -128 75 -65 -85 -86 -24 0 42 -124 -32 87 -33 31 45 87 18 -34 100 -127 27 90 -109 -128 -73 -83 -69 119 -115 39 -1 93 -128 -80 -8 -33 -52 -58 -120 11 17 -49 -7 7 -36 -6 127 -58 -125 -27 51 8 -44 94 -20 -9 -77 17 77 32 -38 27 -25 -70 57 -44 29 -38 36 -33 -46 -16 -116 59 -83 -73 55 -75 -93 21 51 1 46 -3 -53 23 -84 63 -57 -52 60 88 -77 -31 -35 2 2 -36 29 -12 98 16 -96 -6 106 31 -78 -23 -11 46 -43 48 44 4 50 11 -38 22 -26 -96 79 -11 -29 -122 -19 -3 -9 27 -60 -60 -49 117 -102 7 -50 -71 8 -16 -47 14 99 -5 68 127 55 74 52 -28 41 -72 -65 28 -5 -101 41 12 -10 -93 -54 -90 49 9 12 -10 83 79 -125 -61 26 -54 -11 -29 -36 -57 -49 -36 -2 18 -32 98 4 -78 -10 -53 -51 -32 11 52 -88 42 127 23 62 30 -42 -84 111 -36 31 -42 126 54 -44 39 -29 8 -55 30 110 -49 -95 20 21 -112 -16 6 -7 2 75 44 -78 18 34 -8 41 54 21 -30 -96 33 61 34 76 7 -6 33 73 7 -26 -97 91 55 49 -27 25 45 69 3 55 -53 -45 62 52 -7 -34 -58 30 -59 17 40 3 12 23 11 39 -33 32 -58 125 71 -30 25 -52 68 10 28 34 10 -97 -14 -51 6 24 -37 -13 -41 -32 -4 -50 18 -3 9 10 -87 -16 69 -25 -82 -32 -25 -127 -73 -28 -13 -87 -49 93 -104 -64 -56 85 25 -9 -23 -79 -112 99 11 52 -7 -16 46 -42 34 -1 -9 -73 -98 -12 48 56 -60 -8 38 -120 -8 47 109 4 -18 -122 -17 -3 -43 -106 -58 -99 52 -39 -43 23 -44 -76 -82 15 -29 -98 -120 19 -56 -111 -23 -29 -48 -55 93 -12 -74 9 -93 -45 -31 -102 -91 0 -24 85 -12 60 -17 119 115 60 -85 -64 5 -74 -97 -32 71 -106 38 19 -67 -106 55 -67 -30 -66 39 -67 -65 15 -7 8 60 -10 -43 -53 -56 -56 6 -33 21 -14 14 -100 62 -46 11 55 -42 108 44 42 15 -11 3 28 87 48 77 -24 76 45 7 -18 18 -15 -12 -20 -11 -14 58 -31 70 50 -39 24 98 -13 -36 109 59 -50 -51 1 -27 -40 -33 39 -30 11 16 -21 -13 -19 -9 -44 -44 -61 -52 -60 109 12 -30 13 -27 7 18 -18 49 17 -52 14 -45 39 -83 22 35 -45 38 14 -24 7 -26 -39 79 -50 -68 -26 -5 35 -4 0 -23 -16 22 119 -30 36 -33 -8 44 0 -65 -5 -46 -68 24 48 42 -35 -53 -12 -24 62 8 15 -26 -38 -79 -29 -93 26 35 51 -12 -57 54 39 -17 -43 17 -38 40 95 63 13 10 -126 -21 1 -25 -15 23 11 30 -7 56 -80 53 24 48 69 50 66 6 13 1 46 55 70 -26 11 23 97 -39 35 21 -72 -88 28 -34 -24 55 17 -15 -23 -32 -9 16 -4 -10 41 122 125 76 121 -27 89 69 17 -18 102 -73 -30 51 103 -21 127 -102 49 33 41 -80 67 9 125 -97 -3 52 20 -74 -35 44 -66 63 -53 126 46 -48 -67 84 23 -29 -59 -54 62 47 31 26 20 -24 -5 125 62 39 39 96 11 12 122 62 -19 60 -113 4 79 1 100 62 21 -93 -112 12 39 -126 4 100 -103 29 98 -30 65 5 103 71 26 120 -128 -68 101 10 -69 -57 62 -51 -34 -45 -128 5 -18 -70 50 87 1 3 84 29 90 -126 55 100 21 -22 4 -124 -52 -17 -46 84 18 10 -44 -1 61 -81 -15 40 -35 95 -13 107 33 102 67 -92 -58 18 -99 32 -48 84 -52 10 12 -43 -57 47 -30 -79 48 -42 -115 -54 24 -55 -46 52 -76 -78 -96 -86 6 36 -80 -72 -32 -68 30 -39 76 -59 11 -10 21 79 -22 -30 -21 -33 -49 -45 -50 88 36 -43 97 108 66 -9 -44 55 41 -76 -5 19 -44 -56 -55 -82 90 -93 49 -31 -21 -127 -49 -72 -54 -126 -125 45 -27 -11 -26 -82 -28 -86 123 6 19 -5 -54 -21 59 127 -5 86 58 91 -127 -106 -70 43 32 -120 -32 -16 105 -75 127 -78 -21 127 -32 -63 102 49 10 4 -45 77 77 -58 124 97 14 56 20 44 8 -57 4 60 -32 -19 -8 -102 32 38 106 46 -14 29 24 49 -78 -30 -47 -42 38 64 -22 -26 -80 79 -11 32 21 24 -116 -77 67 46 67 -91 -76 -5 41 -36 -44 -121 116 20 73 81 -3 26 -68 38 42 52 118 -27 -47 -31 -30 49 76 45 58 39 49 -65 -36 -62 -23 106 -12 55 3 34 -41 -50 -123 -41 50 -10 -102 84 -41 107 93 18 -22 121 64 58 22 -96 13 114 -39 87 -19 113 124 -39 53 -41 -28 24 -4 -59 126 45 -25 -40 48 45 -81 70 53 -8 127 88 -64 51 14 76 -67 9 -93 8 24 -20 32 -38 68 -88 -16 -21 -75 -120 6 63 60 13 69 126 34 -64 -5 -18 37 -50 -117 1 -4 11 -84 -34 52 -24 8 -14 21 -11 -64 -46 -90 -79 -3 34 -33 -38 23 -1 -3 -57 -119 -20 48 -14 58 -79 52 -84 -40 47 88 103 -61 7 -36 -8 31 -27 -52 -18 -53 20 54 -68 -8 -32 -9 34 -57 -4 -118 -32 -49 11 42 -70 -64 -11 57 -12 -37 24 46 -56 -56 -101 54 121 -47 111 12 -49 -31 -44 56 -43 15 -45 62 -51 -17 -25 67 -46 -65 -8 37 -84 -15 -67 3 -61 83 9 18 59 -13 35 38 94 2 104 75 78 90 44 29 97 62 -93 -125 -19 -33 1 -113 -23 126 -26 31 -58 -27 56 -76 41 119 13 -88 52 66 -86 27 -64 21 7 -41 17 -23 92 -100 -94 26 -69 15 -49 -41 -78 -17 53 84 44 17 -36 24 -34 11 72 -24 -5 70 14 22 22 -31 8 -123 60 -88 -18 -33 -108 -65 -107 121 -69 43 -122 80 -115 -44 -120 82 5 -80 -46 -64 -30 -68 -54 123 -98 -124 -12 -90 -87 -74 122 -41 -92 -66 22 49 -86 -72 43 24 60 84 -73 -88 -2 -66 -22 -36 -40 -45 -86 56 -12 15 40 35 42 66 89 7 -54 -59 -23 -42 -125 -41 38 21 -71 -10 -15 -91 -127 -47 -79 7 -19 43 10 -95 34 57 59 -79 -51 -7 -36 -66 42 54 40 6 -3 39 57 -42 -123 23 -20 9 35 111 -34 29 -40 -83 -126 5 17 63 48 -43 46 65 -84 -77 80 1 57 -119 -31 -27 -58 -73 -14 41 -37 16 7 45 -60 96 4 28 6 -38 46 -53 2 20 -26 -2 -3 -41 -42 65 27 20 -112 -43 -48 -10 87 -104 67 45 -39 2 -39 5 -44 -9 77 -22 -2 52 -58 -87 25 -24 20 -12 -103 -28 -77 -54 -52 20 58 -34 4 16 -21 97 -4 17 93 5 7 -39 -20 -126 -88 46 -61 121 -18 -35 13 -51 54 2 -31 -32 -45 25 -101 -120 -58 43 -128 -118 23 -67 -83 79 -59 -47 41 30 108 60 17 3 -48 82 2 31 -124 -8 119 -87 40 -60 -2 -1 -71 -64 -77 37 9 113 -1 -6 69 -11 -86 35 28 -1 28 56 116 30 41 101 56 20 53 125 112 9 2 20 6 45 7 -32 -120 62 120 124 -108 60 67 -86 -59 -1 103 -47 -108 22 -10 29 105 60 -26 62 33 -48 -86 59 84 -54 -121 -46 -127 -31 28 -34 -81 16 -51 4 127 -66 -47 60 -46 -26 108 73 -118 -127 -87 -31 66 -19 46 42 40 -27 -71 -25 62 -77 52 -118 -1 82 -60 -69 61 -41 -80 -126 54 -40 32 -32 2 -5 -37 -33 -26 -35 77 76 -13 0 -11 -39 -3 -92 72 -127 13 17 -41 -27 20 -66 6 20 39 -21 -119 41 -41 -23 -3 10 3 -127 -23 25 -67 1 -15 -22 -7 15 24 4 -32 -34 10 44 70 40 -62 -58 -51 -86 -25 -118 70 5 9 -21 -93 -45 -70 5 -49 -56 49 -67 -27 -38 -123 22 -5 -59 35 45 -88 -10 20 33 9 -17 43 -38 19 59 -16 20 23 -13 9 30 -19 -74 -62 20 21 15 -66 80 29 -14 39 67 -8 -2 26 13 10 -13 -17 -26 -38 10 10 -9 -34 -57 -33 -59 40 -34 61 -63 52 -11 77 -17 37 34 60 -13 69 -35 -20 70 -109 -22 9 62 -31 -57 111 68 -38 23 -104 -59 -26 -3 41 -25 -42 -39 -86 -71 -8 -71 -87 -122 -65 9 127 -74 -16 -3 -25 59 15 -103 -17 5 11 -106 58 39 1 54 32 -29 102 -52 127 -20 8 -6 -14 44 52 14 -37 -73 -68 -1 -8 -44 17 -13 -43 -47 -12 -10 -66 -55 -66 -13 -10 39 -28 70 -7 21 -37 -115 -22 -5 -88 -72 -6 5 106 -14 46 6 -57 -128 -50 6 -17 40 81 -1 -65 -2 37 90 91 64 64 65 30 92 39 -49 61 -14 -39 14 127 49 -30 17 123 124 107 73 -24 -89 60 124 63 114 50 -17 81 28 39 -120 55 75 82 -30 64 -12 1 65 -32 51 38 82 -24 2 43 16 85 -1 26 -19 127 2 35 -35 50 58 -66 75 107 66 -9 38 -42 20 56 43 41 77 26 -20 10 -67 -3 15 -30 -22 7 97 51 39 -21 78 58 -52 -55 -9 5 110 4 54 93 119 -40 26 104 22 19 -50 18 14 -13 -78 41 -42 -27 -10 -56 1 -31 -14 -117 82 55 -62 -57 -60 -53 -14 0 116 68 -33 73 -89 -122 1 -24 21 -61 103 23 -109 45 29 -1 -47 -36 15 -17 -12 -40 18 -6 -70 -20 40 106 -22 28 -45 -20 35 -67 -15 -83 53 43 -2 -25 2 -39 15 0 45 51 52 -46 65 -99 -9 -82 15 -69 -19 -16 32 52 -36 64 -51 -37 16 22 23 6 16 17 -23 1 -24 34 127 1 57 22 -39 44 -49 120 -33 -70 -34 25 59 52 -23 -128 2 -4 17 -6 56 24 40 -16 20 -68 -20 -13 12 -69 126 60 4 85 1 -54 -49 -74 90 -28 17 4 -53 -81 -90 -123 26 33 53 26 -78 -12 84 36 8 -29 3 24 26 19 12 109 11 -14 68 1 127 -14 -28 21 -33 -34 -35 23 36 -70 52 97 21 20 -22 127 -60 -8 -35 -21 51 51 -4 123 -32 31 -127 73 -23 -90 72 116 -96 -111 28 73 20 41 127 33 -58 53 34 -30 -11 -12 -20 -47 -39 -38 74 -90 -128 -20 48 -6 26 47 37 27 -37 -89 -105 14 -22 -9 -52 -19 -5 -43 85 -72 -80 69 90 21 -26 57 -1 71 68 46 -41 -60 46 -125 91 -66 -40 -17 59 19 80 32 -12 -124 -7 21 -79 -117 -56 -3 123 -12 -45 -82 -59 15 -54 -109 104 -3 -78 -26 -35 127 -60 6 -20 -28 -66 46 -23 1 43 1 -86 -2 -25 -31 -45 -27 99 -20 -25 96 6 -7 22 35 54 -51 65 126 -39 -119 102 -38 -17 -10 -29 -83 94 34 23 -9 60 -23 -104 99 56 35 -89 18 44 -70 7 11 -5 107 0 68 106 10 -5 53 122 71 -1 4 -39 -119 -43 -29 -32 -12 14 6 -50 -60 -39 29 20 6 -51 26 -23 84 68 20 106 -127 127 58 -14 -126 -50 -52 49 34 -15 -43 -72 17 25 59 -61 -61 -110 19 -4 -21 6 -101 -39 -81 -12 125 100 43 -3 14 -128 44 -102 41 25 14 -21 48 60 44 -9 -2 -11 -121 21 56 0 -51 77 -2 -10 0 10 -36 -39 -15 -3 16 97 -83 102 -89 124 0 -25 24 -127 5 -60 -40 45 -20 13 -1 -90 -10 33 100 122 34 -128 -37 32 -56 -35 127 83 -19 40 28 -8 26 101 56 -6 2 -81 -22 -47 -26 47 -30 16 -43 27 28 16 45 -20 -74 -60 -40 -34 -25 -33 -40 -24 -49 49 75 -76 50 -34 15 -88 -120 48 -18 -21 -50 -23 -29 18 14 -31 6 -81 -100 124 -52 -125 -57 -87 -54 -81 -19 -124 106 28 83 30 -119 -46 76 -115 23 -45 -91 -18 73 16 -48 76 -32 10 7 39 -17 -126 61 103 66 14 -114 54 -18 33 20 -33 38 -125 -28 55 -74 74 -3 0 -30 -45 -88 59 62 127 -127 -17 -72 40 107 -72 10 -109 -117 -87 -123 -36 7 5 -43 -21 -125 -41 -57 54 -44 10 -19 18 -97 -121 -33 38 -37 -18 99 8 -48 -120 -72 46 -69 -44 -51 -124 18 -99 24 3 109 -87 -24 31 -125 -62 -9 61 -10 -28 -48 -78 -48 -15 10 -47 20 62 -122 83 -73 -34 77 -66 92 -100 61 18 16 37 122 -109 127 35 49 -12 -6 11 40 -8 77 0 -32 79 52 120 20 -89 -119 -73 69 -78 -69 12 1 -32 37 -109 61 -64 -27 16 -77 -7 -126 -36 -31 31 -83 -6 -16 61 18 -56 9 -33 -43 -70 88 48 11 81 13 27 -29 -95 -22 50 15 -68 -9 -65 -20 109 13 -6 -56 4 57 -44 20 39 15 97 29 30 -3 -58 30 -67 85 -45 -18 113 -31 -8 -25 27 -22 -10 17 -2 49 2 -50 82 -8 -29 109 72 -60 45 34 42 44 102 -68 0 41 -35 -70 -51 -26 36 -12 13 14 -27 66 87 -30 -18 48 1 -20 -10 0 60 89 -50 -41 14 -1 33 -44 46 27 47 127 -99 125 -17 -91 37 -41 127 120 73 64 30 2 16 -31 125 -105 -67 51 89 -33 23 61 8 -77 -122 37 39 -18 -20 27 56 14 118 44 8 39 -45 127 100 -84 30 97 -17 50 -39 127 118 -5 36 103 127 -9 -100 103 42 -5 -52 -36 38 -20 41 1 -70 28 51 25 127 17 -15 -88 -66 23 95 16 -105 -23 -54 47 -23 86 -7 124 -56 33 23 -64 -23 20 -47 1 42 -25 9 14 72 -69 -58 75 -53 -128 -37 -4 -23 -46 53 50 45 -65 -22 -67 29 -86 74 24 -56 57 5 7 -99 -32 -2 -27 -28 -25 7 -45 26 -25 -10 -31 -44 24 -50 1 -2 16 22 -98 -35 -47 1 20 -97 3 -31 -14 42 31 -18 -12 34 15 28 -82 -18 34 38 70 -4 3 -38 10 29 -28 73 16 -25 12 -18 92 -47 18 -3 41 22 -6 -60 -22 -25 -59 43 -1 -103 -82 -39 -17 40 3 48 13 0 -41 13 -77 48 -45 46 -25 19 -13 -16 -89 1 -32 -7 -25 -47 -43 -6 -51 32 12 80 52 -48 -9 -47 9 1 18 29 11 -45 -30 15 70 105 72 -28 -39 7 -13 -69 13 42 -6 -12 7 -14 -74 23 -73 -13 7 -22 10 8 -5 -5 -26 -26 -2 0 37 -125 -55 -30 35 67 43 -29 -25 -2 -46 -124 -4 22 -110 -11 79 -31 -15 -38 9 69 -27 -53 -34 5 95 11 -52 -25 -28 -4 -35 47 2 -29 39 -61 -98 -67 -122 -59 -8 65 -110 45 -63 -9 41 76 -48 26 -50 -47 13 112 -88 -26 -76 -32 -43 -2 64 2 -21 31 -20 -62 -42 -70 127 -98 48 -66 -77 7 13 -49 -31 -104 82 -58 -7 -56 65 86 7 -80 88 43 -9 41 -24 -64 -104 -34 24 -5 22 -67 -9 38 -126 -2 -64 -76 45 -24 -4 -72 -111 -29 53 -37 127 -36 54 -44 -12 1 -68 -14 -31 -74 -16 -39 -15 -12 127 46 -48 30 15 -46 -27 -76 -19 11 -44 92 66 99 22 -98 13 32 -96 22 7 -41 34 -56 -53 -42 8 -13 -12 25 -63 34 -21 86 -89 -43 -18 -31 6 97 53 18 28 21 8 17 -67 -61 9 56 -34 -37 73 -7 -38 9 32 19 36 0 39 4 25 -14 110 48 13 -4 10 121 32 54 -3 -38 -18 -12 33 -15 34 -1 27 6 -24 -88 27 67 -70 -15 -15 9 21 -84 -128 25 1 -5 -8 -14 -82 22 -26 37 -6 23 18 47 -21 -15 -31 -16 11 -34 -42 16 -77 47 -41 -27 -27 56 68 -99 14 -7 25 -66 5 8 -40 25 26 -89 11 62 55 123 15 -56 12 -69 -58 13 -61 28 -14 23 -12 42 -24 -50 -6 22 0 2 108 -6 -85 101 13 36 22 7 -20 -53 -26 -33 -66 -47 -7 -18 -44 -43 -20 1 -51 39 3 -73 4 -32 9 -26 63 -16 -75 1 3 35 82 -22 53 41 -69 85 -76 -47 -20 124 85 120 78 77 104 -58 29 -10 -58 -16 -127 -6 42 95 65 20 68 -30 57 -15 72 124 82 68 72 -22 -82 74 -54 13 -33 44 18 121 -15 88 108 45 84 -5 -46 71 29 -13 72 -69 -26 -4 -82 86 19 127 42 9 6 19 -9 24 -34 32 106 28 43 44 37 65 55 81 26 39 -81 28 81 -15 -4 31 -59 53 122 82 97 2 6 -47 -46 31 71 -26 -27 -19 -5 52 32 40 9 24 35 -8 -16 -14 -47 -35 49 66 -39 -92 127 38 16 -1 -97 -60 -39 -99 -69 -35 -49 3 24 70 3 3 -19 -60 -17 88 51 -58 45 -10 33 41 1 -50 86 32 -35 72 2 16 7 14 2 38 65 28 105 54 9 22 33 12 48 -21 -46 23 27 -18 10 -1 5 -9 22 -25 -56 -86 23 -18 43 -77 9 -54 23 -6 -39 37 -90 -78 -7 -27 -13 31 42 53 -124 3 -49 -28 68 93 25 -13 0 13 -5 -33 -55 18 -54 -2 13 -71 73 -79 2 -6 33 33 60 -77 -114 5 -42 60 34 38 5 -50 54 -29 -39 -109 54 -32 -19 -45 13 55 17 88 -60 70 74 57 -51 -42 -15 -84 24 -17 5 3 35 -34 -15 26 58 -94 23 -4 -56 2 -2 -122 1 -12 -37 -2 11 -24 112 15 67 -54 1 2 -49 89 4 4 -17 -39 -29 29 -27 -19 -38 -6 -35 -96 40 -2 49 -72 46 16 44 -106 1 -39 -65 96 0 -73 3 -59 -66 -73 26 -124 37 -30 84 -102 15 91 7 -61 -28 -13 29 101 -123 8 63 88 3 29 -21 72 -64 -118 -42 -16 -67 24 -24 -22 0 69 -70 100 -79 51 106 -76 101 107 56 60 -58 -44 -23 -2 90 -51 23 -116 -116 -125 60 -10 -100 -17 23 -3 -39 8 -13 26 -127 -23 -6 -42 2 -77 27 -81 -78 -14 -97 -9 -111 7 20 60 44 -106 69 125 3 46 81 61 -2 5 92 0 91 -32 -58 -6 56 -51 -39 -34 14 57 33 -23 6 99 -65 35 -31 23 -11 -128 -38 30 -33 52 -16 -55 -21 -13 49 -28 5 71 -2 -30 92 2 -78 24 -2 30 -7 -21 -33 -6 -61 13 77 22 123 -27 30 85 20 61 -8 23 42 65 -41 38 -25 1 80 -77 15 -47 34 59 125 -40 -105 2 21 9 38 -10 1 -2 -23 5 122 -3 -65 30 55 -20 96 46 -46 127 106 -16 -13 127 38 -31 49 33 83 -2 -65 59 56 -55 -48 -28 -36 -26 -3 -81 44 64 65 22 -67 -6 40 -125 1 -48 -56 -87 -87 26 -31 -57 23 21 48 -13 -45 59 -66 65 -63 -24 -15 30 -50 39 -127 32 -128 101 79 29 13 -68 -95 -32 -93 64 71 32 -44 111 40 71 -16 -32 117 53 -89 -13 12 -108 76 -80 -21 15 10 -116 -10 -72 92 40 15 -11 20 52 5 82 -68 -15 -19 -79 58 -32 -43 -120 -127 62 33 -9 -115 -93 -127 9 -101 112 -106 29 30 2 126 29 49 126 -125 -115 -62 -2 -7 28 -4 127 -126 3 29 8 -18 -128 116 -24 -110 66 8 -126 -64 -122 54 -65 -109 -33 106 32 48 -122 -10 -31 124 -62 -52 -106 -127 84 103 -127 127 -81 10 -3 -53 42 -62 -16 -41 -119 -80 18 -41 -14 28 -71 -10 79 98 -75 84 -31 -53 -128 -62 -19 33 108 62 -27 -51 24 -57 -16 81 5 -73 -12 19 -102 -118 -112 32 62 0 -82 118 17 10 18 119 -127 61 -125 22 62 -5 14 82 95 -70 -61 22 -10 -22 -86 -127 31 -19 -78 51 125 -33 1 -58 47 -26 74 -124 -82 -1 -102 3 44 -28 86 111 4 26 22 2 91 75 5 6 62 5 19 -89 21 14 -29 -62 50 -35 -72 -4 -79 -9 8 43 43 70 -1 -25 -85 25 72 24 17 6 -58 29 78 95 -101 24 17 18 -85 -102 116 -127 -26 -26 23 -3 61 33 -51 63 22 54 53 -121 29 78 -29 -67 71 106 -41 93 -94 -65 83 3 127 -63 107 -125 8 112 11 29 127 -116 -12 -124 -68 100 126 -34 80 -61 -108 -22 93 -33 -1 69 -68 44 -19 127 -11 -58 -117 -66 127 0 -118 -79 -125 -53 -72 -105 -18 -24 36 -11 -76 112 -65 -122 -31 51 10 27 -47 -127 49 127 57 -82 -13 34 -27 -3 91 62 9 -26 13 20 -34 40 35 -11 -20 57 -56 -88 73 -19 36 -52 -18 22 -39 56 47 23 82 57 38 26 69 -17 54 -48 15 68 -22 1 -10 39 113 -10 92 7 127 -57 16 -15 39 63 55 -33 9 44 -108 -14 101 108 -41 -51 -47 11 -30 -62 47 86 -36 -15 -41 -22 88 -32 -12 -70 -13 -8 -42 33 6 -12 -16 103 127 6 25 -103 7 65 -50 -18 -82 9 -60 26 127 22 69 73 42 83 23 55 -34 3 35 32 57 53 15 -108 95 -93 -85 12 -10 -13 -36 -35 19 6 4 22 40 33 73 89 -66 -1 28 15 99 16 43 -8 44 13 -113 13 -127 -110 -60 21 -17 31 94 42 6 -111 -37 76 76 29 29 -80 -42 -65 27 83 -5 69 38 37 62 -52 13 -34 29 71 -49 -4 44 -4 -53 65 -44 44 -46 98 48 108 1 -42 -45 -4 8 4 37 35 32 -41 -13 94 -59 -8 -83 -15 -26 11 -43 30 12 86 -3 106 12 62 -44 7 -68 -22 111 -27 -33 -9 -65 -95 91 -31 -23 21 -84 20 -14 65 22 15 2 -17 -23 19 0 -71 -66 -4 -72 -39 74 90 8 -17 5 32 -52 -80 91 35 15 -22 111 13 47 -73 -79 -33 4 28 -36 56 38 -2 -7 -70 76 56 63 11 47 -5 72 -72 -50 -5 -19 27 -7 -39 53 47 77 36 -38 67 -67 51 -30 -44 114 23 -2 -23 -37 -4 -81 20 -28 5 115 -83 -12 79 -4 6 50 26 67 61 70 76 23 61 -19 37 8 -92 42 -16 -20 -79 -63 105 32 -89 -29 -51 48 -63 -114 85 118 -53 -5 19 -68 -7 -38 27 82 29 42 78 22 -29 5 -9 -8 83 -45 19 54 51 -22 13 -50 -87 -51 44 -88 -37 -8 -34 53 -34 36 47 -1 20 49 -14 -93 56 52 28 15 15 43 65 15 -21 -3 14 -11 -50 64 34 -44 -10 -121 7 -82 37 24 7 -67 -96 -7 42 38 40 122 4 -5 -27 -33 35 29 -64 -59 38 -35 7 -19 -42 62 -49 -53 63 61 8 4 -33 -15 122 7 50 -40 26 27 40 -9 -43 76 24 -37 -61 20 101 74 -48 7 23 -31 82 40 22 28 -16 44 -51 -76 -73 40 -52 70 -2 67 -69 -19 -29 27 25 43 -1 7 33 -62 -50 -6 -12 9 -38 9 -14 24 -73 27 -47 49 -12 53 40 -7 100 -123 -50 10 -25 1 26 -37 -12 73 28 39 -20 -74 15 -18 -1 49 -25 -53 -24 -48 45 103 -18 36 20 19 -59 27 12 -3 -56 -22 -42 -108 101 -23 -48 44 -110 29 -30 34 120 95 -79 -33 44 81 46 -68 22 -73 69 18 -21 -40 -2 -2 -72 -8 -79 -21 18 -43 -28 -101 9 6 -20 37 13 39 61 46 60 -4 -2 50 15 -18 19 8 36 100 -27 2 -74 127 -36 57 -61 28 33 18 7 -87 -126 -79 -126 -95 35 36 -80 -85 25 -66 49 9 -113 44 -42 -17 84 -54 23 -15 72 -14 -14 -13 -61 -4 30 4 -23 68 14 -86 -91 17 -52 5 12 -5 -40 -15 14 -37 -42 -13 10 -28 -27 28 26 37 0 94 -127 1 34 -59 -78 55 -82 -60 -50 -86 -27 -91 -97 45 -6 -58 -1 -75 -80 -74 68 -27 37 29 65 -50 -6 26 12 -8 -11 17 -27 -12 -73 16 -58 -23 -76 21 -20 31 -71 30 -10 27 -10 -73 11 -32 -35 -27 19 5 38 2 -11 -10 -20 6 -27 26 -56 -20 61 -35 30 -8 -35 26 46 31 -16 -18 14 48 27 20 34 -9 79 -36 -22 -10 83 -6 -4 -11 17 -4 55 -18 -1 52 -26 60 -7 -11 1 -30 74 -6 -27 -4 -19 36 16 -10 13 4 -75 -4 -27 45 -37 -16 55 28 52 30 -30 -62 -50 45 -27 0 37 24 -13 -32 18 50 5 22 -12 -9 13 -3 23 -82 -33 11 62 33 -17 -84 19 -22 95 89 12 -15 -24 -25 75 118 -32 65 30 51 73 22 22 15 17 -74 -5 57 11 -50 -60 -33 -85 -32 -10 -28 -51 -51 -100 10 -21 43 37 63 -96 38 -14 30 48 -78 -17 -74 35 77 -51 11 -23 18 -61 24 -123 -49 66 -8 -15 -38 -18 -14 -16 125 -55 -12 33 -71 43 34 46 -12 -53 50 13 -7 33 -18 -6 14 35 42 -108 -35 72 -41 -21 -48 18 -5 71 24 66 4 125 -107 82 69 111 -56 16 127 95 -8 -69 2 -52 78 61 109 -6 123 -84 63 35 117 -24 46 -39 126 120 39 4 -31 -3 36 71 98 -33 92 50 -6 11 91 127 51 -76 -67 -48 -24 125 25 -19 36 35 103 105 30 72 92 4 -126 -48 -42 4 71 -125 -123 56 -25 14 84 -26 25 88 43 -8 86 -95 1 -39 -36 43 68 -45 6 -20 -41 -89 21 83 -15 70 56 22 10 9 -38 38 125 112 34 -5 126 -25 -37 82 -79 24 -36 6 76 127 -69 49 -3 -50 34 8 -88 -20 -114 -51 35 -10 24 -82 -33 13 42 10 72 -95 -21 46 -16 39 46 -51 31 -127 5 -32 -14 -3 72 -75 -20 40 -94 -37 -78 -65 -7 39 -43 2 -19 87 60 -57 -7 43 -124 25 24 -4 -26 54 -47 33 14 -8 11 41 -37 116 -34 -46 120 53 -61 -1 38 34 -72 -15 -112 107 -23 -26 30 0 -106 104 -28 -80 103 -96 11 -68 97 7 54 41 101 0 -84 -24 -92 -35 28 -115 -85 23 -125 -9 127 80 -34 -74 -27 -33 38 103 -16 -48 41 81 -29 127 -60 127 -45 -77 4 13 41 -20 -28 -22 -8 -52 22 17 -12 -21 -92 -31 127 -113 -45 100 29 71 7 -31 50 121 0 3 13 89 -124 39 -4 9 35 -118 -86 -123 -7 -11 109 -126 -90 -29 38 10 -120 -66 -34 22 -39 3 -68 124 13 -24 -64 11 -29 -121 -58 59 5 -42 116 76 -61 -128 -23 -104 19 8 62 -87 7 -54 -21 124 -8 54 40 -15 -7 68 110 84 -23 120 -110 59 18 81 49 50 13 105 4 67 84 10 -62 60 3 52 -53 49 53 -87 28 79 63 52 31 -33 9 111 -59 -66 -32 49 47 -99 34 -38 -29 84 4 19 28 -81 75 -61 -56 -9 43 -15 -9 2 61 23 114 39 65 76 51 16 -2 61 3 -31 127 55 24 -53 23 -126 -29 21 11 -15 -39 -26 -115 19 -67 -33 17 -40 49 -5 -22 -67 58 8 -91 -23 -72 124 47 17 -68 -50 -45 -43 -87 123 18 0 -57 112 -36 -12 121 -111 -30 41 -47 -10 103 27 -35 -94 -70 -15 -102 -18 -51 -50 58 -20 72 101 -42 2 7 -7 87 82 17 99 -94 -114 -32 4 9 -87 -11 -113 17 -28 20 -69 -28 -10 -51 88 66 -16 -47 -45 -78 -62 -34 -14 -100 -7 -27 27 -82 -4 -47 -93 -21 -86 -85 -27 5 95 20 -103 9 -84 -69 -14 24 -97 -4 -25 -14 -15 -111 -17 -30 6 13 -23 26 5 3 25 57 -42 44 -20 43 15 6 80 51 -36 11 76 115 -52 61 -41 -62 -45 -2 79 122 13 -37 -35 -3 -15 -1 22 65 -77 25 65 44 72 41 -32 22 25 -9 -64 -25 -20 -66 -37 -37 -47 65 -50 23 -3 -99 20 44 -8 -49 -61 -30 17 27 -5 17 23 35 -83 52 52 10 55 34 94 59 25 -17 69 -85 29 -19 7 20 25 20 12 -21 -14 30 -75 -77 -69 -88 38 -31 9 31 64 -10 -37 12 -18 -8 -33 -55 42 24 101 25 32 7 101 -27 -109 -42 96 64 -86 -117 76 -80 -77 14 49 81 -79 -54 -24 23 76 1 60 32 12 81 -41 20 -81 -118 9 -6 -113 -80 72 -6 18 15 5 -91 -114 -120 -118 14 -119 84 -20 16 -60 121 -112 -120 37 -48 -2 -120 -13 -102 93 -6 -55 -18 114 -74 -34 103 -23 -54 73 -19 17 64 1 67 118 -49 -26 -47 -23 26 24 43 118 17 103 120 46 12 106 -47 19 -47 9 -42 -20 13 22 111 15 19 -27 107 79 71 46 -77 90 7 34 86 72 18 -107 -15 -91 14 10 -20 -28 -56 33 123 40 55 -87 37 127 35 92 -122 4 -26 62 63 -75 -122 -113 -8 -9 -22 -16 -25 -94 19 -44 -60 45 -117 34 -54 -25 -13 58 -126 -15 -68 126 36 -15 6 -74 -65 3 -68 57 21 81 58 115 43 123 81 -9 -58 17 -64 58 21 -30 -108 -65 16 -128 -45 75 -119 -117 -97 -65 -40 -123 125 127 127 17 68 -16 10 126 30 120 -121 -18 127 80 14 -125 -45 40 -30 -128 -37 -57 -20 59 -117 -70 12 -58 63 -59 -11 -17 27 64 25 -38 9 123 -32 -125 14 -71 127 116 -25 44 124 -47 47 -22 31 -127 113 -112 -117 21 -33 -53 57 47 -95 -39 4 26 32 43 -21 -16 -99 -64 -7 18 -49 -110 -13 68 70 -16 48 -54 14 48 36 121 93 -78 -24 3 9 -37 -19 54 110 -72 -42 -65 6 -90 -56 41 -1 102 40 13 -10 -62 -17 44 -66 -98 79 -51 -16 41 -28 -107 27 77 -1 -128 -120 -6 58 -119 30 -2 25 -68 3 -78 123 -51 54 -70 17 90 -17 -1 -74 39 -106 -42 23 76 -37 31 9 47 -95 -41 34 4 11 -127 9 28 12 20 -48 97 -5 4 5 -10 -71 38 -65 -77 -64 -50 -21 -16 44 6 -21 0 -15 -1 22 -15 107 109 1 114 62 89 61 29 -28 28 -67 -116 -70 -41 22 -51 40 121 42 -7 56 -26 -11 -50 43 -73 85 -110 47 13 67 42 71 -65 32 14 24 -111 55 -7 1 -16 54 127 -20 7 -16 -62 -13 -19 4 56 -20 -8 -12 117 28 9 -49 -38 5 -36 16 39 -65 -27 60 -51 30 -61 31 -24 -22 110 -6 64 -50 4 -33 -5 0 32 -18 -60 -12 14 -60 -33 74 -31 22 44 -29 -49 55 -38 -11 27 -77 4 -41 17 -68 12 27 -51 -126 -20 -3 103 61 -117 -48 28 -49 1 -6 68 23 -30 95 52 -11 -26 -20 -9 -9 -8 12 65 -57 -5 -66 -53 -3 -39 37 -47 120 53 44 20 26 -47 -50 26 -15 -3 26 2 1 -6 -80 98 26 -82 32 17 -24 38 8 -50 81 -45 16 26 8 -9 63 -43 53 -8 19 104 49 114 -4 123 -19 29 -7 6 17 39 111 -47 102 -56 16 67 19 -35 59 -16 62 117 -69 -45 31 -9 -39 27 116 -24 119 -65 -83 121 10 112 31 -69 22 -66 -48 66 3 -118 -122 -104 95 -105 -17 13 22 25 -60 55 29 -50 -17 -2 109 -19 59 106 12 -43 -17 34 -89 46 36 -43 28 42 21 30 -8 25 103 103 3 37 114 53 -33 1 -7 -28 -38 11 -22 71 -57 -98 90 83 -63 67 87 -21 -40 -12 -34 23 61 10 17 44 -13 2 78 -61 7 -43 74 -35 -51 30 -13 41 -17 -73 -27 -13 3 38 -115 -19 4 -55 -68 -47 -4 -29 83 41 -5 23 -3 -20 127 -58 17 88 13 -37 -10 -32 66 26 -8 -19 -42 -3 -50 82 45 31 -93 63 -66 16 82 31 30 -29 78 36 -55 -24 12 -40 -35 -3 -8 -1 -51 -1 60 -1 -38 49 -8 -40 65 -74 45 -14 34 15 -8 -49 31 122 -24 15 -36 -84 -20 -22 -91 -11 41 -22 -74 -43 -33 30 -71 40 -29 -20 -18 97 -114 -58 -76 -25 61 47 15 52 18 -17 37 -39 -63 13 85 -105 23 -13 -71 50 16 -25 0 -2 6 33 -28 3 -1 -23 -64 39 -10 109 78 -26 65 -7 115 24 -99 8 -87 -19 50 -75 -43 -37 126 94 75 58 -6 9 -63 31 -19 39 2 -38 55 -36 -17 -6 51 35 21 18 -41 22 74 -6 124 120 45 79 72 76 43 -10 25 112 51 -59 6 106 117 86 9 44 -26 40 26 -57 39 19 -38 49 -8 31 -53 58 94 7 85 19 121 30 56 85 -10 -33 22 115 127 8 -89 46 68 -23 -5 -29 62 -5 1 17 26 49 -2 6 84 -56 111 -9 125 -27 -25 113 -46 84 102 41 -7 45 -8 126 127 -13 29 -68 -58 53 66 100 42 116 58 109 -52 125 -73 -11 46 3 27 -43 -27 -13 -8 38 114 1 -54 -23 19 -15 3 60 6 -4 56 -61 83 20 7 -37 -7 8 7 41 32 -70 1 -21 -3 -27 -13 -20 38 7 -23 110 36 -19 -77 15 -67 -63 -38 59 -46 -75 37 42 -6 114 -106 111 -43 9 -58 -42 -46 50 -42 14 -81 37 43 -56 46 4 33 -58 -13 -104 -33 33 79 -32 -28 -61 119 25 -10 91 -5 -26 1 -25 22 67 53 -12 -50 68 29 -36 -37 -41 -11 52 58 -32 -40 -48 -124 127 18 -104 62 94 39 -74 -18 -15 -16 -128 -78 33 -64 60 75 -17 -32 -115 33 35 64 -64 20 -71 -38 10 15 49 -45 23 -31 -122 -126 32 -5 -40 -29 -31 117 -22 123 31 52 46 -13 27 11 82 -55 -50 6 93 126 16 39 127 36 7 -20 4 -42 -20 -95 61 -80 -3 119 -14 87 47 -69 95 25 48 13 101 -65 -17 -25 -38 106 53 -86 62 42 -56 -85 -73 31 -92 84 -47 5 -19 35 -52 83 58 51 63 -76 8 65 37 -2 0 17 -56 98 -52 -75 -36 -83 16 110 -80 13 -85 -4 -82 -84 -13 -33 -19 92 5 0 -84 84 35 12 25 7 14 35 -126 9 -27 -42 -53 -80 -21 28 36 17 11 1 -4 12 1 -60 -83 36 -50 -6 -18 -92 11 3 60 -48 34 -23 53 -56 90 82 29 96 -23 -101 -17 85 -58 -38 -6 94 23 -36 -4 -26 42 11 32 51 15 -2 -50 -68 -33 50 21 27 -13 53 -37 14 1 37 -42 -3 22 18 -9 29 -12 5 35 -90 -55 40 46 107 35 72 44 41 -68 4 19 6 -41 29 -84 -5 15 15 -16 5 -28 -16 48 -2 -40 -54 -121 -8 22 -13 -37 -21 13 -36 -5 -99 11 20 -64 24 -112 -13 -43 32 28 36 58 -28 63 32 -10 37 -11 -7 -51 39 -53 0 87 24 -21 -16 -5 -38 10 -4 21 -23 45 25 26 11 120 -3 76 44 61 27 -28 -30 -40 -102 51 29 35 16 5 -29 31 61 -4 23 -28 -31 -27 -14 -35 -3 -20 -49 -101 5 23 3 -54 14 35 -10 -90 60 91 20 -123 -127 73 33 -9 -64 61 -15 -5 17 45 34 10 -81 1 27 -43 -47 35 -32 -34 6 -68 11 -21 -36 63 -25 66 -96 74 15 5 64 36 -5 -1 -86 52 60 8 6 -73 34 30 3 38 -5 -21 27 -8 86 51 47 78 6 64 -100 120 86 -23 47 3 -3 -21 15 -22 36 -93 -12 28 70 -45 42 -54 24 13 -67 127 65 8 -123 -58 -65 7 1 118 66 115 -6 52 -14 109 46 127 127 17 4 4 -77 25 -52 127 -93 -34 116 81 15 127 -42 109 120 33 -81 -46 123 29 85 58 14 103 -14 26 82 -25 51 -114 -79 50 -1 69 91 31 24 -4 17 -45 64 -65 26 49 -56 -26 -67 -16 -121 123 -25 -28 -28 -69 -21 -65 -37 119 -17 -21 -19 -86 11 22 42 36 113 15 -52 24 -26 -95 37 89 24 -62 -67 -42 -45 8 -9 -58 -19 8 -52 27 -49 -40 37 -19 -57 0 4 83 10 -33 13 -8 12 -125 -59 17 13 -48 -55 46 82 -72 72 64 1 5 -17 5 -48 -89 -10 0 44 -10 -72 20 -30 -104 -25 -56 -46 114 -99 16 -63 -21 44 55 -11 111 11 -99 -29 51 -28 6 4 -3 16 65 86 54 28 -21 -14 -30 -77 113 -7 -46 -56 -69 -70 -100 -47 -69 -64 53 9 114 1 15 -4 -71 -10 -28 -43 40 -27 -1 -19 -54 124 44 -78 69 -113 -80 -69 18 -62 97 -97 56 4 49 4 81 -123 -23 122 59 -79 -34 24 -57 106 -6 91 -98 -10 81 -91 -30 2 14 58 -126 -86 2 -104 -3 44 -39 74 32 -48 -73 -113 6 -27 -81 51 81 60 -27 -73 -12 17 102 -60 76 32 3 -51 -23 87 -15 32 27 -68 -52 -126 -93 46 43 59 51 -3 -5 -40 53 -6 106 17 35 127 68 -80 -39 36 115 71 70 125 23 103 6 -1 41 -50 24 -24 12 59 0 23 -59 -16 29 -28 48 70 65 -47 33 -42 46 53 -50 121 32 51 -7 47 -70 -10 35 -68 97 20 34 62 77 -6 -122 1 33 33 26 84 -74 57 -36 63 -6 -37 31 101 29 -31 16 -87 28 4 26 80 42 38 -42 2 -42 9 19 -103 33 -64 -14 36 -71 -31 64 -31 -33 -34 38 3 -20 41 -77 -20 24 7 -25 -15 56 -88 19 -14 -56 -22 53 21 -83 52 -43 -27 14 72 -67 80 -1 74 63 65 4 58 -65 16 -46 -55 -30 85 -92 -25 28 -60 20 -6 97 -94 -11 9 51 -3 -13 -21 -71 4 69 -25 31 -21 58 41 -128 -30 -18 -93 57 45 -88 27 -77 6 75 51 93 -22 -84 25 -40 8 -44 -52 76 -50 19 79 40 -49 4 50 -103 -43 -31 -12 -57 70 46 23 29 125 1 -13 6 -11 39 35 -88 64 -71 -49 -97 9 53 -20 -11 11 121 51 46 -24 -33 10 16 76 80 -21 42 8 -81 -60 39 -3 -53 -112 53 12 -9 73 27 85 57 43 46 118 2 29 -58 -55 -11 -51 99 98 6 -54 12 -63 127 1 8 -121 -14 -114 26 31 5 -42 -11 -20 -79 -6 -16 21 3 42 -23 -1 14 21 -43 -107 -80 44 104 -49 16 -91 -7 22 -55 45 0 -90 125 67 -50 42 16 -76 93 -92 -44 30 121 15 122 117 26 25 33 -11 -52 122 -45 -34 113 16 -7 56 -62 21 3 80 40 40 -76 110 74 -7 7 104 81 116 68 -7 13 -61 -80 -68 -124 -43 -126 -18 12 -70 51 39 -40 -39 -44 37 -106 -32 65 -64 17 58 13 -5 -37 -13 35 44 75 77 -64 8 40 49 -123 -89 100 -44 31 115 7 14 -2 34 -1 71 75 32 -34 25 19 -10 43 -43 -128 -83 -40 -14 68 49 76 -78 -10 -83 -65 -39 -37 47 76 107 120 82 19 -55 -49 21 2 3 56 57 3 75 42 -23 -4 -5 21 -3 -17 3 24 -35 -32 -10 -125 37 75 6 -75 -2 15 -75 45 -85 125 98 25 68 30 -9 55 74 47 18 35 42 23 -4 48 -113 -115 38 78 88 -36 75 -71 37 24 -8 6 119 66 -92 57 97 23 -22 -18 -9 33 -9 -10 -20 -53 88 48 -72 -14 53 -3 -22 -9 -30 -75 33 -93 -76 -26 -27 -120 71 -124 59 -27 -33 73 76 16 -15 -10 -27 -53 43 -35 12 -58 -10 46 -82 29 -23 32 24 -33 -7 -28 35 -118 75 11 71 -17 18 -29 -37 -25 -32 -76 -4 66 3 -25 -7 -36 -12 5 39 -28 46 117 70 -21 -14 -58 -126 -106 -49 -91 -28 60 112 -7 4 11 -43 -22 -39 -54 -2 -34 97 69 -61 123 -34 -73 -73 53 -39 -122 -109 -82 -78 2 1 -127 -125 51 -33 22 -38 -112 84 -26 -57 -35 -86 79 -54 29 -56 29 48 -60 -93 -101 25 33 24 40 -86 -105 43 -53 -49 31 -55 -47 58 -64 -43 -40 -112 -27 -10 -100 24 -124 126 24 -113 41 -42 127 2 -117 -48 -53 49 -124 -54 -59 -24 11 -119 57 -52 -127 -86 6 -1 -16 -41 -12 7 -38 29 -92 42 -42 -1 9 -102 -8 -73 -121 -116 -102 -76 -3 -23 25 33 -17 69 -41 -16 96 -79 -33 66 -71 88 -50 1 -16 -5 -120 33 86 -42 33 -44 -79 -26 80 -11 -5 -75 -41 -48 89 32 -51 -23 -24 -25 0 -14 -28 -50 -102 66 49 -2 108 20 -33 -34 -10 -31 15 71 -46 5 -5 46 -123 -13 114 15 67 -93 60 -65 76 12 34 18 -46 -69 32 -88 -63 -3 -73 -89 -17 90 -50 -54 -73 78 -26 -20 -67 19 22 -32 -14 -48 -111 57 -112 58 -128 80 -61 4 -15 37 7 -21 -20 35 47 -19 31 -76 -19 -34 91 13 -16 73 126 93 -35 -41 -1 16 -61 61 -94 1 47 -76 -69 -67 -28 36 64 88 -35 -110 23 -35 -105 -43 13 99 14 -31 11 -36 -76 -57 26 -17 -33 -76 9 24 43 -42 25 49 94 -4 -105 -103 10 -38 39 -51 104 -76 55 -13 -58 23 12 -30 61 4 45 -9 21 -53 2 -32 13 -15 22 -7 18 25 71 -30 14 99 48 -63 -35 -18 112 -128 -39 96 20 -32 51 26 30 -53 -87 -54 -55 103 25 103 86 -4 66 -78 -44 46 16 -122 -38 2 103 53 21 -1 12 15 47 9 25 21 -43 -50 -41 -19 99 14 31 -80 54 56 -11 32 43 122 -60 70 -82 32 -14 119 16 21 -103 1 -123 -13 48 -14 -72 92 -57 2 -43 -61 38 -54 50 45 -61 82 -99 56 -75 41 59 51 63 13 -123 -99 -29 81 66 25 13 -37 -56 20 -93 -19 -48 -24 -58 -19 -44 -12 21 15 12 63 -34 53 -5 -87 -82 -42 -127 -43 54 56 77 12 -77 -28 82 -23 125 63 -52 -1 30 31 73 -19 -127 17 -54 -15 -31 6 -125 55 127 46 24 -37 -2 62 73 23 -2 83 -69 -4 -45 -15 12 -4 -47 -19 92 50 66 19 -51 12 -8 -114 16 3 -108 38 0 24 36 -1 33 -35 -5 23 7 46 -2 9 -93 -19 -21 21 -38 4 -1 -55 60 -104 -127 48 -36 -24 1 -18 36 -116 81 85 47 -69 50 -34 54 122 -12 127 27 35 -2 -61 -35 -1 106 -103 -121 16 -33 57 -24 10 -110 -22 30 -27 16 -33 -41 20 -125 -80 108 127 -3 37 -11 90 -7 -46 59 -34 4 -29 49 17 46 -121 -18 102 -123 -37 4 -47 -12 -120 119 104 -20 -60 -2 17 33 34 45 30 101 6 -39 77 12 -85 63 116 12 -51 127 126 -10 12 66 21 1 20 -26 78 -11 8 -11 -50 -127 -38 92 -74 -65 -108 -57 -19 66 41 -100 -24 -60 82 -23 95 2 -68 22 54 68 -10 12 9 -90 36 33 -103 72 -60 -52 -43 -103 -60 -83 -82 -72 -51 6 -53 -30 -34 -100 -119 -125 -123 113 -15 69 -96 -95 125 76 24 -66 57 126 96 -104 -33 8 73 103 -56 72 40 -48 -24 -12 -60 -4 -69 -56 -51 -70 -36 -56 -45 -80 29 -43 -22 43 -62 -31 10 -20 -70 18 -36 18 75 30 37 -84 39 6 106 -76 -27 14 46 84 -89 -24 -10 44 110 58 -1 51 71 -25 1 -26 -60 47 19 31 2 -116 -11 -42 84 -39 -14 -44 79 -14 2 -121 39 80 -62 33 -1 55 -13 -76 -90 -81 -21 -17 77 44 15 -25 -15 22 69 -59 -127 -45 84 116 -66 -87 51 123 21 13 5 16 43 7 41 21 19 -45 -12 -31 -108 -54 34 9 70 17 -81 65 28 21 50 56 -55 -127 22 -87 15 101 24 49 29 -42 -10 -44 57 17 -66 -36 87 -11 -5 -85 -128 115 -96 -41 126 -21 -1 36 15 1 20 60 4 -6 -88 -5 24 73 109 -54 77 125 13 60 88 127 68 34 -110 6 -3 27 -26 -62 -80 -23 19 -71 28 67 -54 116 114 73 -28 108 -23 -32 9 -8 82 -23 -81 56 -44 18 -45 -57 -1 -106 37 -54 -44 -43 -31 -73 21 -33 -24 -24 -114 -39 -8 66 16 -118 27 -6 56 -2 13 9 121 -31 64 48 4 75 -17 -20 -78 -36 11 23 84 85 -81 -78 40 -25 71 -54 -90 37 41 -16 109 127 65 -45 -59 -2 28 11 78 51 74 3 -12 84 91 51 -34 127 -52 -41 31 -57 -17 -68 -76 53 114 -97 120 87 118 37 24 43 89 120 109 -40 1 41 80 110 -124 125 -89 107 49 -61 112 0 36 17 35 -7 8 -57 49 84 111 58 43 46 10 -7 90 -101 -77 -80 127 109 29 -89 30 -77 -46 -28 -11 -35 12 -77 0 1 -18 -4 -56 82 7 -32 -48 22 -37 -18 44 33 10 -34 19 -90 -15 -54 -94 -94 56 -75 -43 36 46 27 -8 -73 -57 36 -43 90 -36 -70 51 -88 -38 -83 -39 -16 -29 -87 5 32 -14 48 13 45 42 106 80 18 -75 -57 -1 43 15 44 -29 12 -44 -114 44 -20 -48 -15 -36 127 -26 54 -52 90 7 104 -10 77 -18 46 75 48 35 -83 -43 -9 58 121 18 -12 84 1 -40 -47 17 -120 -77 -22 74 10 52 4 -30 -43 -19 -4 11 -86 68 16 31 -1 -6 127 -4 31 -38 -38 21 5 88 -112 63 11 -29 117 -39 108 79 -113 -65 3 48 -24 -15 -15 52 39 -22 -32 34 -27 -32 8 62 22 -27 68 -44 26 10 5 124 25 -74 -4 15 77 -126 -127 -63 -27 -76 -5 -35 37 -50 52 -10 63 7 -78 30 -42 13 -75 18 -63 -31 89 -2 32 73 -17 104 -34 35 -103 13 87 19 -14 -104 -36 -76 -50 30 35 -72 10 -8 -91 104 -96 5 52 -34 24 90 -13 27 -123 72 -27 114 -20 123 -12 -34 -26 -54 -127 -24 70 -6 -75 -50 0 13 -21 5 103 -57 -71 -74 32 68 -73 -18 67 117 -80 -42 111 50 57 -74 -127 -10 -34 127 112 -121 -63 -107 25 61 91 -16 -35 9 -25 1 -34 87 59 56 -105 108 90 -92 37 15 18 -111 29 31 74 -22 -20 85 -76 -42 55 -41 -23 -35 -55 -92 46 -3 -81 -40 17 -84 -54 1 127 26 -120 -15 79 -72 -1 -126 60 -29 -70 3 67 36 -45 15 41 100 -72 14 -36 24 -30 -61 -28 127 82 -58 -6 -51 7 -41 23 -5 -42 -10 -24 79 -70 88 40 113 0 22 -55 -46 0 9 -75 31 -67 -37 -15 4 17 27 24 -113 28 -125 -117 -8 -124 -1 74 -3 -74 50 -20 16 -50 -63 -43 -20 -90 -49 -93 -30 11 -97 83 -121 1 -57 -43 27 -11 28 -62 -84 126 -15 -64 45 50 -32 74 31 -125 95 -46 -79 -3 18 16 79 15 -26 -38 -49 127 74 -32 -25 85 41 23 -17 1 -66 -29 53 5 -33 36 32 0 55 -62 50 -25 36 -119 -47 -3 16 11 46 71 8 -52 77 -37 -25 105 89 36 -37 -3 -19 -49 68 -29 3 -59 34 -127 40 2 56 -127 -121 -53 17 34 -53 -29 25 -19 1 56 -40 75 14 26 -55 67 -126 56 9 -26 22 17 -13 59 70 1 -39 -33 42 61 -5 -51 -3 23 -90 -32 57 -97 -45 15 -65 43 118 43 17 -121 4 20 31 19 -90 44 -62 42 98 -60 -105 -39 24 68 38 -71 64 -75 113 0 -103 -39 34 -39 72 -34 -46 -123 -58 15 55 11 -39 -110 82 -28 -53 -49 -91 76 -21 53 60 -32 -60 50 13 52 11 39 46 37 -85 -124 -20 -7 76 5 76 44 -16 -73 -69 -54 15 19 -47 26 84 -65 -30 50 -24 31 61 47 -12 4 -34 66 -99 -16 -60 78 -1 72 -19 -52 9 48 -7 94 73 37 -11 110 32 98 -62 -45 -124 63 7 -47 54 -49 -18 44 62 46 68 -39 102 -16 -57 22 -36 59 -47 48 39 -27 42 -40 0 31 -1 -6 2 -68 66 -5 33 -41 -46 59 -19 8 1 106 -46 5 48 90 -23 -52 51 10 -7 56 91 -7 51 83 -7 36 -68 47 -17 -87 120 -43 40 -53 -10 -15 -35 85 122 7 -78 30 30 85 102 -26 92 -25 40 24 -11 2 56 46 10 22 121 29 27 -30 -84 -98 -15 -11 12 -35 -85 -123 29 -86 -27 -23 122 76 12 17 29 -27 -42 84 0 23 -5 -22 80 -64 -89 -38 76 -128 -32 -10 -47 2 -97 67 104 -41 36 10 127 123 10 16 21 39 41 19 64 -53 -118 -49 -65 -10 -3 8 -37 -68 -45 89 10 53 -16 -9 -38 -13 -75 -106 -27 -73 94 95 72 -35 -19 -28 6 -76 -57 34 4 -45 18 75 -52 -4 -59 -34 -91 -12 45 -9 6 114 -43 -3 5 -73 -5 -24 -81 66 24 -83 -127 -52 -121 7 40 2 -33 -3 5 3 65 1 55 -34 22 -9 9 125 40 22 126 -105 74 24 -21 126 -39 1 -52 22 -10 -20 -43 -51 -60 -36 3 25 124 45 -12 -120 -32 85 -98 -21 -120 35 -2 -5 9 -38 -84 -1 8 22 -122 2 104 -17 93 -65 127 61 -101 -32 -44 1 -74 -23 -37 60 -27 -125 10 73 79 -48 43 -29 -109 39 -126 15 -121 -125 -41 44 52 -114 -64 -33 69 -55 76 -26 -113 -42 -65 38 -87 -1 47 -14 -14 -27 -43 40 -52 -11 -16 115 -57 59 -90 -20 -64 14 25 2 4 59 3 25 -4 7 32 13 9 77 121 6 -64 -26 25 125 -21 -3 -128 25 -25 72 102 90 -23 10 14 -34 -37 35 -17 -90 -28 -46 -43 -13 11 25 25 -9 -125 -21 -68 30 2 -24 36 21 -128 -26 -11 36 76 -20 -24 -41 -120 -59 32 40 -44 -127 -22 -3 15 -64 53 -22 124 19 -28 59 41 -22 -18 -5 -56 31 31 -41 -53 -93 -39 -13 43 54 -127 97 7 82 89 36 -70 95 0 24 33 -20 -13 60 33 17 -32 -48 -68 -36 -127 21 19 -62 -105 -30 -21 -49 -27 113 -9 84 73 3 -36 -49 -111 104 -65 -122 -45 -20 -29 -9 19 41 17 -108 -64 20 -26 24 -85 -22 -30 -89 -57 -49 -51 -67 82 26 23 -82 -95 -111 -48 4 -6 50 -32 -33 -117 4 49 -117 -24 -105 24 42 -27 -80 66 73 -100 106 -123 -66 -23 -24 3 3 -68 -57 -7 -47 -70 98 34 65 32 -40 -89 124 27 -37 -4 11 42 65 -127 -1 -82 127 -6 -103 -5 -67 -82 -58 11 43 14 -14 -57 26 -92 -6 47 -62 -19 -7 75 -16 -55 -108 23 -55 48 75 -26 69 63 -37 -18 -21 15 -43 49 42 -2 -110 -23 29 45 -1 -70 37 49 -33 123 -22 51 0 -97 -39 -41 -115 -49 0 55 -57 10 -26 -77 82 5 -58 -94 49 44 8 -33 -41 -72 -93 17 87 -50 -37 -40 11 -35 -13 2 -21 0 -36 48 86 80 38 20 70 -31 35 9 32 20 -64 -51 -67 -4 29 -75 -36 -73 60 1 16 -49 -74 -19 54 -11 8 4 2 50 -4 -40 25 -12 -55 -40 45 42 32 107 -108 -27 -64 -23 -54 -3 39 71 -21 77 -52 24 -12 -5 6 75 -9 -63 -41 -125 0 127 -109 57 13 7 73 94 98 -36 8 20 16 64 -9 5 -72 -116 26 -57 -51 31 8 -75 65 -73 -33 21 -35 -22 75 -4 3 39 18 32 -2 -5 46 -53 106 -23 29 21 38 10 10 -75 -97 -54 -48 -63 -15 -66 11 48 108 8 -37 -103 -23 29 -116 93 -7 8 -64 -48 74 -99 111 -65 -87 -74 -34 -71 -64 -3 -38 -79 -5 43 -93 5 -41 2 -87 5 -61 9 54 -51 -77 -101 -45 -29 -5 -41 -89 -61 -13 -76 -1 -1 -41 -51 -64 -7 -49 10 -30 -48 11 -74 -14 -30 -93 -52 -7 -73 -74 -55 15 -5 -56 -48 -88 -52 -11 -12 -53 -30 -15 -21 4 -45 -24 6 -64 -127 11 -99 7 -8 -79 9 -51 -38 -49 -35 -45 6 -127 -48 -18 -25 3 -66 -44 -15 -78 -11 -26 5 -27 -17 -1 -41 -21 -35 -1 9 -40 4 25 -22 -3 -35 7 -1 -25 13 1 51 20 9 -3 27 11 -36 30 -35 -9 -21 -12 -26 -4 52 23 33 7 -19 -63 -22 50 -74 -10 -32 3 -18 -25 25 -13 -5 -34 -12 31 16 31 27 -33 -25 -17 14 14 -6 -22 5 28 -1 -46 28 18 58 -5 -11 -36 -29 -26 -7 2 -5 -10 -14 -18 -38 28 -3 47 6 6 -2 24 2 5 -60 -42 2 -14 1 -2 20 -21 -56 20 -28 28 52 61 12 -126 14 63 -117 34 124 27 -47 -125 -85 9 -60 -128 100 -25 -31 80 -3 53 53 -27 67 36 39 127 -77 68 28 103 61 -31 127 23 86 125 -11 -17 -128 -82 11 -101 -13 -69 5 -1 -18 -65 -16 111 -58 -124 -5 122 -79 76 110 48 73 9 -72 117 -128 -38 17 53 -104 -53 -17 23 88 -87 -82 58 -111 42 77 127 -31 80 25 -97 13 51 3 -50 51 46 -38 93 108 61 37 -38 -8 28 8 19 70 35 65 16 33 -2 -60 8 -73 18 61 -23 -103 -27 -3 -14 87 73 60 -74 -16 1 -122 48 42 19 86 118 84 -44 9 34 36 47 73 -6 71 -12 78 -44 -19 -31 -56 -25 21 -15 96 67 -16 -14 104 38 36 20 127 -24 -29 17 -26 -90 28 116 -26 63 17 82 -14 -2 -48 41 -9 74 -47 44 44 45 30 -126 26 5 -78 -54 53 42 -2 -42 60 -9 43 -3 126 31 -38 -43 92 109 -8 -43 28 -72 30 27 -20 -69 11 14 40 -45 -71 -105 -6 0 30 21 22 12 -75 -19 6 18 25 -26 -20 -43 27 -74 -72 93 -27 57 -14 35 -30 53 52 -85 -94 18 -31 -63 44 32 -10 -77 1 -15 -24 -21 -11 -11 -9 1 -38 -34 -13 -7 -22 -80 -6 62 -6 -88 34 -80 -48 40 23 32 -106 1 53 -40 15 8 -6 -16 23 91 1 -13 21 71 2 -36 -124 -3 -69 53 40 50 52 34 52 -42 17 37 -37 -6 15 79 21 2 43 13 -65 -53 27 -50 -76 61 22 37 51 70 20 -4 -1 32 68 -113 54 -32 -26 -1 8 -11 60 -54 -82 3 48 -5 75 -6 89 5 20 -44 53 -9 59 -22 -24 -15 50 -49 -36 -101 40 -20 101 23 12 -31 -2 -10 24 -8 -21 -12 -15 47 22 -5 14 -17 -24 126 35 34 16 15 -53 85 47 64 1 38 -9 89 -17 -36 53 127 -10 -90 0 32 9 21 92 -128 22 5 -30 103 56 21 20 22 -88 -77 2 6 -31 3 52 -7 8 -10 53 -126 119 83 123 -20 -37 -16 -104 14 -18 127 11 -42 -4 -94 3 93 -66 51 -106 -33 47 -75 -45 100 1 31 -4 126 -60 19 -48 18 -2 -68 -9 80 6 -123 -84 38 -2 -51 13 -22 -54 -62 120 39 59 57 47 56 -37 67 -13 9 6 -21 70 -7 -73 -62 39 38 -63 -46 34 56 97 -20 7 -72 -52 -63 39 -80 -73 -63 42 -1 -31 -54 -33 18 -95 -13 -18 -2 -45 42 -83 95 -85 -76 -101 -58 49 -7 29 -18 109 -17 -14 -55 5 46 -4 -78 7 87 -17 -44 33 -111 -72 -31 -29 -29 -5 81 -30 11 -82 87 -23 101 -35 5 -74 -25 47 47 46 -66 40 -48 -26 -87 -27 64 13 -106 -14 -38 -6 -8 -43 -2 7 38 -122 -18 101 -107 -13 -46 1 -34 1 -14 -3 75 -34 -85 -2 26 42 9 40 22 -125 23 49 -28 -4 -125 -45 52 -104 -128 8 -52 -14 -17 42 -10 -33 -13 -34 -26 -8 48 -25 114 127 -57 -86 45 97 -73 -9 87 -5 -27 -125 43 1 -43 -103 -43 45 27 -4 13 28 76 -21 -20 -4 124 3 8 117 -125 -7 -20 5 13 41 10 19 2 -94 -18 -33 -24 -29 -55 6 -58 -26 12 25 8 -71 1 -23 -49 54 100 -74 0 87 51 -8 46 29 53 91 -53 -99 -40 -61 111 22 -2 67 -3 -8 90 54 -28 -22 -51 -33 -24 47 -24 48 -18 34 97 123 -27 -72 22 -50 36 24 41 -17 83 126 93 5 22 69 99 102 58 7 -10 41 27 -11 -29 -83 7 16 -50 71 22 -128 126 -19 107 31 107 97 -73 -39 81 51 -118 -35 123 29 46 65 -75 31 -55 -102 -3 35 -2 11 -100 -37 127 71 97 16 47 8 17 -55 43 -126 -25 87 4 36 -20 55 -124 86 11 -30 104 53 -67 18 -11 -34 -31 1 92 -77 -19 -116 11 61 -126 36 44 23 90 -63 57 50 -18 -94 -39 -20 -103 30 -34 -5 -64 -19 -48 72 55 -36 0 -19 35 -16 19 13 24 -127 -48 24 0 43 -5 2 10 41 127 6 29 40 20 30 63 34 -49 18 85 -5 28 90 -9 -51 -1 -55 -45 -85 4 19 -1 -84 83 -23 64 -29 -50 16 62 -37 -14 14 31 -88 15 24 -32 -36 -44 55 9 2 -30 55 -36 -90 -28 -30 -12 13 -99 29 -51 -56 -28 -23 -52 8 -38 -18 -55 52 79 15 -45 50 -65 -59 -35 -16 -125 -22 45 42 -29 46 61 21 -82 -5 -13 9 -53 23 -25 8 -22 48 -25 -51 -7 39 -34 61 69 -19 32 44 41 -22 -2 70 -3 -76 -24 -88 -27 -93 -46 -17 -33 41 -15 -59 -87 -31 30 49 41 -33 41 53 -62 -12 119 56 -38 16 1 56 80 8 104 -15 -10 -44 35 13 -8 -8 -48 -85 -5 76 -22 -110 31 44 77 18 -2 57 1 110 25 41 7 83 -17 -33 -74 75 -54 -51 116 99 15 11 -60 -7 7 31 24 26 -5 40 46 17 5 10 73 9 3 -49 102 -2 -107 54 -54 -52 -70 -91 86 -77 -38 76 -41 -15 -7 8 -16 -92 -26 -27 60 -11 24 -69 -69 92 87 21 106 65 47 8 -7 -22 45 48 35 -49 24 -10 30 41 39 23 -3 102 -114 -65 -86 10 -57 -40 -24 3 -18 -36 -12 -13 -35 8 -17 17 48 7 -58 4 16 -17 17 -52 36 22 -53 -28 -62 89 3 36 26 98 -17 125 5 118 64 50 -70 -42 87 29 -125 6 50 1 -9 -21 71 -75 -25 -27 55 -20 -33 -41 0 -73 -101 -1 -71 27 26 -61 42 -92 54 -9 -92 -58 -93 -52 -9 4 -22 -56 -5 94 38 31 0 31 -77 -9 58 -36 22 -5 -10 39 46 -9 3 -94 31 -1 -15 -105 -7 -1 -97 95 38 36 -25 22 -3 56 0 66 -1 69 -93 -18 -91 -44 -39 99 -8 -65 21 12 -77 -53 -26 -33 -63 32 17 101 76 -14 -19 -10 -35 -36 29 36 87 71 76 15 -71 -38 35 -38 33 -49 36 -50 17 54 17 -28 -76 30 -40 -112 0 -62 -28 -5 52 -50 -44 -11 10 8 15 -70 72 -53 -82 -35 -41 13 -95 11 32 22 1 -12 -110 7 -82 -91 17 92 78 105 98 -44 -32 -22 23 -8 -26 63 -81 25 -49 16 -31 82 -87 38 62 -3 -113 -85 -4 -6 36 51 17 -21 21 -92 -6 -14 -82 -38 15 -16 16 -116 36 -78 48 2 94 43 -75 46 70 -32 -25 -116 10 21 28 21 126 20 52 -46 15 127 64 7 105 69 -28 8 46 -103 -6 -40 49 54 39 -37 -33 -97 -43 60 127 -2 -47 14 15 2 -53 49 28 -29 -27 43 -49 -14 54 -36 -3 58 -45 -28 -37 20 42 -61 -1 -18 43 -60 -69 -32 74 65 -21 87 84 45 30 29 -53 -6 -122 30 17 -56 14 37 58 -1 29 -56 26 -15 -29 -27 39 80 -37 26 13 42 13 50 -24 -22 -6 -13 -3 -42 -20 -43 16 55 28 4 24 -14 -17 -38 -78 63 -50 -33 -55 -49 -2 -91 -57 41 -15 -57 -64 -81 -15 2 -2 73 45 -101 -34 72 2 -2 -1 -102 -13 -36 -2 34 21 1 -13 65 1 -50 -11 3 -54 -17 48 -87 -120 -8 -61 -48 5 126 41 3 13 -80 91 -19 -61 67 16 8 7 3 -28 27 -98 -63 -9 -64 -9 -13 13 19 24 57 9 62 29 -34 57 91 -26 -46 8 -37 3 12 9 17 -14 -13 26 -8 2 -60 126 109 -46 -86 40 -24 -31 -14 -59 -20 38 21 8 39 -99 -40 11 -40 66 40 40 -102 50 -21 -8 -42 16 -66 65 -18 64 5 26 -88 14 2 4 -80 -28 -92 -83 -21 47 -52 -27 -46 73 -4 40 -17 -50 -62 -81 -54 -15 -105 -14 -34 46 -10 -125 -99 -25 27 -32 -53 115 21 10 60 48 35 5 -22 61 40 87 -48 -125 -71 56 8 97 -17 -51 -68 1 -12 -2 37 41 -70 46 48 97 17 10 24 23 21 -125 41 -52 23 -61 -91 -11 -101 103 18 1 -44 -90 49 -49 -43 -26 47 -2 81 -17 -38 75 -104 77 -14 -3 -46 -58 -18 68 -5 -97 -21 112 -92 -57 92 80 -40 -75 83 -87 -45 -34 -23 4 -70 -128 -82 121 -51 -58 -82 89 36 -102 -35 -23 -59 15 -120 -36 -47 -20 -115 -70 -83 -96 -46 -45 18 111 2 -43 41 -68 -25 24 -65 -46 -16 77 -35 -109 -38 5 -12 -52 -127 32 -66 89 57 86 -21 5 60 8 -65 -84 4 8 -32 46 -19 9 119 -25 -13 -56 -94 -39 -28 89 9 -9 -27 119 -39 55 -64 -28 -36 -60 -69 -100 2 -17 -32 -94 -9 0 -58 -74 -63 3 -67 -11 52 -67 61 21 -2 -90 110 -72 -127 -56 -62 -7 71 -37 5 -50 -94 -98 50 10 12 6 47 53 -5 -79 -35 -43 -5 47 -64 127 -40 53 100 -10 29 58 44 -35 18 -126 -17 -41 18 -26 -19 122 -16 -45 66 89 -18 81 53 8 35 30 -19 40 41 -15 40 0 -23 -4 -57 -30 -23 25 31 -34 17 69 -59 -128 8 -29 118 -5 -1 56 -25 61 69 67 -62 21 -128 24 -78 60 -105 90 11 106 -126 -13 83 -78 -20 -57 -7 10 42 73 2 113 -30 -72 -112 45 -74 -36 -31 -66 -35 -3 -15 10 37 31 19 -27 5 -28 -46 37 -50 -9 -39 -22 -56 -76 -19 62 -45 53 -65 7 -7 41 -73 106 -1 -51 -15 -22 -60 -10 -44 105 -5 46 24 18 -81 -27 -128 3 -74 -12 13 17 33 -4 6 -7 -18 21 45 40 -20 42 37 -107 54 60 -37 -121 127 -31 -77 8 -42 -16 -54 -6 -66 -14 -15 -74 -19 4 -12 -89 36 -21 18 -1 -39 -17 -43 -49 -101 25 -32 17 -7 -12 4 44 -42 -4 -11 21 50 38 127 55 38 81 1 -37 48 -58 -31 -56 -20 -20 -53 -45 52 -60 -40 -7 -23 52 4 52 -8 46 -86 11 -14 -24 -15 -22 -2 -24 72 48 34 12 -56 -23 -10 74 -12 27 83 -127 -40 -2 9 49 4 23 -13 -37 -58 14 -45 -26 38 -2 107 -81 97 -27 -40 47 26 -49 89 83 75 6 -101 22 -127 -46 46 -95 -11 -84 -46 34 -93 -118 -36 15 -65 16 23 0 126 -12 58 -82 30 11 16 94 20 88 -38 -8 127 72 127 50 -23 -3 -96 35 -37 -31 -48 -72 -79 2 54 42 -94 88 -42 54 -31 96 -101 23 107 -85 -74 94 0 114 -41 1 82 17 22 -29 -18 33 1 -72 -42 1 84 -51 -8 46 28 93 -8 -66 69 25 25 -32 -7 -53 15 65 -36 -24 45 55 -54 -46 -13 -42 12 -98 4 6 -88 -120 -19 -32 -44 -57 71 24 24 -77 -30 -24 -87 16 95 -66 19 -47 -49 43 75 91 10 15 20 -62 85 27 97 126 -97 32 50 -35 -70 -12 -1 -33 -72 79 -23 -54 -126 -28 25 -6 51 -18 13 -18 44 29 -45 -33 37 18 8 -32 -34 -11 -3 -90 -83 -39 -80 74 25 -89 32 -39 -75 -69 -24 18 -29 -61 -15 -2 -47 7 20 -11 13 34 19 -8 14 12 56 30 -56 58 5 -15 -73 -27 -5 -94 16 -23 7 3 21 38 55 -10 9 -40 -38 34 23 41 -4 -15 -51 25 -13 -21 68 -40 0 21 -36 77 -78 -20 64 15 -78 -68 50 55 90 -33 -35 -24 30 40 -38 -58 -40 -14 8 -20 -50 68 47 11 -47 51 3 45 -29 -53 43 27 69 -47 127 8 -10 -18 22 22 102 -10 63 -84 -21 9 -12 -52 -25 -24 -5 -4 54 74 -33 15 -1 -23 -29 -17 62 7 66 26 -43 -40 -12 69 24 4 26 -37 -27 20 -44 -18 -20 -44 -100 -38 -50 -21 -15 8 -23 85 -7 46 -3 -10 -8 -38 -9 -22 -19 -6 -49 59 -44 -42 -25 3 1 -34 -8 -46 59 -31 52 -46 -21 27 42 -14 -44 -25 14 76 33 -52 -18 15 60 0 51 10 60 -7 -2 -25 10 -24 -80 32 -12 31 45 -27 16 48 -66 57 26 -78 -75 12 49 14 33 -18 -42 74 21 80 -22 82 28 17 43 -29 -70 32 42 -62 -19 1 -114 60 119 50 -28 -15 -62 66 -23 -78 -39 -37 -60 60 -25 72 -22 21 -44 116 -15 32 25 -21 4 101 1 -24 -46 33 32 65 -62 -21 58 -71 70 -65 19 -15 59 -40 -2 11 45 -128 -96 -72 6 30 -40 112 69 -119 69 -127 0 8 119 50 3 -42 39 85 -8 73 39 -59 -94 -7 -108 -24 -20 -11 68 -34 15 -83 31 8 -63 -26 -66 16 -120 7 -53 -78 -27 -43 0 103 -61 11 122 127 52 2 109 40 1 -40 -29 79 30 15 4 -20 84 -18 -113 82 82 79 -37 64 -52 62 -17 -38 6 123 60 10 -98 -56 -21 -63 123 -31 30 39 13 10 -12 4 85 -46 121 -51 69 -124 -65 34 -25 -111 15 9 51 92 -43 -26 89 -83 -4 24 -18 -29 -17 38 12 -39 -94 -46 58 -103 9 -116 89 4 -55 10 -9 -51 56 -48 -7 120 -11 -8 87 49 -49 -29 12 -6 -5 106 57 -1 12 56 25 80 -53 13 51 77 -76 57 -48 3 -51 18 -50 -40 -9 -76 92 16 -32 17 -14 -33 65 14 -75 -73 -13 -125 -50 62 39 6 -31 126 18 101 46 -22 20 44 -6 -102 -6 -48 102 -98 51 -108 -23 -4 -74 -16 -70 -46 124 -110 78 -43 63 18 120 29 -12 110 36 88 -48 -123 -72 26 -68 -8 -53 -20 -93 -32 -13 61 -84 20 16 -3 56 60 -92 121 -117 69 1 32 64 -60 -121 -126 123 80 56 22 64 -16 -35 21 -38 108 -50 -44 108 -98 6 -43 -58 -91 -32 2 -49 17 68 54 -49 17 -88 42 36 -20 -7 -90 -82 -100 60 69 -58 28 -38 124 24 55 2 -28 39 -3 16 99 -10 16 57 16 41 -53 84 100 -44 -91 58 -15 -11 -45 35 12 -115 -33 -54 -66 21 -109 50 72 127 58 47 20 -29 -2 -60 86 -22 78 -30 37 43 -52 -76 -3 19 52 12 -18 6 -17 -102 11 36 4 60 -12 17 43 -39 -59 -43 4 -48 -21 -8 -7 9 -3 65 124 85 6 104 97 29 35 0 -13 -92 -53 59 -112 -99 71 28 46 28 102 6 -79 110 -1 15 23 -22 -12 20 -93 80 -10 96 48 40 -7 57 6 117 6 30 4 115 9 23 46 69 9 39 -43 -22 4 2 17 40 -20 68 -25 19 93 53 45 4 -5 -73 -44 98 -13 50 104 9 -35 47 -43 -31 70 37 22 -14 -16 -4 69 -9 28 -38 -47 19 15 -11 20 -5 -15 78 9 106 -25 99 24 -60 -58 -26 3 -53 48 -52 8 -9 -28 -26 41 -61 35 40 59 -88 64 -44 -3 22 33 -55 -17 18 -33 -71 -22 -12 -1 26 -105 22 -27 -41 31 -86 -112 -33 8 -43 6 -26 56 52 -20 7 -34 -95 42 -33 -35 -37 -89 -62 49 -66 19 -72 -40 14 -43 41 -46 48 15 0 -61 -113 79 10 56 75 -15 -22 -40 13 6 -58 -74 23 -60 -22 -3 8 -94 -21 41 -66 50 35 -19 -41 -123 -120 -26 -56 75 -41 -37 -124 -75 -37 -85 -66 -48 -46 -101 19 -69 29 -96 -31 99 8 -26 7 -47 63 -1 -8 -5 41 18 57 0 -22 34 -78 36 -66 5 -53 -14 -23 -123 -42 -126 -48 15 -19 84 7 -36 8 12 56 37 -31 25 98 -5 -37 -29 -4 -49 117 -43 -59 14 4 81 26 -31 -37 -120 -71 50 -88 -128 81 0 -15 10 123 1 -13 57 -19 -14 48 84 -23 2 -40 -35 95 -36 -10 23 41 17 -23 -121 15 -10 -16 10 -61 21 -87 13 127 -95 24 17 46 101 -14 -77 43 127 39 -32 4 57 -73 -75 -6 13 104 11 4 -114 -28 63 72 33 27 -10 -63 99 -14 -45 -91 23 24 25 77 -79 -42 -28 121 57 60 107 -3 -66 11 -36 -88 37 15 -9 -58 -86 -13 43 -36 18 15 -1 -86 61 -107 -87 88 43 28 10 9 88 4 69 43 -26 115 41 -9 -5 65 10 102 42 -22 -100 -68 -57 -28 -113 -34 13 -36 123 0 66 4 -98 52 -84 -5 54 58 -12 41 44 -33 116 -58 25 -127 6 13 -124 -49 54 -68 24 30 -111 -48 -12 -86 -35 -44 -44 -68 -31 23 -3 -63 -1 29 32 76 84 90 41 -32 14 -103 17 53 -28 -10 98 18 27 20 -26 21 -73 31 -42 58 95 -18 -7 -46 120 6 86 2 2 -26 2 -22 -53 -13 112 40 -66 109 31 13 108 -117 77 74 -52 13 73 98 91 -7 -121 -50 39 -66 41 121 94 73 -71 -88 126 -20 91 -13 26 23 80 12 51 90 87 -55 -38 68 12 -54 47 110 28 63 -98 36 -2 23 -21 -26 -72 44 -28 -126 -43 6 89 -5 70 -30 -15 -53 -125 50 -34 -10 85 77 26 -39 39 9 36 -31 23 -57 102 2 78 -43 -45 -20 -2 -3 34 -17 5 -9 19 84 42 69 118 125 -29 -52 61 3 -16 12 68 21 -5 96 6 -12 -35 115 -16 108 -42 -49 83 23 -91 -63 -93 88 -19 90 -94 22 47 102 91 42 94 35 -28 113 52 -27 -52 -22 19 33 24 -27 39 51 -61 -45 23 69 -13 -47 -32 -12 8 45 -6 13 16 78 -9 52 -63 39 -44 15 -26 -22 81 -39 -17 27 49 4 98 27 20 -3 36 22 -30 18 40 -10 119 6 63 -2 117 35 121 105 30 -40 -15 -76 2 10 -39 29 86 -114 20 -21 31 34 -7 89 -115 -74 -44 -1 -66 54 -100 0 37 34 -58 -23 -121 -23 -41 60 17 46 -25 -17 124 10 13 79 81 12 40 50 -108 123 20 -81 -125 32 -11 -32 6 -20 -26 80 -61 6 -82 15 13 3 57 90 103 5 20 -14 22 96 -42 36 -128 -16 18 -108 76 44 85 20 -37 2 -68 36 56 44 61 -67 -19 -1 125 -9 122 -49 -78 21 -5 116 -15 2 -79 20 -35 -60 24 -122 -98 -123 -118 -93 -127 29 -5 -96 -60 -21 -105 -76 -29 -3 -37 50 -56 -124 21 -38 20 -67 28 -27 -41 -67 20 -10 -41 88 14 36 -25 34 -67 -36 83 53 55 -37 -44 -24 -69 86 -32 -126 -18 -57 41 56 -104 -35 -29 -107 -125 -99 -45 -103 -25 23 -64 -123 36 13 66 -91 -33 -62 14 -75 21 -49 -13 -88 30 8 20 34 7 -27 96 -30 47 15 -29 14 -30 55 56 -8 0 16 49 -40 -101 13 39 -29 -56 48 14 35 -65 10 32 5 70 9 -36 8 9 16 60 27 -56 28 -57 -53 3 43 54 61 90 52 -28 23 -16 -38 25 55 20 -82 -40 124 117 84 20 56 30 31 -53 -35 2 -30 24 18 11 -18 -9 11 30 34 -38 17 0 40 -47 -79 54 30 20 -60 45 -37 65 -16 -43 -56 -38 -53 -87 72 -1 23 31 10 -17 20 15 13 59 36 -1 39 76 17 5 -18 -40 -24 6 29 4 -24 74 5 11 62 -65 -87 -53 30 -20 8 -30 -24 74 32 3 46 -54 0 -51 -7 63 74 -34 -11 20 38 -47 19 -13 -28 48 -72 -22 -37 26 -23 0 -36 -1 62 120 -123 19 48 -62 -7 -21 14 -7 -2 90 62 -24 54 -31 32 -46 -42 -17 -1 -87 24 79 -7 0 -50 14 24 -68 20 -44 87 -1 114 106 -27 60 26 6 -30 -21 -41 86 58 -13 21 18 -6 90 28 -91 -43 -91 -67 -6 90 33 45 114 -62 5 -26 -13 -24 -16 -52 -114 51 19 -44 -72 -46 -6 16 -3 -61 -71 120 120 36 81 -54 -19 57 -51 -24 -68 -31 -27 50 -35 -43 7 48 -13 36 12 121 -52 -19 25 1 72 9 45 -14 -64 78 40 118 16 -5 23 -58 -3 -12 -127 27 9 5 -70 80 -47 -57 -1 83 -96 -79 121 -30 38 -12 26 -6 98 14 -2 112 23 104 53 -50 101 -90 4 0 -27 -30 105 -27 4 -120 -16 -1 79 100 22 -95 66 -25 127 40 7 52 -39 -18 53 -119 -4 15 -73 64 23 38 -89 68 -7 26 70 -67 12 66 -18 103 -83 22 -66 13 9 -42 -11 -4 -1 36 71 1 -53 -4 3 119 63 -37 26 -36 66 16 -31 64 49 26 11 25 24 -42 -17 -17 56 28 -113 -7 -105 26 16 -33 38 -47 -23 23 -58 43 23 -55 83 35 45 -27 -7 127 18 -32 -67 -1 -24 -65 -11 29 -2 32 52 70 43 50 -15 82 -20 15 45 21 26 -61 -9 94 75 -47 9 -76 65 -11 -56 -24 -2 -1 -107 39 -106 27 -28 63 11 41 -48 -84 -76 102 -51 -127 16 -30 -3 65 32 58 50 21 25 33 -24 51 -14 102 16 7 -102 -5 -43 50 29 29 27 -41 54 63 -3 -10 -21 -34 24 33 94 -57 123 -8 7 -70 82 -6 9 -128 -128 -8 102 63 84 108 -73 37 96 123 12 35 -10 54 67 13 -98 -19 -58 38 40 72 126 97 -31 -66 37 37 74 64 70 6 -52 4 33 -45 104 0 44 84 -32 19 -10 44 81 -52 -83 66 -93 -46 127 116 9 -8 -12 -51 -63 3 57 52 39 41 -79 112 1 23 115 -32 -36 84 80 89 -52 -14 118 46 -2 125 -66 52 -82 45 -37 5 10 -38 108 -48 -71 -20 43 -27 31 80 118 46 20 89 61 44 -78 -49 110 -21 4 5 52 -53 51 29 12 -8 41 40 0 51 27 17 69 0 -44 8 16 -22 60 -20 -46 10 17 -63 -104 -41 -27 -84 84 17 75 26 -100 6 10 114 28 62 -14 -35 15 -53 16 -24 19 16 103 107 -16 -91 -79 -8 28 25 58 -6 -62 16 48 91 -29 -33 -70 24 22 16 5 124 22 -126 21 5 57 14 34 -1 42 -116 -41 -49 42 -22 -59 35 -42 -87 -87 73 109 -41 60 108 -5 1 -64 -106 -66 -46 -96 13 -103 103 -84 -92 -94 31 -9 -57 -31 -22 107 120 -4 -13 30 69 107 45 -19 -98 85 34 -116 -128 -104 51 47 -104 -37 -55 -38 126 12 -23 83 3 18 108 -33 25 52 43 12 31 59 66 32 58 123 -9 -3 3 -103 58 104 24 -52 46 -101 22 -11 27 -26 -41 -31 39 16 -4 12 47 57 111 -21 -52 44 43 -80 -98 42 -30 -34 116 -63 12 -63 41 15 -110 -76 -20 98 -81 -21 42 30 0 118 113 -7 -64 -128 -125 -18 -12 -61 84 -90 -56 -3 -70 76 -125 34 126 -100 -68 -24 -24 -124 -64 77 -13 -11 56 94 36 -117 -1 17 57 -53 -102 -48 64 43 34 -99 75 10 -46 -49 -15 -51 113 90 65 -33 -122 -17 63 112 86 -5 -58 71 -68 81 78 -54 35 -85 -59 6 25 -19 -40 57 96 119 33 -124 11 37 -8 -20 86 26 58 -122 27 42 -31 6 121 -12 -7 -53 -105 -59 14 -20 30 120 -5 82 29 -79 66 11 80 -45 43 27 -43 23 55 26 -18 -30 -39 42 73 27 58 -8 28 33 38 86 56 68 119 47 -52 37 40 -80 41 99 -38 -51 109 -109 -47 9 -85 86 3 -57 42 -4 62 37 -7 109 -14 43 -12 36 9 10 81 -1 56 -67 13 -51 105 33 -57 18 33 13 -30 14 39 72 58 73 20 71 -45 66 58 58 21 -47 83 -87 17 70 20 37 51 -62 41 14 -62 -18 -52 35 3 -71 -11 37 -70 -75 53 16 -127 65 -23 -30 -43 -51 -83 49 14 -48 26 101 119 81 1 -14 -20 93 11 -31 -31 -28 -50 -39 -8 50 -25 -59 6 -22 59 10 -33 0 -4 -124 3 -16 -27 -127 31 37 53 -76 -33 -51 38 -30 60 -2 54 -2 40 -83 25 8 -43 -6 62 -71 49 -10 -9 -24 -13 -7 -25 -3 122 -76 14 -24 17 43 20 2 -82 47 108 -12 -1 63 -74 -79 4 12 -96 -12 -86 65 65 55 -3 -36 -65 -80 -5 26 -40 43 112 -78 10 41 82 60 -21 62 15 -51 -11 96 -18 45 -84 76 -69 -83 -34 34 38 -21 -86 35 5 4 -20 42 -18 -102 -18 -26 -77 33 -4 38 64 -16 41 51 30 -65 46 27 -55 -27 -6 -44 -79 -24 41 115 29 -56 -36 -55 -13 -31 -49 73 -6 -48 52 34 -47 -32 8 4 38 3 -36 82 -8 -96 71 -13 60 49 -73 -27 -35 -117 -29 -98 45 101 -59 -1 -56 -7 23 -57 87 8 -15 -71 75 34 -25 -31 -70 27 25 31 -55 -30 -70 -36 -16 -51 -81 29 80 24 -11 -14 31 -5 -57 -39 31 93 -41 80 12 35 85 -10 -37 -51 13 -40 -40 -4 -79 9 -57 -29 -57 -87 -12 20 -62 16 -19 24 15 -14 6 -31 78 6 -5 -40 -48 -103 5 21 -74 6 40 -95 12 21 7 -55 -70 -2 -10 47 35 48 -27 -30 -61 34 98 6 73 -58 -70 37 68 46 97 -31 -3 -41 -71 41 -105 -68 -85 19 -12 42 118 119 0 11 -55 -39 -5 -18 16 48 13 -30 50 -18 53 -23 -10 -25 90 -30 -18 14 -11 15 23 -3 46 8 -39 104 -32 -75 -48 47 10 41 31 47 -76 -28 -96 -12 8 -2 -13 -81 56 3 -21 3 5 14 -46 38 29 39 -26 -51 -11 90 99 23 -41 47 13 48 -49 9 -67 -24 0 61 39 -102 41 -1 -59 -25 -65 -62 75 74 4 19 -22 -8 -128 -63 -76 -79 -9 67 26 11 -74 68 -4 82 56 -105 -34 -83 2 9 -47 33 -26 -52 70 -16 44 -114 54 127 97 29 64 94 -18 118 19 -17 16 -71 25 10 11 -83 126 -57 61 -25 -116 -127 16 -43 -49 -25 41 8 79 37 49 64 -122 40 -90 -22 -127 -53 -4 22 -57 -72 -49 23 75 26 7 15 -15 -60 26 103 -40 -3 116 9 10 39 6 3 -57 -44 -56 44 -17 -32 -91 -1 50 47 -36 -34 -38 -96 -61 -127 -68 -4 -11 -94 100 54 69 58 92 3 -41 -110 -70 7 30 -13 42 2 -119 -1 50 7 14 100 30 -100 8 55 118 -21 1 -5 17 -70 118 -43 4 -69 8 -26 45 -11 -29 -60 -92 -128 -44 116 69 -39 -11 9 -1 96 -17 -58 -49 -34 -15 24 51 1 -98 0 43 26 -44 -11 19 -41 -75 -23 28 -4 55 -37 -23 77 -56 -57 98 36 -35 17 -52 -5 117 78 36 -12 -39 -1 75 -65 -53 -10 48 13 66 86 122 57 31 -45 -52 38 -38 -22 -128 -34 -89 -16 45 68 6 26 72 30 2 105 -27 21 -17 -77 65 10 40 55 -3 42 11 15 4 -13 -5 82 43 50 -41 -32 20 -25 -30 4 -38 62 4 29 99 -83 83 -65 -121 28 43 -65 24 26 27 12 37 -66 -42 36 -84 -38 63 -95 -24 91 -50 -126 -91 -88 -77 -86 18 -112 48 -12 -21 61 78 -3 17 -39 -26 -88 70 29 33 -8 75 -53 12 -32 -80 -36 0 16 -114 -91 6 28 12 -8 -46 -76 34 27 -71 18 10 -25 -124 -24 -72 125 30 39 69 -69 20 108 -95 5 -10 103 -13 -31 97 -109 -46 33 46 45 0 -29 -117 -106 -27 71 30 -48 -115 5 18 25 -77 -123 -2 18 40 -26 4 -61 -13 -26 -92 89 -40 -101 -48 -14 -78 -127 -65 91 127 -8 -127 31 83 -68 -73 10 -82 50 -111 -29 -71 20 -31 112 55 -41 49 3 -70 -25 -56 -34 -72 -3 -7 24 -22 -66 -16 -45 -38 -1 -18 -45 29 -41 -30 60 74 -126 94 38 -46 62 -25 -108 -27 86 40 27 -14 -1 -17 -65 6 -43 74 37 -5 8 -75 23 -80 -14 -39 -28 5 60 -34 -47 23 -16 -4 28 25 -32 -28 -17 19 8 -44 48 -30 -40 49 -1 29 -76 -17 -31 -2 13 15 5 118 28 83 80 29 105 -43 31 -4 48 68 59 35 58 10 -77 -128 -21 28 4 -55 -107 -3 47 42 -43 -43 33 127 35 -14 92 60 122 -57 16 -97 127 -7 -77 26 -5 -17 39 -3 -1 -100 14 -50 -13 -79 4 -14 -67 -22 42 6 52 -24 -24 -3 -47 -7 116 -52 -2 -106 58 125 6 -41 -20 -67 21 50 -94 -111 -57 23 -48 -72 -21 1 -117 -21 -27 9 75 -125 -54 33 -6 -5 0 -35 3 -27 -6 62 -16 -5 -39 -33 -3 -41 45 -13 -84 -20 9 10 -39 -42 -43 31 -30 -59 92 -51 -49 -17 103 -22 -69 9 -57 -12 -32 -19 73 -37 -126 47 19 -15 71 -53 43 25 -17 -61 18 -11 -16 45 -61 -42 -55 25 18 -57 118 -80 -12 -2 42 -45 17 -23 73 -50 46 47 -43 -21 10 -63 30 -69 -33 -64 -93 -24 -19 55 -27 -123 1 65 -2 27 -87 97 37 -97 -7 3 -114 -22 -51 -16 50 -17 5 -95 30 -68 14 35 -45 -47 -8 -23 -36 -68 -98 58 47 55 -7 38 59 -46 66 -15 25 -47 -11 -12 -58 -12 87 11 63 -20 -38 -51 5 -6 -89 -2 -44 -44 -3 -29 88 -18 -11 -60 -41 -123 4 8 -4 -8 -56 -64 -28 18 -87 4 2 -43 55 50 127 14 62 70 -4 -14 65 -24 -15 56 -17 -79 -36 80 -6 -18 59 -11 7 106 85 -20 108 -71 -33 -64 44 124 19 -63 -99 -51 -13 116 103 127 38 -24 -36 41 -2 86 94 -59 -72 26 -12 1 -10 -111 56 -13 127 -50 -96 38 -15 71 -120 55 -18 127 -55 -72 38 126 92 -12 38 -128 -13 15 -1 -78 -56 -76 -127 83 57 -47 -49 -69 24 -101 -87 -58 26 96 -68 13 -47 -14 23 -65 60 -44 26 -15 -54 -29 67 111 -65 19 -127 48 -1 -118 46 -20 -35 59 -37 -107 -23 -116 -68 -28 -115 18 -127 26 99 -9 11 -108 -90 -125 -128 -73 -5 4 -45 -72 67 22 -27 -122 -72 -123 -78 -118 62 116 107 53 -19 -118 -126 -127 -41 59 -72 63 -99 31 -126 18 19 -19 -112 91 -85 -28 -5 -59 31 -60 -125 -118 -8 -47 -74 -52 -98 -86 20 -40 -37 -18 -62 -10 -127 31 -33 -114 15 -92 31 127 -40 -32 -18 -54 127 -42 -36 -30 -22 -38 -108 15 -30 -59 -16 -3 104 -29 -88 11 -15 6 26 -65 30 58 -77 22 -12 63 -32 -59 -100 -38 -79 -70 -13 16 0 2 66 14 -51 61 -12 5 -50 7 -43 81 33 99 26 19 127 -36 -10 113 26 29 -62 0 -107 -65 52 -90 127 16 49 15 -22 62 12 50 -7 -65 18 -63 12 -85 16 -39 -20 -31 -63 -55 -90 -10 -96 -4 20 -38 -65 -122 -14 -3 0 125 -21 17 7 95 -10 -8 10 1 -49 11 -57 -2 21 122 81 46 9 -98 26 -35 18 9 -95 124 -70 30 7 -17 19 42 15 9 -128 -124 39 -112 58 2 -87 14 -123 -44 -128 3 8 85 97 -14 84 -12 80 -60 -17 17 -60 39 127 111 127 23 -16 -106 -16 18 -84 -61 -29 35 9 12 47 103 -40 -126 -14 86 -24 -108 100 21 -67 76 25 96 12 -128 125 -9 70 -68 -35 -63 -45 -7 -124 -97 -100 112 101 123 30 -45 -109 45 -114 -5 -44 33 13 20 -13 19 116 -26 16 -27 -60 -109 -38 59 -63 95 73 -20 -4 99 52 82 126 31 -59 54 -1 -16 59 12 28 -93 -5 5 -5 -121 -63 -47 -82 -72 -38 22 -72 29 121 -64 6 16 -24 66 -66 11 8 57 -110 67 -28 15 19 124 89 110 31 -38 44 123 124 58 61 10 -35 87 -98 55 36 60 49 91 23 66 -24 -51 35 127 32 -22 47 4 -24 23 113 127 58 83 -73 -37 -29 121 54 27 46 78 -78 86 107 18 -44 84 50 -30 51 -32 -21 71 -108 18 39 98 -4 -23 -55 -39 44 60 13 38 -109 -81 98 -116 -89 38 36 -81 -10 33 -47 26 -12 4 35 56 35 -42 -18 -51 -29 -17 11 -56 99 -48 62 -54 30 -98 52 35 -44 -95 -8 107 47 -24 37 34 -35 45 -64 -13 -95 25 48 -28 47 90 16 -34 -24 65 -32 25 88 -19 40 93 12 63 -21 12 84 83 32 103 -56 62 29 125 -3 -55 70 -5 37 22 -36 27 -17 -110 19 -87 -78 -102 55 13 -67 -14 103 -83 -57 9 -4 21 9 -116 49 84 -10 124 -7 -12 10 26 55 -31 -85 -53 0 127 75 127 127 31 -92 -51 51 -83 22 -67 5 69 -13 19 65 35 -40 -42 59 13 127 -30 21 37 -7 41 5 10 -24 19 63 45 25 -79 82 -22 -60 13 -57 8 -114 -15 56 10 30 43 -4 44 -51 -83 -54 -17 48 -10 6 -15 127 -49 -24 -45 -43 63 -49 49 24 -48 44 83 88 -11 43 -40 44 20 90 41 7 52 -101 49 121 49 -14 -79 75 17 -7 8 77 14 40 110 -38 51 29 67 -23 -32 -30 -5 101 111 -9 -29 -16 -39 -48 -58 14 14 25 -64 113 -68 -36 -57 25 -31 65 -53 29 22 23 -10 -59 -2 59 -64 108 10 -1 111 40 121 76 87 104 -77 83 90 124 -107 -63 17 38 15 97 125 105 -63 65 27 -8 37 28 -1 -80 51 -37 119 3 -62 4 61 -12 -58 -7 -105 56 -74 -9 59 -77 -6 2 110 -34 -116 31 20 11 -39 -91 -2 -55 24 -48 -21 -21 -22 77 -125 31 14 101 47 32 -20 20 39 43 -61 -35 -126 -29 55 -33 21 1 -9 32 -28 -43 18 87 -21 -77 -10 -66 -29 -68 -77 -2 76 -57 5 -21 -65 58 8 -40 26 -16 -3 19 93 -16 -8 127 -23 0 1 11 -111 -48 102 -22 -101 -18 -33 -19 -1 -13 -56 2 56 26 -10 -75 -35 11 -27 -4 -1 -60 -59 7 -21 -107 -21 -112 9 -82 -43 4 -22 55 57 -33 48 84 -50 41 25 -24 3 -58 17 36 -21 20 -19 21 -50 102 1 -106 -2 -74 34 32 -7 87 45 -35 39 -2 -9 40 -54 -19 39 40 -48 6 -25 -54 65 39 -34 31 -53 -14 -25 -50 -76 -32 -89 -78 -79 29 51 53 -71 38 -21 -91 -59 -39 -52 92 125 -19 -89 60 76 106 52 75 -67 121 22 69 100 -60 -88 80 29 127 76 51 40 -3 32 33 16 121 28 38 101 83 42 82 -4 -65 36 29 -19 33 18 26 32 -31 39 119 103 43 126 0 79 6 -26 -25 34 114 74 23 19 125 53 -16 54 -111 60 63 84 14 6 111 -69 71 32 -56 79 33 120 -13 19 96 104 71 34 -81 11 14 10 46 -40 10 43 4 51 47 63 62 75 79 61 75 -16 -83 61 98 -112 -28 18 47 -24 -5 37 -7 -19 35 73 -47 3 -53 -98 76 49 -74 -75 62 16 -30 124 -54 120 25 117 126 3 16 -55 45 3 -3 -23 -107 25 29 50 -72 36 43 52 -47 -45 26 44 59 98 37 44 44 101 -49 -31 -1 23 37 -16 -48 -14 -23 3 -14 22 17 49 68 56 67 -44 91 22 38 45 38 15 -21 37 4 15 73 50 -32 125 -7 -107 66 -1 32 -15 -12 -33 63 15 -8 5 -2 -65 -41 -126 31 112 63 109 -100 -93 48 -7 126 -7 -2 78 36 -23 36 79 15 82 55 32 -24 -24 124 -50 -83 -76 -26 -39 61 1 -3 -36 -93 -39 -50 -30 38 113 7 3 22 -6 74 36 47 -61 11 47 -68 104 0 -49 -81 75 -48 -109 -21 -100 -79 -12 -116 -17 -40 -41 -25 38 49 8 29 50 22 86 51 -87 3 -126 -128 -12 43 -83 82 127 69 43 -31 72 26 -10 -102 -2 22 31 31 -32 44 69 -31 127 63 -17 106 -36 37 11 74 -69 113 47 18 28 58 124 17 12 -49 2 110 27 9 56 -38 -15 -23 22 42 -17 14 -3 44 79 -8 77 -7 -92 50 37 -8 111 76 52 0 23 68 -21 2 82 12 46 45 -62 48 27 3 53 82 -44 -27 124 -10 46 -11 51 71 46 104 21 42 -31 37 37 105 56 -18 -17 -1 45 -2 53 49 41 124 68 20 8 33 44 40 -1 -9 -42 6 -7 -61 -21 3 24 -36 66 43 16 -15 -36 3 25 -49 -4 -24 29 10 64 30 30 -51 -3 46 -34 -40 -5 -14 7 27 35 -30 1 7 -16 44 33 8 -7 0 -17 -69 -36 3 1 1 8 4 28 45 -4 -31 -38 20 38 -28 44 -1 4 21 1 28 30 75 12 97 -3 -13 -43 -13 -33 7 47 -16 -10 -2 23 0 38 -58 56 -78 -31 48 -7 -8 -1 -10 -44 21 -7 39 99 86 -80 -41 -21 20 -27 59 -28 -63 -7 59 -20 42 -2 60 -3 -6 -75 -66 -10 -57 31 49 -58 26 -34 41 21 -64 4 3 -8 -9 -26 -11 -111 -36 51 -52 -59 53 85 18 -10 24 -13 88 52 -57 -86 3 -4 -59 16 -49 -39 -5 -33 -104 -27 62 11 -20 9 -8 -10 -120 8 -77 51 -63 -28 -3 37 28 22 49 -65 -18 -74 -23 13 17 0 15 127 -35 78 -78 14 -17 -2 -36 -14 45 127 29 37 37 73 14 69 -55 64 40 -96 -19 34 -11 -52 65 8 18 10 4 60 9 26 -99 63 51 -98 8 57 -89 -20 -71 -47 63 -5 -45 120 -17 -63 20 127 -62 -46 57 -27 -82 76 58 21 -111 8 -90 86 9 -91 20 47 59 -69 -13 58 -30 -15 7 -48 -29 120 118 -8 -31 66 0 -24 44 -119 10 -39 36 66 50 -25 -5 -20 -7 -63 101 123 -86 -58 79 -1 125 -39 94 33 17 65 65 -47 21 -7 -60 -35 -58 3 23 87 -36 59 -50 36 36 68 -7 -76 83 -2 -34 -69 -32 -40 41 5 -29 21 57 -53 -42 -51 -26 15 -82 42 30 -39 1 -5 -12 27 105 -12 -36 -26 15 -8 58 -83 0 47 -50 127 -112 5 -1 35 -111 -5 9 -40 10 43 -37 56 30 39 13 -10 -18 16 59 -37 105 -22 -40 19 -89 10 26 -8 -54 -34 72 -51 -53 68 -12 4 -70 55 40 -41 -41 -19 55 20 50 53 40 -18 24 -20 -61 2 -31 -89 -20 53 33 63 24 -88 100 51 72 49 37 -109 -15 -67 35 3 -18 -42 -93 63 4 2 -65 -12 -80 17 -96 26 21 69 -105 -61 106 -23 1 -74 68 -73 -16 -6 27 66 35 -54 23 3 -89 -71 -59 -71 -11 -17 27 0 -50 4 -18 8 -40 10 32 40 18 -5 53 -42 -45 -91 59 -6 -4 22 1 62 77 -12 24 -6 -125 126 -20 89 -45 67 -13 89 -25 -10 -30 36 108 -97 51 -10 -13 -20 41 -64 32 -28 -66 -2 3 2 -83 -42 -21 -41 -3 -6 -90 65 115 -84 -11 -109 22 -69 -56 34 101 -68 -8 -31 -65 -15 121 104 -87 12 -9 -4 -13 -97 93 3 -40 5 6 37 -59 -9 -126 35 -25 68 -30 92 47 5 -44 -25 -110 -98 46 76 -119 -22 -29 37 44 -35 -21 78 70 40 5 108 -13 55 14 72 -25 99 29 -28 10 11 12 -63 -19 -17 112 41 33 58 10 -37 99 13 -9 -15 12 -10 14 18 -9 -59 70 -92 0 4 27 69 -41 75 48 13 62 39 -49 60 -33 -5 24 13 -21 -49 -8 -70 34 126 25 -9 -29 -19 -39 2 75 -93 -56 34 -26 75 -65 -42 -45 102 -96 23 -14 -16 -41 -80 -66 -91 40 4 20 40 6 30 13 97 -34 -2 -40 8 -43 34 -29 66 -63 -26 4 -16 -66 -59 -44 73 -3 -39 -9 -12 -27 32 -22 -47 -56 -2 13 -26 91 30 -94 -69 -45 100 69 35 34 101 92 -36 59 4 -27 -17 21 -100 122 80 -48 28 127 8 60 37 32 -124 -17 -10 -41 5 -124 33 101 32 22 -7 45 -36 28 -11 -39 108 118 -4 2 52 41 -45 -53 34 -121 -78 18 -81 23 3 -44 -30 -29 -43 -80 69 50 26 -25 21 -5 117 -12 -79 -39 43 -91 -22 0 -44 61 -70 30 63 -63 40 -77 -7 -45 -29 6 -28 -19 -14 18 -32 -43 -51 106 6 -120 6 35 -22 12 -28 -4 -16 -101 -27 -125 -98 -44 -41 31 -61 38 -7 20 -16 -18 47 -6 -33 76 -40 -32 12 -5 -63 41 21 70 15 -12 -67 20 -19 125 -98 81 -47 -59 -39 -1 35 106 28 -9 67 0 1 46 -22 -94 2 17 -14 3 75 96 37 38 -23 82 -106 -37 7 -5 -73 -5 2 56 9 34 -6 -17 41 54 -24 -70 -87 23 -25 -42 -84 -92 -3 -57 12 -43 44 51 -70 -17 -18 -71 -58 42 52 -9 -14 -100 -11 -1 -67 -33 91 99 1 41 -35 -101 -123 2 8 31 125 23 28 35 -55 -5 15 -27 126 -46 16 54 74 50 -18 24 -37 14 -13 -39 -46 9 -54 60 55 -13 -90 -24 27 2 -6 27 -44 -23 5 9 9 -101 -4 44 108 10 55 -52 -10 -68 -8 -126 -61 -12 5 39 -17 -9 -21 26 46 -30 99 -3 78 -6 33 -8 -12 -61 -62 -23 0 -49 17 10 -7 -63 -51 5 -12 -59 22 45 -14 50 -2 -16 22 -35 9 -31 -54 -8 10 7 13 -11 55 1 45 -34 -20 20 43 0 127 39 47 -5 71 36 -18 46 37 47 -27 -68 -11 -2 5 103 53 90 0 39 -9 34 -48 -11 -10 42 59 30 61 39 27 -23 -7 54 -41 -58 -70 -24 -46 -15 -34 -36 0 -4 51 20 -10 40 50 -32 24 19 -37 125 -24 14 -89 -36 5 61 101 -45 32 70 -122 9 39 -4 65 -110 -39 -52 27 38 65 -9 81 -121 6 -83 9 123 38 116 -14 16 -15 14 -120 -13 -13 56 127 -43 57 103 61 18 26 26 -35 127 72 -80 35 -78 -10 -55 -85 116 6 9 -69 -44 -79 -44 -8 -38 67 124 -11 -7 -51 31 105 4 -6 119 49 112 91 62 -75 47 72 76 -68 79 -80 -16 8 77 48 29 -24 -7 30 -61 5 66 -59 30 -14 45 -49 -6 61 -113 -10 -116 -113 57 -2 -74 19 48 -108 -6 70 -112 102 -116 78 37 -30 -69 44 -101 28 31 44 103 -63 2 11 -58 -17 9 -67 -6 -51 22 70 -35 39 66 73 26 -26 96 14 6 57 0 -7 -50 34 53 -49 -47 -61 26 112 6 -38 9 -19 20 -93 97 69 -1 33 -33 -58 -14 64 -76 72 -20 -24 57 1 -123 -126 -45 98 52 -60 65 -10 -115 -61 34 20 12 46 -67 74 97 79 20 12 36 -47 -93 5 -44 38 -15 112 -70 -52 21 2 -18 39 91 18 74 -62 -88 -69 -36 46 -58 -27 -80 -45 70 56 -127 -108 -47 -5 22 2 -32 -90 -8 34 34 -48 -68 -45 36 -4 16 48 124 -37 64 -62 13 -83 -32 72 127 -70 21 21 -4 -99 -93 -38 -123 39 -32 34 63 -83 17 -54 12 29 -34 -2 -21 -67 4 46 11 -38 11 59 -25 48 28 -36 -10 26 -16 -125 -87 -37 18 -26 79 -25 -34 6 -44 65 44 -30 -8 -22 -6 -6 -33 12 40 9 -66 21 27 10 -45 -49 53 -82 -6 -56 -47 -39 -28 -45 -35 -110 -5 57 -10 -19 -125 -69 31 -13 -55 -58 -40 71 11 -83 45 -33 32 -30 -45 -44 -128 101 -6 126 -55 -58 71 66 28 -11 12 -88 -70 4 -26 -61 -53 4 26 20 -70 11 22 -75 -110 6 35 17 50 -83 -7 -44 -35 -73 -12 41 64 -40 10 -102 -25 37 49 -15 -97 -64 -58 53 -51 -5 120 62 26 22 -28 15 -19 -20 -33 57 51 -7 109 -50 -66 6 -99 40 66 5 56 -113 13 -42 51 -67 38 -32 104 26 36 66 -23 -76 -13 -28 -40 28 5 -57 -18 29 66 -76 -34 -16 48 -71 -27 -2 -43 67 30 23 28 -16 39 31 6 -55 39 25 -83 -4 -12 -55 -51 13 -38 -24 21 -30 20 -57 -22 19 -7 -18 20 24 3 15 -55 59 10 5 -10 58 -49 67 105 -47 8 -5 10 50 -95 -67 -68 -61 -114 16 -58 2 41 39 107 -34 -30 -87 -40 -12 10 18 -9 27 -127 -25 115 -30 -46 38 63 2 6 -85 -50 -17 -13 80 35 -27 18 -47 37 -47 -23 -89 -37 2 -5 -21 -3 -31 -10 -47 -2 -1 69 -97 -31 1 -29 49 -36 -81 35 16 3 -29 -13 -56 62 80 -29 -46 14 -38 -14 -110 51 -56 45 50 7 -79 44 0 19 56 -84 -23 -39 -59 -31 27 -34 -49 -8 111 -9 -16 66 15 -15 -59 -23 -16 13 20 -94 -17 18 -27 32 -78 60 40 53 29 -98 33 96 -52 -89 -46 0 11 11 -52 21 6 -50 19 24 121 -40 -40 -22 -2 56 65 -11 117 78 -7 -88 5 -15 -11 -84 71 12 -40 -43 -28 -127 24 15 -65 15 -42 -73 31 -112 10 -98 -67 -52 -40 34 4 94 15 -44 -49 -4 42 43 121 -21 -8 75 30 29 -7 48 -45 31 35 8 57 63 -64 26 15 33 -68 60 9 -15 -47 -4 77 61 31 68 -13 68 -59 8 46 92 -28 16 90 -1 35 -73 126 -43 39 -56 22 12 -3 -33 -113 -3 22 3 17 -28 -95 48 42 25 -49 15 34 122 123 122 23 38 63 74 48 40 59 20 70 -85 14 84 52 24 -91 -34 18 -34 -41 29 0 -17 37 -37 72 34 23 27 50 90 -2 69 60 -128 20 -82 54 -5 1 -48 -3 1 41 35 -15 -15 78 -33 27 75 -19 23 0 52 74 -19 -7 46 7 24 40 -35 2 -14 -39 108 13 66 49 -19 -80 -13 48 -65 41 -12 -91 -7 -12 -51 -78 57 20 -17 76 -96 -20 37 -17 -60 28 14 -44 -28 -102 7 -113 29 -109 -45 -37 -49 -9 -54 37 -21 7 55 44 1 -52 32 -12 -103 -45 -19 23 40 9 36 80 8 86 50 -48 -20 -24 -20 1 36 -26 35 -55 3 8 -74 5 -37 122 -23 -37 1 75 -47 -1 30 -38 -2 -48 -66 3 17 -23 24 122 -103 -39 -120 -23 40 -3 26 55 -50 -75 -2 118 -47 -24 2 -50 55 -35 -48 -105 75 8 89 32 19 -7 39 -78 40 -7 -26 6 -123 -123 -5 -31 120 21 -76 -16 -77 11 45 -3 16 34 127 36 -34 10 1 -47 -9 -121 -13 -52 84 -17 -15 -70 -35 -124 -67 -8 -78 -22 -118 -80 72 -37 49 -34 3 -124 -75 -59 -54 -58 -78 35 -122 69 -52 27 -39 53 -62 -5 80 -20 -96 -116 49 -31 -126 25 22 54 -18 1 19 -17 -97 -6 53 -80 56 -117 67 -40 32 -50 12 3 -43 11 2 86 38 22 -90 -22 23 -65 87 -9 -40 118 86 -83 -18 -28 -47 44 2 -97 9 14 -68 69 54 99 62 8 65 22 55 66 13 -39 -30 -28 2 127 -13 51 -15 4 -53 -121 78 -45 -43 -56 -29 -17 -11 -41 50 24 43 15 -66 -39 -25 -55 -20 50 86 31 -10 15 -40 -17 47 64 -70 12 14 -22 -15 20 -45 -44 -26 -6 -2 -7 3 39 -25 -90 26 -54 96 33 83 11 -7 -77 24 47 -3 -18 -11 -40 68 1 38 33 -15 61 -17 -91 36 118 -61 3 -64 -75 -37 39 -41 6 -115 22 -56 2 87 -54 -73 -57 23 -51 -88 -84 -48 -62 -52 10 -21 24 2 10 -54 -10 61 -6 -6 -73 126 22 78 -102 -38 -57 68 119 -26 -69 0 55 14 -62 59 -30 -12 -24 -55 36 -13 30 46 -48 102 -71 -12 17 54 -18 39 25 -29 25 87 68 -17 10 -45 -7 86 36 21 108 -69 15 -61 50 13 -5 36 -25 25 25 -37 29 0 -105 74 47 -11 90 42 54 5 -28 -10 4 28 -95 98 40 80 -55 -19 23 -38 58 68 12 12 118 -58 46 -11 24 64 61 44 38 58 -42 58 -4 89 53 31 -19 5 47 58 -10 43 -11 47 56 49 -29 48 -16 16 -6 -27 -1 35 13 -33 27 13 37 -38 31 44 -15 13 -46 4 32 -34 8 -12 22 -24 46 -23 19 -2 22 20 5 -32 -46 2 7 8 3 -26 52 37 33 33 40 22 9 6 -19 -45 4 22 -12 -17 33 31 46 10 33 -6 -25 20 -15 -35 29 30 -1 -11 -52 7 17 -5 15 31 -9 -4 -19 -8 -3 33 22 -3 18 -18 17 -2 15 -3 28 -11 5 24 -15 4 -32 12 -18 8 -1 1 6 -15 -83 -46 -44 28 -2 -7 -87 -14 -14 23 9 22 19 25 -42 22 -24 -23 10 -21 -13 4 -12 8 -14 -51 25 -5 -21 -16 -5 7 -14 39 -37 23 -33 -39 -29 23 -54 13 3 8 -7 7 37 2 56 21 10 -27 14 -19 -4 25 -23 0 -5 -3 29 0 -3 -26 33 0 -40 -15 49 -9 2 2 -30 2 -6 32 -8 -3 6 -16 8 0 15 7 37 -1 20 -5 22 -1 16 -59 -96 22 1 -39 16 10 11 19 15 15 10 7 6 5 4 2 4 -3 -1 13 34 49 44 43 84 -34 -24 -15 -10 -22 -26 -37 -29 -7 7 22 15 9 17 27 29 8 0 -5 7 4 -53 21 25 37 44 38 46 55 63 49 41 46 28 30 37 43 49 46 28 3 3 2 3 10 -11 -12 -8 7 20 17 10 5 13 17 27 38 48 61 67 58 46 36 40 30 28 -23 -23 -20 -16 -7 -7 -13 -22 -25 -33 -45 -46 -56 -67 -78 -101 -123 -124 -107 -112 -99 -58 -61 -28 3 20 29 30 17 -18 -65 -86 -77 -67 -39 -29 -30 -18 -18 -21 -22 -41 -75 -90 26 8 -28 -62 -81 -84 -70 -60 -57 -61 -54 -64 -63 -60 -41 -20 -6 -5 -2 -2 19 21 -14 7 25 37 43 36 28 22 23 18 16 14 20 13 2 -3 -9 -23 -4 4 15 16 1 13 15 5 4 9 5 0 4 18 19 18 20 17 9 11 20 45 73 89 104 68 92 53 31 24 16 10 14 15 22 22 26 19 5 3 4 15 14 6 -22 -16 7 7 7 2 21 30 38 51 70 81 87 94 96 99 102 109 108 110 116 101 62 72 67 22 10 11 8 2 6 11 11 10 12 12 10 14 18 11 2 -35 -80 -128 -128 -128 -77 -7 -17 -34 -46 -27 -33 -41 -41 -40 -48 -53 -61 -62 -58 -57 -51 -41 -36 -37 -32 -35 -37 -24 -10 -11 4 13 10 5 2 -1 7 10 0 14 26 34 42 55 52 67 45 45 59 107 -47 -85 -100 -65 -25 -13 1 1 -5 -7 -10 5 9 14 27 35 35 8 0 12 25 20 17 23 25 21 16 15 18 17 21 25 36 43 50 54 49 45 42 33 24 29 30 -1 -62 -36 -28 7 28 35 40 54 64 62 50 50 43 32 7 -3 -2 3 18 16 24 31 13 10 5 16 26 25 25 27 32 32 38 39 41 35 28 17 15 23 25 6 -6 -46 38 38 43 44 59 85 104 119 111 112 113 115 104 96 92 71 60 58 52 50 48 18 18 27 4 27 42 48 34 47 64 75 71 69 69 85 102 122 125 112 127 127 112 81 -77 -68 -47 -30 -19 -20 -16 -17 -15 -9 -12 -10 -10 -7 -13 -26 -29 -22 -25 -15 -11 -16 12 14 29 39 46 50 47 35 37 52 47 48 48 52 47 15 20 66 83 79 71 69 -19 0 12 10 5 12 11 15 18 17 20 25 22 17 12 3 0 -1 4 15 16 -1 127 105 62 44 39 37 26 19 32 38 27 39 38 40 35 31 17 11 30 59 92 56 1 9 16 14 19 16 18 11 9 3 -2 1 6 10 8 8 16 22 19 17 19 29 39 30 -4 -2 22 30 17 2 9 24 -1 18 24 31 12 2 -5 -4 10 15 11 -12 -58 -75 -81 -92 -62 -47 -44 -32 -24 -21 -19 -17 -8 0 11 18 16 5 -2 0 -16 24 -61 -32 1 4 4 4 13 13 20 15 6 4 -2 -7 -11 -4 -2 -11 -14 -21 -29 -23 -13 -13 5 7 4 10 10 10 15 13 4 10 0 2 3 12 7 -30 -31 -28 -35 -66 -11 -2 22 29 40 46 39 39 46 42 41 52 49 39 39 39 33 31 16 14 11 3 37 32 -9 -18 -30 -43 -42 -40 -41 -42 -34 -40 -42 -36 -33 -39 -30 20 24 -2 -42 -68 14 5 -5 -26 -32 -37 -40 -37 -42 -53 -63 -75 -80 -79 -70 -67 -63 -62 -80 -69 -52 -27 32 20 -2 -30 -39 -24 -20 -27 -31 -18 -19 -12 -17 -23 -33 -26 -14 -3 -3 -8 -4 39 -8 -31 -55 -41 -34 -30 -29 -28 -21 -4 7 7 17 32 30 24 28 52 51 42 29 21 18 -1 -20 -16 -10 -11 -19 -17 -13 -13 -13 -8 -4 2 19 20 -2 -89 -128 -108 -42 -6 127 127 75 25 13 15 9 0 5 17 27 32 35 39 45 47 37 14 29 29 15 -5 -18 -55 -67 -47 -21 -12 -16 -24 -21 -28 -33 -16 -19 -22 -14 -7 -13 2 24 32 32 13 -62 -79 -80 -88 -95 -89 -85 -67 -52 -38 -31 -28 -31 -23 -12 -6 -15 -26 -31 -20 -7 -11 15 -22 -29 -15 -15 -23 -37 -39 -36 -33 -32 -23 -28 -25 -20 -16 -16 -17 -3 7 16 20 87 70 31 -5 -4 -7 -33 -65 -73 -69 -72 -30 -19 -36 -72 -82 -54 -5 10 7 23 5 -18 -9 18 32 42 39 36 35 34 38 37 41 47 51 60 59 57 27 3 13 -8 -126 -64 -35 -17 -32 -42 -31 -31 -20 -30 -39 -37 -43 -42 -43 -48 -63 -62 -58 -65 -46 -24 -44 28 18 18 23 29 33 35 31 21 10 2 2 6 12 15 15 18 -20 -87 -79 -56 -33 30 27 22 29 39 48 63 60 34 17 20 20 21 21 24 31 26 13 1 10 14 23 47 62 72 97 81 73 42 48 85 127 127 127 127 127 118 74 61 43 24 38 31 16 1 -34 -55 -46 -44 -37 -28 -15 -8 -10 -12 -15 -10 -7 -7 -3 1 -3 6 25 47 124 -31 -52 -56 -52 -43 -41 -40 -35 -24 -27 -29 -29 -16 -10 -8 9 33 25 10 2 -19 -115 40 48 44 53 31 17 38 40 33 18 16 21 33 43 40 36 37 24 25 24 25 20 3 24 38 26 16 7 3 6 15 15 20 19 10 -1 1 -1 1 5 9 18 9 16 44 62 46 41 43 58 71 72 68 73 81 86 100 102 87 78 66 60 97 120 127 118 -27 -40 -41 -43 -53 -51 -53 -60 -53 -43 -45 -36 -40 -50 -71 -93 -93 -78 -82 -65 -53 -85 -27 14 52 95 117 115 96 67 36 12 -3 2 12 8 -4 -17 -17 -16 -21 -7 -1 -26 -46 -60 -78 -96 -96 -86 -80 -68 -64 -63 -58 -64 -62 -51 -29 -15 -19 -4 0 -23 -49 -55 -25 -26 -17 -6 -1 0 2 1 -2 4 15 29 36 36 25 20 25 32 30 28 20 -3 3 16 14 16 7 -7 -9 -12 1 8 19 26 26 19 5 -7 -26 -40 -60 -106 -127 -128 4 12 16 21 16 11 15 12 -5 -22 -34 -48 -57 -72 -82 -79 -68 -59 -44 -25 -13 -4 30 15 24 41 49 54 56 56 54 51 40 42 41 35 28 23 21 19 14 15 3 2 -4 -29 -55 -67 -70 -77 -74 -80 -90 -89 -91 -88 -84 -74 -45 -34 -21 -11 12 12 25 27 -54 -36 -46 -45 -39 -38 -48 -59 -56 -41 -25 -7 -5 -1 1 0 -5 0 9 9 -6 -19 3 19 22 15 18 10 13 6 -13 -38 -62 -75 -91 -107 -128 -128 -128 -128 -116 -127 -119 -76 12 26 51 74 81 76 65 62 57 65 68 65 70 64 51 45 46 54 45 39 32 20 -74 -60 -49 -49 -59 -63 -61 -55 -56 -56 -54 -48 -48 -48 -50 -50 -51 -58 -46 -33 -39 -42 22 11 -17 -43 -48 -50 -37 -27 -18 -18 -18 -19 -20 -22 -22 -25 -21 -19 -10 -9 1 7 2 -28 -57 -60 -44 -40 -35 -28 -41 -57 -52 -66 -52 -49 -63 -60 -31 -4 -16 -41 -45 -81 -104 -76 -45 -36 -32 -30 -28 -28 -34 -35 -43 -33 -38 -35 -32 -31 -38 -67 -81 -49 -15 46 8 -8 -20 -15 -2 -5 -11 -7 7 13 9 2 -13 -32 -60 -76 -91 -107 -124 -104 -66 -25 -4 -28 -30 -26 -7 7 5 -13 -40 -64 -89 -81 -65 -56 -40 -31 -28 -21 -10 -11 3 -14 -25 -57 -79 -68 -69 -63 -62 -56 -32 -23 -29 -23 -26 -22 -28 -35 -40 -41 -47 -53 -62 -71 -23 -21 -12 -35 -50 -61 -67 -79 -80 -57 -28 -21 -3 14 25 23 18 -4 -60 -53 -29 -25 -40 -37 -48 -45 -44 -39 -35 -36 -47 -49 -26 -25 -18 -13 3 6 7 14 33 27 31 43 0 -3 7 -3 -7 -3 3 12 16 20 27 27 33 34 43 60 62 -22 -124 -128 -128 -127 -13 -19 -17 -10 -9 -16 -11 -2 3 -1 2 -2 0 3 13 20 19 9 1 -8 -31 -18 -8 -18 0 13 37 51 58 73 72 54 30 16 17 12 4 0 4 8 20 0 -17 -31 48 23 11 10 27 46 55 43 33 33 34 40 39 39 43 47 43 3 -20 12 61 80 59 33 0 -6 -6 -6 -14 -8 10 20 21 30 34 27 19 17 25 41 53 72 82 56 33 36 31 32 54 65 58 60 54 42 41 31 16 1 8 19 27 39 47 45 35 33 110 127 49 36 43 45 44 49 45 53 49 67 59 62 71 74 73 68 62 76 80 90 57 88 98 80 53 26 19 14 12 15 19 18 23 33 36 35 35 37 27 6 3 3 28 34 31 41 41 43 36 27 34 41 26 37 34 33 41 42 42 39 29 30 33 37 -5 38 76 105 107 87 75 66 62 62 55 32 19 -1 -35 -55 -58 -61 -37 -19 -9 -17 -44 -50 -58 -42 -39 -37 -34 -36 -47 -37 -33 -41 -38 -34 -40 -46 -46 -51 -49 -53 -84 -128 -16 -75 -79 -36 -5 -2 -4 -6 -13 -31 -43 -46 -46 -44 -26 -12 -11 -10 10 38 59 71 -77 -82 -101 -119 -128 -128 -128 -128 -125 -113 -106 -88 -89 -88 -82 -77 -74 -64 -44 -32 -13 -13 -15 15 13 0 -21 -31 -34 -41 -47 -44 -40 -40 -48 -52 -50 -53 -59 -66 -68 -79 -97 -42 69 104 90 59 25 13 8 21 13 15 28 22 25 32 27 19 8 3 0 1 1 -16 78 76 -9 -11 3 10 12 1 -13 -11 -16 -23 -28 -30 -36 -40 -40 -48 -56 -63 -60 -25 -65 -51 -43 -33 -31 -25 -24 -22 -13 0 -2 -6 -11 -3 -7 -9 -16 -23 -19 -31 -28 3 44 33 25 32 33 34 35 40 47 49 52 52 46 40 36 35 26 16 30 40 59 57 29 37 29 46 43 38 40 45 45 48 44 33 19 8 4 0 4 13 7 19 3 -38 12 19 19 3 14 27 34 29 21 17 2 1 1 -4 -16 -19 -9 14 14 10 -13 -12 40 42 56 41 27 31 38 35 28 27 18 22 33 36 35 35 32 26 19 20 19 12 -84 -34 -22 -14 -7 -8 -16 -12 -8 -4 2 -1 -5 -6 -4 -17 -34 -53 -40 -18 3 10 10 -19 -66 -66 -57 -64 -83 -93 -91 -98 -108 -101 -104 -107 -112 -120 -104 -36 43 33 -8 -128 30 10 -34 -40 -50 -51 -47 -34 -29 -29 -30 -29 -38 -38 -39 -41 -40 -51 -46 -24 -26 -29 43 38 27 22 17 17 15 17 12 11 15 16 13 12 14 19 22 36 33 24 11 -20 -108 -128 -127 -122 -100 -87 -79 -74 -83 -78 -65 -62 -57 -40 -25 -19 -18 -18 -15 -5 6 -8 --3 22 24 47 33 34 8 3 -7 -8 4 4 18 20 11 -16 -26 -12 -34 -23 -19 -13 -24 1 1 --128 -35 127 127 -99 -128 127 -128 -125 123 -103 127 127 -128 127 -128 -128 -128 93 -114 -128 -128 127 -128 -127 diff --git a/labs/rnnoise-model/general.rnnn b/labs/rnnoise-model/general.rnnn deleted file mode 100644 index bb6c3d41e..000000000 --- a/labs/rnnoise-model/general.rnnn +++ /dev/null @@ -1,22 +0,0 @@ -rnnoise-nu model file version 1 -42 24 0 -15 4 -1 3 -7 4 1 18 25 21 3 8 -62 -1 -10 7 -5 -5 -2 -15 2 -9 5 7 29 19 31 9 -18 -25 27 -30 20 -19 50 -20 -16 -23 -30 -24 -2 16 -3 -21 10 7 35 -3 16 50 -9 -29 -16 -25 -32 -22 -16 -18 49 -25 -45 24 -21 -25 -30 4 -6 -45 29 19 43 24 36 38 -32 16 -18 -21 0 46 36 62 -9 -4 -28 -42 28 -11 -20 -34 12 -11 7 27 -66 30 -75 4 -7 -13 12 11 18 -12 20 -43 55 7 11 23 -21 19 29 -59 -2 -5 -35 63 -83 -1 -21 -11 63 15 -6 23 -32 17 2 37 -4 -26 40 -56 -21 -47 -45 -6 -6 -18 -60 23 -48 -50 -13 -41 -101 -71 9 79 -121 110 72 -44 -125 -28 32 18 45 -77 -30 -114 -93 -104 -74 107 -55 -29 -128 34 -13 -51 17 -7 121 126 55 11 -85 126 127 -128 127 -19 40 -80 46 22 61 52 96 96 -67 -37 -24 -112 6 46 10 -67 -62 63 -35 67 -23 64 44 3 48 -128 -11 0 -7 121 -126 -51 -25 -34 -15 27 -29 35 -77 -47 45 -20 -106 -1 19 -126 13 -17 -11 -127 56 5 -62 42 -127 -75 -71 -15 -116 -103 -24 -9 83 -70 -128 -38 -31 105 36 28 -7 -37 40 -81 -19 -32 -44 85 -62 13 -10 -32 90 -57 102 -77 30 62 -45 -36 -21 -1 55 -128 116 90 8 11 72 36 9 -127 43 -116 -95 0 48 -124 -124 -8 -59 21 -4 -35 74 5 -96 -10 -123 8 42 29 123 -124 -125 40 -18 19 3 -2 63 91 -104 69 -10 114 38 9 62 -40 50 -80 -77 -8 122 127 38 -87 -96 123 50 91 5 6 127 -128 -46 -3 -43 29 -124 71 16 70 32 -63 52 88 22 40 58 16 -120 74 -94 71 125 126 6 -47 -76 -96 79 -11 -38 100 26 98 -36 -127 10 62 3 -101 -31 -121 -98 66 -5 127 26 68 76 -70 -100 -25 76 -37 41 94 -94 92 -79 97 -51 -93 113 -74 -64 -111 -8 124 127 125 -53 40 96 120 27 87 -36 126 127 -44 -42 -128 -15 33 -81 -3 -109 -115 72 -117 -125 127 18 126 -60 12 99 -19 -20 24 -53 -21 6 57 -111 -69 -30 -22 -100 -23 21 27 -44 -126 -122 74 -60 58 73 -24 -57 -20 6 18 -65 -50 113 121 -26 50 72 62 94 -33 52 -128 -116 -36 -38 28 9 85 -50 92 -2 14 -84 9 124 3 -21 -26 120 -77 -1 0 -46 -47 79 82 41 -7 111 93 -46 -125 -51 104 123 -10 -27 -16 47 37 -19 -20 42 127 49 -29 26 -32 59 40 -26 -17 95 -72 -47 100 25 127 -103 57 -55 125 86 112 127 -82 113 19 -11 -112 65 127 -58 -75 -11 65 -128 50 27 -95 93 119 -125 -106 83 97 93 27 97 121 12 8 52 -3 -123 -84 21 77 -15 -37 115 -72 127 -40 33 120 -112 38 30 -60 102 124 -113 -127 110 -36 -72 -54 -127 -128 -126 -76 42 42 17 55 15 -2 92 27 -48 -21 71 67 -99 -40 49 77 -95 36 19 21 -54 103 -37 -113 -14 7 -23 -3 -123 63 123 -53 -28 18 16 -115 115 -122 -97 33 90 52 -28 1 -41 -87 -78 -70 -22 11 34 35 50 53 127 10 120 -31 102 81 -126 66 -103 -40 -76 -10 -10 9 21 65 -29 63 -48 -88 -93 97 42 -17 -14 20 100 98 51 72 95 44 46 -51 50 49 -10 -83 -75 -100 45 -67 26 127 79 -33 -50 -127 -92 -12 13 -57 -76 62 79 -124 19 55 34 -34 -90 -20 -46 -1 -7 45 -8 85 -84 81 83 -90 -128 44 127 54 71 -84 66 11 -45 25 -17 -5 -24 -79 -2 -120 35 -20 27 17 30 71 -21 5 69 114 -26 52 -5 12 -12 110 123 -20 -57 11 -20 29 34 -92 14 -5 -89 -30 -27 104 80 101 11 58 -3 -52 43 52 -8 114 -90 -69 14 32 41 -6 7 12 26 -126 -20 12 -35 97 -101 -123 -22 0 -80 0 -32 -31 12 -64 -2 -28 -10 7 94 -18 -44 -7 -18 23 -31 100 -7 -29 -69 -69 125 127 121 25 -125 -21 124 127 63 -128 99 -58 40 -101 -46 99 -126 -12 127 123 -126 44 98 -69 91 123 56 40 -127 94 107 127 63 -95 121 119 -60 83 35 52 -121 -28 127 127 -121 120 1 -40 -106 -111 -109 29 -3 14 -63 62 -49 37 69 63 -72 -33 14 27 76 -121 -83 125 20 -2 -117 74 85 -54 -42 47 3 27 32 70 -56 -15 95 -81 -46 -38 -61 66 -36 45 -76 88 52 -14 9 82 120 14 -17 -11 -121 -126 -24 48 -22 32 13 17 -67 59 -121 -52 3 77 -88 -25 124 -113 46 86 78 -97 -118 11 107 12 22 8 63 43 -14 -109 24 15 -21 80 4 -75 -76 -18 -5 -103 -19 -95 -13 -34 -23 31 -41 51 -39 1 -26 34 -36 36 75 10 56 -22 16 18 33 -2 11 50 2 -1 62 -19 62 28 -38 92 -40 13 3 8 -24 -5 -51 16 -37 -13 42 14 34 50 -26 11 -20 126 --69 -7 -38 74 127 -1 19 -5 -39 4 27 -127 115 -126 125 3 -29 120 10 94 74 -35 -16 3 -24 24 0 -25 -122 41 -91 6 -9 2 72 -100 -46 -102 -101 31 54 -48 -47 -80 -107 -5 -31 -121 -5 -26 -38 -16 -11 36 -40 -19 89 -25 105 -5 -107 -3 -9 40 28 2 15 -54 -105 2 24 -83 -86 -6 59 1 -63 -2 -28 36 -47 21 29 -28 4 -14 36 25 -30 -27 6 -50 33 -4 -50 3 -69 58 4 -19 -69 -45 2 -41 110 48 -42 -12 -100 15 127 61 64 65 51 -74 24 4 -8 -61 -127 14 -126 -113 -81 -81 31 -18 -11 110 -5 37 -126 -90 -44 26 -57 -45 127 -22 36 0 -103 5 24 62 -117 -18 -126 99 127 34 -44 77 62 -42 12 -101 -103 103 -59 66 -40 9 127 10 -1 -13 74 106 117 104 126 17 -127 88 -126 55 -127 -125 44 119 -9 -68 -122 115 108 123 -79 19 18 -32 -86 13 31 68 -3 11 -16 27 -61 -34 -69 -44 -93 -43 -26 -128 -86 59 -10 96 -36 10 68 -9 48 66 85 69 -5 28 -13 39 30 58 24 49 -9 -65 -42 -40 -21 32 29 -24 66 -14 -69 10 -19 -8 1 -47 -57 5 -106 14 -32 -77 126 -41 -69 16 -44 -43 9 -125 -63 -37 -128 50 -1 113 78 67 -29 98 40 -14 -12 7 -19 -20 43 -85 -33 53 -38 -53 45 -23 9 69 -9 69 -128 42 48 -3 80 85 -116 2 -13 52 33 53 -18 -45 63 -22 -25 49 32 93 -102 -119 125 72 8 57 6 9 3 -6 -98 14 25 5 117 0 12 13 -13 -119 -91 45 58 -58 -10 126 -54 14 95 120 123 6 40 4 -35 125 17 23 48 57 94 2 120 121 51 76 29 -108 -42 -65 -5 62 -20 24 -15 -17 87 3 -24 25 9 8 24 -43 -38 -6 -32 -48 13 -9 -51 5 17 29 39 -34 5 25 86 -32 -54 -19 79 26 127 -9 52 -45 19 -50 -58 -64 -45 -11 42 40 -72 -11 85 23 -55 -103 28 -19 -46 91 87 -54 -125 -38 -11 -19 62 -4 84 18 8 -16 107 40 63 80 -35 -49 -27 19 -59 -28 4 67 -77 55 22 1 -8 -22 11 -74 66 -38 -15 22 52 123 -94 -53 -3 -32 -128 -60 -58 2 105 44 6 -9 -37 -42 -70 -44 -1 -62 29 38 14 78 122 -94 -46 45 -32 52 -35 14 24 37 -47 52 -59 68 21 -18 29 -5 40 -52 -18 27 -49 -33 30 55 106 61 119 74 -70 -24 -8 112 120 101 -79 62 96 85 -60 16 -11 -32 -53 -80 -15 -46 -56 74 -42 -3 49 -64 7 30 42 105 53 -79 34 -29 20 40 -59 -73 42 -19 -118 -10 -10 82 62 79 -84 1 51 37 -34 -46 29 -36 16 -38 58 -83 -36 40 1 -23 29 -6 101 -118 -71 36 10 -41 67 9 44 -49 -95 -15 -12 -100 -18 30 30 28 45 -20 -76 -22 11 -64 13 14 -38 -13 10 73 5 20 20 67 10 88 17 75 28 -24 53 4 -31 -21 -22 -30 74 -35 -93 16 -16 -83 127 -11 -17 7 34 -12 5 -107 2 -4 -40 67 65 -24 -71 -61 25 -12 70 7 23 -36 1 6 5 -8 22 -57 -89 72 -30 -90 -34 -7 -2 6 -83 4 53 3 41 -62 -25 26 17 58 -20 21 0 69 -3 -4 -43 -12 -4 6 8 14 44 115 59 41 124 65 19 107 -43 -29 41 15 -32 32 94 77 -52 -34 94 69 -18 -89 36 -31 8 -16 14 -72 34 33 58 -36 41 67 11 -17 41 13 19 21 22 -75 58 -33 27 -107 25 -67 -40 -6 -25 -22 -49 -23 -60 -32 -65 55 -24 -49 -43 -37 -4 7 -44 -43 10 -2 -17 -36 -25 2 -56 -42 -67 52 -128 24 5 31 68 -3 -88 -8 -10 34 -29 117 56 49 -68 91 111 5 32 14 -124 -56 -36 -93 -73 60 81 -3 21 -40 -31 -96 -107 -45 -8 -1 101 -31 50 37 -103 -25 67 -4 5 -5 -103 -14 69 91 -21 26 11 6 50 -38 32 53 43 126 -88 -71 50 30 -52 49 -80 42 -16 90 127 99 79 -102 -98 24 -63 -33 115 126 86 -46 -19 99 -30 127 123 97 39 -125 -126 27 20 39 41 -46 -53 27 -42 13 -7 11 55 -42 -93 -1 -23 74 36 86 -21 45 -5 -119 -76 8 -15 43 6 -53 10 -30 -19 76 -3 -1 -83 -10 -38 76 -17 -13 20 -38 75 9 -18 32 -81 52 -63 -47 -58 -48 17 -14 37 56 87 5 38 -65 92 34 61 -51 3 -13 -76 10 -13 89 6 -60 -45 70 -37 50 48 20 -62 93 -33 70 6 28 -54 -19 50 -23 14 75 -39 2 -85 59 -5 7 69 -26 12 48 -10 -5 42 -46 -4 62 -15 4 10 27 -64 -27 79 16 35 -11 60 -40 37 -33 5 127 -5 -35 54 -113 95 44 -39 86 45 21 88 45 24 45 83 90 127 105 50 -121 42 62 61 -123 47 34 0 -36 63 119 -43 39 -67 -60 127 110 -1 -17 22 21 25 -64 111 -78 -63 105 -84 -87 16 -61 -10 2 -7 9 8 -27 -36 -32 117 -15 -31 -127 58 127 -55 74 69 -25 10 -17 -82 -128 -69 -54 75 2 34 -48 40 46 -52 -107 0 -83 14 -94 -54 -54 8 -66 -102 79 127 -127 -28 3 -39 -61 25 -23 -24 81 -80 40 73 68 -42 -25 -72 27 34 -10 -88 -85 -89 127 34 -49 -5 -40 60 -13 36 3 -10 24 -5 76 -62 -49 65 28 42 -102 80 -21 -28 -61 60 27 80 12 -19 -126 69 39 11 -55 -80 -20 -13 -51 -80 -61 -6 -22 -15 -61 -26 -54 100 -95 109 44 -30 29 10 -31 44 -71 -127 -36 -94 69 77 -3 116 -60 56 15 68 -16 -21 20 -49 -69 -22 22 -55 -6 16 67 1 -12 5 101 -85 53 37 -19 93 -68 -60 106 51 40 -3 -57 -8 -49 14 33 2 -21 45 -61 -59 -16 -18 -93 34 52 -51 -45 59 -5 -53 -104 -121 -50 57 -42 -66 -31 -39 -27 -36 106 125 48 -14 37 -15 71 -108 47 45 23 -5 -47 43 121 123 54 -118 9 31 48 71 72 -20 6 -83 11 39 27 -124 -43 15 -99 -42 60 -49 75 47 -95 8 -55 32 60 -65 -1 45 -122 18 -21 29 -125 -126 -117 -127 31 118 -50 115 91 125 -125 -125 33 107 -38 -55 -103 -114 -32 -6 125 121 -86 2 41 44 17 35 79 17 93 -58 19 -61 126 -23 -124 -30 41 -8 -77 -67 -19 124 124 -1 62 27 -38 28 -41 1 -31 4 27 41 0 4 -19 82 -67 -125 -19 -32 56 -100 66 58 1 8 39 22 -116 -50 59 -39 85 -127 -128 -19 -113 -111 -119 17 -77 -128 -126 -127 -4 -127 -120 -123 126 -65 -37 -14 -11 52 -7 100 79 -89 13 -127 -99 -40 -93 -60 -27 -127 76 -73 126 42 -128 125 55 85 -42 -125 -19 -19 -19 30 1 -82 51 14 -13 16 -2 17 -91 -11 54 -25 11 74 25 42 -97 -22 23 82 -128 -81 38 126 -34 11 -28 94 29 -93 -128 20 -19 -66 -128 -112 -119 7 -13 -125 126 75 -110 27 -16 -38 29 -28 82 -39 60 3 -24 46 23 -21 74 96 -11 -83 7 -44 -38 -34 31 -17 36 5 66 -78 -31 -27 5 41 60 7 -43 -6 -7 -76 -71 41 11 -30 0 47 -60 0 6 -7 70 51 106 21 39 -70 -85 127 91 73 61 102 46 -52 -88 125 -44 34 121 36 69 5 115 66 6 -55 -23 61 76 32 -11 117 -25 -5 65 78 19 12 -60 -20 -66 -4 -128 23 -6 -13 -3 -19 -10 115 31 24 -16 -37 76 71 6 -57 104 -97 60 17 -49 -99 -29 -42 -103 -8 -18 -36 -36 17 -2 -40 59 18 -75 -32 39 70 -127 41 127 -65 93 56 78 69 -38 -126 -116 67 -2 15 -79 63 52 106 -49 -125 73 124 11 -71 89 -124 -4 -9 31 10 118 -69 -51 35 54 95 23 6 -52 48 8 -102 -32 55 18 19 -67 -30 -46 24 3 39 12 53 3 -20 -9 9 71 -29 20 90 -17 21 -61 -2 58 126 95 -78 -46 17 58 -84 -29 127 86 4 93 0 118 86 -62 62 65 -31 -117 -75 -39 -81 -41 93 -55 -128 -66 65 -69 38 23 6 -48 -8 -65 4 2 -39 -7 31 31 -113 -101 31 -19 30 48 6 43 -6 -25 1 -8 -22 -60 -9 -82 -77 -20 -78 67 -19 38 41 10 -67 11 -20 30 50 -57 -74 74 32 126 39 80 -44 -118 109 65 -63 0 -86 -64 -49 -128 62 9 -63 -118 41 48 127 -17 76 4 -41 -32 56 -49 21 -25 -86 -91 -61 11 -46 87 71 119 55 110 18 -91 72 29 -68 35 74 41 -12 9 54 75 -60 -14 42 15 50 14 11 -20 -87 -2 -1 41 -25 123 -1 -37 -54 -66 64 124 41 -73 -78 53 38 -54 79 106 -53 -24 110 65 98 3 -92 -49 11 -34 80 84 76 -7 -49 47 -3 -9 10 21 33 -56 -15 68 29 9 9 30 -8 35 13 -34 25 34 71 65 118 31 -127 80 -3 86 -45 75 97 -87 21 28 -38 56 35 124 -82 -23 122 39 -84 63 -24 21 -66 -39 -65 -117 -22 62 -42 -49 57 10 -56 -60 17 -8 30 -85 -118 -33 78 -10 -61 29 -33 -121 -84 -23 49 -93 -87 -21 -20 34 -18 44 24 -69 -32 -88 -66 -50 -39 -86 9 -8 -47 -15 -78 -14 1 55 70 15 -42 -7 6 -38 19 -48 -20 -35 44 71 -40 59 -40 -46 -33 -73 26 -14 96 -3 13 80 77 72 43 -94 65 98 -26 -27 63 106 52 56 44 127 112 43 89 12 57 -33 -56 116 -38 5 -73 82 80 -97 42 105 54 -20 50 53 -15 11 -14 -20 7 -128 -23 12 -16 11 87 -13 34 62 -74 46 55 28 -104 8 66 -48 25 -5 -22 42 49 91 9 -13 -15 -70 -52 -16 46 28 -13 -23 -3 -21 -34 -109 5 0 -98 37 -109 127 -3 -60 -110 22 -24 -80 106 -91 -114 44 -20 -93 -6 -17 -63 32 -30 -74 83 53 -91 -64 28 86 -8 -9 -45 -76 11 94 -57 -117 -37 3 -8 120 49 103 -43 58 55 81 -126 46 8 -128 74 -93 -34 98 68 126 -56 -98 59 -78 -15 -73 64 126 -9 80 -2 126 61 -2 17 118 11 -124 124 37 1 48 -31 97 30 74 1 85 -3 72 28 102 9 5 44 127 16 -36 28 -22 -10 7 96 45 69 81 16 -8 -54 -9 -15 -66 118 18 8 47 -1 -115 6 -69 -124 51 29 -63 24 -14 -43 97 77 -25 63 -49 108 41 -44 -14 81 22 -127 -53 -57 -42 -127 32 14 62 21 127 -3 -51 -42 -32 22 59 24 -19 127 -22 29 117 33 -45 -50 -22 -96 -33 68 48 -6 43 14 8 94 -10 -4 27 22 15 23 30 -31 -50 -111 -5 -127 -16 -58 -36 100 -23 73 -128 -62 18 40 12 -61 54 -47 35 112 -103 -91 -115 81 101 3 126 42 37 -18 -69 -41 40 110 57 14 -82 -94 28 -105 -15 34 89 43 -5 -121 126 125 84 126 -105 69 -3 -67 27 3 -27 61 22 103 -22 37 80 -9 -50 -7 13 -12 58 -106 1 28 22 49 -26 1 32 75 51 -27 78 -125 119 57 5 -89 82 38 -17 115 -88 -62 58 19 127 -91 10 115 -16 -16 -36 -19 103 26 70 106 47 -118 -62 -18 -128 78 33 33 -7 -82 -85 -122 124 -94 25 -95 -128 69 102 75 -38 60 -62 -39 27 -127 -60 -48 -127 -40 -38 -78 -31 -29 -43 -104 -6 -31 -27 -65 -7 120 -6 -22 -35 -102 42 -47 90 104 35 -57 75 87 -80 83 -104 -84 47 127 101 -115 -127 80 -127 -87 -28 45 -11 84 -50 -122 -42 41 23 -12 70 42 -41 2 -23 5 -7 31 -126 127 31 29 123 -13 111 59 35 22 28 69 33 117 42 7 72 17 1 49 -24 -67 30 31 6 -53 67 -124 57 -126 34 53 36 -46 -81 118 -19 -61 -27 44 -90 26 69 -59 78 65 -8 -53 -128 82 74 -68 -29 90 57 47 -82 -25 -2 -19 89 19 -44 3 93 -28 -122 127 120 -128 -61 -53 0 -28 -98 -95 17 -86 120 50 26 37 16 36 -84 -36 -47 35 13 5 -66 2 -20 28 69 30 7 -51 67 39 -92 56 60 32 -51 -50 21 -72 110 22 21 -128 -5 63 -66 23 -43 -125 114 58 123 -69 -28 127 24 -66 3 29 52 35 -70 -41 -72 -10 85 14 -103 43 -12 5 -127 -12 6 33 -84 -123 -124 -37 93 -86 -19 -80 -44 -48 47 35 -89 6 62 17 -34 37 -1 -79 -32 -87 -30 45 -15 -12 -28 -30 25 45 13 -73 -9 39 -83 126 -49 -56 -52 51 -94 -126 9 -46 41 92 -50 -74 -63 33 29 -126 115 86 -8 -3 -127 39 6 -127 -70 -78 17 52 -45 70 -10 -25 43 -66 -31 1 -128 24 -57 4 122 -17 35 -30 -107 1 25 29 0 79 91 -15 3 29 8 -60 -34 21 23 -6 -14 -17 47 33 10 -96 91 -35 28 -8 -43 39 -126 -35 -59 0 -6 -27 47 -57 70 37 -49 -59 -107 92 23 -57 -31 -11 44 -19 -27 35 10 0 59 16 -122 -25 3 -117 -17 0 99 17 -26 34 125 -118 22 -16 -71 80 29 -44 -40 -41 1 -12 -50 -13 -29 -62 51 29 -28 6 -28 -4 13 -23 -63 -33 -53 -86 -96 29 -25 -52 -13 44 87 -124 34 9 103 -74 38 71 -106 70 -49 -47 13 28 127 -83 -105 61 -39 -46 -105 59 79 -19 16 76 43 95 20 -27 -77 -128 -51 46 -44 -63 -8 88 96 -32 24 -1 37 46 -74 127 117 124 -3 55 27 -47 -87 16 -102 -13 -71 -23 -47 -37 -75 -86 38 -60 -2 -1 -19 99 0 51 -72 -7 60 -87 84 0 -7 -56 -11 85 -47 39 -39 -50 78 -2 127 -49 -22 77 -62 -52 -60 -48 84 58 68 63 59 13 -27 -87 80 -46 -75 26 60 -9 -12 -53 109 59 30 -23 -29 30 -4 79 111 98 45 -8 89 48 -16 -29 37 -28 -65 12 -1 62 65 11 64 -7 62 -7 -66 97 -36 33 10 5 14 -22 -43 -26 117 -60 -29 47 56 -20 -24 -45 18 63 31 -79 27 24 -48 16 69 -59 -40 15 -25 61 -120 29 73 116 35 22 41 -46 -63 34 61 -4 -35 -110 33 124 5 63 -70 -90 -43 -24 -53 -7 11 17 11 -49 -11 63 -19 15 16 19 61 60 -78 -55 -14 -33 1 -16 -27 -57 4 -48 -50 125 -60 20 -40 52 -99 36 -19 -41 -8 41 -36 17 -128 56 98 -128 115 31 -48 12 -47 36 -13 -22 -69 33 25 95 34 -61 61 -76 -101 127 126 -104 14 51 -77 125 54 5 -60 -112 -7 -89 -34 52 19 -59 99 -20 -18 -59 39 -27 1 16 15 13 33 16 21 -1 75 -40 -12 -24 30 -119 -127 127 -55 -18 -122 100 -21 -18 66 -58 44 48 -48 -88 -127 127 73 -128 59 44 -62 100 -81 33 63 64 109 58 27 44 109 -112 30 123 56 -35 20 -14 104 119 24 126 81 98 -41 -9 119 55 -43 -15 32 -27 -11 -47 -8 -71 -23 -42 -55 -43 -10 -76 7 -47 42 -7 -3 -16 -12 27 -40 -11 -48 7 119 0 4 -22 -3 72 4 -24 -7 -6 -23 114 54 -27 -2 83 -81 16 6 -18 26 -68 73 127 -102 -17 127 -40 38 -86 79 -85 33 127 38 -128 126 125 127 125 -127 116 -125 -101 105 -55 62 7 20 -9 -5 5 92 -85 -72 -35 66 11 -20 13 37 100 38 -14 -41 31 -36 -91 42 -73 -70 73 -8 0 -5 36 -9 -60 -7 16 16 101 -54 -122 -101 127 95 -128 127 39 -96 -31 -34 -1 -127 -125 -61 -58 -52 38 -21 116 45 -98 -21 -56 -4 -26 -123 -117 -58 -62 3 -48 52 -87 -125 -61 -62 -25 3 -54 64 -3 19 -39 1 -68 -97 -6 -9 17 -92 -36 -53 -54 -43 -101 44 1 -58 -61 -66 125 -44 -68 -112 -6 -76 26 32 38 45 5 -24 -120 -7 127 32 -116 127 61 -112 -16 -24 31 -113 -127 97 -27 127 -42 -63 -77 -126 59 -98 -57 -23 30 -127 -73 -128 -59 124 -119 127 70 -34 54 -80 -12 27 -40 51 -69 58 -98 -18 -26 27 73 104 -65 28 123 14 32 6 127 -50 -121 -49 -128 -127 127 -127 -118 80 71 -126 -14 127 -91 127 127 -50 -88 -128 127 127 -127 109 127 19 58 -126 -19 37 -125 66 115 -75 126 102 127 101 93 125 -91 3 127 -50 -98 -85 26 77 -118 121 -116 -82 -37 101 -25 65 27 12 119 74 76 -52 41 -15 51 27 127 -72 127 77 56 47 -64 34 -58 95 27 127 -74 79 99 29 -68 88 126 -77 37 -32 -77 89 70 116 -71 -103 41 -127 -47 -2 47 13 -3 60 32 104 -14 -65 25 112 -50 3 18 99 71 65 -124 93 123 63 15 -96 13 -65 -29 66 9 -70 -44 57 38 -46 -12 19 30 -19 -27 28 -8 49 -15 -24 -11 -58 -2 -47 48 76 36 42 -93 -40 -119 -6 -62 -36 30 74 69 -56 16 -34 -3 50 -52 2 -7 103 17 -44 85 5 -29 83 -51 -116 -128 76 -100 29 -20 -18 94 -20 -4 114 -6 -29 77 -128 -90 -85 -128 -19 -87 127 41 -20 127 124 -2 65 -49 -36 6 43 49 -53 -30 36 13 48 30 70 67 127 55 -2 49 125 44 39 -11 50 -127 92 65 51 -96 34 124 -9 40 -127 -39 76 34 59 -47 -87 124 -70 -125 89 -14 126 19 --128 -127 24 -84 28 81 -106 121 -53 -34 -73 -128 -59 31 -127 -123 -127 -125 97 -127 123 126 -125 -11 36 -8 32 85 37 52 24 79 63 66 40 22 39 8 2 15 75 -24 54 -38 17 49 22 58 6 -59 5 5 38 -26 -4 -36 -10 11 -12 -19 8 5 78 -53 -54 42 -120 -45 59 33 -7 5 -90 48 2 -0 27 12 8 -81 27 -43 -13 21 40 -6 36 -10 -75 -50 -1 12 20 43 -54 -26 12 -69 18 -69 36 -11 8 -31 -54 -46 -21 -29 5 11 84 90 -4 25 -18 -91 41 15 -6 -36 -22 -68 -3 25 -13 -15 14 22 -14 33 10 1 -4 72 -9 -25 -46 -37 -84 7 -49 9 -45 0 -16 1 -28 -36 -23 28 4 -62 2 32 -60 34 -17 -3 23 -22 -16 -33 -31 -57 1 -20 66 46 59 -68 31 51 -64 -6 16 36 -13 -43 -15 27 4 -36 7 17 11 -11 -5 -79 1 28 9 -27 35 -49 23 -12 -7 31 -10 15 -40 -9 -46 36 -3 17 -7 19 -73 -6 24 8 -21 52 -4 -14 -5 -14 15 17 53 -1 36 -9 -7 12 -69 23 -16 2 -52 17 -57 38 -80 23 -30 39 -46 24 42 107 5 -125 -43 -122 51 -7 -125 67 -43 104 35 -2 25 -21 -71 -15 1 -20 -88 -93 26 12 76 -96 -8 10 -108 52 -16 44 18 107 6 16 19 56 20 30 -57 79 -17 -19 4 -14 -85 79 -11 28 -26 -40 10 0 9 -40 -46 -36 -80 28 53 -16 -10 -40 -16 -46 19 2 -45 14 45 14 17 74 -21 42 -34 4 -69 111 -36 36 -44 12 63 24 13 0 36 46 -34 -77 -32 -9 38 -96 -45 29 -41 41 -12 -49 67 -19 -19 -6 16 -70 15 -31 -15 38 -91 -3 -63 -44 -29 25 43 -43 -76 20 -24 -13 -31 -16 62 -43 -39 39 -84 8 -51 57 -44 32 -98 32 -26 29 -43 -78 57 25 -65 -5 -10 -43 60 -32 -96 -12 8 -2 -24 16 -15 -100 -28 -18 -7 -38 -41 -4 16 -34 -11 -39 -74 -114 21 -42 25 51 100 33 45 -47 -5 -4 12 15 46 40 55 -7 -51 31 -41 -34 14 -30 -36 -43 -22 21 -25 9 -2 -55 1 -47 23 99 43 15 57 33 -31 -22 46 17 -36 -18 -15 9 72 -36 -2 -6 -47 -81 16 49 -60 -94 -23 19 -9 -20 -29 -11 -74 16 -38 15 -48 43 13 33 9 6 6 23 -1 -26 43 23 -4 -9 28 35 -39 59 45 83 -2 -44 -28 -50 -50 44 -14 -2 -76 22 12 -13 69 -61 52 -19 5 81 32 -1 -103 33 -48 85 -78 -22 -18 15 -43 20 -5 7 -57 -40 3 -76 7 64 21 33 -40 -23 -59 22 -3 -15 -57 -20 52 90 -15 15 16 -5 -17 -5 -66 31 70 -1 50 11 9 45 4 6 -23 52 68 49 47 69 27 -21 15 -10 -47 39 -5 7 -27 -62 43 36 -22 105 11 -73 -16 -30 -33 -46 -12 -72 -61 -37 28 -10 -23 -17 8 25 -19 -8 35 23 37 -55 -78 -53 -34 31 -16 -22 -12 21 -3 -15 31 40 44 -20 -20 -55 -24 -42 20 15 -23 9 9 6 3 -21 7 1 -48 -8 36 44 69 -7 5 -38 -26 -5 -47 39 12 45 -3 -46 22 -29 8 38 -18 -15 -39 78 -51 44 29 -14 16 -41 -21 -25 -35 46 27 -12 70 -38 -8 -6 31 -8 -3 43 2 50 48 13 36 10 -59 15 -7 64 5 57 91 29 25 22 41 5 -6 -32 27 82 -58 3 16 37 -43 3 -59 -81 -4 -19 -2 -9 -33 -3 -33 -14 -51 -7 17 -19 -18 13 22 27 14 40 -19 -37 -20 1 -6 26 -47 -47 -4 4 -27 52 22 3 13 31 -12 25 16 -76 28 -5 -16 -48 6 -29 -1 11 25 22 38 -33 9 3 -38 -10 3 -21 12 20 -28 2 -6 14 -30 2 7 34 8 5 -40 -14 24 -28 10 23 -27 4 -72 17 -1 -5 4 6 -20 0 23 20 13 -36 -22 -116 33 2 11 -54 56 11 32 -20 -1 -91 -57 -40 -127 4 -52 -6 -82 -36 -80 42 -23 123 2 -72 6 -26 -39 -35 18 60 102 -36 -125 -39 -26 -26 -85 -12 28 -109 56 30 24 64 -102 -79 59 -79 -96 40 -33 -7 34 7 -2 23 -71 47 -38 -9 -58 56 18 -70 -26 -72 84 68 -3 -30 45 84 41 -85 10 13 58 9 -66 74 42 9 -67 -49 -12 -76 22 10 70 -69 -44 11 11 18 31 57 -36 32 108 -38 57 -3 17 48 77 -13 -27 -28 24 74 17 19 9 8 55 28 -9 -18 -22 7 -12 -34 12 -10 46 -1 61 64 -21 -49 15 35 37 35 -15 -36 -5 48 81 11 12 13 -12 -43 -3 -36 -29 -65 17 34 -33 32 -59 0 -51 30 -26 -38 -28 30 26 36 18 -28 -31 58 3 -65 -3 -9 36 41 -43 -32 -29 -10 -66 -26 69 -24 -12 -5 -23 -6 -36 31 64 -49 -43 17 -46 4 42 56 41 -28 -14 51 3 9 19 35 -10 16 -51 72 82 -37 -50 73 -28 44 24 -58 -27 3 -85 113 1 30 -22 33 21 58 -26 -36 20 -12 19 23 -12 -45 -7 -32 -49 3 -22 -18 51 30 -67 -20 7 -7 -16 -43 53 -22 -7 -43 -5 0 -3 -1 26 -22 -7 19 -30 -40 -32 -38 -38 31 41 -16 15 -34 -39 23 -12 18 -74 40 -2 14 25 -2 -55 13 24 18 -3 -35 -10 29 -13 -26 0 40 -54 -39 82 18 30 26 -11 65 35 -28 -7 3 60 -12 -23 39 16 24 -11 56 63 -31 17 20 -67 -1 55 38 -57 34 20 -41 81 65 57 30 48 -26 44 -48 -10 -22 -29 -17 17 21 -16 17 0 19 9 29 59 -16 -9 -10 44 7 -76 12 -39 29 -12 5 -49 46 -12 39 11 -3 -19 -41 -20 -15 8 54 26 2 43 -6 7 -6 -27 -34 46 35 35 49 -11 -76 -54 -20 -30 13 -12 27 -37 -52 3 3 25 -7 40 -30 0 14 11 -9 20 29 12 23 -48 2 32 48 -24 38 -47 -19 33 8 -26 57 13 76 -17 5 27 43 -5 -32 -9 -13 7 2 -54 -72 54 54 -26 -68 17 2 -22 -75 64 -32 -75 99 11 5 24 -28 -21 -56 2 -61 -21 34 -7 -21 8 -23 10 -61 41 9 5 -10 5 -41 -38 -32 -4 27 -7 101 -38 40 17 -120 40 -25 1 -35 -6 -8 26 -10 -21 -5 11 -28 34 -26 -21 21 46 -5 -14 33 -3 -22 -14 8 9 27 4 -39 -20 -59 -35 -29 5 54 -1 -35 -51 14 69 64 65 9 23 7 -17 -27 39 7 4 28 -22 18 1 23 49 21 -9 -12 13 23 33 24 -26 4 23 6 -62 35 -23 23 -28 -23 44 -24 42 -26 -2 13 1 14 27 14 -8 -9 -16 15 27 61 7 -10 -40 -13 -36 -31 24 -41 -73 2 -19 -31 -2 8 9 18 -18 -63 -12 -32 51 -46 -37 -38 -8 59 -36 -3 13 -9 32 -8 58 -67 -2 -42 -11 -127 13 68 -22 88 2 -44 12 25 -52 58 26 12 10 12 -12 51 18 15 -45 51 20 -108 -26 -22 -29 39 3 25 -33 -36 54 -46 48 23 7 8 -24 -20 -93 8 -38 8 69 4 -55 -53 -27 25 30 41 43 -20 -3 -18 -11 -11 55 77 35 -57 20 -3 -35 -30 6 -8 19 36 23 -72 -55 -21 1 40 -66 2 -12 21 -23 -4 36 -9 -34 34 -34 -51 -55 -27 8 8 17 -31 -8 -9 41 -10 -38 14 53 28 -18 18 -36 -10 -16 19 -19 15 -19 -31 37 15 -2 70 10 33 -19 -19 -20 59 -21 -30 -24 -66 22 -63 -47 -7 -4 52 -43 -14 -55 103 -100 26 -24 49 -22 6 -20 -24 -41 34 -68 -126 29 -53 6 42 -70 -32 -25 -1 -28 -20 -13 28 9 30 65 -7 -20 -10 72 -47 19 -61 20 -28 -5 25 73 38 -30 28 58 96 -36 21 13 12 -31 15 -16 -41 -58 -38 7 66 13 -41 -50 -46 -12 49 -28 -43 -23 -40 13 27 57 19 -49 -24 32 0 -30 -52 -49 -34 -67 100 27 36 -62 45 -34 -16 -4 49 -61 -71 8 17 46 26 54 -4 -38 11 33 -30 -58 12 54 17 -46 -20 -5 34 -27 -47 45 -52 18 -12 5 23 -20 27 -10 44 -63 -28 11 5 -35 27 73 61 -23 6 3 40 -42 92 6 30 51 -65 -3 44 40 -27 -2 74 45 -43 43 -41 -5 15 -5 12 70 -28 99 -41 -3 -33 40 -79 -60 43 9 29 16 -20 33 -22 13 34 -51 -84 12 29 -45 -19 -43 1 -10 59 42 -23 -23 -52 14 -15 -16 -64 -9 32 -42 17 -9 54 28 -19 -26 -22 -25 11 -14 63 21 -5 -43 -58 12 33 -28 71 13 25 86 6 -49 31 4 33 15 -19 65 -64 80 -36 -53 -41 55 -49 -7 50 20 8 -1 5 -21 13 41 -7 55 3 28 -29 -32 23 -7 4 49 16 13 18 33 -20 -24 30 -31 34 42 18 -24 -17 14 -36 44 28 -18 13 17 17 -37 -5 -24 -38 -5 0 -38 -1 90 -45 -2 5 0 4 29 -17 -17 -38 45 -41 17 45 59 30 14 0 -28 -2 -22 -21 -37 53 -41 78 8 -60 -33 -33 -37 -4 -7 35 60 -59 -9 -69 -54 110 47 18 75 -14 71 40 46 15 -14 -48 -10 -5 -20 69 16 30 -12 -35 17 14 44 32 34 2 -27 14 81 18 -35 -20 21 35 30 -47 7 43 11 -3 -34 -31 -22 44 -24 8 14 -29 4 3 -39 7 -21 15 19 12 35 -24 44 17 -38 37 -9 -2 -15 25 21 -49 4 62 14 -47 40 37 -21 -36 13 2 -35 19 25 19 12 -45 -22 -9 4 -2 32 23 -47 57 -31 33 57 57 -19 -10 46 -39 25 43 18 -30 4 21 -94 50 -7 -36 4 -9 -82 -13 51 70 12 -36 66 -4 -6 2 92 -18 63 0 -121 58 -42 53 4 -53 -18 46 30 41 9 -6 -19 35 79 -78 -5 14 19 -16 -25 8 31 62 33 -91 -29 2 -72 11 -9 -22 -28 -74 20 44 -36 49 -12 -46 54 -92 -101 -43 -48 3 32 -38 -46 50 -27 -7 -41 -76 4 36 9 -20 -40 -15 7 -1 -5 8 -1 35 -10 32 27 -52 -48 -31 -99 -60 -18 28 12 10 -39 49 60 75 15 48 -22 -1 -9 -20 -27 35 7 53 -32 21 25 -2 66 8 31 -40 14 8 -25 30 -61 5 -36 -40 18 -43 8 25 -38 5 -21 1 7 -2 -51 3 -20 -8 18 13 -25 2 -63 -3 17 -86 1 2 26 21 -7 16 1 46 -19 39 23 12 55 -24 -8 18 22 38 -51 -45 16 -11 28 51 35 -13 62 30 11 3 32 -35 -47 1 11 -3 -3 15 18 -21 -18 34 60 47 15 -27 -6 -32 38 -66 -36 -46 7 2 -87 38 14 -34 25 9 13 -36 -18 12 53 20 39 13 -10 2 64 -12 -16 -31 6 0 7 7 28 -9 -74 -17 3 3 -14 14 -17 62 -55 -45 39 -14 51 18 28 65 43 -33 1 -19 25 -13 -6 -7 -2 -54 -10 -26 -6 -15 -33 -3 -6 -14 -1 -15 -14 -15 -22 -12 14 -14 28 -3 -56 3 32 -14 -25 23 42 -40 -24 0 44 44 -17 -95 127 -6 -124 -40 114 19 20 98 3 -43 -62 0 -30 49 0 -9 -85 14 -4 -28 -42 31 77 -47 -10 43 -52 13 41 -11 -7 -65 -2 74 -9 -23 -7 79 52 3 47 15 93 5 39 53 -30 -17 -71 82 13 -50 21 46 -12 122 -29 38 36 30 -115 21 27 -95 -41 -21 -2 39 -9 19 -6 -39 52 51 -27 21 13 -51 5 -20 44 -11 -47 -128 23 47 17 -60 13 -43 33 6 -8 2 21 -22 -16 39 -30 -49 8 -17 -30 -21 84 -19 -21 -17 7 25 90 -22 -24 -8 21 -33 8 51 -25 -12 -59 -38 41 -30 -26 38 -21 86 24 31 19 -50 -35 10 -11 -41 -36 27 17 -49 12 37 -5 44 33 -4 47 1 -22 17 -29 4 6 107 65 -6 2 8 -62 22 71 3 45 -19 -3 7 -15 16 -58 -28 30 21 95 -8 39 -7 3 -44 39 -79 48 0 -87 10 -17 7 41 42 -96 -67 -94 27 -3 -35 -30 -73 -8 9 -43 -11 -5 -32 12 1 21 -91 -11 45 -28 -59 80 18 59 -14 49 37 9 -2 38 18 -29 46 63 -1 28 17 7 53 -73 19 13 84 -23 -1 6 -63 -25 -3 -59 -38 -22 -67 24 -25 4 -26 -4 49 -32 -27 -31 -52 34 2 -36 32 20 20 -47 48 37 -28 59 97 41 0 -85 14 -51 -10 70 26 -20 -7 -35 36 -4 82 -7 -21 -13 -4 71 31 22 9 -9 26 34 4 17 -55 -42 -13 -52 -64 -21 43 48 36 11 57 4 74 33 27 -21 30 22 6 -82 74 -84 59 -4 28 120 65 42 62 5 13 -15 -39 1 -64 15 91 -37 80 -11 18 -14 93 55 32 -49 -34 21 -41 -37 -5 127 23 -67 -9 -34 -3 -8 -2 74 -39 -14 28 -5 -30 65 -32 30 26 55 45 40 1 38 -13 -36 -27 -86 74 101 78 -22 20 22 -9 -74 -23 7 23 115 36 7 45 50 -52 52 6 12 -5 -1 -14 -58 16 -20 47 -20 9 -36 -78 -4 -27 18 -6 39 -48 15 0 -32 -45 43 -30 -10 -19 -18 -23 -5 26 -36 -8 -15 -71 -36 30 -16 33 7 -20 -52 -31 47 -26 14 -27 10 23 -91 50 -122 37 43 -38 -57 109 70 4 -112 -17 -39 52 -40 40 -35 -13 -63 48 78 -20 -109 -31 -68 32 22 -26 -12 42 -106 -12 -25 3 -104 -29 64 -26 -8 -34 60 -5 5 13 6 9 56 32 38 -6 -32 -4 52 -42 123 26 2 65 20 7 -90 -55 -32 11 -92 35 0 1 -86 -25 19 -12 -69 -22 106 -34 -2 -10 71 -43 73 12 7 -2 62 16 -5 12 42 30 -48 -38 13 30 -32 -31 20 -11 -23 0 -41 -8 -9 -7 15 6 -2 -22 -39 -18 35 40 -96 -5 -3 -40 24 26 108 -47 -14 -64 42 13 41 12 31 1 61 23 26 11 -97 -21 33 -3 16 -2 -73 -93 -36 -7 -48 -9 -14 -13 80 -2 -10 -72 19 53 -86 44 -16 43 -79 -6 10 34 32 5 -56 -30 10 2 46 1 25 -34 54 -3 64 -71 7 -24 4 -2 2 81 29 5 -47 -18 -7 12 71 15 55 73 60 3 -13 30 17 -2 2 38 85 20 -18 43 20 -15 8 -57 79 26 26 23 19 -11 2 38 23 -12 -7 -16 9 -92 -48 -7 3 6 4 -11 -13 -12 47 -32 24 38 -24 12 -26 40 88 35 1 -54 52 69 -35 -14 12 -47 27 -13 19 -23 12 -2 6 -42 -4 28 -26 6 17 -21 -9 -32 63 0 -29 56 -10 13 -14 49 -3 -8 6 -8 -5 24 33 14 19 -52 44 -12 -12 69 -43 -26 53 0 2 8 26 -74 25 6 89 -15 50 95 -23 -11 103 36 97 11 21 15 -35 122 -43 -74 40 -11 -8 28 48 28 2 -6 59 60 -12 -127 15 102 34 43 8 27 -39 -7 -41 52 -45 -5 -62 7 -51 -30 72 -61 -21 39 -27 -21 -68 -41 14 66 -32 -47 7 0 28 -19 -3 -12 -31 24 44 -35 -61 45 -18 5 23 -19 8 50 -13 32 -24 -10 28 10 -43 -31 61 -43 -57 -31 -21 -48 -88 -15 -1 45 35 -14 -62 -2 -1 -27 -13 -82 9 -27 5 -44 26 -5 -52 -65 2 -12 -9 -4 -70 -10 -26 -77 43 -36 12 21 -97 22 -20 -5 -85 -16 -17 38 32 25 -91 -27 61 12 19 53 6 43 21 -28 -33 6 -22 -10 -12 -45 -31 10 20 -45 30 -46 26 -75 53 2 -44 11 -73 -19 -42 -19 -26 24 -19 -26 18 -44 -8 36 59 35 -84 3 -45 -40 14 12 -61 -31 18 51 36 -4 -20 38 59 -29 -43 -5 -6 -5 -15 10 33 19 12 55 77 -19 15 26 10 -2 17 18 -24 -39 -17 -5 -17 -87 -31 -41 -30 -25 -123 -1 -30 -97 -51 37 23 13 41 2 19 14 -41 10 4 22 23 0 -9 52 -16 -21 -26 27 11 -24 31 28 -6 15 -19 14 20 -30 -44 1 -18 -17 -42 21 18 27 4 49 -30 18 13 -55 6 10 10 7 21 -13 -44 -1 10 -11 37 12 53 -6 -29 23 -8 -20 10 -36 -77 -3 -78 -17 17 -36 -22 -65 14 -30 -80 -44 -16 -62 -54 45 14 -10 -3 -51 -8 100 55 -21 22 39 -48 -29 -12 15 56 97 37 27 19 -30 38 32 46 -32 29 -38 -73 -1 66 -19 40 53 46 -28 -38 -45 54 10 -82 62 9 -15 -48 -34 28 11 -30 -39 -53 44 -30 -19 44 -85 25 63 12 45 -31 11 47 -37 36 28 88 18 -15 4 -54 9 24 -36 -62 -4 -61 -15 -47 26 37 -33 -31 -8 4 -14 44 47 -2 -3 8 15 -25 5 49 -58 50 -50 -17 -31 -2 11 33 -22 10 20 -24 37 -27 47 -10 46 -19 -52 8 -24 -10 4 -9 33 -14 -2 -18 -16 -19 18 48 8 10 -67 -42 71 16 46 16 -48 92 -42 -23 -6 -26 -32 -31 15 -33 -4 41 -10 -26 -17 -24 30 -24 6 -34 -39 46 -29 61 -27 3 -18 31 -67 -15 19 3 -17 -15 -28 -36 -28 -16 -2 -81 -24 52 -68 68 -80 0 -12 40 -60 -26 -29 -44 36 -28 41 10 -47 16 -3 -30 60 -13 -31 22 6 56 -39 -61 6 -2 -40 38 17 -12 117 -49 -49 2 -3 72 -96 -95 -66 27 -18 45 -44 15 -1 -1 -17 -16 10 -2 -23 -9 3 -6 33 42 9 43 21 -35 -14 -6 63 16 15 35 -35 6 -10 -2 21 -16 -29 18 -16 19 15 -7 26 51 5 -35 58 -33 -18 -33 -12 5 -70 53 -18 3 -3 38 10 28 -1 30 62 -27 -8 -8 21 30 33 23 -30 -2 -13 -9 17 7 -66 -4 20 -11 -11 8 -7 23 -9 5 4 8 12 -22 -12 4 10 -12 55 38 -30 5 -1 -48 -27 -12 12 -10 -12 12 -6 -41 33 -32 63 -1 -22 7 7 -25 19 -62 3 -48 17 27 -1 -35 -9 -5 -5 28 -4 -17 -39 0 21 5 37 -10 -3 20 20 46 -6 -33 -34 -4 0 10 -14 22 7 -23 -15 35 4 5 22 -31 -9 -21 -39 2 37 27 -6 -16 -28 -17 -22 41 -6 -10 27 -1 -27 -9 25 22 -15 25 24 -1 25 31 -23 -23 10 -1 42 15 -11 39 -38 17 -25 -31 -32 26 48 -10 40 -8 33 10 6 -13 7 -3 6 48 -42 -15 17 37 -6 -46 -32 -1 -76 2 59 -49 16 8 13 -24 5 21 25 -29 -78 -19 12 -7 -7 -14 6 -36 10 18 0 18 13 8 25 23 -2 -47 0 -1 -39 1 -9 -23 21 49 -1 62 25 -49 -13 -11 -21 11 22 1 5 -7 29 32 59 42 -17 14 -12 22 4 -13 -29 26 60 -20 44 25 34 -5 45 -32 24 -6 -18 6 3 0 -10 38 9 43 1 -15 16 -5 -20 25 -31 18 28 -21 21 19 36 -9 32 -10 42 -50 3 25 -5 11 24 -36 -30 -15 11 16 17 -46 3 33 7 1 15 22 -14 33 8 -24 27 -34 19 -9 -50 0 -15 -2 25 -31 -17 -3 -6 29 -16 -48 -3 -15 50 -44 -3 -28 -3 -20 -26 71 -14 39 -61 13 9 -4 -26 15 19 31 12 0 -44 15 74 -6 -92 -25 23 2 -25 -56 -55 2 -29 21 44 18 -35 31 18 -26 28 -39 18 -13 49 -15 10 33 73 -64 13 -13 -25 3 35 -16 -11 2 25 -5 17 10 44 -3 -43 72 -57 -48 30 33 -64 -24 -22 0 6 -32 -54 -83 9 35 5 54 54 -29 -31 -3 -1 -41 41 12 -32 11 -15 -4 -47 21 36 2 36 17 21 9 26 23 -18 15 18 8 15 9 -37 -13 13 -24 7 9 -33 -11 -58 12 6 -7 33 -6 30 50 77 24 26 -11 32 60 -23 -42 43 -7 6 17 -5 -28 7 -33 -12 -2 6 -37 -23 -74 -23 -18 -1 16 26 -17 -78 -46 -7 8 -7 -49 35 -60 29 -20 -18 -58 -33 29 -58 -59 13 21 -6 -14 -20 1 4 -84 25 27 58 29 34 22 65 -13 54 27 58 -15 2 -9 13 -8 28 0 -37 -75 -14 -52 33 27 -36 -5 11 15 -16 24 -13 -11 8 -45 -48 19 15 -1 0 -71 -14 -30 1 -12 11 44 102 -22 -6 -66 -7 -43 -2 -19 5 -54 -6 27 -3 19 -34 8 19 28 -9 -3 5 14 2 -1 19 -45 -7 -15 18 59 -72 25 -25 32 29 2 30 -33 13 16 -44 -9 -23 11 16 44 -56 31 -39 -37 6 73 25 -35 -29 37 19 -50 58 18 75 1 61 -23 -17 9 47 51 21 -23 28 -31 32 -32 -6 14 -54 34 36 15 -99 -31 60 -15 21 -38 23 52 15 -25 51 18 -41 -1 -66 42 -19 2 -14 60 8 56 42 -32 -12 -17 18 -45 -6 -45 -9 -14 -17 -42 -14 -49 2 20 -11 -29 -34 -6 -15 -74 23 30 -27 31 25 3 -8 -61 7 65 -26 26 -3 1 1 -1 -22 32 41 -77 -19 -11 -16 -12 22 -51 -23 -34 -92 26 -22 -37 -44 11 8 11 -26 30 24 14 -36 34 3 56 -14 7 -39 49 -47 -42 -40 -25 3 -12 48 -44 62 -26 -50 1 -53 10 -39 -57 4 22 38 -13 56 -15 -8 33 68 -11 -12 39 77 32 -30 -31 -24 51 -31 -8 -13 6 0 49 35 1 35 -1 -45 15 -16 -45 -5 -23 31 -39 -9 -46 26 -65 19 15 43 41 -20 -35 -7 59 16 -35 8 19 -71 54 15 -17 16 4 70 -56 40 -30 -44 29 -39 -3 10 -54 -27 -56 32 2 -39 -4 -7 -36 17 -5 14 17 0 2 6 20 1 -15 -2 -17 -16 45 31 14 -24 -29 -44 -14 -30 17 40 15 5 -18 3 35 -11 22 30 -61 -55 -11 38 -10 -32 -17 -37 36 -37 24 19 -2 5 15 21 52 -27 23 9 29 5 -31 14 -1 -6 10 19 -36 -26 -20 -17 -39 6 -10 32 -18 21 -14 -57 7 27 17 19 -17 0 26 -15 -24 42 29 21 10 11 19 11 20 -17 10 -24 -12 25 27 5 18 25 -23 37 40 -3 -12 -2 11 -45 -11 -20 -42 13 -3 18 -9 0 33 28 -19 43 -3 14 26 -26 -7 -15 18 -16 -13 -24 21 4 -13 -60 28 45 -33 -28 -9 32 -66 -44 -34 -10 -3 60 -24 -3 -39 -52 -56 -4 32 28 10 -27 -35 24 -19 -4 -1 21 -1 7 -73 -8 30 67 19 -4 -29 21 6 -33 -25 -18 -53 23 -20 -19 -33 -20 -20 -58 -12 24 43 22 -28 -47 -8 20 1 -16 34 14 -4 -18 -29 -2 4 -28 -9 7 -36 27 -29 -20 44 -22 39 12 -44 -26 37 -31 -11 -5 14 -1 -6 -22 13 -49 -5 74 -1 -40 -36 -3 -43 34 30 18 7 -44 -38 -63 46 -54 43 -23 -30 76 -37 49 -41 -74 34 -5 20 -14 51 -26 22 -2 -45 -44 -70 -50 -6 29 -44 27 54 -32 5 70 -24 -68 44 -37 1 -16 6 -25 29 -11 43 -24 68 -19 -16 17 67 3 -72 -40 -30 11 5 -2 29 -13 55 -21 29 -27 38 30 -41 -26 -59 -15 -38 -41 28 -64 33 62 0 45 48 -16 13 94 40 36 26 48 -26 -33 20 -4 -41 -19 -7 -35 -20 -24 12 15 -29 3 -2 28 -28 83 -43 45 72 -6 9 6 -30 80 -19 16 35 11 -12 11 -22 44 20 35 28 6 5 -18 1 -9 -6 23 -2 4 14 -1 -10 4 18 25 -12 -32 11 -2 -15 12 -24 -5 50 27 -2 56 60 66 21 -46 -2 36 -60 -23 -48 -42 -53 17 1 65 72 -47 84 37 -7 2 -31 47 15 20 58 -60 4 5 41 56 -12 1 -15 20 -33 -24 44 -4 -4 23 63 -42 -22 -46 0 4 -7 -40 29 -24 -28 -4 -29 -15 -15 20 22 -1 -9 -22 -4 2 41 53 3 8 -25 15 5 -47 -48 -59 32 41 -16 -12 -5 -14 4 -22 3 -28 -7 -62 18 8 -10 25 -14 24 13 -4 25 5 -29 -7 -3 -5 -10 -42 19 -18 15 -25 0 -3 30 -17 -18 -8 10 2 -15 1 22 -12 8 -39 10 20 6 21 -20 -1 -29 -37 -23 16 -26 1 90 -2 23 21 -6 5 8 23 36 18 -17 -57 -1 7 61 25 37 -33 -22 -60 63 33 14 55 -11 -67 -39 -10 -34 1 -54 -48 10 30 18 -20 64 75 36 2 53 -38 17 15 9 0 6 15 -25 21 -68 36 -13 -9 -9 50 49 0 -10 13 3 -1 0 -31 33 -32 -41 21 4 15 -21 -7 23 -6 27 -25 -2 7 -59 13 52 8 -53 15 28 -14 -28 53 35 -5 25 41 -1 -21 30 18 -25 -48 -42 40 -23 30 -8 -16 -23 15 -23 2 -34 39 1 -20 -20 28 44 -4 -37 -33 -20 13 28 35 28 52 -15 -27 -4 7 6 -36 -29 -13 9 5 4 -27 -26 -37 44 -1 -70 33 20 -53 -24 -34 35 -57 6 -42 51 -81 51 34 49 -1 11 49 -25 -8 7 -45 65 46 -4 -23 30 -57 52 33 -11 -42 -21 4 -56 39 -10 -6 -13 -68 -32 -12 10 6 -75 57 3 -3 5 -24 -52 -29 -1 -42 -19 19 -5 -38 -21 -73 -38 -32 -33 12 44 5 -2 -54 0 -22 16 8 -2 -2 -7 8 11 35 -5 -65 -25 8 1 22 7 25 11 -12 15 15 8 -21 2 10 -3 -2 -1 -14 -19 -21 47 -39 18 -37 -31 -17 -9 -16 3 9 -23 -9 30 -40 2 -15 11 -26 -27 -3 36 -3 27 -30 14 -16 27 -22 6 -19 -20 -30 -37 25 -13 -39 -26 -33 -43 -24 -15 22 -14 -2 -41 0 27 19 -28 -14 -16 -2 26 -39 -31 15 -17 0 16 -8 0 72 10 38 -38 -36 36 -15 -58 34 10 54 21 60 0 -23 33 0 45 10 -43 -46 -5 6 40 20 -32 13 6 -38 1 10 -67 7 -41 0 -18 -16 27 19 -28 -42 42 -66 -33 -17 -9 5 50 -18 76 -28 -41 12 -34 53 13 -13 -14 -18 -16 -35 -21 42 -2 -15 28 -5 18 -7 28 0 8 -25 -21 37 -14 -3 -27 11 -48 -30 -21 -22 37 -31 31 -10 -8 -14 -33 5 -11 -17 -8 -49 -33 -20 32 -20 -14 -39 29 -7 14 -25 -29 0 37 -8 -6 -19 -46 -42 -22 12 -35 4 7 10 1 20 -31 -37 19 8 -22 -62 65 -4 -17 63 -2 10 -7 40 34 -25 11 45 100 4 19 -46 -26 -50 -14 -16 48 -50 -24 27 -54 -18 103 19 7 23 -50 33 -63 -26 -51 17 -36 48 30 -61 -5 -3 30 -54 48 -31 -23 3 18 -26 -16 16 8 -5 -43 -6 5 -26 -9 65 61 -6 -7 32 -47 27 -1 -41 25 37 -15 2 -6 -30 40 18 3 16 28 -22 -11 33 -58 -34 -11 -7 -29 36 -18 46 5 27 35 -34 13 -36 -23 -15 -30 8 13 -26 -7 35 -17 32 -26 -33 -28 13 -10 11 10 5 -36 13 4 26 -6 -40 -15 -14 -2 -6 25 9 12 27 2 30 1 -14 -2 -4 15 -42 -16 0 -9 39 -12 12 9 27 -15 39 -109 71 -46 3 -41 -12 8 50 -48 -6 52 -19 13 -5 -29 16 65 -41 -26 -64 30 -25 -34 6 4 -59 14 -23 -3 -21 3 -14 -26 29 -49 93 -14 -28 1 -29 0 -2 7 14 39 8 -15 -42 28 18 25 31 -8 1 29 7 -3 25 16 36 -13 -28 -27 41 -10 -43 35 35 63 19 30 -45 -32 14 -16 15 1 -1 -58 -2 23 7 0 28 -33 35 -7 40 51 6 12 -57 57 12 12 -29 11 -33 -42 -19 2 -16 1 24 -30 6 -51 31 -4 41 30 -18 -28 25 32 -6 44 36 29 -35 13 -27 7 -38 -16 -23 -19 -39 23 16 20 10 17 43 1 14 16 -57 23 -42 11 -33 31 6 4 -30 -26 37 -59 -13 27 33 26 74 21 -12 -37 3 -21 -35 -26 56 30 -4 33 -2 -17 -1 -2 31 22 -3 8 8 -62 0 -15 26 27 52 4 18 -9 2 20 -19 -8 0 -27 12 52 -15 -26 36 -8 37 -11 35 17 5 -45 49 20 -16 -11 -34 10 13 -33 42 -44 15 -41 -14 37 26 -19 5 7 0 7 -7 2 -3 37 6 -11 47 -8 -29 9 -16 37 35 -34 0 -25 -11 18 15 -23 -20 -32 3 23 -14 -22 -2 -8 55 -36 -24 1 21 -32 -3 7 -6 -13 13 -32 -2 33 12 -40 10 -6 5 55 18 -13 10 4 -39 -14 38 19 -22 24 -20 -26 -12 4 -8 18 45 16 -12 -70 -30 -29 -18 -40 29 -15 20 -7 -22 6 4 28 6 27 -9 35 -24 0 -16 44 -16 29 -7 67 -20 -32 -34 37 -29 -44 40 32 3 25 3 3 28 21 0 26 -27 7 32 -41 -40 -49 -14 -1 25 -25 48 22 43 -4 -11 16 -15 7 -37 -11 1 -6 -25 2 -51 -28 19 9 -3 -11 11 -43 23 -22 14 24 -40 36 11 6 -12 -7 20 -6 -10 -10 -22 -40 0 53 -13 32 -22 -14 -54 -26 -5 -23 -4 -15 -10 16 9 17 -21 -6 -40 -29 5 -22 30 24 56 -6 -9 -10 5 -18 -22 -7 6 17 24 2 21 44 -22 -16 -17 39 -8 -4 16 3 37 20 -7 -29 -17 -30 20 -40 4 -6 1 -62 36 -51 -18 -16 -41 9 13 12 39 -17 -43 15 -22 -2 -51 -7 24 24 -1 -26 9 39 0 13 29 -52 -79 12 11 24 -50 46 0 -86 -39 -30 -28 -35 7 24 18 -7 -40 -27 9 -27 -14 -4 -7 -19 -41 28 -54 3 11 23 -13 -32 -35 61 18 -10 -56 -25 -6 24 12 -29 -9 -18 31 8 -19 -57 6 -22 23 -48 33 -22 44 3 52 9 -33 -63 26 -14 -27 24 37 20 16 16 48 -11 15 25 -25 -5 22 -58 -20 3 -12 23 30 -8 0 18 2 17 29 9 -5 -10 5 -9 -8 -2 22 -23 -12 15 22 -26 -11 -8 12 -30 3 20 26 -6 51 7 -6 -3 66 17 -13 -55 45 -36 18 -28 19 47 -2 -57 51 47 54 -3 -15 -7 8 -25 -7 1 -11 -27 12 16 15 11 -16 -15 -13 -11 58 18 6 35 -58 21 -24 -6 111 -38 -39 -19 4 -2 -5 -30 41 34 11 -16 29 44 11 -31 -34 -19 -2 -4 -5 11 -35 -10 -7 -52 13 -10 5 -16 34 -2 -59 -61 -24 8 17 -3 -36 -10 -9 -65 6 -40 -51 -31 23 32 29 -7 12 14 -15 -40 -48 -40 30 -36 -54 -1 10 -45 -33 -17 -21 -3 11 13 12 -8 -31 17 -8 -19 -3 -36 17 21 6 28 23 -8 -38 22 6 16 14 -35 5 0 -2 -35 -2 -41 -16 12 40 -28 25 -6 12 -19 19 7 18 -22 33 57 -67 -16 12 11 14 -23 -11 -4 16 2 29 18 14 -47 -23 18 59 6 -18 -3 -35 -4 -11 -27 -6 5 30 50 -1 -112 17 73 -37 -21 53 -24 -96 43 -13 28 39 -23 -45 27 0 -100 26 -35 0 34 -19 -49 -21 -38 1 -43 -19 36 -66 75 13 93 -28 -12 15 -17 21 -17 -20 -12 -12 -14 -49 -43 1 41 17 79 30 -8 -15 22 18 13 16 16 -40 8 44 79 -21 10 -35 -21 67 -3 73 13 -32 -3 55 -3 -13 -45 -4 34 -17 -10 -10 -14 -11 -27 -31 8 57 48 -53 40 11 -15 6 13 43 -32 -2 47 -43 13 -14 -10 37 27 -36 -6 26 -11 -14 57 -18 23 32 32 -2 -66 13 -9 23 -18 -27 -3 8 -18 26 64 38 2 7 33 19 47 -12 -33 -37 -42 23 -6 51 109 5 38 51 -65 -14 16 -29 19 -76 -25 -29 -5 114 -84 -25 47 6 2 -15 64 45 32 23 -8 8 -51 21 13 -14 -4 -14 89 -23 8 14 -30 16 7 43 52 35 27 13 22 -17 44 23 13 51 22 9 -39 -90 -18 49 30 62 -9 -50 6 27 -27 1 16 -35 12 21 -62 -8 -4 -8 24 0 11 -34 -8 11 -8 7 32 12 -17 -23 -17 23 -19 -6 17 3 -7 50 -15 29 31 31 25 -27 1 -41 -6 -50 27 -24 3 -18 24 46 -53 49 -32 -56 -18 -48 29 -11 32 -6 21 -39 -42 29 48 -45 -44 -11 47 -7 105 31 -13 21 48 3 81 81 72 125 40 -38 -10 83 -11 -106 26 66 -17 -17 12 22 -5 -14 -54 13 90 47 -71 -18 19 25 -19 12 44 55 119 -61 78 -90 -28 -52 -34 -26 37 14 24 30 58 -39 -20 62 38 34 -53 3 -14 -23 -9 -16 -16 -1 -38 114 5 47 -31 43 -21 21 37 -16 43 -34 -21 13 0 -63 28 8 38 -16 -12 -21 -104 78 -21 24 -21 -5 8 -63 -7 16 -29 49 -10 -2 -68 -60 47 -50 -38 -17 25 -5 13 7 -43 18 50 -31 -17 -16 6 16 32 47 3 -51 -72 -17 -36 -66 15 -30 4 39 17 33 16 -16 25 -28 18 -32 -35 -1 6 -12 57 -19 14 -74 3 -39 -34 -43 20 2 62 -5 5 -37 -51 42 -23 -5 -34 11 11 6 -17 9 48 -8 -18 16 34 65 -5 -12 1 -1 49 44 -55 37 30 -31 31 -20 23 49 3 -22 -49 -22 19 -7 -37 -22 24 -6 24 4 56 82 -29 53 -1 9 12 67 56 -5 31 11 7 -10 -28 -44 -7 -74 -16 -18 -23 81 1 -75 -45 -9 -47 4 -37 -60 2 -3 -2 -86 4 1 -2 6 -8 62 10 -4 -36 19 37 10 -22 -68 -7 11 -42 -31 -41 35 -61 52 -17 0 -51 -48 19 -22 -15 -23 2 -27 37 -39 -74 22 -23 18 3 -27 -21 18 41 18 55 -2 -28 -1 -4 37 64 51 37 56 -20 8 26 -17 34 -16 11 20 -48 29 -9 -21 0 37 -9 11 12 5 42 -6 -14 -1 33 -27 18 37 44 28 24 0 -22 -36 11 18 56 17 -24 -16 -34 -29 -28 -9 -14 19 8 0 2 -1 -33 -59 -23 43 -41 -1 0 2 -44 24 5 -38 -28 53 2 -30 -17 -56 -13 43 21 -36 15 -19 -4 33 -44 0 3 23 -12 -22 -1 2 16 16 -18 -15 -40 -36 21 7 -13 -14 10 1 -11 -22 30 -35 19 19 18 -24 22 38 4 -32 16 -22 -14 -13 -19 -6 -32 17 32 -12 -40 13 -7 -29 -31 2 -21 0 -22 19 -34 -21 0 9 11 27 -5 1 19 -19 -6 -18 45 21 -3 12 79 17 -27 23 5 -43 -54 73 -42 -15 -28 -24 52 -27 -77 -73 -106 -32 -48 -20 -75 31 -30 47 -43 -123 3 3 8 19 29 -49 -11 46 14 -6 90 116 7 -77 58 -43 69 34 24 -2 28 40 -10 24 -26 37 8 2 -7 46 58 81 58 14 -38 19 -74 1 16 -26 -14 -18 32 40 38 -19 32 20 46 70 5 -61 -8 -40 14 -44 -64 19 33 -27 9 29 25 69 -20 37 5 23 32 -76 -55 -9 -94 13 16 15 15 -35 -2 20 41 17 -24 -41 -6 11 24 10 7 -19 -65 -26 -8 33 -9 0 96 45 32 -16 3 21 14 44 7 -37 13 13 31 7 -29 -14 70 22 21 4 54 24 -11 -41 -31 34 -3 -24 -41 -6 7 -3 -9 -8 10 -16 8 -34 -15 10 3 4 -1 3 9 -11 -17 15 15 -32 -40 19 -13 -16 -16 -3 -10 6 5 3 17 -41 13 22 -1 -22 7 14 40 4 -15 1 54 5 -30 -7 -27 0 7 -5 10 -13 12 -32 -25 -28 5 2 -55 50 -10 6 -20 -18 -13 18 -18 -18 36 6 34 14 -5 25 -23 8 -24 -29 26 -55 -13 21 -41 10 16 1 6 -15 4 14 -6 5 3 -8 -26 -10 5 -5 -3 9 -19 25 -11 20 -23 5 20 -5 -17 -17 5 16 5 8 10 -18 -10 19 -13 21 12 8 -12 -8 14 -25 26 0 4 -24 -11 41 49 -5 77 42 29 42 14 10 -22 -39 -20 14 -34 26 -3 -3 -3 34 -27 -21 -16 -30 15 13 -38 34 14 68 70 26 -5 -5 11 13 -41 15 3 -1 44 -3 -50 -6 48 -9 -29 18 63 -14 6 18 16 38 33 -13 -70 27 50 -48 -47 -32 54 -45 -31 -12 29 -32 57 13 -10 -6 -25 1 -1 41 46 -33 -4 -4 17 29 -15 27 30 48 23 21 -13 21 -32 -11 -3 67 -3 44 -11 -14 -30 24 10 11 0 -3 27 43 3 -36 -34 -8 6 -41 2 -4 -1 11 3 25 11 -23 37 -25 -20 11 28 -41 25 -24 -29 -23 20 14 17 12 12 -31 5 33 -5 -4 -12 -28 -32 2 -12 55 27 -70 -3 -12 45 -56 -44 -26 -11 -30 25 -30 -28 9 -1 25 31 17 -44 23 17 -40 -16 -75 -35 -53 5 -20 -65 25 11 -2 57 -47 22 -22 -40 -21 -27 -1 -64 -21 0 34 82 9 124 -35 -78 44 14 59 -11 -8 52 0 -4 15 -44 -1 -22 -56 -17 14 -6 5 1 27 -103 -11 -3 6 4 -63 -30 -67 37 5 27 58 53 -26 32 -32 24 -22 2 -51 17 25 -30 26 -68 10 -44 40 -25 -24 -23 25 -10 33 35 41 5 19 16 42 5 -8 -23 2 -37 -11 -2 20 37 42 22 6 -15 -33 39 -46 40 -53 33 15 62 -37 -27 6 -42 -5 -20 20 -9 5 -41 60 -61 35 -9 13 -45 60 25 1 41 6 -17 39 7 21 65 -66 -22 28 3 -27 44 11 -51 -1 -17 4 19 -52 -87 -24 -23 -84 -45 29 29 -25 -13 -33 10 38 -30 50 40 13 16 -9 18 -31 5 15 -99 39 9 -45 22 89 -24 6 13 -57 79 -21 -62 -61 -57 35 -57 60 29 -4 -51 22 -25 32 12 -56 -48 40 -13 33 23 -89 -39 -31 -54 -24 -8 29 57 35 -4 -27 -13 93 58 -38 17 -43 -1 15 -46 -37 -7 -65 16 -27 12 11 11 -6 10 -54 13 29 -13 3 -41 29 -19 29 10 27 13 20 -20 -7 30 5 31 -27 -49 11 23 -43 26 -35 -21 44 9 -8 -16 34 10 -42 -48 17 -34 32 58 28 22 -33 32 48 68 -5 -27 38 -4 28 57 6 -9 33 -27 -3 -7 7 -53 10 15 28 -2 -40 -5 -29 -38 -28 -26 -3 -33 -21 -51 92 -47 21 20 -49 -3 -13 21 -7 -70 8 56 23 4 46 36 -9 38 -2 -37 55 -50 59 19 -46 74 3 -34 55 24 22 26 -47 15 84 -9 -27 62 -20 -44 -54 53 -62 9 12 -9 -75 -27 74 -34 0 -2 41 -18 68 29 -6 -32 -30 38 2 -68 -12 39 19 21 62 34 36 -7 -3 -2 14 1 -12 -36 -34 9 -11 -33 -31 0 -12 -23 17 -9 -37 -14 -47 -27 38 71 10 -27 -45 7 -42 37 -4 23 -66 -11 2 -37 55 44 29 -61 41 -54 19 -7 44 -18 -60 -15 -29 -49 28 36 -106 -33 12 -11 -49 37 23 -23 10 -34 -58 -2 23 -26 73 -48 49 -49 -68 44 78 41 41 40 82 5 -25 -45 -19 -53 34 26 40 36 8 -40 -26 -13 -28 -9 65 63 9 24 -61 -43 -37 -14 96 5 1 9 37 -49 40 -32 33 60 -58 -20 47 56 7 2 41 -9 -67 -101 -32 12 38 36 68 -45 17 51 -67 -86 -41 -2 -34 23 -12 37 3 30 69 61 -1 11 -10 -35 1 -26 29 19 68 -5 1 -10 33 -1 -15 22 -15 -26 7 -54 11 10 55 -35 49 37 45 -47 -35 36 17 21 -61 17 -55 24 -110 -31 15 -45 -23 48 25 54 -127 -8 48 89 33 -71 73 105 -45 127 66 52 -126 -127 -56 -50 77 44 -38 -33 -86 44 5 -16 -10 -81 13 -8 -54 61 63 -21 48 -37 38 51 12 -19 -114 -49 -43 67 -72 -15 -33 -127 -59 57 -24 6 -125 -2 -105 28 -13 -126 38 -43 36 -128 -79 77 -38 -71 15 64 -72 85 20 17 18 -127 36 -19 -101 -23 37 104 73 28 63 -83 -54 -27 80 52 -71 102 92 -35 -7 -57 69 56 -68 34 -81 37 127 127 -24 -71 98 -67 80 -66 73 54 -80 86 70 -6 52 52 6 -19 -99 23 -85 73 88 71 29 -68 17 -14 55 74 57 -71 -7 31 -71 8 71 65 -40 99 52 -70 76 55 -23 96 -88 -22 91 -126 10 19 -40 -124 -22 78 -21 -63 -39 -100 56 13 -111 78 -72 -2 -123 127 73 -41 -26 -7 -69 -40 46 -37 -103 21 45 -107 12 76 68 -29 73 -111 -32 4 -75 8 -22 28 35 -78 -92 35 -128 -47 -128 17 22 57 -119 94 -89 -49 -7 -39 127 54 -24 -33 -30 49 38 64 65 -61 5 115 0 127 52 -2 55 106 -83 63 30 32 -42 16 15 15 21 35 5 -30 31 -66 -100 -61 38 29 17 -45 2 -41 -74 68 1 0 -14 -48 123 -36 11 72 98 102 -2 -72 2 -127 127 51 44 56 -43 -54 -85 -63 9 -32 -47 41 -105 -32 -20 100 68 21 1 55 24 17 -55 -24 -38 -40 -59 -65 27 66 121 -11 -35 -92 6 120 93 25 -127 -24 43 -51 33 22 13 35 -81 4 8 -45 -122 -37 -33 47 -122 -127 83 64 11 37 -79 22 -49 -81 -66 -128 -57 -2 -111 -34 -18 -111 -109 62 56 -16 -20 -94 -128 9 -41 -126 -26 61 -127 32 -12 92 -33 -59 -54 -78 -67 -1 -16 103 66 -52 -97 74 18 61 73 -14 -30 -1 122 -98 -15 -126 -21 31 52 -96 20 -19 -51 70 66 54 -97 -128 -21 -32 -128 -76 -37 -45 14 14 67 -38 -15 -18 -76 121 33 42 90 9 -9 -18 26 30 -21 35 105 16 106 -2 75 -5 79 -55 18 6 2 -127 -58 81 -123 65 123 -32 25 -7 -76 -63 63 -127 -65 -16 -33 -96 -84 99 -64 -40 -59 44 98 85 45 -30 21 56 -127 -78 38 -79 -4 123 -101 -2 -127 -126 -32 95 -93 -127 -17 -128 65 -77 -112 -96 -48 -71 100 -128 -35 124 -103 -126 91 -65 -117 -56 68 98 -81 127 26 31 -82 12 -80 83 -10 -78 127 53 -77 -8 -59 -62 40 -25 -128 45 0 25 -17 2 123 -87 59 -29 125 127 67 9 -105 -45 -52 2 6 48 45 -21 -8 39 21 48 -2 15 -46 50 45 -47 -54 108 127 -37 -19 -42 63 0 118 58 -11 90 -73 48 -47 65 -23 -31 -104 -29 116 96 117 13 126 -41 -6 127 -125 127 14 -71 -43 21 -59 97 13 -56 44 -126 69 -32 -19 -128 -23 -127 6 -36 -67 126 -47 -54 69 126 -126 -115 -7 6 -48 84 -113 34 -62 79 -102 54 -77 -98 -40 83 -94 114 121 -80 127 101 79 -72 -65 -34 -68 -6 -15 8 67 4 5 53 9 19 -33 -112 65 -2 48 -1 -100 -73 31 -43 -46 -123 -127 -43 -106 11 -17 -71 -36 -59 36 7 -48 -126 9 6 -43 26 -80 7 127 -14 81 -116 -46 -72 40 -128 32 -108 -80 37 -43 -35 -128 49 1 -128 104 127 -40 -125 69 -24 23 108 -74 -55 -72 -59 -61 -2 -28 10 98 -36 42 15 28 -26 -50 59 -24 58 -41 0 5 -59 18 29 -97 -126 -71 -114 102 -55 -118 114 -64 127 -58 125 -34 -3 29 -35 -41 -115 125 127 -60 -50 112 54 -43 -65 -90 -22 -30 -17 -127 30 -31 -4 -127 1 -52 101 -125 108 -15 -79 43 47 -126 126 72 23 99 127 -127 -38 -55 -46 -104 27 -51 -12 -35 -126 -21 -128 -123 -76 41 -127 127 -10 124 -18 -90 -8 -34 -84 -6 73 -82 53 -91 -34 -100 -75 -111 57 41 -127 -24 -127 -93 -38 3 -84 -128 -19 2 -3 127 120 115 6 -71 -25 48 -24 20 -42 -25 44 59 81 41 56 127 18 -128 -6 79 28 -126 -26 -31 27 -11 64 -69 -77 54 -101 101 72 -58 -85 -45 -59 107 127 -128 60 46 -127 19 -72 -103 37 -128 127 127 -26 47 20 20 -39 52 125 -68 -57 4 -13 47 40 113 -59 121 -1 -79 -41 13 -127 0 -124 -34 -16 68 21 38 125 -96 -13 -30 -127 42 89 -73 33 93 22 -112 -125 10 127 -71 -28 -29 -27 -66 68 127 76 -49 -124 40 -127 16 -89 -22 -79 -115 -83 -54 -98 25 -78 17 -109 104 -83 90 -28 -46 45 -128 79 -88 -16 -61 -12 -30 127 33 -114 -72 -7 89 -69 5 4 -128 -20 -6 -38 -80 82 -126 -25 28 7 24 -98 -7 -95 -86 -8 -3 -52 -22 -9 -68 7 -29 85 127 58 -44 -11 -12 127 -87 -48 -23 -23 126 -109 91 4 67 95 -61 -7 -23 -65 59 -63 -14 42 53 -23 30 22 -67 -118 -97 27 -103 -20 -73 -8 9 127 22 -36 -101 -14 -62 -51 -73 -1 77 -52 -23 127 -124 -20 -2 -41 6 3 -27 30 -2 58 15 -52 123 -5 127 -128 104 -87 -125 -57 -127 -126 -12 127 -42 -124 -40 -56 -80 38 37 127 -12 -63 -128 -128 85 15 -74 -23 -109 -46 -104 -124 -15 33 -72 126 74 -115 96 -23 -101 -31 -127 101 -18 -76 -116 -127 -7 117 -126 46 86 90 51 8 60 -127 52 20 -71 67 -53 79 12 91 -62 -5 -34 -10 -127 108 -89 -19 14 98 89 -82 72 -124 -13 86 112 124 48 0 38 -64 -39 -50 -12 16 63 -44 77 -1 124 -59 -2 -78 124 73 -39 6 1 -27 20 117 -117 -81 -5 -33 45 43 -50 120 -63 -68 127 127 -70 122 20 80 -4 -64 -3 16 -92 -95 124 98 23 127 49 11 -17 127 72 -41 105 -4 92 119 101 -39 -63 83 73 -1 -28 78 5 120 109 52 -65 -21 -118 -87 58 34 0 29 115 13 30 -90 -44 -36 -128 39 -62 114 112 -105 9 127 124 -33 97 -10 -117 -66 0 105 -128 61 17 -14 -35 -86 101 81 66 -22 1 120 -57 36 -71 -53 -62 -62 38 120 -113 122 -4 -45 86 122 127 81 -19 42 -6 34 43 -10 124 -128 102 36 -20 125 127 32 106 10 -126 98 -36 -64 -127 -92 33 -127 -30 -99 23 -77 42 -45 118 -28 -62 -2 111 116 -82 -36 -6 -52 27 54 -31 -47 3 68 -127 -78 -11 102 -74 106 73 -94 14 -127 -4 105 -35 124 33 -51 109 40 127 77 81 97 65 -64 33 126 -64 59 21 52 19 127 -9 -28 39 125 -27 -19 -33 20 96 127 -19 41 -74 31 -17 5 -89 -38 41 -127 -122 -45 -128 39 17 21 124 -88 -25 -7 127 -109 -123 85 -28 25 -121 -1 -125 -69 28 -58 -112 -104 -23 -83 -15 -61 5 127 -11 81 63 99 -88 20 93 27 17 -74 119 125 56 44 89 20 -94 0 55 -2 127 124 6 -126 -101 62 12 -34 126 -121 126 127 -70 -127 -106 10 -117 -18 127 -128 127 11 93 -126 -20 -97 -122 118 123 -40 127 18 68 -86 61 1 5 -71 12 -57 -32 123 19 -61 -108 12 -18 93 85 -81 -119 -105 26 126 -100 89 89 -127 115 -101 -31 -44 -127 102 81 -78 -127 -110 -38 127 -20 -41 -103 91 -71 116 -47 79 -109 34 -66 -74 53 -65 -7 111 -14 37 -94 127 -128 3 -88 -128 -54 -110 -128 -5 -121 -106 109 -123 7 102 127 -46 115 -62 -50 90 -33 -51 85 -56 7 125 -36 -123 59 -23 31 4 75 -64 -82 52 -11 92 75 54 29 -42 61 103 -16 116 -19 -28 126 -44 -90 -107 -4 106 -1 8 119 -4 63 16 -104 57 -37 90 127 -119 -127 -122 127 -128 -60 -5 -13 -52 -48 -69 127 -39 -102 -109 -24 -76 -107 16 118 -20 27 -39 18 -63 -63 113 -11 -127 -30 -75 19 7 111 82 -10 31 106 52 31 4 28 -34 -33 9 -6 -109 51 -117 -19 -72 60 85 127 -76 -123 14 -56 97 127 8 115 32 -5 -64 31 1 -127 70 115 -31 67 10 26 -28 -3 56 -127 127 -127 64 123 -128 -37 -12 62 35 22 75 127 -128 -114 -17 -9 -46 64 72 119 -26 -127 105 -34 15 32 23 -85 -85 14 127 30 21 103 122 98 -78 127 -127 -98 126 -6 -27 -103 -72 102 -31 -77 -56 126 124 58 -56 38 -33 12 -82 -17 -125 75 -20 13 65 113 127 -2 10 -30 -120 85 36 -102 -65 26 86 115 24 71 -5 -125 -127 -24 70 123 -35 127 -10 28 -10 -125 -126 -70 48 127 70 15 79 62 127 -29 127 102 35 2 -123 -66 -99 11 80 64 -128 -104 -101 -40 -30 111 -109 61 -124 121 122 -7 123 60 116 56 126 -71 -43 11 85 -2 44 11 -117 -32 -123 69 -11 81 -62 -65 -84 -111 52 -106 65 -29 -128 -102 -43 33 -63 -44 38 -127 5 19 25 -91 -27 -83 92 -6 9 -79 52 -55 -64 -98 -117 -64 -126 33 -126 -41 -99 70 125 -69 -3 69 -58 -53 19 20 -121 -99 -84 80 -73 -30 10 10 113 38 -91 25 -67 58 -78 -46 -33 -126 0 47 -98 -37 -15 127 -38 -44 8 -15 13 -1 -24 18 5 -33 21 6 -42 -58 -123 27 -17 -26 10 47 100 41 43 -21 -24 59 77 30 16 -39 126 19 -128 30 111 121 -101 64 -7 -77 -127 52 -91 82 114 76 -38 -121 12 -125 10 32 37 91 117 10 30 -43 64 127 122 36 51 -118 8 -127 19 0 -127 -109 -50 40 -38 107 -12 -12 25 -122 102 -121 98 -74 52 22 -125 -115 -120 -54 -75 -114 -99 26 40 -2 81 -127 64 85 -5 -12 8 -118 -56 -8 127 -92 45 -26 -85 -25 48 22 -11 -43 77 14 1 -2 -36 33 25 38 41 -22 -90 -80 -20 -29 77 48 -67 41 20 -21 60 0 -26 -125 2 -47 -127 -92 -77 127 -55 4 120 113 -128 21 -75 -86 127 -104 -80 127 -128 94 -38 67 111 -56 -82 127 106 82 -94 -87 72 -54 76 53 -24 18 -122 -126 -49 10 116 -58 113 114 -77 119 76 -91 -102 -13 76 -103 -69 -123 -30 -72 -23 -19 -92 -39 -102 -128 124 -80 85 2 -69 16 58 50 104 -126 -117 117 19 -124 -50 52 -126 92 112 -63 57 21 -60 51 106 127 91 -51 -44 -42 47 -55 -34 127 59 -125 -46 -18 123 -113 93 126 115 -89 59 -63 37 -127 71 -88 124 -29 61 -116 -67 4 -42 68 115 14 124 -22 113 117 -8 56 -114 -91 70 -128 -56 -74 85 65 30 -21 125 75 77 -9 115 21 -57 -65 -127 -97 32 -100 14 78 87 15 -14 -126 -109 89 -48 127 127 29 -49 127 27 106 64 -45 105 127 95 125 -84 8 -36 -1 -121 127 -108 -116 127 127 121 20 127 -108 84 126 75 -71 -50 107 -124 43 50 -21 -22 -72 -67 -112 17 23 -55 -112 112 41 -6 -102 -19 -32 116 -127 -104 -50 77 56 124 69 85 80 -127 23 -60 -7 127 -37 60 -97 14 -115 -57 30 -66 90 -81 -7 85 112 -3 99 70 127 20 -24 -69 127 -69 97 126 -15 -11 127 -68 -23 -14 3 -121 109 113 -70 -97 83 -128 -28 23 -97 -128 -5 -31 -128 -103 -70 37 44 -65 -49 -69 36 -127 26 126 -46 50 -54 72 -19 127 125 -39 -15 127 126 28 -94 -33 119 16 -30 33 36 -102 -96 -83 -86 -90 30 55 -106 -39 -69 -106 -31 -64 -71 -127 -75 45 -119 -44 99 122 -127 73 -34 5 100 56 -43 127 127 -123 -54 -2 -110 -128 66 127 -127 56 -25 -33 14 -30 -26 60 45 -24 -98 19 19 20 -67 -55 5 -44 85 -19 -41 -17 123 40 -47 54 -5 47 -12 3 -25 45 -75 3 -69 53 3 -69 47 2 -53 38 -10 33 28 -9 -20 -78 -42 28 59 15 -17 -55 127 5 13 -41 6 -49 -34 36 67 89 12 71 -12 32 -6 -27 -43 19 10 48 59 -24 -81 -15 20 -28 -10 23 79 40 37 -83 -36 -18 -94 -23 94 60 55 -17 127 3 10 -30 56 20 33 115 -85 -28 103 83 47 16 21 80 22 -7 -95 31 -35 48 -74 28 -37 8 -49 -74 -17 16 -16 72 73 -61 14 14 -65 49 32 -3 -23 61 -18 102 -65 1 14 -35 50 19 -96 23 24 -58 47 -1 -25 16 -24 -90 -124 43 21 -78 -20 -45 15 -84 29 -66 31 -8 63 8 -44 -12 -34 -8 -5 2 26 95 7 -48 -45 11 47 -71 2 29 49 -49 84 -39 -32 -1 127 -127 52 -122 74 19 105 -49 127 -16 48 -127 11 -65 60 19 51 38 -85 126 6 -23 -67 64 -55 -126 63 -58 7 61 -37 106 -25 -66 -4 -95 127 -42 122 -61 4 -32 83 -7 -73 -107 -2 -1 87 1 64 -55 -38 27 -29 30 127 39 -8 16 56 6 -10 126 -13 -17 -46 20 -38 -42 26 108 -127 -9 27 -19 -25 16 -5 44 70 -49 38 8 14 -4 64 -48 -127 52 7 -61 35 43 -7 22 60 -71 89 -4 -33 -2 51 30 36 -51 2 20 -112 4 -30 -3 80 83 -115 -39 20 -63 83 -94 15 -25 -26 118 -127 121 46 55 20 -10 -33 100 6 18 -37 60 -10 12 49 -18 -50 -76 12 -63 55 124 52 -44 37 22 115 127 -57 127 36 62 -36 32 -65 125 125 -80 88 -45 27 51 62 -65 113 20 -13 11 -13 -57 -61 -105 -9 126 13 5 -66 -15 34 127 14 -11 4 65 44 -27 3 77 -125 -121 28 -44 -10 -98 -11 -128 20 66 -1 -2 55 -3 27 42 -55 26 127 -19 48 -52 -33 22 -17 -17 7 -59 15 48 55 6 -75 27 -62 26 -5 21 -13 27 -45 -4 -7 -124 11 3 55 -106 -14 -32 43 119 -75 84 -104 46 8 44 7 114 -122 -128 -120 25 63 18 -44 63 -12 81 52 39 42 11 -14 125 50 109 -65 -64 -5 -58 80 77 109 -68 56 88 9 74 -125 -23 13 74 -22 -79 -8 -64 2 52 -20 40 57 116 106 -37 -78 125 -125 1 -30 114 40 -82 -78 4 -17 -51 108 -124 97 75 54 -48 -42 80 3 5 -65 -2 -83 -22 -127 25 -15 -50 30 -82 -127 33 -6 83 -109 -114 -127 -125 -35 -83 -79 -128 -3 49 -27 123 3 90 27 60 -102 -7 8 -39 -54 56 21 -24 -8 -70 112 74 73 -116 -13 68 -121 38 -126 -102 -17 43 -123 125 -54 33 127 126 -13 -1 -19 112 -47 -29 -20 -46 30 -31 36 -56 -126 75 -128 127 49 78 -25 -21 -58 0 8 -36 18 127 -41 -35 117 87 -52 -99 -11 125 -115 123 -25 -2 79 -47 46 46 -124 29 98 126 -21 21 -94 13 21 -120 -7 -127 -89 13 -14 -26 -46 -73 16 64 -42 15 81 83 47 -7 -63 117 -44 -71 -123 -25 -65 -2 52 -128 68 -50 -109 -12 -77 30 8 23 -19 75 127 -24 -128 -6 -14 -12 15 -123 6 21 -6 106 123 37 -128 74 35 8 -1 16 17 127 18 1 -20 53 87 48 7 -77 -15 -35 -57 74 -51 -94 -10 35 -106 -4 -33 -61 54 38 -98 -94 60 127 20 -44 -30 -62 -92 -31 -17 -101 44 -60 64 106 57 81 -42 -72 -57 3 -69 -65 69 -5 -9 -30 110 -42 -61 24 -90 -5 -31 -16 -62 -93 -41 -36 -87 112 32 -3 -128 -19 -34 123 -44 -40 124 -36 124 0 -125 -64 29 117 127 -26 -113 -5 69 3 7 -14 -81 55 -19 48 -80 74 6 -50 93 -38 -54 -52 -128 -49 55 91 -88 64 127 -49 34 45 42 -60 112 125 48 -48 9 -54 47 -5 102 -112 -94 25 -7 54 -35 38 -19 -81 -35 109 30 -63 -99 43 -124 80 49 43 -41 -28 -24 97 -27 48 20 -7 52 -68 50 26 -7 33 36 -73 66 79 5 -109 126 84 41 127 -65 45 -2 72 121 0 -41 26 14 74 -12 -78 -114 127 -49 7 126 3 -74 124 -94 117 14 -46 45 -28 65 -47 13 47 48 -9 -5 54 1 -58 -39 68 -16 14 -61 -18 2 110 28 -53 52 26 67 57 -19 -78 -6 -7 -2 -25 -89 -15 17 122 -47 12 -32 -1 -24 -95 -48 55 -59 -5 6 -29 8 23 -17 -57 55 71 24 -22 126 27 39 -17 -32 70 21 -127 -39 -7 101 2 46 54 -20 -116 -40 -24 -127 -24 33 22 -58 40 31 -65 -10 -124 20 123 125 -49 25 -58 -17 -22 -66 17 -63 -11 8 -1 -79 -124 114 23 27 11 -1 26 -1 -29 11 19 -63 -19 -64 48 64 46 -21 -20 49 79 56 -5 -95 10 9 -19 -37 58 -86 -19 53 10 76 32 -109 -64 -10 -37 10 -28 -70 42 -62 38 118 -13 -20 -6 -21 37 -32 -39 127 -11 -26 -57 -16 -123 -27 -5 54 -29 -84 30 0 -49 58 37 54 -57 35 -98 77 78 -58 -107 -119 -51 70 -83 -45 -14 42 -39 79 -35 -20 56 11 -12 23 -29 -26 32 1 -18 29 -119 114 -62 -19 -22 1 -55 -36 127 64 1 -62 3 40 -48 -57 54 -26 -19 77 22 -51 6 61 27 101 -128 -33 -48 14 36 77 -18 103 125 -13 53 95 2 -19 -104 111 48 7 62 -65 -7 -77 -34 35 24 -31 -20 32 42 -40 -68 114 69 64 72 -49 50 -6 -61 127 101 2 -102 114 73 -24 -37 70 53 -50 41 -74 39 -82 -18 45 115 124 84 -5 21 -32 -76 -40 43 -128 -21 51 -52 10 20 11 -60 74 -2 127 -56 -56 -20 -19 -32 -59 70 -101 65 -18 -5 7 48 122 80 -14 -5 -73 45 -7 51 -10 19 -10 -126 64 -64 72 -127 9 -62 6 75 -26 -63 -45 74 -5 -100 32 115 -65 3 -59 54 22 -41 -17 -3 18 90 8 125 37 -67 8 -53 -1 -82 16 71 -3 68 115 35 38 85 -15 4 95 56 -39 -24 17 11 -115 26 12 24 31 -63 -127 -105 120 51 3 -19 119 82 32 115 22 -55 50 39 27 127 -98 -34 -83 50 -20 -112 -15 114 -15 -78 94 -127 0 78 0 -12 -30 3 -14 -33 81 -14 53 -14 118 15 35 113 -110 14 40 -9 -10 33 33 -40 55 -16 2 -76 -28 -4 7 67 42 -96 -49 -87 30 -54 96 -72 26 40 -16 122 -2 13 10 -15 -100 82 -50 -50 -30 19 21 35 -27 59 43 30 -73 -17 50 42 52 -43 24 -95 58 8 -23 84 -45 -20 0 71 114 10 73 -122 106 34 -2 15 -15 35 127 47 -68 31 -119 -10 27 36 -65 4 11 -47 -58 -122 98 -19 -40 -79 -18 2 88 -18 -15 -42 -64 -66 -55 35 -113 -53 -87 28 -127 -95 -28 -70 107 42 -3 -52 -34 -63 18 85 -8 69 -48 -75 20 51 123 22 13 13 -21 36 42 -109 42 23 10 4 -48 -12 -53 24 90 -26 77 -105 -17 -9 -24 -55 57 13 -89 -88 -39 41 -122 45 -20 -63 81 30 -58 98 34 70 -33 5 62 -79 83 87 86 -97 66 -73 6 -52 -111 -65 54 -62 -63 -5 102 -1 -49 -37 44 -39 -20 63 2 78 65 -44 -82 -19 -15 43 18 -38 127 -124 81 49 88 -41 -54 -13 122 -7 87 -43 125 -65 5 22 -52 -35 27 113 67 1 127 -89 -65 -82 54 49 -68 34 49 68 -14 102 -8 -75 64 13 63 86 34 114 80 -33 -25 15 -35 -64 -95 -118 -22 -98 73 -50 -28 56 -46 -112 -49 2 71 -101 -20 -27 -51 64 -2 -18 60 66 -77 127 -27 13 -41 31 8 -75 81 -52 -49 -97 -84 8 72 -3 -99 -111 -41 -14 91 -36 -6 122 26 -122 -67 46 -79 5 -69 31 73 44 3 -13 40 78 -57 -87 102 -27 -39 125 4 52 -31 105 -115 -32 113 -24 72 10 -127 51 68 -60 -30 11 -119 41 113 14 36 -102 38 -86 38 20 -97 -25 70 45 -6 -54 -9 -27 -112 -23 42 -11 113 -9 -39 -20 -111 -55 -27 76 42 -103 -36 52 -10 -89 -52 -115 104 46 -126 -91 -73 -96 -63 34 127 109 -6 -67 -37 31 -9 -54 34 -68 -41 116 -5 120 34 -70 54 -6 -71 -74 -124 -69 38 126 5 123 85 92 127 64 21 -4 -62 56 -60 -10 4 10 57 111 45 19 -2 -9 -46 121 64 105 -2 -105 127 -30 -39 -39 68 -58 108 127 -88 -33 108 64 -23 -7 -43 -7 -97 -63 -52 -69 -72 -51 1 -65 93 -128 -77 -47 46 -119 6 -100 -6 -105 -41 -128 -4 -17 -125 -33 6 40 -10 -127 -46 -105 -37 -52 22 18 76 -70 -33 -82 -46 83 127 42 -70 -19 -22 -99 5 66 10 -20 58 94 -19 122 112 -50 127 105 125 122 15 27 127 126 -24 -127 -67 -27 116 -27 103 -9 -53 -72 64 120 61 -122 -34 9 12 50 -100 90 -122 40 -44 127 13 -29 74 -55 94 71 39 -57 126 -54 98 -126 77 37 -67 -65 -27 121 -106 12 41 -21 -127 125 9 -127 -6 127 -25 -81 16 -92 52 30 41 127 26 -123 126 -45 -19 -15 21 78 9 -32 -65 -67 85 -9 97 -10 39 -12 14 -115 30 -59 -43 -3 73 -39 41 11 87 8 -91 -6 123 -107 -3 -121 127 -127 -102 -107 -38 -90 -21 26 75 44 60 -124 -69 -82 47 -109 -24 -62 118 -104 -23 34 -25 64 73 3 82 13 30 7 -2 118 -24 39 -18 90 126 125 112 -11 119 43 113 108 8 -68 112 127 7 -52 -33 30 103 -53 126 -12 35 -61 -100 88 38 -80 -60 52 -56 6 45 113 -39 21 -58 127 80 -26 76 15 -74 2 23 60 103 53 42 -31 -61 52 62 -81 -60 122 59 78 0 -57 6 69 -63 -27 -20 127 29 -125 36 30 -59 -1 -8 127 -49 -57 99 62 11 31 -2 127 49 5 26 34 80 -46 -86 77 -70 77 2 34 45 67 -70 37 110 63 -46 126 61 127 25 120 23 -90 -7 93 -44 -65 37 -79 -38 -65 22 -17 38 67 126 127 -35 -26 19 5 -39 -48 17 75 75 29 -37 37 -82 -126 16 -32 34 -13 -11 122 -46 -20 -84 -127 127 79 -70 70 -74 -125 27 18 -116 -127 80 36 -29 59 58 -29 8 0 117 5 -57 22 -121 3 -21 75 -83 -48 -51 -95 11 -6 70 -16 -93 -14 56 -45 -84 106 3 -90 -85 76 26 7 -61 109 -72 -65 58 -111 -51 76 9 -112 -44 -34 88 -19 55 127 25 29 35 -26 110 121 -127 -82 -55 -74 -35 54 -128 -108 1 93 -28 125 89 40 21 33 -4 1 -24 127 12 25 -32 -20 42 59 -59 -7 92 -29 -87 78 52 123 30 75 -45 -9 110 92 -112 35 20 -126 -22 -127 -85 -27 -98 12 -95 100 -76 70 -58 -52 -55 -102 49 22 58 -23 -127 -2 42 -10 74 -127 42 -18 -40 123 60 100 -55 -26 53 -43 -8 -24 -54 -20 9 4 19 -41 -61 116 -57 -15 73 -12 -32 41 -60 76 -42 -66 4 48 15 90 -100 108 50 -49 -21 -45 -45 -30 12 -92 73 -48 7 3 35 17 -82 42 -13 -27 91 40 -81 -45 -94 -60 -33 30 -81 -22 -88 117 -51 22 -36 127 -52 -16 10 105 27 8 7 42 103 -82 0 -6 21 62 4 44 -92 20 71 21 126 -5 -14 95 44 20 75 86 67 -31 50 57 -72 -69 -14 -73 -10 -53 90 -26 -125 60 30 40 59 -26 48 -127 -43 -29 -127 -61 15 48 33 -38 28 -2 10 46 -120 -108 -58 -7 -114 -12 -26 -22 14 -59 5 -32 -4 -62 -50 0 -47 80 -30 89 63 98 -10 -36 -15 -43 -37 -58 -56 66 -91 -26 -44 127 -98 -43 40 127 -24 57 3 35 -35 8 -88 33 101 40 -22 91 68 -61 8 23 -42 -71 7 -122 43 -6 72 -116 -39 -33 -35 105 -49 36 47 35 23 -122 -52 6 -38 87 11 -29 17 23 17 39 -25 27 1 -46 70 24 44 50 14 -19 67 -74 -35 81 17 42 -41 -110 42 51 100 -36 -6 15 6 -56 2 -71 -27 38 95 -49 47 5 -42 -92 -21 6 57 -29 -26 -68 -115 115 -126 41 -110 20 -74 -44 22 8 -61 75 -35 -38 -62 35 78 29 -50 -45 -123 -76 56 2 15 120 12 8 -122 -62 63 -121 -95 27 -1 -88 -49 20 -33 126 118 -80 39 62 -35 -85 95 -55 -109 -58 -85 16 -58 -1 -124 119 3 40 -7 121 -2 -49 -114 38 -126 113 -2 36 -17 -21 26 -40 11 60 -7 -106 28 51 32 1 -30 -120 -123 125 -79 94 -34 127 97 77 -75 -64 91 -78 -72 81 31 13 47 -67 -27 126 -53 125 108 -20 33 -77 50 90 2 101 41 -39 59 -6 -10 5 -125 15 -45 0 44 -72 -1 -17 -117 -14 -9 -79 44 112 28 2 -27 -2 -10 107 43 -20 -123 45 0 -48 60 -25 -68 -16 0 121 69 80 45 86 115 -9 63 -43 73 27 -7 -40 -11 27 46 8 19 31 55 96 -46 9 24 15 -115 -64 -28 -50 -39 -44 26 -11 11 90 -41 -127 32 -6 7 95 -27 42 -53 19 -12 70 34 -89 -24 25 12 113 29 71 8 27 103 1 2 63 -16 67 -2 34 7 53 -14 -3 77 -48 21 -42 12 23 83 11 54 56 -11 53 21 31 -9 -23 -66 -16 2 -29 -31 74 -3 -15 -6 63 11 -127 -1 49 26 14 93 7 30 -44 3 7 43 -15 -50 -66 -22 -18 -34 -88 -125 34 -38 9 -28 -2 -22 15 -68 50 6 0 -28 -71 -36 -5 -17 -51 -29 6 -90 -69 18 41 21 -16 36 13 -75 -50 16 7 -14 21 62 -63 -3 -12 7 50 -2 49 37 -67 -24 34 35 -41 48 30 -72 -118 -20 25 15 -44 55 102 22 2 -55 72 -31 -80 -50 -10 12 14 3 -11 -47 -17 26 -71 -35 -11 65 -13 17 -67 38 -61 -24 12 -71 65 7 -60 -44 -49 19 -8 -51 -50 -45 12 27 -24 10 -35 31 -17 10 30 -52 41 4 8 -2 15 -14 -30 26 -15 -70 -10 -96 -66 21 -19 -17 40 -125 4 30 -15 50 8 -1 -60 -36 -18 47 9 24 29 -68 -10 10 -7 -42 84 34 -10 45 32 43 -26 -26 0 -124 11 97 -14 59 -36 5 -90 --26 -18 -10 70 11 -2 -69 -34 93 -62 -3 23 -12 -9 -16 62 -5 -66 15 -76 124 -18 -75 -25 56 -13 70 -5 -25 -96 -29 -27 -9 20 3 -56 68 101 60 4 -33 -27 85 -21 26 96 -51 108 -9 26 -45 96 0 -20 -13 -41 -37 34 7 20 -45 -36 -41 67 2 83 46 -43 -4 -77 11 19 38 -86 12 37 5 1 -32 -23 -26 -64 33 126 18 23 41 47 -95 20 -42 7 -33 -10 57 -97 -61 4 -5 -58 41 68 -38 40 -116 37 -17 10 120 8 -34 -9 -119 49 -28 -40 14 57 -68 -122 17 -14 -13 17 -11 -100 25 -42 -65 -106 -63 10 -34 15 2 -61 28 -79 -5 -42 6 56 13 -128 -114 -83 -16 -64 -34 33 -52 77 42 -7 50 35 45 -6 90 -71 -46 -62 106 -17 33 -6 26 33 2 -8 -57 21 10 2 42 -27 90 -45 28 28 1 31 -31 72 -68 -41 27 -2 69 -40 1 2 50 25 9 48 67 -36 35 14 -30 -45 -53 -38 59 -63 105 -95 -59 -45 -51 -35 -76 -43 -75 76 12 30 0 51 -44 -27 48 -15 -122 -23 76 -36 7 15 -14 13 -26 -4 9 -51 21 6 62 -34 -52 21 31 16 28 -12 -43 -44 -40 -51 -34 -3 -48 -43 -109 -42 11 36 -8 -73 35 -13 -17 8 -14 -7 20 -45 0 38 -40 59 -127 -15 -6 -51 2 28 -20 0 59 -66 37 2 -2 20 45 -1 46 -29 9 -5 15 -17 47 -2 31 22 -6 -16 24 21 -29 -38 -73 0 27 34 48 22 10 -45 19 77 -37 -15 -71 94 4 -76 55 -27 -1 -52 33 11 -22 -15 -13 40 37 -27 125 -50 -20 4 -22 41 -47 -13 109 52 124 -46 67 8 -24 1 -10 41 16 30 17 37 5 25 32 -15 -60 -6 34 18 0 -30 -3 -6 33 38 9 -26 100 63 10 -61 -63 42 1 3 -55 -11 -10 80 59 71 -14 -43 47 -83 60 -37 -51 4 -13 20 -67 44 71 36 -5 28 16 -2 -12 -41 23 61 -59 -23 -14 -61 25 -42 -74 -45 -43 8 -24 -64 24 -14 -27 -53 -36 39 27 -17 -106 -15 -11 -69 -10 -126 42 -71 27 -27 5 -56 -18 27 30 13 59 8 75 0 1 8 53 -24 44 -23 -22 52 -73 -40 23 57 124 -64 -54 -1 -23 78 39 -19 57 -34 -14 37 42 10 -43 -11 30 -24 18 13 127 -41 -8 62 -29 9 98 18 -42 -58 -11 -38 -7 -37 -6 28 23 33 81 85 9 0 -52 69 40 -109 70 60 3 64 -8 46 29 -16 32 -57 -2 15 22 -10 -71 81 -23 -26 -31 17 42 40 77 80 17 -52 -7 -8 0 -16 -17 -126 -37 -40 -38 38 -51 -41 -76 -8 -6 -9 -51 53 -29 52 19 -116 54 73 2 35 -21 33 44 -61 49 -42 32 -26 -19 45 -19 65 -69 15 -19 -67 16 -35 -1 -37 -8 45 -52 39 2 -38 3 -4 96 48 -56 -55 34 42 -19 34 -29 -90 116 -61 -18 -39 20 30 36 -20 3 2 127 -35 -126 34 7 -42 90 40 7 58 97 46 -11 15 -29 -21 -9 -23 16 -39 -62 -47 -7 6 -47 12 -19 7 -32 7 -15 1 33 127 -12 12 -23 -5 -45 -48 10 -19 -15 0 5 -17 -30 -48 14 65 -4 -68 -69 27 -16 16 0 17 -19 37 -22 -18 -26 -114 74 -13 20 -12 -11 84 8 -23 -55 -16 57 37 -53 7 67 23 4 -29 -58 5 111 2 58 -12 -3 -40 20 27 7 -115 -29 -29 -100 26 21 -8 -24 29 -81 -26 29 3 66 -37 40 -19 -60 -47 23 17 -44 15 -22 -49 42 40 39 5 2 92 126 -11 8 11 -57 -30 41 -32 -46 2 35 -30 81 9 -94 -5 82 12 36 4 -30 -54 16 -31 -53 -4 -11 -92 -16 13 70 -67 27 -28 123 5 108 95 41 79 3 45 -22 22 14 6 12 56 10 -14 -27 94 110 -5 -20 16 36 2 30 -70 23 -43 60 60 -1 -61 -65 23 4 27 14 -92 62 -39 -18 23 -43 -13 -53 26 -15 -32 -8 123 27 -78 24 55 55 -38 39 47 7 28 -63 -11 -28 62 39 72 -66 -50 22 49 -4 -36 48 43 20 -43 -18 2 76 -6 -96 60 -59 -37 -23 29 24 76 9 15 32 -8 -6 -36 44 48 -13 16 -16 -64 -36 -35 33 49 -72 2 -47 -89 77 -33 -21 -94 7 -127 -53 85 21 22 -7 -43 54 -110 -30 34 -72 30 45 -29 94 -35 -1 34 15 23 -70 2 27 113 35 49 -21 -90 103 -27 -12 86 37 -9 -12 19 23 -103 -10 126 16 24 -6 107 48 -37 -63 40 -18 -91 6 90 106 -47 -21 85 -19 56 -2 -24 39 -23 87 35 14 28 -46 -6 51 -10 -44 113 15 -36 -7 -78 66 18 49 -27 -25 -12 72 -56 2 -44 19 27 -36 -5 -18 39 -78 -40 -34 -29 -47 13 41 42 11 39 -19 79 -65 26 -29 -23 42 64 -49 33 -4 -12 4 -8 -118 -53 -75 -40 -36 -22 -36 85 38 17 75 -33 15 62 -38 40 73 -5 0 -71 10 -127 -11 15 22 -1 -49 -36 39 -50 12 35 56 -51 125 -31 -66 -3 45 -11 53 -11 16 -19 -29 -37 49 -13 10 79 -63 75 75 127 -24 12 47 8 -10 48 57 -61 31 18 -1 -60 -18 6 -36 48 -45 33 66 -33 4 61 -29 -28 43 11 -48 37 45 59 -6 -62 64 85 -47 65 -25 -43 34 28 -109 17 -22 17 -60 47 -42 -89 36 1 -9 -52 75 -8 1 -38 64 25 -26 -43 86 -34 7 -6 14 37 35 39 -74 -34 30 -69 5 36 -100 15 24 -72 18 36 7 74 -16 -16 21 4 116 17 63 6 -29 29 -20 -32 76 -30 24 -64 53 -10 -6 -61 62 -73 92 -128 1 -56 24 -61 15 2 6 24 20 86 13 19 57 44 -1 64 0 71 -30 48 32 78 117 49 -13 -70 56 -29 63 49 -105 36 39 18 27 58 68 19 61 -2 -91 61 125 12 80 11 24 -28 -21 -19 71 -44 -19 -9 26 -8 9 24 17 -85 9 43 25 -32 -32 -18 16 69 -17 18 -5 38 -9 57 -5 -18 -34 -28 48 -83 11 -58 -52 93 -60 -24 120 55 -21 52 -2 8 13 23 -36 -96 -33 37 -37 -105 -46 33 81 -2 -13 -23 84 18 -4 -38 -30 81 11 -7 18 -1 -17 53 -112 63 9 53 -72 4 21 -74 17 94 -33 -9 25 23 15 2 -75 35 -23 -36 -1 -114 26 -19 -3 76 -13 31 -65 -50 4 6 -79 67 122 13 29 -24 -38 16 28 -27 -52 5 -18 14 83 -10 4 82 -25 -52 -1 22 -28 -34 -100 3 77 11 12 -77 -80 41 28 28 32 -10 116 -9 36 40 21 -61 -33 64 41 -24 43 -55 4 -2 44 1 -37 -12 -10 -4 -21 42 14 12 -39 40 -31 -22 -73 58 -4 44 -33 31 28 48 29 67 8 -21 6 -6 -12 23 54 -46 27 23 -13 20 -38 -17 87 117 -61 38 10 -20 -99 32 -125 12 40 59 90 -16 0 27 22 28 57 39 5 6 29 51 25 -37 -42 6 -9 20 -51 -19 31 39 14 44 -41 37 66 73 -6 1 -22 15 -49 22 34 -51 -29 -31 83 18 -118 -29 -20 14 -21 65 70 -47 11 31 -73 50 25 13 43 -33 97 39 44 -66 -42 -20 25 -19 81 5 -3 3 58 7 -49 -29 106 -21 51 67 -36 -5 -39 55 66 -15 70 -31 99 -7 -84 15 -9 36 12 -33 54 3 27 10 -18 -67 -63 13 -21 57 3 12 -59 57 28 24 11 39 10 -28 -80 49 7 39 -66 -65 -45 -8 -16 -2 46 -98 -37 5 -2 50 -6 14 42 25 8 -7 -14 33 114 62 26 -35 80 60 59 7 -26 2 12 21 -21 45 -19 -53 99 12 37 -10 -77 53 -29 -1 -27 46 -61 -4 -20 15 48 20 -72 82 33 -10 -9 -117 3 5 -2 26 21 -5 -61 -37 67 -50 0 -22 78 7 57 2 127 -13 -4 47 36 4 -40 -1 9 8 -93 30 -90 -40 -52 -2 58 -5 9 -21 -46 -64 108 13 -1 4 86 -3 -37 17 -16 -8 -17 21 55 -55 29 49 84 -18 2 15 5 89 -45 -30 11 42 118 -36 1 -29 -18 37 -11 15 15 -18 -42 -21 -28 -38 12 48 59 -1 -47 -55 57 -5 -12 11 2 -20 -44 0 11 -95 -27 -62 57 76 53 -74 -4 -5 82 79 -31 -24 -3 45 -46 -10 11 -80 -35 23 -39 33 -7 -23 -14 38 -21 -72 -76 -30 27 -13 60 -7 10 -29 -37 62 36 -4 -30 18 -39 -11 40 -20 32 -66 -20 -21 8 17 -25 -12 -19 -5 -34 -16 71 30 53 -55 -20 -7 -63 -124 15 -56 14 45 18 28 -58 47 -1 -4 124 -92 -69 1 15 30 21 -17 20 84 -28 -13 -42 22 37 44 -127 -2 46 28 19 -22 -74 25 -101 -39 48 -46 -31 -35 -12 35 9 -30 9 -4 -14 68 -26 19 -6 81 34 -53 22 -20 -77 -41 7 -3 -12 11 -5 -22 -126 1 -1 19 38 126 -19 -40 3 30 -47 95 33 -20 -33 98 -49 -40 68 -40 87 -30 -46 -5 -94 75 20 -2 3 38 80 58 46 -45 18 17 5 38 35 -25 -57 4 91 20 14 -84 -48 52 6 -65 59 1 -6 39 18 -26 -46 54 9 -59 -2 26 2 -11 21 6 -80 -16 81 -67 -21 86 -86 -68 22 -28 -4 26 -61 57 -25 -45 41 -19 -57 12 12 -67 -43 26 48 -17 0 11 -42 43 -31 -22 -8 1 -40 -21 61 -87 38 17 -18 -72 -32 -13 -6 -38 56 -16 34 39 48 66 -71 -45 41 16 -2 31 9 -3 73 -6 -42 -30 -53 1 7 49 16 -96 -31 -40 70 64 47 59 -27 -14 42 97 29 34 42 -11 28 20 56 -107 -14 1 6 27 -28 32 0 51 -17 50 44 -28 55 -4 -8 -10 40 -18 26 7 47 37 -10 -24 40 -71 119 60 -33 23 -35 30 44 -32 39 84 34 -35 69 19 16 14 -28 7 44 22 29 -79 13 -29 11 -16 55 8 20 -34 -75 -86 32 15 -6 -37 -22 -64 -81 -5 100 -7 -78 53 108 -5 0 -25 -9 -19 3 -60 -39 -30 -8 45 -11 -15 -9 44 -55 -51 48 -28 -63 -56 -19 31 29 -18 90 12 20 -1 71 -7 -13 -3 3 -15 80 -73 37 -34 3 -41 10 85 18 -7 10 80 -3 43 -6 -10 -66 -39 -45 11 -2 -47 115 -32 16 1 -3 38 73 -23 -29 -45 18 -34 -46 -113 34 -26 -29 -53 32 33 -25 8 1 3 47 -63 -13 1 -8 20 23 16 17 -21 -30 52 43 1 -74 17 -35 -60 -44 33 -37 51 70 -30 15 -5 63 -107 -43 6 -18 -69 -70 35 32 -27 -22 4 -45 11 -23 42 -24 51 -41 -40 -42 -8 -8 14 -29 -54 -43 -4 8 -25 -105 -10 24 17 -72 11 25 2 7 -3 -58 9 46 53 15 35 65 67 -55 -69 -116 -16 22 75 -16 7 -52 43 42 38 -29 2 -26 -22 -67 44 -34 -12 -53 59 77 -17 31 -13 61 18 44 22 36 127 22 -1 40 -80 4 7 -99 44 -119 -96 -11 6 45 -44 -17 -37 -29 6 51 3 55 3 -69 -74 127 -82 -19 68 -13 -43 -20 22 -64 7 22 -10 -4 38 17 -31 -11 63 52 -78 78 13 -5 -9 78 -39 -2 -54 7 72 -34 27 -75 -82 -60 35 18 -95 13 113 3 -128 12 8 -51 22 -114 -15 33 25 21 -38 -27 -3 58 -41 12 -66 16 18 14 28 -89 50 -36 50 -52 -71 -52 -76 -6 -21 -34 46 4 11 -2 4 8 -41 19 -98 31 51 -19 1 25 -4 73 55 25 -31 17 -26 55 -45 -54 10 -95 -30 86 -41 -39 -28 45 27 11 36 10 -30 69 41 -51 20 -26 -26 66 -35 39 44 17 -34 43 34 -63 9 -31 18 40 -53 30 -94 -13 12 -25 -25 9 14 -82 73 25 -31 20 -45 27 -84 7 -32 -69 -102 43 41 -38 -7 -16 62 5 -10 -89 9 -58 -15 81 -62 25 -18 -52 7 -6 -11 -118 -87 -11 -26 34 -88 -39 -15 6 32 -3 52 -2 34 19 -47 -74 -19 32 11 -55 10 -126 -85 -27 -14 -61 67 -18 -20 -56 92 -29 37 -18 -3 21 -32 -21 9 -57 77 -18 -127 -69 22 19 -65 2 85 -21 -28 28 6 -30 -10 5 17 -62 1 9 -75 22 -85 63 -51 -55 -2 26 -76 56 12 68 -59 17 -10 80 -32 11 14 -30 13 -3 44 -68 44 23 15 47 -43 -51 56 -46 14 -13 56 20 24 74 -21 3 -4 -24 -22 -34 6 -35 -30 47 31 36 38 -18 25 -3 54 -25 -9 -58 23 55 -39 -34 34 -7 -69 17 -17 -22 -34 -38 79 -33 -14 28 27 16 20 -22 127 -36 20 -36 5 25 19 21 37 -24 27 22 -12 -23 -99 -12 56 5 8 61 3 -38 -83 -57 -58 -18 -30 -74 -38 -26 -23 -50 -43 -42 -45 -42 25 71 47 -50 66 -5 24 38 -34 -20 -48 -12 36 -3 -80 -70 30 -8 48 28 -4 51 93 -41 37 45 11 99 43 79 33 127 100 1 60 1 -11 -4 16 33 -11 -23 65 57 -35 14 -48 -89 90 -22 -12 -1 -34 41 32 -21 -39 12 -33 -21 61 62 -9 17 23 55 34 -8 12 10 -19 -52 -55 -27 3 29 -69 34 -8 -4 -39 19 32 5 24 75 -10 -8 -14 -12 6 17 24 -16 73 -53 5 100 31 -1 25 20 -27 -27 10 -50 -10 40 26 16 -39 -12 -38 -52 -22 47 1 50 -39 -4 -5 -67 -40 -4 26 -2 -67 -16 51 -30 -41 28 83 36 -50 -27 -21 3 -17 -14 13 -4 23 -50 -23 -44 -2 -116 26 18 -70 27 56 -1 -64 -20 -20 -51 44 -12 -15 -75 16 43 44 -55 -4 58 -14 18 23 -2 -23 14 -27 27 -59 -92 -56 -24 -17 -15 91 -56 10 2 81 -24 -21 34 -3 -54 83 26 37 8 9 27 18 60 10 39 25 -59 0 -53 34 -4 -10 55 -34 108 70 -3 17 27 11 -15 18 -3 23 -21 37 25 21 -61 77 25 -14 -79 31 85 66 -10 16 -18 -39 -15 64 -37 -10 -57 77 7 -7 -33 0 72 32 94 12 29 -4 39 -28 -3 65 12 -27 -5 30 12 31 -26 88 40 -14 -28 6 -24 27 3 -29 81 21 -22 -10 -59 23 -46 -18 4 27 47 -2 24 -17 6 0 67 12 -26 -67 -23 -48 56 12 -15 29 19 -25 -39 -29 -47 -15 -21 -8 54 1 91 8 27 -17 -25 58 0 34 0 -21 10 -33 -116 65 91 -56 6 22 -14 16 28 31 -51 127 -48 -64 -1 -23 -25 -44 -8 -96 -3 29 -33 -25 53 50 68 33 -26 15 115 35 40 54 -12 -47 -26 125 -59 2 67 -33 -27 25 32 -3 -11 -51 -25 3 68 -2 -8 -25 42 -11 -19 3 -13 -4 -18 57 49 20 12 24 -56 -9 37 3 5 -14 27 -84 50 -31 7 -1 -39 -48 -55 10 39 39 3 12 127 -101 34 5 28 -21 8 2 -70 18 23 -16 44 -56 -5 16 -9 -81 -8 -8 33 -31 -87 17 13 -33 -31 -40 -18 37 27 3 56 21 48 36 82 -15 -20 -127 1 16 -18 12 64 15 21 -23 -21 -42 6 -13 103 -1 18 25 -2 -54 54 -8 -52 -33 -25 -25 -38 -15 74 -40 -34 52 -37 11 3 44 9 37 -19 7 41 5 -36 3 91 25 -21 16 36 -9 22 -50 -17 12 -34 16 29 -8 -33 -65 -53 -16 -54 -11 15 11 -47 13 44 7 14 -79 -38 -65 -65 40 56 -94 60 74 -54 12 -32 -47 44 -3 -7 -103 53 127 26 21 40 26 33 -21 7 48 33 -6 -19 29 12 79 28 -54 -25 -59 83 1 -1 -41 28 0 40 -28 12 -28 50 48 50 -5 -17 5 -35 -8 -62 -12 -90 -45 -16 -117 -122 -10 -118 55 -2 -128 -11 -18 16 30 15 13 -8 14 62 -45 -8 41 -28 30 40 10 18 -60 -54 -43 43 16 2 -5 127 -37 -72 83 48 -24 71 25 -4 -37 32 6 -30 22 45 8 62 9 -9 -67 55 -9 -21 -8 6 83 -18 36 30 48 -17 46 -68 -30 -4 -29 -15 -28 -47 7 5 -65 -2 -125 62 20 68 -41 -3 30 -16 75 -27 -9 -65 15 -24 -19 -58 38 -24 5 44 -10 -46 47 51 19 -61 -27 18 -43 -21 34 -37 -63 -44 -54 -48 -49 60 2 -1 20 -20 46 6 -22 29 -23 -4 -16 -2 49 -47 -9 0 2 73 -72 -30 70 34 74 -60 -37 29 -19 -2 72 -77 21 -14 13 -124 -125 -15 23 24 -2 -2 -59 -36 92 59 -8 -18 97 -36 -17 -26 19 74 51 6 -69 -56 -72 -42 -42 55 -58 -5 -55 54 -24 -60 5 -113 3 -1 -8 55 -17 0 25 -28 4 5 -61 -11 54 65 52 -102 -10 57 9 -49 4 -14 7 -23 -4 -22 6 -44 -34 -5 -50 22 -62 -42 31 -7 -5 -26 -57 21 34 21 -7 29 1 -53 0 26 -99 61 36 9 -62 -43 62 30 27 -78 66 -30 40 21 59 -57 -43 31 -32 34 12 60 -41 -9 45 20 39 -93 107 11 -19 42 -12 15 -12 -40 -59 52 -45 -44 12 5 20 40 -92 22 -20 35 -62 26 -62 -36 39 -25 8 -11 -68 -42 22 3 -42 -11 56 -80 40 3 1 -77 -17 87 49 94 80 -35 -64 52 -25 -125 51 57 40 -36 -27 69 -19 32 -3 -8 9 31 8 -46 15 6 16 21 -37 3 12 23 -4 74 -25 25 -62 127 42 39 60 -9 -33 -15 -23 82 -1 12 -79 96 -111 47 69 1 -37 9 -41 -36 32 10 -56 30 8 35 -33 47 -85 -23 14 111 62 1 1 -18 -6 -78 -56 -34 -20 -6 -44 -59 27 38 -17 -25 26 37 -30 25 -14 -45 -9 84 24 68 38 2 -61 35 -14 16 76 60 6 30 22 -93 28 36 24 2 -41 13 38 25 -95 59 12 -89 -73 2 -78 37 -32 -37 6 10 2 -48 -22 18 -90 -22 -13 -68 -18 -25 79 49 -45 -5 -99 -16 94 49 -22 -116 -9 -62 -60 23 -5 -1 34 4 -7 -15 59 -56 12 13 29 -14 69 17 -17 36 -3 44 -85 46 -14 20 -41 -82 9 50 -60 18 -3 -70 -47 73 -16 -10 14 -84 -30 -6 85 56 32 -9 1 61 -30 36 -58 0 15 -13 11 8 -41 -3 0 -21 20 -33 -69 1 -32 43 29 51 37 -77 42 -33 -11 19 -17 -60 71 18 -21 -8 -10 -15 39 58 105 -88 -16 -27 -15 -26 79 56 -53 17 16 14 -50 -48 -29 4 -8 -26 19 -7 41 33 -22 37 -73 27 -10 -27 -20 -6 30 20 -34 16 -17 77 23 -19 -36 63 -80 27 0 -61 -36 -71 -20 -78 8 -68 -89 -49 39 10 8 -78 2 -57 -23 86 -22 -74 25 37 -3 -38 17 -18 -97 -8 -40 -30 51 59 5 10 16 23 -4 -9 -35 10 -44 40 7 34 -5 -46 3 -25 -31 14 -52 109 -10 48 -27 42 25 -35 38 37 29 61 -56 61 -29 -9 -7 88 -23 -44 74 -6 36 -26 23 33 47 -51 -74 -12 17 95 -4 24 6 -41 10 43 -37 -37 25 -32 4 -52 28 80 -38 25 3 -16 6 30 -75 105 -34 -35 51 31 54 23 92 -19 -31 76 20 15 -32 113 28 -11 -29 82 2 5 97 69 92 -77 -9 -7 3 -53 11 15 29 -57 -125 -28 -17 34 14 2 12 7 -75 -84 -37 -37 -29 -49 -32 -97 -63 -19 -3 43 8 -27 10 3 -14 21 -46 -57 123 86 -29 54 -38 77 6 35 -5 -19 16 -47 -33 72 -53 -43 -73 -57 -41 -25 11 45 -51 -38 26 20 -48 -75 28 86 41 -17 32 -47 -36 70 -1 -36 -30 59 -14 67 18 -37 22 -21 13 6 16 -49 31 26 -13 35 36 2 -67 49 19 6 6 28 -82 -3 -9 4 -73 -30 13 -111 37 -8 14 -23 -33 -31 66 -32 14 56 115 -16 -3 -25 40 -34 39 45 -54 39 30 56 -3 -14 -93 9 -84 30 42 -2 -20 -39 -46 -26 -22 30 22 15 -24 88 -10 18 1 -15 -76 15 15 16 -23 -62 2 -80 -49 39 8 5 48 -18 34 27 50 20 -14 -45 -38 19 23 -53 -83 -13 -55 -61 36 -22 19 57 20 20 48 -33 -4 -1 46 -36 -77 43 51 -56 -93 35 -24 63 -6 27 15 -27 -11 -62 19 -11 -68 -10 -13 114 -77 47 36 -43 -60 22 13 -73 104 46 -34 57 6 30 90 -5 8 -17 -52 -49 -34 -10 10 -66 -30 -40 43 -11 -5 69 -20 34 93 59 -40 -51 -83 -10 68 -60 -43 -17 41 10 14 -4 -9 126 -67 -46 -35 -66 11 62 50 33 -56 -33 -37 -42 77 80 -13 37 20 -54 -16 -43 33 -25 18 47 -67 34 -26 59 -88 11 4 -15 -2 54 3 -43 67 27 41 -12 -16 -45 -30 26 51 14 -40 -60 54 -13 24 -9 36 35 57 35 58 50 -24 -70 48 -58 -56 3 -13 -41 -7 -27 57 -90 65 66 8 -7 88 -16 21 21 -38 -48 -7 92 88 16 -84 -23 -46 4 5 -24 24 -2 -50 42 -15 26 -52 11 -26 -12 -77 89 5 -5 2 12 3 119 0 10 -70 -72 -34 41 74 73 -16 -49 -50 -24 0 -18 16 -4 25 -36 65 -19 38 9 -36 50 -59 -40 -47 -5 47 16 -8 24 6 -49 35 3 -45 44 -38 5 92 24 -41 66 -9 -55 100 -19 -19 33 26 13 -75 3 -12 -7 -2 36 28 1 -67 -51 -32 -33 -2 -5 -10 -49 23 40 4 -56 -8 -110 -16 -51 1 -56 -30 10 -16 -20 -66 58 -93 56 -87 -12 -6 -22 14 -16 57 -22 40 -4 -5 -39 -33 -34 86 -4 21 12 2 39 95 124 -29 59 22 22 -6 -17 16 81 26 18 -39 -88 55 -12 37 -25 59 -29 -9 -31 40 -81 0 85 126 -32 1 12 30 -29 0 56 -6 27 -37 2 6 38 -24 -20 42 19 7 27 -55 59 -13 11 -13 49 71 35 67 -89 -15 -42 -30 -18 -9 -14 10 -18 13 22 -12 45 -11 -19 57 8 -8 43 -10 25 41 -18 42 26 80 90 -10 -12 -34 3 64 -5 26 -22 -4 -7 -76 48 2 -35 -13 72 -35 -36 50 -34 -17 -77 50 22 -19 0 102 -3 -103 8 -57 13 -67 -51 20 52 -29 -11 -39 -61 20 107 -51 20 -3 25 26 -53 -60 -42 0 -9 61 87 -27 -68 -9 -30 15 40 57 -25 -4 14 -77 12 37 0 -56 26 -37 32 57 -5 -43 -12 12 7 -4 41 -90 107 29 -45 22 -87 -61 93 -81 33 -51 5 -76 -20 -66 12 -17 54 14 -23 -47 -30 26 6 -36 -15 34 101 28 41 48 36 -1 14 79 26 40 -11 -51 -17 -101 -30 -41 35 -73 -47 -18 16 15 94 20 -18 -38 27 -27 -23 -10 -22 51 -9 17 -17 29 45 -18 21 -56 14 -34 84 -25 -79 -40 86 -94 -15 -37 1 -3 80 -37 36 -35 5 61 -26 -4 31 65 20 1 -37 10 -126 33 -47 19 -1 -10 -23 53 74 65 32 -48 7 -49 -35 120 12 16 80 -42 -41 88 100 62 -61 101 22 -62 17 57 1 3 -101 91 28 15 -18 68 -6 50 2 58 31 59 111 9 -22 -16 59 -46 44 53 -45 -42 31 -116 -18 19 38 -56 61 -28 -36 -29 -61 68 33 -57 53 -93 -34 56 81 124 -54 30 8 -71 -13 -59 109 -14 52 -92 -44 22 -81 -69 -48 -26 -93 43 -76 -70 22 4 -40 -46 -18 -17 -17 -22 9 55 -60 -74 -79 -20 -12 50 10 -2 -28 -45 45 -82 20 -45 -67 3 63 -114 -33 -37 20 -33 -52 -88 -50 -33 -29 67 25 -85 19 43 -4 63 -12 3 -47 -37 -24 52 21 74 40 -50 -7 -7 121 -14 122 124 38 21 4 -21 73 55 13 -56 75 86 5 -17 -2 -6 -3 -60 -5 24 -9 51 -24 0 13 -68 29 -34 -45 14 -46 -29 88 -36 -36 -20 39 23 23 3 -17 -12 -49 -47 115 50 -87 -77 -53 69 33 21 -26 4 27 17 60 42 -14 30 4 46 22 -51 97 -47 -10 -22 -64 97 7 -38 3 -21 33 10 -28 -14 -60 26 66 -30 -55 40 2 29 -9 -24 -31 58 -13 -87 20 -19 47 -50 -91 -14 -72 -7 -17 86 -34 -38 19 36 -70 -33 10 12 -5 -28 79 -32 -53 91 102 74 -96 47 66 -79 62 24 13 -27 56 -12 34 47 -28 50 -78 -12 -28 -92 44 28 -10 89 47 -16 47 35 -82 38 74 -48 -16 22 -52 -17 22 -96 -7 46 48 35 69 -22 15 109 47 -7 7 49 1 63 44 8 2 -24 91 -102 -20 65 10 -48 -1 127 59 35 -38 85 -117 -16 77 103 -12 -10 -55 110 -9 44 10 -34 -29 17 16 -58 84 33 -42 41 10 -50 110 10 15 -95 11 -27 -31 11 75 -21 25 -18 52 -4 -127 -43 -16 -19 11 -81 -36 50 62 -64 -47 25 30 -26 -7 -121 -52 45 -7 76 18 -23 -41 3 -52 68 48 63 12 -70 24 -56 -76 16 20 10 0 7 -44 -24 -22 23 -80 -12 -21 -16 16 -28 17 -90 41 63 12 -36 -6 42 -17 21 23 30 70 4 19 -16 -111 -42 -44 22 -54 -25 22 20 61 -14 -45 2 -28 -43 74 -46 14 -17 19 -29 42 32 11 12 -43 -78 76 4 93 15 75 -29 79 -7 19 98 -51 -4 44 54 49 30 -16 -4 57 15 103 -8 61 -13 82 32 -30 -30 -15 3 15 -1 -50 50 52 3 -79 -35 -12 -46 14 126 88 -60 -127 7 -6 2 -23 -27 92 -45 61 87 -38 -43 -40 51 18 4 22 -34 -26 -26 49 -13 -63 49 -127 55 -20 -37 -32 78 -92 -73 -30 -15 -34 58 94 47 12 2 -14 54 92 -37 -14 91 15 48 -33 20 -8 -83 19 -10 -90 -103 -106 70 5 38 35 -114 -44 -64 -22 13 12 -8 13 16 39 -14 -47 34 -33 -23 24 19 5 -47 -18 -21 -72 51 49 33 82 -45 -42 4 40 68 -60 -16 -1 1 4 47 -27 -9 49 -7 -13 47 22 -5 -5 -77 36 45 12 72 20 -38 -15 -49 40 58 17 16 -64 44 -81 -21 31 -61 -22 -35 -9 -117 -23 44 -61 29 -1 -39 -65 -17 116 44 -49 12 36 -95 -127 -7 -24 38 110 23 -7 -51 41 48 97 -28 35 -52 -13 29 42 25 15 -31 42 -41 -58 44 -15 -47 109 5 -35 -58 19 2 15 -11 -22 101 -29 -41 63 17 -2 33 7 -45 61 69 -49 -9 -64 -10 0 -45 -29 -37 19 -31 -64 -38 -50 26 19 17 33 10 -35 9 4 17 -29 43 25 -21 24 -86 -53 -57 10 37 -56 -8 -54 19 -27 -25 -10 13 -2 -19 23 -1 -41 24 41 -47 63 -55 102 9 5 -5 23 -34 -48 -11 40 -42 59 28 -58 -25 -21 100 52 3 56 -92 -5 120 -10 53 30 39 -44 8 40 -32 -45 28 1 -28 20 -67 28 -23 -120 -15 -128 13 44 42 33 -11 -22 33 -18 88 -26 -47 -4 -35 44 19 -60 25 -35 127 29 -31 36 -21 25 -12 61 60 3 32 -6 0 5 -54 39 32 17 -11 23 46 45 -121 23 -12 36 54 19 13 -27 9 -21 107 19 5 -7 18 50 -30 16 -18 40 -19 -11 -1 -29 -33 84 -13 61 61 -17 19 -1 -7 31 26 0 20 12 -9 44 33 3 -7 -43 -35 -41 11 -5 -39 0 -57 -33 -6 -29 17 -48 -72 -50 -57 45 -93 14 74 -55 27 -38 3 -109 57 -128 40 -58 22 -2 -6 -127 -69 -4 42 106 -26 75 -17 82 -11 -25 -54 83 -15 -69 -29 10 -21 40 0 -53 26 90 64 39 -9 -74 -37 118 98 66 33 30 2 19 -55 -16 40 -14 88 35 2 20 -10 -51 -63 29 -49 33 -8 62 24 103 91 -16 -22 0 -96 -56 71 9 -77 25 43 -1 -8 17 48 -27 41 -12 125 -5 -36 -49 1 23 55 33 -45 28 -9 83 69 -56 -21 23 -7 -37 -25 18 8 -42 -39 38 -70 43 8 -50 -65 -11 -48 37 20 -28 35 -35 11 38 17 -27 25 -10 20 -93 2 45 -65 -112 8 -13 -48 3 -19 26 -20 42 -5 -5 13 50 -20 -12 -36 -29 -113 46 -15 -83 24 -15 -8 -8 11 -14 40 52 -33 -97 16 -14 61 41 23 -23 -56 67 -35 13 -67 13 -102 55 43 -8 3 45 110 -37 -15 98 10 -14 -7 88 -36 73 126 7 31 -44 96 -63 31 40 37 3 -125 -28 -9 20 9 -45 50 -65 -31 32 -4 54 45 15 27 42 16 22 64 6 -7 -15 -17 -1 31 -39 -67 -14 24 -20 12 -60 -23 7 -2 -21 44 -15 -126 61 -2 88 84 19 32 -32 16 31 -96 43 34 29 26 -81 -96 2 -3 55 -40 56 24 -84 -60 36 -68 -26 -29 -7 28 -66 -21 6 -62 1 -35 -37 26 18 26 -31 18 -14 24 -49 -33 -15 73 -17 -6 27 -9 -68 59 -8 -41 68 -46 110 38 -3 50 -24 -65 -14 -13 -58 6 -43 54 -90 -6 15 -36 -93 4 58 7 37 40 98 -66 72 -22 -6 29 -31 35 47 -7 -127 74 22 47 -13 5 -5 47 -30 30 3 -22 -64 40 59 -14 43 66 11 -1 -41 -17 42 4 13 13 28 26 41 -49 3 16 -111 -120 67 -13 30 1 5 36 -64 89 -29 20 71 55 29 27 -50 36 18 -15 90 122 51 -26 81 2 -6 -5 -29 -67 -36 -17 31 78 18 -57 19 9 57 8 27 -32 -32 16 -19 12 68 -6 32 40 -28 -51 -24 13 -20 51 43 -10 -36 5 -10 48 -8 55 62 -17 -41 -19 -49 1 5 -57 45 -67 42 -55 27 45 -117 125 -55 -2 -55 -11 64 -15 -1 5 28 12 26 7 28 -20 -70 -13 1 -32 37 -92 -28 -3 42 -3 -4 93 40 3 -8 54 -22 -38 -16 12 60 -25 61 -10 16 -95 18 7 -32 26 -47 -22 7 -23 47 9 -64 43 -38 17 -32 32 26 -14 22 -43 21 21 23 -15 -16 62 -7 57 32 -64 62 -21 -91 25 13 37 16 -45 44 -15 -11 10 -45 -12 -6 -34 -55 40 15 51 -7 2 20 13 -113 27 44 4 -76 5 -21 -60 -48 24 51 20 26 12 90 -77 0 37 11 -64 7 -18 17 2 3 -31 -13 32 74 -16 -12 11 12 22 33 4 73 6 -6 21 -25 61 -68 36 -113 -54 10 -28 -75 -1 58 27 -54 24 6 -33 25 6 44 35 11 -27 -36 -67 50 -57 -26 15 54 47 -24 18 -10 22 69 22 -8 -6 -16 42 -115 4 -78 27 54 -17 -16 35 -47 -13 -53 -15 -5 9 27 28 37 81 -63 27 34 -29 -24 -19 -20 -25 13 5 -53 -9 -39 -43 -38 43 -30 10 -12 8 -38 3 11 47 -35 -36 -19 50 -16 4 70 6 19 30 -37 -25 -52 -10 1 35 -22 5 -10 -10 17 8 -58 -49 7 -3 -10 -32 -105 -51 1 60 14 -21 -18 -33 19 -31 -9 34 -21 -79 -35 -21 -23 57 32 15 -49 11 -39 -9 111 9 16 -20 -15 49 -30 17 21 -21 -41 -44 -31 7 -26 -5 -24 -9 40 25 15 8 0 20 36 -114 -43 29 36 12 110 -78 66 41 -2 -41 68 3 -127 -89 57 -8 21 48 60 2 -18 13 2 12 -21 42 -93 3 -38 -26 48 -64 -24 -50 38 13 24 76 67 51 15 100 -72 9 -93 -84 -52 14 10 -12 -46 21 26 -25 -8 -44 60 -25 -19 -42 -19 32 -36 11 -13 -49 -60 -22 -23 68 -45 52 34 -57 12 -13 30 -57 4 76 -36 -57 -11 11 -55 25 56 20 30 71 -84 -21 -27 -15 35 -12 -1 12 3 -2 -36 80 5 125 -60 -85 -10 6 0 18 -20 -3 -28 58 11 69 12 -11 -23 -14 82 13 1 -46 10 -53 -91 38 -19 48 83 -56 -73 15 -28 47 2 1 -62 91 51 -21 34 -39 -11 -3 -8 37 73 -15 -34 -102 45 48 -2 -126 68 -18 -53 57 5 -5 -1 97 -47 -87 -17 -11 39 108 107 68 34 68 46 58 -41 32 37 -119 -45 -50 -81 93 -23 51 45 -44 -52 56 1 11 -47 72 8 29 -19 63 48 -15 44 -105 7 -55 38 35 -65 -3 25 -28 -19 -21 -33 73 -27 71 -13 37 -62 -59 -26 80 26 -102 -35 -86 -48 -5 -6 16 18 -45 -57 3 74 -122 2 30 70 10 -34 19 21 5 28 -12 -74 -60 43 32 -22 10 22 29 43 -34 10 -12 42 17 29 -56 61 65 -25 -39 0 16 56 43 47 -18 -22 -7 -59 -9 1 -12 17 19 -50 114 72 62 40 48 -34 -68 5 22 1 -40 86 29 -46 35 39 26 -28 79 -24 -45 73 20 1 -92 106 -23 49 3 -10 21 -69 9 -12 -3 -32 -23 -65 -43 100 94 74 -64 -62 -14 9 127 5 43 -30 -54 14 81 -28 -12 32 38 -11 -1 4 -50 12 12 -21 54 0 15 19 23 10 8 22 23 26 35 -36 39 -34 -29 79 36 -22 70 31 -91 -22 -20 2 -91 -43 -10 20 -14 -25 -56 24 -68 61 -12 68 -9 -27 -124 -71 0 -44 12 34 -27 -26 -46 -44 -51 -60 -46 -8 37 -49 -12 37 75 5 -19 6 -73 20 -8 -3 -62 6 -32 33 48 67 9 -53 -75 -23 2 -80 -25 64 41 -107 25 119 26 23 -54 5 0 24 49 2 -59 -43 -30 14 -24 56 -34 -63 -76 -7 8 93 5 -95 70 43 32 63 -16 -16 76 -6 -44 -44 3 73 13 60 -12 23 -23 -26 -35 21 12 37 9 62 -18 -31 -9 62 14 -16 16 -13 -33 -9 -63 11 3 -10 13 32 64 -19 72 -69 -36 -79 45 -5 -36 48 0 31 31 36 -45 28 -21 44 41 -76 2 -36 -24 -7 -5 -18 0 69 35 -21 17 -66 -2 6 28 -7 5 -43 -2 14 -56 -31 -7 16 -78 -6 -61 -42 1 -53 -127 -36 7 -53 43 18 67 -17 -25 48 -27 46 -34 0 32 -3 57 -50 -15 -52 25 -8 -51 99 -35 -93 -12 55 7 -91 -21 51 9 -96 -28 -1 -124 -37 -60 9 0 -69 -7 -18 -46 -26 99 -40 43 73 5 -45 22 -83 -55 -15 2 -89 -23 -7 -18 33 33 -30 -70 -41 127 58 33 74 -26 -110 5 -120 73 16 6 14 30 59 82 13 32 60 -5 1 8 75 3 -83 29 -36 23 -120 -9 13 -94 48 11 19 -67 100 9 30 -5 -39 9 -12 -38 -110 126 -51 -11 -76 72 57 33 61 -22 -87 -7 91 78 26 9 1 42 -84 33 22 58 28 17 -2 0 -61 -40 -52 -72 -23 -22 -35 120 -24 23 -41 -2 17 18 105 35 2 -9 127 -29 52 57 44 -22 -15 30 -14 -85 65 -32 -43 -22 -41 -1 -4 -19 -13 6 -31 45 38 -13 6 6 -20 -20 -2 7 2 18 67 4 16 12 -43 9 36 -13 9 -8 26 18 4 16 11 19 41 -42 61 58 33 -28 20 -1 57 -7 26 41 41 -2 -13 18 -15 8 22 -3 -7 52 15 -5 4 17 0 -38 3 3 50 7 18 3 -4 -14 -23 15 13 -7 14 2 15 4 22 -9 -21 -23 -15 13 -15 -6 -31 -9 -16 5 6 3 32 -13 46 -49 23 34 -19 -31 7 -13 14 20 3 -15 7 -18 7 -42 -14 22 21 -6 -6 8 -8 -22 7 -41 -3 -19 -23 7 -16 -30 -11 -9 -6 -6 6 -31 -33 -6 -27 17 18 -4 -19 -6 -4 26 -22 19 -114 96 0 --18 -3 82 -51 1 -42 27 8 -35 27 -8 -7 -16 -33 24 -2 15 8 -29 -9 -7 -9 39 10 2 -18 -19 -10 -50 -3 -38 -101 -28 -16 5 -27 24 -66 -9 0 41 13 4 -54 3 34 -48 9 -5 12 -25 -40 6 7 -34 -47 -22 -30 47 3 12 -26 2 15 4 -12 -20 -16 -3 -9 6 39 -15 -7 -48 -17 5 -23 -26 -28 -22 -20 37 -49 3 -4 -4 27 -21 -22 -15 -1 -35 -35 -33 -42 12 -25 -39 52 55 -11 -6 6 -10 6 -9 -6 1 -14 23 4 -63 44 -69 18 41 6 -38 -42 -17 -10 8 -8 4 -5 -28 -17 -29 -20 -19 2 -7 21 -13 13 21 -13 -22 7 13 -8 -11 37 -19 -33 28 -36 -25 -9 19 -9 -17 50 -54 33 18 -6 27 40 48 1 -6 11 -31 24 26 -24 17 -7 -23 -7 -1 18 -11 -12 8 -12 21 0 5 -10 -27 -8 -23 11 -39 14 29 11 15 24 -19 -23 -43 -18 32 -21 10 -15 -34 -8 -14 24 7 28 21 26 -12 2 16 11 29 20 -39 -10 -28 34 3 -2 30 10 -3 -4 23 27 32 28 -17 22 -10 -23 5 -4 22 3 -17 2 -36 16 57 -7 -29 -23 24 -26 -1 8 8 -4 10 -36 27 25 26 -18 -38 13 -12 22 -12 -11 20 4 -7 22 -15 -39 2 4 -6 -12 -37 1 -1 19 18 12 49 -19 -9 -35 -43 -30 -5 -21 -8 -22 -8 -2 46 -10 -15 -2 -43 4 -27 0 -13 25 -14 16 0 -18 14 -19 -26 -8 2 27 2 11 3 20 -45 -3 -66 22 44 20 -25 -13 -27 -21 -1 11 3 -10 -4 41 -11 -17 8 8 30 -35 11 18 39 -12 -20 21 -30 21 -23 -1 -4 -53 15 1 -4 -12 39 26 10 -5 -31 19 6 -29 -61 -14 3 6 -20 4 -11 9 13 31 -34 -17 36 9 -4 32 -21 -37 -32 9 37 -4 -47 -32 57 26 -3 12 -2 29 24 -3 -18 -57 0 -24 0 3 -12 18 33 26 5 -18 -5 -17 -29 25 -33 21 -21 16 -23 3 10 2 11 12 -3 -52 1 31 -15 -12 -6 3 5 9 57 27 13 -38 -25 8 19 29 34 -5 15 -25 -8 23 -5 -7 32 3 15 12 -20 -10 24 22 52 28 0 22 25 35 68 -47 39 -18 -15 -14 -13 4 6 6 16 -38 8 3 0 -21 16 25 -38 -8 14 34 32 24 -15 1 12 13 -18 -11 -4 0 36 22 -5 9 10 -34 -27 8 -35 5 -20 -9 -26 -11 -2 29 -10 32 19 2 -7 -16 19 6 9 -6 -24 -2 10 17 18 24 4 -9 -7 37 38 -2 -14 -6 20 -34 -13 24 10 6 9 -12 -11 17 -7 10 -30 4 5 -23 -16 -11 -4 1 8 -42 25 -15 -17 19 7 -13 -13 -31 -25 4 -8 -10 -25 11 15 8 9 3 21 10 0 13 22 -5 -5 2 61 86 -39 -22 -45 -16 -14 -4 9 -93 14 12 -38 27 -1 -7 22 -23 -1 74 -17 3 -11 -70 -58 -52 5 -13 49 34 -71 -73 57 -62 41 7 7 4 -43 -63 9 69 -22 44 0 13 -7 30 -28 24 -21 -13 -39 9 -22 58 44 1 -24 -5 -39 9 28 -28 -25 -45 -6 62 11 -8 11 15 16 -19 -12 -1 11 4 1 2 57 1 -39 -28 -33 -3 28 -19 15 -2 2 26 -14 41 -16 14 -20 -8 35 16 -1 -22 1 33 -21 -21 40 26 6 54 -31 11 -24 -44 45 -8 14 -40 -28 -8 46 17 3 2 5 -23 8 -10 5 -29 15 -48 -15 38 20 41 -58 1 19 21 28 -23 -2 -4 -11 -5 42 6 -52 -4 -3 -5 -21 26 33 -30 0 -24 22 19 7 -18 -2 -2 19 46 27 1 18 73 9 2 -36 16 8 24 -16 9 8 -12 25 68 -10 6 2 -16 23 64 -6 -10 18 4 -28 -33 2 -28 6 1 -2 -3 19 -11 13 7 36 -21 8 12 26 14 -13 -39 -5 -2 -25 -8 6 15 -3 19 9 6 3 57 8 -1 -3 7 -12 35 15 14 15 -9 20 26 23 -24 3 -17 -28 16 36 19 -28 -12 -31 12 44 -37 3 42 11 13 12 60 38 30 7 -16 -4 3 24 22 9 11 -25 14 -15 14 -5 -13 -27 1 12 -6 27 49 -19 19 -26 -2 -3 38 31 -14 10 -53 32 61 -81 51 6 0 -8 6 16 -46 -9 -17 -35 22 53 -13 -33 -34 12 15 2 -41 23 34 -16 -47 20 25 -33 3 32 -16 -13 -50 5 -28 -44 -52 -15 6 50 -32 -3 14 -8 -27 6 -1 -9 -58 -3 26 4 -28 65 56 -4 21 5 20 -4 -36 -72 -39 -10 -3 22 48 -58 -48 -13 37 -34 10 -98 -35 -78 6 -9 45 76 -21 -30 -40 -4 -20 3 -18 16 -3 5 -81 20 3 -53 41 15 34 14 -18 -9 55 -40 2 21 -45 -19 -10 27 -44 6 66 -7 -10 30 -31 -32 -34 -1 -13 46 -57 -13 -1 12 -37 -10 29 26 -55 33 -4 12 41 -29 -9 -29 13 6 -24 42 6 34 -13 2 2 16 34 1 -24 -3 12 -56 22 18 25 -37 1 -25 59 -40 -2 -14 -9 18 8 -42 18 11 37 -4 -12 -9 -24 -40 33 -33 -18 17 3 -20 1 56 -65 18 -5 -7 -35 6 -74 21 9 7 12 -5 -5 11 -5 13 11 -42 21 -9 10 -11 28 40 3 30 30 3 -8 14 -22 0 17 16 1 -14 19 2 12 -24 -19 -26 -5 30 -10 -13 -48 47 -5 -23 -3 34 -19 -47 -30 36 -12 -34 36 -5 -30 24 -2 49 12 40 21 -40 6 -30 4 11 4 61 31 -14 -15 -12 -2 -12 -45 12 10 -14 53 13 -4 3 -34 -10 -33 4 65 9 21 14 9 17 29 13 -25 -55 -56 -40 18 -15 7 41 -6 51 -6 12 -28 19 21 8 49 61 24 30 22 31 40 69 13 13 1 7 48 48 -67 -37 15 30 65 41 5 35 -26 9 12 30 -15 29 3 12 20 47 -25 26 -33 -35 42 -18 -29 56 1 -17 15 5 29 37 -4 26 -33 3 14 51 1 -12 51 -27 -13 -51 41 -21 44 -12 3 -9 6 74 -10 -45 13 -42 25 80 57 80 -18 48 -5 4 -57 12 -55 26 -64 10 1 -14 1 11 49 26 -8 12 44 -30 6 -1 9 -19 1 -34 11 -4 -45 11 5 -39 -10 -20 -5 -2 -2 11 -2 -7 -16 5 -16 31 0 -13 -17 28 -10 -3 26 -62 -36 15 9 -12 16 6 51 22 6 -19 -21 29 63 -36 53 40 -2 -46 13 -48 52 -11 46 -34 -42 -41 -78 -35 0 -25 8 -19 44 -18 14 -50 7 13 -11 -18 -40 11 6 2 58 -11 70 -12 -8 -37 -11 24 5 -24 30 30 -27 -4 -25 6 -2 6 5 18 -17 23 -30 -15 7 34 -16 -34 10 -22 34 -18 -9 24 12 -3 -30 17 -11 17 -3 14 27 17 21 -21 1 4 42 -51 -3 -1 7 1 -9 -5 4 -18 25 25 1 11 12 1 5 -18 21 -11 -13 19 -33 24 -24 36 -16 -23 -4 -12 32 -45 65 -5 0 -8 23 -42 -4 -22 36 -6 35 -20 6 -13 -4 9 17 -2 23 12 6 -9 17 10 -14 -70 35 -20 45 -6 7 22 -8 26 7 29 -95 -58 57 24 -15 9 20 25 -14 59 13 24 19 36 -12 21 -66 -5 -7 -11 -22 7 -18 63 4 9 11 33 7 -14 14 31 19 12 15 35 30 48 7 11 -5 -11 -18 23 25 -36 -37 52 20 8 -15 -30 28 -16 11 -16 -7 40 -2 -13 5 11 32 36 -36 27 -13 12 27 -14 74 -52 22 -20 -8 13 23 49 -22 2 -14 -6 -23 14 -42 4 -51 1 10 8 -3 -5 13 20 7 12 -11 23 3 32 5 9 -31 -37 3 30 -1 -5 -24 -38 -46 -5 -36 2 -18 -23 -39 18 -30 -21 -18 -23 -6 20 48 29 7 9 5 3 -11 -24 19 -1 26 4 -27 -40 -32 29 -39 16 -16 17 -20 -21 27 4 -5 9 -39 7 23 -11 -59 -7 -2 43 -57 -65 67 -22 -21 17 -24 -16 -48 5 3 15 -44 -45 55 18 9 19 -26 -15 -11 -41 5 -7 -8 2 11 31 -29 -30 -10 25 13 11 40 -9 -16 13 20 -12 21 -3 11 -1 12 -24 30 -16 5 30 4 -11 11 -31 -22 -46 26 0 13 0 -7 13 58 -9 -46 -14 -1 10 -20 -44 -5 16 -13 35 7 26 -53 8 -16 8 -31 12 -30 1 -13 8 -1 -28 -3 3 -17 33 1 -14 1 -11 -9 2 10 38 -32 25 7 5 -25 21 23 29 17 22 24 13 -10 -28 -20 -31 -8 33 6 -6 -7 -54 21 -9 -13 42 -19 -17 29 48 0 -39 18 -22 -10 28 -41 -37 23 52 -37 -3 -20 -26 24 -32 -27 8 -47 11 -16 3 -12 -15 -24 -12 -2 44 2 7 35 26 -32 5 -37 -9 30 -40 22 12 -3 -21 18 -83 30 19 9 -17 10 9 -24 -25 -13 2 -41 13 50 -20 -14 -5 14 25 -52 -32 3 39 -7 -3 -26 29 25 -75 12 -4 -13 -18 40 -26 -21 23 4 -18 -67 5 -49 -1 18 9 21 19 -10 3 43 -9 34 -19 55 -35 -15 41 -18 -27 19 7 -25 -19 -44 -15 1 -21 -46 16 -28 19 37 -55 -20 -45 -5 27 -7 1 -38 -13 5 -11 26 -6 26 -18 30 -12 2 46 -3 -28 -17 -18 24 42 35 17 15 -14 -1 -1 28 14 -1 -4 12 17 35 -35 0 -23 -10 -1 20 -56 4 -13 -13 -10 2 -8 16 -7 -11 -31 26 -11 16 43 2 -16 -11 -12 -20 -6 4 14 -31 28 13 1 -16 -2 28 -1 -6 -11 -2 -50 3 -5 19 -3 9 -8 11 -16 1 -14 42 9 -18 25 20 -5 -10 -14 -4 20 -30 2 -36 -25 -1 -15 -23 -6 -40 -19 20 -12 -15 7 18 34 -21 0 -13 10 -12 34 21 10 1 -42 27 14 27 -11 20 -2 -16 5 1 -22 5 8 -30 -18 31 11 23 -6 -2 -13 -31 31 -27 18 12 35 -3 -20 -15 -10 0 6 29 9 -8 8 -10 32 8 50 25 12 2 -56 16 -18 9 4 11 -22 61 -77 2 45 -55 53 19 -51 0 -8 -23 8 15 18 123 13 65 29 74 -11 2 -67 -40 27 20 33 -33 -4 -37 -1 -44 20 -20 33 51 20 25 -15 0 -40 14 1 -15 56 -5 8 38 56 40 -27 -11 58 3 -22 -15 -44 -18 1 -68 24 77 -71 1 26 -15 -52 -12 -60 16 48 28 18 -13 44 41 28 8 -60 1 -18 114 13 -18 48 24 30 -42 26 -12 -9 -26 10 -49 22 -31 28 -30 -58 -1 12 3 30 -43 -13 74 38 47 24 16 -21 20 -14 41 20 -14 29 25 -40 15 25 36 -30 11 24 8 33 101 -13 29 35 77 30 -52 -21 22 -3 56 3 24 1 17 -28 0 66 -28 -29 90 -9 23 17 73 65 15 33 21 -15 21 49 -38 7 -22 -39 28 -22 18 15 -9 -11 -18 49 7 -61 -33 -53 15 -19 -26 -39 -35 32 1 -18 -9 27 35 19 0 0 2 -38 30 20 -7 -13 -59 1 -19 -13 -26 -16 -6 46 3 -9 -15 2 29 -21 -5 -9 -11 -2 8 -15 -5 48 -6 18 1 -22 16 -8 -36 33 -17 18 -22 -11 39 9 -12 14 27 2 -10 -13 38 -3 22 21 -40 -35 -46 2 28 -38 2 -19 3 5 -37 -12 18 -9 0 -65 -9 -4 -6 -40 8 -6 -20 2 -16 -10 37 11 -7 1 -4 9 -20 -5 -14 -26 -7 -1 35 -1 -4 64 -39 52 9 14 40 49 5 14 -51 41 -14 -37 -60 28 -43 32 -11 49 54 15 -48 -8 -21 21 -95 -7 7 85 -19 -13 14 -26 20 35 -6 46 42 28 -13 37 -35 -21 27 -22 18 27 -7 -1 37 17 -24 -36 -11 57 3 -37 -36 19 30 -16 26 53 0 -40 19 40 74 10 -11 24 -31 -1 -19 -4 9 -85 -3 -9 11 11 -27 8 19 -50 -25 21 -38 -33 23 2 23 -35 -77 19 -52 -39 -30 42 5 31 -23 15 -18 -14 -52 -15 -34 15 2 -8 -17 -24 -10 1 -28 5 12 -17 -36 -4 36 -3 -22 -26 -22 -3 -22 52 55 -25 1 39 -10 -22 32 8 22 -37 31 21 -68 -18 15 7 20 34 6 -6 -15 -33 2 8 -60 10 -12 40 20 -21 45 30 30 -16 -51 -45 37 -32 4 0 -8 -32 -7 33 45 8 -19 -52 20 -15 50 -10 -3 -9 11 -3 10 4 -38 21 2 -16 -14 -25 -11 15 -11 36 2 -38 3 -21 12 12 7 -32 -10 3 40 -21 0 23 3 48 -15 -23 1 -20 -16 -22 7 -10 -1 34 -30 19 -15 -35 24 -39 5 -25 24 -9 -29 -38 -7 -19 -11 -74 11 22 -11 3 35 -15 9 -13 -36 7 7 11 -8 -5 -5 -9 -5 8 28 -33 -3 9 17 -24 13 -12 6 -4 17 -3 21 -12 -11 15 -7 -17 6 -26 44 -16 12 -25 -4 5 -1 47 34 -35 -26 -61 18 50 -17 6 -43 13 99 -7 -9 6 24 -67 11 23 -41 18 -5 -94 30 -13 5 46 19 -16 39 33 -3 -37 -13 0 19 -23 13 -71 -12 56 27 33 0 -1 -5 15 -74 12 -53 -90 0 -44 -50 -24 -11 -42 25 -62 -11 -39 -2 -62 32 -80 -23 -31 18 -27 -14 -41 -40 -7 -14 -29 6 27 28 52 -9 -59 -60 9 4 -66 34 34 38 -39 -30 34 -71 4 -6 -26 53 22 -20 -27 -19 62 -33 -56 -48 0 -9 10 -45 17 31 -8 4 -34 22 12 3 24 10 20 -25 -10 -42 -32 45 32 53 29 -2 -25 -3 10 -3 2 8 49 -1 39 51 -9 -16 -12 -42 11 -28 0 18 53 21 -19 0 -10 -18 -19 5 6 12 20 -29 -5 -24 61 -8 0 -77 6 -42 33 26 -27 1 -2 45 29 -3 54 12 53 -5 25 10 19 -26 -8 10 30 4 48 -6 17 34 14 3 0 0 8 -10 -24 19 8 -4 -1 26 -48 -13 51 18 -1 -34 -8 -20 4 -22 -9 -4 -4 -3 -24 45 -7 -38 33 9 22 -27 19 0 13 16 52 -29 10 36 54 -8 -8 -8 -43 -17 -15 29 41 -45 -35 -12 8 -59 9 -18 25 -11 -20 -24 7 16 13 10 38 -32 -33 12 21 9 -12 -30 -44 0 -62 5 -33 13 -12 19 15 -47 -20 4 -37 -7 23 -13 -29 -10 0 -24 -13 -18 -1 -35 68 -50 63 26 -10 4 2 7 4 20 21 -20 -5 18 -47 40 -30 -22 1 11 -3 14 -43 -83 6 4 -104 9 -39 24 42 -16 18 16 5 38 43 -8 27 58 -16 -19 -6 4 -17 -7 -50 -4 44 33 19 -34 -13 29 -18 44 -13 -43 32 43 27 30 16 -40 39 54 39 -4 21 12 19 6 86 -8 -35 38 47 18 -3 -5 17 17 45 -49 30 18 5 -12 54 -9 -2 17 -10 26 -23 -19 31 -18 -23 3 -19 -27 24 11 -16 21 -63 5 -5 0 -20 -39 51 -6 -53 -32 -5 14 -5 21 11 35 29 -19 -34 -9 -21 -29 -36 47 16 13 -13 8 -2 -15 16 10 9 -7 2 -4 -27 31 -5 -27 -2 9 40 -11 3 -16 51 -54 17 -16 2 37 6 -28 -20 -28 -29 -24 11 -10 2 -16 52 -22 10 -7 -7 3 -42 11 -22 3 45 -13 25 -23 41 0 -20 40 -77 38 23 -20 -32 -33 -12 -2 -7 -8 -4 -19 -22 -35 23 -25 -7 3 -8 16 36 2 3 12 -29 -7 10 23 6 25 0 3 -16 26 3 -12 26 14 -11 -10 33 -32 1 34 15 -1 9 -37 16 10 6 36 -6 11 -18 -19 29 13 31 2 1 -6 -6 -28 14 1 6 -27 7 -67 -19 4 -18 2 -32 4 -12 34 29 -28 12 1 -19 -8 18 14 -6 2 -12 -9 10 -37 -31 -24 -28 26 -2 12 2 30 25 -15 7 -11 23 -7 4 -21 -11 9 -1 23 -29 63 27 50 9 -2 -35 15 20 6 -3 16 -64 9 7 16 -22 12 -4 35 -4 -12 64 12 21 -31 -3 -19 17 -30 27 31 -14 -68 -8 54 53 34 37 -31 22 -20 -37 -38 23 -61 -58 -67 32 2 -60 -6 -24 8 -49 -24 -28 -38 -7 -4 26 25 8 -16 45 14 39 21 15 3 -45 -22 -9 22 -21 -17 14 -12 -35 -13 64 3 -21 -37 16 7 -12 -17 -4 6 -2 -32 0 23 43 -25 -21 -36 -34 6 7 14 5 10 7 25 10 22 -55 46 -28 -2 -4 10 10 16 -27 -12 14 -18 38 -41 -2 -29 -27 22 6 -32 3 11 -18 -17 26 4 -27 9 20 9 -21 -40 -49 -49 -20 3 -44 -34 22 -29 34 19 -5 17 9 -30 14 38 -36 20 -24 3 -28 22 22 -27 -12 -47 12 11 -30 23 6 41 -22 -7 11 -7 28 -12 -14 -36 -37 10 14 -19 7 -1 1 -9 9 -2 10 -11 -18 -10 48 -3 -12 13 15 38 8 -15 -30 -2 -7 -3 -9 21 6 -18 -1 22 -30 -8 19 15 37 12 -25 -20 -12 10 -18 38 -26 8 -11 8 5 -19 12 12 6 24 -7 29 -7 39 5 -13 21 -26 25 6 -16 -10 -24 18 -26 3 25 22 5 -8 -15 17 -17 23 -35 18 4 -25 -15 22 18 15 -34 14 -22 2 -1 7 17 13 20 6 2 -5 -31 -1 -19 4 46 30 -6 -15 30 -110 22 -16 38 -13 27 -37 66 69 -21 -9 -37 -17 42 -4 -21 -8 -14 33 64 45 -18 33 -51 79 -36 63 59 -27 -20 35 -38 -11 -19 23 10 -24 0 -8 -11 6 14 21 0 71 34 30 6 35 -48 -10 -4 6 96 19 21 -20 -5 12 -20 23 5 18 -3 -30 -6 -25 32 19 11 42 3 18 62 15 -13 -1 24 -20 3 25 -28 17 4 -17 26 35 -4 4 -28 22 36 21 -54 13 -12 4 -16 10 -22 35 4 13 9 -6 33 -27 10 -15 -17 -32 28 13 40 0 -8 11 -20 0 5 -27 22 30 -9 -5 30 -6 -36 9 -15 20 39 -2 -1 12 27 32 9 -17 9 30 13 30 53 -4 24 30 12 29 -3 5 32 -1 18 -62 5 -44 7 29 -19 36 12 -12 -23 -6 10 24 -19 9 30 -2 31 -30 16 -46 3 -10 1 -12 -20 -22 -11 22 40 -11 10 17 17 -31 3 9 5 25 -7 21 -8 25 13 21 -50 -1 -26 -43 -26 6 13 16 -37 26 10 0 -7 17 1 -10 -14 8 -20 20 -13 -38 -13 24 1 8 -19 9 -40 -2 40 -28 2 4 2 16 -4 4 -31 -16 -13 7 -35 1 13 4 2 -12 -7 -8 15 2 -1 14 -11 -13 -32 5 -20 -19 -21 -32 7 -2 16 14 25 -6 -24 38 -12 -46 32 1 -27 -18 -35 -15 -13 -37 44 36 -9 -9 -31 42 37 -33 -1 5 13 5 47 -25 1 67 -20 40 21 -16 -27 48 12 -1 -10 59 -24 45 58 71 -9 17 64 72 -12 5 9 8 -40 7 -19 32 -15 58 60 20 8 38 30 3 -17 -14 73 12 15 27 -16 -43 16 47 -29 28 40 21 39 26 22 -26 2 -32 -8 -73 37 54 10 -25 18 28 42 -31 -5 18 69 -14 -58 -30 37 7 -10 58 59 38 26 36 11 -49 12 56 -48 44 8 15 -42 1 -14 -15 21 21 27 31 40 0 -3 25 18 3 29 16 36 -17 -2 -18 63 4 0 -50 13 -11 5 26 16 37 5 -11 52 -11 -21 -16 -8 -4 2 -7 -17 -9 -17 13 -22 -15 34 22 50 34 -14 31 -23 15 -8 -7 11 7 -23 -20 -24 -25 -10 -66 16 -20 -23 43 -26 6 52 2 6 -33 8 47 -15 -46 24 -12 -4 61 21 6 -26 -25 -4 20 -19 -23 -19 2 10 8 25 10 0 23 -7 -14 -54 -9 -27 -13 11 19 -28 12 -4 25 -3 -26 27 -8 -22 -19 0 14 12 -24 21 -4 28 -16 -11 11 13 14 9 0 17 26 -25 10 18 -8 -1 -12 24 -32 2 39 -9 -30 -28 19 -1 -8 29 -2 5 -25 0 19 -7 -23 23 -24 25 1 18 -61 3 19 19 -27 35 54 10 43 31 50 -14 7 -2 6 -39 -11 -26 -9 -8 -27 25 29 -15 -4 12 -9 -4 -23 41 -16 -27 -3 -29 12 -18 -36 20 16 16 14 20 -1 6 -58 0 -22 -38 46 -12 -25 -33 9 -26 -50 16 -19 29 64 -15 9 16 -3 -12 23 10 -26 -9 -3 11 -12 26 -11 6 -3 -15 12 12 -18 -46 -29 29 10 20 24 -2 7 -8 -2 2 20 1 28 7 42 -26 -8 -63 -17 17 34 41 -36 25 16 12 17 24 28 2 -27 -16 -30 10 -36 -30 6 8 5 -14 -17 -24 10 20 42 -19 4 35 -9 8 -13 -11 25 24 -9 -26 10 -9 -32 -14 -5 2 -23 -20 -34 35 -23 -28 -11 -19 46 -14 -8 5 -38 1 5 -14 -1 -5 1 -2 10 -50 -18 -4 33 6 -20 35 9 -14 16 10 38 -26 20 -26 23 17 5 21 -1 -3 11 -29 14 -37 21 -6 18 4 15 -13 37 -24 9 -23 -42 5 -26 23 3 7 51 -1 17 -11 56 -34 -19 -2 -13 -23 -1 -15 -5 30 23 -7 18 -4 -1 -29 3 17 -41 -7 -27 -32 -18 -5 12 24 -10 17 -2 -33 4 0 6 -1 7 18 1 -14 2 -23 -8 -6 43 -27 -4 -5 5 -23 -34 -29 12 26 -3 -12 18 38 -14 6 18 3 -15 -7 -11 9 -8 15 -25 14 26 29 -30 -22 -33 18 -13 10 28 -38 2 14 21 14 4 -12 0 -12 -12 -23 12 0 -25 22 14 34 3 4 17 -6 16 2 40 -24 47 -4 33 -31 -27 31 18 37 -33 0 -35 -16 -10 -18 -2 -37 1 20 27 46 12 -5 -40 1 -34 9 29 -10 -13 27 36 -35 11 -12 -6 -12 -20 -56 -4 17 4 3 2 1 13 -10 -37 -36 -33 11 -5 -13 -8 35 -26 -35 45 26 26 -47 -4 -29 4 -13 -28 69 31 48 35 -13 5 58 -31 13 -29 42 -17 20 18 22 7 -31 46 -16 15 -17 -5 -27 2 12 -32 5 -20 9 5 -1 11 18 -26 16 -45 10 9 31 6 37 19 -11 0 -25 -12 1 -51 33 -13 19 -2 9 11 -16 23 -7 34 2 -18 8 9 -3 -11 31 6 35 5 -29 2 -27 -12 -38 -14 5 25 -3 1 -12 -27 21 -37 -13 12 -15 14 8 2 -18 23 -25 -50 -42 0 22 2 -37 17 -10 -12 -16 -28 23 -5 -8 -24 20 -23 -7 -27 -48 35 -19 28 -1 -27 -25 -14 4 0 27 -27 -7 5 -42 0 13 2 6 -22 9 -17 9 -18 19 4 3 -16 9 -27 8 21 -10 17 -4 -6 21 8 9 34 -6 -12 -23 2 4 -3 5 18 -4 11 13 -2 -37 8 -8 47 40 -23 30 -6 15 -5 -6 -5 -23 22 5 -16 -33 -7 17 -8 5 -8 -29 16 -21 16 -10 -10 -11 -18 -24 6 -13 -16 14 12 -48 -18 20 40 1 6 9 -6 34 -22 41 20 -15 -6 21 14 3 -18 -2 -5 7 23 2 -11 -1 13 -30 5 -39 14 -2 -5 14 -17 10 -20 -27 37 -45 95 5 31 61 20 -3 13 3 37 -11 -18 -16 52 -9 -21 4 -14 22 56 -17 -22 -24 53 -45 24 100 -3 9 -33 4 -20 32 -16 1 11 25 -18 -23 -44 -2 -34 37 -53 55 60 -16 6 -22 5 -21 5 52 58 -28 -7 -4 5 45 -35 11 -22 -5 63 -72 -9 17 17 -30 -1 -110 43 11 -4 -13 -31 11 -32 -21 -10 75 -5 -34 18 56 -12 -4 49 -13 23 -3 -16 11 4 9 -24 -15 8 -6 -2 30 -17 50 -3 0 20 -4 36 -22 34 -29 -17 -19 23 1 -25 32 5 29 0 -48 -6 -1 -22 -1 0 28 9 -10 -5 11 -40 30 -31 -7 37 -11 -49 16 25 30 -10 8 -23 -16 -14 29 -23 -30 -1 45 -11 -31 -37 -5 3 2 -27 38 -18 22 -10 28 -4 -11 17 11 -36 -2 -2 14 -47 -15 14 30 27 -27 -19 4 36 8 -18 18 -8 -8 15 13 31 -15 -34 -3 -4 -21 21 -4 23 -1 21 10 -6 -8 -13 7 -16 11 10 -18 5 -14 14 -31 -15 -12 -7 6 -12 -5 -9 0 7 1 16 -10 -9 -14 -27 22 22 -32 -33 18 7 7 -10 15 41 -44 8 -35 7 -1 -20 -8 1 26 11 22 -28 2 7 -18 -11 22 13 -8 -2 -27 16 -33 4 1 26 1 25 -13 14 7 23 -20 1 24 -21 -11 13 -32 -23 -11 -53 -3 23 14 40 10 -7 17 23 41 1 -11 54 25 16 -32 10 -24 -55 55 -1 23 30 -49 12 37 -45 29 -19 6 23 -5 22 62 41 -33 0 55 45 2 -24 0 32 -16 -30 -8 27 -5 29 -19 0 18 -31 18 26 10 34 2 -22 5 -3 -42 -6 18 -5 78 75 18 -19 23 -9 -10 55 24 -29 28 -6 -20 -21 14 -21 -20 46 -6 7 22 -41 18 9 25 20 49 15 -12 -26 -12 17 12 -29 1 52 -7 -17 -1 18 -26 -6 -12 23 -12 -34 7 24 -18 -16 32 -23 -1 23 -9 -45 -14 -22 13 -9 -19 -10 -40 -10 2 5 -35 21 -24 -23 23 46 34 17 -12 -15 9 -23 -4 24 -9 -42 -9 5 -8 11 1 48 40 4 -12 -9 -28 1 19 -36 23 -24 -1 -7 12 -10 -12 -37 -4 19 -24 -48 -15 8 -24 -32 4 11 -14 -5 -3 -9 21 52 -11 -22 -8 31 -15 1 -7 10 23 -5 6 25 1 -36 13 -2 29 6 26 -23 16 28 5 -12 11 5 4 45 7 6 -22 2 -14 32 -39 -3 -33 7 -19 5 1 4 4 0 43 10 8 0 -6 27 28 -8 -35 -22 -53 6 43 22 -5 28 30 15 -14 8 -19 15 -27 13 20 31 18 -33 -25 -11 7 -10 22 -29 -9 18 -2 -7 -27 21 11 5 24 -5 -8 14 -7 0 -24 -7 8 33 10 17 13 -16 14 26 -5 11 -43 39 68 38 4 -26 47 2 -55 -28 -37 28 71 -44 13 17 -31 26 11 -67 -7 16 12 -18 -27 -54 -70 10 18 -41 -37 -55 -40 59 5 81 5 19 -18 27 -7 -18 -53 19 73 1 11 -57 -12 12 -34 21 -6 22 -1 -20 16 5 -17 -34 -58 -18 32 -39 0 -14 24 -43 33 11 9 -12 19 -2 8 6 -15 2 -17 13 -27 21 65 -23 -27 -20 -21 3 55 -1 -31 36 13 22 -18 -12 65 7 -33 15 -3 -11 15 30 -13 10 8 44 14 29 7 -16 -5 -18 -9 -5 -3 6 11 2 68 -2 20 25 -2 39 35 -18 3 10 -71 -47 -26 17 -23 15 -14 -16 -9 -18 23 -65 -18 -27 -14 -31 -56 9 -2 -25 17 -97 -28 -34 32 -3 91 26 -49 3 -28 -25 -105 4 -1 36 -1 -20 -60 21 57 16 -13 30 -16 -74 -6 -59 -15 30 9 -41 -17 -33 54 -18 -14 -17 -47 -78 -28 -5 0 13 -24 12 -6 23 5 42 -24 8 -19 36 -13 44 15 2 -10 -5 -15 -8 7 -11 -11 24 -22 -15 4 11 -15 -13 1 -23 39 -25 19 9 0 -13 -18 -23 -36 6 -25 -14 -3 23 -12 19 16 -11 26 -32 37 2 -25 -12 -1 -3 9 2 -47 25 -3 -3 15 -5 37 28 -7 -5 -22 3 -37 -20 32 -25 42 17 -15 -4 17 -16 36 6 -21 63 -3 -6 -61 -27 5 7 -43 24 -42 20 35 65 -53 -10 8 37 56 -4 14 -20 4 -36 -27 34 12 -44 25 -42 -11 -34 -22 14 -32 25 -26 -32 45 31 -47 32 -9 38 45 -39 -8 -49 -29 -61 -1 7 61 6 0 -10 1 41 5 -11 13 -80 -47 -30 -12 -12 17 62 -10 16 6 37 -49 13 -39 -13 -63 8 -30 -28 20 -36 28 22 -64 -25 -10 -11 -51 7 -8 22 42 -25 -56 -13 43 -4 -8 -10 -21 -32 53 -25 -11 -38 -10 9 11 -48 20 -50 -9 -13 -33 -53 19 -28 1 2 -44 -27 47 -12 -13 6 -17 10 -15 63 1 29 -16 -8 4 13 -2 -5 19 6 -21 -65 -17 54 41 3 13 17 -17 24 19 1 -28 40 -11 -37 -6 -10 -11 -9 25 -40 33 -7 2 2 1 -36 26 13 -10 -8 24 26 11 -21 45 36 -39 -16 76 -30 -26 -11 14 -33 -13 4 24 21 -36 -27 3 10 -44 9 11 50 13 26 4 -6 -16 -8 -5 1 29 10 20 22 -14 -2 -38 -30 23 -40 -4 -35 -18 1 49 16 -17 8 -10 2 18 -21 -9 5 -11 49 17 -18 -2 -13 7 20 -2 24 10 -36 23 22 14 0 26 11 16 -15 -3 10 -19 -11 -25 1 -21 11 44 27 6 32 31 15 3 -17 10 5 3 34 -13 -3 44 9 -8 33 9 -20 -38 -17 -8 15 -7 2 6 -20 12 22 -5 28 6 -28 8 -6 3 -21 16 20 -6 52 -37 55 -12 -1 38 -15 -44 52 -6 26 -3 -48 46 -55 49 -12 -26 32 17 56 65 -10 27 -2 -15 -35 -114 -5 -71 -109 24 52 -16 88 46 0 -40 -23 31 -16 36 -31 21 -6 49 -47 -47 -15 74 -6 26 -3 -45 9 63 -20 -8 -81 127 -18 53 -4 45 62 75 -5 -15 15 34 96 -3 72 34 -49 -31 5 71 41 48 10 -35 48 16 -6 78 30 23 98 -6 12 96 -10 81 33 23 4 -6 -14 -9 44 37 -75 23 26 12 45 -54 -33 -17 6 -46 3 35 61 15 -28 15 -7 18 -5 -18 20 -81 -4 18 -21 16 -16 -56 22 -13 -5 28 -26 12 -26 38 -24 63 -30 13 1 -11 62 -18 -9 19 31 -59 32 -15 -15 22 -25 -29 -58 -57 -11 32 -3 -48 -51 -1 96 -12 11 -4 -15 -6 -40 -34 20 -27 -38 44 72 -34 -42 57 49 -62 36 32 -13 1 27 31 -29 -3 3 -68 -16 20 4 4 -18 -50 21 10 -27 12 -37 -41 -11 -63 41 29 -15 5 31 -50 73 6 -11 17 30 4 1 -5 -32 -19 -8 4 -26 37 -10 18 -35 -52 2 -21 -13 -22 0 -2 19 -3 64 -8 -16 2 -1 -24 -57 -9 27 -36 16 -19 -1 -4 -7 18 9 -9 -15 -46 -4 7 23 -13 64 -14 24 26 -43 -46 40 16 -7 13 21 1 -7 -20 31 38 -47 26 43 -23 -56 -5 53 33 30 48 62 20 41 10 27 27 35 38 3 52 18 26 -67 -18 24 82 14 67 23 62 47 -18 -58 -52 31 39 -23 -16 -14 -3 64 10 10 47 -16 -37 28 12 16 -38 -60 33 -24 -10 58 -29 48 26 50 1 17 41 14 -26 72 -2 78 19 19 -2 -13 21 -57 3 -19 -13 27 -29 -69 -3 -43 -22 -27 66 -31 -1 26 7 15 -7 16 5 -13 89 14 69 -40 -11 -52 4 32 10 15 -34 15 -30 27 24 -54 74 -27 -18 -14 78 -43 -13 14 43 -30 -36 -50 5 -17 -6 -1 -35 31 4 40 -59 -11 29 6 -13 15 -14 2 10 54 -13 1 17 27 -26 2 22 45 -39 -3 0 11 -53 30 -15 5 -57 20 14 -7 44 33 28 28 -2 -47 12 4 -16 -19 -55 4 -7 12 -14 9 15 13 8 19 32 -10 -36 -6 -5 -68 -15 -7 11 -17 -33 47 10 -27 3 -74 -63 35 -42 -60 44 5 -17 0 14 -10 20 14 21 -15 -17 34 -10 2 21 0 -15 -40 27 8 1 39 -4 -50 9 45 -23 -17 16 23 -15 1 5 -17 7 3 -53 -12 -8 -21 -8 -5 10 4 69 51 -22 55 25 -4 41 -27 -16 -31 13 51 -4 24 -21 0 21 5 1 42 19 -13 38 -21 19 -4 -10 3 44 -57 -8 11 -13 -3 -47 2 27 -9 -26 46 -2 22 23 -18 -38 3 16 15 3 -17 -20 35 -14 -2 -1 5 -32 -31 54 -13 23 6 -22 -5 22 -6 6 3 -26 25 -4 7 -3 2 -19 -31 -30 -36 -23 26 -28 -22 14 -32 19 -42 61 -32 8 -16 -28 -42 29 -13 32 0 19 15 -13 -53 -29 -17 -10 10 -30 6 19 -13 -25 32 12 -19 21 16 4 -5 1 -3 41 -7 -39 -33 0 14 29 33 1 33 -56 -37 0 19 15 23 18 -16 -43 -14 -30 5 -60 5 -14 19 37 -1 -3 -31 -3 22 18 -22 12 29 9 12 16 -12 31 7 3 26 17 9 45 12 7 -5 16 -14 9 0 13 -11 -24 6 28 5 17 2 -24 -26 -24 23 37 10 -45 24 -25 -2 1 -10 -18 -8 -4 -17 12 -3 45 16 -36 -10 10 -1 -9 -17 -4 -18 11 13 -28 32 -22 -12 2 9 -39 25 -28 -22 19 32 2 -26 -55 6 -14 -15 9 10 44 -61 -30 3 -15 6 -41 -11 4 22 -5 14 14 -2 -7 -19 -50 12 -6 5 18 -10 -27 -12 11 -1 7 -34 9 4 -7 5 7 -16 9 18 -18 22 5 17 -5 16 5 8 -12 -33 -35 -19 -40 -34 -46 -37 -9 -17 -11 -28 -19 -11 2 27 14 6 8 5 -19 -11 7 -18 -7 -23 10 -11 32 26 -13 -1 -25 33 21 3 11 -7 11 20 -4 -4 -24 3 -11 -21 2 -5 10 15 -9 15 17 -18 -3 -31 -1 -14 17 15 -17 -8 7 15 -31 28 4 17 -59 -30 21 44 -23 -79 27 -4 -59 -4 -125 -57 -74 100 33 44 38 -37 -5 -56 1 -76 87 -47 -40 2 -40 -41 -17 17 -73 -80 -118 46 52 -38 -26 4 -27 -56 -52 -1 -3 -11 33 31 -3 -30 8 21 -1 -37 3 34 -43 -91 -62 -47 14 61 -61 -12 43 -25 -33 -13 -89 -33 -32 -43 85 -29 -61 -85 -62 -105 -37 -17 -83 5 39 -27 -6 -45 -95 -56 -54 6 15 -51 9 -41 -33 -67 -41 -33 79 71 -1 -8 78 -76 45 -27 -42 -36 -36 -34 -46 -10 31 -74 30 -16 -4 -68 34 18 27 -8 55 17 -39 -52 -11 55 -10 -4 -36 -15 -46 23 44 27 -19 42 2 1 31 32 -7 56 -40 -30 -2 -39 -52 -94 78 28 34 -38 -27 27 -19 15 -4 -3 5 68 12 -20 49 97 71 -43 -8 13 -11 -31 -15 -14 -68 -14 -23 -8 28 55 -6 24 23 -2 -49 -21 -60 27 -16 -27 -42 -45 -16 4 18 -24 -8 22 -47 -43 -14 9 23 -11 -53 13 10 -30 -29 -51 4 -19 24 23 -7 -5 -9 0 11 -20 15 3 20 -23 53 17 -52 -3 -25 -9 -10 13 -3 -46 -30 22 12 56 31 9 10 -21 16 21 19 36 12 37 -32 1 55 9 55 -20 4 32 54 -14 -23 18 -38 5 52 4 17 38 -29 -27 -35 -7 -72 7 15 -6 29 25 15 -78 -5 -70 -7 46 27 -10 4 5 -14 -19 55 -25 -28 -28 -14 15 45 27 -26 26 -22 1 39 1 -6 32 6 50 -70 13 15 102 15 26 81 58 81 -78 -2 11 -22 -3 21 -86 2 -55 -30 -102 20 36 -8 91 21 -30 -16 82 49 6 -1 21 -13 -10 76 3 33 7 -26 -5 -7 2 34 18 -42 -39 15 0 40 82 56 -24 29 50 43 30 92 44 17 47 52 9 100 85 34 18 -42 -10 30 28 74 61 -19 -13 -27 32 -32 22 -10 -1 38 -23 -6 83 -84 -44 -82 -23 -27 10 -64 14 -28 -45 57 8 17 57 -36 16 -8 -29 35 34 78 76 -58 -34 -5 33 -15 87 -24 36 16 15 -17 13 33 14 31 -43 -52 1 -5 36 -3 22 -31 -28 41 -30 -3 41 15 -11 32 -1 55 -51 -26 -11 -17 -62 -8 -44 0 9 23 41 -60 39 -39 -6 -8 51 63 -61 48 -55 65 -58 -9 -3 -16 -42 -64 22 -42 -29 -28 -47 -36 30 47 30 -51 26 46 23 36 -45 31 -20 26 -27 4 -1 9 20 -27 -16 -22 -4 3 -17 12 -27 -36 3 29 15 0 -35 -9 39 14 0 34 36 1 1 1 6 -36 82 -16 -33 5 39 -30 27 -66 31 -19 14 -13 6 24 -47 1 0 -16 6 25 0 -30 -12 -5 1 0 -21 24 -5 11 -2 -28 -10 3 -18 -25 -50 18 12 -9 -3 -22 15 -2 -15 19 -7 70 10 -13 29 -41 0 -32 16 21 -17 28 12 -96 -36 -33 62 15 40 21 -10 13 -2 -10 9 24 13 13 -32 24 41 23 -18 -18 -15 41 48 53 76 69 -65 -17 -50 -2 2 16 -28 0 22 -8 -18 63 -69 32 70 -13 23 126 7 25 15 79 -68 3 12 -45 -45 -21 -41 -35 -5 94 64 59 51 32 -42 76 5 40 29 24 -34 -30 26 -10 -25 117 9 -17 57 37 31 23 25 47 10 40 33 43 39 58 28 -22 14 22 -7 -26 71 -88 14 -12 45 5 -57 -8 -40 54 20 -13 26 4 27 -23 2 -23 39 72 38 -37 67 -12 7 -25 52 -50 94 33 16 66 -22 20 105 -10 29 -36 -76 24 51 16 21 29 -31 -35 10 1 71 -43 34 -12 6 2 -34 -127 -14 6 -35 39 28 3 -5 127 -7 18 30 80 -24 34 -1 60 23 34 3 -20 94 -44 -21 7 3 20 -36 -15 33 -24 4 26 47 30 49 12 33 9 -8 7 9 18 12 16 43 44 -5 -50 8 -27 34 4 -13 -3 -32 12 10 -47 -4 -33 7 -50 1 28 23 31 43 29 20 9 -1 -8 14 -40 -5 9 -5 19 44 -67 -30 17 24 -9 -16 -12 -5 17 1 37 -3 -50 -18 1 -10 -37 9 47 -37 1 -14 -22 2 25 -12 -23 10 13 -1 -48 -19 45 41 -35 -10 33 -2 21 20 -43 -9 29 -18 -14 -20 50 -12 -5 40 -3 9 15 -40 5 37 56 33 -14 -12 -35 3 56 -19 -63 54 -33 69 47 -38 58 20 78 -4 -125 -51 -31 6 24 -9 3 -66 -8 88 38 -1 25 -41 -16 62 -15 -86 9 61 21 -17 -9 -51 35 -44 57 32 8 22 -26 -44 -32 -37 47 65 -84 30 -7 -3 -34 64 -6 -52 41 90 -71 -48 -39 28 -12 25 13 9 58 35 -18 -24 -4 14 43 8 66 9 -45 25 4 17 13 34 36 1 101 -42 -13 -85 67 -15 -10 38 0 65 -47 24 24 -32 28 -54 85 -30 -25 18 2 -2 -3 15 -61 7 -33 20 20 7 25 42 -43 -20 20 20 27 13 -14 95 45 -11 9 -9 9 75 7 127 8 -13 49 -37 -19 66 -9 15 -23 -86 19 29 -22 -4 11 -42 -46 20 24 78 38 36 -106 18 77 30 23 -77 -55 -25 -7 -1 -39 -13 -8 32 53 -7 -1 -7 50 -40 5 11 -16 51 -9 -1 42 62 83 -37 12 -34 -22 20 -31 11 -28 -27 -40 -1 31 -10 -49 18 -40 -15 -5 0 -26 36 -59 -34 -29 -13 -24 16 6 18 20 -3 -9 0 24 -23 16 -68 27 1 -14 12 -19 -9 3 16 -37 25 63 31 -46 16 5 -14 2 -30 -32 -17 -7 27 27 5 29 27 9 -14 -2 15 26 -29 53 16 34 30 26 -7 63 -15 -40 2 -44 -9 19 -22 -37 -5 7 9 -37 -13 27 17 -20 53 27 3 16 12 11 19 24 97 -17 -61 -39 -80 -38 0 -10 33 -12 63 40 38 72 30 -13 57 -17 -2 21 -32 8 -68 -5 32 -6 15 97 25 -15 -5 -10 98 14 -6 26 36 -60 46 39 59 37 58 32 5 61 14 22 52 -48 -15 46 25 33 21 25 -21 -24 -13 79 32 1 22 -10 35 84 -64 95 46 -19 48 0 68 31 4 39 -42 2 -15 36 41 -19 -19 65 -31 51 35 -16 -41 -47 31 -46 -12 30 49 -1 37 -122 -1 -65 -6 35 -44 5 32 -3 57 -13 -66 -5 3 6 19 -6 51 91 -5 -13 2 -38 -7 -44 -52 10 15 39 7 -7 -14 -13 -5 79 -55 -16 2 -8 -44 -127 -47 -14 -4 39 -4 52 -7 12 -14 19 -23 77 -50 -35 42 19 -40 63 -20 65 -27 -19 -57 44 4 -17 -13 27 -32 19 36 -75 -7 -15 20 42 30 8 13 52 36 -43 -46 12 -34 -54 -49 16 32 9 -23 0 -19 -22 -19 -9 -4 -27 24 -36 -18 42 -38 1 26 11 35 -17 -8 2 51 -5 -41 -6 9 -9 -18 12 11 13 -21 37 -15 23 -21 -13 55 -4 21 -39 6 5 -20 22 -17 -13 37 5 -21 -6 -16 -26 -13 -12 -11 17 -28 13 12 8 -11 -49 -20 -41 -17 13 62 7 5 3 0 47 -8 64 3 24 -2 -8 19 14 -54 8 34 17 4 -1 -36 4 -31 39 -59 17 -12 4 -15 32 1 -1 -11 82 -64 -20 13 -51 5 -35 -17 24 22 71 24 -12 17 56 -24 41 47 125 87 -12 56 -8 78 -14 -23 20 -19 5 -8 13 47 -9 -3 -22 -43 14 -21 -88 8 -19 -48 2 37 0 7 -50 78 -57 26 -63 -11 -45 37 -35 -68 65 25 17 121 10 -14 -68 29 14 -26 13 0 11 87 1 16 -47 30 65 -10 -34 12 81 63 -11 5 -56 12 -4 31 -24 104 35 -82 66 15 -60 -42 10 7 -39 -13 -11 100 60 -6 37 -35 30 63 74 24 22 82 -23 -22 66 78 -26 -16 -51 -46 9 56 11 31 -28 -19 -44 -20 -105 -2 -14 -11 18 -23 68 27 11 38 -9 55 3 4 -46 27 -28 9 -68 -35 -50 0 43 -25 -14 3 35 -9 -31 -17 41 -9 1 -19 37 72 -8 -61 -68 -25 -5 49 -34 -50 1 24 33 18 26 49 10 -58 20 37 0 27 20 -14 14 -27 32 -9 34 1 -41 -16 30 40 -5 -24 -1 -17 68 16 -51 3 52 -31 -17 13 -34 18 -8 -7 8 -22 0 -21 11 -5 -53 1 29 -43 34 14 5 39 -2 -16 -26 -2 -41 -16 -13 22 8 21 9 -37 4 12 -18 -9 5 -18 -6 12 -2 3 -16 -61 -6 -4 -12 52 10 -1 12 -37 24 18 -35 -9 48 -31 28 -13 20 14 50 -2 -20 12 -27 13 6 37 1 -3 37 -13 10 -13 -6 -34 -76 -4 -2 -31 -21 32 -3 -91 127 38 90 -1 28 -10 -123 68 75 26 33 -36 66 6 81 -33 10 88 -7 42 -31 53 63 -85 2 66 -1 46 36 -42 -23 70 4 -113 -12 -36 -81 22 -1 -8 39 54 37 53 -51 1 -22 -55 -38 50 -19 34 65 -64 -39 -40 -32 61 -60 20 127 36 127 64 14 -52 -90 44 -7 -19 93 17 -24 5 -8 -23 -4 2 71 11 -44 65 -41 77 1 -51 35 96 -4 7 2 -10 121 -18 21 6 -61 32 -35 1 -5 9 -50 -10 100 22 35 37 0 -7 9 15 -9 56 85 14 -10 -15 50 50 -4 -82 23 34 -2 52 25 10 -43 60 -41 -32 -35 88 93 22 -10 -1 57 -72 -10 -22 -44 -34 14 45 -5 27 -73 33 61 -61 15 21 23 52 26 98 104 -66 45 55 7 -65 55 -16 34 23 1 -20 13 26 97 30 -13 19 3 -35 27 43 -8 10 -18 83 13 54 -3 -13 23 -36 -11 14 -25 -22 18 1 -2 1 59 -1 5 -25 -35 7 2 -55 39 -21 -27 2 -19 56 15 7 4 10 41 22 -21 -7 10 -5 -19 -15 17 -25 -51 -4 15 -37 -20 26 61 34 18 11 23 8 0 -1 25 -10 31 -19 17 7 10 -2 12 11 -8 18 12 -14 7 43 36 23 -6 -30 -15 -18 -62 0 12 -1 -36 29 -17 -28 -34 25 -10 -23 8 -48 -33 5 16 4 -26 -9 14 -16 62 -23 -28 47 65 36 54 75 32 2 43 98 -20 64 -17 24 -126 15 -45 71 -23 -15 6 35 22 62 55 -4 -4 -3 -81 50 126 69 17 65 0 83 116 27 -24 77 -50 24 -58 118 84 -22 37 45 43 100 41 20 45 39 22 116 13 53 33 96 37 60 63 114 61 102 -13 49 62 75 24 -30 66 52 -7 -34 90 88 19 47 83 -16 28 -52 19 -25 -49 10 -94 19 -78 24 25 -38 19 -3 -73 42 10 51 58 26 -28 1 91 16 93 -7 -5 63 -33 -48 11 -34 72 106 -11 95 32 -12 34 -23 28 8 39 9 50 -86 30 3 -65 43 -24 -60 -37 48 19 0 -34 -60 38 7 55 31 20 14 5 42 68 34 18 2 57 -87 26 0 71 -8 14 -63 59 -1 -4 -58 -8 4 97 -52 11 -34 -15 25 34 78 55 -34 11 -11 -13 -9 -16 4 -14 20 39 6 16 21 -16 -48 1 -15 15 20 -17 24 7 -12 -78 -54 -57 -30 15 -22 -9 13 1 -119 6 81 -50 4 -27 -50 -25 23 -20 -11 -1 -9 -54 0 2 -8 -20 23 13 2 22 -44 12 -40 21 22 -24 -32 -6 -33 32 -35 -39 -11 -41 -1 -19 -7 -2 10 -71 9 -2 -75 -28 -18 -18 2 27 10 110 -30 -51 17 -6 -11 -19 -16 -32 -7 -5 3 -16 19 -21 -25 -13 -16 -33 52 -3 18 -31 31 -20 -30 28 0 -8 -23 -4 18 -53 0 5 -15 9 26 -65 36 40 105 -15 -2 95 -3 95 -5 -71 64 55 -53 62 -31 -29 42 41 16 82 27 19 -28 13 37 34 26 -109 -31 -72 16 64 22 -16 81 -4 -13 64 -69 81 124 96 -38 26 2 -16 29 -17 -40 10 -69 67 10 87 28 6 -16 58 27 -19 15 4 -22 19 94 44 34 98 -19 19 -44 61 9 -82 85 2 113 6 -31 66 111 42 -2 69 -4 -93 -12 3 19 3 -6 28 5 19 -12 67 72 81 -17 -97 54 -26 4 -44 14 -36 67 25 -15 0 29 -16 47 18 44 -4 -8 -84 -25 42 -26 36 52 -19 -15 -27 -20 23 63 62 36 10 -60 44 25 -29 -5 -17 -22 -27 -3 -46 46 3 4 20 37 40 -11 49 43 2 31 4 18 28 5 37 -4 -18 -35 46 -17 29 46 12 -55 16 30 -8 -24 -33 -87 36 -10 42 -30 51 -64 -15 -5 43 7 19 -28 4 19 13 -16 -19 -14 16 21 30 -12 -36 19 -36 7 -11 -18 16 -6 2 0 -12 -35 -8 -5 -16 6 -7 -6 -9 43 19 -27 -8 6 6 5 23 -10 -23 -31 -4 -3 37 -38 -7 15 10 17 5 -27 5 0 14 21 -34 10 -49 11 8 59 56 39 -29 6 -29 26 -4 9 12 22 -34 49 7 -33 49 23 33 11 11 -16 21 -4 -17 -7 60 24 16 -73 -54 24 13 2 -24 -9 54 -9 60 85 -28 4 10 48 -20 -13 59 6 3 64 63 23 -11 45 -23 112 1 126 33 -14 73 -16 -39 22 53 39 30 -6 -53 70 -20 -12 20 -16 10 3 -27 17 20 61 -13 2 -88 29 -19 73 -21 56 34 29 -14 0 32 -26 7 -2 -17 27 -10 -42 5 23 30 -11 30 -7 9 26 27 -33 45 7 71 -29 37 56 -5 87 45 -26 36 10 21 36 12 61 84 30 7 53 -21 35 -35 -1 -26 63 -78 -9 -6 -24 16 59 39 32 -33 21 9 31 -21 10 -42 -16 27 -49 25 -47 -21 -65 27 34 19 -23 -29 69 25 16 -13 42 -37 71 -2 -1 -22 -4 -19 -39 -36 -52 -54 -35 -52 20 9 3 -10 38 -73 -10 2 -25 -10 6 -16 -68 64 34 -22 -4 -33 -5 40 -10 26 27 38 34 -27 28 38 28 -12 29 21 -69 8 -44 18 21 -28 -15 51 -42 49 -26 30 2 -41 48 5 2 22 15 18 -29 -25 -41 25 24 6 10 -40 36 50 3 -30 -42 -1 2 14 50 -45 -25 -7 18 -15 -35 -8 -4 -13 -10 21 -45 25 38 39 26 -3 33 -39 -33 -10 -7 15 -14 -3 10 -8 6 9 -29 -22 17 -17 -26 -20 -3 4 -29 -8 25 -32 -19 -20 -19 -16 -11 27 -12 4 37 -32 11 33 12 8 -9 -18 22 1 32 -15 -18 45 -36 52 -33 -13 12 11 35 -7 -15 3 3 -36 -30 -74 -8 -12 -7 -58 -25 -109 29 -44 25 7 -101 7 56 18 24 -74 -74 -12 -3 13 30 -61 -33 -6 -59 -22 1 -5 -76 -101 36 6 -95 15 -11 0 -19 40 58 24 28 31 -57 27 5 -55 -3 -22 50 -16 64 -17 -32 -53 -57 -8 60 -78 8 -11 -39 12 -39 -57 -34 -49 26 -77 -44 67 -24 -4 -12 -5 24 10 16 40 -15 -32 -47 12 19 45 94 -1 2 121 23 -22 -99 121 -22 20 23 35 -38 38 -10 90 60 -15 -18 5 53 -21 46 8 71 -3 46 -80 -83 66 -14 9 43 -4 -13 30 2 0 86 -2 24 -18 22 2 -24 -7 -26 39 5 106 9 -58 -4 3 -25 68 10 -19 -44 14 -8 16 -31 -64 -2 16 10 -17 90 -12 9 27 79 -73 -8 24 91 1 -27 -11 -5 14 72 -111 6 -13 18 41 33 24 20 -1 -8 14 19 -20 -8 54 -26 31 54 27 4 21 53 28 20 30 19 -14 44 31 7 -3 14 -19 1 -37 -4 -60 36 5 -41 35 -26 19 30 27 -4 27 -51 -33 -20 20 41 16 -9 17 -7 -23 10 -26 11 -15 -54 -44 20 -2 59 13 23 -6 -26 23 28 -45 -17 24 -35 -15 -49 64 -16 22 -27 -39 -44 5 -60 -16 9 -3 25 54 35 -6 -39 8 -32 -9 -32 18 -11 -24 -54 -27 -7 -6 -45 -10 22 25 15 -3 13 -24 27 -23 29 28 -62 23 48 1 21 -8 51 -11 55 11 36 8 31 35 16 19 10 93 2 53 2 47 -76 45 -79 -21 57 37 79 45 78 17 72 36 56 9 18 26 12 -3 -19 -23 63 -5 -10 38 -18 -27 1 70 -35 -20 -11 37 65 39 65 24 -48 -5 22 -28 51 64 20 -47 12 62 -54 58 -48 25 7 -6 55 13 17 67 -19 -17 31 -3 18 23 10 4 70 7 -24 13 73 -1 41 46 14 33 76 -35 -9 4 2 24 -38 12 -38 11 47 7 -22 19 -11 2 -15 -28 2 -33 20 -12 6 -6 -35 -15 -18 -31 -3 2 -23 -48 22 -33 -21 28 -29 -18 -73 24 -29 -12 17 22 -8 -23 -8 2 -10 50 -33 4 24 -4 -22 32 -4 -36 -12 -17 2 12 51 -22 55 -37 -26 -10 15 -37 -14 21 -3 -44 3 56 62 -50 64 -22 -36 29 -71 73 -10 -53 -37 -71 35 -73 22 -45 0 -14 -12 -17 -18 20 12 -17 -1 -30 5 51 -9 -5 11 9 -9 12 -26 14 -25 16 41 -21 -15 -15 -19 -17 17 -19 -18 6 18 -18 -20 -9 -4 6 -11 -8 -4 11 -26 6 -12 -6 -10 19 -23 -34 -17 26 -4 -39 3 13 26 1 20 -6 14 2 15 -49 20 31 6 36 -53 5 6 -30 46 -26 -22 45 20 -28 -14 28 28 -23 19 6 -3 -11 16 3 16 -17 19 9 1 22 -19 11 -14 15 -11 29 2 87 42 65 50 -12 33 62 37 52 48 122 23 -3 -41 -27 70 27 33 23 83 -15 48 6 11 23 27 45 98 28 -1 -58 11 -29 5 46 -8 54 -1 7 61 40 42 19 29 -13 20 46 68 65 54 0 30 -41 76 26 -33 -44 -49 32 -11 -57 -21 7 52 7 -50 -45 26 9 13 -3 -8 70 -36 98 17 85 12 7 -54 -37 -38 37 -3 17 59 20 18 24 -80 67 5 48 -12 67 63 -12 -19 -11 -18 12 -13 -15 9 -6 -18 -36 44 54 -2 -58 -16 5 10 -24 -83 21 -19 36 -77 -5 20 -26 -33 0 22 1 -54 -2 -13 -6 75 15 39 -17 13 39 -43 48 61 -22 29 42 35 68 -35 10 5 38 11 1 12 -22 82 39 -16 41 13 -12 39 -19 -5 9 11 1 40 -21 -14 11 -34 -2 35 -50 43 -27 -12 -26 -44 46 54 3 -85 13 8 0 18 7 3 -9 -9 -40 4 25 30 -11 -16 -24 -16 -29 15 -3 23 32 51 37 -10 7 -41 52 -22 -1 12 3 -56 0 18 -37 -44 -6 45 53 -34 23 26 -15 39 1 8 7 9 10 -13 29 -9 37 -1 32 19 33 -18 21 11 12 17 23 16 -13 -22 16 22 17 43 12 35 35 50 40 48 22 24 12 26 51 -16 9 -3 -46 -9 -10 -6 7 -8 -47 -7 -23 -11 21 30 -2 40 20 -51 12 -4 16 -31 10 3 4 27 -44 28 22 45 26 23 76 -2 36 -14 84 -41 100 -3 -28 29 103 -38 -39 52 46 -8 47 -30 41 -20 43 48 30 -21 77 70 7 21 21 50 36 -14 7 -40 3 -39 6 -40 45 65 55 54 -18 -28 -50 50 -48 23 55 42 16 82 39 124 18 0 20 72 -29 -7 -11 -25 33 -18 88 -12 -43 14 -2 69 5 25 -55 13 10 35 46 34 59 33 -8 -7 55 2 63 26 -6 39 10 -30 4 75 32 -3 -67 31 12 -16 45 19 -20 49 -89 74 8 30 -50 51 -27 -52 -2 30 27 -4 39 13 -56 19 -51 10 -35 34 -7 -83 34 -13 8 35 14 12 -44 11 -7 24 15 14 -48 -21 28 77 84 59 11 -10 12 32 -1 -12 79 -30 43 -17 -57 72 49 -12 13 30 -16 -31 -32 -12 2 5 26 -16 50 -24 -83 -105 -16 39 4 22 -52 -25 67 -39 2 -19 -43 49 39 24 -52 -59 9 -12 -2 -57 0 16 -66 12 28 9 7 41 -20 0 -19 5 -27 -42 15 13 -34 26 9 -47 24 -2 -10 -12 -30 -30 -14 14 -31 -22 -4 -10 -20 -7 -7 -22 -3 -28 21 17 -15 14 -10 -10 -9 18 -18 50 -11 80 7 31 1 -79 2 -6 9 -42 -30 27 15 -30 41 1 5 18 -10 -6 24 25 31 19 0 -61 33 -44 -20 23 -23 -1 18 -2 -1 6 2 22 6 -1 -26 -3 -52 68 -25 -82 56 22 -43 -8 14 83 30 117 -24 5 -49 9 9 60 44 63 34 -26 -16 13 15 53 11 -16 125 -49 21 37 27 31 19 -35 49 102 -13 -48 83 17 -18 -6 71 -72 32 -39 -35 0 80 56 -40 -10 37 64 35 7 24 2 118 29 -9 82 31 71 -16 7 20 -16 -29 -8 81 -2 81 78 14 35 4 126 40 -20 19 31 -11 24 20 114 -55 -23 68 20 -1 1 122 127 1 -20 -41 -21 15 37 16 25 30 64 -17 5 -27 15 -86 88 -65 25 13 -31 20 47 16 36 -35 16 11 -70 7 -27 0 19 -2 20 10 72 -61 -42 0 -25 38 -26 -12 -46 36 0 16 77 11 -24 -24 -6 -33 -8 -23 -19 -12 2 31 23 11 34 72 17 10 2 6 23 -17 -113 -21 -15 -20 8 -8 -18 -23 -31 -54 42 35 -33 91 4 15 -21 -24 -23 14 61 -31 -11 -58 -9 4 -2 21 -15 -9 40 15 12 9 -2 -34 -27 -32 -11 1 1 8 4 78 -7 -24 -5 -18 -24 -18 47 5 17 -56 -58 -26 3 17 -71 -44 -21 35 0 22 -30 -4 -58 -13 0 9 -11 -34 -15 -20 1 -21 -33 -29 -43 -6 -20 3 -15 17 4 -7 42 27 -6 -48 64 -3 4 16 15 3 -51 -28 3 -16 -44 27 14 -2 -17 0 -13 25 22 29 46 -25 -27 25 -12 -6 15 -6 -41 34 -7 -4 14 46 48 18 -11 27 -35 54 16 4 25 88 -67 4 72 7 44 50 -58 -110 30 36 14 62 9 25 -2 -22 16 3 11 20 38 85 -10 -46 -25 -18 -45 -25 28 0 15 4 23 -22 29 -36 6 -37 -40 -16 -16 -61 96 18 -116 -30 59 7 89 -15 -8 -52 49 11 10 24 3 81 32 -5 32 -28 -4 -18 10 51 29 -9 -51 -5 49 -21 23 -19 -15 -22 3 -41 14 63 8 100 20 51 3 -8 -66 3 43 -17 8 -8 26 4 25 -34 -34 1 69 -39 -31 -43 42 3 -27 -69 44 -21 6 -22 3 29 67 -57 5 -28 -26 47 62 -76 57 -15 60 -45 105 14 89 -27 -74 -10 64 -7 13 56 31 32 74 -13 -26 40 -45 6 -3 14 -38 -14 6 -77 -19 -23 -6 -35 -65 -65 -23 -53 56 34 -22 -1 41 -32 48 -36 18 71 -6 40 38 -29 69 -33 25 -29 -12 -4 -9 -7 -32 37 -56 30 -9 9 -5 -5 42 31 27 0 11 30 48 6 2 -34 -1 -9 -9 10 17 41 -37 10 20 -15 5 -9 22 3 -25 -50 23 40 5 -18 6 -1 -8 -2 12 6 11 20 -23 -1 2 -15 -11 30 -3 -31 -8 -15 -27 11 -10 -1 -18 32 6 -2 27 4 -36 6 15 -9 17 11 -11 -2 -41 -15 3 -65 -7 18 17 35 -12 -24 -9 2 -13 29 -6 -84 24 -15 5 -23 32 15 -28 19 6 -14 -47 6 -29 -44 102 16 34 -62 42 62 11 -40 20 37 50 17 -5 47 -37 -8 -70 -20 -11 83 45 -6 11 -14 -43 -55 25 34 37 61 -29 -14 -47 52 -77 -53 -21 5 -22 11 38 -17 7 21 -1 62 -27 -14 -9 10 69 2 -61 116 5 -56 -17 -69 53 -33 -53 -33 44 -41 76 45 -37 64 27 82 -15 -11 12 22 0 61 -18 9 -15 1 54 13 15 7 47 14 48 -28 5 101 20 -56 66 12 -9 -13 14 62 79 4 -33 58 49 -47 6 45 51 1 -11 -73 30 33 85 88 -56 -64 19 -24 32 45 65 9 -27 -28 -36 46 -73 8 -3 62 -14 -10 17 20 46 -20 7 67 38 56 42 -14 7 -5 8 -33 70 46 21 68 39 -13 -50 -15 32 -9 -14 10 9 -27 29 46 72 33 -28 -21 75 -3 -11 21 7 63 42 34 35 44 10 35 42 -65 54 78 64 23 39 -42 24 26 3 -16 -11 -4 13 35 10 19 49 51 4 -26 7 -22 -12 -29 -22 -5 4 48 5 25 -30 9 44 73 -36 22 -26 -7 8 16 -20 4 5 -15 10 -31 9 9 -2 22 -11 56 19 -38 -9 -8 35 -27 -6 -35 11 20 -13 -38 -51 42 -14 24 26 6 -28 23 16 -46 3 -12 8 20 -50 -11 -29 -3 -49 -25 1 8 -33 -25 -22 -7 -13 14 -18 -27 4 35 -18 -55 47 22 -4 -27 2 -22 -48 -16 -56 -74 -71 51 18 -92 32 19 -35 10 -32 -30 19 -50 -18 17 36 -17 2 76 -62 -37 -15 -9 -39 83 19 -94 -43 -44 37 -32 -43 59 12 -11 -64 -31 -3 1 -14 -2 -15 -54 -7 -14 -45 -39 30 -5 36 -73 -122 18 22 39 0 69 -64 48 39 -33 -9 68 -11 -37 -103 20 121 2 -19 15 17 44 61 -20 126 59 -18 24 17 -102 -127 -2 -13 69 -19 -37 -13 -22 1 -8 -2 -43 -23 -25 8 -22 -18 52 -53 -13 34 -33 -1 -52 20 25 -18 -46 38 -2 66 -6 -90 10 -29 79 -30 -51 123 -92 12 -20 93 -16 -49 20 -54 76 54 42 55 -27 52 -44 100 -31 -77 41 -16 -13 -38 -30 39 -16 -2 -31 -10 -62 35 115 -15 3 22 -1 -38 49 16 127 7 62 -46 41 -45 -23 -58 -4 58 46 16 -55 -56 83 94 2 0 -6 59 -69 -5 67 -18 -7 22 -59 -7 22 21 -51 6 15 36 54 9 -39 8 -14 5 127 -31 -34 -6 -18 -14 20 -31 3 8 26 23 -20 11 -2 42 0 11 2 -19 10 31 2 2 -5 -15 -3 0 -16 43 -6 -40 7 -8 -9 -9 22 6 -5 -25 5 5 0 67 1 14 -23 0 19 -23 -67 -3 37 -2 14 32 -24 19 33 -23 -30 16 25 24 9 -13 7 -3 13 -35 -20 61 1 1 -18 3 -15 -15 66 58 38 7 0 23 -18 47 4 87 39 48 31 21 53 -21 47 13 89 -28 -20 -39 10 17 9 -30 15 74 25 -96 40 40 27 -5 -33 53 70 -73 8 12 14 52 32 14 -8 53 25 33 -6 26 11 17 -15 -53 115 33 53 74 18 18 28 -13 -17 86 3 12 -112 58 30 74 6 16 6 4 7 52 -8 -12 9 -27 -5 -10 -19 15 63 -12 43 -40 -10 9 36 21 83 -15 39 15 72 -128 14 33 -45 22 22 49 19 -5 -33 1 34 0 8 25 -22 -14 -26 21 5 -51 11 9 6 -23 -2 1 -80 -31 -35 -22 -21 -33 31 -21 -78 -17 -37 -5 1 1 6 27 -54 5 -11 3 -23 11 -4 -69 64 68 92 17 -22 25 4 2 7 30 15 -75 -13 41 -45 34 13 -16 3 22 14 -24 -14 35 -9 34 29 -9 59 6 1 14 -2 7 -28 65 34 50 31 -6 1 4 -10 -29 -17 -34 -11 -38 20 5 -78 9 6 -17 7 -5 4 7 -35 -12 2 2 19 5 2 -37 23 -10 34 33 -16 -3 0 30 51 9 9 10 -19 22 -5 36 -20 23 -17 25 -9 -4 16 10 38 32 26 38 29 1 -20 29 -5 -17 13 22 38 6 30 -45 8 -2 30 -22 -5 -39 34 -13 -34 3 -29 5 1 13 6 -5 -5 9 25 18 -13 18 -15 -40 -6 -17 -3 -5 -20 14 -1 20 3 -2 5 4 7 -26 3 -56 -22 -4 -33 -10 -47 -31 32 8 29 19 16 1 -5 38 38 -17 71 54 -37 20 -31 18 -26 16 9 -28 3 27 16 -29 -45 -7 -2 -18 2 49 -18 -48 76 35 -18 6 -3 58 22 -17 10 -22 -16 0 30 -14 9 12 45 -42 -36 -9 21 -40 -24 -59 75 56 25 27 -4 14 7 -14 27 18 36 37 24 51 -37 26 2 90 -12 35 23 18 -60 23 -18 -8 61 36 -25 86 36 14 -17 -1 -20 33 -38 -56 -6 5 -37 -34 -30 10 2 11 -12 55 -39 -35 3 27 -27 -28 13 -7 20 -71 -19 5 15 -48 -23 -21 -64 -9 -2 42 9 41 16 -27 -19 28 2 -43 20 -68 21 8 11 4 -27 -6 -1 20 4 11 -5 -17 31 -17 8 -6 -8 33 -80 -4 46 -55 38 -4 -5 32 50 -24 66 11 -82 17 -18 -31 -3 16 -12 -50 46 -7 25 -60 23 -3 -44 -75 23 11 104 -37 18 59 -8 61 -1 -71 8 19 14 -11 -18 15 -50 -16 3 -1 -2 -13 -17 63 23 -17 -31 26 -36 -4 5 -39 19 71 2 -21 -12 16 -27 -44 29 -28 11 3 7 -8 -18 28 6 -8 -38 -25 -19 -20 10 26 -2 -30 -1 11 -9 -33 -5 31 -18 -12 -20 -17 16 20 -19 16 22 -6 -35 -24 25 34 -69 19 20 26 50 -13 -18 -6 -20 -13 43 -5 -1 20 1 -26 7 1 18 1 -1 -9 -4 10 -31 -25 33 -10 17 48 -42 -25 94 -4 -83 16 99 -58 -16 56 22 35 10 37 -52 64 -45 41 -4 25 55 8 21 -32 -52 52 72 59 -20 39 -21 44 -34 44 62 11 -18 -119 -17 -20 -10 -15 -19 -47 -42 -43 -50 55 -42 -38 21 35 -29 -20 125 70 28 8 4 60 25 42 21 21 11 20 13 21 1 0 51 -66 16 41 47 96 -24 -64 56 -10 -70 24 -10 82 -13 20 93 1 74 -32 -16 -69 3 67 -1 29 -40 -41 -39 36 20 -15 -18 -72 -8 17 28 19 37 29 -35 -57 -16 58 4 21 -23 -22 -13 -3 13 27 -56 1 -11 26 42 -15 88 9 18 41 -12 -5 72 2 31 57 23 -19 -12 13 45 18 6 15 12 -22 -2 31 -33 3 15 1 -5 4 18 35 44 -21 38 9 -45 33 16 74 -39 27 11 -16 -26 -5 -6 9 -20 -3 39 -26 -25 53 11 -26 -29 48 -2 13 -20 -59 -26 29 5 -21 -33 15 -1 65 -17 3 -22 -23 -42 3 -32 -22 68 12 7 -21 48 40 -21 -2 -13 1 -24 5 6 -40 -47 43 14 12 -35 27 -28 -7 -6 -2 -79 10 -25 16 62 13 4 -50 42 43 -24 35 34 18 6 16 30 -10 -48 -14 -9 18 24 -2 13 -29 -41 2 48 -15 58 14 -29 24 -14 1 -1 42 40 -20 12 -30 -12 -54 39 17 32 9 5 -38 -37 35 6 18 -17 -21 -5 26 -1 11 -10 83 9 34 2 11 -32 96 -37 -13 11 -9 4 46 53 -6 -1 0 12 52 -1 22 20 0 -54 47 -81 -35 -18 35 11 -8 15 0 -41 83 41 33 -15 3 67 -3 14 28 13 23 25 16 14 48 12 45 -58 -3 10 19 80 -25 -18 -32 5 -19 -5 34 -43 -21 29 93 60 29 14 20 -52 -3 -49 72 -34 -7 14 42 -10 -45 42 55 -22 5 1 19 17 -4 12 -31 23 -19 24 53 -9 -52 -52 24 12 -25 -39 -43 -7 -15 -53 38 -52 30 21 26 -48 12 -61 -29 -44 -5 -37 52 -33 -35 -6 25 -33 72 52 -18 -10 -19 43 -32 -18 23 0 0 -5 -7 77 -69 51 -37 28 20 35 -1 20 -36 18 -43 58 -27 -12 0 7 -67 -28 15 9 36 -24 -2 -49 -15 -68 -56 -53 19 18 35 -14 -26 17 24 6 0 -27 -10 -6 -5 5 7 64 -28 -18 34 21 -39 -28 16 -4 23 7 1 -35 -23 -13 -22 -40 -32 -2 -19 -7 14 1 9 13 -5 -17 46 -35 -3 27 22 -7 -52 -30 1 11 -16 -2 -7 29 -4 3 -13 -19 30 -23 -29 -30 11 -36 5 37 51 -29 -63 4 -19 -36 -23 2 18 7 -14 -4 -33 11 23 25 -28 -34 12 -28 -36 8 53 -33 16 -32 -43 -21 -1 -16 10 5 -23 38 -35 21 -10 -38 -48 -35 -28 -27 -2 -16 -19 -14 49 -15 27 24 4 -72 -50 1 66 23 11 13 24 -40 53 64 62 36 -22 63 20 12 10 -25 -33 92 -19 -26 73 5 -52 4 -40 -72 -43 44 -31 62 25 -11 21 31 55 45 -1 10 1 -7 -14 11 -37 93 76 44 -4 -39 23 -69 1 13 -35 -77 13 54 63 -37 20 -5 106 63 25 8 12 -48 21 24 -28 16 5 0 46 -43 46 -59 21 -38 66 -12 2 77 78 24 -26 34 28 76 -79 -41 43 45 -31 39 21 15 10 -63 18 70 32 41 2 -26 31 -77 -49 32 47 -38 -29 -32 -60 -19 -45 54 -53 -17 -26 -11 -16 -30 33 -11 -8 20 24 -52 -46 25 -1 25 -62 -11 25 16 -40 47 13 -5 -41 48 -17 20 -81 39 -6 -9 -69 -11 -32 2 3 63 -21 42 -14 28 -116 -43 -71 42 -26 -2 -8 8 -29 17 -19 -48 -26 52 -22 -39 14 -16 -7 1 -38 -22 9 9 23 -34 -21 34 -74 11 -10 4 21 6 -18 7 -5 3 17 22 -15 -27 37 40 -11 -23 -15 -38 22 -16 -10 15 9 -35 -32 -9 21 -23 18 22 -34 25 -1 -26 -15 -10 -49 29 33 20 16 -60 -54 -33 10 22 19 -48 4 8 -8 -24 -29 -11 57 50 -2 -27 15 -45 -56 14 -13 -30 27 -5 -11 -6 -26 0 7 6 1 -7 15 -5 -38 37 -21 5 32 1 26 -18 -13 60 22 -23 22 -23 9 6 56 -32 34 -66 -68 -117 45 67 -63 -31 5 101 6 -107 -1 -47 -54 14 86 -18 115 10 40 1 -16 -33 -82 -10 -59 74 -47 -12 7 94 67 16 63 60 42 -10 -25 -8 -3 63 -44 6 40 -16 7 60 24 89 7 -26 39 63 82 18 42 2 -67 100 10 14 -64 54 35 33 58 15 -10 -122 -14 -115 -46 50 64 -84 8 29 127 -63 100 68 -63 -65 57 14 -10 116 115 0 43 65 -36 -47 53 95 11 -49 72 39 -55 26 -47 -21 50 -10 84 -11 -12 -16 -11 -1 -10 32 -31 -3 27 -12 16 70 -56 37 -22 -60 65 45 26 -127 1 17 6 -60 -48 -106 58 84 -18 55 29 -78 53 -10 -37 28 75 18 72 51 -1 -51 -1 -83 57 -53 -15 71 -3 74 -34 65 40 -73 18 11 28 -14 -14 18 -3 37 -86 -12 55 42 11 0 -9 112 87 -8 -6 91 -46 -72 1 -8 -29 32 -53 -39 -42 7 16 3 -11 27 40 -13 -7 51 12 25 -16 -30 0 -17 -11 3 -56 -23 -16 -15 -33 11 -24 -19 -7 -32 28 -65 41 -1 -26 -4 -13 -48 -35 3 -23 48 -10 1 9 55 -23 33 -5 11 34 -14 -2 -9 -63 35 -27 -65 -48 -42 -35 -41 -7 -10 13 -36 21 -5 16 -26 -26 44 3 0 -40 -4 25 -9 7 13 -28 10 -6 13 -43 -2 -15 11 32 3 29 56 16 -13 10 -17 -37 -40 -44 4 31 12 -35 18 21 -11 42 37 -15 -54 12 -13 68 34 46 41 26 -17 30 -33 20 32 33 49 40 -9 -56 -5 46 -20 -51 9 8 15 -13 97 -28 -29 45 21 16 44 -25 -77 23 53 11 40 -32 30 31 -40 6 53 40 -33 63 -17 -28 13 -14 120 37 21 10 -29 -34 71 -35 79 11 -19 36 68 12 35 48 80 9 -66 -4 0 62 19 14 19 -32 36 -6 97 -2 101 34 3 0 100 6 11 -50 25 13 -29 -21 13 9 -61 -30 -5 -10 29 12 -31 -32 -58 44 -40 1 8 21 -5 26 -76 -29 11 39 43 -36 -28 -77 -6 -21 60 61 18 5 31 22 2 -14 62 -6 47 20 66 -43 39 -13 8 32 3 -16 66 -3 42 -19 -1 -6 27 41 9 21 45 -28 -12 -4 -11 -27 -38 -9 -4 5 5 126 -11 3 25 1 17 35 17 -13 23 4 41 -13 -25 13 8 -2 61 45 26 -10 6 -6 5 12 31 -19 -8 -28 -4 -12 -15 2 -7 11 -30 21 -14 3 2 14 -44 -7 -24 -30 71 -8 12 21 43 -1 -10 -1 -10 31 -24 35 22 17 -15 -36 -18 -21 8 -9 8 21 25 -3 -28 -8 20 29 18 -22 11 45 -16 -16 -44 -19 2 -42 -13 53 -4 -8 -19 19 30 13 -21 22 -26 4 -19 -13 4 -13 0 -11 -8 15 -39 20 -31 -7 3 13 -22 11 -21 -7 -16 9 -5 -6 39 -38 -30 -15 32 43 19 43 -29 77 45 31 31 -8 12 55 -2 4 -115 8 39 50 85 5 12 49 -29 22 41 36 47 -16 15 25 11 111 27 48 24 17 59 -41 85 42 -15 -15 -25 -15 -6 95 11 -65 -29 -6 55 -2 8 43 -25 32 6 93 45 18 -76 32 -14 -5 -20 27 12 -45 64 -14 4 -39 4 17 19 -43 67 -58 -60 -2 -53 -26 29 37 52 109 14 69 69 36 29 67 -33 11 -45 72 -38 40 -4 20 32 10 77 -15 -35 15 -11 4 -2 26 -29 29 -5 2 41 -19 55 34 99 52 26 -70 8 42 15 70 -4 19 6 22 21 52 -24 27 -14 -11 -45 -52 -26 50 -63 -23 -18 14 50 -25 24 -15 21 4 -29 -73 -35 -2 49 -15 9 -20 26 -81 17 -24 -6 -15 39 47 -11 -6 44 -65 -17 30 24 -12 73 -34 -31 109 5 -1 -20 -67 31 -1 -64 12 85 7 -14 40 -2 11 32 12 7 29 38 9 -10 -6 30 31 -25 -27 17 3 -7 -9 29 -8 24 6 6 23 23 -7 27 5 5 14 27 1 25 -10 -13 -2 -50 -33 30 17 -24 -21 20 33 -5 -59 43 -2 0 -3 19 -13 -2 -15 27 1 15 -24 -9 76 -25 0 25 8 42 25 35 25 -28 -20 22 -8 25 -2 35 -38 -32 13 20 42 6 -18 26 -11 17 15 -12 -10 21 -2 -41 12 -4 0 -34 -12 -49 5 23 -78 81 -85 -29 -2 2 18 -33 -21 34 -39 -8 88 26 41 -7 1 32 -91 -44 -8 11 17 -45 -76 -30 -60 -1 33 -44 -64 -19 -84 -45 37 18 12 -12 -37 3 -70 1 32 -58 5 -34 -54 -26 -21 -15 -104 -81 -85 10 5 28 36 -39 31 -17 0 -19 0 8 -62 -17 16 41 -74 -40 18 3 18 -98 63 21 -38 35 -20 -89 -13 21 31 -19 -94 -24 -7 -40 -65 71 -2 -24 18 18 45 -53 -34 25 34 -54 31 18 -27 11 3 16 30 -5 -74 39 47 -4 -9 -21 -46 -16 17 -14 -57 -17 -118 -98 -94 -21 -35 75 32 -35 -41 15 10 -40 -46 -30 -24 5 31 10 -20 -17 -58 -19 -52 2 -3 3 -36 13 82 21 -11 -45 13 -59 -25 23 -21 -26 -51 -13 -50 0 3 -35 -13 -22 -3 -12 -12 38 -65 6 2 -15 61 0 -57 1 32 5 26 -26 -7 51 -1 -23 37 -22 -28 67 26 23 1 -14 7 -27 -14 65 -35 41 -8 -44 -7 0 12 10 -19 4 7 35 -4 -14 56 -7 -3 -3 -15 -6 -40 -13 32 -29 -7 48 -34 4 64 -25 15 15 -43 -32 18 14 37 4 -42 60 1 8 22 -3 7 -20 11 -36 -12 65 -31 -7 6 -28 -16 8 12 -12 41 -32 7 -20 27 29 21 0 -32 -20 65 24 -2 -8 21 -8 14 83 -13 -26 -4 25 20 23 -9 28 -9 58 -26 9 4 35 47 -59 72 -3 -32 113 -44 -33 -82 48 5 44 -21 38 -20 92 124 -8 -14 -11 -2 -55 3 -14 -2 48 57 53 41 -25 -54 -31 11 32 -5 -26 -2 49 13 -28 37 -1 27 -62 -11 -34 -23 -16 58 -26 -13 56 127 91 46 -72 46 20 -37 -66 -55 33 1 42 47 41 -7 -18 25 8 -27 -24 25 127 -48 41 9 10 3 0 44 -22 94 12 59 52 -19 5 -31 51 -7 -90 -14 25 53 -36 5 29 -18 49 -56 18 -17 -29 -23 -30 -20 -2 -13 -4 -11 -6 51 31 13 96 -15 38 -2 9 -6 -47 -21 25 48 -17 47 37 -34 -4 67 -3 19 6 -22 -44 0 34 52 -76 -7 -57 78 29 24 81 -2 54 7 -4 38 -57 0 55 -25 -19 5 -50 -46 41 14 -32 8 -13 -3 21 -5 -46 -3 15 -14 29 -3 107 4 17 60 -22 -55 56 26 -14 18 -46 55 35 -3 22 42 -28 18 11 9 16 8 -12 51 -23 73 -14 35 -12 -11 -7 11 34 33 35 35 19 4 -26 -61 -3 -4 -5 12 -4 18 9 -18 -20 -5 -23 -10 11 32 37 22 0 36 8 21 -4 25 16 1 2 -4 37 46 -35 11 -9 -16 -4 -21 30 13 4 14 2 7 -25 -5 -50 -6 24 -17 -5 32 -26 1 -3 -34 -6 -45 -24 -10 4 -32 41 -19 0 -44 12 20 9 -4 -7 25 26 -3 62 -53 -116 5 38 21 8 -50 7 -83 -3 -60 42 -69 49 -34 -33 34 -120 27 23 53 -42 86 -22 -16 32 18 -116 -28 31 -121 -97 71 -37 -17 -56 40 -5 25 35 -61 43 -6 -22 -6 -80 13 -17 -120 -54 20 -97 64 37 -2 -8 9 113 -41 22 -77 55 -53 -118 12 -50 28 6 -20 127 -54 -22 46 -33 -81 0 -38 27 -28 32 -29 23 -9 -79 -87 -21 104 46 95 39 -73 110 -65 90 -40 -60 -35 -20 25 -69 18 8 48 -50 -6 96 -42 -31 -45 101 9 22 26 20 5 21 -17 35 37 -40 8 -8 35 -38 59 22 9 -78 -39 2 -13 2 -52 86 12 35 16 -40 24 -39 -109 50 116 69 -116 -7 -45 -40 6 -109 -48 -8 -18 3 -5 52 -1 -5 -58 3 -16 14 -78 0 41 -9 3 -60 18 60 34 46 23 34 84 12 -23 28 -44 102 52 -25 14 26 -51 35 -64 38 -8 -23 -31 -31 -4 1 -12 15 38 21 33 47 -28 -9 -5 -29 24 -127 49 43 -14 25 -1 26 32 7 7 -24 13 54 1 24 -13 -14 60 34 22 40 45 -65 60 -66 18 -9 -34 -77 46 39 22 -39 -11 48 23 15 27 78 -62 60 14 64 -6 -52 5 -46 46 -51 21 42 9 -43 16 31 22 5 -16 -38 5 32 -31 2 14 37 -28 23 30 8 -81 52 86 -16 -2 -24 -56 3 44 20 57 -92 -36 -24 46 -3 -58 -20 -71 42 22 61 3 49 33 46 29 -25 17 3 10 23 -31 16 13 51 -3 24 -16 -5 50 76 40 -67 1 -30 90 -14 13 -21 10 -38 -8 -39 34 -14 44 63 -18 0 32 -22 -22 75 35 21 5 35 7 -30 17 20 65 54 13 71 6 -47 29 37 0 -23 52 8 49 91 17 -33 -26 -6 -2 68 74 56 3 9 12 -26 -6 54 17 -20 31 -8 -61 -51 -4 -28 25 25 19 34 26 38 -34 88 -80 -15 33 30 83 -8 -2 -1 -22 67 -51 -18 71 43 -37 29 -29 11 -77 44 94 -13 45 -26 -3 20 51 -6 10 15 61 -51 10 17 -40 39 62 16 -53 -23 27 -72 31 -17 24 -46 -8 2 38 -2 -23 11 -41 10 -37 26 28 81 -1 -17 -73 64 -2 103 -22 30 -93 -5 2 3 -55 14 -44 -9 23 -6 9 -4 -11 23 -11 30 79 -31 -12 11 -5 -40 25 33 55 42 12 9 6 5 12 1 -15 37 -23 1 24 -50 24 27 -18 -23 -2 -9 25 -31 2 -20 2 22 1 4 1 -6 5 -8 -54 1 -16 -13 -3 9 12 -35 -37 -2 -34 12 10 -7 14 -48 -5 -2 -14 16 58 6 61 -21 0 20 5 -40 20 28 -38 -37 26 3 -9 3 9 0 33 19 14 -17 -8 15 -19 -47 67 -24 22 -16 24 -2 -30 -42 15 -40 -3 7 14 14 14 -63 33 29 90 22 -47 -26 -78 -11 49 -53 44 5 35 12 -32 38 -26 83 43 4 31 8 -56 -16 -17 -26 86 -31 14 7 13 -34 37 58 45 5 -37 16 -37 3 -5 -30 86 19 38 -2 -15 12 40 83 60 60 -48 -53 -41 -31 -27 -10 -78 -21 79 30 61 1 100 -2 42 64 31 30 -2 11 -9 -1 -8 -15 11 34 17 -50 59 80 94 -5 -14 2 10 -48 -11 2 6 -11 60 -35 42 35 -18 14 21 -29 -8 74 -48 11 1 -42 77 -37 24 -3 12 -69 -32 62 -35 -11 -51 1 -26 34 -4 -45 -56 47 -74 -6 -24 -3 -17 -9 20 4 61 -20 -28 -5 25 6 -10 -50 -56 22 8 42 40 -11 -45 29 -32 -1 -33 21 20 -71 29 -23 88 20 34 9 4 121 57 -59 -7 -2 16 35 -5 -29 -32 -111 12 34 48 -28 -13 -8 -51 76 9 10 6 9 -13 -5 0 -66 -20 28 -5 1 -6 61 12 -17 23 5 -16 -18 -4 31 -21 -4 15 -20 -40 38 5 -11 6 -13 -78 -30 -53 0 5 34 41 21 -22 -37 23 3 -27 -23 0 2 -7 4 2 21 24 -7 -6 26 -27 14 14 -5 23 -2 -15 52 6 12 7 -24 2 -10 18 -30 34 30 -4 12 -18 -13 5 -36 19 -24 -1 32 -22 -3 13 3 6 -77 -20 4 -17 -26 50 21 3 -14 -39 45 18 -15 -7 -4 -33 -11 -39 29 1 -15 56 -51 19 80 29 57 4 107 34 103 -4 -49 46 -74 -4 5 35 -86 -41 -23 4 62 -20 13 -93 -5 16 -74 -3 -17 -116 -14 51 2 -98 85 32 95 -34 55 27 45 -3 -20 45 9 -11 -32 -27 -21 3 97 92 44 19 -51 -17 8 -38 -30 -87 0 18 -68 34 -49 73 -27 19 34 -65 -3 9 -28 -22 61 5 15 -35 63 18 -37 -125 -35 26 -7 110 -69 -26 103 -1 -49 -34 1 -25 22 92 9 49 -42 53 105 103 8 -47 12 -9 -31 -13 -20 -18 13 20 -12 42 45 12 -28 36 -48 79 13 -70 106 -7 -29 46 -35 47 58 66 23 -96 20 120 5 -4 6 40 40 -5 -20 -52 28 30 0 -117 49 44 6 96 -6 -25 -43 46 21 78 37 42 29 36 -2 14 46 -50 -41 -33 -21 -37 -65 -40 19 34 -17 -19 -52 -87 4 -71 63 55 37 -2 -28 -31 2 3 42 54 -34 66 -48 -31 18 -7 -15 19 15 -13 -21 -14 9 -1 14 -11 -19 -54 -18 40 -59 -8 19 5 -17 9 27 29 43 -23 -48 5 -42 -47 24 -29 21 -66 26 -9 27 -48 -44 6 3 51 25 -3 -20 -35 -21 -13 15 -17 -45 -18 -3 18 -20 37 -31 9 -34 33 16 24 -45 -12 95 -22 -15 21 -30 -29 37 -17 -17 14 8 -12 -40 -46 44 64 -38 55 -40 -34 17 -78 6 9 -111 -42 5 -2 -70 27 87 7 4 -46 -14 -59 11 32 17 31 -9 14 91 18 -40 19 1 76 9 50 15 -51 -56 -7 -23 2 -53 -23 -29 -6 -26 59 122 50 85 74 67 24 -35 119 7 29 54 97 95 -4 31 107 47 -20 64 43 -28 -13 -19 -41 33 1 -47 55 59 58 26 80 -62 12 44 -15 72 -56 -35 32 38 65 -67 24 35 16 17 35 -61 4 -39 -23 24 7 -53 -64 -4 -20 95 25 -124 -64 69 13 23 2 -22 89 -22 -30 63 15 51 87 17 46 -3 -8 8 -102 -36 1 42 38 -126 -38 19 52 -51 100 -51 11 48 -34 12 37 82 -11 -16 11 22 28 -70 -28 23 23 33 -9 12 -49 39 72 6 -46 -7 31 37 16 -1 -24 -45 42 16 -19 11 33 -14 -66 40 14 -28 -5 84 46 2 -111 -9 -18 -29 20 -62 100 20 15 -35 51 42 2 -20 62 19 7 -41 16 -8 -64 7 -91 -50 52 -27 -24 3 -41 -9 -38 -38 -50 -42 -6 50 25 -10 -69 89 31 -62 -41 19 -16 -32 9 -13 -29 -12 -52 2 54 -29 -12 3 13 -11 -30 20 -7 -63 -41 15 28 2 -5 -82 17 -2 -29 9 37 25 -17 -19 23 -4 0 -3 55 7 47 13 34 20 -24 45 -5 -27 21 34 9 12 -49 -27 87 81 18 -13 40 -31 0 -29 20 43 10 -15 39 -32 -24 -12 -11 -48 15 34 -1 44 44 -8 43 8 28 54 -47 10 77 -30 -55 -27 35 -36 32 54 26 40 90 72 51 -8 -24 -2 -86 33 34 -26 23 -67 -41 -42 31 -75 56 -19 -1 79 50 63 -27 22 54 39 50 63 12 -66 51 -34 108 5 -41 82 -29 0 21 -12 25 4 -38 -9 -29 7 44 39 63 34 57 -21 -4 -10 -43 103 23 -33 -9 -72 -38 123 59 -1 -5 49 51 -5 39 53 -5 43 70 -3 -40 24 5 74 -31 52 -38 39 -20 -29 -28 92 63 -9 6 28 4 33 -85 2 -11 -10 -67 46 -46 -16 49 75 35 48 55 -25 -30 -21 -65 -42 17 12 80 -82 -27 42 58 14 10 20 -22 38 17 0 -2 -44 20 28 20 26 -19 32 4 -49 -5 9 45 -34 -32 -28 -32 3 16 -3 84 -84 -2 -36 -37 -19 20 7 -3 29 12 -17 -71 -46 -26 -21 49 -62 -96 8 29 26 23 29 -18 -36 -58 81 -9 -88 -13 -24 -63 33 47 -34 -13 13 15 -7 1 21 2 -19 17 6 -18 -17 -14 13 4 -45 23 14 -4 -1 29 -29 8 19 -1 -6 -2 -16 13 6 20 -22 0 -9 25 -4 8 -49 -14 17 1 9 20 32 34 22 -1 -21 -28 8 -16 -1 -43 -1 4 14 40 62 -6 35 40 57 -13 6 22 -6 -8 -54 26 -5 -21 -20 7 -34 -20 29 -4 -50 -23 -7 13 -15 19 -20 -10 11 -55 14 -5 5 6 35 -14 57 48 -24 -41 9 68 -74 26 29 3 -54 10 25 -50 76 57 61 4 16 19 29 7 40 -43 -42 71 28 24 -6 36 1 31 43 20 29 54 78 -34 75 -18 11 5 -19 35 -65 -54 -6 15 35 3 73 11 -1 74 -48 8 -28 -37 71 -23 -7 -30 -34 -23 21 56 111 22 40 -60 21 -58 -16 11 -12 -33 -26 52 17 16 122 -26 -31 68 48 36 -10 -8 112 -30 25 17 11 -46 10 19 45 49 -45 24 22 24 -37 -4 19 5 8 -37 -26 -5 75 -43 -13 20 -42 -1 -22 -16 -19 25 9 43 -1 16 15 36 -16 35 -28 61 12 19 -13 31 36 -3 2 -7 -31 -55 22 -11 25 -2 -3 -21 -53 2 -24 17 -4 65 0 -45 44 -55 2 -25 -4 -44 11 32 -88 -66 -23 34 -19 -10 15 -32 -54 107 -53 -14 30 -97 -35 11 -18 44 12 -5 47 23 25 26 6 -35 -6 10 -46 8 5 -30 14 6 -12 -29 -10 39 29 26 -6 -12 34 0 17 26 -21 53 -21 19 22 17 -12 28 29 23 -6 -8 -9 -2 37 -14 33 31 18 9 -3 3 12 17 -26 22 18 -13 6 -36 -17 19 9 3 40 30 0 10 -17 -10 -19 6 4 23 30 54 24 8 39 20 27 -16 -1 -10 4 -47 2 11 -34 34 -4 2 16 -57 9 -12 -13 29 -25 10 -60 13 22 -6 -15 0 3 -5 27 5 -44 -82 -1 -45 19 64 48 36 38 25 0 45 29 50 -4 74 45 43 -54 -16 29 -48 -8 -82 0 -44 23 59 81 -1 -25 -2 4 -34 43 -30 87 16 51 -1 6 44 83 4 -4 44 -32 59 35 -6 127 9 92 7 3 -95 92 -10 107 0 100 80 59 -38 31 62 71 53 52 15 -11 63 33 -1 -1 80 73 58 -21 82 -5 8 -55 -70 -45 34 28 71 69 36 35 4 -30 -21 83 33 -19 41 21 -36 -32 0 -68 32 66 35 40 -29 -10 -25 63 -5 24 15 23 45 -33 0 9 -27 37 26 23 -78 44 -56 -44 -13 38 29 10 39 -17 -41 -21 12 -16 27 -16 -26 48 -5 23 -22 47 5 83 -79 -28 -11 33 -39 -49 30 57 -29 -62 -3 -39 42 -32 16 -20 -28 -49 4 -27 -52 4 50 20 62 26 -17 21 -10 18 12 -34 -17 -23 -10 -23 11 52 12 -90 11 62 -25 -11 34 -28 2 65 15 24 -5 -3 -30 -10 5 1 -16 -43 7 -2 4 -33 44 -4 -10 12 4 -28 22 -16 8 38 -5 -48 13 -19 -27 -39 11 3 13 3 5 2 3 -62 28 -17 -7 30 -25 12 33 -29 -27 8 -9 -9 0 18 39 -4 9 9 -32 2 -45 18 -3 -21 -28 10 -37 -12 -14 5 14 33 1 -1 21 20 28 1 12 45 39 25 51 -19 18 14 13 42 31 16 -18 -4 29 -70 34 -19 -2 17 -69 -27 -8 -17 50 4 -15 -44 74 3 4 24 26 -16 -8 -23 -2 -21 -68 24 54 50 21 32 -41 16 32 67 -45 -69 52 12 -71 -3 15 -38 7 78 -28 5 -32 -9 -3 25 28 -15 17 1 24 -21 -12 -6 -3 9 11 -17 11 -46 8 -57 44 65 77 -13 2 -67 -40 12 -17 55 -61 18 17 -30 -2 23 -13 23 -18 -43 -7 29 -17 -16 -31 21 -57 14 0 45 -41 110 -26 -16 6 54 57 -23 17 -9 24 -24 7 -15 25 30 -11 33 30 -91 -14 17 10 -8 -23 2 8 -5 -42 -34 2 -17 80 15 -5 15 32 27 -4 34 -45 63 -13 12 2 2 -39 33 -11 -46 36 33 42 4 -26 9 -26 -26 21 -9 4 -39 29 0 -9 41 49 -14 10 125 -24 -3 61 -1 31 5 28 30 23 27 -2 -19 2 28 -45 25 53 -49 -14 1 -79 42 12 -18 -63 12 2 43 -48 25 24 24 0 7 -22 30 -35 2 -17 -9 -34 22 7 26 9 25 -66 10 -18 11 57 6 9 10 9 3 -3 -43 7 -6 36 29 -46 14 7 -30 8 3 -12 -43 -12 8 -7 12 44 -18 -15 16 -16 -1 -1 -7 -2 -42 23 17 -10 -20 -11 -6 -2 14 12 25 -1 8 -9 57 25 35 24 15 -2 34 1 32 -7 -14 4 -32 -17 -23 -28 20 11 -36 10 3 -6 27 28 -12 -42 24 -6 26 -62 -6 17 -4 -4 -18 33 -22 9 19 12 -19 -44 36 -6 63 81 -33 -26 -62 14 37 9 10 73 8 -3 -38 -29 43 -12 29 60 21 23 -20 -26 4 34 -20 79 52 56 -33 -3 13 -49 11 23 25 -22 38 5 -55 62 -26 4 5 58 0 53 22 -32 40 42 127 31 105 76 -11 31 29 24 9 -5 97 -20 -16 40 17 -8 9 59 0 6 80 63 -30 33 28 -14 32 19 -35 -1 -90 -46 37 19 -25 -11 -1 -18 22 -46 52 -16 -3 15 19 -13 -57 4 -61 57 -11 -72 -13 -3 -24 48 -17 41 -2 -13 54 8 -30 25 58 -5 -58 -43 11 -62 -19 38 25 22 17 -18 89 -22 20 22 5 3 11 29 -21 -39 -35 -67 -13 34 -29 14 -60 9 24 -2 38 -17 83 68 -38 -72 -35 15 -10 68 2 28 25 56 27 -42 6 1 18 4 -15 18 20 15 30 -24 52 13 4 -6 -21 15 15 32 10 -41 15 28 -21 -27 20 53 5 -24 21 34 9 -41 -24 -13 47 -34 -27 -21 -26 36 -22 -19 -18 -36 8 -20 51 14 -13 -23 7 -2 -8 -7 -32 -16 3 47 28 -6 -37 26 -69 -23 11 15 6 -13 17 18 6 -13 -18 85 -29 25 -31 41 -23 3 -8 -46 -2 -1 16 9 -13 15 -18 -24 3 -5 23 -16 42 24 -11 14 18 -1 13 17 13 14 -41 -36 -14 1 36 19 43 1 -34 -44 93 8 0 21 29 18 -51 97 26 7 -14 2 72 -4 6 -61 -64 -34 -21 -46 15 -30 84 30 72 7 28 -48 -33 65 3 12 34 94 24 18 63 25 25 54 20 11 64 8 62 67 30 -13 29 15 0 -11 25 42 -86 -23 48 87 51 65 40 63 -42 -14 1 51 71 94 46 4 14 -66 22 37 56 62 23 29 5 5 -28 -26 6 88 7 -30 83 0 1 -5 56 7 -53 8 -26 23 -24 -88 16 56 16 26 5 -23 -34 -10 -40 -37 -38 -36 -11 34 -18 6 -45 -30 28 14 3 -22 26 -67 24 38 38 9 8 14 -14 -38 25 -8 -8 -32 -12 16 32 -34 53 -73 1 22 -6 37 33 -23 16 14 -52 -19 56 -10 -45 53 11 23 12 -4 36 19 -68 -10 74 22 -18 22 -5 34 30 76 54 24 49 3 -18 -33 -45 -3 -24 -13 -2 11 -45 -31 -43 4 23 10 -23 18 19 22 -1 1 -27 28 2 -1 23 -13 9 1 6 50 -2 -3 -36 16 19 48 -29 -23 25 -22 -6 -38 -31 10 2 -22 -26 18 -29 14 28 9 17 -20 -32 13 13 0 3 0 -23 57 -28 2 7 -21 -1 -23 -6 33 -7 5 -17 21 32 32 -44 29 -15 -14 39 -24 38 -19 -21 53 7 17 -1 -3 -27 -12 19 53 -8 -7 -29 17 -4 22 27 12 17 18 27 43 -35 17 -12 27 -26 108 -54 48 30 -25 14 -79 -36 18 16 48 121 4 8 93 -36 -52 39 -54 -20 27 0 56 22 -46 -2 -17 5 -3 -33 -55 98 18 4 12 37 48 18 73 45 -40 3 57 124 16 11 32 19 -30 88 2 48 53 50 58 18 -44 38 12 32 29 127 44 -66 69 42 71 39 -41 37 11 -22 -34 112 -31 -25 16 9 19 -13 27 -52 -27 38 -49 88 -9 62 18 -7 -1 -24 -7 -12 -17 -3 35 9 4 43 16 -20 14 2 30 44 26 22 -19 80 -108 7 -21 41 -43 90 24 -3 23 -28 -42 -56 124 -12 -19 17 17 -73 -66 10 8 15 1 34 71 -9 -43 89 33 -9 -71 -7 38 10 -34 15 -89 59 -12 -47 10 -31 6 -23 17 23 -105 11 43 36 0 28 -9 30 -24 57 -30 28 -81 9 -33 -47 5 -47 5 -18 9 13 41 -54 10 -33 71 17 -19 -9 -65 -8 -3 -15 15 -59 -52 9 5 32 -51 -10 -19 37 -25 -10 13 13 -22 -61 50 0 35 -7 -38 25 -9 -21 23 13 -24 -10 4 -44 23 55 31 15 -3 19 -5 -30 -35 7 -26 -2 -12 -24 31 -31 -8 12 10 27 25 -26 -49 28 38 6 32 -45 18 -24 -61 -66 -2 20 15 -16 -23 -32 7 21 -23 -35 40 37 27 28 41 -40 7 -25 36 -44 14 -7 50 -62 -26 43 -32 5 9 6 -25 7 -22 -9 -27 60 -99 37 33 78 -26 3 41 -6 -20 10 36 20 87 24 13 -34 60 -120 82 -11 -15 39 40 58 21 11 90 -38 87 15 -15 -4 -10 -22 -30 36 -36 -12 -23 -9 -16 16 47 -26 45 -63 45 28 6 32 -48 -1 23 26 -31 -43 -10 70 -108 -9 -54 49 -41 -94 -16 33 15 21 105 81 -75 14 -51 43 -18 8 -22 -15 -13 80 53 -22 -14 -29 25 1 63 -28 0 39 -11 103 3 54 50 -50 -15 15 52 -24 10 -54 -1 26 21 31 25 30 -49 9 -25 72 5 -9 -10 16 -24 58 -73 -33 -49 52 10 45 -62 70 8 -7 26 24 70 29 -18 12 80 26 25 -25 -106 16 6 11 42 24 33 23 -51 25 -17 65 43 -37 -24 -7 26 64 -85 98 39 -28 54 -8 10 -44 -17 28 69 82 -8 26 25 12 38 -50 22 20 -53 21 -10 -11 -87 -44 -26 40 -32 6 -14 -1 8 14 41 12 -23 12 -24 -1 2 26 4 9 -1 26 16 -58 -3 -19 -22 -1 5 -10 25 48 17 -10 -33 17 7 -17 18 12 4 -21 -9 -22 29 -24 26 -20 18 -85 5 40 14 15 -50 -24 55 -47 40 48 41 -4 -32 -7 -40 -25 10 10 -25 -23 18 -3 16 25 -17 -24 -3 -19 12 -36 -3 5 41 26 -36 -23 -12 -39 10 -14 25 -17 25 13 -57 35 -10 32 -31 -6 -60 38 7 21 -13 -6 13 -23 59 -27 51 -1 85 26 31 53 99 57 25 21 -7 11 80 -5 53 96 -64 45 -2 74 -10 9 16 -14 -15 81 55 44 46 77 14 35 -14 5 25 66 14 94 32 30 1 49 66 86 20 125 53 100 9 46 77 15 29 46 15 -41 67 -2 10 23 -7 45 76 36 -43 79 18 38 71 -2 70 54 4 24 19 46 -7 -14 39 -92 -24 71 100 25 4 107 23 12 27 31 24 -51 -10 3 82 62 -37 60 26 30 -27 7 23 -19 -36 24 67 53 -9 0 40 -6 15 22 -4 23 77 -76 38 -32 16 31 -6 -41 37 8 -25 -19 -2 24 21 -2 5 10 46 -17 47 52 -22 -1 51 9 61 29 -25 -40 -24 -38 -19 40 -17 -1 35 45 -1 -28 -3 -58 -40 -4 19 -16 -66 -8 -5 -43 51 2 14 -15 28 2 -16 76 24 46 51 6 -2 29 -6 -7 71 -51 25 50 26 -21 3 11 -20 -5 -4 16 8 4 1 -11 4 -34 -11 17 24 -47 14 -12 29 -42 2 -24 5 -3 18 9 -2 9 -4 -10 26 -12 11 3 -11 22 24 19 -24 29 3 -69 17 8 48 60 -23 -49 -14 69 21 26 24 17 -40 -22 19 -39 3 33 16 1 9 63 18 -27 -8 11 -8 -47 -3 66 16 28 11 -8 3 19 15 -11 9 -35 -11 -3 -48 -10 9 58 -32 -24 -22 -33 27 46 0 -22 -42 -28 51 38 -21 4 41 -12 24 -86 -25 -63 83 37 -52 23 -68 -58 80 -7 42 38 61 -61 33 58 -37 36 35 -32 21 32 63 14 -7 -13 58 66 8 -32 20 -8 48 -27 6 14 -19 43 68 9 30 75 37 -76 -14 -29 57 -3 9 -13 -109 57 12 23 59 31 30 -68 -47 21 24 -46 -101 45 -10 78 -50 29 25 -8 16 3 6 -4 -85 6 -5 127 -9 82 81 0 18 5 -10 -21 -62 -41 -86 44 31 22 -30 -36 10 -11 26 -9 25 -71 4 -73 8 57 -22 -57 22 11 -1 -59 94 -21 -77 35 13 -14 -61 2 -32 -23 -23 -58 15 7 55 -59 65 14 29 25 -64 33 -18 55 15 -29 27 -35 33 -31 3 3 12 22 -96 36 6 6 34 -14 94 6 45 70 60 7 26 40 26 -13 2 40 -57 -38 32 52 67 38 -61 18 2 -41 66 -12 -20 0 -44 -32 3 2 32 23 -10 44 1 -1 2 22 16 10 -9 45 -6 5 -28 -5 -6 -31 24 15 37 7 40 -18 51 13 -19 -52 42 -37 -5 40 -25 -9 -7 -2 -52 9 27 -14 -11 -2 34 -7 -1 18 -11 28 2 -42 -4 -26 -9 -5 -24 -27 -29 3 38 3 1 40 47 67 -32 -35 0 -27 1 -32 2 52 27 25 -35 53 6 25 0 41 -26 -51 5 -46 4 -6 8 2 17 18 -85 47 -16 -29 -40 4 3 43 33 -39 38 6 11 25 28 -36 2 7 50 -34 28 -44 -41 -54 86 30 52 37 -62 -4 23 30 -32 -7 109 -47 -46 13 30 16 5 10 -15 53 -23 48 -21 -66 24 -36 -31 40 40 5 21 -66 7 67 45 49 -29 56 50 -54 38 10 63 -7 22 1 38 -2 12 0 -59 2 13 -46 21 -8 -34 13 18 -30 -12 34 24 -18 -8 24 17 -21 -4 36 26 42 20 35 -23 55 11 -23 -1 10 32 48 2 49 3 18 84 -40 20 7 29 -63 -24 7 44 9 -83 53 50 -41 20 -47 32 -39 26 -49 -12 -44 34 -41 51 0 6 47 -5 7 16 89 -68 -13 -16 -25 -2 6 -70 15 -18 -1 31 69 6 -7 14 -16 17 -41 31 2 -13 -10 -3 51 46 -37 87 -80 -17 35 24 -1 2 43 1 16 22 -15 15 -16 15 12 26 53 -18 40 -49 -2 41 -34 44 -51 3 28 -29 5 44 -22 -10 28 2 -54 27 -17 19 43 -16 -9 -11 13 -37 31 16 -1 -52 26 10 -44 -31 -8 -55 21 20 -43 -29 36 -31 -46 11 -9 -18 -22 30 42 -16 0 -50 0 -30 31 -7 -3 14 -19 21 -29 -34 50 20 20 -18 13 -5 -52 -32 -5 30 88 -26 41 -3 -1 12 38 13 22 53 8 14 13 -13 7 -12 -36 -4 -19 -16 -3 -6 -37 17 -3 -28 24 -1 23 16 -7 -42 -12 20 8 17 -16 -4 -6 42 48 -18 2 -10 20 53 -71 42 -33 8 20 -25 12 52 -23 52 16 58 -15 38 -18 1 57 -12 46 -1 -58 -10 -47 4 11 -11 -25 -1 8 -5 -30 34 -18 87 21 1 44 -70 21 -68 21 46 9 24 21 33 -33 -13 -68 -71 17 68 83 36 76 -12 -9 -22 9 13 124 17 25 12 84 -30 -61 98 -14 18 7 25 -44 39 -45 -13 36 -23 2 105 21 -17 -41 49 42 -33 2 -19 32 -12 36 13 12 -76 -33 9 -46 14 -24 -3 24 39 81 -35 48 13 -8 -23 -34 -47 -4 -50 -62 33 -23 -84 -2 -29 12 5 -126 52 -20 -35 11 -48 6 19 -34 -91 -12 -33 -12 -17 9 43 -5 -51 40 10 -18 18 59 -34 -82 -35 -110 -45 22 8 27 -41 7 -12 24 -18 32 26 64 41 -3 6 -26 -45 22 39 -43 5 18 -4 -121 -7 3 -42 4 -39 -18 43 -16 -92 -50 13 -18 -2 -21 26 12 10 9 -1 -9 19 26 5 17 31 -12 -31 -8 -33 -15 13 -2 41 -23 -23 -12 -25 28 -11 10 -11 -26 33 -17 -31 -30 32 -7 -20 21 3 -13 -11 -8 -17 -12 -5 -35 -8 16 27 -10 -64 -52 -19 28 23 5 14 -32 -13 -37 -31 23 -49 30 -32 10 14 -2 -2 -3 11 23 15 -19 10 -10 30 49 -17 -45 -19 12 -11 6 1 6 -5 49 7 -37 9 5 -9 -20 34 -40 2 97 46 55 26 56 16 61 -6 -43 62 -90 17 -18 49 68 -2 2 60 37 -28 1 52 -55 -36 -58 34 65 29 27 28 -40 63 42 -15 -10 -19 -1 -7 -74 58 -10 -27 -7 41 -4 -35 -27 -11 45 -52 44 -5 45 40 41 -96 28 -22 84 -4 5 87 -80 4 3 30 75 -20 27 -69 101 -37 -91 -45 -29 -16 40 -38 57 107 26 45 -43 -3 34 0 44 22 -19 29 -37 6 -8 0 -17 58 46 -2 -29 -12 63 -19 -34 -25 13 92 -40 -6 9 -25 73 -59 10 -46 -32 80 28 8 11 -8 20 4 -22 113 -12 -75 29 -77 88 -28 26 53 -22 -13 -64 -43 -92 -7 11 -121 -1 -61 -26 52 -18 15 -49 -20 30 14 -12 5 8 29 63 -4 -122 -22 -21 25 -65 -43 82 3 -23 -82 -19 42 0 3 31 29 -18 -87 -20 -5 -19 87 -54 -44 46 -17 -3 15 -5 -72 1 43 3 -10 -52 -5 17 -18 20 -25 -1 -33 -53 -16 -5 1 -60 10 58 6 20 -29 10 -25 -20 22 -20 3 0 11 10 -16 -13 29 3 12 0 18 6 6 40 12 34 -19 20 52 -75 5 17 31 -52 -21 14 -6 30 -34 -45 27 -3 0 35 19 -5 2 12 -40 -5 -35 5 7 14 9 -8 -3 11 -50 13 3 1 -7 -41 21 -33 -43 42 -5 1 1 -37 -21 -22 18 17 57 -14 13 13 12 36 19 12 2 28 36 -82 3 41 12 6 -11 27 17 -45 -7 50 27 61 -39 72 18 -37 76 37 88 68 32 -34 -72 11 21 35 7 14 -76 55 65 32 38 100 -24 11 113 87 35 -21 33 0 19 -9 31 37 1 81 35 3 0 -43 -58 -20 29 -41 15 26 -23 -29 58 88 69 16 0 102 -6 28 -35 22 127 54 5 29 21 46 -16 37 -9 -31 43 11 -3 -21 -27 66 6 17 -18 35 -11 -13 40 54 37 -3 28 18 36 43 70 31 -14 65 -37 5 -45 100 -20 -26 -26 -21 58 64 -12 32 6 12 -75 -14 63 28 41 46 -7 45 -70 98 -61 48 4 -47 -63 -40 44 40 10 25 -19 -5 51 4 19 -63 2 -33 -34 10 -10 -11 -37 -42 -14 5 75 -7 12 43 -1 -26 -43 99 -19 -26 42 2 5 -10 -15 3 44 30 -4 -15 8 -79 7 21 9 78 47 18 -49 10 -29 24 74 37 -13 -4 -4 4 5 8 -16 -38 -9 39 -18 17 27 -5 34 -4 8 -11 41 25 49 22 60 45 42 37 43 46 2 -27 -5 -4 12 6 -10 11 7 10 -9 0 24 -3 -58 8 2 6 -11 -22 -3 36 66 54 -9 -11 -43 49 29 -16 10 5 -6 -9 7 18 45 18 -13 -19 -7 6 38 3 -7 62 45 -20 15 2 -55 8 -12 -20 -20 -11 -25 -6 3 -21 33 22 -9 4 -1 32 43 12 23 -45 -16 38 16 18 -18 -10 -25 23 48 2 -25 -13 -18 4 87 14 -9 44 48 20 36 -46 14 -18 -9 13 10 4 17 -17 -27 32 66 -8 108 -3 -44 11 -91 7 -16 29 10 -40 -4 -24 49 -16 -36 -9 20 -66 15 -72 -25 8 113 61 89 -48 -22 -30 5 -34 27 29 0 17 -3 3 -56 31 -35 -90 -37 58 -18 18 10 7 -29 -25 24 58 36 44 84 -7 42 49 -4 -40 -31 43 26 -6 -11 -4 -39 67 65 -10 -19 41 29 48 64 18 25 -48 -57 -10 55 -50 -3 12 5 17 -15 -45 -23 17 17 2 9 -3 24 -15 61 10 31 39 -41 2 -14 5 84 39 12 -29 -6 4 -27 4 -24 9 -11 13 -14 9 15 -33 -46 -28 5 -3 32 -6 10 -3 -10 21 45 -17 9 -24 43 -23 -14 5 -14 23 5 -40 21 -22 12 75 -47 35 45 -5 1 6 -13 13 -32 30 67 -6 -7 12 5 -5 -16 15 -4 9 -11 0 7 42 32 -13 -27 15 7 0 19 -38 -14 14 -24 15 -13 -20 17 2 12 38 11 3 23 14 -13 12 6 -36 25 4 4 -16 7 56 -19 -9 -3 -6 27 45 -28 -15 1 -7 18 17 -40 -12 -1 43 90 -9 -25 32 -14 -20 11 -14 37 9 9 3 -35 50 37 -8 -20 -49 2 4 8 -10 -13 27 26 -7 -6 8 -2 9 22 4 0 -12 7 -9 -20 27 -39 12 -37 65 101 -4 62 -13 41 -23 3 -92 47 90 52 17 -12 73 115 18 106 20 41 -12 7 -63 70 52 -34 -34 42 73 64 17 67 9 -21 -1 -22 42 -3 -46 23 25 -32 -55 14 42 -61 43 83 16 33 -52 -21 24 -76 9 36 14 -54 57 -21 -2 46 108 15 12 86 22 7 -18 64 126 -49 32 43 57 23 74 15 -10 42 36 40 0 78 7 12 95 -40 100 50 10 -16 38 61 -35 -9 -5 9 -15 -10 42 29 -11 -16 -26 47 -26 2 -128 -10 -18 -10 -18 64 -22 16 11 -16 -70 40 19 -15 9 -39 14 56 -68 110 36 -13 41 17 -2 5 23 49 -102 49 56 26 -62 35 -37 31 16 3 -30 56 -5 31 -13 -13 -4 5 43 -21 12 -21 -20 81 -9 14 11 3 52 31 -25 24 -34 46 -32 -35 14 -52 -21 57 -33 -39 19 -49 32 -25 37 32 -62 -113 -25 7 20 -19 -3 -6 24 42 13 -29 6 26 -61 -14 -1 14 -27 4 -15 28 9 26 -17 80 -7 12 -32 -35 16 32 23 -12 -4 33 22 -11 7 27 1 -7 -12 -40 1 13 22 -23 -27 -2 38 -31 -14 63 70 20 22 71 -3 -69 -3 -3 -35 38 -46 23 0 -24 39 -77 17 -13 0 23 31 -63 49 16 -6 -30 -9 14 3 22 34 -36 -9 -18 9 2 -21 34 -14 1 -48 -9 -3 13 45 23 15 3 12 18 -5 20 0 -2 8 0 14 -15 -9 -10 -13 12 14 -7 15 9 4 17 3 1 -7 9 18 25 3 14 -13 21 11 -13 8 1 -5 -13 6 -9 -5 -11 10 3 -12 12 0 11 7 11 -11 -9 -16 18 2 -2 -3 19 13 -33 -24 -10 -9 1 -5 -15 -19 7 -16 -8 -2 -21 -17 -12 1 -11 1 -8 3 -20 -9 -6 17 1 11 18 -18 -9 8 -17 4 -4 9 -5 10 7 22 -11 2 -22 16 13 -4 19 4 -8 -18 -4 15 11 -16 -18 22 13 0 -24 -14 29 0 -6 1 -2 -1 21 -5 15 1 -11 3 -9 -3 2 16 9 0 12 -10 16 -2 13 -8 22 -9 32 4 1 2 13 13 8 -10 19 -9 12 -12 -22 20 -17 -2 17 -17 10 6 7 7 -1 -2 8 7 5 21 -5 -10 15 -7 -1 -7 -10 7 12 -6 10 7 17 -14 10 -1 0 -1 -5 -8 -13 10 14 -8 -6 -6 5 10 2 0 9 -19 7 7 2 5 -21 5 1 2 1 9 -19 14 7 -13 -14 -1 11 11 -2 2 8 4 9 -10 3 -4 2 4 -2 10 10 18 1 11 10 -1 -13 15 8 1 1 6 18 -5 -16 7 2 16 26 3 -3 6 2 6 13 10 14 -5 -5 19 -15 14 0 -17 4 -11 2 5 -3 -12 -1 -1 -6 10 -5 -6 6 6 -20 4 8 4 -9 10 -5 -9 3 -16 -17 7 54 -5 -67 -1 46 0 -5 32 -19 0 12 4 1 -5 -35 -6 -30 16 3 -41 -10 41 -27 -14 -16 15 1 10 8 -9 15 11 -14 -2 19 8 -40 -10 11 5 3 -9 3 9 -10 5 7 -7 -30 22 -20 -16 0 -27 42 -23 9 32 18 1 6 5 -16 11 34 -23 1 18 0 -6 -8 17 3 0 19 -6 -33 19 -10 2 2 3 -6 -18 13 -6 -3 8 -18 -9 16 1 1 38 36 2 28 4 -10 33 16 11 -1 -9 17 -21 6 -15 15 3 -41 43 -36 49 42 -32 44 20 -11 -7 12 25 -13 17 9 5 -14 30 -1 11 -3 28 -7 -20 11 23 -21 3 28 30 -19 6 33 14 -31 21 -27 66 6 7 -21 21 34 -13 -9 -18 -62 -25 -28 20 -71 -32 -23 19 0 27 -6 -26 -2 36 -15 -7 -34 -8 21 22 -22 -4 -43 -48 -2 15 -7 -37 -30 39 -3 0 -1 -4 1 -8 7 8 -4 -25 -7 -15 16 30 -6 -14 -12 22 15 1 13 11 16 -32 27 -25 -15 -8 -10 13 -9 8 7 0 23 -1 -20 -37 -22 11 -8 13 10 -12 -5 -23 -16 15 -10 16 17 -6 15 3 -18 -5 25 -10 8 -19 -23 -8 -2 37 6 22 -30 -17 9 0 5 18 -2 -29 1 2 3 4 12 22 -16 -11 -13 0 -11 -19 -20 -5 -34 -8 12 -9 -8 10 28 -12 -16 -16 -26 -19 -14 9 48 -17 17 12 -4 18 7 -12 -21 6 -34 5 -37 -28 11 -19 17 22 -31 -49 -12 31 -10 -57 -21 -38 -29 21 -21 -27 -48 1 19 27 9 -12 3 25 -37 -7 22 16 -9 -15 10 7 26 13 -2 -6 -8 -8 -50 7 29 -12 4 -29 10 23 -4 -21 -14 -24 -12 10 -4 41 4 21 -20 -37 -8 -8 25 -45 -30 24 1 3 -3 47 8 -62 3 -22 -14 22 -50 3 14 25 -41 52 16 15 18 -61 -32 29 -3 22 -8 -70 -13 -32 8 4 11 25 1 25 -31 28 -39 -64 11 23 -12 -15 -7 -38 -1 -58 -103 19 9 14 21 67 8 -6 -61 -61 26 -11 3 11 32 51 -25 24 16 3 31 -19 -6 10 -20 -1 -1 -3 -24 27 -31 -19 29 -14 -45 -10 75 -53 -29 -26 22 -23 -31 10 14 -34 -39 -28 -35 -2 44 13 -36 -46 55 -32 -62 19 -72 -33 -25 -10 -8 -12 -13 4 -36 -11 14 10 -23 -29 -9 3 9 -7 -5 -24 10 27 -2 20 -28 14 3 -37 2 -29 3 0 -17 -2 -15 -20 -19 -23 19 1 23 -13 -1 10 20 6 28 -22 -17 -18 -4 -6 -9 0 -7 -36 12 -10 66 -18 31 11 -6 -18 -1 4 -8 17 -32 1 3 -2 0 -24 22 3 19 -33 22 6 6 27 12 -14 -11 26 -5 -10 -7 -8 -9 34 26 1 37 34 -2 -19 32 -8 1 14 -25 22 -27 15 -12 -3 42 55 -42 14 31 40 -8 46 36 14 -38 -17 9 -13 -13 43 -43 -22 -13 54 -22 -8 -4 7 -1 -26 77 -19 -55 -7 4 33 46 17 67 21 23 -12 -1 13 14 24 -36 35 37 -8 10 -3 9 67 -74 -63 -4 -23 0 12 -6 35 14 67 0 13 13 25 27 -6 -19 5 4 6 -7 4 56 -19 -2 -21 -17 1 11 28 6 27 -49 10 -5 -15 1 8 -4 29 -1 30 0 30 21 19 56 -39 -15 -49 4 -23 -2 20 -30 -22 -3 -10 -4 -2 -17 19 24 -33 11 -5 37 -8 7 7 -37 7 57 -18 55 -61 -11 13 27 54 -15 -10 52 -14 -21 -21 2 47 -29 11 -16 -77 -16 -57 38 53 -14 30 -4 6 -3 4 43 36 12 21 3 33 -36 -16 -2 4 18 -37 62 19 16 -24 2 -3 57 -18 24 40 29 43 -34 88 -41 -22 -12 -54 45 93 -11 10 14 10 -33 0 -12 -5 -10 18 -14 12 -25 10 -9 -14 -10 -27 -21 -11 -27 -3 32 -16 -10 -19 0 0 7 -42 -10 -24 2 13 8 -20 49 30 6 12 -9 -3 0 8 17 1 -16 -14 -20 21 -18 -17 12 -37 -18 33 6 11 -8 -14 0 15 -14 -18 -21 -42 -5 22 -15 -29 -31 6 9 -39 -3 25 -1 6 2 -16 30 -15 -17 2 30 14 -23 9 -18 5 25 43 -14 19 -20 0 17 -75 -44 -2 -11 -26 -7 7 -84 34 -47 -13 27 22 19 -5 -9 20 -24 70 -36 6 39 16 11 36 4 49 41 32 -7 14 22 31 86 15 -49 12 -44 18 25 -10 23 16 -25 -27 7 -44 -25 -16 -13 -17 -14 -53 -33 -9 -53 70 24 -16 50 40 -16 5 -19 55 -33 52 19 19 39 6 5 36 -33 26 20 -18 -28 -33 57 -4 -5 -60 -16 -3 -21 22 33 51 10 40 -2 -18 4 23 -10 30 16 60 7 -6 -3 -8 4 -36 -56 62 37 15 -21 -25 25 59 -11 3 77 -20 15 31 -9 -5 67 -36 9 70 -16 21 39 18 -30 -8 -48 36 -79 -24 53 -2 -2 -9 -35 11 36 47 0 16 -77 -33 24 -71 -10 -3 -5 14 -58 -35 2 16 -5 -25 -1 1 -95 17 -33 -76 -71 -47 -29 -43 -4 -39 -5 16 21 23 -7 -16 -72 -36 -23 -2 13 6 9 18 18 -38 -5 15 -38 -34 12 21 29 -14 -3 0 -2 -3 50 12 -3 -29 27 10 29 -36 -17 -15 -34 -17 35 -10 -24 31 -10 -40 -18 -35 36 -35 -7 55 -6 19 -38 -18 29 -22 -7 -9 -34 -6 -33 -2 0 13 -2 -21 0 -9 -19 28 -5 -21 -29 6 -2 29 -6 24 0 -8 -29 -8 29 -34 -36 8 -11 22 63 15 -31 -6 -10 14 -5 -5 -17 -29 5 8 -12 33 38 2 10 14 -18 29 16 8 -7 3 34 -44 28 -17 -68 -18 -14 -26 -18 44 26 -8 -5 7 15 -71 4 -41 -15 -30 16 9 71 -13 24 10 17 74 -19 32 26 97 -10 -13 -3 9 55 47 5 81 -22 6 33 -12 -42 -7 -13 74 21 -5 -21 43 -2 -41 -16 -57 19 -5 22 28 13 78 4 30 -6 -2 -76 1 -26 -28 8 19 -45 -46 28 23 -27 20 -13 11 -4 16 51 -25 -1 -13 -20 5 41 -6 -62 -22 -16 3 -13 -4 2 25 5 -12 12 34 -17 -19 -49 -82 -28 16 -11 -15 -25 -27 -26 -45 48 30 1 -18 -66 13 -36 44 -48 -27 -27 32 31 8 -57 -40 -29 35 62 14 64 45 -4 -37 32 28 32 4 -15 -34 -9 73 22 18 -7 -42 -14 -38 71 -5 69 28 -6 -28 -29 50 -39 29 -35 -22 79 -25 19 47 55 -69 26 31 -31 -36 11 -44 59 13 -40 -9 -12 -22 -46 5 -60 -10 29 17 38 26 30 37 52 25 -5 34 2 -4 -1 13 -11 -20 -31 -13 -11 7 -23 4 -15 2 -49 -5 0 0 0 0 -14 19 28 -34 -4 -39 19 11 -15 -79 9 16 -7 9 -15 -59 -5 9 -27 12 2 -23 -6 -5 -7 5 7 10 25 44 -50 24 59 19 -8 -30 -2 -14 -44 -15 -19 33 -1 7 65 4 1 1 -11 3 20 -17 -35 16 -20 3 1 11 -37 29 -21 16 -1 21 -4 -3 3 -4 -1 12 3 11 0 16 -26 -119 -8 -78 -45 -42 -14 56 -70 58 31 125 78 127 67 -76 -34 59 76 -82 -39 -107 -67 -75 -65 30 -114 -11 -6 127 -18 -7 104 -74 87 32 112 -20 92 96 30 -126 -2 9 106 4 -105 124 -126 85 44 -32 33 127 87 -48 -19 77 -42 -127 -55 1 16 -64 85 122 34 -80 98 -74 127 -14 91 5 69 17 67 98 -21 46 7 -25 3 -73 -14 27 -116 9 -68 -19 -125 -40 -31 -127 108 6 62 -63 -127 22 -68 -19 13 75 -46 -2 67 -32 127 104 -10 -96 -17 117 10 7 23 3 127 -28 31 57 17 12 -78 127 -9 90 12 -127 -71 49 113 -21 -1 -121 83 8 -87 -35 -2 -109 44 -78 -59 24 -22 -36 -23 17 -127 -7 -96 -2 -6 2 -66 -26 50 56 -35 -104 -65 2 -127 15 -126 40 -56 2 -22 -125 47 -99 -7 -127 -9 -29 91 10 -43 -34 85 81 -119 32 -69 -50 -120 -63 -48 -122 88 -76 -9 62 52 -28 -30 -59 -70 -21 -12 54 3 18 -44 -12 86 52 94 59 30 -15 -104 -35 28 93 123 -62 -118 10 -37 127 -51 -13 -8 46 -27 -2 20 109 62 81 10 -10 -33 -18 35 -51 39 5 57 46 -122 58 -64 114 8 -11 23 -6 -29 15 -21 2 7 126 -58 71 -43 -110 27 -16 15 91 -71 17 28 67 -60 -59 -42 33 37 -40 109 8 23 -37 -50 -38 -24 46 -11 81 -53 -56 75 -26 -54 84 58 48 -15 -21 -128 -13 -31 62 5 -9 -61 -125 4 -10 69 29 12 -46 54 -128 49 -126 -127 -110 37 63 -9 -69 117 -123 84 63 -103 74 58 22 11 -22 5 -6 -9 -78 82 44 37 -19 16 -11 2 127 -16 -70 127 -110 61 122 -121 -49 16 -8 34 18 -51 -125 -29 -79 41 36 42 108 58 118 -59 36 120 9 -57 53 -7 -43 -125 -18 -68 125 -35 33 127 -77 25 97 -27 -124 101 108 -71 -13 127 -56 77 -61 44 -52 34 44 -100 -85 90 -90 83 59 -127 -49 21 -69 44 90 -122 -58 -15 127 97 127 -118 -126 -121 -120 36 -77 57 -30 85 -102 126 126 -43 -64 -73 -8 77 57 -10 1 2 55 -60 127 127 -91 -106 116 -68 55 -30 -46 -116 60 -86 -66 127 -17 -82 -9 51 50 86 -115 -113 85 127 -53 20 -77 39 -56 -35 -3 29 -128 -54 -128 127 -90 -24 -37 -60 68 127 125 120 36 -18 35 -9 86 -69 55 -47 102 37 -77 -74 -22 -29 9 44 7 87 -30 29 -3 30 4 -7 62 108 -96 -88 55 19 -33 16 -31 31 -22 -96 -65 49 123 52 68 -81 44 -28 27 123 -72 98 -31 -39 42 -34 34 36 -51 -84 41 -4 22 -49 22 35 -47 -4 97 98 108 -42 59 5 -10 -9 -20 -50 97 -37 -23 -10 -73 27 42 26 104 37 72 -4 84 61 118 72 58 -15 5 -16 119 -5 -75 -18 12 -77 -13 13 87 -105 -22 109 -81 37 48 -48 -118 -74 9 123 -92 48 -91 -64 -85 115 -89 -121 -106 76 112 -66 -55 127 -121 -86 44 127 -103 47 86 -121 -122 -111 46 -11 -39 -40 -109 -57 22 14 -67 9 127 -44 -106 -33 -16 59 -125 10 -16 31 -53 -37 124 -88 45 -18 94 -123 -7 -13 -33 -41 -115 5 47 52 -17 -117 -65 104 -94 -76 -8 32 -63 -107 13 -98 118 44 -38 -15 -43 114 -94 -64 18 -67 35 -63 127 80 -2 14 -41 75 -9 -42 -128 -5 122 -77 -33 60 52 81 31 -19 -74 82 -3 -20 45 -127 -75 -14 -4 -61 -10 118 57 85 15 104 -16 -53 -67 5 -55 -49 -7 69 -74 -39 -13 -92 -124 -110 65 18 99 -62 62 23 100 38 96 -73 48 -53 -58 -122 -48 -93 -4 -13 -126 19 57 -5 22 -45 -22 66 50 -7 -38 29 -12 45 127 -113 -34 -2 -14 -16 -17 64 -73 123 -20 40 88 74 44 60 -57 -38 -98 -70 -21 -11 -37 -69 73 24 -67 36 -12 3 13 -63 -10 -91 14 107 25 -50 -33 58 -32 -66 -23 53 25 -98 126 9 125 17 126 17 2 -34 29 107 -8 -1 -68 -52 6 -32 65 -4 15 38 25 90 -35 83 3 -10 36 5 -51 -54 43 -28 -8 28 -87 -50 -56 3 37 40 27 3 -90 35 -9 8 34 45 -13 -115 -23 -67 -89 75 5 13 80 10 -54 44 -122 39 44 27 -17 -27 90 46 -65 41 -54 41 14 -35 -77 -63 -118 72 86 -47 -37 29 51 15 112 -51 -25 28 105 45 7 -13 -126 29 -35 -9 127 99 -17 -77 -122 -128 -98 -60 -103 -127 -103 -86 68 -120 6 38 -124 11 -88 44 63 75 -62 -15 -10 28 98 46 -10 -13 -94 102 -51 105 88 -107 48 96 -27 -12 91 89 -29 115 51 126 -128 103 -111 -86 -54 70 -126 -55 126 0 43 123 107 126 112 5 -23 65 15 -57 -32 22 70 -127 -4 -123 -107 -128 -117 86 127 -60 -28 -104 26 43 127 -125 -49 -60 113 -36 -59 -54 -54 -32 86 93 117 92 126 102 -36 98 2 -62 -18 81 75 92 -101 -126 -44 84 -120 -116 -38 127 127 23 126 6 88 -20 73 -109 90 59 -122 -101 126 -101 60 -93 28 81 -24 -83 77 -128 -99 -22 -127 -127 -57 18 -2 120 82 -101 97 127 90 -20 33 -127 -102 -2 17 127 -95 41 47 -24 -27 -19 -20 -94 -45 52 108 -109 -82 -21 70 21 -102 76 79 -4 63 67 -57 -50 50 11 6 -8 -82 -66 40 2 94 47 26 -127 -54 15 18 -40 127 120 -18 -108 -37 93 18 106 -66 -5 86 33 -41 19 11 -30 -19 16 -16 61 -21 -16 -2 -61 -127 -13 71 72 1 -86 -98 57 14 -126 -2 -87 -33 -102 28 123 44 31 22 60 17 -55 -109 91 -80 61 127 51 72 38 -39 34 -124 -58 38 -100 -19 7 29 -95 -127 -50 -51 82 3 2 -43 -123 -3 -124 -11 126 -10 -18 -73 53 127 125 120 125 93 -127 63 73 28 -89 77 72 22 -40 0 -32 -123 -17 8 -126 -111 -34 -65 -34 -31 -106 -53 -124 14 -112 15 -63 5 -18 24 57 -79 -72 -68 60 -128 39 -122 33 -63 26 -20 -79 90 -4 -9 -22 -68 125 -109 36 -105 126 -3 14 -109 -4 107 -36 -63 57 -22 -40 -28 33 -13 76 -19 -128 -31 24 -126 17 -22 -23 -27 -128 25 -111 -14 111 9 -45 126 -68 -127 124 -39 -16 120 -16 -22 -126 27 -92 -107 -120 -127 -88 52 -28 -59 54 -121 94 116 127 -13 125 60 -117 125 -110 -22 127 -5 -114 -127 -8 -72 -34 7 -32 50 -50 48 116 127 24 9 79 -128 45 87 -69 -47 120 123 -17 77 51 126 -127 126 -107 127 71 10 -127 -71 -77 -91 -33 64 -126 -126 68 79 125 49 97 83 50 -31 42 51 -76 17 57 -5 -14 47 105 -88 -36 -64 95 -94 126 -62 -3 -53 33 44 -8 36 32 50 127 -55 127 32 57 14 -104 -4 49 -32 109 29 -4 -5 -23 106 -16 30 -109 126 64 9 23 -61 -48 -49 -126 80 -54 -128 -74 20 -18 41 74 -127 44 87 -87 -96 -57 39 51 78 -70 -90 -108 -50 39 109 -5 6 -87 -57 36 72 20 81 -88 50 -36 83 -54 68 -21 109 -5 -110 47 -15 98 -32 -14 46 -56 -128 0 34 -93 14 90 -98 -42 10 55 -56 48 31 -33 126 37 25 52 12 -33 -127 112 -23 -18 -127 -23 -127 -19 56 -104 -51 31 -58 -84 -91 -107 -56 -111 -7 2 -47 -128 -87 123 58 -45 83 -127 39 69 -87 -32 126 -51 -35 18 -35 56 31 -44 -128 19 -17 68 86 -88 -58 51 -96 -127 -69 -28 33 80 -123 -128 -127 125 59 -47 -103 -127 0 43 127 -128 -17 7 -85 63 2 56 -35 -127 -30 125 118 41 -126 13 56 126 123 126 115 -123 110 -22 -95 -23 -121 -102 99 127 -128 127 -86 10 20 108 90 44 125 -27 -128 40 -77 -127 33 56 -44 14 2 126 -44 107 16 -84 -127 116 -109 -26 -38 114 123 76 127 2 -120 -126 61 -85 -126 -128 83 -20 -65 -1 49 -77 68 -42 -14 -18 33 117 -59 -25 -58 -38 -95 -40 -106 -49 -35 -113 -126 64 39 86 108 -127 114 27 -97 -122 -36 125 -56 -93 -17 -127 78 -27 28 3 -14 70 -14 65 26 80 45 102 -17 -45 35 -45 -4 36 12 1 125 -88 -57 33 117 43 103 -17 -4 15 -75 -17 30 -57 17 45 127 -50 95 76 9 83 47 106 2 68 -48 -128 86 68 35 47 -10 22 -20 -48 -33 -33 -11 -32 18 0 -9 -32 -16 93 46 -48 56 108 65 -5 -28 -50 -34 -55 -6 95 -8 -87 28 67 -24 -11 -9 5 16 28 -5 30 -60 84 -6 -92 82 83 4 -43 19 -38 1 -104 -92 60 -123 53 22 -98 -46 -11 -78 -55 79 -32 -74 24 -81 127 -14 127 -80 20 74 93 -56 -40 -92 -86 -72 -40 -36 -123 -57 -11 -95 -128 -77 -73 75 127 15 -126 -11 -127 78 4 -24 -126 59 -32 45 -124 -9 -58 -46 27 52 -38 70 52 120 6 -63 -25 -124 -90 -15 127 -31 23 -126 -33 -74 75 -58 126 53 -126 -128 58 -127 -59 15 54 41 96 -33 -93 -118 126 16 71 0 -87 84 -33 -100 -82 36 -36 -35 -126 -29 -29 120 16 -55 119 3 -59 -128 -5 -128 125 -94 -3 -101 51 -40 1 -40 -127 127 -128 46 79 104 -12 -32 41 -128 -6 67 127 -16 20 -101 118 -128 -34 121 102 118 -56 24 -84 -92 3 127 -127 7 15 -63 -66 24 11 -66 29 -128 -1 -26 12 -4 -72 -23 52 122 -49 -58 53 125 35 -125 -127 126 44 75 91 -99 63 -84 80 29 -9 -128 -19 -8 -37 -1 13 127 68 -68 84 -37 -4 -48 21 3 127 8 -30 -9 -69 19 57 -45 63 87 -7 -13 58 51 80 -27 -17 85 -10 89 111 4 35 -18 -15 42 -55 75 -80 -18 100 -58 49 -1 120 54 -128 49 96 -128 -14 -67 -78 -44 7 29 -43 -51 -49 -102 -29 109 19 -37 -3 23 30 -2 -44 34 -45 -12 36 -65 15 41 -32 -31 -15 -55 7 -43 21 -27 77 84 -3 11 -55 28 101 12 48 -75 -15 -77 -31 85 -75 107 -77 -24 122 64 23 -53 -39 82 10 124 -85 50 100 108 98 -120 127 39 -18 -128 -94 19 59 113 -2 -127 -126 -89 4 -128 7 29 71 -39 -98 -122 -41 -47 -128 86 -127 -120 -82 -14 -46 -4 69 79 22 -127 -114 11 -108 37 31 127 85 -40 -128 -78 -51 -15 -31 -62 64 125 -12 24 -27 -48 78 -10 120 -73 101 -76 -61 6 -28 122 -113 -53 8 52 -78 85 26 -30 -110 -15 -112 64 67 -121 31 -37 21 -1 -63 -123 -97 -34 -32 -25 31 -4 75 17 -124 -117 44 -13 -12 -26 108 -107 -65 125 57 19 30 125 -98 -12 13 85 124 -43 15 -86 -89 19 -128 -46 -96 94 123 75 46 67 -78 -14 -67 37 -31 82 -127 127 -88 -94 69 -127 -56 56 -35 95 -13 33 61 -36 -92 -45 -128 -44 60 -95 -34 54 -48 8 114 -79 -78 68 -9 -52 80 125 -14 49 23 -88 -40 -77 -103 15 68 -31 4 -83 -53 0 -40 31 -2 89 28 65 127 -8 17 37 32 85 -112 -48 25 -18 -19 -18 -34 18 -10 28 -30 66 45 123 127 60 -38 -38 -13 127 62 -107 -60 -53 73 -6 69 -17 101 -43 -24 -126 -119 19 17 102 16 0 -50 -86 -43 -33 -125 -95 90 43 24 -78 13 102 127 -33 -9 18 -20 -48 3 4 -2 -49 7 -65 -60 25 19 62 119 -11 94 -39 1 121 1 32 126 5 1 71 -55 -122 -65 -126 76 42 -47 -3 80 -68 92 114 -111 -115 5 -13 -128 -88 4 -49 -54 -76 62 -118 15 -80 -12 120 14 -18 10 -125 -123 -103 58 -126 -113 -76 -39 -122 -118 -123 -107 -88 -41 -127 -67 18 -120 -120 -44 -37 -122 92 15 34 127 124 -12 67 127 -76 -51 2 -107 -4 42 -109 -122 67 -44 127 29 19 -93 54 18 -22 121 -128 123 -104 -123 -82 104 126 127 27 -60 -87 45 112 123 -8 -126 -84 51 -22 66 84 72 103 -24 -85 104 -50 -86 51 -57 122 79 -69 -92 27 36 127 127 -102 31 -41 84 -112 -128 68 122 127 -123 84 -119 -82 50 127 127 8 69 110 12 -127 -113 -127 105 -68 -124 -51 -21 127 45 109 127 127 -28 26 125 -16 -95 -59 36 -24 -48 50 -76 64 26 118 127 -127 117 -128 -107 99 -59 19 -15 -128 -123 68 127 -59 124 9 -126 -88 -13 123 -128 -114 -127 -122 -39 -25 -127 67 -127 60 114 52 -33 114 39 -54 68 87 122 55 -31 -14 -16 28 108 79 52 89 69 -39 20 127 126 20 5 7 37 96 73 28 104 -78 40 -126 29 108 -24 72 -29 76 17 15 -40 31 -18 -21 -123 -32 33 -80 -124 89 -10 24 75 -56 98 -28 -75 34 20 -1 59 -26 86 -94 -32 41 -10 -62 -124 -120 -4 50 -111 -25 127 17 -84 33 -19 50 -111 -65 7 -73 73 -56 -76 -12 98 75 87 64 -110 -128 127 23 -128 122 4 -114 48 84 67 15 8 -71 -126 63 48 127 -23 26 116 9 3 -11 -118 -125 -124 93 118 88 -2 -101 -118 -39 -127 -102 -89 127 13 -120 -113 -39 -112 -70 114 -13 -44 -83 -128 -127 -23 55 -93 100 26 -41 126 84 -28 13 1 127 -17 -86 -12 -109 1 -17 -44 84 -19 116 -73 -127 124 96 127 -116 115 47 -108 -126 -94 -115 103 88 92 121 71 -127 -105 116 122 -59 -109 47 -8 -40 126 -52 33 111 -55 11 -41 123 127 -3 127 127 -56 -128 75 -110 27 127 -28 127 114 2 108 -56 87 -128 -56 -56 47 -127 -47 23 107 19 127 92 -77 -56 80 -123 -126 -125 104 -126 -127 -32 43 -6 23 -80 102 98 41 2 127 66 -70 127 -18 -47 -51 -19 9 106 -50 49 -26 -46 -120 118 -89 127 -121 102 15 118 -87 93 121 -29 -56 109 -56 121 -17 25 -127 119 -127 118 76 -10 -125 93 3 124 51 -127 115 63 112 -126 -17 -75 127 -38 125 -19 20 113 38 127 -38 54 -30 -125 -32 89 -4 -31 123 0 -13 82 -35 12 75 71 20 -127 -125 127 -25 -64 -12 64 103 -100 61 11 18 -96 -128 45 -54 -63 -110 24 17 44 103 -67 24 -89 -23 44 -65 35 64 -63 22 80 -128 83 0 63 -127 125 -26 21 -56 23 34 -12 -94 117 -125 -122 11 60 -4 -48 40 -126 98 -28 87 106 80 -52 6 -9 -60 -16 -108 105 56 -113 87 127 26 -128 120 -78 119 -88 -57 -81 -97 -98 -43 -116 88 -38 -74 51 85 -11 127 76 13 2 -9 21 127 -25 -118 -126 -12 25 -50 -63 -61 -127 6 -69 -75 -20 -126 -61 7 117 -83 49 121 -108 -59 64 102 -89 -127 68 -85 -52 -49 -18 57 -109 28 -119 -11 127 127 46 11 -125 -61 73 56 -106 -116 -8 -115 41 127 -10 -115 127 -53 -23 -45 20 79 -30 13 -125 25 127 -25 38 -17 -38 74 82 -69 25 -67 -81 96 127 37 -67 -22 -113 -115 126 105 -10 69 -30 29 1 -121 121 10 98 -85 -123 39 127 101 110 -125 -94 122 -121 -25 -103 26 -84 -64 -63 -10 -123 121 76 60 119 64 107 101 67 -128 127 9 35 43 -56 -8 57 -3 -75 127 -67 0 54 126 90 86 -52 -10 -30 -108 -82 -121 87 97 -4 64 -51 58 -127 20 -6 1 26 77 -87 -29 -126 124 33 -58 -8 2 -29 99 -52 -17 53 -128 -22 -48 -46 75 -18 -105 94 -82 41 -25 79 -22 -126 -125 38 -115 68 44 -10 37 56 125 -46 -70 50 10 -127 -8 67 -81 -20 14 -30 106 -56 123 -83 107 65 -33 126 127 82 87 42 27 31 -71 -62 -38 40 15 40 61 -128 26 51 58 24 108 48 -120 5 -7 -127 48 5 115 -14 43 -18 4 66 -46 14 -33 80 5 100 -18 56 -73 72 107 -77 82 126 127 -43 -77 124 39 125 -81 -49 39 127 20 2 24 -23 60 112 23 42 70 -78 -39 -127 127 44 -110 118 124 127 116 -128 -52 34 -127 123 127 -65 -44 127 54 -14 -51 -107 -26 -93 127 35 -5 36 -128 127 -78 -82 -127 127 16 -106 48 67 126 -12 69 115 -126 97 -119 -29 83 -79 122 120 -39 -126 72 52 69 -37 42 100 123 -127 121 -18 -120 121 126 36 -116 110 -7 -112 121 36 122 40 127 -112 127 127 71 -27 127 103 54 126 120 -127 -127 -40 77 -64 -123 -108 15 59 -115 -18 -50 -74 104 -128 -31 37 22 127 22 50 55 35 120 -9 38 125 87 124 61 -125 -123 -128 -57 -23 14 -7 -39 32 121 -126 81 54 13 83 6 19 -71 127 -128 -8 -74 -123 113 -25 95 -126 -28 30 -62 -16 122 -47 -45 71 91 2 5 121 -9 126 127 -94 58 -50 -33 -53 81 -1 -54 114 11 63 -75 -88 120 60 124 -118 97 -13 -4 47 109 -128 100 127 -37 114 125 -101 15 40 61 9 -48 72 -59 -66 13 42 -127 122 61 48 58 34 -7 100 -56 -27 118 -124 -34 124 -25 -99 67 -47 42 -54 33 47 58 -46 -82 48 -106 -68 -37 -33 -27 -120 -105 0 -6 88 -17 -126 -18 126 -44 38 71 -22 126 77 -128 -123 -43 -112 8 43 121 44 -92 -8 -51 126 -88 11 40 79 -43 112 -49 58 12 126 122 63 102 24 70 -118 -51 44 127 56 124 81 26 -83 29 -86 72 -102 14 84 -8 -13 121 127 -27 47 -43 14 -77 96 -47 5 -37 -76 49 81 -121 33 -101 -36 94 -28 -10 30 -77 -107 -24 6 -88 60 11 -43 -122 121 -28 -16 50 -12 8 -126 -46 -68 19 47 -1 -34 -45 120 -20 -47 89 18 -10 -41 116 -66 65 -29 70 29 -57 70 127 -14 -48 -1 -19 47 -37 91 -50 -57 53 -92 39 1 112 -62 20 -67 30 -55 -111 72 -56 -6 -33 -56 -50 -44 35 -61 24 77 -40 -122 -41 -23 -35 127 -47 -14 19 -15 -15 -68 16 -25 -103 -112 -120 41 51 127 -126 127 8 32 -109 54 -90 48 -73 61 52 1 -85 -21 38 -68 38 20 24 -56 51 -31 117 -36 -20 -66 4 28 -126 -44 88 83 -112 29 -20 -9 -118 -8 22 -28 -127 -83 -114 -12 -92 125 -39 -78 68 -91 -103 -7 1 -64 -116 -128 76 -14 68 51 63 120 102 17 -29 22 15 -33 22 20 17 100 -37 -58 125 -50 -37 13 4 78 59 -27 20 -28 40 -15 -80 -88 127 -25 20 -57 8 -8 88 66 -73 -96 97 109 -41 52 29 21 58 15 -19 19 -14 -39 -6 56 13 -1 58 -64 41 46 -10 -51 64 52 16 -62 0 40 23 -92 39 -2 113 -45 -86 -111 41 -67 -73 9 46 58 -11 -68 77 -4 -49 -43 -124 34 -18 -67 -41 -19 -76 26 52 127 75 -127 -20 -103 103 -127 59 74 -49 80 104 -101 127 -128 -117 20 126 -38 -76 124 -119 12 -75 -29 16 11 34 -33 56 -76 127 -35 19 5 -126 127 127 -97 -116 -71 -125 30 58 -34 -86 -116 -127 113 73 22 -119 27 111 -64 -89 48 105 -54 -109 127 -32 27 -85 82 127 -76 121 -125 -9 1 88 -68 126 -116 -128 -47 118 -110 95 64 63 -92 -88 -115 -69 -125 -126 11 9 -94 -91 29 111 -4 127 -83 -128 99 -92 -127 77 -112 87 -80 36 92 2 127 127 11 -42 126 45 29 -72 -51 65 126 46 -30 -128 -37 124 63 -101 -128 -123 113 81 -93 -127 66 -61 64 -76 12 16 2 -42 -51 -126 68 84 -124 -126 -70 124 -35 -50 106 -33 -79 -28 61 79 -127 -10 34 -68 83 30 -12 -119 14 -99 76 83 -110 -125 26 -29 -17 -81 -74 -112 -39 -61 53 116 76 124 70 115 -22 -111 26 6 127 -10 127 -106 -74 -8 11 7 77 53 -111 -90 -29 -87 63 -43 -50 -40 105 109 -4 -56 24 -40 -39 -41 100 -19 -17 -101 91 -34 78 11 -6 -93 48 80 -23 -19 -57 -5 -126 41 127 17 110 120 -2 123 2 -93 -39 -74 -13 -59 -71 60 -45 20 113 90 103 -110 -19 21 -19 24 31 45 -128 52 -12 -47 64 -109 -89 62 -33 -29 48 -95 58 3 59 25 -38 23 122 80 -128 -4 -46 -2 31 -34 73 3 -24 122 -8 -93 69 -3 -91 55 -10 10 -99 -73 -101 62 -124 -121 109 -83 -41 -57 -76 -111 107 -126 -126 92 -92 106 -50 0 -127 47 30 101 72 57 -18 -40 127 -84 44 107 68 114 12 -125 28 -72 97 -127 127 88 -76 -105 -118 -6 44 -103 59 114 -96 -55 77 -97 -80 59 -43 -49 -86 127 -106 -46 -40 69 123 -124 46 56 -34 -78 18 7 -68 67 107 -119 18 127 68 15 16 -128 -64 -112 -34 -13 -71 48 76 -64 68 -47 -83 125 -127 44 -127 -127 -23 -110 -87 118 -24 -41 36 25 16 -44 -45 -43 126 59 -3 -28 -7 -70 127 -16 -98 -88 56 -7 -61 -127 -3 -83 109 127 118 5 -88 16 127 -123 122 87 33 -67 126 -108 19 43 -35 122 71 -81 -125 96 -20 -95 -76 -62 40 127 121 -116 -101 -120 84 -56 49 -84 72 44 97 -45 78 4 124 127 12 -9 -46 -40 -128 -128 -19 15 -120 127 -37 86 127 -127 -67 125 11 16 -3 -123 -24 73 -13 22 122 121 -20 57 75 -39 -79 -51 -83 72 6 114 47 52 33 126 -57 -73 76 126 -58 -75 -18 -69 -65 73 73 72 -27 -65 118 37 -35 57 -91 -27 66 27 3 -5 -126 -82 -128 29 -90 34 74 -19 -35 57 -7 13 -126 45 -25 112 -128 24 -63 -66 3 -13 -98 10 -112 -46 -100 -49 -81 -56 93 71 34 -22 103 19 127 -40 90 -91 -2 -92 -125 -34 -19 65 -126 46 58 -83 110 80 66 -1 -74 127 41 -20 122 -60 -5 114 72 2 -128 -69 56 60 43 63 -49 27 -124 14 119 124 23 -114 107 16 37 -126 125 53 -15 -128 126 -124 23 -38 124 15 72 -74 -22 44 127 -93 -8 -126 -19 -49 15 127 -28 113 -19 -16 66 -82 -123 47 -109 -100 -122 -128 50 -107 -59 118 -31 85 67 -99 0 -2 32 31 -73 88 111 43 -4 126 -67 -2 104 115 -52 -38 116 -56 -104 119 -92 -97 -21 127 26 -126 127 127 29 55 -97 -102 -28 42 -125 127 -27 -127 53 46 -127 5 -128 121 -118 -14 -78 -31 71 -30 -5 38 -12 4 123 -21 93 -128 -57 110 127 127 -113 70 69 87 125 127 -109 -64 127 -25 71 -18 61 -5 -5 -128 123 -97 -125 -120 -43 88 -125 127 -109 57 -109 24 -50 93 74 -1 88 24 -58 -69 -40 125 127 125 -105 29 -127 12 -45 -43 -8 127 19 -91 -128 112 -5 39 -3 -23 -60 -71 10 5 -23 -87 39 62 127 -36 -44 -26 99 43 -31 -39 62 -128 -128 -14 46 -29 86 -107 -16 75 -80 40 -104 57 109 76 -57 -95 -26 -128 7 -31 -59 -127 -48 -25 -2 -73 -92 127 78 -4 -4 27 45 101 9 63 -5 -98 -127 -10 -106 -34 -28 -35 108 -45 -106 115 -2 2 76 -19 1 -19 -125 95 -69 61 41 -85 45 77 -51 125 119 126 10 127 20 20 -62 93 8 -91 -47 21 56 -19 23 -127 -17 2 -128 53 -35 -67 -66 -25 -25 47 38 -57 33 -13 -29 13 -65 -45 -40 -58 -28 14 -70 -82 -10 -65 -13 30 15 -17 -38 4 -65 -26 16 52 -24 -4 44 17 -5 2 -49 -42 -14 39 -59 29 6 -22 -36 -40 7 40 -29 -2 -39 31 -21 16 17 -89 87 -57 19 31 17 -33 52 -16 43 3 -34 -12 39 32 62 14 -15 65 6 2 11 68 6 21 -42 -125 -15 -12 -5 46 36 38 127 -88 -53 -5 59 29 -15 -6 42 -27 -79 42 3 126 -45 -98 18 77 -32 8 13 -128 92 119 -12 49 53 -4 39 8 -88 14 44 -126 -45 -2 47 99 -10 -81 -19 92 59 89 32 -43 -23 51 19 24 9 -41 -48 47 -124 49 41 -5 -11 127 -70 7 119 127 15 -58 -32 -18 22 31 -77 -15 -25 32 -24 40 -45 9 25 -5 -30 14 10 51 -8 -51 -51 -26 67 53 54 -93 -7 -21 -57 -7 -127 44 -87 -41 70 -6 -52 40 -65 35 27 11 -10 -116 13 30 -22 -39 0 7 -74 -15 6 -2 79 41 -15 58 -11 3 13 -9 26 127 16 -58 5 124 -8 20 -55 -87 17 -83 2 -32 -38 -70 100 44 -7 -20 127 13 82 -15 93 18 -100 16 -8 -21 10 127 98 -4 -2 -22 -31 -74 -72 37 -22 -10 -3 -4 -93 57 -46 13 -52 20 5 -31 -7 -127 108 -5 4 11 59 -42 -64 23 6 -14 98 -13 37 -31 -127 53 -44 66 -23 -111 -25 -16 18 -44 34 -28 -123 6 -3 65 -9 6 -22 24 -14 -15 -45 -126 0 -68 77 -68 32 -35 -123 7 -26 37 85 17 42 -84 1 75 -46 126 -21 35 -119 33 40 -37 -85 -15 -8 -77 -11 -8 -2 115 23 58 27 -124 121 12 -35 -78 94 -59 22 21 7 29 -23 116 -4 0 69 -19 40 19 -28 -102 -127 -42 -87 -60 90 -111 -30 -21 10 91 127 -10 27 -7 -24 -29 127 83 82 17 -28 -59 99 26 19 14 10 -38 114 10 116 -118 -96 86 -67 -123 -13 47 1 -36 70 41 11 -75 7 -125 126 24 58 -23 -111 -99 127 -96 36 -87 74 -107 -9 13 8 -41 125 -22 20 -54 -121 -11 127 127 -97 48 -64 -127 -60 3 -25 -71 -62 -92 -28 59 -107 52 -1 18 94 87 -59 -18 -127 -114 125 -48 34 -127 -84 12 92 84 -114 -124 -37 -127 -3 -45 -34 36 -104 -50 -47 -104 -33 10 62 30 17 -12 47 19 127 -127 -25 53 -9 -21 33 51 -47 -91 -24 -60 90 -47 38 -35 -103 50 -101 6 36 -126 36 -11 3 84 100 -8 -100 -47 -46 32 -28 125 51 20 124 62 -58 -50 127 -17 41 12 54 -127 27 -126 50 104 80 125 -40 -32 64 24 16 -73 -15 21 36 -82 -31 -103 32 76 16 -17 -21 39 122 42 -19 126 -28 -60 58 42 -35 31 -123 -14 -73 13 28 77 -41 125 124 -103 32 -128 -112 -11 -49 11 18 77 43 45 35 -77 5 94 -81 8 14 -103 75 39 14 16 -71 30 73 -74 55 -31 -114 -3 30 -32 -14 25 81 -64 43 -32 -71 54 -14 -11 -99 14 -7 66 -84 51 56 -84 12 50 10 -62 19 -66 3 4 -126 -82 -42 53 55 -108 125 36 7 21 -21 6 46 -43 72 51 122 127 38 -59 -52 -22 127 -23 102 -34 13 5 -5 48 127 126 -94 -17 -116 44 60 4 -21 -76 -127 -34 -57 68 -82 -110 12 -96 -62 23 93 26 -128 71 48 -43 -28 8 15 -5 86 -33 -53 -13 122 111 -15 62 67 -68 -12 -33 -18 -37 57 73 115 -68 79 121 60 127 -3 3 -121 120 31 -125 53 3 4 -88 -4 127 -79 -116 32 127 -21 -110 -63 3 -13 7 1 82 -46 -92 77 -46 39 -115 119 -79 -127 127 -127 55 6 34 -81 -70 3 -128 12 -44 -28 -87 46 -83 83 -60 -125 31 -67 69 -126 -69 -6 81 6 -1 -6 -95 -21 -17 127 31 -33 -35 -80 -35 0 -6 -27 42 -5 -32 -68 54 4 -110 32 127 56 -27 -122 -3 -25 54 12 -4 -35 34 14 81 -61 90 -28 33 -29 -15 -91 14 80 92 5 50 18 -52 -38 -40 65 -1 25 103 21 -93 53 -22 -46 27 -17 77 127 101 -65 -1 55 -50 70 24 -63 49 -27 -127 -91 46 -84 6 -46 -40 47 50 -123 -123 -78 79 -6 -109 -103 51 62 77 -1 -31 6 1 10 42 -3 15 23 2 105 5 -39 -12 15 72 -113 124 66 -14 91 -18 -63 -102 -124 81 -71 67 -87 -88 -50 9 -97 -10 90 -47 -82 33 82 125 46 -34 -30 -21 -126 -54 -88 84 91 -64 -33 35 -45 98 -61 -28 18 74 -109 -114 10 62 -39 -65 7 116 61 -103 56 -105 -125 7 -36 -45 81 -116 40 27 68 -15 -4 -35 87 75 6 -89 1 -3 54 125 76 -112 -89 8 33 32 19 -101 125 -119 -5 17 -3 -77 73 -125 12 -110 -35 111 75 -34 74 -115 -126 -103 -50 7 -127 58 105 107 18 -124 126 67 -125 120 8 19 -17 -115 9 -53 -76 -79 -127 64 85 2 126 67 40 -33 127 127 65 -42 63 -19 -44 -10 75 -81 110 15 64 108 8 105 -102 -127 77 39 -105 8 -22 -69 48 -128 127 -87 -126 -48 -37 51 118 -68 68 -15 -67 -28 -65 42 3 -32 3 -1 41 13 115 -75 -64 79 118 40 -30 -36 17 -3 -65 -16 33 -45 -58 72 0 20 28 28 111 -9 -82 126 -116 126 26 86 67 59 -15 40 0 -2 23 -99 -4 -13 8 51 -90 -112 115 27 10 7 -3 -21 31 -2 -103 -128 -69 17 -4 -94 -48 -27 42 -53 -127 -45 -39 -63 -58 -95 -94 26 81 127 56 62 -13 -125 -46 10 13 -127 38 39 40 -14 88 -42 -94 47 0 -39 2 31 85 -126 -128 55 8 58 -25 104 -114 -126 99 3 114 -30 -110 -107 -58 -23 90 -24 70 -44 -121 127 -13 47 126 -56 66 8 119 14 -86 102 -97 126 99 -72 16 -4 115 -50 -27 126 127 3 -21 -11 -110 -27 -31 -20 -126 -128 -125 -37 96 23 42 12 51 99 28 95 125 -42 -57 -27 -117 0 -71 -63 -19 68 -65 -56 -30 50 -36 -58 -86 96 78 -126 -67 127 -91 9 -112 -128 123 -66 116 108 52 -119 -33 58 -54 -124 103 21 108 65 -36 71 -13 56 -50 36 76 49 15 26 -22 54 -61 -65 15 -48 127 121 -69 13 -52 -7 127 -128 -59 127 106 -125 -128 -16 7 127 34 -2 127 -127 -127 -10 -49 -54 37 37 -122 -93 -24 51 93 7 -65 -17 -126 -95 -50 35 -93 -128 -128 -37 -127 -4 -61 127 17 -10 -78 -61 -84 -4 -128 -7 -127 -74 68 57 -26 -99 29 -128 93 -81 -88 11 104 -29 -128 4 63 3 -94 127 30 -113 -66 11 45 68 118 -26 -20 -56 30 24 -75 61 96 -27 -72 -14 38 -28 -17 -81 83 -21 124 88 -127 70 105 -74 20 -20 36 -61 6 -75 -39 -27 -54 -33 24 34 -54 -123 -127 -90 -77 73 32 2 16 -118 110 -127 29 106 -68 59 126 -42 -52 71 62 -101 -6 -125 -49 32 -22 -43 -112 -114 -8 38 93 -38 -34 -9 -27 -127 124 -33 -90 126 -27 17 -19 115 56 10 82 49 -41 54 -58 88 7 -9 -6 -126 32 61 32 -120 65 82 127 4 -47 121 -74 -97 59 -110 -6 -22 103 -38 127 127 68 -61 126 -8 127 83 -122 4 -75 -126 0 52 33 -111 78 -125 80 -59 -22 21 -16 79 24 -6 -118 -41 81 -23 -122 -118 35 8 58 -127 -90 61 -5 -127 -26 -65 61 28 12 29 90 -128 -16 125 85 -73 -52 78 44 -13 -19 127 63 105 35 127 14 87 125 22 110 52 29 -105 -15 -35 104 56 13 -25 -124 6 -52 65 -125 44 127 -93 77 -77 -101 -61 121 -42 -92 114 -24 89 81 -54 -126 -35 106 -77 36 72 123 66 -49 125 36 -58 -22 -66 10 97 -95 112 118 37 -122 -17 -109 127 -30 108 -28 -21 120 -1 105 86 50 9 47 33 60 -117 -29 52 -56 50 117 -11 99 -59 -110 -91 -43 -111 -86 14 41 127 97 50 -126 -7 -57 -112 -75 18 -122 -77 127 27 127 38 -74 44 -72 89 50 -90 2 20 11 -54 -2 110 -95 -90 126 127 46 -49 -14 14 39 95 -64 99 -37 35 -26 25 -94 46 118 28 -26 -79 32 -5 29 33 80 16 21 -91 127 43 -59 -87 -31 -115 -89 -115 -58 -21 76 15 -88 -8 -77 -22 44 -49 -28 122 -3 -17 93 -6 69 -19 -22 -14 33 -61 71 -3 -61 -127 25 -127 127 66 39 -24 10 -47 17 127 -45 -45 93 125 18 46 33 16 40 64 -30 -38 -16 -127 -6 39 -86 -18 49 -9 -81 -11 98 -33 36 7 22 -8 -35 18 120 -52 -51 -61 52 -44 -24 17 -17 -6 35 -21 -32 -47 49 40 -15 7 -29 -80 -61 -5 39 37 -18 -95 -27 -49 66 -50 -93 91 -36 -27 90 -4 16 -21 6 -5 -53 -45 44 -39 71 -126 64 26 -49 10 -28 -31 88 -107 -103 16 -74 -31 17 -73 -35 -49 -49 -28 83 -3 -23 -34 14 -35 2 -5 -67 -75 -17 22 -52 20 68 -19 -24 -72 -55 -16 24 -25 -16 25 -81 53 52 -34 -84 -20 -20 34 22 -82 9 -56 -83 86 7 43 -20 -57 4 56 -70 6 57 -58 6 9 34 99 -91 -28 -64 107 -63 -50 11 -38 -31 24 -80 -7 -76 -15 -20 21 -7 -34 54 -126 29 38 -1 -11 18 126 -7 -53 -21 43 50 47 -42 55 -5 -100 28 25 -21 -28 -56 16 -106 13 28 -16 -34 -73 47 12 -11 -34 33 -123 -40 42 -109 12 -63 127 -76 -76 76 -70 -46 -7 -74 36 -58 -28 -110 72 -62 2 -33 29 -27 0 38 15 36 9 -23 4 -19 127 60 120 -18 42 49 127 -18 95 26 57 -60 53 -70 -44 37 57 -26 -12 17 29 116 74 -16 9 68 2 16 -31 62 18 42 21 27 57 -70 113 18 -16 -48 -44 -128 -30 -26 6 45 -98 -52 105 -64 63 -23 -12 -88 127 -18 -10 -6 -45 -4 -39 -28 -38 73 -9 53 102 -16 56 11 -22 -22 36 4 99 23 -23 19 -4 -2 26 22 24 27 -63 21 69 -25 54 82 -10 -25 105 84 -22 14 29 -13 16 -61 -29 4 -16 -128 -69 -8 31 83 -83 -9 -56 76 123 -49 43 81 -3 -36 -35 -4 127 -47 -30 4 86 27 27 -77 72 -116 24 8 -54 61 -75 5 -83 -34 -77 16 5 49 0 -16 43 -51 -20 -25 -29 50 36 53 51 -44 -4 80 -49 -68 -16 108 -32 -33 9 96 46 44 -11 44 46 60 34 41 -23 23 32 -30 -11 -10 -42 -19 33 -125 1 2 -71 -2 20 -64 -128 -56 -41 11 -126 13 -7 -89 -54 -49 2 -99 -46 121 16 60 -57 98 -47 117 22 -45 43 35 89 -21 -38 -23 -2 -122 8 -31 0 82 94 -63 17 -45 -61 12 113 -2 -55 33 27 -4 13 6 -17 -13 126 12 67 40 -12 -105 -119 110 -25 -34 -49 -83 -56 9 13 -64 69 -43 -127 36 -107 -50 7 -11 -9 -105 38 76 -6 -27 -22 15 62 85 -25 21 -26 16 -19 4 16 -11 2 21 -74 11 54 62 -99 4 31 -60 -65 127 4 56 -125 10 -44 117 -37 56 71 76 35 -79 10 71 -7 76 50 91 -43 -65 -60 51 1 25 -52 59 -22 21 -124 -23 54 8 71 -49 -32 -1 19 105 -30 -127 33 -4 -44 16 -34 -61 119 18 6 -61 -24 -36 -35 -21 -45 27 -126 60 -13 74 27 109 16 -2 54 52 124 0 36 127 -124 43 -98 52 28 69 47 -34 -41 0 -11 -4 -44 -21 78 -3 110 -9 -83 58 -10 -1 -44 -20 94 -97 -122 -54 11 10 23 -2 -14 -41 32 32 -94 20 43 -27 52 -37 13 -85 -3 -6 53 -85 62 -40 -53 53 -14 -40 -10 57 -18 -67 79 -11 63 126 -1 28 26 -38 -85 -8 -27 27 64 46 -90 7 52 123 -36 -41 10 65 -63 71 -98 12 14 -83 -15 37 66 1 39 -25 43 -42 13 120 -29 37 -90 -25 -48 -69 82 -54 -24 60 9 45 38 75 -22 19 63 -102 -53 6 -26 92 50 19 -71 5 -29 70 17 90 1 -60 -6 4 58 -47 1 -40 -60 -26 33 -18 -1 23 31 11 6 10 -126 95 25 34 -50 18 48 22 -6 24 -97 -26 22 22 -17 -34 -22 -15 127 -15 -110 -38 -86 -67 -126 -128 64 59 -18 -63 55 -58 81 69 -64 -107 -15 -61 -65 -12 33 28 -42 12 -127 24 -7 -103 -21 -127 -45 -24 -19 -127 -33 6 -65 -64 -27 9 -28 72 20 40 -15 25 11 1 25 -11 21 42 7 27 53 0 -106 -9 65 -25 64 40 -36 -17 83 -4 -84 -34 -20 -10 65 37 -48 -10 68 15 2 15 93 -94 124 51 69 29 -119 21 -53 -24 28 96 9 43 -42 -64 11 -115 36 -11 15 93 79 -45 -5 -38 -111 -65 -84 19 99 -89 -77 -52 7 -76 82 -66 -124 57 93 -20 -97 124 -84 -34 -2 -78 -96 -61 -11 -65 23 -22 22 -77 40 -18 96 127 75 -46 -26 12 101 -76 -19 -92 -59 -41 9 35 18 80 -19 -102 -10 21 -15 -65 -102 90 -12 -27 -128 37 57 -125 -16 67 -101 -3 -30 23 33 49 -24 83 37 -56 37 -13 7 54 73 -50 -22 -90 -71 65 3 -9 90 88 -29 -25 80 -12 -66 -6 -47 -65 17 -39 76 -32 85 34 66 -85 100 36 -96 25 51 -106 -26 -20 123 76 51 -50 24 -9 25 13 -35 13 26 40 -15 43 -90 -110 -28 -46 14 26 -65 127 66 -25 16 -25 80 -11 0 28 90 -98 -77 33 -3 -30 -10 -12 -50 -120 -10 -34 95 -23 -10 63 32 16 7 -54 -118 -32 57 26 -76 88 1 -35 57 27 -4 -10 -124 64 38 87 127 38 -34 63 89 41 10 33 41 12 116 110 35 -64 -83 81 -22 25 -29 58 77 -49 2 87 3 -41 89 -29 -36 4 26 -107 -55 25 -30 118 3 58 -96 49 40 88 31 21 103 -20 22 -36 -6 -17 23 -46 51 88 -127 -30 -27 96 -19 84 12 -70 127 13 41 50 -19 -86 85 -67 1 30 26 62 25 -36 -13 -39 0 58 -1 -72 4 -7 25 -122 81 127 2 25 -68 -10 -33 64 31 -127 44 -23 9 33 -10 -19 85 52 -110 108 116 21 -53 64 -105 17 32 12 -122 -53 35 36 24 -118 -20 46 113 -12 6 -61 36 -3 -38 -127 -48 28 -112 -128 -28 -3 2 82 33 68 0 -78 20 127 -64 41 55 -4 77 9 31 -13 -76 127 -77 -57 25 26 -21 21 4 -116 9 78 51 -49 71 40 8 -22 -16 33 -113 41 -9 -115 -2 -42 38 -68 -42 127 -27 -5 90 84 -26 123 86 97 -106 111 -71 47 -87 -127 -49 56 64 -35 7 45 -112 -67 35 -85 -103 -50 -128 -24 15 91 20 10 -128 71 2 -28 51 -57 31 2 85 -28 1 -79 -34 -1 -2 53 -67 -34 36 -32 -69 -16 127 117 0 34 63 -56 -23 -23 -13 -10 -44 127 118 37 -40 -18 121 77 -126 14 42 -21 -18 -53 89 22 91 104 -39 88 -59 -53 -71 -3 -41 -115 -113 -128 -24 -17 -35 18 -109 -95 -50 19 -36 -114 -43 -74 -30 -22 -46 -85 75 -32 -46 11 -80 -83 26 99 -103 -8 -19 -95 -13 28 4 38 -117 113 -19 -7 58 -87 -61 11 -127 -90 10 27 5 39 62 60 -65 64 -99 -41 41 27 -15 -38 -38 29 -124 87 118 -9 -24 -40 -47 9 66 -49 -13 19 -17 -22 30 17 30 -6 -85 -5 119 97 -13 21 -124 127 -40 -60 -83 -60 61 76 -34 -42 -90 -7 -13 -25 3 -11 -45 -119 17 19 24 -47 115 -43 8 79 -1 42 64 77 39 -20 21 -85 -13 -6 -48 -51 55 28 -8 15 -55 -54 -119 -115 -4 86 87 -21 18 -9 118 54 -47 -44 -11 -29 -54 -39 -77 46 16 72 -15 -72 39 -99 -64 26 -82 20 -30 0 112 106 0 28 -60 40 -128 -75 -30 5 -47 -57 -85 -44 -29 -77 48 -84 35 -30 19 -9 1 50 -118 95 -111 -25 28 12 -54 70 68 -24 -118 -2 106 -4 -114 -69 119 -12 -26 69 68 -125 -37 -82 77 -64 32 2 2 -30 10 12 -100 9 127 -34 -123 39 127 42 -14 7 24 -80 -66 32 -24 42 -3 30 -118 36 -6 -61 -1 -42 -37 29 -13 -3 -21 -8 77 -59 -118 -48 75 127 -57 41 -46 34 76 -1 127 -107 -126 -3 49 78 28 -96 126 38 -41 11 -110 81 -29 -83 -20 13 122 -37 40 -32 36 2 113 48 -23 -28 2 26 86 -18 -34 -19 -53 12 64 13 -44 33 -42 73 3 -24 1 -42 4 -41 88 -28 -4 -23 25 13 67 -22 6 -55 36 68 30 -30 -87 -34 30 -3 -13 -6 116 86 47 58 61 62 61 8 -9 50 -61 55 -93 -43 17 -76 10 29 29 115 8 28 19 65 78 26 -66 -70 9 -19 41 -27 -113 14 -60 -37 -34 -17 56 -15 -32 38 3 12 -120 46 -93 -32 39 -31 39 1 -58 -127 -32 -67 -67 -111 29 38 -2 15 -14 107 126 1 61 6 93 2 5 44 5 -81 47 -84 -12 -15 -5 -11 -11 -125 94 14 5 -6 97 23 -48 11 36 -12 -99 68 90 -122 127 49 -18 -9 26 25 -14 -127 -18 -12 104 65 79 -30 -127 63 -80 29 -126 -70 37 -99 -80 -127 -108 -112 -65 57 8 27 -2 -23 -48 -49 41 -64 -40 -40 66 -38 17 -50 56 -65 -98 -27 -77 127 -126 -36 57 -100 -14 -127 -127 -64 84 119 23 54 121 126 -7 40 -71 -123 -65 65 -124 -46 -17 -122 83 -38 -4 72 -126 14 74 -126 -126 -30 -127 78 -65 -16 -127 111 -102 -126 15 -69 -47 -17 -50 10 -126 126 -128 -39 -45 -119 -119 127 -22 -126 24 89 126 -91 -32 -9 13 -127 -88 83 -28 91 101 -50 -19 -45 -66 -48 91 46 117 -1 -33 127 -105 45 105 -119 -28 23 -14 69 -39 60 57 22 -50 40 -43 41 -30 -28 59 -21 -28 -43 -127 59 36 51 -53 39 39 50 62 -104 -17 -75 1 -66 10 -14 -64 -7 103 -83 -43 -124 114 46 -28 6 -44 57 -29 -110 31 -37 -57 125 66 -32 62 71 0 -36 -53 -11 41 14 127 22 19 110 -16 5 -22 92 -12 57 70 -21 -78 -7 68 -128 -25 -32 14 -1 -86 112 17 19 114 -18 -18 38 -60 -60 1 -18 -19 11 -13 -53 -19 24 -23 -38 -14 65 -61 -4 4 44 -115 -127 20 122 111 -102 -11 -72 -30 31 18 65 -6 37 -23 -123 125 4 65 67 27 -51 16 76 49 59 -48 44 77 127 -73 -17 96 51 -34 34 -61 -89 -50 119 41 21 -64 74 2 -55 127 81 34 -121 -94 -45 -57 -76 99 100 -46 127 69 -42 59 49 51 40 73 89 -26 5 8 -69 15 -123 -36 39 126 74 -34 124 23 -3 126 -37 -84 -50 85 -121 -93 -22 32 -40 29 70 -20 3 -1 -33 83 -34 40 -127 4 -21 14 41 -95 125 109 118 48 -87 -20 -99 -29 56 -32 -16 -12 4 86 -22 57 69 -50 39 18 1 -123 62 -68 115 -77 -9 -128 69 -55 9 10 -126 90 -50 31 43 -128 127 27 93 -113 -124 92 26 55 -19 87 70 -89 -99 -30 30 -43 -5 -103 127 -75 -127 -77 65 -17 53 67 13 -50 -3 83 -47 -123 109 127 -58 79 -26 8 40 8 13 -8 127 -119 29 12 66 45 45 -23 17 -57 21 8 46 -124 29 -72 -23 -69 127 -19 50 -22 -61 0 -37 -16 6 -9 -43 -34 -29 -59 -59 27 -128 98 -28 -7 58 -63 33 -2 -18 127 -44 62 35 17 -61 3 114 -38 43 -2 12 55 -124 23 -31 89 111 -98 -53 -26 -26 22 -16 -122 -41 57 13 -83 -94 -14 73 -10 25 -9 127 45 -79 -57 87 -102 -106 65 -1 -55 -36 61 30 30 -111 25 16 -42 22 -21 -40 -8 -2 108 55 30 -44 -53 104 29 -68 57 -48 10 29 78 -39 13 -22 -50 -114 76 63 36 20 -1 -32 -115 40 -2 79 -38 -26 42 12 -9 -2 105 103 -40 -20 -128 37 -79 -75 66 -64 59 81 -26 12 126 -11 0 11 -85 -68 -122 121 108 73 -36 26 -6 -92 52 -127 -127 -5 126 124 20 19 117 91 39 -128 29 -14 53 127 -124 125 -44 52 125 121 -70 125 -41 -58 -65 21 -42 -128 -11 66 66 -117 124 82 -36 102 39 58 127 98 -7 123 -3 -59 1 51 31 -27 -4 58 127 -4 22 109 2 62 76 -126 26 -40 81 -16 -59 124 127 52 126 105 -23 127 -113 57 110 127 68 18 -93 -92 75 24 -24 -59 127 125 14 -89 -51 87 -75 93 -128 84 -125 105 -68 53 -22 114 -74 40 57 19 -125 63 -25 11 85 105 -124 -122 -77 -68 84 -77 127 -64 -63 72 -2 45 -36 107 -10 47 -29 -91 -3 -42 -108 -67 -2 83 -18 -6 -114 -32 71 -65 -92 -74 63 113 -79 -16 -100 48 -44 97 -30 69 -59 -59 109 21 54 96 24 -19 71 -80 11 -54 -121 15 -113 -24 16 -4 120 -128 -89 7 -39 -33 -34 -9 -122 4 29 -121 -77 -95 74 -19 91 -65 109 88 -51 -29 68 87 25 -10 -106 11 36 -40 -83 83 54 62 50 21 25 13 -80 -128 1 -83 127 20 82 -124 44 -82 50 54 40 -49 44 -59 33 127 4 -32 61 12 -3 -16 -114 70 -5 56 -88 -49 -51 6 6 21 7 -13 23 -118 24 2 68 -32 -9 94 -10 -47 71 -44 -2 -48 63 35 -38 26 -82 -105 -128 -61 42 -107 -56 41 -127 12 79 -24 100 -125 5 -33 -43 48 54 5 56 -30 99 -105 28 44 87 -127 -121 -104 5 -2 91 86 -29 -59 -15 -111 25 14 121 50 5 97 -32 -106 127 -21 111 127 -6 74 127 -128 56 -101 27 -58 119 126 56 53 28 -128 -8 100 -68 30 110 15 108 -26 5 45 -48 80 9 -24 119 -21 -113 -21 -7 -8 -118 -20 -29 62 46 -128 21 59 -38 -99 92 121 -78 -25 -120 127 21 14 75 108 85 -25 -53 0 73 59 -128 3 99 -32 1 82 -99 1 43 86 52 29 -121 -25 36 -33 -37 -89 -69 -19 -41 -49 -55 -104 -32 -128 -126 -64 -32 2 127 31 50 94 98 -4 112 32 -29 13 -86 -74 36 24 -75 95 -124 18 -8 2 -36 -43 3 -49 27 65 96 -90 33 72 -67 -49 -15 -46 -7 -7 32 9 7 -79 -16 70 127 15 -89 -30 49 69 -36 -59 -118 -87 -57 -18 -62 -1 -79 47 46 -1 44 -77 40 37 -76 27 58 0 73 24 48 3 48 23 3 -29 -36 42 103 80 10 11 43 -52 27 -26 -33 -53 77 8 53 39 -11 -29 -10 -89 -5 -62 78 -5 23 -114 -30 -93 -53 17 -38 -6 -50 54 38 -99 -2 -58 4 -96 78 -18 23 57 74 -7 8 19 -87 97 4 91 -35 -17 -67 -89 127 30 14 -6 19 -55 -42 20 -7 20 6 -26 27 -99 -123 -22 19 19 -107 -24 -15 28 -48 -30 5 -4 -44 -12 12 39 -13 -9 -60 4 -19 -20 12 -43 -42 52 -62 83 -33 31 -59 63 47 -37 -127 -58 -45 -117 -124 -85 -30 19 54 114 93 25 -52 -76 49 -97 66 127 35 -48 84 -20 -7 -25 53 50 127 -109 38 65 -40 -41 -40 126 -120 2 -14 -125 63 127 -36 -83 61 11 25 -85 -67 29 -65 -52 -81 60 32 10 26 -96 127 -33 -43 24 21 -34 -71 121 -28 16 -42 68 11 -119 64 118 -1 65 -67 56 107 23 -38 -3 -66 16 -60 77 10 102 126 -49 -36 -50 -25 52 -69 32 -13 -29 18 -19 -35 9 -45 -21 21 -128 -32 -94 6 -34 -18 -32 115 -9 45 -26 42 -8 -109 32 -26 55 -7 -53 -18 -20 -18 -41 -40 -24 44 33 -32 55 26 3 4 13 46 93 -73 -71 16 16 54 -26 15 -9 -100 -21 67 14 -67 19 -82 29 12 -37 30 12 85 83 58 14 -12 -14 35 -13 -53 -49 -13 -15 -42 -2 14 -3 -68 -86 62 74 37 -1 -41 19 -83 34 45 -26 107 -2 99 -40 33 16 -59 20 -59 -19 -27 97 46 7 34 -85 -69 -18 73 -37 47 -30 -4 53 -105 -88 -27 -33 29 -20 -58 -49 -11 85 50 29 -2 -55 13 -126 -11 79 -8 22 10 -21 0 -19 31 -52 42 -19 -24 -128 9 33 -112 34 -13 -2 37 35 -102 92 -43 37 -18 22 -40 1 -73 9 -78 -15 -25 15 -18 -126 -34 -33 61 -89 -124 -28 -1 56 -33 -38 -127 126 14 111 -118 23 62 -41 42 -32 -12 -30 -33 -75 -127 127 -17 -127 50 -128 -31 52 28 -72 21 33 -8 35 8 124 89 -57 121 119 -72 68 -79 -32 26 -62 53 -11 127 46 -57 93 -95 -76 -95 -4 -9 -2 -61 -4 127 -16 -34 7 -42 57 -114 -56 26 101 37 112 53 -16 49 -31 -1 -42 -126 23 -32 125 -128 4 -10 55 94 -8 55 58 71 -34 -104 -69 -25 -9 97 -31 57 29 -53 64 -77 41 -50 -17 37 -46 -112 79 -20 -21 9 20 48 17 -18 -46 -39 -16 1 98 62 -91 -119 -17 116 108 -125 -69 34 52 -5 110 -31 42 -86 -52 -2 -66 90 3 16 13 -58 16 10 115 -51 59 25 91 5 -66 -79 -115 -35 49 -78 -4 26 83 26 -87 29 -126 18 -105 20 44 50 -44 -114 35 -43 -8 -6 -48 125 28 111 53 49 47 -128 -106 -84 14 -9 21 -76 16 26 -86 28 -36 3 92 39 -71 49 -64 90 -116 -124 -14 50 -21 127 86 1 15 -81 -22 41 -36 -30 117 -33 30 23 104 -36 -125 -16 45 120 -29 24 3 -62 54 -15 -8 -28 22 -92 43 -55 -12 -15 -61 -37 38 -61 -24 -26 40 1 7 10 -14 -21 -68 -23 54 12 -107 -9 13 -41 -45 127 50 34 7 -36 114 9 18 -30 3 -7 127 -53 -126 -36 30 -27 -8 85 -17 11 75 90 38 -102 106 -115 -39 -66 -27 -68 13 58 3 30 22 -32 4 0 -17 5 68 -42 3 18 -31 52 14 77 20 10 -60 96 19 -6 -29 -25 32 62 -47 7 57 9 -1 83 -33 19 36 -15 124 33 49 53 -10 -19 35 14 107 40 -41 112 -13 -19 -23 -21 -6 35 10 -27 37 92 -26 18 24 61 29 6 43 9 -7 -38 -11 13 116 39 29 39 -1 17 12 56 36 19 0 13 -4 -34 125 -35 -32 48 -15 -1 7 42 5 42 0 19 5 -5 21 -35 -1 6 18 39 -16 -17 -27 12 -32 -1 -20 -67 8 23 -25 17 -5 31 56 -35 69 39 -24 -106 -12 62 39 -50 19 71 2 52 -75 36 -14 -37 11 -27 -30 2 -39 7 -39 -31 32 49 19 31 -1 -71 42 -27 88 20 66 51 15 -2 21 11 -1 9 21 18 -32 83 20 -27 -9 -42 6 -17 -4 -22 -54 41 29 -35 -19 59 3 -11 -39 -37 -3 -38 -15 89 -22 -36 2 3 -31 1 4 38 -7 3 13 -7 -3 41 16 -36 42 -15 26 5 -1 -25 -27 -48 24 10 25 35 -54 41 23 37 9 7 -6 49 -33 2 -4 -4 44 23 -31 41 3 -31 4 -6 63 -36 50 -57 -11 9 21 17 -3 1 -26 7 31 -16 -34 -34 15 -14 -11 48 12 15 12 2 2 39 -94 20 77 59 -16 -51 2 52 21 -5 9 11 49 -54 15 -17 63 -23 8 -44 -16 0 -13 -16 12 -36 -22 6 7 -100 4 -9 -28 34 -81 20 -47 -16 15 -74 69 53 -60 7 -20 -21 -1 -19 0 -19 5 -9 73 23 -37 -19 -3 -34 -22 -93 7 -6 24 -9 10 -35 31 -33 -16 -51 35 -58 -8 -9 7 10 -1 11 -89 -68 -56 -8 -35 -27 25 -17 23 29 -12 -9 -35 -20 -16 1 -14 24 11 -13 -1 -62 -22 -27 41 -20 -31 -19 23 -46 -56 -19 -27 3 -13 -55 8 17 -11 -15 35 -16 12 0 -3 25 -13 -56 21 -74 -30 -18 11 5 53 58 -14 30 24 5 -67 60 20 26 -15 -25 -23 27 -125 -31 -43 127 -1 9 -1 8 -36 -15 -32 -100 -6 4 47 21 12 28 -16 -46 -46 12 43 -14 -22 -8 9 5 -36 15 -39 9 -37 -54 8 -30 -43 31 38 46 35 29 65 -43 -22 -66 52 67 24 8 14 -5 -20 30 -44 16 109 45 37 -29 38 21 49 15 -25 21 -1 -40 -48 -5 -36 -17 -13 -2 8 48 49 -3 3 -2 29 27 8 4 9 16 2 -126 -51 -17 -30 -31 -15 -9 -19 -16 39 -6 40 -25 -36 -28 9 -22 -8 -13 -9 -3 5 16 11 18 -13 -6 15 1 -15 -32 -43 7 5 -52 26 -46 -4 8 8 10 7 19 -31 -18 -51 -7 -44 35 1 -12 -4 9 -18 -27 14 11 -13 -12 7 9 -18 -2 -35 -22 16 5 -47 -9 29 0 -43 35 -69 -38 -18 29 -3 -6 --39 -35 -78 44 -64 27 -127 2 31 -36 -54 21 24 -72 -32 -74 49 -79 106 53 -19 -35 48 -27 34 43 -63 -65 38 -2 50 -25 -42 -15 -83 109 -13 126 34 -24 5 -20 -31 -75 -71 6 -46 88 54 -128 -117 -31 71 3 -2 -10 -9 -13 22 20 -1 8 -55 -53 -3 -11 -21 90 -59 7 -33 -86 -23 127 -110 -76 -33 -100 64 -117 -2 -1 7 -38 -28 -102 -38 -66 10 -91 -31 -80 -47 -3 -97 65 -21 40 37 76 23 -35 48 5 8 -29 9 -13 -65 33 24 -13 16 -20 35 -79 5 64 16 -50 -26 8 42 -26 62 -1 -1 -69 29 31 23 -33 5 1 -73 -33 10 -30 103 -13 -20 37 58 2 79 -62 -8 37 -4 20 -43 47 -40 -9 -36 -46 -12 0 -45 -24 16 53 -34 14 -62 -8 33 -54 6 -69 24 -18 17 -51 37 32 16 -3 -16 45 5 -51 -11 6 60 42 -25 15 34 -10 51 18 57 -44 -36 -42 107 -75 10 -19 -15 -63 -20 -11 -53 62 56 125 -40 -12 -52 29 -128 -81 -79 -20 -25 -26 -39 42 -20 -43 66 -39 -84 -125 -4 -20 16 -44 -7 3 32 3 -8 32 -1 -65 -6 -58 -36 26 70 4 21 -21 32 18 0 97 127 -55 -96 -78 -90 -2 24 94 19 -61 -6 -54 26 -128 -12 -10 -33 -60 25 -42 17 -54 44 -4 -87 13 40 127 -60 12 -18 -35 -60 -7 -1 -55 -29 7 -46 50 77 8 40 72 -16 13 83 -35 -37 123 -2 17 -52 14 61 63 16 47 -96 -14 14 -46 39 -36 36 72 66 -70 -15 36 -71 -26 59 31 12 58 -10 40 -21 6 -59 25 57 -44 65 -5 -45 85 -44 17 75 -24 -43 -106 -1 -79 42 -59 -22 12 -32 72 69 -72 18 6 4 73 -51 86 60 0 -28 21 -50 7 -15 17 47 -31 -16 6 -20 -3 36 127 -49 3 3 96 124 51 118 43 -92 2 -34 42 16 104 -52 -13 -59 36 -70 73 -23 -10 -3 84 21 26 -39 -15 -99 22 51 -82 35 21 22 47 71 75 -50 -34 1 35 -18 15 87 38 32 -40 47 -5 -25 79 -63 35 -38 20 -60 3 -83 -28 15 -9 -61 30 48 -62 -17 9 -45 -15 4 32 68 -17 -54 47 53 11 28 26 -67 -42 35 -115 52 -44 -27 39 -20 6 16 9 54 -35 37 0 11 -79 54 17 9 -2 36 78 -55 19 29 -52 48 32 12 59 18 98 49 -1 4 -34 -61 -23 -11 10 -25 42 3 63 40 60 -89 -19 26 -63 -14 23 -16 -15 5 14 17 11 23 75 -31 35 29 -48 0 65 -1 54 -42 -52 40 -32 -4 -74 16 -35 -13 -40 -26 -63 -62 -30 54 16 12 9 51 -53 -8 17 31 63 -48 16 16 -23 95 8 0 -89 13 59 4 -4 4 0 41 -62 -10 12 -35 50 -31 -33 -59 56 -64 5 -95 17 -54 -38 12 -67 81 -60 34 -1 21 -7 -34 -35 15 105 -110 10 -115 -19 49 15 39 -25 -128 -77 55 55 -16 23 -50 35 -43 52 4 -34 -31 5 110 85 -51 39 -64 -50 -18 -65 -100 -14 -23 39 -121 64 61 2 -44 91 8 -65 -53 -5 -26 -103 33 -100 55 -19 -74 -52 -56 -78 -127 102 34 38 11 -20 52 -15 2 -19 19 -66 -121 -31 -53 -25 7 20 32 22 34 58 -11 -10 58 -107 -118 -12 -5 -26 16 44 -37 -8 -72 84 -10 32 -45 33 16 37 43 48 48 49 -13 -4 37 31 -37 26 1 -41 48 -17 -64 -40 -35 27 -7 26 17 44 47 21 117 -30 10 126 32 -4 15 51 -74 25 51 -19 13 -47 22 42 71 -24 22 -31 16 -54 40 -5 20 17 -3 -50 -49 -21 -21 -11 -49 82 39 88 84 86 -65 -39 20 -6 86 49 90 18 -30 -78 -28 50 19 12 28 35 -23 126 -128 51 66 61 30 -25 -77 56 52 51 41 -34 56 19 17 37 -1 10 41 2 81 54 -10 -127 40 -117 3 91 55 84 -39 73 11 -12 -99 35 -44 -30 -128 12 37 -75 -45 -81 0 126 -31 11 68 -10 2 -61 53 13 -15 -52 48 47 10 32 -4 85 49 -22 112 0 -47 98 19 23 107 -35 -38 -95 56 -65 38 48 -95 18 -3 -42 69 -125 83 -3 -69 41 37 -5 53 77 41 -32 -19 5 -26 -4 -23 49 -91 65 32 -16 -26 72 8 16 60 -128 -103 56 -21 -7 20 -88 29 10 88 53 -101 -91 -27 53 -75 48 12 -18 1 15 3 -100 -114 -126 -50 -14 -54 57 -52 56 22 -13 -107 -25 19 -48 -6 -94 4 -7 27 -36 -119 18 13 -71 58 21 -35 44 126 114 50 -101 16 79 37 9 -121 -41 108 -128 -66 -42 -15 -45 -79 -24 56 -74 -103 47 12 -1 78 -51 -19 -89 21 -13 -93 -55 -49 -34 -25 -66 -80 -9 -31 15 36 32 -40 1 38 94 15 29 3 10 -39 19 -28 75 -33 13 54 5 -23 57 43 2 17 48 -17 46 -12 40 32 -28 -18 9 118 -94 -56 -124 -10 20 30 2 -14 55 3 115 -7 -48 -22 21 22 -123 -19 9 14 -38 19 -76 -51 -5 32 -75 -8 22 37 -23 37 1 -44 20 -12 9 -34 -33 82 20 59 -29 -11 -44 -62 -15 -28 31 -56 43 -42 40 -39 73 -2 20 -24 -17 -29 39 -12 -39 0 -6 -1 -13 30 15 25 -36 -95 -16 79 29 40 27 1 -7 31 38 -26 14 37 46 -3 41 -9 21 87 18 -34 48 -44 44 86 -3 33 -44 4 89 3 84 -17 12 -26 -51 11 -12 -61 -101 55 -45 -81 -11 -9 0 18 56 53 -19 -3 15 64 64 33 21 30 -72 -6 19 -11 -26 27 25 -40 -3 83 -75 74 -72 23 -55 23 -17 -49 46 -88 25 99 -5 -29 69 -107 14 -96 8 41 -97 127 -66 -126 1 13 105 -10 3 -21 3 -6 -126 1 -27 125 -7 34 96 25 -102 67 58 -51 117 121 12 105 63 -18 78 27 -7 42 42 127 13 81 23 -33 -54 -12 75 -89 20 127 -39 -35 127 21 94 -74 23 -38 -27 49 -28 89 109 1 116 99 -62 98 92 88 127 -40 -92 -55 -116 12 -18 -126 70 42 45 127 40 -90 7 -56 -126 -83 76 50 -90 -127 -18 -128 -113 118 -71 -4 2 -62 74 3 115 54 70 -30 127 -83 34 117 -12 31 107 86 -82 61 82 112 -96 86 6 15 -8 -9 25 -12 14 102 -27 29 -35 -64 33 -84 36 -101 126 51 -125 121 51 -36 69 13 101 -104 67 54 -119 35 -37 94 22 17 63 74 77 34 -25 24 8 127 3 90 -18 34 62 101 15 124 -45 16 -107 77 16 13 5 82 -47 56 49 -11 46 41 -23 80 38 90 80 -38 11 56 -47 95 3 -22 17 -29 12 18 124 65 25 -67 27 96 -44 65 -20 39 12 42 58 -101 -47 25 -36 -109 -16 -6 -75 -3 116 -56 -48 -51 -101 78 36 41 -34 40 -106 -24 0 74 -70 7 4 -84 33 -126 -48 37 127 -63 38 -4 -69 2 65 61 -19 11 -36 42 -4 116 -28 -20 56 -21 127 -28 6 78 4 59 87 -50 -71 41 72 66 -80 78 36 43 -60 -31 29 81 -84 11 69 44 -44 -96 23 35 93 -54 67 25 123 -38 -71 37 -117 11 90 61 -29 -78 49 -18 -53 98 80 6 -47 -33 65 25 -17 107 74 -122 40 -122 -44 -64 25 43 -10 -33 -32 16 82 -50 6 -97 9 -125 1 -84 90 -64 59 54 -18 -14 -10 83 -61 -79 -125 -17 -9 32 -55 -15 35 -22 69 -46 -40 -18 -47 -57 -71 124 -52 36 -19 72 -62 -111 -46 -47 -34 -88 126 -72 -14 -6 -48 126 -8 58 -16 -19 -45 -43 -41 -67 34 -31 -5 118 69 -29 -8 -32 39 -53 -2 17 18 -13 33 55 47 -8 69 30 -46 30 -43 119 -60 -65 43 26 -122 -28 38 19 50 -113 38 126 -43 -31 0 -105 12 73 33 -18 16 -4 73 -29 -41 -51 30 96 -101 116 35 40 -36 125 0 24 -40 41 66 -27 106 37 106 -20 123 -74 -49 17 57 -30 39 65 70 70 41 -28 -71 4 -1 32 9 -33 122 11 44 -11 -7 -73 100 59 54 73 59 70 -34 33 -9 18 -62 127 65 56 4 51 0 127 -65 69 -22 -49 -40 -19 11 -39 -40 39 13 35 104 36 32 -56 0 -95 85 59 -28 16 -123 48 -94 49 2 -1 -14 33 106 -64 -10 -15 -58 29 -72 -34 4 76 -49 -125 118 44 79 -36 27 9 11 2 19 -7 -112 -43 -36 31 -40 101 24 -98 -16 34 14 14 32 50 -98 -13 -41 45 124 -86 75 -28 -17 -13 21 -54 118 78 -79 48 -61 -21 114 -29 74 1 -37 20 31 3 24 86 33 -15 -68 -77 -86 28 -10 10 127 -20 -94 -56 -26 19 121 -2 -60 66 71 67 65 -125 36 -31 -69 12 32 96 48 90 66 43 13 21 -91 93 29 -33 68 121 -21 -34 -14 18 -16 -36 47 -31 62 6 63 -40 -11 28 -128 -32 -25 45 -38 -40 -88 22 -1 -128 37 38 94 -30 78 112 -48 -54 -88 70 32 38 -54 -39 -6 -14 -9 -14 -40 -85 -48 9 -83 54 4 -20 -20 -37 -80 39 9 22 13 -57 47 44 -96 6 28 -54 34 -38 -15 25 35 -39 56 63 60 72 -17 7 36 50 -53 45 -47 -41 -56 64 -18 77 -44 49 54 5 -62 8 -8 82 92 -50 -73 46 38 25 -18 63 -8 -5 -8 62 -16 19 17 -5 39 -34 127 -23 -35 -9 -13 -42 -14 27 38 59 10 14 -90 -1 -54 57 23 0 26 -125 13 32 72 -95 44 -19 54 48 -13 57 22 6 -105 33 125 89 -36 34 -34 34 52 -12 -6 57 40 -79 -28 -32 -48 15 -124 -3 30 59 -27 27 53 89 83 29 -28 -1 -44 -33 -20 39 27 50 17 -17 47 -34 69 48 -25 26 -24 -13 -104 1 11 -9 41 51 44 -31 47 3 29 -48 -34 -37 13 10 -24 68 -12 39 8 67 -29 -121 67 12 -94 47 -33 -35 14 23 39 2 96 -6 81 -41 33 15 -76 46 62 46 -3 7 21 65 -10 27 -59 -93 -5 -22 -14 16 -18 3 -7 47 58 -23 -64 -57 -31 42 90 26 -81 79 3 127 5 -33 -17 -36 -31 13 66 0 -89 2 -78 0 11 84 -23 -6 -52 5 -59 59 -15 36 -33 26 -2 35 97 -87 7 35 74 -41 112 -74 -42 -19 30 -37 -57 -56 32 -68 4 -115 42 -73 4 -18 4 19 95 -81 -45 47 -12 -28 -92 36 -55 -48 -76 -64 27 -55 -35 -73 90 -81 90 -18 2 23 -31 -108 34 -7 -55 5 9 8 -66 -95 3 71 15 18 125 -6 83 -13 -50 6 18 -65 61 -5 -57 -65 -24 16 -70 82 -64 -2 -4 -53 -18 -8 50 -22 -20 -35 -17 -15 2 -69 -41 3 -11 -51 -74 -58 70 67 -27 -8 -68 22 -10 -67 58 0 54 -25 -17 23 -51 48 15 41 121 35 -78 -91 -29 17 -21 112 6 -63 61 -37 26 63 -65 10 -16 12 -50 -44 4 -19 8 40 -33 -7 -80 16 -17 21 -36 48 12 -20 -18 -7 -49 -17 -8 56 -95 50 -105 -37 2 28 -13 -29 8 -6 -2 -39 -15 -51 -5 -6 -30 33 -60 41 -24 -85 80 -66 -20 37 -66 52 34 -66 -100 96 33 24 20 70 72 -46 50 13 4 -4 5 48 -46 -15 -24 -42 20 -2 6 20 -33 -10 -26 17 67 -33 -1 46 18 -1 58 10 26 -35 -47 15 -44 73 -92 22 -54 9 -50 25 -26 39 43 -17 16 108 86 38 59 62 15 -95 -62 -11 29 -38 60 -125 19 43 59 73 -47 0 64 -30 -60 16 33 20 41 -18 -42 -110 -3 16 119 63 111 -25 30 24 -62 -103 22 -42 -36 21 53 -41 17 -25 13 94 5 -1 63 126 -34 12 -26 -19 -16 57 -1 -33 -40 -35 -110 -70 25 -19 -79 -13 36 -5 -80 45 -24 66 12 62 -72 -36 -47 -45 -44 -1 115 -1 -75 -42 -111 -20 -29 -8 -4 -19 -16 -57 11 -20 58 -37 125 -26 -3 17 -40 -4 33 -6 36 53 16 -40 -26 -22 -77 49 -23 28 -25 -11 -45 110 28 16 -4 -1 -25 -92 -3 11 -29 9 1 80 56 45 8 -14 21 -17 47 35 26 80 -4 17 -1 28 18 -41 31 82 6 -45 -18 13 37 69 0 -32 127 25 43 -8 126 59 -18 22 -1 9 -24 -28 -7 24 36 57 20 47 -16 -23 -33 -7 -35 -25 71 22 -23 20 14 15 88 -24 -25 107 76 43 57 -36 5 22 71 81 20 30 17 126 30 -6 18 41 59 6 37 -90 43 38 32 78 -10 -19 28 71 22 -13 13 -42 -26 -12 -64 104 -59 63 -2 -11 25 -23 24 53 110 -27 -15 -50 42 -11 -45 34 -22 -79 45 -15 10 17 6 10 26 12 13 11 1 31 -37 31 63 -32 -127 32 100 -28 4 -44 -13 14 6 45 9 -35 46 58 -18 -70 78 -109 45 82 -110 -126 -42 -36 -8 22 -112 73 98 -117 -122 18 40 -30 11 3 73 -98 -3 45 107 -67 8 -45 -10 44 -39 10 78 35 -39 -67 -84 -88 -37 -65 -77 17 -74 -35 42 -16 -58 -125 6 -20 0 -43 -34 -21 17 58 32 25 -72 16 -69 -64 -50 -19 80 -61 72 -50 -84 72 81 62 118 101 7 7 123 -51 -54 79 -70 31 1 -27 35 -18 -58 86 -29 -120 63 -35 -71 -105 -18 -34 5 -48 17 46 -51 56 -119 49 -58 -115 -106 37 49 -50 -98 27 15 -1 -11 -2 -14 23 -6 -11 -10 79 -41 -37 -80 -71 -75 9 -58 -40 -126 42 -42 -89 -12 -45 99 -85 29 71 63 75 -78 -93 -128 12 -87 0 9 -37 -30 -53 -12 11 54 45 48 15 -78 -21 55 -38 8 5 -51 -10 -84 36 -1 -82 19 58 -45 -15 22 70 9 -57 -26 77 6 4 -10 10 -25 86 -74 -101 5 -52 34 28 51 13 119 -1 -11 24 -70 -56 123 -60 -13 -11 7 -30 -30 -6 60 -16 -41 12 -16 -60 12 -51 -22 15 -31 -35 127 41 37 -27 -39 -102 -42 43 -109 -68 -67 48 -45 -6 -31 73 15 85 2 -39 112 22 -41 29 -34 15 -74 -6 21 -82 -28 112 -15 -2 62 57 -35 33 15 -61 17 -109 67 18 -56 -34 -4 47 -34 -1 -10 50 72 10 -39 55 -37 8 90 -128 39 -75 -55 4 -113 15 14 -44 -16 5 -91 -12 53 41 29 13 -10 25 -31 126 7 54 37 11 23 -25 -57 -39 25 4 67 -12 51 73 -29 15 43 52 -39 -7 18 17 -7 -29 42 -40 22 69 42 11 13 -17 76 -2 -86 13 44 -40 89 -51 -40 51 -5 14 52 -18 52 -62 39 -35 22 11 -28 17 0 5 -8 24 11 55 10 11 -31 73 0 -82 51 113 14 -1 35 -10 -25 -53 -37 77 -57 73 45 -29 -11 15 -19 21 -47 37 -43 -16 0 77 -11 58 14 32 27 -42 -28 1 -6 10 -42 48 -56 -57 19 0 11 0 44 -18 64 5 -77 -10 -55 -8 37 -25 52 3 -21 -78 -19 17 30 73 -2 40 17 34 10 -23 2 -8 27 -57 42 -52 10 12 7 58 -27 -10 14 31 -20 25 -16 11 -33 -14 -23 23 26 -5 -33 -15 49 0 53 48 -32 52 53 3 26 -29 -45 7 -16 -64 -9 27 -21 16 43 -23 -24 -11 23 1 23 -26 30 -29 -3 32 62 -4 5 67 -33 24 1 -35 -10 103 19 -13 -37 -54 -2 40 -29 67 57 -3 -2 -5 15 65 -2 90 31 -40 22 9 -8 -56 48 -14 36 -29 5 51 16 86 -30 18 14 -26 74 2 30 24 -35 67 -4 -64 -49 62 -30 -25 19 7 18 8 36 53 49 -10 44 -27 42 -23 -20 -4 -36 5 -54 -6 73 -21 -45 2 -37 56 -10 79 -12 -4 -56 9 13 -15 48 -41 49 7 -20 -89 -41 -51 -112 32 -95 87 25 -1 -79 -13 -18 106 49 -31 11 57 -110 -20 36 24 7 -30 -30 18 88 14 23 31 -19 127 -67 -25 22 88 3 17 116 -87 22 -46 -38 -61 -124 43 -65 -61 -13 -45 -78 -19 3 26 -75 -14 10 37 58 -49 94 -69 86 -15 -88 105 -106 48 -26 -126 -19 127 -24 17 22 25 -122 -21 86 21 111 16 32 66 -19 -76 34 64 -50 -48 56 -102 26 -47 -73 -54 13 -34 21 -16 21 32 13 -35 -25 10 -31 -22 -47 -94 80 -25 20 41 20 -37 -36 -19 9 19 72 17 3 41 0 -31 -23 -21 -25 9 15 14 -60 -55 -81 -80 -46 -31 20 18 63 15 -7 81 -6 26 3 90 2 17 -58 -17 24 100 -12 28 -21 11 -34 26 97 74 84 62 -23 10 39 86 40 43 30 105 -91 76 15 -36 -23 60 -81 47 -36 -24 52 -10 -127 10 -124 12 -5 -28 51 13 94 96 -27 43 9 49 0 -18 -6 31 -34 -18 8 47 45 -36 43 -5 40 -53 6 71 30 61 -115 -28 52 23 76 65 8 -116 16 60 14 24 97 -31 102 -75 53 54 17 47 -33 -53 39 -22 -46 -64 16 9 -50 80 10 -47 -50 14 -106 -81 1 -16 -64 14 -49 77 -70 -3 15 38 9 -111 21 -16 42 22 -92 -6 -11 36 15 53 28 80 -49 95 7 61 98 29 5 59 35 -13 -52 45 -34 -18 -5 -61 -101 -4 -50 -14 -48 33 0 -87 126 -71 24 -42 28 -47 -20 -54 -94 -33 -60 -11 -31 -48 29 -60 -47 -55 3 -56 -36 -82 43 -95 -49 -98 -47 -45 25 49 -24 48 -40 -4 -42 -6 12 -33 -36 4 -11 16 -28 -127 -25 125 -68 -128 12 -30 1 -11 -32 -25 -116 -17 -42 -6 -69 125 -1 65 7 43 -34 11 -27 -27 -85 -86 33 -15 12 1 12 -10 66 29 -75 -48 -53 -63 -58 43 46 8 5 64 -11 -12 40 -65 -29 50 7 -79 26 -19 10 -107 -31 -35 -35 -10 11 21 -5 -13 -59 39 1 58 -49 -20 -39 33 30 0 1 36 19 -101 -66 -65 -43 -28 -30 -18 6 -2 -73 -36 -10 18 -39 102 12 -53 88 5 -56 27 -125 112 65 -30 16 31 39 3 -45 14 -72 -1 23 11 64 21 -4 38 26 52 -38 -26 -54 50 -23 -125 -13 -88 0 -43 107 -10 -78 -13 -33 53 66 30 -14 -9 -5 -50 52 -4 -52 52 23 -25 34 -30 -56 30 -60 42 -20 23 71 74 34 -79 -18 -45 104 27 9 -68 -121 -71 -70 87 -89 -57 24 115 -8 7 -84 66 -17 65 6 5 -103 -55 9 55 -81 10 -37 6 -42 -66 -29 -7 71 -68 80 -48 -4 41 -11 -31 31 -45 3 -63 -54 39 -38 1 23 -36 109 15 87 106 -26 48 62 71 40 -15 112 -94 1 29 -12 -48 30 -78 -80 44 -65 -89 65 -47 -127 -67 -127 -2 -6 27 -37 -30 50 25 -85 -37 15 -29 84 -59 -38 -81 -15 20 127 -82 103 -22 -80 -32 -6 73 -76 13 -4 -85 51 -102 -47 4 -16 35 -45 109 -125 -7 -29 -31 6 -34 -93 -125 -83 -124 37 -58 20 6 3 28 -47 123 14 -20 -124 -39 -62 -96 -42 -128 -95 -15 104 15 33 29 127 77 -73 8 26 103 10 97 -112 -59 -128 -28 -7 -51 127 -15 127 29 -80 2 -34 59 -62 -81 -20 -9 15 32 -26 -7 6 -69 -10 23 31 -33 11 91 117 -20 41 -23 41 10 73 12 40 44 26 -4 48 9 -9 -46 -89 11 -15 -60 -36 19 -65 -9 18 125 -39 0 41 -9 37 -78 17 -104 -14 -63 -4 -59 11 -73 65 -9 -78 39 24 42 0 111 -7 45 7 108 -19 -126 -13 -29 18 63 95 28 -86 75 19 34 -1 56 -66 0 -83 30 21 8 -26 44 -23 62 74 -14 -59 68 4 -12 -21 58 108 117 47 -29 16 6 121 22 -37 1 61 -71 48 -15 -5 126 -127 99 75 -26 -22 -55 -39 24 -30 -8 49 5 91 14 -32 -89 -23 -26 8 -70 -55 51 -46 39 -64 4 58 -51 -24 11 -19 -40 -38 104 -4 -3 -18 25 -9 12 -14 -66 52 -46 21 11 -64 39 42 -2 -1 -33 -23 -22 -21 -29 -47 102 78 -81 -47 38 -35 86 -39 -43 -48 -40 12 59 -40 -3 19 -38 -4 -38 3 22 -13 -96 86 -16 52 -6 -30 -21 8 47 -22 19 53 91 -99 -29 5 42 35 -14 -128 -59 -45 54 -43 -38 -65 11 42 -40 -77 64 -124 -13 -12 -65 0 -35 79 -42 -64 -116 19 -6 59 19 -100 -40 4 -43 96 22 -128 60 92 -90 25 -94 23 -50 -56 -37 -46 47 -115 -49 10 -22 -61 -127 -91 2 61 -110 11 -110 9 52 -92 -56 -83 15 -13 -1 -38 -47 -78 -49 -112 -35 -100 -48 104 -93 -65 2 27 56 -29 -47 -88 -66 -9 -36 -12 -91 -15 3 14 26 54 -63 -39 -21 5 23 -60 -47 6 -24 -12 -19 -11 82 -46 9 -12 26 -33 116 79 -21 -90 -20 -25 7 -17 43 -18 -13 -35 44 -82 54 -33 23 -97 -52 -4 24 -11 -84 -48 -54 -87 -27 42 -59 48 40 -1 85 -14 33 -73 -89 56 -28 -53 -26 -20 -29 1 -128 1 1 16 25 -5 -21 7 31 -24 96 1 51 -109 30 48 26 -19 5 -10 96 11 67 -32 13 -47 34 -28 27 49 113 -1 126 0 51 -26 48 -12 30 -97 31 -43 -59 35 -43 -63 -23 97 9 26 11 -11 -13 44 -55 -22 -43 -41 5 -68 -88 -9 9 28 -32 19 36 -26 -64 92 43 -5 -93 86 64 -51 -11 55 -5 10 -10 127 -3 -52 -49 22 42 -7 27 2 -10 -11 30 -62 33 -92 -3 14 -24 -34 127 6 65 -6 58 127 -14 -33 57 -5 -90 43 -12 50 -119 -11 -37 40 -13 -37 11 -60 46 -90 -7 -116 84 -64 -95 -11 -76 -67 14 -99 -108 -69 -52 -46 -7 -24 -9 -32 24 -57 116 -108 -84 6 33 -42 -29 -26 29 36 -78 -25 -9 -122 -55 -20 -125 118 52 32 -33 -116 -74 -102 -62 -33 -23 17 2 -13 18 -17 -27 -51 22 -18 -88 -49 -61 22 64 -97 -35 21 -19 -127 -48 -83 -87 -31 -91 -5 37 -47 3 -62 -35 -97 -113 -84 -116 1 -81 -85 -118 12 39 -89 80 88 -23 84 -42 43 24 82 -38 -10 -38 64 -32 -31 51 104 -89 -5 -6 -42 0 41 -1 -35 -33 -14 -4 63 17 27 -12 6 34 -99 58 -51 -36 -18 22 24 -27 51 -25 -17 53 31 14 -13 56 65 77 -3 3 -18 60 -31 -29 105 86 6 20 36 -32 -48 35 108 -25 -1 60 23 -25 38 34 59 5 -8 -11 -5 2 -33 61 26 -25 7 18 -8 3 -23 -25 16 22 59 20 -18 126 48 -22 59 47 41 44 -60 -11 4 -1 106 -8 -17 81 76 51 64 -36 13 79 -22 45 -128 -74 -70 -2 32 123 127 57 -31 113 -32 -18 -45 -39 76 -48 24 38 83 116 3 29 -57 -102 -31 -22 56 -21 -101 -74 -21 -34 -128 -9 -106 11 -65 -69 -13 -57 -91 87 43 59 127 -13 121 -76 -45 33 -35 -109 69 126 69 -6 11 71 -93 86 -127 24 -8 9 104 -7 11 -2 42 -10 -63 28 43 -22 23 -58 16 43 14 107 -36 64 2 33 125 31 40 -3 28 -70 0 -41 26 123 -82 80 15 -37 -64 73 12 -97 -1 9 -29 -16 43 125 7 20 44 1 20 40 52 65 -63 46 111 -9 -14 -30 -128 38 113 76 -61 -15 108 97 -113 47 -48 40 11 46 27 -78 63 2 26 42 -58 -70 4 33 97 29 1 11 98 47 42 26 125 -77 -105 33 127 -18 81 -6 81 3 -97 -108 -15 4 24 -79 -127 68 10 -42 -105 6 -73 -8 82 -67 -62 53 -77 31 -23 21 4 27 67 76 -58 1 -101 -25 -89 62 5 19 -29 -33 48 -66 -30 94 106 57 61 17 41 -18 7 -55 84 14 75 -14 -19 42 -68 18 -85 -127 108 57 -82 -51 -56 22 -14 -21 -126 11 36 10 116 -68 42 61 55 -49 124 5 -98 13 -41 18 18 -101 -128 -81 17 -128 -54 -81 -77 -11 -38 32 -16 63 -63 10 -1 -29 10 61 -8 20 2 16 -44 9 -36 85 -31 -54 -105 25 -56 -4 -1 123 63 -42 65 -127 12 -40 43 103 -79 -81 12 -98 -112 -18 63 -42 19 95 -71 24 3 119 39 -45 -93 39 17 3 1 74 19 -102 -32 15 -6 -1 -43 24 39 -56 47 -10 -2 38 -49 43 -87 53 -33 1 -44 -53 5 -1 -8 -36 15 34 7 20 -2 -1 20 98 -4 -30 -3 -46 91 56 -1 -30 -28 43 26 86 19 101 10 33 -3 51 44 -11 127 -16 -10 -3 -96 4 -34 -43 -55 18 -28 4 -125 34 -25 -16 127 47 -23 12 10 -42 -21 -27 -42 97 30 14 18 8 74 -8 -31 -58 -104 0 0 -49 -20 -49 32 70 57 -26 -43 -33 31 -40 -26 -4 13 -58 115 74 22 -7 28 11 -76 19 -55 1 64 5 -79 -23 -92 27 34 91 51 -8 -128 90 23 3 34 60 -14 -7 -18 -36 -59 -81 2 -88 22 60 -59 -91 -112 -126 65 29 -1 21 -64 -42 2 86 96 -3 58 -56 53 -41 106 127 11 64 -31 -12 -44 -51 11 53 -48 115 -49 113 -84 31 3 70 -78 -41 11 -19 74 -112 95 45 17 56 10 -24 25 106 -6 -70 -15 58 123 75 46 61 -63 122 -61 32 -18 -88 -35 40 -81 -69 52 3 -108 -17 -71 107 -13 49 -76 25 -85 19 82 22 -55 -4 -14 -109 3 -1 -32 35 -21 -124 4 21 -46 -29 43 25 62 -54 18 62 -16 124 76 -28 -69 -64 -59 12 27 67 44 -81 33 58 115 81 -62 29 113 42 3 -104 -55 -9 -14 116 -70 -44 89 88 -63 -59 51 -84 91 -4 -2 70 -88 22 -124 65 -83 -67 15 27 122 -102 -47 37 30 118 -45 -46 -78 -106 36 -64 59 27 -49 -5 39 -13 57 30 1 17 28 81 -30 66 -118 85 76 -63 -72 91 -61 -1 -127 8 22 40 -45 66 80 -6 96 33 112 -5 -43 -15 -16 21 -29 -46 -37 -14 -98 -46 -92 -38 -86 26 -52 -20 -53 -28 -72 34 -50 -118 -70 -54 4 -104 -90 -22 -127 -37 -30 -26 -86 -67 -49 -71 -55 -41 -125 -24 -55 -66 -29 54 -1 6 -72 -14 -67 -82 -73 -96 -42 -125 -37 21 -62 -3 -15 -38 24 66 -63 -26 -108 -3 -11 -34 -82 -52 -49 -39 -63 33 -9 -24 2 -52 -76 -36 -75 -92 -65 -2 -63 24 -27 -114 -53 -55 -126 -90 -22 -51 -30 -86 -49 38 -62 -37 7 25 -54 -30 18 -63 -8 -38 -13 -11 22 -10 -16 18 -16 -15 -10 23 -28 8 11 27 5 25 -41 20 6 1 -30 -57 -12 -30 9 18 -14 -29 -4 -39 -15 -6 32 -18 26 -41 -79 -49 -58 -19 -36 -50 -34 -25 28 -9 48 -7 22 11 -66 -8 9 28 59 30 13 -47 48 -9 -21 -18 -50 -20 55 -10 -10 -58 42 1 -20 3 12 30 4 6 22 67 -1 33 -52 -16 25 -15 -29 -5 -3 -13 -42 50 41 0 71 23 38 -25 8 97 -3 3 -11 4 -30 -16 46 34 -67 -8 39 -7 10 11 6 -18 -43 73 6 -47 -7 -19 -71 -14 -42 48 -51 25 -17 5 -16 17 -38 -10 -13 16 7 16 12 47 -32 62 -82 16 127 82 -26 -40 14 -36 -32 -13 32 69 38 24 -55 76 0 4 -7 22 24 14 24 -25 10 4 -1 -57 58 -19 -7 -7 -12 64 -14 27 32 93 -80 -48 64 10 -18 -14 49 -83 -43 21 126 -26 -71 -125 -23 -74 -26 62 -28 -10 -20 -64 24 21 42 5 -93 33 3 24 -19 119 49 15 -50 77 -22 -41 -82 2 41 55 -26 9 122 -5 -28 21 -50 76 33 19 29 60 26 -65 41 47 60 26 -60 -115 7 -30 -13 -114 32 59 0 38 54 -17 19 57 19 -35 6 82 -11 -18 7 -69 -16 -83 -7 50 114 73 97 51 -85 -1 48 46 27 -65 -120 41 126 98 -15 6 70 4 5 -7 -72 9 -90 33 9 -105 9 -58 -4 29 -34 59 -13 -14 27 3 -40 -12 -74 -19 0 21 33 -38 27 -15 40 -53 71 -14 48 -44 -29 -67 -8 20 10 -75 -53 -21 -19 -10 1 34 -32 -103 88 24 46 -63 -11 -31 -37 -61 89 40 -48 2 10 -12 88 28 -70 90 -7 -35 -4 -20 126 -40 -30 -63 -45 56 21 45 30 -17 23 -128 80 24 -2 -65 -79 64 -57 -24 57 61 -51 64 23 -21 -13 -31 -48 21 -41 -33 -92 -10 -69 2 104 -4 23 -1 -122 -16 -29 -17 49 75 127 47 15 -108 -70 40 -24 -30 -48 18 -46 98 -46 12 -7 79 3 -59 57 4 27 27 -30 10 -48 23 -5 -49 -79 2 62 4 25 -80 -6 95 21 -8 -66 -24 -8 -69 -119 -66 41 36 127 52 -20 -58 -10 -6 -48 -48 52 25 0 -55 83 33 -15 74 57 -123 -15 -32 57 35 -98 11 56 -52 -128 -17 -123 47 -35 -49 44 28 -4 27 -15 26 103 -40 67 -79 68 -37 -119 -48 -88 38 29 -51 112 96 -17 34 32 28 76 -37 -50 60 -44 17 48 21 42 99 -46 4 28 -99 -125 0 0 31 65 49 -9 49 -46 -35 107 118 0 13 79 -61 -19 60 -53 9 -25 59 126 29 -60 50 93 -27 -53 11 -5 90 30 -83 -13 -61 -42 11 53 -7 -67 -31 69 -29 54 76 122 -23 -6 -70 -110 -72 -11 76 -70 10 90 -7 9 -15 -15 37 -52 -44 53 7 -11 52 23 -15 22 -12 54 -4 -18 -40 -7 56 20 -57 63 -30 1 15 98 -33 -43 35 -71 67 -22 63 -49 -37 -21 25 -121 39 12 -85 56 30 29 -2 -73 56 35 -10 -77 127 20 -1 1 76 -31 -45 0 47 -17 74 6 17 61 -2 77 -71 82 103 23 31 -68 44 66 60 -29 -18 -68 52 7 24 0 -19 70 25 4 45 2 -58 45 73 10 96 8 -46 45 -54 -71 31 126 69 0 -49 5 -97 22 -84 -55 103 19 15 -33 -3 -40 -33 72 -11 23 26 -21 -24 63 -76 59 47 -3 -17 55 111 27 -87 -45 33 -51 9 -15 7 37 -62 -33 29 -56 22 -33 -36 -55 -70 -106 -67 28 18 -118 25 -38 5 -51 73 -38 28 68 -18 -13 22 56 58 -3 8 20 2 -19 -28 -18 -29 42 50 6 123 -16 10 22 79 -65 14 0 51 95 51 -6 36 17 76 -59 92 11 127 90 40 -68 24 82 34 78 46 17 72 10 55 31 0 40 115 71 16 21 -74 73 56 58 52 93 21 37 -9 16 -6 1 42 17 31 58 10 64 109 101 30 -19 -25 62 23 -39 25 5 42 -53 30 68 27 88 27 23 -4 51 22 -2 -48 1 24 26 98 17 41 -47 44 16 32 29 13 56 59 64 -3 57 26 68 31 16 13 -12 73 83 32 -30 20 17 -39 22 -6 12 7 61 51 -31 -22 20 -58 5 16 17 -8 -6 -14 52 7 1 -6 -26 -2 15 -23 32 -34 -27 7 -6 24 33 58 48 11 13 6 -50 17 12 -9 -15 -4 37 6 38 9 45 41 -31 -27 30 -30 1 9 32 16 -43 -17 -13 -19 0 29 -14 16 36 25 54 9 26 36 3 -18 28 -18 -9 14 -5 -13 9 25 -40 11 37 -9 49 -29 22 40 -27 -9 36 -10 -62 52 -82 45 91 -13 14 28 15 -20 10 -44 37 -43 -18 -60 11 -69 -22 12 58 15 -40 -3 -37 -21 47 39 -20 27 28 -32 10 -71 37 -34 -7 28 -75 -17 17 3 40 -57 55 26 -7 18 -32 21 -90 75 -10 -28 3 15 -91 -76 -56 -26 -37 -12 -29 52 -62 61 59 -19 127 -1 -7 -4 -47 -6 -34 22 38 -14 -24 3 53 50 -29 47 -1 50 -37 111 -2 -67 -23 -59 23 67 -42 -16 122 -51 11 -46 -55 -62 -56 119 -14 67 20 -38 33 -23 62 80 54 -95 110 -123 27 80 -67 105 45 -11 -31 95 9 -22 -24 70 -41 -127 -50 -36 33 98 -5 15 -40 8 9 -62 -31 -46 -6 -128 46 -27 17 40 -14 -106 47 64 83 -29 37 -14 -69 68 7 -24 -7 -59 -103 -91 66 -98 54 53 -78 63 -14 -85 115 23 -20 -79 22 -92 -22 18 -34 -30 63 -40 72 19 -95 -1 -17 -34 125 -23 -45 90 19 5 68 14 45 60 48 -74 124 -49 39 29 18 23 -18 -18 62 -48 -116 -17 43 43 57 18 -30 -29 -24 -45 -2 110 27 -3 -24 74 -3 1 -27 99 70 -128 40 -51 -54 65 -53 32 -30 52 25 -2 -53 -19 7 51 3 40 -27 30 37 -3 -50 48 -26 54 17 7 127 -54 -22 -41 38 -17 23 -2 -14 12 -21 -20 78 9 32 74 31 -67 -13 5 -73 -93 25 55 -3 20 36 -27 45 59 -54 51 81 66 -6 -1 18 -29 -14 49 90 -3 30 2 36 -12 -57 44 -27 66 -13 -30 54 24 3 54 21 36 25 89 -22 -23 59 41 51 37 108 122 -19 -19 -14 4 23 -27 -44 16 46 5 -12 4 -38 -1 -16 16 -78 -27 -21 -33 44 -58 10 23 -44 -35 -12 54 36 -52 -21 34 -22 -5 -34 77 37 4 -8 21 -70 36 15 6 -88 -27 -40 -19 22 -60 -39 -18 49 -22 -15 38 71 43 9 14 75 -66 79 15 66 45 -33 -63 50 35 -32 123 -15 10 31 0 7 -39 -31 19 -14 62 31 -27 25 82 7 104 28 14 -65 -27 21 2 -15 -57 -11 -16 -4 76 32 98 24 -20 64 118 66 64 32 38 -12 108 62 -53 -5 87 -49 -45 8 -109 48 35 22 -1 51 10 44 52 -13 53 44 -80 -54 -33 125 -100 23 -47 34 -21 -21 70 53 -52 50 73 23 22 -26 28 75 44 -107 68 -91 -44 -28 -17 -56 47 38 19 43 -22 -15 -68 3 36 28 76 -68 -27 7 37 10 -51 -7 46 -22 -62 21 -51 50 -49 -30 -40 -76 12 19 2 54 -5 53 -63 19 91 13 -7 -5 -1 3 32 -4 31 28 29 44 -35 -9 -52 -30 -29 20 -37 -62 -56 -61 -2 -58 63 -49 33 -40 -28 11 -14 68 -113 -23 20 23 6 -105 54 21 -18 69 -77 -39 -97 -29 -37 -53 -102 -59 17 -43 -20 -123 34 22 45 71 17 -45 -17 0 35 2 -43 36 -34 19 -36 2 -89 -78 74 -54 3 7 28 11 18 -73 37 -11 16 -65 69 15 88 5 14 -4 36 33 11 -58 -42 14 7 -22 -30 12 28 -63 -32 -12 -31 -6 -9 14 61 25 -60 56 17 -84 -12 -53 -57 106 -42 14 -10 38 -1 22 -13 26 45 3 -6 -18 11 66 53 8 -52 46 -57 20 115 -111 -35 32 82 -25 -28 40 -31 -9 18 -43 4 121 83 -63 -24 3 -78 -53 -15 -58 35 127 27 -17 -21 4 48 -38 -37 -21 28 85 14 0 5 44 34 -11 15 -126 24 81 14 19 -39 -30 67 29 -13 53 40 -9 14 -43 124 72 28 116 -16 73 -33 -11 63 120 -4 -11 -24 -67 59 24 -17 0 29 22 68 2 58 -76 -16 -3 35 -126 79 12 -25 -40 -17 7 -9 -38 -18 24 5 -21 -122 -64 32 -9 -18 37 -10 -104 -61 41 116 -50 11 31 -46 2 27 -17 -26 -64 42 32 6 -24 58 -19 -83 -43 103 27 -17 80 -15 -41 2 69 -69 -7 45 81 -22 76 -52 42 -39 -74 -25 11 30 57 -15 9 27 -73 -8 -78 -13 -28 56 14 40 86 58 12 -3 59 33 45 -69 5 -88 2 -48 -78 -23 -2 5 -28 76 -6 -19 -88 64 -116 17 38 -35 -5 92 28 23 102 -50 -51 -90 -46 51 -29 -51 -10 -37 23 -28 -25 -8 0 -23 -53 -45 10 -126 -18 -26 0 -28 -31 -21 -29 -42 -27 40 -1 -65 3 1 47 -23 6 -11 20 92 98 -75 59 55 -96 -35 -35 -61 -31 35 -57 -1 2 127 -51 -66 39 -43 64 -54 -113 7 7 -54 -42 83 8 57 -46 5 -11 -15 -24 -39 24 13 -84 3 -20 -34 -78 25 -84 -14 41 15 19 -6 -59 43 69 -71 -39 96 18 -43 -32 -44 76 16 35 96 0 -14 -3 -65 -17 -45 -58 10 92 62 -68 58 35 31 3 1 10 -36 -2 -4 -36 27 64 -69 -40 21 -4 -27 35 -81 38 -17 35 -27 -63 -72 -9 -58 45 -29 117 36 44 100 88 114 -41 -37 -22 -13 27 -29 8 -20 -19 5 29 -50 51 22 -34 23 6 20 -66 -38 -83 -5 38 40 36 24 51 -83 21 -49 40 45 9 42 -3 48 -4 125 -1 0 -3 15 -1 59 -34 -16 59 23 47 11 34 40 33 2 -3 55 97 54 1 13 16 -6 81 -37 44 45 9 2 -96 53 -22 -37 -36 36 -24 -14 2 -7 -44 17 -4 8 7 33 3 16 -5 -43 -56 10 51 -11 21 -100 23 -9 72 4 29 -22 2 -7 -63 4 10 -10 12 17 34 1 28 7 15 71 62 37 -4 -41 -9 6 -21 9 28 11 -30 87 12 61 20 -52 29 20 32 17 55 -8 -32 -30 -6 -27 41 1 18 29 57 -29 59 6 -1 16 19 -48 87 7 1 18 -96 -109 -17 29 -37 16 37 -43 24 5 -25 -47 -19 20 -29 2 54 14 94 -106 -78 -17 120 53 36 -15 55 -22 81 18 -53 12 -105 -39 10 51 -102 -27 63 -34 106 -95 45 42 -20 10 -3 38 -17 -44 -17 -44 88 5 60 -21 12 28 101 85 30 -23 2 -37 72 57 2 -27 72 52 109 16 -36 27 34 -83 -68 -30 -80 -20 82 23 62 -24 122 114 -8 -112 38 106 -28 -13 -28 22 26 -20 12 89 41 62 -59 14 13 47 103 -43 54 -10 83 -111 -18 41 -25 -29 -26 4 106 14 -44 89 102 110 48 106 30 -16 36 1 31 94 12 84 -42 -93 30 10 -37 41 -2 92 24 -51 15 10 73 -16 57 67 75 -46 -1 117 4 39 4 53 -86 51 67 -57 64 -84 49 -77 -1 -22 21 29 3 9 -22 45 -1 -31 9 -12 64 -5 0 14 7 -8 106 55 25 81 14 -29 16 67 36 47 -44 126 21 -29 49 78 54 -12 59 -19 21 1 15 32 -1 0 64 -40 13 14 58 60 60 22 32 -21 26 -84 -10 -10 -53 46 -11 -48 41 -10 -56 55 83 80 -46 -80 18 -38 0 -112 99 -8 -22 26 -21 -49 13 -99 62 42 -47 56 32 -19 -41 61 -4 -48 -6 -16 39 12 -128 -34 75 -72 48 46 -10 3 13 -23 -66 -11 -6 49 43 65 47 14 6 -90 41 -39 126 -12 -46 -39 24 -36 -2 34 -21 35 68 28 23 29 -84 -31 95 57 33 -52 4 12 -16 -14 -58 18 61 40 41 -21 -63 64 -2 4 9 -19 58 45 37 -16 44 -31 21 -32 125 80 42 6 -50 42 7 41 -19 36 23 -66 -24 -1 31 -22 0 93 -26 -91 -23 26 6 60 -57 9 -44 7 46 78 108 26 -26 42 11 -41 -35 3 59 -17 69 57 86 22 20 49 -44 55 -62 34 29 -32 2 -49 67 -33 -126 26 15 -90 -6 -19 21 50 22 3 72 -105 26 -12 16 16 -15 43 45 -5 106 8 -68 50 -64 -21 74 98 -78 15 30 -42 63 102 54 39 44 37 -82 -49 -12 -2 -25 -8 111 -15 -54 36 11 -39 -112 -16 -35 6 -70 83 -18 27 -101 51 -19 48 -4 35 111 2 62 127 31 91 -43 -11 99 -66 5 38 48 81 11 -24 30 -3 8 0 1 33 41 42 -9 -2 -92 -38 -13 3 -11 -91 -27 -34 -10 43 -106 -10 -40 109 9 -20 -69 121 -28 15 17 26 -16 -42 -35 29 -14 1 26 -24 5 -49 17 -35 -9 8 5 -18 -21 29 5 -34 44 -67 49 4 72 -42 37 47 11 43 6 43 13 24 -36 -34 51 -12 -23 11 9 -3 31 46 -46 17 6 -48 28 -9 23 -29 -44 71 12 15 -68 22 -28 -47 -51 -43 8 93 7 -22 39 -30 -18 -16 -58 124 -109 -19 -45 -37 -7 104 -34 -54 -62 -30 -22 14 58 8 -14 -20 5 -55 -31 -24 35 -35 -46 -10 43 15 21 -1 24 4 -45 20 41 48 -20 -1 40 -20 -44 -37 25 26 -24 -72 -73 23 -44 55 -76 5 -8 -56 55 -48 -44 40 49 9 -21 7 46 -17 113 35 41 -49 20 -49 -27 -8 5 -16 80 38 -53 34 -22 15 -29 10 19 24 -72 50 24 -36 16 81 23 -7 22 -8 8 -27 52 -26 57 36 -35 15 -12 58 27 -2 -3 43 -111 -26 -50 49 40 -63 -29 -43 -24 -12 -6 -18 -110 -27 40 -39 -14 12 74 56 55 -106 -2 36 8 11 43 86 -8 -6 -22 -58 84 9 125 28 65 -1 -40 11 -53 -42 -31 -104 -13 -128 22 -82 -29 -64 62 71 -5 14 -71 62 -32 68 2 -80 -43 -24 41 -16 -118 -88 -55 -72 -12 -103 10 -20 52 -17 -42 45 62 48 -25 58 -25 -17 -34 -73 -48 60 26 -79 0 -3 22 45 -43 6 63 -74 39 53 88 58 24 -44 3 68 37 63 -2 24 28 17 24 43 2 -106 -59 64 -29 76 -41 -31 -24 36 2 -40 36 43 -61 -62 0 1 -19 33 -51 31 -24 69 21 56 -6 -35 -20 -53 29 -24 -31 -66 69 -43 -11 -40 -23 61 37 62 13 -16 -9 34 44 71 -75 -80 28 -31 -10 -6 17 9 16 -16 6 28 17 7 32 -13 -15 -19 32 -33 -10 52 -33 66 -21 2 26 2 19 42 39 94 -47 -77 -90 3 44 -39 -23 19 0 100 -36 3 62 -78 65 -23 -17 59 -71 -7 26 36 -83 -2 -19 18 18 -3 -60 -1 28 53 43 14 94 -70 -39 -19 47 -17 -37 25 2 -23 4 72 -104 -121 64 21 29 119 19 21 -34 33 -92 -26 -52 53 28 -24 -106 -9 -40 -33 106 -34 21 -26 11 -30 -44 -74 -68 -4 3 -29 37 -1 127 58 97 57 -89 -86 34 -50 100 60 13 -125 57 1 8 -125 34 -23 81 68 -48 -26 -10 33 10 85 -79 -17 -128 -33 68 -33 59 -9 13 -72 -11 -59 50 -77 -94 37 31 -47 -14 -7 -24 36 -1 -81 1 -27 -41 38 29 50 -66 3 -50 -48 -31 -114 2 -54 -108 38 -52 -36 -47 -33 57 -73 82 29 5 -113 -43 39 -126 26 -33 32 -52 26 -91 -72 4 -98 -48 30 -111 19 26 80 -79 16 -31 57 -93 15 27 52 21 -43 15 -30 -59 11 -67 -59 -27 17 4 42 -49 -18 26 -47 -26 48 0 -40 -33 20 71 44 42 67 62 -76 -2 -51 9 9 -2 23 21 -7 21 12 11 -80 64 -2 31 -39 -64 98 -78 27 75 98 -19 -44 8 -38 -26 31 42 -48 -47 65 19 66 27 -30 -37 21 -127 -18 35 127 -1 123 -44 3 -2 -75 -3 18 34 45 8 11 22 65 -91 75 19 -19 2 -47 56 57 -54 -87 -37 -29 -34 -33 -69 36 30 88 -37 -11 64 9 60 93 -26 -38 51 -95 -96 54 25 -28 33 17 3 -98 -12 -20 -6 39 -76 14 26 50 48 58 -107 10 -24 86 70 -27 118 35 49 -63 65 -85 127 79 101 102 -41 16 65 21 -38 5 -25 106 39 -96 34 41 -116 -12 9 24 -26 -26 -6 -126 -4 60 102 -5 -76 -8 -20 -11 -73 -59 -91 13 -42 58 35 36 90 68 -92 -21 -66 16 -67 -53 -2 45 2 40 -10 -115 29 -128 -1 48 -60 -3 -44 16 -18 -86 0 39 29 -12 15 8 -29 -1 32 -23 -96 -23 26 0 -82 -26 13 -39 -77 20 7 -18 -102 13 69 127 -84 19 -13 -56 61 -57 8 -2 -8 -23 50 34 -75 61 8 40 -38 47 21 17 -33 -14 -25 51 -22 -27 -117 1 0 -17 -2 -21 49 -31 8 29 -21 3 -26 -51 -1 83 -56 -5 5 -113 -25 -62 85 -24 -28 -97 46 -40 30 2 -91 39 -23 -35 44 -64 -56 -26 5 8 -33 29 48 13 -11 -5 13 -41 -69 -8 32 10 -6 9 -33 -45 -42 23 5 7 39 -25 6 -47 -27 4 -38 -98 -16 16 86 18 9 -6 -4 -71 38 -30 0 -12 -16 14 15 -63 -65 -49 -52 -14 -62 -26 -26 -8 6 11 -28 -68 -63 66 -5 13 43 20 -4 -24 27 126 -20 -25 -15 -3 -22 10 86 34 2 16 -94 -51 47 -14 21 28 19 -72 107 -2 -2 -30 21 25 -113 -29 -6 6 24 -21 -87 4 61 82 -12 22 -24 -71 -17 55 -48 -9 -62 -3 65 49 -19 53 24 -43 -10 -7 78 40 -44 -34 -35 12 -24 -24 -50 6 58 97 34 36 -21 33 47 -33 39 -73 -55 36 -69 22 21 -8 -117 5 -1 65 3 45 5 13 51 -49 78 -10 9 -20 -20 -5 5 -27 13 -23 -122 69 55 -16 60 67 121 8 -60 18 41 -14 21 -81 85 -33 37 19 -35 30 72 32 -16 95 -4 6 -30 -1 -49 -104 -84 83 38 -26 58 -57 -65 56 -77 -28 -32 -86 126 -113 -41 -117 -37 36 122 -87 74 -36 33 49 45 3 40 93 -48 -128 43 -54 34 75 127 -107 5 8 -124 -2 98 -85 -45 -124 86 -115 -67 -64 125 66 -88 56 -7 123 90 -15 64 -127 -121 35 18 -62 -124 -52 -39 -100 -58 -42 73 -99 61 34 -128 57 -14 127 -49 119 -128 -114 -102 -98 -6 -102 48 -23 93 127 -127 92 37 64 -72 -4 112 36 7 40 1 108 -9 81 -2 34 -43 -31 -28 -16 69 -88 55 -68 -11 -19 63 15 -52 -12 5 -30 49 21 108 13 -22 56 -51 -39 -17 86 -13 -17 -11 39 120 19 29 -21 114 43 0 32 75 -23 115 12 -9 -38 20 61 33 82 49 -46 -45 9 12 23 23 -53 89 9 -10 -59 54 41 -35 -1 -31 -57 61 25 31 -86 8 -116 -58 -8 -3 77 -4 -51 -33 -32 20 86 -6 -1 -13 -7 56 29 13 62 45 28 32 42 17 52 -56 40 2 -66 13 119 -7 57 -16 44 108 -47 3 24 -70 -2 76 -3 18 -46 80 46 -18 14 36 -51 35 -23 -67 34 -16 93 107 71 50 -48 -35 4 100 -28 -26 3 68 23 -15 1 30 -28 4 -24 55 46 127 61 -5 1 52 -65 -36 120 -67 -8 -38 -59 -72 -22 55 18 -47 -13 -67 2 -91 92 3 -48 -6 69 10 -14 96 -50 -60 26 -33 -11 41 20 -124 -61 -105 15 49 -77 14 86 21 7 54 31 -65 -69 -13 -94 68 14 72 35 8 47 -42 37 -28 6 50 36 -3 11 42 14 -24 29 9 -100 21 60 -51 12 -19 -81 89 -86 -3 -88 -102 70 -3 -61 -98 13 16 4 -23 127 73 -14 55 4 -12 -68 9 27 -22 -125 52 53 54 -31 13 127 -42 99 91 95 97 25 3 -69 -72 29 -32 52 31 23 6 -11 -78 84 -10 16 23 -65 112 -34 -49 -37 23 -10 14 -63 98 -15 -35 -9 -59 100 80 23 68 -113 43 32 0 54 -43 43 30 -15 -117 76 3 29 -44 -18 67 -17 -32 41 -38 -18 -13 1 0 103 91 -55 67 -48 11 -64 19 -14 -36 10 -44 10 45 88 -3 55 59 -51 13 76 -6 36 11 -16 -19 22 -43 -54 55 23 -60 -1 -123 91 38 -17 -36 9 -57 -51 -120 46 -40 85 -116 40 -36 74 90 -24 -22 46 51 -5 6 -79 -35 48 -20 54 31 22 49 22 34 -15 70 21 89 123 31 -6 -117 -9 124 13 -39 -36 2 -26 -15 65 41 -81 46 59 -39 15 2 -27 37 -19 63 -25 -65 0 33 81 53 -81 -16 -3 13 -29 -58 -87 -6 -62 -42 -64 -17 -95 30 -51 56 30 110 20 2 -12 8 -25 -26 -95 -51 -30 -10 -30 -124 66 53 -1 -9 93 11 -13 -45 45 -58 -49 -101 -10 95 7 4 -87 -10 -48 29 -25 41 28 98 66 -34 -12 -7 86 24 -23 127 25 89 -47 -106 -105 126 45 32 108 -61 -41 -58 30 68 1 3 119 -70 -67 -54 -17 101 70 7 -33 89 57 32 117 70 60 113 68 -99 111 -128 52 -32 68 53 92 61 9 -29 14 26 -14 101 105 2 0 61 6 57 8 -61 -4 -37 66 71 14 70 -31 51 -80 60 -125 42 108 35 -115 120 4 -41 120 76 114 86 22 111 16 -8 73 50 -11 90 -53 -11 41 27 60 -9 -19 -69 63 69 53 32 34 -64 -18 -105 26 102 -46 -60 40 52 77 -56 20 -48 -91 -22 27 -38 -122 12 -37 77 -15 20 26 2 -70 22 17 14 9 -113 -40 19 15 11 42 32 -110 0 29 -56 -123 41 3 -120 -39 -19 20 30 21 14 4 8 16 119 36 -111 -5 -128 -104 57 -19 -48 -34 44 31 46 82 4 127 36 69 -1 99 117 48 -35 76 -42 -41 -83 53 8 7 14 -23 -38 39 38 35 -36 -14 -18 -54 -113 20 -41 -47 -49 -77 -49 -76 75 25 -53 17 61 -91 24 -9 -86 11 -54 -30 45 52 -9 88 -42 -51 -10 -8 100 -77 34 -61 -10 22 -31 19 -39 69 120 -36 7 -25 76 -17 45 65 23 74 16 -69 -43 54 24 -38 52 -25 50 75 38 -50 32 -83 52 17 -18 26 69 -18 103 68 47 -42 24 -4 126 -59 -49 43 -39 8 -65 66 40 42 92 74 53 -55 -18 77 -41 -104 12 44 -101 -92 13 -68 -48 20 -38 -39 73 -28 12 -41 123 127 -26 -126 -12 28 -24 59 55 -41 -125 6 85 82 5 -58 32 -39 -3 21 25 47 -86 51 1 31 52 -30 -104 55 55 0 -22 -36 40 62 -99 -2 -98 -77 14 -78 25 -115 7 -4 4 46 11 -19 -4 -5 -11 54 26 5 -32 66 72 -118 126 9 47 6 -43 37 -126 -28 127 63 36 51 -52 43 127 -122 106 83 1 -20 30 -29 -42 26 -37 80 82 -32 -71 -34 6 -61 -33 15 -33 15 -36 -18 -19 -24 16 19 2 12 -20 10 -37 40 -47 22 42 -48 -26 -59 43 -8 -55 -29 -21 2 -48 72 40 -72 -84 -78 52 1 -47 -36 27 -41 41 74 -13 42 25 -9 -1 -24 102 -4 -18 33 55 19 -31 -42 6 -35 -67 -45 -5 -13 -13 -77 66 3 -55 41 72 -52 67 -16 -13 -67 21 31 -123 39 28 -103 -38 12 43 126 -38 38 -56 -15 -30 -19 0 25 -76 -50 5 -62 0 -118 69 48 -67 4 69 23 -25 49 -72 -1 3 60 87 96 6 -27 112 -1 -6 -25 16 126 75 85 -30 15 52 -21 126 118 74 25 17 44 -64 7 -21 -36 1 15 -57 -126 13 58 60 -16 65 -7 51 15 80 119 -11 32 0 -96 -75 0 51 27 70 95 -58 58 -42 -31 38 -58 19 1 4 -109 89 -30 -40 -59 -71 26 -128 70 11 45 41 4 -22 53 61 3 96 -16 66 28 -5 -74 62 74 127 14 114 -16 -5 92 108 65 -53 73 6 -8 48 47 -20 58 120 -29 71 91 85 -124 -54 -39 -6 -108 -5 -55 -75 30 -52 -5 -35 -50 -7 115 -8 88 29 -11 -104 9 15 -73 -53 -16 -33 15 95 -6 94 -16 -6 61 -87 83 71 93 28 61 10 -85 -59 -127 32 32 127 124 123 53 -85 35 110 67 -86 -51 69 -75 -84 -38 0 8 -33 42 -44 35 32 -34 -17 7 21 -42 94 2 -50 15 -21 33 -9 -79 20 -9 -41 60 16 50 26 -5 -28 37 -52 33 -42 65 41 54 6 43 78 91 43 29 -31 9 -44 7 56 64 -4 -93 31 90 -110 31 1 44 -70 7 -24 58 5 39 20 15 -39 -31 28 -46 76 -27 -40 72 11 -15 -20 -69 7 85 38 -89 46 25 -66 43 -41 -48 24 -12 3 -37 20 -19 -12 -3 49 28 47 94 71 55 20 94 -8 2 119 -47 24 62 -92 90 -9 97 27 -75 3 37 -74 -29 90 -38 -16 1 127 69 12 7 -16 -33 -38 -23 -5 35 -7 42 -12 49 70 -11 -45 41 0 -25 -4 24 -16 -61 -45 -46 -5 -9 77 -28 15 44 -32 96 -13 -21 -38 -24 59 -52 -47 13 46 0 -101 -37 58 -6 -46 -90 20 38 -44 -1 -23 -17 32 81 -45 -10 89 -85 47 44 26 -53 -114 2 -1 -55 -31 -80 -64 15 34 -42 55 1 -114 67 85 -2 -3 -23 -53 -127 46 -36 -46 -121 28 -35 7 -35 -36 -108 -72 15 62 2 13 102 -73 20 43 -90 40 63 -52 47 -46 32 -51 111 119 -128 -23 -39 -21 -70 -47 -72 -64 -30 -101 -94 30 -2 -36 -27 25 1 -63 -78 -76 29 -50 70 -91 -35 71 -42 -7 0 74 -25 -53 -125 -51 14 -79 -126 69 8 21 96 34 14 -124 63 -8 -47 123 48 -126 -15 41 72 -58 -62 -17 -39 -107 17 22 35 -86 25 -24 -11 -4 -79 -45 3 0 12 34 42 -63 15 48 13 54 -95 93 -126 50 16 -104 -66 24 30 16 -9 -46 -8 -72 -34 -35 47 -8 34 38 -59 30 82 7 33 11 -54 -58 14 86 -126 -3 -70 -28 110 -9 -15 74 -31 -97 3 77 -40 64 -53 -16 -48 53 60 -18 9 57 -32 -10 -60 68 -27 -26 5 27 -128 18 -31 -64 -28 75 30 -5 -65 22 20 26 -21 57 -3 -83 69 -55 -54 -30 29 17 16 19 77 37 5 10 -83 -28 28 -82 107 13 44 17 40 31 -26 85 -4 69 -37 11 36 100 -4 25 -10 3 -33 -40 125 -18 42 -64 -46 -56 -96 -87 48 -66 -55 -32 -37 23 -44 48 7 9 -83 44 52 55 27 66 54 -53 -21 -21 16 17 10 13 -15 84 127 -90 75 -24 105 34 5 -4 -90 -48 -63 127 -14 -36 -27 -69 50 -34 82 -19 -106 -13 -15 -15 -67 -74 18 -56 -18 -10 -48 11 -53 50 -28 -45 -57 -50 -52 -76 33 -9 -5 43 -49 -11 -127 0 23 28 90 48 -4 15 -22 -47 -126 -42 -106 -5 -29 126 -46 -70 61 6 -2 67 -28 -93 -75 -91 47 -38 38 -106 -70 -82 -45 -93 -40 -127 -43 73 -57 -8 19 -127 1 -106 -3 0 73 30 102 -24 -1 -90 -74 -120 -100 127 -56 65 33 -7 -79 0 79 -19 -35 48 -40 34 -11 30 36 59 87 62 30 -51 43 -25 25 90 -25 45 -40 -42 34 75 -9 -7 -15 -61 35 -3 -40 75 55 9 57 2 -47 40 -20 -39 40 -11 78 0 -62 68 -8 -7 5 -60 -6 -6 6 32 105 -42 105 35 25 -63 -25 -26 -38 -5 40 94 58 -66 7 66 12 -120 -2 10 -19 58 -24 57 87 -9 9 3 -11 25 -20 78 -22 49 -12 -11 58 -102 -36 27 -34 13 2 21 -42 73 -57 -71 -11 -60 105 6 65 4 -29 7 72 17 32 25 -11 -128 120 36 -38 -15 -48 -10 -14 32 1 2 60 -95 11 68 -26 31 86 52 -80 127 12 -43 -38 -52 114 40 38 -36 -33 -38 -54 68 79 -31 -4 -36 -18 -126 25 -9 18 39 -53 -63 55 -62 -95 -113 -5 28 -32 -37 -100 -46 6 7 -25 -33 61 85 32 74 9 -16 4 43 -13 -18 1 6 52 4 -57 9 -69 -57 6 -13 122 -29 119 71 -89 -33 -64 -30 13 22 55 57 -95 -109 9 -121 -18 -14 -5 -42 -89 -36 60 -50 -40 -107 15 20 -41 7 27 44 49 36 -33 -78 -118 13 53 32 -128 127 32 -13 -10 48 4 -7 50 58 30 32 -25 -96 36 99 -123 34 -11 -61 -42 80 -95 53 53 39 121 -127 125 80 2 -115 -4 -64 -70 5 25 -128 -1 -48 -126 118 63 31 94 49 -51 -116 -70 -95 -124 127 -43 6 -126 87 -8 0 -30 -39 -28 37 -45 -40 -62 17 -40 7 -8 32 28 -25 -106 -12 5 55 36 -14 -27 -12 -75 62 -6 -105 -4 2 -25 -20 -31 3 -22 94 -72 30 -14 -10 48 -72 76 82 -26 -4 46 -128 22 40 5 23 27 -14 7 -15 -21 -48 -78 -17 -17 47 9 -41 55 26 7 -102 -18 32 12 -121 54 -17 18 89 -14 14 -44 14 66 115 38 -5 14 -43 -32 9 -24 35 -84 -60 -16 -19 85 9 86 -14 -60 -23 -30 66 -48 -57 6 -29 3 1 -32 7 43 -51 -38 60 27 -48 -87 -50 25 9 -19 9 -29 -97 81 -1 31 43 40 -28 39 31 112 71 -69 68 -38 -57 83 -37 18 -12 16 56 9 41 -2 -117 101 -17 -15 -41 41 -27 -51 76 -20 -85 -57 17 -36 20 37 34 48 88 -7 -70 7 -74 63 -29 82 -49 -34 -37 35 12 63 -37 -58 18 -34 4 -34 26 13 56 -61 62 -74 -85 -79 -18 68 -86 127 47 51 -51 32 35 49 -63 82 123 63 -76 -127 15 -121 7 22 -27 64 35 -81 -112 -77 60 125 24 -29 -3 -33 -20 25 -117 -75 -113 -35 127 97 105 20 99 40 14 -65 -34 70 21 -37 -35 91 64 90 33 110 -53 -18 -13 -2 -54 71 -10 -6 -67 40 39 76 88 -100 123 -75 -128 -6 13 17 -69 -100 -17 20 63 -28 -60 -59 -40 -23 30 78 -39 30 0 -11 66 43 -40 -51 11 7 -16 -19 -19 -8 11 -68 101 -40 36 54 -57 57 39 26 -71 -2 -11 -48 -53 21 -26 -21 -9 -45 -16 -83 18 -15 -21 -78 -45 40 54 86 -41 7 69 50 -37 -109 11 -46 60 -83 46 -6 -22 -86 -98 -42 48 16 -9 -25 -2 -23 -60 -34 24 68 -56 -10 -9 -30 -19 -10 -70 -53 -78 -126 -23 -31 48 -6 -104 -10 -128 -72 -64 28 78 15 49 25 -16 125 -58 -3 -17 -34 26 -60 49 -64 27 46 -10 32 -27 -40 -1 -21 42 23 -70 14 16 -40 29 0 -128 -14 33 127 0 52 -37 28 -54 29 -10 -56 75 14 -20 -2 35 -105 121 -7 42 -105 72 -3 70 -33 44 -32 127 75 -10 -36 -124 -34 -12 -24 -27 -107 -66 78 -84 -51 56 17 -22 -10 54 39 -56 -19 9 68 34 -35 -77 -20 -36 -2 -68 66 3 -27 -14 -19 -102 -42 38 33 -48 -86 -41 42 -27 -66 -28 -34 61 -12 -19 -35 -8 14 -15 -109 7 29 -100 18 -58 -1 -74 23 -81 -82 -77 -44 -83 -52 -112 -46 18 -68 -1 -67 -33 0 -121 -22 -6 99 61 -66 -73 -30 12 -64 22 -47 -55 -33 -5 22 -19 32 -96 -68 -47 -73 -9 0 -107 74 -35 -79 18 40 30 -63 13 -2 -53 -109 -6 -18 30 8 84 59 -3 37 34 -26 -4 -61 -78 15 -46 -69 -21 -29 -65 -19 16 -19 -81 -112 -36 -63 -68 -26 68 -16 -62 -60 -7 -13 12 -16 40 5 -15 -41 -13 76 42 11 -43 -27 45 -44 -42 29 -44 -60 -30 -41 -15 -39 43 32 26 25 -40 -7 -9 6 56 -14 -6 -60 -93 -40 -34 38 15 -17 -20 -4 0 60 -127 25 -47 3 10 36 32 30 28 42 -2 37 -49 18 43 15 25 -20 -25 12 -28 19 -26 19 43 66 -23 -33 64 -1 17 2 9 -30 -1 4 14 30 37 -17 27 -6 37 -13 -23 -24 -24 -21 35 -2 24 60 -37 -6 104 10 16 38 -73 -60 -26 49 36 41 -7 -28 107 -89 58 -16 -64 28 7 63 16 55 -14 28 -63 31 116 8 -45 -21 57 -5 24 12 8 -52 75 125 8 -21 -112 -14 -87 -61 21 17 47 31 -3 7 -45 -86 -67 -83 -23 -48 0 -27 -12 -53 7 -44 45 36 61 17 27 4 23 20 -7 77 -10 82 56 -4 1 45 19 29 -38 -6 75 12 50 -13 31 -94 -22 -76 33 -62 -46 63 0 -8 -48 -23 42 2 44 17 -27 -62 -22 58 106 76 -51 -83 -11 17 79 8 71 101 -6 14 -18 -46 -21 28 9 25 22 105 -14 -128 -8 -22 89 6 63 -38 40 101 -34 42 -44 124 -84 30 93 -24 80 18 27 -117 55 34 -33 27 -15 -29 -9 20 -89 -2 -42 5 -18 21 3 56 -46 14 73 -57 -21 0 -64 -87 -45 -76 -2 -3 60 117 -3 11 31 50 -123 45 114 -60 80 -23 -30 70 34 27 58 13 9 5 3 -9 -20 25 -44 -47 95 -17 -64 -56 -54 -31 41 -32 14 41 5 -5 -9 111 -26 -122 48 53 -74 36 35 0 -1 -50 -87 -49 7 -9 -16 -46 -63 80 -62 17 -44 25 -16 27 9 -85 -12 -50 -35 0 50 -31 -71 -1 38 -49 60 -56 28 73 -50 15 -36 8 8 30 31 -43 13 -10 37 -13 29 -31 -93 -2 47 73 83 9 16 43 -19 -62 -25 -77 0 -43 -83 7 -3 -35 72 -9 -74 15 -57 -116 -67 -23 20 -55 -48 10 31 -46 -45 -45 55 29 -22 21 43 13 -27 -56 10 -75 -10 -10 -23 -34 16 -2 -66 -7 -40 -5 14 -30 -51 -30 13 -25 -14 -16 -14 31 -41 20 54 -50 16 -54 13 -12 111 16 -9 0 -10 -28 16 13 58 -50 18 11 -23 43 68 -59 58 -102 34 7 -43 88 57 18 -50 -3 -7 -34 19 39 -7 -126 22 -18 -33 8 -16 40 7 -83 -11 116 -103 126 -71 29 27 -88 57 42 127 -110 -36 21 -38 -1 2 7 28 -35 -42 57 -10 70 51 71 67 117 -55 -5 74 -16 48 -17 -18 30 127 49 -55 -10 -10 -120 62 -7 106 45 -68 -92 110 19 89 122 87 -121 -2 -87 -55 27 -51 42 40 33 96 11 -63 -2 25 -22 124 -3 126 -14 57 -16 -49 118 89 39 66 64 -2 43 -27 -42 -87 18 11 -5 -4 96 90 99 109 99 -10 -75 -54 -37 -42 -72 -114 18 5 4 94 -26 68 -40 -86 37 95 37 -15 -117 -5 13 8 -58 -121 -124 65 9 7 10 43 -1 -61 -31 4 -13 5 6 7 67 -3 68 24 -33 -55 34 116 14 -37 -46 -22 -46 37 -4 -32 78 23 -51 -39 -9 25 -49 10 27 -25 24 -69 -41 127 -72 -11 -33 79 -32 84 -26 27 34 -23 -10 -29 -81 -31 18 9 5 -69 53 -43 -1 -107 0 58 25 -21 66 -6 -1 -23 -29 -81 127 34 -36 127 72 101 73 5 69 70 -33 1 32 -7 14 34 49 48 -2 -39 45 -65 -69 38 -47 -40 56 84 84 40 -73 77 -15 40 -36 75 -65 -78 46 57 45 104 -11 -56 -38 17 8 -65 77 -30 -102 -8 -31 -37 34 -13 -25 30 -11 52 21 -19 25 64 0 70 -15 -69 3 -25 -16 -115 43 -67 -39 -25 1 39 83 -21 26 -64 -10 -66 64 -61 -33 33 -60 -7 21 -2 33 -80 -7 -16 22 -127 -7 125 -44 -12 101 -8 -88 3 94 -44 48 89 -40 127 2 56 38 13 -3 19 65 -16 -127 -32 -85 -124 -21 36 13 39 34 -52 -70 101 29 -66 -128 -94 -13 -87 10 32 73 -77 96 -1 -29 33 2 7 -16 -104 32 2 55 22 -20 122 34 64 77 -67 19 31 6 101 1 119 113 5 -59 50 23 -37 -39 16 82 39 -40 -33 31 -6 68 113 8 -18 17 7 79 -122 -18 25 -18 27 -106 13 67 -52 -52 -25 -65 16 -37 41 18 3 -86 14 68 25 49 20 8 -67 -26 33 -65 -34 38 -4 -72 -35 29 5 -45 37 -21 25 -5 -76 -10 -35 58 -49 23 10 -31 -83 66 -35 38 -50 0 28 -117 -20 4 -66 1 20 -37 43 -32 -25 -11 -40 -7 -81 24 -32 -23 -102 10 -42 77 31 -6 25 -77 -9 27 32 -59 -91 51 -50 -63 -7 37 -55 21 78 -40 -17 83 -13 -36 -47 -56 66 -93 -4 123 31 51 14 -3 -29 -66 17 -94 80 -81 -24 -18 93 -77 -46 -12 90 45 108 -18 10 16 74 -40 -24 -1 46 -38 -3 -51 34 -10 -20 -57 22 34 112 37 -65 8 55 -83 -37 34 -36 -56 -28 -63 -9 -13 -34 -59 -10 8 1 26 11 -44 -51 -5 -56 -22 55 -9 1 4 115 -48 9 -6 -39 56 46 26 79 -34 38 -15 -36 53 -11 -45 -13 -15 -35 -43 55 -2 9 -4 -106 -13 -38 64 -125 6 51 -108 20 6 49 -20 18 17 37 -126 -27 3 53 -6 -10 58 11 35 -22 -26 -50 80 -36 -39 -2 -110 22 -67 73 -23 102 39 -46 -94 -53 -110 -23 -77 -92 2 -21 -69 -40 -28 20 -42 22 -11 38 -125 -78 -9 35 55 40 -59 -110 40 -12 -57 -29 32 96 -114 122 -16 91 41 -72 -37 25 -12 31 36 -11 -43 9 -75 15 61 56 -30 -13 -17 13 79 36 -29 -60 -7 46 -25 59 -28 -80 77 40 -127 39 -14 30 -20 -18 61 105 -62 12 15 30 111 46 30 -1 -7 29 -30 0 38 -43 -6 -110 -10 -24 -52 -15 2 -4 -8 -18 -31 18 -6 10 12 34 -4 -15 -22 33 -118 -27 -8 70 39 0 -92 7 52 38 -1 14 57 23 47 -19 9 -76 8 39 -39 -3 -2 -35 -87 52 44 20 -8 -29 10 -26 -81 4 15 -37 -44 85 52 3 51 44 21 -23 24 15 -33 124 -7 49 85 5 -42 8 75 80 43 28 67 39 1 -35 18 -10 71 23 -6 19 6 -25 32 -29 2 29 62 20 -11 47 33 -46 -63 70 11 17 -29 24 -11 -65 34 37 71 17 43 41 -6 34 -62 38 63 -41 59 35 70 29 -70 41 6 55 -19 20 -1 92 -4 72 58 -48 -14 -111 25 -87 37 -10 18 -31 -29 -24 35 -39 46 -27 36 45 59 24 80 96 -20 125 22 108 -53 8 -29 87 0 -74 39 28 75 32 -7 83 -35 127 23 37 -31 -63 -37 8 11 106 118 47 56 106 60 -126 -8 48 88 74 47 78 53 4 -50 -9 117 94 124 115 125 12 36 44 16 37 37 28 -103 -51 34 124 127 14 62 84 34 40 -27 -36 90 20 71 32 -47 -56 -43 33 -17 25 -44 52 1 127 78 -3 44 111 126 61 74 -29 48 -111 7 -63 -8 90 -1 -29 41 69 98 109 58 72 -87 -106 -57 51 -41 -43 -3 82 -25 -6 23 62 38 -85 -21 34 118 -64 -58 -11 8 45 72 -73 -14 -52 -36 106 36 -61 -42 -113 65 -23 79 123 75 -1 32 101 58 -17 -23 -65 12 12 41 127 -50 -17 -47 -66 58 -11 -20 13 43 97 106 -50 4 -72 31 63 77 -52 -90 42 47 -62 -54 90 -56 -3 75 -72 23 -39 -12 -55 -41 -56 -81 2 -25 27 -17 -90 56 18 54 42 59 9 -15 98 -7 5 -37 -90 20 -89 3 50 -37 35 -33 -72 -41 -66 42 -25 74 1 -10 -29 -124 35 -28 105 43 -81 -39 107 -118 -63 -7 18 4 55 -26 -69 -53 -67 124 -29 -16 -85 -36 72 -67 92 13 29 -46 -52 6 100 -32 42 93 -21 -88 26 -5 3 -35 -4 32 -23 -47 -17 3 -113 -18 -39 -5 -47 -62 69 -113 24 60 -16 20 50 34 31 -5 87 26 -7 -57 0 10 29 58 38 -75 -61 111 81 -50 114 -2 67 -125 24 20 24 46 43 -64 -44 50 9 -28 -97 79 -66 44 15 42 -88 -1 33 68 69 -55 7 -11 19 -52 91 -70 -80 51 16 29 14 28 -22 53 6 125 15 29 -16 3 -27 31 -32 12 -16 5 -11 65 3 77 -10 -39 41 28 -29 11 12 -23 20 -47 20 -43 -78 27 5 51 -20 -127 85 9 -40 34 24 -125 53 12 106 60 86 -5 -82 15 -117 -62 24 21 -63 -43 -6 74 -18 -18 4 122 -57 -49 -45 35 -76 47 -88 -4 13 -54 -124 -37 19 -51 37 -55 -2 -22 -5 -5 -58 65 -20 -51 -30 -20 -1 24 -30 5 -22 38 2 -69 26 -13 83 12 98 24 36 -8 20 33 -9 23 60 -43 50 -4 -39 -13 43 19 -52 24 81 -64 40 -126 45 94 21 -11 -89 -5 -7 25 76 39 -81 -112 4 -16 -69 -4 -8 -1 -66 -27 53 26 85 -32 -8 8 56 -72 -64 19 -125 1 -3 -30 -47 -60 -30 13 -8 40 -46 11 26 -57 -55 11 -32 24 -32 21 -14 -65 9 -74 0 9 -29 -48 -26 -26 -45 46 6 0 57 -18 50 -19 -18 32 46 -99 -89 37 19 -1 12 45 16 -9 -62 17 4 -37 -52 3 15 -13 -33 -47 -63 14 -69 58 -8 5 -41 127 -4 3 -39 -18 -8 4 32 -64 72 -30 -117 38 92 -42 -7 24 -28 8 16 9 120 21 -83 84 -11 18 -39 13 -38 -23 -76 46 22 41 16 74 -97 -64 52 -22 -76 4 -36 42 41 0 56 71 0 20 25 9 -29 -32 -33 -8 61 76 62 -37 80 -4 -18 -26 34 12 15 0 42 -53 23 -78 18 -59 13 13 22 -17 -85 20 48 -59 97 51 -53 10 -12 99 -44 30 -7 38 -14 -9 -58 -51 -31 68 18 -3 15 -14 53 -18 -59 3 -9 83 -9 30 -7 63 -26 -41 68 -14 74 4 80 69 -8 2 -14 114 -11 -28 -18 -4 -42 40 -16 -47 0 34 37 -6 -4 4 -16 14 46 11 6 -17 0 6 11 -1 -93 -15 20 -14 -7 59 66 -12 51 13 19 -66 42 -27 62 22 54 31 -4 -3 10 6 44 28 19 22 22 -15 1 62 -11 24 -3 0 -18 -11 2 -36 -35 36 -20 66 -26 14 47 44 -17 10 69 19 17 18 6 7 31 -34 33 -34 33 -7 -54 35 -2 -2 -43 -52 -11 -10 12 -31 -1 21 47 -20 35 -20 -25 9 26 15 35 8 65 -27 5 -18 99 1 -8 3 -26 29 43 106 34 72 21 -3 -25 45 43 19 63 50 58 -2 36 -35 9 -127 71 -121 -59 13 -43 90 26 -9 76 -53 -16 36 14 1 -38 -39 57 -19 -38 37 -39 7 20 -2 6 34 44 0 7 -28 40 5 -2 -1 -31 6 -50 -8 -49 -53 -33 -26 -19 -57 -55 -17 -102 36 -42 -26 -22 35 -21 29 35 -29 13 42 -15 49 25 -60 -74 34 39 45 -3 7 24 2 76 26 93 -21 60 -114 -31 -20 80 123 108 47 37 -91 -73 114 28 38 97 -44 -92 -83 124 -8 -66 -27 53 41 14 26 106 -33 13 -34 -16 8 15 -55 12 23 90 -25 72 62 2 67 -26 90 58 127 52 24 97 15 5 -10 -42 -82 -35 -15 73 51 -111 75 -124 -80 65 -11 116 33 -69 -112 -73 -127 -4 6 127 -61 126 121 -98 127 25 75 2 -29 -113 -30 13 0 -2 -81 127 14 51 37 56 -21 -28 -11 79 45 -23 46 -68 82 -110 2 -18 -42 -34 87 77 -22 -66 78 29 5 14 24 -59 6 11 11 -29 -26 12 -28 -20 -24 -26 -24 34 -12 -34 -38 3 9 25 46 -21 -33 13 4 -45 -104 -86 50 -14 6 33 -53 -12 78 61 -10 15 -39 2 -37 -69 55 -55 -28 -38 -50 -113 -41 -19 32 -64 36 -23 -31 64 55 -21 59 -41 -85 97 -95 38 -18 51 23 -16 21 -39 0 38 4 -55 51 33 -8 107 42 80 49 -19 57 -5 13 46 6 -16 27 1 -15 -10 3 54 -11 -93 28 -19 -22 21 -25 7 15 -50 -31 -45 7 94 11 55 -65 -10 -67 -5 40 15 -14 2 20 -28 29 51 -11 59 23 72 17 -38 -1 60 80 -17 28 14 21 -22 59 -18 -1 42 -7 2 73 4 -51 19 -10 -30 15 -32 -35 81 -73 20 37 34 -33 74 -3 2 -99 -98 42 87 23 -65 45 -74 7 -19 -54 22 -21 53 5 -91 28 -65 102 -8 -4 -73 11 -15 -62 -69 69 -46 63 16 -56 -31 -1 -8 25 97 74 -83 3 -37 -113 -72 -120 -29 -35 -102 -68 -28 25 -14 18 -9 -52 -108 75 86 20 -15 -64 -20 -8 -30 -27 -58 -3 14 -22 77 35 92 -9 45 45 -56 51 22 27 48 33 -6 -14 -31 -52 -126 -25 -7 -83 40 22 23 39 21 31 4 -37 10 18 43 6 -50 -10 14 6 18 -13 85 -16 -2 18 41 10 26 -56 85 32 -57 -23 19 8 26 -59 -17 13 30 75 -71 11 -29 -59 1 16 -42 -14 9 21 -3 23 -11 -19 -21 16 -27 -9 -21 -46 -34 -14 -19 -6 -4 5 -41 25 39 49 -33 25 -17 -22 -23 -47 23 -14 22 26 32 70 -17 30 -3 92 28 -43 11 63 8 -31 -53 -8 -53 6 68 13 61 49 4 69 3 21 15 34 44 -121 -37 -2 36 87 56 48 58 -44 39 91 73 15 46 86 52 26 -10 37 39 -36 -128 -103 49 49 -18 14 49 -4 21 76 -96 94 -25 -68 34 -77 -125 104 -79 14 4 41 35 -127 21 32 92 4 -28 -4 -26 -33 20 -21 -65 15 -93 -50 78 17 46 46 6 24 4 -66 -4 -15 -101 65 -61 -73 -108 16 114 14 -39 65 -13 9 -25 50 -28 -104 13 -24 66 10 106 -43 18 -57 -5 -12 77 60 92 31 44 31 -8 -26 8 -127 22 50 -23 -20 89 99 53 -1 46 -70 -6 56 -24 55 79 69 84 11 -6 24 93 76 22 23 33 -17 -13 -25 30 -113 95 121 -29 65 -68 -4 88 69 55 55 -20 122 33 -54 47 -1 -7 -127 -30 56 27 -69 -18 102 120 34 -30 34 20 125 20 -75 21 77 60 -27 -41 -16 25 26 27 10 124 68 -7 52 -53 -3 85 25 12 70 -99 -117 -7 -9 127 -64 14 4 84 120 -17 -26 -6 -25 -95 -34 45 -54 -116 -88 1 -10 3 8 -28 -30 -21 -12 -45 18 -45 -43 -6 4 41 -10 109 32 7 -20 -117 -49 7 -47 13 46 -96 53 -69 0 -76 45 73 44 -36 18 -50 -9 47 -20 16 -18 -28 -5 -10 -15 -97 42 -47 47 27 -17 30 36 -64 47 76 -13 9 -126 -9 85 11 70 1 104 9 67 -15 34 64 -12 32 -50 30 -23 70 -36 -29 50 -128 -49 29 -70 -31 28 0 38 9 28 -33 -123 -68 -8 -43 -124 -49 -94 -35 -2 43 -98 -8 28 37 -57 15 -76 -114 48 -94 -19 64 77 23 117 -95 75 -59 -44 21 -54 98 13 -59 -22 51 -91 -8 48 -6 -46 31 -3 -12 -52 105 38 -88 24 -55 45 -72 -37 5 61 -70 -95 -31 85 39 -20 1 -45 75 -14 -50 -26 51 -46 110 16 71 -41 4 -4 -11 -42 -31 17 -43 -24 -24 24 6 95 89 28 53 -127 49 -8 -2 125 26 -13 8 -105 44 59 38 -35 -7 98 -13 17 79 38 -59 42 38 16 -33 59 66 -15 -65 38 -24 -123 -36 30 65 -57 81 29 123 124 44 7 0 96 -70 51 49 91 92 -34 -42 -1 70 82 69 -22 45 58 73 44 -114 29 85 73 108 16 66 -44 70 -54 3 -42 45 -50 66 60 -7 27 57 -102 10 13 88 100 -56 -1 -106 -67 23 49 53 -59 20 69 110 -4 -20 106 -29 21 -23 1 -13 1 -22 -5 -31 -55 -60 -128 -63 49 -49 -108 -28 -11 61 50 -24 2 -32 -105 -14 5 23 45 1 -43 -22 -57 43 -7 -43 -118 29 22 35 11 -19 -14 -76 8 -45 47 15 -66 51 -56 -21 -44 79 -10 -118 -14 16 -92 70 -6 5 17 89 63 26 79 -84 0 -93 19 7 -102 -76 2 27 -21 61 24 45 72 100 42 8 -61 -40 -35 -113 -32 46 -20 -34 57 -71 57 -1 0 -51 -121 -64 -21 -74 26 8 25 -84 -32 -50 -16 3 18 31 -110 2 57 25 16 25 31 14 -67 -91 9 -9 -6 3 64 -81 69 -69 79 34 -42 -2 -111 -56 8 -14 77 17 -8 -87 -2 31 2 -51 98 112 -11 48 -15 13 -7 -5 2 -72 -73 -78 1 -29 22 1 -89 0 -39 49 68 62 -25 -24 30 60 45 45 36 53 -89 54 -18 38 -11 -26 11 12 62 -127 -106 6 -35 -81 13 12 57 -49 24 -2 12 12 -31 -45 54 -15 -41 33 -127 98 58 49 35 -63 -124 36 -47 -63 -25 -127 -22 -14 22 15 -116 -22 37 -37 58 45 -42 34 124 -62 2 3 20 -27 -26 -8 13 -44 -114 58 -24 -43 56 -125 -128 55 34 -25 -34 14 -21 33 -126 -15 6 42 5 9 -69 -10 -85 15 77 -38 -24 58 -108 -46 5 5 17 -73 5 -39 45 0 36 -72 -22 -68 -33 -50 11 -107 -99 62 9 21 -5 -36 15 21 -6 99 -49 -15 15 2 20 127 -44 -55 -47 33 -73 4 11 -6 -28 27 -26 58 -50 44 -24 -42 -64 -5 -10 90 73 -94 7 -37 26 -36 54 -26 -3 32 -13 -16 -55 -13 -39 -23 37 -40 15 -25 -8 -66 10 38 67 -3 24 38 81 1 -57 33 -44 83 -16 65 40 47 29 110 69 51 4 45 12 -26 -24 24 -57 34 22 -54 10 4 -11 10 76 -26 53 45 10 123 0 -31 114 25 -4 77 56 -22 14 -38 -10 -12 -37 92 125 -118 94 -39 79 -11 -32 -56 -9 -37 -2 18 31 41 -30 49 89 36 1 74 -51 6 24 18 30 -57 58 -10 -13 35 -60 -45 43 60 20 -12 37 -14 -83 123 59 -57 -26 101 -43 69 12 -37 10 -15 7 127 27 110 2 -23 -41 -63 -30 -128 -38 -34 -38 3 -25 -39 96 -127 83 -72 97 -91 78 -49 -19 45 -128 51 70 -22 50 -10 33 73 -29 -18 -38 -14 -57 28 -10 19 65 43 64 -8 -37 1 -92 96 -19 69 -38 126 93 -2 47 -99 63 71 25 -29 6 -22 -28 61 -12 13 -47 9 -4 -8 -71 -10 2 -17 65 32 -48 -28 37 47 -8 -81 96 -125 18 44 64 -10 24 -20 2 -12 32 26 38 -12 83 64 -26 42 21 7 -61 106 15 -45 51 -35 80 -3 19 15 -9 -40 -10 24 19 23 -39 9 -7 53 -56 -12 -56 47 -8 -47 -59 -79 30 -10 -22 -61 25 8 -3 -9 -24 18 27 -8 9 -9 24 38 25 5 -12 2 26 12 27 -45 36 33 57 25 -72 -16 -40 6 28 44 -56 10 59 -60 19 -30 81 -8 -37 1 -3 -58 -1 -55 4 -23 65 28 0 -22 -44 76 27 54 68 -125 10 -22 2 10 -16 -1 7 -34 1 -10 -60 -18 79 67 -43 -18 -12 -51 1 20 25 -91 -48 -9 -26 -44 -77 64 -28 -17 -19 -63 -29 40 -35 -6 -29 79 -4 -16 -22 61 -37 -57 24 -29 -59 -3 56 56 -121 -7 -34 127 28 11 -23 18 -46 -66 127 -79 -44 -10 77 -37 73 -39 51 -16 -64 -38 -77 46 16 -69 -23 48 26 -49 50 -2 21 50 127 24 -3 127 36 18 3 -47 22 -47 2 -70 1 -103 28 -73 57 7 -22 28 26 4 0 -17 61 -69 -14 39 -121 29 -52 -1 -124 -41 -43 -2 -9 -25 62 -56 -17 7 127 -21 35 28 -47 75 -30 107 -66 11 -1 -25 91 -89 119 -25 100 47 -69 6 23 7 13 -71 -30 -68 -101 -57 74 -55 32 -100 29 40 59 28 -120 -13 -45 -23 -69 49 77 -45 -76 -19 126 86 91 56 -20 5 72 -63 30 10 44 109 -12 -35 41 -17 -47 -101 -10 124 -24 18 -21 -99 -31 -43 10 125 91 44 7 -83 -47 16 -10 -42 -20 33 50 -60 -42 -126 121 -53 -83 -56 -9 -85 -3 16 -4 25 61 -88 80 58 -17 27 -3 -99 -37 -25 -70 -11 59 3 -90 87 42 36 2 -50 2 55 -4 59 -43 -15 120 -4 -32 46 8 21 -31 -12 -2 82 2 -65 -55 -46 127 32 -28 27 92 -123 53 70 70 -54 -81 -121 19 -14 36 44 -67 -35 15 53 24 42 10 -9 -41 -63 52 -22 23 -88 7 2 40 111 -38 68 -22 55 72 49 -83 -78 111 -20 40 -69 -101 -14 -6 -53 -43 -89 -16 -16 98 -55 43 -37 2 13 -29 -24 -28 -8 -63 -20 -60 30 -41 20 -28 30 -47 -19 -128 12 -106 -29 1 -8 11 -40 -23 -10 -3 42 -5 -46 -7 69 -10 107 -75 13 58 110 -78 -34 21 33 -75 -47 16 53 0 23 106 -55 -17 -77 -7 -63 -65 28 -11 -59 4 7 67 -34 36 97 14 52 -58 -3 55 -16 -39 -125 3 -21 -26 32 47 0 50 -128 28 -14 75 -96 -10 2 -53 54 -38 51 -109 -62 72 20 -17 23 -37 58 12 -60 15 -2 72 40 52 69 96 -41 68 -41 -114 -37 42 29 64 -37 32 -18 37 68 -49 58 38 -87 91 44 34 -55 27 -59 11 -20 42 51 65 -12 112 54 83 32 60 53 -25 36 -47 59 -12 50 52 -26 11 52 89 42 66 9 14 98 -17 20 -17 -2 5 12 122 50 -32 67 -30 -5 -15 67 50 9 13 33 96 127 122 -6 19 -40 19 84 62 42 81 -29 63 -34 -96 53 59 -4 -13 42 -24 -4 47 -27 -21 32 11 -11 -28 -24 -7 0 -23 -67 17 41 -7 -6 -25 52 -14 -7 4 -7 -31 -56 9 -40 63 -27 44 17 -39 16 25 -19 -46 -14 5 44 62 58 -12 -37 18 -2 26 4 6 52 31 -27 24 -31 11 8 0 99 46 0 -22 -4 22 26 -11 6 49 59 17 0 62 -44 -10 5 -14 50 9 47 -25 40 0 -23 64 2 -9 17 10 -31 -47 -36 -63 32 -11 -19 5 8 0 -72 45 65 -52 -45 -43 -33 -60 -83 41 -17 9 99 7 -30 -27 74 111 -39 25 44 -35 2 10 -2 -18 22 97 17 -25 19 -53 60 9 79 58 18 47 58 -47 -23 -29 8 5 -29 55 38 63 3 -62 5 27 -49 4 35 -34 18 -14 2 11 -127 21 99 52 -44 -103 2 -85 -67 16 0 -37 -49 -21 54 -61 -53 92 -10 -38 22 19 4 72 64 -43 50 -106 -62 -74 35 105 -11 23 8 -87 -32 -114 -85 -45 -46 12 116 -122 38 -72 22 -60 -37 7 25 -70 -128 -26 47 -128 14 -3 -102 -121 -1 -113 -26 27 -97 -67 -36 -25 -76 -9 40 -25 9 -57 -65 -127 -65 -123 59 -115 16 18 -44 90 21 25 4 -85 -128 17 -30 -68 -118 -16 -71 -105 127 -43 18 93 52 -72 -61 35 -4 74 -24 35 -54 3 -123 44 -11 -53 105 1 6 -26 -78 -17 -95 91 -56 -13 -65 -54 -70 -9 56 37 89 -41 -57 1 39 -10 36 28 46 57 17 -128 4 -87 -11 45 39 -52 57 -8 8 119 15 47 11 20 29 -49 -81 30 -88 58 3 38 -29 -8 -55 -24 4 20 -27 -2 0 37 -35 25 -23 -47 26 -14 32 24 23 56 29 37 -2 80 -11 44 32 -104 -52 -20 64 -34 123 -98 69 6 2 4 16 -16 -3 -33 42 92 18 -63 14 36 -75 34 31 21 42 -67 -5 -32 80 39 -15 16 22 127 -13 77 125 -64 83 -6 42 -30 34 -17 -72 93 -15 87 10 -10 -3 14 21 47 -1 33 2 -11 91 -44 30 58 32 20 76 -29 -47 21 10 21 54 79 40 -31 -58 -66 35 4 -11 125 -30 -45 -114 124 -30 -16 35 -7 24 -19 73 1 -57 72 31 -53 62 59 -32 -56 -110 -43 -27 36 68 3 -36 27 -8 -53 55 33 -25 -83 50 51 -32 -66 2 -25 65 14 35 -29 20 -19 -36 -124 2 -37 -28 44 38 -127 37 79 126 50 -2 92 70 17 -93 -17 -24 70 15 44 41 -70 -119 -13 83 -128 97 126 1 -24 -116 -122 -92 -24 46 27 50 88 39 127 36 124 -24 122 42 105 68 108 -33 69 23 -11 -89 -124 55 6 48 -47 64 -15 28 26 -3 19 -43 105 -74 19 -28 -66 123 -93 -65 -119 15 -60 13 -27 -1 -43 121 41 -127 39 -110 -124 105 -101 -76 -24 8 -10 43 3 -126 12 20 42 -72 -23 -6 -29 -38 21 57 -22 -98 -114 1 66 32 -45 38 45 63 73 8 -36 -24 31 -73 -4 110 -22 -10 -77 36 -30 -19 13 -82 -67 55 90 55 -18 -73 24 -47 2 -6 -34 15 -2 -59 -13 -7 -125 30 -76 3 29 124 -30 6 91 -49 24 -65 59 57 30 -115 19 -90 -3 116 -50 -37 125 81 26 -67 92 -15 2 76 6 -10 -17 19 -55 -66 32 -72 -31 -28 -76 61 28 90 -86 -12 32 -60 -11 -100 -30 -56 -72 -50 28 26 -9 -13 -128 14 -72 52 -41 7 22 -28 42 -112 55 69 33 -41 18 56 34 120 91 6 -39 124 -29 -42 7 46 43 -17 11 66 36 -22 22 -48 17 -61 -5 -25 56 6 -68 -40 48 -27 -120 54 30 -47 -126 62 109 -15 -36 87 -4 31 -49 70 -27 -41 -80 54 65 11 21 -88 -22 123 44 -63 -127 28 37 -30 22 41 -80 11 -25 -66 2 25 -45 -12 -85 -12 -70 62 -54 -28 -31 2 37 -67 -58 -77 -39 -74 -49 -30 8 -58 -40 6 -79 -54 -77 -19 51 -26 -25 -40 -126 -25 -81 -68 31 5 15 -23 -72 -29 -15 -112 -38 4 -76 -87 -70 -4 -127 -95 9 -57 25 -16 -74 78 -22 -31 17 4 8 95 -68 -60 14 25 17 -61 17 -44 43 -3 -109 -57 -28 29 -1 -10 45 0 -80 -44 -24 -126 -17 -26 -101 -8 10 31 -18 -50 -7 -10 55 -2 1 -20 23 5 -32 -45 -34 -2 6 -22 43 65 -4 -27 33 15 -3 23 -37 31 0 11 2 -1 -15 -37 17 17 -19 -3 -60 -40 -19 1 16 -7 2 -50 64 -23 2 5 -8 -86 -38 -22 -12 -5 19 -58 2 -7 -7 70 18 -41 -18 -6 -27 49 26 -39 -87 -15 -23 -7 -10 -46 -23 -40 -16 -4 3 -7 16 -11 -16 43 70 26 25 -4 -28 -23 39 -51 47 -10 -11 -25 -35 -49 2 10 -44 51 -35 -52 5 -8 33 -86 -42 36 -31 48 50 -4 20 -52 -22 -24 -52 -126 15 -2 -38 -27 28 -32 -39 22 1 -31 -64 -73 -3 13 48 28 -10 -21 -16 -1 -27 -14 -47 -79 -13 -45 32 -61 80 25 14 10 21 46 9 37 125 0 44 15 -40 22 4 -58 -1 18 25 -22 -22 18 15 1 10 35 5 -17 -20 -43 21 7 4 10 -92 51 -31 62 -47 1 -26 -20 32 -6 -19 -3 -64 74 29 -126 53 -20 -64 64 -10 1 95 28 -5 115 13 -13 -39 -28 -45 87 -30 33 -24 75 102 -11 -14 -19 -12 49 126 -15 60 -116 -28 62 19 40 -40 -3 49 -19 -55 -4 79 -46 -36 55 -53 -92 34 16 55 23 -83 33 17 79 29 -70 -13 -62 -52 20 -67 -4 2 -2 40 64 -18 106 -76 -61 -80 -114 22 25 83 -84 -74 10 -89 -61 -94 126 76 66 78 28 -12 -33 120 102 -120 -48 38 57 -71 66 -26 -60 47 9 1 -5 -28 52 5 -70 42 -9 -9 -17 -50 -7 -10 32 15 -97 39 7 12 49 68 -14 -38 -36 -19 53 31 -63 22 -1 -7 -64 -6 20 -33 -16 42 45 62 -25 10 47 -21 25 -36 -68 44 -38 19 75 41 38 -23 24 -11 86 81 36 -73 22 -2 -60 -55 -6 9 -34 -7 -9 -57 35 -11 63 27 89 -61 67 56 87 1 -18 107 38 102 45 0 45 8 27 -19 -50 58 47 -17 36 46 -45 -18 -42 74 -46 -74 60 -52 -33 -57 -21 26 50 -46 8 -30 10 23 -13 -42 -114 8 51 -6 3 50 3 15 -44 -113 46 25 9 26 -32 31 47 2 3 -41 81 -9 26 25 -39 35 -8 -15 4 -18 -11 -16 -13 -43 -3 55 7 28 -44 -56 2 -14 26 -60 -5 -31 -34 86 -81 86 9 -27 35 24 -40 19 -2 34 -10 -58 -54 25 30 -80 12 -74 11 32 -40 91 32 -63 88 9 117 11 22 45 -9 -81 68 -26 1 15 -11 127 10 61 65 -39 31 -2 -71 28 68 -6 -10 -45 -24 -47 127 117 -94 10 -39 67 52 23 79 -12 126 72 50 35 33 39 33 122 127 -7 -125 59 4 -125 35 49 21 30 -44 -37 70 -87 -35 -84 18 33 71 115 -64 122 -11 17 60 -19 94 -6 -88 -21 -53 -52 61 -40 -36 79 97 33 30 31 -111 -10 48 -128 -126 -2 -26 41 68 29 -12 9 68 -5 -63 86 28 -22 -35 127 -27 -17 -28 5 15 92 -50 52 48 -39 12 -52 -63 -7 16 -52 -15 54 100 -68 -59 59 18 98 -5 -81 -26 -16 -14 47 -71 45 86 34 -52 53 -34 -23 58 -23 112 -38 5 1 -68 -78 -56 -17 41 -26 -16 -50 -21 -50 72 33 47 -32 -61 80 -8 30 19 -67 -41 -86 -78 -65 -118 39 69 -36 63 -83 31 38 -54 -14 -72 -118 -46 -31 -10 85 28 -75 23 12 -9 113 -45 -37 -66 -10 23 -3 -64 52 -32 -23 56 -77 51 -38 -24 27 -26 -58 40 -56 -54 16 3 17 -110 -106 -28 50 -66 89 2 127 -41 -10 65 15 -8 -87 -106 54 13 -35 -19 0 -18 -15 -21 25 5 -56 59 -15 -50 16 -24 24 7 -59 115 59 -61 -64 -72 18 16 -1 98 -4 122 -38 -63 30 -71 15 68 -83 122 -27 21 93 -28 -128 -8 16 -16 14 30 -24 -77 -45 -122 -40 -40 35 -70 9 80 -52 14 120 97 -23 78 -61 8 -42 -13 1 20 38 -56 -8 36 23 -94 -16 43 -104 95 14 2 7 55 69 -15 84 -5 53 45 47 -14 -57 50 -63 -70 -51 59 -12 -28 124 42 8 -66 60 -28 -91 25 -5 45 -50 -28 6 -98 -48 -30 -114 43 -20 17 -124 -75 48 16 44 -74 -59 28 89 16 -5 -100 83 -18 0 106 6 20 32 87 6 -47 78 42 -98 -50 2 -12 9 -27 64 -96 82 68 -35 58 30 99 -50 -80 23 42 -47 20 28 -41 76 -6 25 53 -56 67 -36 44 13 -38 -38 -11 19 -30 -64 4 97 -37 79 -16 0 -45 0 -11 -104 126 -14 26 -127 25 -88 -32 39 21 9 16 -42 71 69 65 34 -10 44 1 63 -26 -7 4 -75 37 -36 86 -3 -1 31 -32 -12 -33 -93 -45 23 10 -5 1 -22 -126 -19 -22 15 16 -20 -25 -54 -20 -1 84 -16 127 -18 39 -10 24 45 25 2 52 72 53 -23 10 -20 1 113 46 26 -8 8 -21 40 -75 -34 -56 34 -22 84 22 -50 63 30 -58 -67 11 -44 14 -29 58 -30 -68 6 8 76 49 -29 0 11 19 -22 -22 31 -22 -15 -46 83 -13 -6 70 -3 103 19 48 36 -69 37 124 -4 2 56 -61 27 -71 -11 -18 -1 57 -23 -82 -14 -40 -36 26 11 -118 -66 63 12 55 -9 28 23 28 -46 83 26 -36 72 -67 -17 114 -37 53 -53 -2 -27 42 62 -31 -20 3 4 44 59 84 67 23 -4 77 -58 13 93 90 60 40 2 -24 -13 47 119 20 -51 2 -38 13 -27 96 22 -15 19 22 90 -8 67 -14 64 -13 107 97 95 38 65 -13 45 64 71 31 -128 21 -26 -36 12 22 -26 -19 22 -6 36 54 13 -52 55 10 12 -7 100 -57 -8 102 25 37 -47 119 97 54 29 62 74 -9 103 30 38 42 -125 -60 39 -27 21 -28 -31 -45 73 123 4 -57 -52 9 0 -59 29 -85 48 66 2 17 -5 59 -29 51 29 -35 50 -18 -11 40 9 -41 49 -8 12 -56 -13 11 75 -28 8 -51 -75 -43 -14 -48 -9 -1 -39 40 -28 22 -9 118 37 -68 -82 -77 48 -9 20 127 29 -27 12 76 -79 -48 -8 -24 -36 54 -20 -4 -11 58 12 -46 20 22 -25 59 -8 5 77 18 -90 -8 3 42 -51 20 15 -39 57 -79 -86 -46 -82 -29 13 3 -4 -23 -90 -69 -15 -54 -70 73 117 55 -9 29 -55 -26 82 30 3 56 -61 -124 -61 -3 -116 -6 49 -51 -21 -16 -35 13 -37 0 36 -39 -61 -57 24 -48 -35 4 47 -15 -115 116 14 -2 -54 -25 -35 -2 40 3 19 -51 -36 -63 20 -124 -47 -71 116 76 31 7 10 23 -55 -22 -48 67 -13 52 -45 104 9 11 35 18 8 75 95 2 -10 14 17 33 -64 -42 93 -67 39 -54 -15 101 -14 -118 44 91 -15 9 54 6 -128 81 -104 74 -3 -47 -19 -2 -27 -17 40 -26 -27 9 16 50 -17 33 -20 -1 86 -113 -63 -15 -123 -109 -51 46 62 121 -36 -56 11 -26 25 -1 -23 -109 57 61 28 -76 -16 -15 17 65 -2 -15 57 15 -5 61 -39 74 -67 -3 64 -24 12 -48 17 39 127 74 83 -23 120 12 21 61 31 124 -15 126 -105 25 115 32 0 14 -28 36 -30 71 -39 4 11 51 -42 8 24 16 -24 -62 95 117 23 2 -13 70 -23 -46 -11 -68 -9 8 -40 -24 -55 -54 25 -87 -9 -44 -55 55 33 -44 54 -49 39 -3 -45 -18 0 32 -47 -4 -28 16 -85 -43 31 16 -38 50 -60 110 -13 48 6 -62 15 -45 60 -50 -102 -46 -90 -61 -59 -1 56 28 58 -32 76 -7 40 -7 101 -13 -62 -44 63 -109 69 -2 -7 -41 102 76 23 -22 24 31 7 97 113 -30 -28 -3 54 61 74 94 -50 -18 -1 -6 105 -119 -55 -14 -47 -17 19 -96 -65 -85 -56 -8 15 -32 -21 -19 -63 84 -28 3 1 97 -124 114 -13 -23 -46 6 63 8 55 99 -48 61 39 9 -45 105 3 -8 -18 26 16 -86 -12 9 -59 123 1 122 22 -4 -54 13 4 -59 -88 15 11 1 83 -12 -24 -46 7 9 55 83 -12 -82 90 25 32 37 44 -24 17 8 -60 55 11 -6 -7 43 -30 -84 8 74 100 33 -13 65 46 102 126 -40 -65 47 -21 68 -38 113 12 -1 -13 15 3 17 23 96 98 -35 44 -13 -62 -2 84 -127 -13 57 -26 38 57 -2 78 0 1 39 -79 -39 -57 -59 -6 -15 127 6 32 -12 35 -63 -21 46 5 20 3 121 -116 -34 -115 41 -10 125 38 65 -1 42 -26 -13 38 43 -6 -48 125 16 -19 13 4 23 -2 49 16 85 64 -46 41 127 -3 -23 -56 -127 14 6 -30 38 94 40 66 40 38 73 4 -6 -23 30 19 44 9 4 96 66 -30 73 -3 -5 11 44 49 17 74 74 -11 59 -11 31 23 24 -73 21 -55 50 22 -4 14 85 6 126 66 5 -37 -67 -65 24 35 -46 -26 16 95 -18 -75 -64 5 -19 8 -65 -87 27 48 57 -24 87 14 37 -3 18 22 48 -42 -10 -38 -49 71 -67 53 60 5 -49 -93 90 -21 -1 -6 -13 -29 -37 -2 -105 -6 -66 70 4 -35 112 60 67 31 -30 47 3 -98 40 21 27 64 -30 47 21 -127 -60 18 127 51 13 -6 10 49 -19 -3 -53 -91 -22 -35 -39 -84 -17 60 -127 1 44 -91 72 -52 -13 -126 1 5 -52 102 39 -37 23 -12 -2 -35 4 26 39 32 -5 -2 -1 -2 3 -88 38 12 -74 -8 12 -62 -125 41 35 68 20 -8 -50 49 -1 16 5 -20 -89 46 -18 -58 41 -56 -15 45 62 29 29 -105 24 36 -23 25 -111 48 92 -32 -10 0 7 -8 -56 119 21 40 -124 -23 81 -9 -126 -58 40 -22 28 27 22 -127 19 -13 -14 32 90 -65 -107 66 -73 18 -50 35 -76 -41 -40 26 -79 -38 49 -30 -12 38 -43 -98 15 91 -109 85 -11 67 -43 -20 -54 36 114 125 45 -92 -72 32 66 -58 2 -61 -40 15 12 -60 76 -66 -32 -65 -70 -29 31 -60 60 -15 -66 -45 64 -126 -45 -3 52 55 -19 67 -126 -115 -25 -115 5 25 12 33 127 4 -3 -14 25 16 5 -43 59 -36 -88 66 -41 -35 -4 -20 -58 -37 65 55 124 10 127 46 -58 -48 -8 29 60 41 -46 -3 9 32 -26 -46 -70 -53 -57 126 -32 -47 111 70 76 -22 -84 -15 76 -2 29 36 -69 -78 -44 -3 30 33 0 68 6 -37 27 5 -4 127 0 -40 5 -18 81 4 19 29 -76 65 -23 -31 -19 -27 -68 61 -29 -39 9 19 50 0 11 -24 68 -53 -3 89 58 62 -33 17 37 -126 -6 72 -35 -34 -73 -59 124 18 -83 -37 9 38 -104 127 25 -58 52 5 -54 17 80 -10 -5 -42 19 66 61 27 -5 10 25 -12 57 21 87 5 -14 92 -97 -30 15 -16 -128 0 -27 -18 0 -38 55 127 -75 -9 15 9 127 -118 -48 -15 -56 -10 -76 58 -56 42 -18 -29 -35 45 -117 8 -37 -23 -128 -54 7 -127 63 -100 108 -49 5 -73 -68 -35 64 16 91 72 52 -12 40 -66 -56 -34 -70 -55 33 -11 -1 127 -6 -80 91 -35 11 20 72 58 15 26 -70 30 -10 -116 -128 -113 14 33 -4 91 -59 -67 -123 -39 -48 -125 -108 -127 10 -74 -98 -126 17 -8 -15 -104 -85 20 39 91 17 71 -93 -25 -97 59 74 81 -57 74 101 -114 40 -98 -49 73 21 24 -107 -76 -33 -12 55 -75 86 -56 -43 -65 -50 36 -63 -43 -20 16 -71 -125 68 -15 -11 41 -41 -91 55 -47 -56 63 -21 -106 -31 -31 25 -54 -53 -100 39 76 10 -82 -31 -34 31 21 -14 26 -32 -40 1 -9 28 62 41 40 3 -95 -11 -57 -33 35 -90 -3 19 58 -128 69 -32 38 -30 -52 46 13 37 56 -12 50 -59 28 26 -55 9 -67 -66 -69 -52 -66 -68 32 -50 -89 -64 2 -13 -45 124 -9 -35 34 -9 40 91 -8 -4 -1 59 35 -33 -10 37 -97 24 47 -41 66 47 -14 -59 13 59 -18 -19 -52 8 -5 -17 4 -39 -40 -26 -46 -13 -79 31 41 30 41 -32 -6 26 71 -8 -40 -27 -47 54 -55 11 -26 16 33 -49 -7 -33 -1 -46 30 -40 -109 -21 -70 15 -59 -31 60 14 127 21 108 -35 18 -5 0 -11 23 -41 -49 2 12 4 9 43 103 -28 -41 -12 79 -10 -55 -21 -61 35 7 -5 53 11 -3 -127 33 21 31 -17 -10 58 54 12 -6 19 46 0 -1 -48 28 -89 -24 23 105 14 -12 -14 -18 -69 -31 -80 19 -114 -50 67 -53 53 33 -49 70 -92 -42 44 22 50 48 32 36 -32 40 47 -69 -43 -29 18 -5 -2 -46 -3 -17 -86 -25 9 68 -80 -44 -5 33 -2 -96 -33 2 13 -71 -46 -15 -39 47 35 -99 70 15 18 -37 -16 -76 -14 -86 16 -48 51 1 -14 -14 -79 -78 30 -15 2 -5 52 -63 -93 12 22 -105 -32 -88 -25 72 -45 -85 -119 -19 -119 1 1 61 26 20 -50 50 -11 52 61 -11 -92 43 30 54 19 33 -17 -94 1 55 40 -9 6 -63 -44 37 29 -47 24 10 -75 66 -29 -15 101 42 -82 -18 7 42 4 -66 -55 53 -13 -59 69 -34 -49 1 -46 -46 83 39 17 7 -7 61 65 38 88 19 120 43 -72 16 -40 -5 -32 19 123 33 13 -21 -16 -36 35 -17 -1 -1 41 -58 -39 58 -61 32 13 -32 12 -13 26 21 47 41 -30 8 18 22 18 37 -40 56 -9 -128 127 -6 -8 -6 -12 -51 37 35 -5 47 23 83 -72 -62 49 5 8 -40 -20 -75 35 21 -100 -102 -2 46 -93 -54 -94 -38 -128 1 -21 -126 77 -57 18 -28 -24 -23 -2 43 106 -28 -25 -6 19 11 -19 48 20 -9 23 -44 16 -110 -18 44 32 -6 27 60 8 -38 41 33 -24 127 -47 2 -4 68 -52 3 27 79 21 7 12 -27 41 19 -6 -1 -12 -87 -4 -37 63 -30 -125 12 -8 -26 -97 98 -5 61 4 -31 23 -3 4 -57 30 5 127 45 -68 -21 42 -3 -84 76 24 33 67 73 82 58 23 -76 -63 52 42 89 64 117 18 23 -48 47 61 -5 19 28 88 35 30 23 50 10 42 81 58 -27 30 -14 41 121 80 4 26 -86 47 -68 -71 -19 6 56 -19 -46 -4 95 9 8 23 -11 19 1 42 86 102 -50 1 49 -22 29 26 42 -2 82 45 11 -8 39 -14 7 -53 -77 0 -53 127 -72 14 -66 -30 28 60 -8 -31 -75 -19 -38 30 -46 -11 11 -56 35 -14 -36 9 -99 -45 21 14 -49 -47 -117 11 3 101 41 29 -55 80 -11 -15 18 25 11 48 9 -96 35 46 -57 -28 -35 99 18 61 67 -38 53 127 2 -22 52 100 10 -10 25 77 41 50 52 -52 43 8 -95 -15 -64 57 -84 -35 24 -6 -14 -34 -22 -22 7 12 -49 -17 61 8 -16 19 -15 -19 14 80 7 -47 14 49 -33 9 38 43 -19 23 23 2 64 -64 -5 -54 127 35 -90 13 -15 -21 1 -18 -45 24 44 56 -5 16 -89 -14 -4 90 -27 35 24 -2 75 92 41 -45 115 -74 -28 18 7 -97 -48 28 9 -32 -7 38 30 5 -6 4 -48 41 23 14 -5 -49 -14 -6 13 -13 22 12 34 -50 -61 33 33 -5 8 6 42 -35 2 -10 68 24 82 3 12 -55 -59 -44 73 56 -17 10 106 -38 -20 -11 -45 -62 -22 13 -8 40 -83 114 1 3 13 -37 -43 59 37 79 10 -11 -9 -21 104 49 117 -37 -72 -12 -53 -8 45 25 -17 -25 47 -72 -22 -21 -45 26 -128 6 -49 -72 -49 47 56 62 6 -26 62 113 -6 44 -53 15 -69 -82 -34 -99 -23 -68 -41 -128 68 106 -116 -19 -22 -94 35 6 -24 -50 82 -14 31 -66 5 -76 -75 115 21 75 98 -47 31 13 30 -16 -13 -13 9 41 -90 73 13 -4 35 4 14 76 17 27 3 64 17 61 -58 -34 18 -18 62 38 61 95 -31 13 66 1 -14 -49 6 -33 14 -103 46 -3 -68 -57 43 27 18 4 -37 2 8 33 -5 38 11 51 10 21 -102 30 53 8 38 2 45 -94 88 4 8 -24 13 121 -2 9 -30 120 -36 89 22 -41 27 18 -83 -26 -70 55 62 -4 -12 46 28 -35 48 -29 34 99 -13 78 -67 126 23 79 -31 -76 -60 99 85 54 31 117 -26 -10 38 123 -55 5 65 -10 69 21 126 -11 -32 -31 -65 -19 -66 48 89 -22 -31 66 4 33 8 -1 -91 55 -59 -53 -14 68 54 51 -94 44 -51 10 19 65 48 -26 -42 48 -116 -55 41 -72 -90 -12 19 -26 -23 -74 20 -51 97 88 51 -2 -23 -111 4 -55 47 -53 36 -35 -37 115 2 -20 40 -67 4 -26 92 -22 85 42 15 -28 -91 56 -7 0 -8 -21 44 45 -4 -35 -28 52 86 -31 -40 -4 53 -109 25 5 27 -30 21 -38 34 38 -36 -69 -80 13 75 -70 -11 31 -27 35 -30 -25 -20 -93 -40 64 37 81 -2 63 121 -8 127 -74 -15 -17 25 -28 -24 -44 50 8 3 72 106 18 -6 -43 -24 -71 30 -29 -42 25 -61 -6 -36 60 123 29 70 7 70 -81 20 -24 -38 -92 -22 9 -59 26 94 -32 -3 -44 3 -81 -40 -99 -30 -73 -84 -35 50 47 52 -28 60 -33 0 -24 -27 -23 48 -52 5 25 -25 -59 -83 -21 17 -42 -11 -16 32 -1 -24 32 71 -38 125 -9 -5 -44 -34 84 -24 -20 -32 -51 -16 -30 6 -13 -22 -105 100 -82 127 -43 54 -30 32 13 -75 -23 33 -55 14 -16 15 11 41 72 -97 124 9 18 -40 21 -95 -14 48 -17 21 -43 -39 11 -47 50 -35 9 -13 -31 -45 19 57 60 -67 31 122 2 -69 -18 59 49 -5 0 -2 -35 13 -12 -24 -40 64 47 30 17 -47 72 -5 -34 33 10 -36 48 72 56 12 -59 -54 -19 7 -87 -114 -9 -35 -18 -46 50 -82 -18 99 -17 8 -66 1 -84 37 6 -39 87 -36 -41 -18 -18 18 -9 -20 -16 -33 62 -28 -23 -4 39 19 -4 10 -32 5 8 -46 -4 29 -7 0 -88 55 111 -18 -50 20 36 -11 -7 65 -5 3 -73 -87 37 -41 65 87 35 7 -29 64 -16 63 -25 -8 -16 59 -73 -40 13 -26 57 -73 -68 85 24 83 9 110 75 -66 37 -34 17 -25 16 121 6 66 53 -82 -60 24 -22 -56 44 -75 -44 103 8 41 -19 -14 107 31 -59 21 116 60 8 106 4 89 -50 -8 104 -19 26 -44 25 85 55 -88 61 -121 -93 70 73 102 10 -19 80 43 -2 120 -23 -54 127 62 -28 11 79 -34 -56 101 22 10 -24 -120 11 102 71 9 36 -43 -24 16 27 8 13 20 46 70 -77 -34 -86 15 11 -56 55 13 45 4 55 -55 -8 -21 -26 51 -16 95 -36 -13 -91 29 -10 50 -27 21 45 -82 23 -38 76 17 5 47 86 18 53 31 21 -51 63 -50 14 6 57 11 11 7 17 -72 7 -59 -2 47 -61 -71 52 -64 -85 44 -11 27 51 -108 -40 43 16 42 50 48 85 39 -20 -1 53 17 -23 -40 87 -3 -50 66 43 -6 11 37 -12 68 -74 -113 -35 -57 -8 -25 17 -77 44 -35 72 19 127 9 29 60 2 -24 -20 59 -31 29 -82 50 -22 -19 59 105 73 40 121 -6 76 11 -29 19 18 -21 46 -3 70 -10 -17 -47 -14 -54 46 25 -3 88 -121 7 35 30 -8 59 39 -73 -2 23 22 -2 63 27 15 -22 -85 -17 117 -31 -9 31 -22 3 22 -26 35 26 12 59 71 -58 79 -125 -15 70 60 -45 -44 -53 68 33 46 43 41 19 -55 40 58 111 -48 26 9 -72 -91 78 -123 105 -125 16 -12 -41 -48 20 61 15 115 -6 6 -41 -81 -81 64 44 9 86 38 27 -13 7 -18 72 -48 -53 -123 -65 20 76 23 -55 -1 83 39 43 -14 -6 -35 -57 40 18 -39 -85 55 -82 50 11 74 10 -113 -103 122 -43 -49 -25 -27 11 30 -65 5 -54 -16 38 86 107 -27 127 29 -57 65 17 34 51 50 -19 29 54 -29 -36 -16 65 -28 -101 97 73 -29 78 100 -37 75 29 -43 26 -16 -20 49 -76 1 9 -9 -47 127 -54 28 15 53 -35 18 -121 -11 2 -79 43 -55 -9 7 -43 44 39 56 12 -25 63 -25 74 37 -32 -7 35 122 -25 -42 -35 -14 -15 -15 14 -54 -27 75 -108 11 49 -1 42 -7 0 -28 -33 35 71 -37 76 27 -61 -9 -47 -22 48 71 -29 82 -2 -9 1 -78 55 42 -34 -10 26 -44 -18 24 7 -55 15 11 3 45 55 76 26 49 -17 -44 -37 58 4 -72 82 40 42 -29 -3 -74 43 0 92 54 -43 25 52 -4 -56 -21 52 -8 -13 -73 -53 -40 -11 19 35 74 -13 46 45 21 -70 -8 -13 21 -28 -13 4 -34 18 -64 -13 -40 -93 -29 73 111 -6 39 -62 17 -55 43 -48 -20 32 8 -69 7 -43 52 13 -16 -63 -45 1 92 -23 -11 27 -76 -36 -51 37 42 -23 41 -19 -26 101 -127 15 -53 -47 1 29 8 -20 29 -2 38 -32 -30 81 -22 -15 -13 -67 72 -13 -61 -11 53 -93 30 -59 124 -12 -28 106 29 -24 12 115 5 17 -126 8 116 7 12 -31 16 -30 -26 98 70 -11 16 -66 12 118 -11 40 44 49 -40 66 55 127 -99 104 118 31 11 67 -22 22 101 9 -2 -23 97 -14 119 -9 3 75 63 94 93 5 -24 42 -67 12 0 52 76 -17 63 19 93 -123 4 -70 103 37 21 29 -76 75 69 49 51 -126 -37 40 -17 40 0 34 37 30 -17 30 -24 -6 -38 57 8 -49 -77 49 -123 -16 -6 96 5 5 -24 -27 45 6 -4 -40 86 18 -47 -4 -5 -77 14 49 -56 22 43 70 -15 -74 62 43 52 78 -74 1 29 -2 -40 55 -74 -20 86 -35 -5 7 66 -10 -16 -63 -47 -57 17 -5 33 84 33 31 37 -53 1 -41 24 -4 9 -70 -50 9 -64 -53 86 -34 48 -8 121 25 -17 81 -43 -14 -45 -44 -12 -21 20 6 -35 -98 -56 -35 -48 12 18 -71 -52 -23 -45 -30 16 2 -51 5 -49 -85 -11 -30 82 -53 -55 20 30 -14 -31 -36 -5 -40 -65 18 126 125 -44 15 -9 29 -42 -127 62 0 -105 -1 -39 54 48 -5 -27 -25 127 -26 9 20 72 -76 62 -91 62 34 29 4 -41 -7 42 50 16 98 -25 -50 43 0 111 -54 -37 -91 -42 26 25 -36 -5 -52 56 -71 51 66 -127 -60 9 16 -47 35 -26 -40 -47 37 -24 5 1 7 41 -50 -93 -36 36 95 40 -70 -1 13 55 -122 -33 -58 30 -11 -98 -10 -7 -65 -9 -34 83 -8 67 -8 49 -34 11 -89 -25 11 15 12 -71 57 -56 25 -30 32 -6 -58 60 18 7 -99 78 25 58 -3 -31 -12 -52 25 -29 72 -64 68 3 25 -13 -30 5 -45 -10 -104 79 -10 52 -70 18 57 20 22 37 0 -38 -127 -50 -15 42 -75 90 35 123 -25 -56 114 -14 -8 11 26 -18 -3 12 31 -38 -21 43 28 -37 75 22 -1 -20 6 -12 -27 44 -56 -62 51 54 -65 58 44 66 19 1 -103 -18 -1 -48 10 -2 -97 10 18 61 26 19 7 78 -66 82 -58 23 -44 71 7 52 -58 -18 19 47 -23 -118 -25 0 106 -25 7 -42 12 -33 12 27 50 38 -25 -90 -11 -28 -20 32 -1 -12 -30 40 77 -30 42 68 3 10 -6 21 -1 13 -65 22 98 44 -15 -13 17 -59 5 38 20 58 -10 -29 -9 -24 39 -64 36 -7 -32 90 29 -37 3 -50 54 -3 -28 -5 46 -31 -92 -6 19 -39 12 -26 -31 23 48 32 -74 -23 -69 -2 27 38 82 41 123 -22 42 28 -5 -7 -36 -11 12 -69 89 -43 4 24 8 -27 26 14 31 -61 -3 41 25 10 -4 124 2 62 -43 -102 58 52 -8 14 14 40 -41 22 -1 -6 8 -97 75 -2 -47 -106 -27 56 37 40 -17 -12 21 -38 120 86 95 127 -70 73 14 -30 110 55 -40 69 101 14 -102 -67 68 122 69 -36 -9 -116 16 23 52 -13 12 23 127 51 14 59 33 -22 -16 80 54 43 -32 -102 -25 122 126 25 49 -27 95 52 79 39 -7 -17 5 -89 68 6 9 -48 -32 -37 94 57 40 112 119 34 82 30 80 -65 27 -49 -26 8 -105 12 -39 -116 -68 -43 -123 91 31 63 127 39 85 -127 -3 -85 -4 -12 -25 65 -108 46 47 -126 20 108 75 41 41 36 9 -63 51 90 9 67 -94 -127 -26 -25 89 7 -17 -75 -4 42 -50 -47 85 -35 -58 -2 -18 69 72 -30 49 -27 -18 19 -68 12 -128 -49 -85 -127 30 -128 -2 28 64 -58 6 18 -127 -31 92 -115 -128 -19 35 -48 84 127 -38 36 -47 31 6 -64 17 47 64 -47 35 9 -86 19 -103 -13 54 70 -73 92 42 46 -68 59 -1 -13 19 -41 -91 -99 -9 -11 8 -82 43 83 26 -6 -98 27 -96 -62 54 -124 -2 -25 -57 -24 123 -30 44 47 -41 36 -37 -50 15 -37 37 7 -83 -39 -55 -26 -11 -54 -14 40 121 -2 38 -30 31 31 -113 -44 -55 26 59 -17 -65 46 -5 -43 -26 69 -48 45 59 38 -36 -35 44 -29 -76 17 68 21 -52 22 -70 -5 -23 -6 1 33 4 67 -2 -2 -2 -88 111 68 -58 44 11 17 45 34 74 18 -83 -35 77 -18 24 31 44 24 42 15 -80 20 -81 54 -4 -49 -3 -35 50 -23 -19 -27 -22 -54 -16 -98 43 -45 -18 2 -3 -24 33 -30 -105 -126 -19 24 101 16 -3 -16 11 70 -43 -32 -13 -91 -19 -64 49 -44 13 71 -107 42 44 -17 -15 56 -106 -49 -59 -44 -31 76 28 38 -49 -63 14 28 37 -97 -4 75 12 -114 127 -73 -73 -53 -44 -122 -128 -83 33 -22 -63 72 25 -26 16 52 -6 -128 14 -120 -126 -76 -126 -22 -73 4 14 21 56 22 -14 18 -82 2 -4 32 -35 0 -25 52 26 -8 -66 66 -69 33 40 -77 -31 -22 62 -73 1 39 -1 -14 27 -24 99 -21 -11 28 -67 -15 -10 12 39 16 -14 31 -17 21 45 4 46 12 51 6 -6 -62 -31 -13 55 -28 79 4 72 27 41 53 47 -28 26 83 43 51 10 35 35 0 19 -24 -35 35 52 -14 -24 15 -19 -4 41 -3 31 -7 -42 100 8 38 28 71 32 9 9 67 14 49 -58 72 27 -76 -47 -32 60 26 25 31 -24 -5 80 38 -90 -88 53 62 55 -122 -51 -87 -35 -48 126 95 -7 105 78 39 -40 64 56 125 29 -9 39 -1 -18 29 77 4 -51 54 97 16 -40 -4 82 0 -70 -128 81 -99 -38 86 25 -45 -11 43 84 34 3 127 99 -1 12 -81 36 -122 -23 -76 127 31 31 -30 51 -62 98 -128 -30 -54 -14 -26 -14 -5 8 39 -49 89 -8 -6 -16 85 127 -16 24 21 47 -62 -23 -46 -45 31 18 25 -75 -10 -26 -34 52 -76 -12 2 8 41 -17 -38 -31 -8 -92 114 -77 96 3 -79 -9 31 -28 -101 32 56 -75 -8 -26 81 39 44 -107 48 -16 25 103 -65 7 -111 -34 -78 22 -11 59 -22 45 -11 39 89 -21 31 -39 -38 38 -17 -62 66 91 -21 -54 -38 113 -87 -65 7 16 -52 50 23 5 -92 -3 31 28 -3 -71 69 60 41 -40 56 -36 32 19 75 -30 39 -97 11 -3 72 66 24 -14 68 -58 80 -57 17 -38 19 80 -51 -49 -3 1 90 17 4 -17 66 81 -24 31 30 12 58 11 -67 -48 86 9 69 -43 67 12 -75 92 -7 -16 26 33 78 51 -11 -6 49 51 -34 21 53 31 4 19 32 50 -20 -104 -9 -4 49 27 18 15 80 103 -9 47 7 14 -15 -1 -41 27 -67 69 22 15 -58 -11 102 17 -11 44 17 1 -29 -46 32 103 -23 65 23 -79 -14 -28 -3 -3 59 -3 7 -88 45 -58 25 82 -91 -60 -15 19 -4 2 -37 20 -36 -5 67 -59 31 81 -68 -14 -9 -45 24 15 23 127 -44 -65 -50 26 -1 -38 6 22 33 -42 -6 41 32 44 -22 -34 -20 67 125 -47 10 -1 -45 13 42 40 15 46 -6 -19 -69 16 -43 40 -26 47 78 -37 -49 16 19 66 -20 -7 2 2 -11 9 67 10 15 -16 13 -68 -23 27 -34 70 -53 -127 -74 55 13 -51 -78 61 -5 -11 56 19 -77 6 16 -32 45 -42 127 22 -64 38 -33 6 12 20 61 -43 -111 42 60 25 -44 -14 17 66 -106 -1 76 25 -29 23 2 77 -9 -79 55 -4 -79 -83 -8 -14 31 -17 -33 -11 -28 86 66 -118 107 18 -49 36 -70 69 -35 -25 -14 65 -33 31 44 -127 -25 -69 61 35 40 -34 65 19 21 -38 -6 -24 68 -128 55 -29 11 -7 -6 -6 19 -4 85 78 15 -11 -3 29 -81 -15 -90 -22 45 21 33 -12 -5 55 -45 -16 -29 -48 -20 -27 -16 6 -4 -63 7 -3 -31 -44 74 56 -33 -14 13 7 24 -16 -80 -24 21 -7 -11 2 -67 -31 -43 -5 9 -43 -4 18 6 14 -56 -12 32 -96 -18 -36 -80 -96 32 4 2 -3 18 -7 -90 43 -34 -126 25 22 -40 -77 -47 -23 -25 7 99 11 83 36 69 13 -52 27 -64 36 -67 91 -40 54 -28 17 26 9 -52 -74 -17 -20 -25 -67 1 -2 -12 -41 78 -32 14 -9 -5 -73 0 9 6 -13 56 -60 -32 -10 -46 88 -70 6 -9 -60 -23 23 -15 39 24 -20 -83 -71 -19 13 -60 -26 -28 -19 -45 4 -14 -8 -73 64 117 -3 92 -27 -61 -32 -48 -64 -59 -84 -58 -26 -107 29 -71 -35 73 -7 -10 -39 -3 16 -34 -23 -11 23 44 -2 58 -73 17 45 40 -10 -2 -4 -83 34 -24 -7 35 89 -21 -42 125 -122 33 70 -55 63 57 -42 88 -19 -21 8 -64 85 -90 -31 -127 -32 -60 -62 -30 -82 44 -7 -114 70 -112 26 74 35 -17 29 -104 29 33 39 -30 62 77 -43 -128 3 44 85 -116 22 -26 29 46 28 46 -1 46 -31 -76 -113 -96 50 -101 -21 10 121 -34 26 76 27 -59 96 37 -19 -76 -21 114 -70 32 -66 -26 -77 37 -86 17 -30 -96 -8 -57 -54 -66 0 26 32 -121 -8 68 45 -13 27 12 -71 10 -41 -20 -33 90 -70 -57 -122 -13 33 -128 -48 -18 14 54 102 -42 48 -18 2 -18 -4 53 -93 -34 -88 -45 62 -13 71 44 -56 9 -58 22 6 1 125 17 -11 -70 -72 -109 62 -60 58 -106 65 57 11 -51 15 27 1 4 2 -10 70 37 -128 25 115 -70 -22 -100 0 -52 36 -52 -72 8 -17 -38 -9 1 42 33 61 99 -61 16 38 31 126 -59 10 -59 -61 -11 -5 11 -53 -55 54 55 -81 -84 30 52 -74 -57 -55 -32 78 -91 12 -16 -16 -52 -124 -31 68 9 -47 68 51 97 11 26 -59 -67 51 -71 -24 40 52 -52 50 20 12 -16 -22 103 -68 17 -16 -34 58 -9 -103 -87 34 77 -66 15 -5 -115 14 31 49 -37 13 -25 41 -42 -68 8 126 -52 -28 15 121 79 -94 69 -69 36 24 -41 24 115 -7 -4 -42 48 -64 66 42 111 -103 32 34 -77 -11 -24 -83 -4 16 77 43 85 65 -83 -78 -45 -71 -60 53 -53 -21 35 5 17 120 -10 -46 34 -55 -29 83 66 92 37 -1 -25 -25 -6 47 -70 44 -37 -28 -39 -68 -45 -11 8 -60 15 -16 59 -28 -9 -75 16 41 -38 7 81 15 32 9 -53 57 87 9 95 -96 -91 93 33 -24 -39 -39 28 -42 -16 14 36 -76 -29 -13 -127 2 -98 -25 -73 -8 22 47 -78 -16 6 -22 13 98 -96 -71 -3 -49 42 -45 47 29 22 36 29 -84 91 -26 48 -8 36 -6 18 5 80 19 51 -34 78 -93 64 75 -7 30 -13 42 -76 9 -27 14 -71 48 1 72 12 -80 -3 18 -69 -58 32 77 26 -16 -47 15 -51 66 28 -62 14 25 10 -50 41 -7 23 8 12 56 15 45 65 63 81 27 -89 -16 97 -38 77 45 79 -44 4 65 -23 -20 39 127 56 -7 6 62 -32 89 -23 3 -85 -17 33 46 14 59 60 30 -33 4 54 23 11 66 44 14 -14 67 33 -9 107 111 -27 -13 5 -13 25 -20 -39 -5 -12 13 -47 -22 12 -20 10 -17 34 -55 87 92 -26 26 -19 -42 52 15 5 46 -21 56 -17 28 10 -38 -26 41 79 -31 6 7 33 19 -63 22 14 43 33 -45 2 -21 -3 52 -9 -2 51 -9 26 48 -63 52 -25 -12 12 118 -9 33 9 -6 -20 -21 2 53 -5 -68 -26 -13 -33 -35 54 69 -88 -3 -53 3 98 -16 10 -87 -25 -76 113 47 75 24 87 -76 113 -42 -3 80 87 121 127 43 38 -27 74 127 -73 -45 116 12 92 26 91 105 122 87 62 63 93 -26 7 -59 50 41 -32 -40 95 46 -66 82 103 41 -30 69 46 2 61 -76 -27 40 1 -101 41 116 99 -97 112 27 3 52 -85 -1 -19 33 40 -73 30 80 8 45 63 127 127 68 -4 0 -2 127 19 81 13 -21 101 -23 -60 112 93 59 -83 -15 -12 94 46 41 41 67 49 36 -62 -56 68 -51 -50 26 -12 9 4 -5 -2 -36 3 -10 -59 78 -16 -58 -124 34 80 -92 -13 -109 30 19 10 -47 -2 -69 86 50 16 -24 13 -27 -14 -13 -54 -25 -9 4 55 1 -38 -56 50 -18 -127 -59 -34 -25 84 -23 18 82 -27 -19 5 23 -62 39 -68 48 23 -113 -1 -42 48 -29 -27 3 -67 -57 -3 -51 -17 30 11 -85 -88 -20 -20 -6 -18 68 2 67 -22 -35 -42 -14 7 -63 7 12 -11 50 3 15 -41 -116 -33 -44 -127 -128 25 50 5 -106 79 14 119 -26 64 -6 -69 42 -38 -72 -14 -21 -52 20 -17 -60 83 -49 11 -47 22 24 -43 47 -3 -12 39 -19 11 44 55 2 20 -42 -26 87 75 88 -126 23 29 -128 -5 -50 -17 40 25 -2 99 -65 55 -64 -79 -54 -32 -30 93 -2 52 26 55 68 20 2 66 49 -121 37 -42 37 -5 60 -45 -28 62 -58 8 109 -76 36 -18 102 56 -46 -62 -48 25 -82 4 -34 -52 -88 61 -75 77 -48 -63 -45 -25 -97 -25 -5 13 -88 -40 34 126 14 40 -78 73 -6 -28 -109 -22 -66 84 -127 -18 -1 -25 -116 73 60 -1 -85 -69 -128 -69 -82 -7 71 -49 -54 1 -44 0 -119 104 18 38 5 38 -47 47 22 -126 44 -69 62 -65 28 0 -1 -45 -88 -42 43 81 42 42 -39 -89 122 55 -33 4 -2 56 -26 0 -35 116 -38 35 73 59 85 37 -2 42 23 67 -11 -8 -45 105 -20 -11 -3 23 -20 71 51 -22 97 39 15 -82 -26 14 43 59 40 24 22 34 89 -70 99 81 -7 -21 43 -49 5 31 39 55 15 27 -96 -14 62 -126 -2 21 -6 -68 127 -16 57 69 26 11 -20 72 -15 123 -13 1 44 -17 126 71 -6 4 34 6 30 2 -28 -27 32 -16 -45 101 10 40 112 34 47 99 -33 14 77 -20 61 21 -60 74 23 92 42 -35 119 99 -77 -52 127 -1 76 80 31 86 5 -24 21 -128 -2 54 1 -33 -3 111 100 13 -113 4 -89 0 -36 -74 -9 -72 18 -25 -30 67 26 8 50 68 -3 33 78 -23 11 -33 -53 -13 14 42 -74 -23 86 -19 81 -34 -3 44 -28 46 35 -61 -40 26 -6 -122 28 103 -25 37 -83 -30 -47 -107 81 5 3 25 121 -96 -40 127 -57 -9 77 17 94 24 35 65 -92 48 -76 43 -63 -36 -82 -93 17 -126 -121 -61 32 -6 -36 11 10 -2 11 -31 19 -6 -52 99 9 15 48 -33 -88 -2 5 117 -44 -103 0 -25 -57 -39 30 33 -61 31 -27 -9 3 -126 72 -59 -61 -36 56 6 -78 14 7 -28 -19 -7 -13 2 -4 63 27 -95 6 -77 -38 -23 -16 -127 -1 -24 -27 -80 -106 -8 -108 -68 126 47 -69 -34 -60 -67 15 -84 -24 -7 25 -6 -3 116 -68 -36 -46 20 62 36 -2 0 -52 6 -92 -5 126 -25 51 -52 70 -20 83 -77 -2 -75 25 18 57 9 -34 22 -33 -46 -70 -37 -71 -25 87 16 -17 56 9 -68 64 -55 -17 -13 -40 5 -3 -22 -35 -3 -3 31 15 -58 -86 42 8 -6 -59 -2 -23 -19 35 -46 46 25 -42 -16 33 -45 -20 -111 31 20 -12 58 -24 -41 -38 -33 -33 44 32 37 -45 8 -33 7 108 -1 -108 -25 -58 33 52 -30 52 49 21 -19 -121 21 -14 -35 9 -50 -23 -73 -22 -57 -76 -53 52 12 -112 -33 -73 -39 -15 -37 -9 -19 -56 -112 -3 -37 36 -1 29 -29 71 -2 71 -7 -61 -27 30 -33 104 25 21 68 -27 17 77 49 -34 -57 29 83 75 -12 38 -77 -35 81 -40 55 -7 15 31 48 -39 59 48 -21 95 -40 28 57 43 -84 -102 -6 -10 -95 -4 18 40 -38 33 -42 -39 25 -14 25 -6 64 3 127 66 -80 -126 -12 -64 -119 60 13 69 82 -47 -42 -62 49 5 -7 -11 112 27 30 23 7 37 1 -55 -52 -48 45 61 33 64 -24 -52 -33 -105 41 -57 82 127 79 -48 32 -3 -117 -50 -57 -17 -15 -117 -14 -124 -11 -47 29 -2 -12 -16 -16 23 -60 -17 19 31 -18 -14 34 42 -4 -101 35 -7 43 -68 92 1 87 0 -30 38 63 -13 -3 -89 -56 -109 -118 -31 -83 61 127 -14 -6 127 14 -13 12 -43 -88 -49 -128 4 67 -64 -78 -1 37 -59 -10 -80 17 2 -25 18 29 120 5 -75 0 -55 55 126 -1 32 -14 -17 39 -7 -102 -6 -92 -21 12 -23 48 11 17 31 82 47 -66 -51 -66 21 -3 -53 20 -13 10 3 -55 8 15 101 -56 -8 -30 50 -6 -51 -84 9 -67 5 53 -53 15 15 58 -83 46 -70 -20 61 -11 34 36 -38 40 -31 -37 -35 -56 17 -76 65 -39 -23 -31 32 48 -27 -12 45 89 -28 -18 -20 -5 44 -22 -39 -69 91 75 54 -46 -24 36 -126 80 -9 24 12 -46 28 -8 -25 54 -30 -29 23 42 24 -63 -46 59 -22 1 22 -12 -72 60 -38 -119 125 -22 29 17 -2 37 -14 -9 -79 35 -11 -79 -4 56 -42 9 34 -79 29 -48 16 -12 58 41 18 5 25 16 -54 45 -11 -17 -77 18 26 -4 -21 19 -32 50 63 -44 -80 80 63 -22 -27 -98 -38 22 -56 -8 -47 82 -60 41 -35 -42 -56 45 36 63 -12 -101 65 -37 -64 -128 -50 2 123 -28 4 40 -21 -128 -52 -23 16 -28 -119 -90 -89 -65 7 -105 -87 -43 -17 -73 -94 -35 -112 -22 29 71 -24 -53 28 52 16 62 37 -33 -10 104 13 -24 48 1 21 13 55 16 18 -26 -66 43 -65 -19 -31 -120 10 -36 -112 40 -67 5 44 -32 -106 4 -2 -73 -43 -38 -37 -50 -22 15 88 -34 -107 -65 -21 -118 -55 -66 -96 -6 -6 -41 34 63 -57 -37 65 -11 50 -16 -7 48 22 -37 53 40 64 -40 57 -7 -18 41 4 -69 -29 32 -58 -26 -35 -33 -59 38 10 -18 22 -43 -48 23 28 -8 -20 -26 -27 113 -13 -17 43 -47 22 24 38 -73 -11 70 -116 14 7 -8 -41 -81 -51 7 38 87 -50 37 -53 -27 116 15 -55 -12 29 -24 50 -10 -16 74 -63 -33 11 45 -32 67 58 25 -13 -14 18 -75 3 -7 11 -48 -33 1 -71 -67 42 -2 5 -6 7 -62 -5 -6 -62 -78 -52 -64 4 -95 55 66 -41 63 -72 -95 -37 -49 28 3 40 30 -34 64 -40 -48 2 16 -45 5 28 -60 118 -18 100 -52 60 65 -16 25 -13 -50 -6 20 10 17 26 50 -8 -4 19 15 -19 42 34 50 -28 -85 -31 -18 -128 24 -45 26 6 -96 72 67 18 -38 -35 95 25 17 89 59 -11 23 -15 30 1 31 51 63 -43 37 28 -35 48 -15 8 -74 23 -17 7 41 23 115 23 -36 77 -90 7 127 -18 58 79 65 16 -12 -70 8 62 -36 54 -46 -52 47 61 98 -51 5 -126 -4 113 51 48 -57 57 40 -30 31 106 93 -83 62 99 31 124 -120 79 -6 80 121 45 127 -29 35 39 -30 54 34 4 113 45 49 -7 22 54 -20 1 -44 -66 -35 86 -6 37 -54 88 123 14 123 43 -22 4 43 43 28 86 93 103 -128 119 -17 -48 51 127 -22 -1 -29 44 -43 10 -61 -85 -16 2 105 -47 15 -26 36 -37 -20 35 8 124 -12 31 -35 14 60 47 -78 39 47 -44 -11 -15 10 -93 79 -46 63 -7 30 12 19 -27 27 -36 74 10 -25 2 30 -15 -53 59 -50 -125 127 50 -93 55 61 66 -28 -47 4 -75 69 -74 -44 109 40 125 -125 22 32 8 32 51 71 30 -78 22 -23 -25 26 -46 -1 -102 37 52 59 -34 -26 -44 -33 -52 14 12 16 -77 26 44 114 54 -8 54 -12 4 -128 55 -18 127 -76 46 -68 96 39 96 71 6 27 -20 127 18 55 -26 -54 -83 -16 112 -61 -34 5 -88 61 36 -52 -9 -44 19 14 -127 10 9 12 18 -84 -11 -97 -62 25 43 -76 42 -77 58 127 -33 0 53 -30 -12 -51 -15 33 53 -34 84 -43 86 110 -24 98 -2 127 -51 19 -25 20 14 -28 -81 113 -59 37 124 -49 100 -20 -29 37 0 -42 -42 -37 39 -19 10 -30 -32 -25 -17 32 -22 3 -49 120 31 35 -22 -66 14 -83 34 84 -30 -62 -17 93 -3 30 -87 -38 -35 -25 19 31 -17 14 -57 -6 -16 51 66 -15 -10 -47 -116 -37 27 -23 -47 76 -53 -38 -1 -3 2 -38 73 8 0 51 -92 40 44 -27 -6 6 -47 -16 -36 29 -45 -15 -29 -127 34 -39 -30 41 28 18 -15 -40 44 -44 -90 -60 -32 -71 -23 -54 -53 14 -79 19 -21 17 -31 30 13 37 32 1 18 4 -33 46 -3 13 -56 -4 17 41 -64 52 -95 -10 20 71 14 80 -1 -41 -3 -61 60 38 2 46 56 0 28 79 7 -82 -39 -40 -4 19 32 4 38 -14 42 -43 29 -21 19 16 -21 11 24 -2 3 -42 -49 -49 36 -19 0 80 6 17 5 -5 22 1 -73 -62 17 -31 12 -52 -16 -9 -20 -6 91 9 5 -48 -28 -51 14 -53 -25 -124 -12 -15 -11 -71 -28 -25 4 -64 54 -80 40 -78 -1 57 -33 -34 -15 -47 -91 127 -100 -44 73 6 15 67 85 -41 12 -117 -42 85 99 -71 -18 126 -15 24 104 25 -21 -37 -27 -54 0 -98 69 -28 41 36 -127 23 -13 -107 13 9 -16 -15 12 43 -46 -4 127 20 6 127 30 11 37 34 70 -19 3 -60 -36 -114 14 -128 25 23 -26 11 -43 71 47 -10 -47 -21 -16 23 -128 -16 -21 -8 -96 94 -81 -21 77 -31 124 -86 -50 -20 -64 -51 14 11 99 -20 -4 -25 108 119 41 -36 35 -43 -13 51 -125 -33 5 -125 4 24 51 39 -79 -28 80 -45 -128 12 22 42 -15 35 -43 -26 -53 -62 1 30 -38 -15 -4 36 -27 9 -19 21 -29 -64 109 27 -68 -119 -15 -96 28 -108 71 18 20 -43 75 32 -29 -3 124 -38 30 15 -18 24 49 -28 29 45 4 -15 -16 -36 8 59 47 -77 -52 -76 -36 41 6 -44 -64 -4 33 -16 -68 -25 51 12 111 -126 -24 23 52 -5 9 2 -3 -27 8 -15 6 8 55 40 53 66 30 23 36 -35 -17 -24 38 -69 -99 -8 -3 66 -1 59 -73 9 2 67 16 -95 -20 4 -3 -72 99 0 69 -59 3 -12 31 53 -56 68 32 15 88 -125 127 13 57 -43 56 -74 -39 -18 -23 -99 -79 37 56 -23 -15 102 -9 25 37 63 56 31 77 127 28 -10 40 -53 20 41 10 -19 -60 79 1 -16 60 21 11 -29 37 66 -76 79 24 14 -118 -4 -5 -74 72 27 1 14 -86 97 15 32 100 3 -5 75 58 28 8 -20 -16 44 127 -30 -37 21 65 -56 32 -22 53 3 87 -14 -101 -46 -45 -83 43 -52 -15 -88 -39 -46 25 8 -88 -82 -50 45 17 -51 -32 -11 -1 -18 -84 -21 75 -27 -58 -21 77 -31 -68 30 71 87 -33 32 97 18 7 -1 -63 79 -58 27 38 -51 8 -14 35 -9 -11 -99 30 61 36 -1 121 54 127 -52 -11 22 8 -14 -40 73 19 -85 -17 105 -38 9 -58 -49 40 -37 67 71 10 46 -33 20 17 76 -24 22 85 3 -32 53 37 31 90 65 35 -19 8 22 14 46 35 -22 39 73 -1 2 -62 8 26 -66 5 49 63 74 -5 -7 84 10 -64 -53 45 -25 -51 -25 -60 5 127 -5 -14 10 102 -3 72 -7 45 4 -72 5 41 69 15 28 47 86 115 15 -28 20 21 16 2 -74 -81 -63 46 37 -59 24 65 73 48 17 58 -11 4 -70 -33 87 19 -16 27 48 47 -40 -23 -43 -63 61 4 97 50 54 27 -8 -97 39 -100 -20 25 -19 32 46 72 42 -20 -64 66 54 33 18 3 86 -27 -17 -35 42 -51 -55 6 -26 -19 13 -18 57 64 -28 88 17 -27 -46 3 41 29 22 79 17 -46 23 70 68 -21 -93 13 -61 16 123 -100 18 -14 39 31 32 -75 3 -33 25 -77 82 -53 2 16 5 -13 -16 -11 19 -23 -41 10 18 -76 -84 -20 -26 -40 60 44 -48 18 -79 19 39 29 -26 51 -52 51 6 65 -72 63 33 49 14 -5 15 78 22 79 81 -9 -34 -9 72 70 55 -71 27 -38 -57 -31 -4 -1 -4 0 99 67 38 53 -37 -47 115 -100 6 93 -1 55 7 40 -39 -71 -37 -62 -14 78 7 -20 -25 25 -40 20 -68 6 40 -31 -3 44 30 -39 -12 73 -19 120 -6 2 98 -15 27 -39 48 -3 122 33 41 81 -121 41 53 -3 19 -42 97 62 18 61 52 27 7 -58 86 -24 55 54 -43 120 -14 54 -1 -49 -40 -37 -114 95 95 -27 52 -54 63 92 53 21 61 -28 127 19 59 121 -128 -73 63 125 -82 40 -24 70 49 -42 42 16 -60 127 38 42 -57 11 -5 6 19 -25 -28 83 -24 125 -60 51 -15 -11 90 -90 12 127 96 55 61 -113 9 -29 11 -16 108 7 -42 12 74 20 -7 23 -66 110 -25 -40 24 42 -57 2 31 -57 -69 40 52 11 27 -6 -12 107 30 16 39 67 88 45 -34 -52 19 70 -64 24 -7 -88 94 116 -38 15 87 101 -13 39 -59 -1 -45 101 -102 -47 3 -7 -21 -28 -117 28 37 -54 18 24 79 109 42 82 93 -16 -38 53 -12 36 -1 -124 124 71 127 -5 5 43 -42 -11 -23 -97 -123 38 -11 -3 -15 16 56 -29 9 2 -77 -55 -23 -20 -16 -4 -21 45 -109 1 23 -124 2 125 -70 -4 37 -12 -94 -38 -6 -44 -85 -49 -81 -23 23 -39 -77 -58 23 28 -14 74 6 6 -38 -33 -58 -101 -29 -15 -7 -30 -26 -25 39 -17 76 43 -38 37 70 87 54 -6 57 -9 75 -17 -5 6 -13 16 -126 13 5 -18 -102 75 -33 48 -10 11 -23 26 -32 -121 -23 26 38 17 -76 -81 46 -64 -5 -114 42 127 65 29 102 15 49 -63 -84 -29 -72 108 -28 -19 13 -39 -108 24 -39 -50 19 11 29 -38 41 -10 7 -9 61 16 7 19 -49 33 -33 68 -93 -33 58 -124 15 49 -11 44 29 2 -1 19 -11 -13 -68 -25 15 13 -1 -123 -10 -66 109 -24 -41 -13 92 53 -8 -36 -98 17 -45 -57 -125 -71 -62 -8 54 -37 68 -92 4 -19 127 -80 2 21 6 120 -31 21 8 -27 -128 -34 -4 23 -3 -72 -73 77 -128 57 -43 40 -128 -76 -15 15 -35 21 -50 74 40 -124 8 57 14 6 -42 -10 63 13 10 21 99 59 54 60 -9 -33 14 5 24 11 67 15 87 -69 16 43 -39 22 0 100 43 -26 26 23 -3 44 8 -33 6 40 0 -49 -115 -37 -4 -5 9 -3 29 30 80 -31 22 22 37 44 -9 -42 21 27 -34 79 48 -40 11 1 33 93 -10 15 37 39 -31 -123 -12 5 -2 49 36 42 48 35 23 40 51 -69 21 68 -40 34 -4 33 2 -1 8 32 -29 73 -47 63 -15 -74 90 -11 70 73 -82 10 19 -126 -18 -33 24 52 -30 -3 -15 5 25 -12 -13 44 -39 -41 32 67 -82 49 26 -6 24 68 -38 -68 -2 -68 -25 27 -31 -15 -18 4 55 -15 -51 -66 -20 5 31 -44 29 2 -46 14 24 -112 108 -28 -78 -35 -45 63 33 40 42 -30 67 103 -38 13 -7 95 2 -36 -58 -3 24 18 46 -15 27 -87 -4 36 -51 3 89 -88 49 7 15 49 -34 -58 25 96 64 -46 -50 -45 -5 8 43 28 -3 45 -97 29 -106 -24 16 11 -42 83 -20 63 24 -60 -23 -18 -121 -52 -34 -65 89 126 -26 101 70 70 -25 14 45 -20 -36 -52 -12 78 48 37 -1 0 -31 53 75 -14 -14 -48 45 127 -26 112 30 38 -82 89 51 -33 125 -128 -46 -47 24 -36 -5 55 97 127 -19 -88 -127 -93 -64 -51 40 62 40 55 11 67 -46 93 31 22 -8 -4 13 -15 -19 24 39 -65 48 -43 -23 -19 -14 74 -25 42 -1 48 57 -40 -16 23 72 18 -48 23 41 25 6 -20 -55 22 -5 -16 16 -125 2 -39 66 14 -1 31 -30 -22 -45 -36 -44 -66 -17 38 -43 -27 21 -48 -1 63 26 -59 42 -37 43 21 -75 55 -41 108 -124 -11 -97 -21 51 -37 -9 57 2 48 -62 -39 87 55 -53 34 15 -30 17 1 -126 -15 52 -22 -65 -57 -125 -25 -70 -36 -29 62 -54 -1 -80 -66 4 -74 -52 24 -18 -63 21 75 -31 8 53 -9 -30 -4 79 53 49 -61 -87 -51 -38 -111 11 16 -56 62 -65 12 -17 56 8 -103 -114 77 9 21 -2 -34 27 45 102 7 44 30 127 95 45 126 -55 11 46 24 14 -30 -40 59 -53 -30 -125 -20 127 92 13 -16 34 -123 2 12 -41 -2 -20 -116 59 52 78 -15 7 -64 -49 127 4 69 -17 -46 26 28 -59 -45 -1 118 47 -12 -107 -53 76 -17 -24 -58 -10 54 57 -58 89 -83 69 -53 79 37 69 9 -46 69 124 -31 -21 -14 -100 -16 -6 41 21 124 -84 12 -75 5 -126 -128 -29 -47 50 -119 50 29 -52 -21 45 -75 97 -25 -128 10 41 80 106 54 -54 54 48 -7 19 -23 32 23 124 38 75 -29 5 116 -44 32 39 90 87 93 -46 -50 -49 -128 -14 66 127 78 78 107 -27 124 71 127 -76 1 4 2 -60 -15 -34 -20 11 -34 64 -44 19 -42 -25 50 63 43 -1 -35 3 -3 -2 26 -7 -11 12 0 18 -33 -23 -75 -42 24 37 5 -8 0 -39 54 -5 71 -37 39 14 -4 67 3 25 2 41 11 -34 -35 35 -10 7 49 -19 26 -27 -23 -14 64 -10 -75 -24 80 63 -49 -63 -69 77 -5 56 35 -40 42 32 -3 23 -2 -49 -20 15 -18 -43 3 50 18 -62 73 120 -110 42 18 35 12 34 -27 8 9 73 53 42 -19 57 17 -49 40 37 -36 -51 -19 -15 7 57 74 -38 -73 31 -7 -54 13 51 -28 -42 -15 68 27 68 58 39 -55 115 -34 23 9 21 2 70 95 43 7 34 86 -23 -22 71 60 29 4 68 -32 -62 -7 95 -17 6 64 -46 -18 61 -30 17 16 -51 -83 -31 31 -34 70 -87 -50 16 -38 6 -9 55 2 -54 -38 0 39 26 99 39 -18 1 2 4 51 -47 -42 -35 -62 67 -58 0 -49 40 26 124 27 17 71 85 127 -32 71 -61 -22 -25 -54 34 -28 25 -73 -2 -27 -120 -18 -2 65 -51 71 -76 37 36 42 37 57 55 82 -3 -45 2 -19 -27 71 22 -83 -112 39 104 107 -5 111 -38 85 -20 118 -124 92 -32 -38 57 103 -25 69 34 41 28 44 -22 -5 16 -15 100 -46 6 126 13 -39 -25 -96 -64 -29 -84 -18 31 -35 16 63 45 -59 -32 -67 3 -40 39 48 -125 8 -23 107 -72 -54 -69 43 7 -6 51 -28 28 23 -66 12 19 18 22 27 -17 15 121 -82 -21 -39 18 37 27 9 61 -43 -9 -91 24 -15 38 -57 -26 -2 -19 27 -10 92 -44 22 -8 -36 -45 -68 -90 -16 0 44 -21 -72 -86 10 54 -59 -2 -5 -77 -75 -26 55 36 -81 -126 -28 48 18 31 -37 12 35 39 16 0 60 -80 -124 25 -79 -81 5 36 -62 44 -14 -39 -43 58 -37 -17 -5 34 -79 -13 -103 51 -69 -98 -23 48 -52 -36 96 45 19 -33 11 37 12 -84 0 34 54 -13 -31 58 -14 25 30 -50 35 36 15 -33 18 -50 -36 -59 -16 31 -127 19 -18 -3 11 -31 50 -17 15 -3 16 11 32 106 27 88 47 -38 10 -53 3 -19 -18 -126 -43 -125 -65 -55 43 -19 -42 -11 -64 63 -1 -40 49 31 -10 13 -9 18 -75 48 -13 24 -35 -21 12 -62 67 -6 14 9 -42 -2 66 -28 -127 -104 -37 -9 92 48 -79 44 -15 -64 5 -85 -50 -16 95 -38 1 32 -34 62 -10 -34 -47 6 -58 18 -30 25 -72 44 123 -103 -32 -115 -115 -70 -59 -88 89 -22 69 111 51 2 28 -11 -34 -17 62 -7 36 56 -123 -28 -47 -42 25 3 77 18 -40 97 41 89 7 41 29 5 35 36 -48 1 36 -42 49 -13 -46 -46 110 -26 99 22 -31 -35 58 -40 -18 -44 -22 13 -31 4 58 2 4 65 72 -9 67 -27 -39 -71 34 -79 20 -29 -2 -22 36 -65 53 21 56 33 4 17 -39 23 -58 7 56 -123 17 9 -23 -36 14 69 -35 6 35 21 -21 -21 43 -103 38 49 -55 17 -48 -19 -5 -127 17 -8 25 -39 -29 -8 -49 -38 -20 32 15 -1 85 -36 67 -11 -7 -75 20 -91 -38 -123 -16 -19 -82 -18 32 -3 1 14 -63 18 -15 -2 28 -18 -116 2 45 -5 -30 9 -19 -21 61 -32 -41 1 -88 -67 5 -40 -71 30 -44 -4 -94 -60 32 -48 10 49 -2 72 -1 -9 -16 10 1 53 -38 -9 -24 -42 38 -80 -82 -3 1 -55 26 -79 127 -93 -26 -32 -17 -32 42 -39 80 -2 39 46 -33 36 -95 6 64 24 -91 55 -10 6 -48 43 30 -11 -25 -8 101 -52 56 -79 -10 22 -22 103 8 34 -14 23 22 17 -45 32 29 20 -62 7 -1 -51 13 -7 12 -21 73 -48 18 69 -31 7 30 -1 44 30 37 16 46 69 40 33 -6 -6 7 63 16 31 19 3 115 79 62 -20 -19 34 40 49 -30 12 -52 46 64 52 90 23 47 -58 -87 63 33 12 1 21 29 67 -17 13 14 15 37 10 52 42 16 42 19 -11 59 27 32 8 75 39 -35 20 -10 78 21 12 -1 -6 22 53 34 -7 67 44 52 34 52 -1 15 -39 41 35 61 53 71 31 47 -13 67 20 47 -7 12 27 -20 -1 3 1 18 -1 19 27 15 -11 0 -18 -8 -23 -21 -1 24 13 -15 2 -2 -3 -10 12 -3 0 -26 -26 7 -41 -12 7 -41 29 29 22 11 20 4 2 -12 -13 8 6 6 35 15 14 -18 4 40 24 18 17 0 4 9 -18 -52 -20 -8 -2 -4 6 14 -21 11 -5 1 7 8 -15 -12 -25 -36 14 8 -66 -19 23 0 14 2 -18 -22 0 -4 1 -26 24 -27 -1 -4 30 -27 7 18 28 16 -1 33 -15 -5 6 18 -21 -16 -8 -19 -26 -18 5 -59 11 11 48 -2 19 -1 4 20 0 -35 4 -26 14 -3 -1 -17 32 -2 -49 -29 23 -5 6 -6 1 10 17 0 39 1 6 -5 12 -34 7 -10 -3 -19 14 -44 9 10 7 11 19 25 1 -35 -36 22 5 -25 21 6 1 18 -13 -16 12 7 -6 -11 21 14 -22 -1 -11 28 -30 -6 14 -35 -11 -9 33 8 -2 -96 22 1 --53 -69 -38 4 25 28 34 31 31 17 19 26 32 43 41 48 41 19 -11 8 41 9 19 16 40 46 21 19 21 26 24 26 42 39 36 30 25 25 27 22 12 8 24 6 59 92 80 63 34 9 17 34 55 62 76 78 61 49 23 14 17 29 21 15 27 -1 75 73 70 102 63 12 -21 -26 2 -15 -14 12 26 21 14 23 32 45 82 110 124 91 41 36 30 22 37 40 32 25 25 24 4 -20 -28 -21 -12 -11 -18 -14 -15 -11 -4 23 12 23 10 -3 7 4 13 17 16 13 23 25 30 30 22 13 2 -6 7 12 15 14 11 8 -9 -28 -30 -24 -27 -40 -38 -20 -22 1 9 24 39 46 42 39 49 50 51 45 18 -7 -20 -13 13 22 34 28 7 -9 -32 -41 -33 -33 -35 -38 -31 -44 -30 -7 34 73 9 23 47 58 53 43 44 46 54 61 75 55 46 40 40 40 38 31 16 10 1 -18 33 40 2 -45 -89 -91 -73 -53 -30 4 14 20 29 53 47 42 37 53 31 18 -15 -16 34 8 16 30 33 41 47 49 42 33 35 43 40 16 -11 -23 -26 -32 -48 -35 -6 31 60 49 52 29 10 7 18 32 22 19 35 27 25 10 4 14 7 -22 -41 -54 -93 -92 38 50 30 23 15 8 12 7 -2 -13 -16 -35 -42 -45 -40 -35 -18 65 118 77 55 58 -12 14 57 56 38 43 35 37 46 62 53 70 63 67 62 47 46 40 26 33 17 -5 -20 12 26 0 -22 -31 -40 -46 -49 -57 -55 -51 -44 -32 -31 -44 -49 -48 -31 -48 -77 -78 49 58 23 16 18 31 37 46 64 73 71 54 38 21 24 33 34 37 36 2 -2 -5 50 72 89 77 52 50 46 39 31 17 14 2 -7 -27 -47 -54 -48 -40 -25 -14 -3 -19 0 37 57 35 14 10 29 41 41 43 38 21 6 0 8 9 6 19 -6 -20 -55 -24 -24 18 13 27 30 1 -8 -45 -74 -97 -107 -106 -90 -104 -125 -111 -90 -70 -46 -58 -58 -48 -44 -26 -37 -57 -66 -74 -69 -58 -74 -92 -91 -95 -79 -49 -21 -5 13 17 41 59 39 -39 127 72 6 1 1 12 17 27 26 34 32 42 48 51 46 44 33 22 20 15 6 -70 73 61 49 45 46 57 59 58 51 43 44 35 42 43 53 51 40 24 20 31 88 74 36 37 6 2 12 20 6 -10 -4 -1 -11 5 9 10 13 11 4 0 10 10 28 57 -58 -40 -53 -61 -32 -22 -60 -94 -105 -90 -66 -52 -53 -51 -46 -38 -32 -17 22 24 64 96 25 16 1 -32 -45 -22 -15 -1 -13 -25 -18 -29 -29 -29 -29 -26 -20 -16 -22 -39 -43 -21 -58 -86 -89 -81 -57 -42 -27 -27 -39 -49 -48 -37 -29 -14 -5 9 7 19 20 28 22 -1 63 32 16 13 17 14 12 11 0 -3 3 10 7 11 19 30 22 14 22 34 27 20 1 4 -6 -34 -23 -6 -3 -14 -33 -46 -43 -49 -46 -31 -18 -17 -14 -39 -87 -68 -65 -116 24 12 14 32 40 41 28 31 56 62 55 54 46 39 32 28 26 24 16 13 18 56 96 85 27 21 17 25 22 29 24 35 20 13 15 31 27 19 -1 -3 21 48 65 44 -11 -23 -49 -68 -55 -46 -35 -47 -46 -53 -64 -65 -92 -110 -89 -61 -35 0 2 -9 -14 -24 11 30 41 58 52 31 35 37 50 50 48 49 44 46 47 52 51 39 9 -8 -27 -28 3 21 48 58 68 70 69 72 72 62 56 42 45 39 25 28 29 36 13 12 21 36 -26 -20 -22 -35 -36 -27 -29 -33 -30 -19 -7 -8 -12 -18 -5 -9 -15 -35 -23 -17 -13 -6 -79 -63 -55 -59 -53 -51 -30 -14 -16 -16 -12 -37 -40 -34 -35 -33 -28 -16 16 16 -10 -70 26 39 26 35 77 116 89 81 76 64 57 54 41 37 24 20 15 31 70 74 70 39 -2 -17 -10 -35 -45 -45 -34 -27 -21 -29 -39 -66 -78 -92 -116 -126 -119 -91 -9 2 16 -43 23 24 38 50 41 39 40 53 69 84 89 93 111 122 127 127 127 126 114 101 61 38 -128 -128 -35 -33 -52 -67 -66 -45 -15 -3 -12 -20 -26 -29 -31 -34 -38 -34 -16 -6 -23 -30 60 66 57 40 20 4 -3 -8 -3 15 23 23 27 25 15 8 10 37 58 32 -1 -10 107 64 21 7 21 32 36 22 15 17 -1 27 25 28 33 22 24 13 34 37 62 88 -27 -18 -28 -37 -33 -34 -36 -42 -44 -34 -33 -31 -33 -35 -44 -48 -40 -25 -28 -23 -12 0 -23 -49 -34 -17 -15 -1 3 12 32 48 60 74 97 112 126 127 127 117 100 104 90 28 -65 -56 -21 5 4 -4 6 19 23 17 28 1 -5 -16 -34 -40 -14 55 95 27 -59 -61 -40 -37 -19 15 39 28 17 17 40 56 57 62 55 52 42 22 5 25 3 -1 0 7 97 127 109 87 75 65 62 63 78 72 59 50 57 51 41 48 45 25 9 9 20 59 -39 -55 -66 -67 -61 -55 -50 -44 -41 -49 -55 -63 -67 -72 -80 -82 -76 -51 -21 -37 -34 -29 12 20 33 25 11 0 5 3 10 21 25 30 35 32 35 41 43 48 28 13 4 12 30 47 49 41 43 50 51 51 43 45 48 38 42 45 37 32 29 27 9 31 28 34 -16 3 5 16 24 39 68 94 87 77 87 53 48 55 54 59 59 22 15 31 23 5 -12 -14 -41 -44 -29 -20 -36 -40 -17 -6 -6 9 -1 -12 -20 -30 -39 -46 -47 -53 -61 -38 -54 -87 -74 -76 -82 -70 -48 -22 -6 -19 -35 -36 -32 -31 -19 -7 -8 -15 -31 -27 -43 -9 36 35 47 56 66 75 91 70 37 22 10 8 13 15 8 5 4 4 5 15 45 28 -14 -18 -37 -33 -33 -29 -23 -16 -5 2 -14 -13 -12 3 -8 -16 -39 -58 -65 -105 -83 -38 -50 -42 10 44 50 32 16 -6 -24 -29 -44 -52 -71 -95 -114 -128 -128 -115 -60 -49 -57 -23 -37 -36 -56 -44 -47 -49 -45 -48 -53 -47 -45 -45 -46 -40 -46 -56 -60 -84 -124 -115 -69 -14 11 56 66 45 24 17 11 20 13 13 11 -6 -12 -10 -6 -14 -16 -14 -2 -5 -11 -29 -15 -2 -36 -53 -104 -110 -98 -71 -99 -124 -128 -128 -128 -114 -98 -98 -112 -87 -29 -48 -66 -33 15 1 -8 -26 -22 -25 -22 -17 -19 -20 -20 -32 -37 -38 -30 -26 -32 -55 -113 -106 -81 -50 -11 3 0 -9 -2 3 7 10 8 7 8 10 8 2 -1 -3 -4 -2 25 28 26 13 -53 -13 -33 -42 -38 -36 -40 -54 -65 -60 -58 -26 -36 -39 -34 -42 -64 -70 -40 -47 -33 23 27 17 9 7 16 30 34 40 40 46 42 32 25 26 27 26 21 13 21 28 48 55 7 -8 -41 -44 -44 -46 -37 -36 -12 -3 -1 -13 -10 -5 -5 -26 -40 -80 -64 -19 28 -81 14 32 40 21 6 7 -2 3 2 13 18 22 25 33 54 66 52 28 5 1 13 -18 3 25 80 92 76 43 24 28 48 76 72 63 60 51 33 21 15 17 8 10 15 27 -13 -8 -15 -26 -21 -18 -17 -15 -18 -29 -37 -35 -32 -26 -9 21 47 79 127 107 84 68 -25 -40 -48 -35 -28 -28 -26 -11 -12 -10 10 -1 4 2 9 0 -2 -5 -20 -16 -8 7 50 60 80 89 97 104 98 98 94 81 68 74 69 51 23 26 29 42 60 38 21 46 28 32 39 42 33 27 25 20 21 29 23 23 17 15 12 12 21 24 41 30 10 -23 33 35 35 55 69 57 36 28 33 32 30 35 41 54 55 59 62 83 69 51 33 22 3 27 34 25 15 9 1 -5 -6 -4 -8 -27 -36 -36 -48 -55 -53 -39 -32 -44 -64 -60 29 17 2 -28 -51 -54 -40 -33 -50 -49 -52 -59 -58 -49 -39 -27 -20 -12 -12 -46 -76 -64 14 -2 18 28 27 23 29 27 31 31 28 29 27 23 23 28 34 38 39 18 -12 3 -79 -84 -80 -71 -47 -29 -29 -33 -31 -28 -36 -41 -52 -47 -29 -37 -44 -37 -6 -3 9 2 -4 14 28 25 32 26 8 1 11 22 19 16 18 15 9 8 10 2 9 19 42 17 -61 -60 -78 -76 -71 -67 -71 -92 -104 -96 -96 -98 -96 -83 -67 -57 -63 -60 -39 -39 -38 -23 9 7 20 27 33 35 37 33 29 39 38 42 41 44 30 25 17 34 63 89 58 32 47 63 40 9 -7 -2 15 13 30 38 56 35 17 20 46 43 22 -25 -17 2 50 66 -31 -72 -92 -105 -90 -75 -64 -60 -51 -42 -19 -9 7 14 24 29 28 -1 -58 -65 -38 -6 -53 -42 -42 -24 -24 -47 -64 -59 -53 -43 -34 -57 -61 -51 -40 -34 -24 -30 -51 -47 -56 -96 -1 17 42 55 55 48 37 28 18 18 57 66 74 85 101 98 89 35 -7 -16 20 47 -110 -110 -85 -45 -12 -7 -3 5 1 -2 -8 -4 -3 -8 -11 -14 -13 4 7 3 -3 10 -2 43 87 92 67 65 70 79 48 42 43 32 38 64 88 93 88 72 47 27 37 44 -19 -74 -128 -128 -128 -128 -128 -123 -104 -87 -88 -91 -104 -102 -87 -69 -65 -34 -30 -34 -25 -9 20 51 26 42 26 32 43 59 67 74 62 73 77 78 65 50 34 35 60 49 14 -9 -28 -3 -1 -5 -20 -27 -52 -63 -67 -62 -47 -52 -48 -36 -21 -21 -19 -27 -30 -44 -63 -85 25 11 26 19 14 15 23 10 -4 -19 -24 -16 -15 -27 -40 -34 -23 17 31 32 25 41 27 18 5 13 21 21 24 21 18 8 5 2 13 7 -1 -6 -14 -26 -91 -128 -128 -128 33 56 51 65 66 52 45 34 7 -15 -28 -35 -35 -36 -35 -28 -12 18 68 41 14 30 -2 16 25 31 40 39 34 31 40 44 39 36 40 42 38 42 35 61 69 41 1 -14 -101 -67 -49 -50 -46 -34 -29 -36 -14 2 -4 -4 -18 -45 -64 -62 -48 -60 -112 -127 -126 -128 -13 18 68 107 127 120 77 39 1 -33 -36 -25 -16 -14 -9 -9 -5 -1 1 0 -9 -43 -7 -5 -37 -54 -58 -68 -90 -99 -84 -92 -100 -95 -85 -78 -68 -72 -70 -91 -112 -117 -119 -95 11 26 28 38 35 48 60 66 57 66 82 87 98 103 102 98 89 79 90 79 35 20 -4 0 16 22 12 -13 -16 -18 -14 -20 -21 -25 -40 -49 -45 -44 -57 -115 -127 -79 6 71 -32 -28 -9 -10 -5 -7 -8 -17 -26 -31 -17 -15 -10 -4 4 7 12 2 -15 -22 -33 -37 -14 35 37 27 16 26 33 19 22 34 19 6 8 10 5 7 43 58 29 1 14 12 -24 1 1 -127 -128 127 127 127 -128 127 100 -128 127 -128 -128 127 127 127 -128 -128 127 -127 -128 81 -128 127 127 -80 diff --git a/labs/rnnoise-model/speech-record.rnnn b/labs/rnnoise-model/speech-record.rnnn deleted file mode 100644 index f86e9efd3..000000000 --- a/labs/rnnoise-model/speech-record.rnnn +++ /dev/null @@ -1,22 +0,0 @@ -rnnoise-nu model file version 1 -42 24 0 --16 13 24 36 -17 5 8 55 19 3 36 -72 41 11 7 1 57 -16 0 -16 7 9 7 -13 -28 17 9 -39 -10 -4 26 23 11 -16 -13 -58 58 -17 -7 3 28 -32 60 35 -26 6 13 -11 -15 2 68 -19 -40 25 -44 -5 26 10 22 -54 22 -18 0 7 40 31 18 49 -32 -53 22 -45 -50 8 50 -68 -10 -52 54 -37 -30 61 40 12 -33 -27 5 47 -28 -40 -17 13 -17 -71 -44 25 61 20 -8 29 -8 -55 -54 38 -6 0 66 -23 -9 -6 21 34 0 -46 22 -48 25 -26 -81 -32 -13 38 -15 10 8 28 59 66 6 -65 -2 -20 -68 -27 -2 16 8 27 26 -10 33 31 -30 9 114 -87 1 -12 80 -19 -66 86 1 6 -91 81 -51 -85 72 4 117 -121 -125 -125 -17 121 56 99 65 -3 -4 99 123 54 127 64 -32 -1 -53 -86 52 -65 72 115 33 -53 11 -40 -3 94 19 126 127 -122 9 52 127 100 -60 51 36 2 -128 73 -68 -69 29 -4 106 -115 -126 -52 29 127 29 52 -64 96 -115 -13 126 -47 -29 40 -59 -35 -59 0 -114 63 18 48 123 -121 -48 -87 -4 30 -125 66 30 73 -117 37 70 -95 -121 -23 110 110 13 -97 -18 58 -31 -30 53 -53 -69 -6 -5 17 46 8 63 -119 -44 -107 122 94 40 14 -112 -77 -66 85 -128 -126 48 32 121 -48 50 7 -27 13 9 3 -112 127 -86 62 -51 121 -127 -114 127 88 -8 -53 50 -10 -63 -39 127 61 -20 -29 -69 69 83 43 -124 87 -7 104 51 62 8 81 127 21 126 125 106 -41 -37 -124 58 39 1 126 -10 -47 53 -24 24 -23 -13 -23 -1 51 -23 9 127 89 -125 -125 127 127 -79 12 -20 83 1 19 51 27 -51 19 51 -23 -3 -39 -27 126 3 -30 99 35 122 -9 -109 71 9 40 116 90 -20 -118 109 32 71 48 -128 56 125 57 29 -107 -120 23 127 65 -121 80 94 89 -23 -124 81 36 8 113 80 124 -78 25 -110 -54 66 -8 -30 127 25 122 -11 55 127 -8 111 99 75 13 92 22 73 -24 34 -122 -123 -57 -47 -118 17 61 -6 48 -55 -1 127 108 78 6 -28 -32 60 -111 107 -75 1 113 -45 123 -11 -39 33 27 90 77 13 67 -6 90 -20 -15 100 114 120 114 124 -97 -126 -72 1 -128 -126 -35 -89 117 6 -103 -24 30 -21 -5 -56 76 104 -11 -34 46 -98 52 43 -88 39 41 114 -69 -9 17 -32 -88 -119 127 127 114 98 111 -16 8 117 -9 122 4 126 -97 -34 -128 50 -97 41 61 -71 127 -54 5 -71 31 21 -54 15 96 39 9 -27 121 8 -89 80 127 125 115 -128 -58 39 18 127 -56 47 -78 -26 26 119 95 -120 -128 -6 -128 122 -20 -125 -80 -37 -86 -6 43 -97 -101 124 89 87 102 125 -128 -118 -26 85 114 -101 127 -31 -48 -5 91 -66 -67 7 -86 96 9 -76 8 82 -47 -108 18 126 -128 -117 117 -77 -20 -23 81 41 -9 -28 127 127 -115 127 101 86 117 2 -106 -32 12 58 -52 -79 3 31 46 119 96 -45 -101 -70 -54 108 4 -45 -49 57 -128 86 55 -105 -126 120 71 -57 73 -20 -118 -109 -21 -74 -34 -18 127 -2 -70 -13 27 -21 45 -70 -96 17 97 37 32 3 102 -124 3 -25 -21 39 65 -2 -109 -19 58 -60 -97 2 127 100 -52 119 38 46 32 3 -91 12 12 87 -47 25 -58 -64 4 80 9 -4 -36 -20 -12 40 -11 4 31 51 124 61 57 -36 54 54 78 -46 -46 24 -49 -10 -1 3 -65 1 9 -59 110 -50 14 73 -33 -113 15 17 -47 -64 3 27 -37 7 57 17 -78 -14 -71 94 50 13 -50 82 21 -84 77 39 110 78 20 46 36 -71 -18 19 75 -20 47 9 0 120 86 -48 -69 29 -6 -69 -5 -5 23 32 -81 -116 34 3 121 -48 64 31 35 25 -63 11 -37 -6 -58 118 -70 59 -6 -75 11 -3 -29 -37 55 99 8 -20 81 -31 68 -31 43 -74 60 -27 1 58 118 -127 -114 -116 123 -13 7 21 127 27 -121 -14 -54 -128 98 -53 127 126 30 118 -57 124 -116 42 127 -128 -114 -117 123 23 58 70 127 3 -119 -119 25 -128 127 -82 127 64 -122 120 -31 126 -116 -64 124 -111 -102 -112 -33 26 77 31 42 -42 -82 -50 114 90 117 -44 127 71 -128 50 -71 3 82 -63 9 46 118 64 -59 -82 39 106 -113 11 107 59 84 -17 -18 -36 61 37 97 -51 22 -127 -50 -77 83 -6 -35 -77 124 73 75 89 74 -49 -29 54 99 -10 -39 -39 9 34 58 -23 -55 -30 -81 -99 -25 43 -123 127 0 124 123 78 -81 43 19 46 11 119 43 119 -16 7 49 -93 8 -125 127 -70 -15 27 73 -1 -31 -18 -9 -35 -46 -52 -34 1 -33 32 20 -22 -46 -33 91 44 -42 -38 56 -64 61 -38 28 80 -19 -14 -55 39 -10 65 58 -25 89 4 48 6 58 -15 -61 67 -128 -26 49 --29 -110 -15 27 -55 -124 82 -100 -127 -1 -121 -32 -64 -2 -55 104 -111 27 -33 42 82 -34 1 -82 -24 24 0 -6 91 -48 -46 101 -56 -50 -13 -33 -73 -123 79 -128 -75 28 -6 19 68 116 -16 -30 -108 -80 65 -42 -41 -58 66 -36 51 48 60 35 -99 -44 6 -86 -65 -61 14 -44 58 16 -37 -14 18 35 0 -41 18 -5 11 -35 11 8 29 -29 -63 6 87 75 -38 -13 -18 -40 -48 60 11 -26 -14 -30 -13 -89 -111 -56 34 -42 16 -85 17 40 -60 114 -121 -61 68 73 -5 106 -13 24 -56 71 7 50 -57 -13 -54 -59 -44 42 61 -119 -93 -28 -6 16 -32 34 -44 49 32 -50 17 -62 6 -52 -5 -13 41 -16 5 18 -44 89 0 -50 14 1 62 -27 -68 -33 14 -7 -22 8 -29 -54 -18 -27 69 -49 -80 63 30 127 26 -28 63 48 127 -2 28 125 29 124 119 -7 106 -26 -123 63 37 95 48 113 -6 7 74 127 74 51 48 -78 -1 -33 -11 125 -103 -10 -26 78 -6 35 -60 -87 105 -4 -38 -14 64 -17 33 -27 -21 5 -53 7 14 37 45 13 -80 2 -45 8 -60 -9 -47 67 -35 69 14 29 6 -75 -68 -92 99 4 -120 -63 -45 0 -5 -102 -30 44 0 -66 -13 -86 12 15 78 19 -85 -30 61 -112 19 -50 46 -75 27 126 -2 52 22 -71 14 -31 82 30 -22 47 -65 28 106 -12 -10 36 -4 -56 46 -27 -27 -13 -4 -6 -35 -58 2 52 -3 -13 -47 -41 11 -85 -44 12 24 80 -27 -32 8 125 -64 90 18 -60 -109 126 -59 64 72 -43 49 72 127 53 83 90 107 127 27 77 59 123 -8 113 12 41 97 28 -41 83 70 -50 57 -124 -62 7 32 127 2 35 113 121 -72 72 126 -104 -45 44 92 -30 111 -46 62 74 7 -106 -126 -113 -17 -65 -113 -111 111 -74 -80 90 -10 52 -115 85 -4 92 105 7 110 127 2 69 77 3 1 11 -75 -62 37 121 115 48 96 24 39 42 67 67 12 125 -34 35 7 40 -54 -72 10 44 25 35 -126 -36 -21 59 19 -44 -8 -45 -69 -1 -90 64 -75 85 70 85 51 30 10 41 78 -11 21 30 -45 3 14 10 -26 14 18 -67 -48 -76 27 -20 -21 -9 -77 2 127 -76 29 26 -30 127 5 41 121 127 31 -64 -39 4 -49 -121 6 69 -67 5 -122 -100 -18 -117 -23 -26 41 4 -96 -81 11 -9 -14 106 -97 65 -126 127 -20 44 8 -28 -40 -102 -56 30 -90 -90 11 5 -99 1 43 59 5 42 -39 -31 -17 94 -1 18 87 -24 -39 -19 52 -73 -17 79 4 -67 2 -117 10 -9 -14 -13 -25 127 -71 -79 29 -8 -90 26 35 -24 -30 -3 106 -6 -68 63 9 28 5 31 35 -74 -75 16 36 39 -122 11 3 43 74 -26 124 45 -15 42 64 -18 -58 54 41 -9 -40 -70 -1 -16 -33 -3 38 -25 -71 -31 34 8 -51 48 -33 -6 -44 25 -72 -6 62 -36 -69 -84 17 -56 -128 -109 -14 -60 -88 -52 -127 -125 90 -7 -73 -84 -28 -77 39 28 109 117 -124 -72 -1 43 12 44 -5 -44 -50 -6 95 69 -106 -6 -15 -14 11 -32 -57 53 31 12 -4 -35 -88 -2 16 38 9 74 24 24 13 -24 109 42 32 25 31 -22 -36 -57 -27 -1 -11 -3 -28 -23 17 19 60 29 -44 74 -86 19 -50 -6 -92 28 27 -68 -31 22 125 6 -64 -20 -124 -97 -30 -75 -37 25 -105 -61 -35 120 21 4 -41 -77 -75 54 -9 -118 -35 -112 58 -81 91 64 -122 -89 -70 18 62 105 -119 102 3 119 -17 2 99 40 -21 -9 -51 51 58 103 -87 -10 116 -101 8 -43 125 -125 -72 -49 -64 -9 -6 -81 -65 85 56 -20 -19 49 -108 -38 33 1 11 -56 -9 5 55 21 -9 42 -87 42 -11 68 -37 37 -30 -118 -82 -4 5 9 -120 0 33 11 98 -71 -87 -79 -49 15 37 -70 21 -30 -34 1 -49 1 -58 -3 -44 53 -11 63 -27 -3 0 55 37 58 32 -14 -2 36 52 0 6 -74 26 -8 6 95 77 -39 -63 -3 -64 -126 57 53 91 27 95 -15 23 57 -26 60 20 87 33 -26 -12 59 -58 55 -60 -18 77 -51 -4 -77 60 41 14 -5 -8 -18 -40 56 21 42 -7 18 -12 20 -44 -17 -44 -9 -6 29 -30 76 -49 76 10 -39 28 33 63 -66 -1 -23 25 63 -37 86 57 99 -23 -48 -49 -79 3 5 1 58 -9 -1 -81 -74 39 -2 -1 107 58 42 62 -1 -42 -3 -45 -9 -15 -53 -68 4 28 5 -68 -46 -41 73 -101 48 51 38 72 -41 -97 -82 20 64 44 28 -56 25 -22 42 -60 -7 -7 79 -26 -36 34 -35 -27 -26 23 53 30 24 -47 46 30 29 44 60 -19 57 70 10 55 -63 -41 9 -86 39 19 -61 29 21 -43 75 117 43 0 106 -126 -31 38 81 60 122 -38 7 -96 124 -46 -55 79 -116 4 -110 -15 86 -64 5 124 -41 -120 -3 114 -117 -34 -23 123 108 -43 -38 -78 82 -34 61 50 56 10 41 -25 47 -28 23 -65 82 -14 -85 61 -43 9 53 -76 0 108 127 40 82 120 126 126 -74 1 -111 -73 105 121 115 -8 120 81 127 58 127 127 127 122 119 -29 127 56 126 127 87 104 17 -81 -31 -113 119 -56 121 -101 72 28 -95 -102 81 115 59 126 91 -1 77 8 80 61 33 31 123 19 15 -99 21 -113 44 -127 -49 -106 23 -19 122 16 92 0 -42 110 94 -120 -81 -102 -12 94 -48 -3 -43 121 61 5 -107 -86 -77 -122 92 -40 -75 -2 26 14 -17 -76 -15 117 12 30 75 -102 -60 4 -44 8 1 -39 5 -127 -37 93 29 -52 -41 -35 -2 58 -17 -9 -9 -18 109 -92 -123 64 72 -13 116 28 -16 34 74 -117 27 44 -71 -33 -15 91 -119 -104 -106 77 -41 16 6 -44 -19 -88 0 7 -14 -123 -126 62 64 -53 63 87 23 51 101 87 59 -55 -12 9 -2 -86 35 -13 12 -21 76 14 28 -50 -111 52 50 -28 -56 60 -1 -89 68 30 -31 -51 -19 -20 -38 44 19 118 -2 -80 -49 52 -41 48 -10 -36 -87 -5 -99 -26 -32 62 -71 -97 -13 33 -15 124 44 35 -45 17 -127 -13 -95 21 -3 49 -42 -83 -103 118 -125 -117 -109 -56 -83 -105 -116 25 -17 -82 -56 -31 -13 -81 -108 66 -60 18 11 120 -123 -97 -70 57 14 95 -20 79 -13 10 100 24 -51 21 -2 39 46 2 -52 -14 -22 -23 33 3 24 1 -37 35 53 16 -74 39 -72 -32 -28 -70 101 -6 -11 49 46 60 -122 78 -5 32 -128 -50 -67 -42 8 82 78 127 64 -24 -48 115 -5 -34 -105 -33 -22 19 14 49 -4 -86 -5 -10 -8 -18 126 -53 113 -19 62 0 -50 -18 -55 -96 -17 -62 46 -9 -34 8 82 -126 -63 -3 81 37 94 -22 26 -33 78 -5 77 104 -37 -16 -125 5 -9 -30 18 -56 48 33 123 77 -33 127 -65 1 -85 -59 77 -5 39 -17 73 -32 7 -10 -12 -39 -68 92 -45 -45 -3 20 -83 -12 49 55 1 -36 -71 127 -9 62 -22 -25 55 35 -53 97 115 117 56 74 -35 -26 38 85 -81 -10 27 -36 -57 -36 -23 -13 -79 20 -63 61 22 -70 -59 17 34 -29 84 4 77 -7 34 -11 -40 -117 -37 -122 48 -12 -29 -1 68 72 -15 46 -94 53 94 -128 -105 -53 -50 -51 53 16 -9 126 93 -15 114 45 -48 -97 -121 28 -41 -47 -42 32 68 26 121 19 -84 -18 -84 55 -20 -25 38 -54 70 54 -78 62 11 33 -45 -13 24 10 115 -74 -62 68 15 -106 -8 -10 -126 -111 30 33 -31 123 47 81 56 10 94 -59 127 -9 -58 118 126 124 74 127 38 80 96 123 102 124 29 22 -40 65 86 1 -91 18 98 56 35 39 81 73 16 23 11 60 17 -9 100 13 52 -13 -59 -6 60 77 -85 10 46 -44 -4 32 -123 26 47 43 8 64 -71 -125 43 -14 -35 -52 63 -40 106 9 -109 62 37 -14 -58 -57 29 -54 -122 -68 -126 -101 66 120 -28 117 47 -42 -59 112 -99 98 -91 -25 52 -67 51 -27 73 15 -29 47 -117 71 -39 55 25 25 -124 -19 -32 106 -127 -105 102 -8 12 -87 9 -66 22 17 -113 113 49 19 2 -52 -21 -7 116 21 68 126 -75 -66 -109 34 -64 26 -67 -113 102 10 -37 -56 122 -115 7 19 101 61 106 127 18 -6 90 32 68 84 73 -38 50 -60 105 117 -14 28 42 -114 -53 56 37 -31 29 9 23 -89 -13 -123 25 -56 119 -124 124 125 -62 10 -15 127 14 108 -32 -17 54 -30 -47 26 -52 85 -49 -45 -126 70 -121 -69 87 62 -30 -72 32 -2 -94 99 3 47 75 15 26 17 43 21 -51 -43 52 50 77 116 83 -33 5 -64 4 127 51 -27 80 30 -35 -21 13 27 -121 66 3 -36 -30 -96 -13 -24 -49 32 52 -14 7 -91 31 -72 -54 -34 72 -111 21 -101 106 1 -97 127 127 86 21 -88 -4 21 127 -85 115 90 -72 -36 -73 127 -104 -101 -25 -76 38 -75 -32 -123 -75 -96 -103 -63 -64 50 87 -123 -47 -53 -108 -112 -5 -64 -57 -120 -126 -25 58 -50 43 -56 -31 -59 109 10 18 -75 -25 -57 50 -33 11 -43 -31 44 49 28 -42 -92 48 -13 -17 66 20 3 -56 -59 17 27 -15 31 45 82 -8 17 -1 -54 44 10 54 -74 31 0 63 -38 -115 127 44 -83 -128 -123 -21 -87 -109 127 -128 110 114 61 -128 -91 -127 37 49 1 -25 106 45 -125 36 78 21 68 -39 43 17 2 -27 -74 10 75 35 -48 -4 1 62 26 -31 85 -114 -119 -25 -21 4 48 5 -97 53 -51 -93 -16 17 -109 -100 66 97 73 115 45 91 33 -18 -125 22 80 -121 -121 -49 -115 68 -97 -27 -5 -83 -69 -89 -55 -20 92 67 -103 -84 -127 -98 -109 -72 -52 -107 -126 -22 -66 25 -2 27 53 10 -22 -16 24 40 -10 -117 76 -47 -123 0 -76 -30 19 -3 -77 52 -96 47 -48 -92 19 118 13 -116 -125 18 -49 -70 42 22 0 20 17 15 9 -11 -58 4 -9 51 -77 75 3 26 125 -5 61 -75 52 52 51 16 45 71 28 26 114 -20 65 -37 -10 36 -19 -39 77 35 -10 61 93 -82 42 -57 -14 -30 -8 13 9 13 -26 -9 -18 35 -25 88 -1 23 -39 43 37 0 28 18 -61 26 -44 83 53 15 90 90 118 80 44 -4 26 82 26 47 47 -30 -35 -2 79 -55 -61 88 -13 -50 94 127 -25 -19 76 -1 -53 -48 -128 -40 -107 121 96 103 70 42 -24 65 77 58 14 10 21 -12 -27 71 -26 -79 -51 -26 -49 0 -5 -2 -52 13 -53 -14 63 -59 -89 -7 13 68 -41 -42 75 -103 71 -76 76 84 -20 -39 15 -74 120 -35 -10 -127 -38 -127 -74 -38 -8 106 -46 112 64 127 -112 126 -21 127 -62 -126 0 16 -113 43 29 44 -125 125 12 -72 -32 22 -22 26 -94 -117 25 120 -47 -4 14 10 -34 -53 14 16 -104 57 -11 -12 23 14 112 -4 -53 -17 67 47 104 -22 -10 -27 99 -56 51 -127 114 -13 -82 -125 76 0 29 -88 -117 -127 90 -101 8 -36 -18 53 -99 -7 52 22 111 -86 112 38 -59 103 40 126 14 -77 -21 -42 61 102 81 -24 95 69 124 125 118 71 18 -8 40 -87 83 1 5 42 64 -4 63 -3 -128 -35 17 23 -45 15 61 36 -20 -30 36 -16 21 91 -127 -15 -102 97 -50 11 86 119 -1 90 -12 38 -37 122 -56 60 20 -61 -60 -64 55 -34 -82 -4 127 -40 116 114 99 113 122 54 115 -51 -6 29 123 116 103 96 76 100 82 113 127 127 85 34 2 31 -1 14 35 -9 38 22 88 119 -15 26 -37 18 -50 75 -42 -96 -54 14 -30 17 -37 -4 -80 112 -43 79 25 -16 18 51 50 24 -13 82 -101 88 -18 29 -34 16 74 13 11 7 33 68 -8 -74 -101 -32 -93 -116 -87 6 -43 127 -118 -124 31 -7 -38 -28 -40 -104 -114 -125 -51 -66 -63 70 6 6 -12 61 -78 -122 -93 -105 26 124 31 -104 -87 -127 -20 42 -67 -20 -63 -24 -11 -44 -88 -30 -58 -20 6 -42 65 8 -40 31 86 -29 -62 -96 -35 -36 46 83 14 17 34 -25 15 -26 27 -122 -67 7 40 -96 -102 74 -66 -128 65 84 102 -21 72 -126 -107 -77 -101 32 70 84 34 116 -123 -61 117 -65 -84 -15 105 -1 66 -19 123 73 -108 69 119 -19 -117 7 44 104 -60 120 -93 114 -3 -124 17 -95 42 -5 -24 -45 29 -85 -22 121 -76 -102 -111 -14 126 16 20 122 124 78 -99 -19 112 116 58 105 -31 126 106 -10 77 74 -100 -103 -128 -28 29 124 50 97 27 -54 49 114 58 80 -52 -128 40 116 -91 -69 -15 71 -114 98 -120 -1 -34 122 123 -10 -51 19 -56 -41 -29 -66 -62 15 -46 127 -128 22 -128 127 -88 -126 125 126 -36 6 114 40 -128 127 -53 117 127 -126 -97 -126 125 -48 -126 -128 120 105 -95 -128 -128 -16 -93 -120 119 -123 94 108 40 -128 -115 -127 95 -27 29 -27 116 106 -116 -33 117 16 -36 -111 112 -69 -102 -28 127 -27 32 16 -48 -93 -57 46 -76 -29 -39 -108 -37 -40 58 57 18 111 -68 127 -82 -108 83 99 -87 10 -26 51 87 127 -51 127 33 -84 -126 24 109 -102 -125 -127 12 -51 6 -126 -117 98 13 -34 -63 113 122 -64 79 -116 -121 -63 -25 -13 37 -2 -53 87 66 -20 -92 -36 125 -38 37 96 34 31 45 -83 23 -101 99 60 -8 48 -26 22 -19 49 -18 127 74 10 -2 117 -7 127 -92 -60 8 95 29 29 -15 120 66 115 -73 117 -9 -10 -27 -88 37 -86 25 85 127 -66 113 11 42 -19 34 20 37 34 36 -49 30 86 86 -11 9 62 60 77 101 71 20 3 7 -2 59 32 -1 -18 25 -74 115 -14 -15 -3 17 12 83 48 58 61 83 29 2 -27 41 -17 -3 50 -107 -8 67 -22 75 43 73 -79 -59 67 -91 7 47 27 -96 -18 8 -99 -31 37 43 -65 -92 25 63 -2 123 104 16 -38 -4 -84 -16 92 54 31 62 121 124 42 -64 58 113 126 46 -65 28 -49 -79 -65 -49 -7 -66 41 -18 -98 52 20 41 30 23 -13 14 -34 100 -52 -78 5 -36 -81 -85 -93 67 -127 44 80 -94 -40 -24 -68 -118 -77 12 64 94 126 -92 38 110 90 -105 114 92 -83 20 -36 0 -108 68 65 -3 -34 39 86 100 18 85 -113 -53 99 -17 23 1 -29 -36 -6 -8 30 20 11 64 -27 -29 14 89 48 18 -77 47 74 107 -13 81 35 35 32 127 89 13 63 88 14 -16 123 21 80 -49 -55 -36 59 -65 -86 -70 -24 -46 44 -57 56 11 -43 30 -19 -23 -6 -8 100 22 -83 22 -56 42 -126 -100 109 -19 -66 15 -122 -31 2 97 38 104 -61 -37 41 127 -82 -127 -61 12 -110 5 -8 -81 -9 56 -51 25 -65 -56 -32 87 16 33 -8 84 26 13 -3 -64 -37 -6 72 -119 13 -49 13 -127 -61 79 86 45 115 -34 34 47 113 37 33 48 -68 -7 -103 112 -102 -9 60 -18 125 -48 -46 -76 112 -17 -11 127 122 95 122 -35 -108 -127 -100 -87 -76 -83 -69 -118 -23 29 9 -43 40 83 -34 -59 63 52 -27 -59 -10 -60 97 31 -14 -45 7 -6 43 33 -5 55 -93 -33 -117 30 -24 69 -48 -34 83 -42 -68 19 -70 5 -32 -7 -62 66 -21 -79 49 49 120 -26 -20 8 -16 -109 23 -3 88 49 122 21 -84 -41 59 -38 -27 78 127 54 47 -37 68 -81 -13 -80 -45 82 120 35 -46 -103 10 -82 88 19 5 26 -54 75 -107 -82 -52 68 -68 -4 10 9 83 116 7 31 -120 114 -76 124 -125 73 63 -123 -127 -39 -22 35 -121 -120 -127 127 -110 -118 77 110 106 -118 114 44 -105 -114 126 -122 12 -116 -88 -108 -108 21 -28 108 122 -99 -120 -59 -112 -125 -127 -100 -85 -127 -120 -101 -25 -30 119 -36 -8 -44 18 -23 -13 -115 79 -35 90 -20 -27 -40 -41 -46 25 32 -21 -7 -54 -21 -38 127 -67 75 -78 64 121 -57 -127 -44 -2 28 -96 -4 -128 -45 -124 -42 -8 -51 90 -115 109 -7 26 94 -51 69 -87 -2 -110 22 29 28 71 -102 -51 27 -85 -29 17 12 -26 56 49 77 -32 -12 -19 29 39 79 -37 7 18 32 -36 46 78 4 -4 24 24 -50 35 -44 23 -71 -15 93 -36 -27 -22 -100 13 -75 41 15 7 -30 122 115 -48 -62 11 99 116 -46 89 37 21 -10 -1 68 -115 -3 1 59 114 35 127 71 -40 27 -10 -24 -26 -28 -30 -123 108 18 117 1 -27 0 93 3 -127 5 78 33 117 -103 87 22 -72 2 -49 -68 0 -32 -4 -90 17 20 -113 -46 -88 91 -7 5 -9 35 102 38 -122 9 -45 127 47 11 -48 14 -62 -52 -43 -28 -79 -58 -33 -9 -37 40 14 9 75 4 17 -33 37 86 127 127 102 127 -56 -49 -9 -43 -26 -21 126 94 127 119 107 19 108 36 121 124 -1 -22 -21 -77 98 2 -21 -1 25 96 -7 5 39 7 11 -10 -30 45 48 17 69 -28 31 -6 -70 116 -56 127 -52 68 57 -62 -75 -37 -41 -25 -39 -77 -84 94 -30 -52 14 121 7 -105 114 29 --76 -101 94 -127 -128 -80 -124 -119 -112 127 127 127 126 -20 -119 -118 -110 -123 -121 -124 -123 -121 -121 -96 -15 1 78 -28 -55 16 22 23 74 8 4 -12 26 32 15 43 40 44 32 52 61 0 11 58 11 -13 16 -39 41 -100 -32 9 25 -77 19 -90 7 27 44 -30 81 21 -23 -33 -25 13 -64 -41 -90 48 2 --6 -26 117 -37 37 10 81 20 -35 -23 51 -28 -20 -51 12 53 27 -29 -19 75 23 5 -37 59 -35 5 35 -6 -39 -9 -18 26 32 -34 -16 -51 37 -64 -43 60 -14 87 31 31 14 -4 -44 48 20 13 -40 12 20 22 -59 -11 7 -81 -95 -6 -21 60 13 0 32 91 -17 6 -72 -29 -4 10 -30 -41 51 8 11 4 -20 -23 4 -6 -35 -40 -1 -85 48 -13 -4 88 -53 -81 32 47 50 49 -4 10 -47 37 -11 26 -34 -8 19 -5 6 50 50 -17 -24 9 3 19 17 4 -72 3 8 -18 -27 8 16 32 -95 14 -33 -28 30 -13 1 19 3 -16 19 21 30 -56 51 -33 62 6 1 -13 -43 20 -48 -33 -33 -14 28 70 16 15 8 -49 -73 3 -21 25 -26 19 28 32 50 -78 12 -26 78 108 78 -5 49 -7 -60 -10 14 56 -46 -40 50 -4 -4 36 -29 28 -13 -11 27 3 31 -25 -25 9 47 -47 35 -13 -5 -22 27 25 -25 20 -29 -80 -6 47 -30 -99 -43 10 -28 36 50 20 24 0 46 12 -52 -53 -51 15 -13 -19 64 45 -30 -66 -30 3 -28 48 56 31 4 -10 -12 1 -1 -12 -4 11 23 -29 29 -1 -8 26 -17 8 36 0 -11 8 19 7 45 33 56 -32 22 -17 32 49 -67 -18 40 8 3 -20 -21 -2 26 -46 25 -13 3 13 22 33 -39 -23 55 -35 -11 -23 -3 92 60 45 44 59 -28 -29 -7 -29 -42 5 -24 -19 -37 47 38 29 -93 29 -25 -39 48 7 41 -10 -24 96 -16 30 33 -46 -6 11 42 38 29 -44 -46 -91 -37 39 -63 28 -22 32 75 26 14 17 35 -61 -52 77 -45 13 -20 65 34 21 -34 -56 -14 -26 -59 -42 56 19 20 59 -36 15 57 85 -92 18 53 -3 -37 -30 41 39 73 -17 -98 18 23 0 -36 -59 0 93 -45 39 -31 -19 31 -40 -23 7 -3 -63 -8 17 -37 3 -23 5 -14 -25 -28 -7 5 21 27 15 28 -2 58 -5 29 -25 40 -5 48 -48 20 -13 -10 -28 -16 -22 -7 -17 20 22 -28 -18 40 -10 -33 3 -42 -2 96 44 26 10 -15 30 12 35 41 -28 62 26 -25 -12 -5 16 -20 24 26 -34 9 -3 17 8 -62 -2 -60 -30 -12 -52 61 29 -11 -46 25 22 -12 10 3 -1 86 41 36 -30 -20 -10 -1 21 22 10 -3 -37 -73 21 5 -25 36 -21 53 -18 21 26 31 21 -17 30 13 40 25 -31 -14 22 58 37 51 -19 13 -20 49 -49 -3 8 -1 54 23 -6 30 2 33 20 13 -5 28 1 60 -53 12 2 14 11 -18 5 -15 -11 -17 17 -9 22 -21 26 24 2 -16 2 -30 -11 -15 12 -10 28 -7 -37 -26 32 -22 -19 0 11 13 4 -11 5 13 -18 8 -24 49 -10 -8 -16 15 18 -19 5 -61 39 32 -62 20 -12 -68 7 -64 14 37 -17 -12 -50 15 60 78 35 -36 0 0 -24 5 22 11 -15 38 -10 32 36 29 41 9 -56 57 -28 -11 7 104 -72 -23 -10 -14 -30 40 -32 -25 14 37 28 -42 -10 10 31 40 1 21 -42 65 -24 -50 55 59 -27 44 9 5 14 -52 -37 -14 51 89 -28 18 -6 15 -9 4 30 27 19 -6 23 14 -46 16 71 -13 19 40 -67 -41 -25 47 -17 -21 -56 -31 1 1 -18 -22 25 -17 68 45 37 14 -50 -11 14 -16 20 38 -29 -36 -20 -4 33 53 -12 -10 11 -22 45 -7 -23 -10 63 -60 31 -47 -49 17 -14 1 -1 10 33 -4 13 -25 15 23 -15 40 19 50 -38 -79 24 61 35 -24 34 40 -32 -50 -58 63 24 5 -19 31 -77 19 2 -34 -42 -16 -17 -16 74 -38 -6 -15 93 -48 40 -14 0 1 -41 -7 -44 -42 -23 57 2 13 3 -13 22 -38 45 48 -21 26 23 12 -19 -3 69 -40 -83 -4 -2 -68 -29 80 -45 29 102 22 17 -45 21 63 39 -61 9 43 -26 -43 -16 -6 -53 50 -13 -23 21 7 31 -2 -11 37 -53 -26 -21 -43 15 10 -39 -32 -50 15 11 12 -12 -27 17 28 -11 46 -8 -14 -20 -53 -3 -3 -17 37 -70 44 -7 -9 -26 -43 -15 8 27 -10 -35 7 52 -30 8 5 2 3 24 18 49 24 28 -24 9 31 -16 -17 67 31 -47 -2 -77 10 -24 32 45 -35 -5 -5 8 30 -8 -40 59 -11 -20 31 52 -37 10 35 62 16 -21 26 50 9 7 -35 -13 -55 12 16 34 63 31 45 12 -54 -29 30 -2 -23 -9 66 20 -18 -24 -52 -41 -44 1 -31 1 14 53 -31 71 6 -5 -35 27 29 -6 -33 -33 61 -16 67 53 48 24 -29 -44 -11 -62 -45 1 -34 45 -65 -22 2 -57 -48 11 -49 11 44 -22 -12 -10 -6 -6 22 13 -33 26 -18 36 26 -43 13 -2 -13 -6 -29 -20 -32 7 -23 14 5 -28 -17 26 -33 -31 26 -12 -14 -34 -54 -40 22 28 20 35 -59 5 0 -29 -17 -20 -1 -37 39 -11 89 -17 6 41 -17 52 -26 -89 29 4 -126 -55 -43 -28 -58 -43 33 39 92 42 -17 0 2 -42 26 -42 44 30 15 -28 18 -42 -29 -24 -16 39 -32 47 10 2 83 -5 -15 18 -10 27 40 32 28 -48 -7 66 -40 -1 1 -15 -17 56 17 37 -51 -78 19 -61 -18 -9 28 9 57 68 -8 8 49 -19 -22 -20 -7 -25 -68 16 41 2 -53 27 -86 -37 21 18 11 53 -5 6 -28 8 10 -78 -2 -26 9 -3 -12 -1 -3 -1 -36 -7 -1 20 14 -34 8 29 -3 1 40 -1 58 7 24 -11 -39 25 -37 -2 -30 5 -7 13 4 -53 -20 -21 -7 16 -18 -2 22 2 12 0 -6 23 21 -19 -23 33 28 -39 -21 47 19 68 -25 13 92 17 -27 5 -7 -61 -15 -9 17 60 -13 -71 21 28 36 -57 -27 33 6 39 -22 41 93 2 -46 -22 12 13 31 -13 -9 -41 46 -31 51 -43 -27 -64 11 70 -13 11 -44 16 -3 -32 -22 47 -8 -13 -71 -45 12 35 -1 -7 -19 9 -8 54 36 5 15 -22 87 -84 -9 -54 28 -32 25 -77 -20 7 -13 -67 -21 -21 -68 -75 21 -32 -24 -88 16 -56 -39 -36 -15 -27 13 -15 37 26 -7 -14 -54 13 31 23 -27 -25 12 -39 57 -5 47 6 21 -42 7 23 -14 -11 23 -8 -16 5 -33 34 13 -36 -77 6 23 19 58 6 -30 66 47 -12 -24 27 -46 2 -83 0 -26 -90 39 -15 -33 112 -41 -69 19 52 -19 -32 -26 -43 -17 -7 -14 -16 -66 12 2 -17 -1 -14 47 9 -126 -121 -65 15 -49 -2 37 -6 6 5 -83 -60 -40 -41 88 -39 8 -36 -72 72 34 28 -45 -54 3 -82 16 58 -9 127 -46 -74 -57 -22 -67 -28 50 -16 -37 14 38 -40 -79 -26 -10 34 10 -68 -40 -9 -70 4 33 25 -12 108 -60 -7 79 -19 44 105 30 2 -74 40 78 80 12 56 -23 10 -18 8 -114 58 31 44 21 29 14 -19 -56 4 -88 32 -20 -37 -23 -26 -7 32 -43 53 62 1 23 93 11 28 -18 8 -9 28 4 44 -15 20 39 37 -99 46 -5 -9 -34 61 9 11 -55 -35 46 0 -1 -32 -57 -40 4 -18 -16 -19 -15 43 49 -58 72 -71 -1 37 82 127 -12 -54 35 -20 -37 -6 19 -74 -39 -16 6 47 68 -17 67 -35 -124 -12 80 43 62 3 -21 -57 58 -83 -38 29 -34 1 -12 64 -78 42 -21 -78 30 -74 -38 -56 18 54 -80 46 19 -17 -18 -29 -48 -33 -44 -48 42 -44 18 13 38 39 13 6 -74 47 3 -6 -25 21 -13 -32 3 -20 -5 -1 -36 19 -37 -31 48 15 7 -62 19 -7 46 -11 -15 4 13 35 35 9 37 2 0 -53 -28 57 -7 8 12 -29 17 -4 -6 17 26 -17 -17 -10 4 -8 -24 -6 7 -14 17 -6 1 -3 -82 -51 46 -11 26 -9 -25 9 30 12 41 50 -28 15 48 0 -26 -29 -57 -19 25 -45 -17 17 -42 25 -18 -21 -22 24 0 3 -5 -2 73 78 2 -41 17 22 -59 74 33 41 22 37 -75 29 9 -9 -18 22 42 22 32 32 7 -48 -66 -52 -1 43 -82 54 35 65 -56 45 81 -40 52 -77 -55 22 5 -33 -48 19 -32 25 -74 -3 36 -18 71 0 -7 -66 -7 12 -48 -45 -57 -8 20 -17 7 6 -24 19 14 -10 -6 29 33 -25 -4 55 -24 -25 -31 -13 2 27 3 35 -25 38 -14 24 22 -42 52 -22 -21 -41 -23 12 -18 -35 3 38 10 -18 -6 1 26 -50 37 -43 18 -16 -11 1 0 73 -73 -38 -3 2 -3 22 8 -20 -8 -12 29 0 38 -15 7 -4 30 -35 -43 -23 -8 48 39 -86 55 21 -5 102 -36 -54 -79 10 29 -12 32 60 45 -30 -17 45 -30 -116 27 -74 -66 -34 -25 120 -40 -5 -52 -17 -22 117 -8 82 -65 5 -18 21 21 -9 14 51 -21 -20 45 59 -56 56 -4 -48 47 -4 1 -36 29 -13 -7 28 -35 38 -100 -71 33 21 -36 52 19 33 78 37 -20 3 22 -12 10 -5 -28 1 -3 -6 -73 5 -82 -39 -49 18 1 14 56 18 4 34 26 16 -2 40 34 -41 23 -19 0 -12 25 -9 6 -8 -14 40 -11 -11 29 -23 13 22 -42 -61 2 -11 -8 -33 -3 80 -59 -47 47 0 18 -25 46 85 10 -6 -27 -5 67 -69 64 -40 -118 -25 -37 -65 -63 -46 -9 16 17 -84 -9 34 -89 -61 -1 3 -64 -70 -33 -5 48 55 67 30 -55 -29 24 -59 49 -35 50 66 0 43 74 -47 52 -50 -27 48 14 -53 67 -22 14 17 50 -28 22 68 -54 -15 -20 -25 -24 71 -9 -10 -17 40 70 -23 13 -81 35 -11 40 3 45 77 100 2 64 6 -31 42 20 -24 37 13 3 1 1 -11 17 64 -72 63 -41 64 -17 30 10 -15 -12 -15 -41 29 63 -32 38 40 0 -1 -41 22 19 -27 40 24 -87 4 -39 -41 -12 3 28 63 -57 -28 -41 -25 -13 43 74 -17 -76 124 -48 -5 117 100 -93 -58 -62 43 -37 73 -58 27 24 -22 -25 -46 -84 12 55 9 -4 1 35 10 76 -50 2 113 43 -34 -41 23 57 29 40 17 94 -94 -42 29 9 6 -14 -102 21 32 19 43 -62 36 -8 36 75 -35 -37 2 41 -9 26 -42 30 -45 42 -22 -2 3 7 49 -122 -17 -22 -1 -15 20 37 78 99 44 -26 34 59 26 33 4 21 -41 35 -4 39 19 8 36 -124 -2 18 -107 4 -96 36 19 -7 25 -95 25 37 22 -14 22 -27 -59 -31 -11 98 -34 91 -6 -63 18 -15 -45 -33 -81 83 -17 -25 79 -61 -101 12 -33 -12 38 -14 3 20 21 23 -15 27 -19 -4 -43 68 -45 -67 -45 -15 -83 -38 -39 -61 2 -28 -27 -54 7 23 -39 -53 -89 -123 -24 38 -37 32 8 -82 -15 26 48 -10 66 13 63 -63 -12 2 79 -1 92 32 106 17 113 -50 26 -57 -69 -13 18 -6 122 18 48 47 8 10 -75 54 23 82 -4 -22 27 9 15 2 3 54 -29 -56 62 -33 -17 -35 -16 -2 -14 23 27 -19 21 -38 5 -50 1 -8 -43 -46 9 43 55 -97 74 66 -43 -84 100 37 43 -21 -38 19 74 -43 -28 -50 -22 10 -13 -17 58 -14 -116 -57 27 -52 -35 -89 38 -51 -60 -45 -11 -26 23 31 27 -55 29 17 29 49 33 47 57 -13 1 1 15 -4 -13 8 -12 15 -28 -28 -2 9 -12 5 29 -39 26 52 -31 51 64 20 -47 -63 -27 34 68 31 54 -13 -7 34 -59 -1 -107 -20 -64 35 0 18 30 44 18 -67 -58 26 17 -26 -40 -37 -109 -12 21 24 -66 -1 -39 -20 5 47 38 -35 78 -19 -24 -36 26 -66 28 -59 -27 -33 -21 -55 -52 37 -21 8 54 -34 -5 -53 -38 33 1 -40 -16 4 8 -67 -1 31 -5 -33 -36 -8 -12 -20 16 52 10 21 13 7 -45 -19 -18 -30 -44 13 -13 -11 9 3 -6 -22 36 -3 -27 -37 -8 -16 9 28 -1 4 -26 39 -25 -1 14 -28 -10 -16 6 -1 -9 -15 -12 -7 20 -8 -4 -1 18 -28 -22 21 -7 35 -12 -3 28 -35 7 -22 51 -1 -29 51 31 -5 -17 -18 66 -30 -39 21 5 11 1 -26 46 -50 7 -21 38 2 -36 -1 32 12 -18 -45 -15 40 -39 -50 62 64 -12 -29 43 1 -27 0 24 19 42 -34 10 -53 100 -9 10 -92 -10 8 -55 27 -6 6 9 9 0 -16 13 -21 86 36 49 -9 -66 56 -53 -25 55 -53 -9 -28 20 65 -56 -1 -71 -15 -3 95 38 40 6 -60 -46 -69 -38 -7 42 -12 59 39 4 35 -18 -28 -52 16 52 -9 31 28 27 1 7 -1 -52 -42 -6 -14 4 -10 3 -26 -23 34 -89 52 17 -57 19 2 25 10 19 14 -3 -7 26 -38 -5 -2 -27 21 -8 16 24 -30 -32 -60 40 35 47 -60 -56 15 -12 22 -37 2 16 12 13 -46 -40 -66 -66 -56 -67 20 -10 -58 -27 -36 19 19 -65 11 11 -57 -4 -31 -29 -31 -45 -78 77 42 12 -53 44 -19 -34 -60 -42 -13 1 26 57 24 -27 39 -37 -12 44 -44 -34 -67 43 50 29 4 21 -83 51 33 -6 13 -74 30 2 52 -12 4 16 26 -32 -53 3 -23 34 -44 -21 72 10 -35 -33 -35 11 11 -4 52 -2 6 -70 64 15 -17 3 16 -14 4 -52 -73 -2 -22 -18 -89 0 28 12 -51 -23 -24 10 45 34 13 -61 -9 33 -55 -6 -5 -58 35 11 -16 22 -36 -19 -60 50 3 -55 10 -31 -27 -62 45 -64 46 11 18 90 50 -20 -36 -103 30 7 -6 -12 -24 1 6 9 62 -12 -68 -27 -79 -37 18 85 14 -11 -29 54 -57 63 47 -15 3 17 -46 101 76 31 -51 -40 -20 -60 -43 -9 15 -39 -60 1 -15 5 -41 -34 27 -23 8 -23 45 -25 33 -70 5 -41 46 5 -8 51 35 -38 -34 -67 -122 -11 -50 -6 11 10 -41 1 33 -27 -40 -7 -65 72 35 0 -30 -78 25 -11 61 -15 -44 -33 22 -51 -41 71 40 3 -36 10 40 -41 -22 -21 3 -1 22 11 8 11 49 -31 -17 -11 -7 74 -65 12 16 32 -22 -3 34 15 35 -3 20 36 14 -25 31 -4 65 11 -39 -22 -78 -28 3 -11 14 22 38 -45 -15 -32 -77 -58 17 -65 11 24 -33 22 10 -36 36 4 -48 71 6 -92 -77 71 -17 -46 -43 -18 87 -40 77 -63 -16 -26 -16 -27 18 -39 -67 88 -74 -9 28 69 -11 -37 0 -14 -68 7 16 34 27 -15 -23 16 -28 33 55 6 36 4 -59 19 93 -59 2 78 26 -1 8 0 -8 28 -2 -59 42 2 -23 -18 -98 15 68 -10 -12 69 84 9 7 21 -34 -31 8 85 66 -34 9 38 106 53 22 36 -11 35 -36 22 2 19 -66 33 38 -16 5 41 44 16 -30 -58 -66 50 0 -51 36 -1 -21 -4 -38 37 2 -36 -26 45 -18 36 20 -44 89 -13 14 38 -77 4 -5 17 7 1 89 -49 69 -22 48 26 31 43 20 -58 -39 -18 -26 79 11 1 -3 -28 69 -26 22 93 35 10 -16 -34 -38 -54 14 -43 -1 25 72 -66 -30 53 -30 -6 -11 49 24 -31 17 70 78 31 40 84 -7 118 15 48 -56 68 -40 -8 44 -35 13 8 -32 -8 -53 41 32 42 -59 36 13 36 32 14 32 105 -60 -57 -54 -11 -49 -55 43 75 19 -4 -32 10 -50 -24 4 -15 -101 30 39 6 -2 -23 54 -19 -29 -12 -12 12 3 11 31 29 1 -48 -71 -57 -41 -35 6 46 -1 17 27 -5 30 -11 -28 -6 -32 42 -9 -45 -28 -5 32 7 -22 -17 20 -9 -26 -12 -11 24 21 31 -19 42 -17 -20 41 13 -15 -97 -52 49 -21 -5 28 -9 35 9 24 75 0 69 -65 -98 -4 10 48 -38 4 -95 41 -7 -11 -39 -45 -15 -11 -59 -83 -59 -43 -41 -22 22 -73 58 -10 -46 -54 9 -13 -102 11 -50 -2 14 -78 8 -32 1 -65 -27 -24 -1 -40 -33 -54 17 -15 9 -70 23 -8 17 -25 -87 -12 -28 19 -1 22 -6 -36 11 -34 -97 -71 -11 3 -1 49 -33 -7 -28 -7 -16 -127 16 5 21 -13 10 -53 44 -70 50 -13 7 -16 62 29 -20 -78 -8 -13 45 22 41 -11 1 3 39 -11 -15 30 9 -68 -37 37 21 -33 35 -5 -20 66 -41 -8 21 20 -45 -49 67 1 46 -13 -14 -55 -14 24 -11 -3 -54 -4 7 49 -40 80 86 -29 -13 -42 -42 25 30 -6 2 23 40 97 5 71 104 50 44 -39 -6 99 47 -37 -12 12 36 120 6 -13 -55 58 72 104 -1 77 -14 26 25 22 73 17 48 -29 6 76 45 -62 11 -47 36 -7 50 -35 -26 89 5 -60 -6 -3 -30 48 -80 29 11 81 -21 32 -18 75 -59 32 31 -43 32 47 34 15 51 15 17 -6 -52 14 60 -23 79 87 19 -34 -2 2 38 -60 -36 -24 19 -15 31 29 57 29 22 33 43 58 -49 -28 13 21 15 42 -24 -30 19 23 48 -55 8 55 -15 36 53 -66 14 31 5 -46 5 44 -34 -6 30 -41 -18 -42 86 -3 37 -17 21 47 10 -10 -13 2 43 5 -41 10 35 20 -7 2 14 -38 -3 56 -32 -43 -23 -34 55 -31 9 28 -8 -53 2 -23 22 21 58 -1 19 3 -37 41 15 -6 -43 -31 -32 -41 -24 -5 19 23 54 28 5 -4 9 -37 -45 16 16 12 -3 9 0 -5 42 -25 29 -12 17 10 34 5 4 -42 -8 8 -25 42 21 26 14 17 34 -5 3 8 -15 -44 64 13 9 -24 22 31 -41 -3 44 -14 -28 -13 -5 7 17 -17 -15 -11 -1 1 48 47 0 6 -43 34 6 16 30 -23 -12 -28 -6 -7 3 65 5 25 16 4 1 14 26 -1 -37 -4 -6 -7 -10 18 -20 -9 29 7 13 13 13 17 -3 6 -47 14 39 64 -34 4 -20 -17 22 52 -56 -2 -47 -7 -31 -6 -38 -4 20 -7 -5 31 34 1 -69 18 -47 -44 -42 -23 -36 38 31 15 9 52 -28 -14 37 46 50 0 10 -9 46 1 -70 52 1 12 -8 21 65 -29 6 -13 22 60 -4 4 1 -21 9 14 11 -14 15 -63 -25 -4 -11 -15 -18 -52 12 -49 -38 -17 14 -12 26 5 3 11 -38 37 51 -21 9 -34 -15 25 -40 -26 -21 10 24 -27 -14 22 1 8 10 -29 -33 -10 -8 44 -3 15 -1 -37 -2 6 8 -35 -9 3 -7 -45 -14 -33 36 -29 -28 -18 -6 17 11 12 13 8 13 7 15 -36 -12 -17 35 39 -21 -21 4 38 -20 13 -11 -34 -18 31 89 -27 -55 28 -5 -6 -64 42 -20 1 -2 8 81 81 -2 -20 41 -10 -56 -66 28 40 32 28 -29 62 11 44 -30 -15 -55 -5 49 35 38 -29 54 37 -75 -76 -10 0 6 -17 18 30 -23 1 -6 11 -49 -22 -58 -53 -4 12 11 4 6 22 -14 2 -20 52 26 -1 -80 38 40 12 -2 16 5 20 34 -37 27 13 -61 25 -87 -57 -4 -3 22 2 -43 53 45 38 -1 -12 -13 -22 -8 10 40 -25 12 0 15 -5 14 0 11 -20 21 -1 25 -20 29 3 28 -30 -8 -38 29 50 22 -10 -1 14 40 16 -5 10 -24 -24 -40 -15 -13 16 -7 5 -13 -49 17 27 -3 -13 -18 -20 6 36 6 -31 31 56 13 -33 38 -19 40 -24 -14 11 27 50 82 -36 15 -35 -19 -3 45 34 -12 14 17 -50 -25 0 -28 0 37 60 50 -37 12 -13 15 -15 66 5 -38 -27 2 28 31 -4 27 34 -13 35 26 57 -22 -14 -9 -28 -34 18 25 20 11 -46 6 36 13 15 37 9 4 -44 -4 -12 18 -24 -1 34 5 52 -18 -74 13 21 19 7 49 -27 -38 6 62 37 -1 18 9 -32 13 4 19 -9 34 -9 -22 17 -4 0 19 16 17 -43 -2 -21 11 14 -26 -9 27 -22 7 25 18 13 -12 27 0 17 -23 -63 -31 -13 -25 -25 4 -10 -8 -35 19 39 -8 -55 26 30 42 -59 -19 23 9 0 -5 33 -20 -59 15 -55 12 15 -16 4 -4 -19 -54 -6 7 20 -13 6 -53 45 -28 -49 24 -22 -14 -39 34 15 -8 16 38 33 24 -1 18 -17 9 43 47 8 -5 13 -15 28 -13 -14 12 5 -32 -24 -29 -27 68 -45 -32 42 -4 34 2 16 23 -4 -3 0 -14 77 8 26 27 -22 7 -4 17 -49 13 15 -8 23 11 -9 9 35 30 32 -11 -5 -3 20 18 -10 15 47 10 19 -2 59 -9 -26 -21 19 -12 9 20 42 18 -14 20 -52 4 21 28 -11 35 27 -21 -4 -11 -22 -17 29 23 17 -8 -4 13 -14 -33 19 7 50 24 0 -25 30 -4 -28 30 -43 -44 -21 57 26 -8 -10 -35 22 10 15 3 1 -33 -20 -10 23 9 19 -29 12 5 -2 35 -74 33 -13 -5 -72 -40 3 15 -2 -3 -47 26 -29 10 -19 -25 -27 -60 12 -35 -89 -18 -23 1 -48 30 -13 6 -19 -53 32 3 -55 38 -17 1 -13 15 -20 -3 -6 -24 32 -25 -7 -5 -30 32 -6 2 33 -31 54 34 17 13 23 10 52 25 24 41 -5 38 11 20 24 5 -34 2 -9 -16 -17 -8 2 1 0 8 -1 0 -14 -21 15 16 -15 14 24 7 -31 -9 -28 -5 -13 27 33 34 23 -37 9 27 -9 20 -16 7 8 -49 -25 15 -8 -22 14 -28 -38 2 -24 6 -14 -35 7 44 0 -27 45 -21 -23 24 -78 7 -26 4 16 -4 -1 -36 10 18 -1 84 -6 55 38 -39 81 -61 -46 12 -13 52 8 -71 26 31 -17 -3 19 10 -63 -5 8 32 29 -11 36 6 -32 34 -14 -7 8 19 -10 -2 -29 -6 27 25 -14 46 -12 37 4 49 10 62 -23 43 -32 -5 -18 -18 -36 -10 11 4 2 32 22 -38 -9 17 16 -12 38 22 36 34 9 -25 2 -19 -9 -19 -19 -3 16 -15 0 22 -6 -21 -1 7 23 -24 19 -15 -6 -28 -28 37 10 -2 -3 -19 13 -12 -22 -7 -22 5 13 -26 4 12 17 -34 28 -6 -28 15 24 -22 1 -8 33 -28 14 1 29 13 3 -8 59 13 11 26 -26 3 -21 -34 13 40 59 7 16 -5 -18 -25 19 5 -15 14 -67 -3 12 -16 8 18 -1 43 17 -56 -6 15 22 -6 -2 -48 60 -18 11 4 -11 13 -53 -3 16 -12 -1 -2 35 -23 -2 -11 9 -17 -44 -23 3 -1 -9 4 -16 12 7 2 -14 14 -4 14 -42 35 10 -28 19 10 28 30 21 65 39 -13 -7 -13 -22 18 6 7 -16 -10 36 -50 5 -23 34 -6 -26 -3 -39 26 -20 -11 5 11 -2 22 -29 -6 -21 -9 18 -31 29 4 -15 14 -27 26 33 24 15 -43 -12 -43 9 19 -31 -13 -27 -27 -6 20 -21 1 13 -12 -8 -6 -36 20 2 35 10 12 35 -20 -23 -29 -10 50 11 41 13 -46 17 -44 -46 27 23 -6 10 26 26 -14 45 54 22 51 60 35 7 43 27 -35 -38 -1 37 -15 -24 -2 -28 -7 43 -44 -14 4 6 -18 13 -13 21 -3 -17 62 23 -59 41 36 15 -2 13 -34 27 18 -29 -6 5 37 -43 6 -4 37 3 4 79 23 -27 15 -32 -25 -1 -1 67 -14 -19 7 -4 -15 -13 -39 11 36 9 -44 -26 22 7 16 17 0 -33 -42 -12 5 -11 -16 -7 20 -31 -31 -11 -16 -22 6 11 -3 44 32 -17 17 0 -55 26 49 11 -5 14 -36 4 15 20 -6 -15 -37 -2 -40 7 5 1 22 -13 0 34 14 19 48 10 -17 20 -17 -38 -27 -61 3 26 7 -17 -41 -32 -18 20 72 49 -18 -9 -18 3 -3 18 52 52 26 6 19 6 -96 0 -26 -7 10 15 -18 -32 3 -19 44 -26 13 -46 -50 -28 34 0 14 30 -42 -19 -21 30 22 -44 74 -29 -4 -11 -2 1 10 -58 -7 57 -44 10 -13 -13 7 6 -13 -20 81 -27 -22 18 -7 11 -12 -5 4 34 -13 54 -7 2 -23 -51 -13 -9 -37 -34 49 61 30 39 -3 -57 3 -31 17 -22 16 -33 19 -9 -1 65 -32 6 -38 16 21 -3 16 14 7 29 -57 19 -33 -5 -13 53 63 0 4 37 -24 53 -39 9 -91 -1 38 -17 19 -37 -41 -12 -15 29 4 21 -15 -31 -8 12 -16 -4 -24 -118 12 -11 -64 59 -8 28 24 -69 -10 20 27 -20 55 29 -69 -14 -29 -12 36 -50 74 57 -116 22 -28 80 16 -20 -38 10 -2 -1 35 13 3 29 46 -45 -25 15 -26 62 2 -1 31 98 -53 49 -3 18 -25 45 36 -43 -49 22 -6 -36 35 42 9 -19 -22 54 -3 12 12 49 -16 35 -20 34 75 -42 -33 42 -77 -8 -15 -5 -27 -12 -45 55 -5 51 19 12 30 -33 -43 -58 -12 15 5 52 38 -16 3 0 3 -25 26 11 38 44 41 -27 -23 -7 -45 -24 -29 -13 -12 44 -3 -21 36 -56 22 -50 50 18 -9 -59 38 31 30 5 21 -1 -46 -2 7 2 -26 10 -31 -6 -10 33 -74 74 -86 -105 -30 -13 -78 33 -37 1 33 -72 14 3 -96 23 31 -19 52 -53 6 47 -52 -36 -27 -50 -86 22 29 -19 24 -63 -96 -19 -33 -49 -113 3 -23 107 34 25 -26 11 49 39 -28 -15 -31 -4 -19 -8 -12 -42 -7 -20 -6 -32 86 -17 10 -96 38 14 10 42 -74 -17 -53 13 4 26 -18 -11 76 -8 55 -29 -11 -25 31 39 63 -14 -26 -21 20 6 5 104 40 5 22 -25 4 4 24 -32 6 -29 -3 -52 66 20 -30 -28 -23 -32 8 -16 13 16 -2 29 28 -31 3 -13 -77 10 16 -3 24 3 35 17 10 16 -11 36 4 6 43 56 -11 -23 28 26 -7 -44 1 -1 15 39 49 30 16 15 58 59 -59 50 25 1 -93 43 35 -8 19 -114 -101 -25 24 27 11 -12 -19 -14 -12 40 27 14 -21 32 13 -9 -47 -25 -106 11 -22 -4 33 -55 -33 -25 -67 -113 7 -25 -34 26 16 42 -14 20 -2 5 -25 -1 -31 -85 12 -2 -51 40 18 -27 -17 -15 21 10 15 15 -54 -8 17 -72 16 -38 -29 -26 0 -52 -18 -21 -51 46 -41 13 -102 -28 45 -56 -38 90 28 16 -4 -27 1 -14 -22 -18 30 -74 25 -1 -12 17 9 5 35 5 -6 -9 -16 16 21 22 63 28 20 -10 -31 -36 -9 -40 12 -41 4 8 -26 47 -34 3 2 19 -14 5 -4 26 -1 -27 -1 22 34 -13 24 -78 64 30 35 13 51 -8 -76 38 52 -31 23 -22 -27 34 -108 0 -43 -59 17 -109 56 -5 -16 20 -8 51 3 12 -8 -45 5 32 -12 9 -28 14 -114 -42 -29 -68 -15 -34 -9 -71 -40 -28 -78 -5 -1 34 -27 23 -19 31 23 -5 -33 20 -17 -16 -25 -92 45 29 24 3 -15 -29 -6 31 37 -57 -48 34 -76 -37 26 38 111 27 -41 -6 -27 67 -48 -37 26 -62 -90 25 -69 47 -27 24 18 -4 13 26 -38 -37 37 -1 13 29 0 44 15 -41 -2 -13 31 -6 31 2 -28 0 -16 15 5 0 14 -12 43 -43 -41 23 -59 65 -11 -17 -9 45 25 -47 -14 -48 -11 4 12 -26 -20 -5 -9 -43 -11 -1 -11 -29 -15 23 -17 -3 -2 69 10 14 -38 12 30 -3 45 52 -1 19 34 -8 30 16 -37 -23 -85 -5 -11 -12 -46 29 42 -5 10 -14 23 -27 9 16 24 12 15 -8 -2 -15 13 24 -3 -3 -28 -40 -9 -32 -6 40 -20 -20 -22 7 6 19 7 37 20 -29 -29 2 -24 34 11 64 46 -34 -7 22 3 -9 20 0 30 -7 -20 16 23 -23 7 -17 -2 11 -29 10 35 5 -5 -13 -23 -9 9 -6 23 6 13 1 -23 -11 -22 -20 -33 2 26 5 -16 37 -10 -15 25 -10 -19 -14 -3 41 23 -1 -11 -8 9 27 9 -5 15 -10 -23 -13 -34 -3 -6 -10 27 -23 -23 45 -79 -10 -43 1 6 27 -51 -17 53 1 1 14 28 -26 24 81 24 37 0 29 -25 33 23 0 -37 -17 55 -51 -12 -32 -66 59 55 -22 -36 52 47 0 3 -3 -52 -31 -55 -30 -4 -15 27 -51 -43 29 18 -5 42 -4 -57 -48 -62 23 -5 2 -18 -5 1 -14 -28 -30 -29 22 -53 68 -16 11 17 -15 -28 -4 48 19 -32 -12 -50 31 -37 5 1 -52 2 6 13 27 1 26 35 -56 -10 6 19 3 -21 3 4 -19 -28 -20 -25 -17 8 -13 -5 41 -38 15 28 -5 0 -10 46 -69 17 4 21 -41 -8 -15 -24 7 -2 0 3 11 15 -1 2 13 -2 -12 9 1 -12 -66 -5 27 32 -25 5 -19 -14 8 -31 3 -31 -34 -36 -25 -48 35 21 -11 -30 6 -32 -52 9 -12 24 0 -2 -33 24 35 16 -34 5 -24 -28 45 -4 10 7 21 -43 6 -12 -32 15 24 -15 -7 22 -19 -17 -6 -25 30 38 -21 2 -23 8 22 -6 -7 18 0 -15 19 -46 9 -17 55 12 0 -10 14 -11 -4 -34 -21 -27 -3 -2 10 4 -15 15 23 -39 22 -4 -27 22 -4 35 28 10 19 3 -34 -17 -10 1 -43 17 -33 -24 18 -18 7 -8 -15 27 -18 3 29 -17 38 -28 4 -32 4 2 -21 4 -20 1 -20 17 46 19 25 -27 -23 -1 23 -16 -14 29 -25 -21 -51 41 0 11 -23 -3 -31 9 -16 14 -51 -36 -18 -5 -76 43 39 52 35 -21 -3 -29 -1 14 -25 -15 -67 27 4 2 0 8 -4 -42 25 26 -49 -5 -9 -26 31 59 18 7 -20 7 55 -46 -40 -56 2 35 52 36 -23 -21 -15 3 58 6 -24 27 -12 -11 -14 15 -36 14 -16 15 24 3 40 -7 -39 -24 22 -36 -23 1 -21 6 -45 2 15 -53 35 20 13 -11 31 17 9 -16 -58 45 -23 -10 7 43 14 -24 -47 6 -46 -65 35 5 -11 15 -16 9 -17 -33 -7 -10 -8 -20 -39 12 -20 24 30 -46 -19 -25 -28 31 20 6 23 15 32 -38 10 -26 5 -40 58 6 -11 5 -15 5 30 -10 11 -17 -46 -13 -5 32 -40 42 44 -30 -14 7 27 -15 -19 -12 32 -7 65 76 13 -17 46 41 42 35 -7 27 89 -23 29 -18 16 42 27 -49 30 -30 30 61 8 -15 57 -20 29 36 2 26 -34 -46 -24 32 12 30 1 -19 -1 70 -33 53 -37 -6 38 53 43 -40 29 -36 -39 -31 2 -5 -10 13 -32 -10 64 -53 -17 21 -36 2 -36 24 39 4 -15 28 -46 -41 18 -10 -28 35 8 -23 -43 -11 10 44 17 -2 11 24 -46 28 10 25 19 -22 17 -1 -41 -49 -40 -19 20 25 43 -21 -57 -1 19 58 -16 -8 2 -19 0 -20 -18 -30 -5 -16 19 -21 -35 -32 -28 -19 15 33 9 37 54 39 -20 -6 22 61 -20 31 -20 46 28 -36 54 -78 -24 97 -18 75 40 -50 45 -43 41 26 88 15 -70 -21 -17 44 6 -69 -11 72 6 9 -2 2 18 15 70 2 5 49 -43 63 -32 67 37 -28 -45 -77 -12 63 -46 24 28 -3 -40 -54 26 -26 -46 10 39 74 -23 -48 88 12 -13 -58 51 -7 65 29 -49 17 9 38 74 12 47 31 9 -16 10 4 54 14 28 67 45 52 51 74 -31 1 -45 2 3 -32 -37 9 32 -23 28 0 1 -11 14 12 -54 0 12 24 7 -22 16 3 -31 15 4 18 -1 -26 -13 47 10 -2 37 4 4 -77 -20 -36 -23 11 -26 -44 -47 25 19 12 2 1 -2 -1 1 34 -20 14 53 -31 32 37 -51 15 102 17 -19 -15 29 -18 -6 -17 39 43 56 28 0 -28 10 -61 -10 -26 41 -27 15 65 -72 -11 10 23 -28 27 21 -2 69 14 34 -28 21 -32 -7 27 -31 -16 -26 0 4 -14 48 25 -4 4 65 3 11 -32 -4 -25 41 -52 7 -21 -103 41 -13 49 -8 -1 -62 4 1 -21 -9 16 -6 20 36 37 -33 -10 16 17 63 3 -23 -30 11 3 -16 43 -27 -44 16 -36 -37 0 -28 17 32 37 31 5 -17 25 -7 -11 -35 14 17 -19 -31 -15 6 -4 -8 39 15 -14 4 12 6 -28 -18 -27 27 0 5 -55 0 -28 30 7 14 -20 -2 -13 -17 -28 -3 24 8 12 11 -12 5 48 -30 -50 -28 -30 15 14 19 23 -3 25 26 -16 14 20 -1 -18 0 -69 61 2 -20 33 -12 23 7 -12 0 54 12 -1 -29 -21 -6 -22 -29 -36 5 29 -36 -4 -31 -43 38 -21 47 8 4 47 -16 5 -42 40 -28 -46 3 28 18 -27 7 1 26 9 -21 2 -20 25 0 25 -26 4 43 -10 -9 -24 -37 -1 -13 30 16 14 -9 -35 -39 -27 22 -32 -22 20 -19 -32 26 16 21 10 34 21 -34 -21 -5 -2 15 19 -3 -3 14 -22 30 2 -18 -30 -24 -7 -19 -12 -16 -1 -22 -9 6 -20 13 -26 -8 -9 6 -34 9 36 -18 12 8 -33 -6 23 -37 5 11 -29 -7 62 12 10 14 -50 -49 -24 50 -8 5 25 -6 -6 -27 -10 -59 -10 41 52 -55 4 -23 28 -15 15 42 3 38 -8 -76 34 -36 -59 -1 3 -15 46 24 69 56 31 -29 -29 -5 38 42 6 7 4 -43 -31 45 11 27 41 -18 -21 -8 -9 -8 21 -26 -3 41 40 14 -10 -42 -25 -17 8 -52 -17 54 25 44 5 21 25 -6 15 27 2 24 18 -17 46 -12 43 10 11 5 -7 -22 4 2 -38 -12 -14 -16 6 -25 17 -23 13 -24 35 22 29 41 -26 0 22 38 37 -8 40 -12 54 17 -10 45 -8 -17 31 -27 -12 -38 0 32 -15 -8 -8 5 40 32 -21 -15 -41 6 -7 -27 62 -30 -24 21 8 -56 -36 -37 -27 -41 63 0 -1 45 65 2 61 9 -18 -11 -24 29 -55 65 -23 22 -29 -36 56 -5 -32 58 13 61 28 -37 -11 -70 14 -92 -22 -4 -9 -6 13 -50 -53 -16 -19 -14 -46 2 -5 -7 -18 -25 -5 6 -11 -11 -14 34 -6 -37 -12 8 -4 58 -31 -20 -15 -19 -7 -59 -7 15 -15 -13 53 22 -16 -31 -57 8 -1 67 25 -17 -25 4 35 -6 10 -61 -63 4 -23 -7 -19 31 0 23 -7 31 -10 0 -6 -16 -21 -9 -11 -13 -18 2 -18 38 -8 14 6 13 16 -60 -25 38 33 -19 35 -18 -22 -7 -5 10 14 9 6 42 -25 0 2 35 24 15 42 3 -12 12 0 20 -10 -5 20 9 -15 15 -8 -3 -6 8 19 12 -14 -20 -6 12 12 -10 14 -4 42 -20 -24 13 -4 21 -9 11 13 -6 -12 2 -21 -5 5 -1 -7 1 0 -34 20 -31 4 7 -12 -11 -25 28 -2 41 15 -9 -22 -18 -28 5 14 -10 10 19 11 12 -7 -41 1 35 -19 -32 -10 -25 8 19 6 8 -30 -12 9 -24 -19 15 18 -8 -22 -14 -43 -17 0 2 1 19 18 21 2 2 8 3 0 -4 3 -6 19 16 7 2 -2 3 0 -9 0 -3 9 -18 10 -1 16 0 -16 13 -4 -7 8 -4 5 6 14 16 20 13 -6 -1 2 -1 -5 9 -13 -3 8 -16 0 -17 -16 28 47 -6 8 11 14 5 -16 26 -8 21 32 -20 -9 -12 -5 -2 -60 12 -25 9 -15 -26 -33 -55 10 -39 -10 -19 -10 -16 36 -21 5 -6 26 15 -9 16 19 46 14 26 -1 -26 -4 10 13 40 49 -8 5 17 -22 38 -35 40 2 72 -33 62 -8 15 -17 15 33 -23 -111 -32 53 37 6 41 -48 1 -5 46 -12 5 -13 1 -21 11 6 18 -23 12 -36 -51 -12 -7 23 -32 -14 16 15 5 9 15 16 -37 9 13 -42 -16 -21 13 1 19 -31 27 13 -6 2 -24 -18 -10 13 -23 22 22 35 -1 19 9 -7 -34 8 21 1 8 -9 0 25 -36 22 -26 8 -29 -44 -19 2 -19 -28 13 22 -4 43 14 -23 11 10 -13 40 35 -24 -40 5 -48 -17 1 29 -6 -1 22 -42 -9 11 14 -9 -21 16 -24 -14 -22 35 -13 -5 -9 -1 22 -39 4 -27 -34 7 53 -25 -17 -8 13 12 12 -50 29 -35 5 -53 10 38 46 -25 5 -55 7 -43 39 5 36 -18 -32 47 10 -29 45 -28 52 2 -35 -40 -18 -83 4 -14 -14 -18 10 41 11 -3 33 -75 -10 36 9 -51 -116 -4 9 -6 50 15 18 8 -54 -23 19 -18 -24 -1 -33 1 57 -35 30 5 17 -5 11 0 -34 9 45 32 39 -25 30 30 30 22 -34 -13 22 6 22 14 -23 7 -66 14 15 -22 -31 30 28 12 -27 -24 33 -6 -45 -55 30 -56 21 11 16 -17 3 -19 -41 -2 17 14 -27 -7 77 -5 11 12 37 8 -17 43 0 0 20 -8 12 29 -13 -28 -27 -52 -4 -29 49 30 8 -10 -74 -4 -5 -17 -8 57 15 2 26 18 -60 22 47 31 -47 2 -16 -13 -38 -9 -35 52 4 7 -3 -52 -21 -50 -21 -41 33 -23 45 -3 37 36 3 -3 -37 40 -7 -15 -43 32 80 -24 -122 -1 22 29 -3 13 -3 13 -50 62 -25 -38 -19 -17 -20 31 -15 33 -14 11 -26 -18 -47 23 26 24 -11 11 -18 -18 23 20 0 -2 22 6 -8 -34 36 -37 -18 -2 -21 18 -41 28 12 24 -84 -16 18 -6 -17 16 -26 -23 71 -4 -16 -70 -38 -9 32 -33 23 -25 6 -27 8 -22 -75 44 -18 -120 -43 4 64 11 -58 82 -1 -53 -11 7 35 -43 -14 67 -26 -3 4 70 4 7 51 10 -16 -18 -12 -52 21 28 -16 18 15 8 9 34 -39 0 -37 4 -45 -16 -38 18 28 39 23 -36 -15 51 -41 -4 39 105 48 -52 -21 -1 -5 -12 0 98 -26 100 -63 79 -44 33 -77 -43 81 -33 -93 -42 16 56 -22 7 -18 -8 -50 19 36 -66 -35 9 -34 -10 -23 -56 -27 47 -45 20 -6 23 -32 13 16 -10 -36 -9 -35 -20 9 -7 -7 14 -3 -9 -19 -19 26 2 -12 11 -10 30 40 -4 100 13 14 -45 -35 7 2 -39 17 -40 -58 10 9 -13 -65 6 53 -51 51 -19 13 8 -74 -36 46 45 31 16 26 -9 -43 61 48 -20 56 -10 -24 -20 -23 80 23 11 13 1 -36 -47 27 -40 -82 -26 -36 -2 -16 -11 -13 39 64 -70 0 -64 -8 54 0 -36 8 59 20 -10 -38 3 -119 -63 -36 -14 1 14 58 -70 30 24 -45 26 -44 17 -41 16 -66 23 -42 -19 73 -2 -35 -8 27 31 -85 41 94 -50 28 -27 5 -12 87 -20 -13 -16 -55 -2 -6 -1 -5 -19 -62 25 -59 37 -5 7 -10 17 -25 -25 -24 -22 32 -28 -3 -24 -2 4 -3 6 -33 -15 9 -26 29 13 35 27 50 20 -38 29 1 47 -11 -19 -22 -121 -9 14 67 125 -88 -78 -30 -69 42 -58 89 -34 -18 0 -13 -95 114 40 21 -119 53 -40 127 -87 114 30 -127 -74 127 -75 125 24 40 66 -52 -35 -117 -96 -11 5 73 -6 19 124 -42 89 -13 19 -127 -7 7 79 -6 58 126 -71 127 5 -116 91 -44 -113 90 -7 4 -66 -45 28 -56 -101 -70 -87 -45 -31 42 97 -53 37 82 -9 9 -28 25 -24 28 -99 -104 15 -31 -24 59 78 -15 -118 -34 -68 35 -9 -69 107 -110 -45 79 -11 66 127 -28 -5 -124 42 124 1 -7 -127 119 -10 -93 99 67 18 36 8 -31 -33 -74 32 36 -120 -80 -34 72 22 63 63 21 34 123 9 -29 -126 85 -36 126 -68 -18 10 13 -4 20 -27 -101 9 99 -31 120 -88 120 -56 11 -4 58 3 30 -51 7 29 -122 -22 -32 -125 5 -91 114 127 -31 -61 2 41 -102 63 -44 -74 70 49 -29 -5 -7 112 88 126 -37 68 49 51 -126 109 -87 -126 -56 -73 81 4 -15 121 -39 -68 -65 10 127 -26 -100 63 45 105 78 -37 77 -10 79 50 -65 -5 75 -8 -42 -1 -128 -104 115 35 -14 -7 -70 3 -20 -54 -20 11 -97 -85 -128 8 -26 112 78 35 11 39 118 51 119 -117 -99 -60 -127 10 38 -24 -125 86 -77 -26 24 -5 -6 6 34 -23 -127 10 6 -66 24 2 -7 12 -62 25 32 -31 -42 48 -104 96 -125 84 127 48 125 -54 -36 31 -33 117 -42 22 127 -8 4 10 -89 49 52 96 18 57 43 42 119 14 -90 -86 -78 -100 -22 -6 83 -87 7 126 -28 38 31 -18 -110 -86 -14 38 120 108 56 -69 40 127 -54 15 -55 68 -77 55 -125 9 63 -7 28 31 -82 67 36 52 39 61 94 -39 126 -57 -70 125 65 -81 17 -35 -12 31 35 -24 -41 -116 -14 34 49 -17 127 37 -124 -10 39 -125 -35 69 126 127 -31 16 -60 -23 25 -12 29 -26 -54 26 -55 45 -63 -106 -10 29 14 -42 41 0 127 7 30 127 122 -67 55 -11 -54 56 -97 42 -112 -98 44 -60 47 28 64 -30 0 -34 -17 0 -127 42 27 56 -126 3 46 48 -114 108 -73 8 -59 122 44 30 -41 -37 -29 85 69 60 11 -87 -26 87 20 16 79 -99 -35 -48 -54 -39 -42 13 62 44 45 49 47 -91 -103 -116 -4 124 -23 -18 -128 74 66 84 20 72 127 48 84 -26 -8 20 57 109 64 127 40 -66 13 120 -95 -128 -93 28 -126 122 3 -47 -2 44 55 19 -101 -120 70 -8 33 127 -45 -97 -76 84 -70 -22 33 22 -17 22 -26 61 -44 14 -27 4 -120 -85 55 -52 -104 43 18 19 -35 30 -126 -91 104 126 -7 -7 -46 125 -123 2 -48 -56 40 55 6 -53 -50 124 -34 -48 -14 69 -23 -32 -101 -105 26 -6 -2 -87 108 9 77 -75 -24 -79 28 87 20 15 -62 64 24 26 59 67 -31 89 -60 -73 -46 -58 -21 -61 44 -111 -127 -26 -93 -105 -52 43 -123 -94 -10 -53 -90 -71 -33 22 -85 37 -105 -125 -76 -127 125 127 64 -123 83 -94 90 0 -9 126 38 -81 77 -83 61 59 126 -120 71 -4 14 -124 92 127 -6 -3 125 36 -127 -79 127 127 -127 -72 127 -38 -9 107 -19 16 124 103 -128 -65 30 -70 28 -66 21 -121 -43 44 -69 -127 60 -119 -36 4 -81 32 27 24 78 55 -18 -47 -127 64 25 -51 65 125 -3 -95 56 -20 -105 -9 56 126 118 10 -21 -18 -128 66 40 -19 85 126 -128 78 -127 49 40 26 -127 -116 -126 -65 122 -2 -22 -58 -20 107 127 -85 0 -84 -47 -120 -23 74 -21 -56 -100 5 -128 7 -53 -8 -125 -41 -107 -11 -53 -127 -54 36 79 11 26 -128 -75 52 53 -27 -37 -124 7 -109 -22 -128 -40 125 -4 -84 99 103 -34 -20 -127 -107 -92 119 63 82 123 98 40 123 93 -124 33 43 34 -31 -113 16 123 2 126 75 -48 127 -50 -61 -35 31 62 37 127 -128 58 122 112 -39 -96 58 32 126 -16 -67 39 -87 -108 127 39 -108 65 -1 -96 22 18 67 78 24 70 127 47 2 127 -127 23 39 10 -94 99 23 8 -45 56 -12 115 117 -38 27 20 92 20 101 -71 116 -122 77 -109 -23 -80 62 50 -69 127 94 20 -108 101 41 -69 127 41 -77 -16 -26 -126 126 -115 77 39 127 -70 73 -126 50 50 55 127 -10 12 10 22 72 45 54 2 18 -45 -120 -122 -100 -63 0 87 -7 -63 -92 4 -96 -50 -21 -75 -86 46 -124 -4 -39 -125 55 82 -59 -72 -67 57 1 22 -92 70 118 -100 1 37 -110 -120 -127 -9 -47 -122 -83 54 125 -122 -25 17 -65 1 94 107 -10 11 5 17 -34 35 57 -124 52 103 36 65 5 -14 -97 -35 -4 -40 -6 23 5 43 -67 126 99 -38 12 127 127 96 -19 109 -68 -122 -118 -124 -31 3 34 48 46 47 -16 -13 -29 37 8 107 4 79 104 -3 -61 -88 48 -127 -18 24 -18 -106 39 -33 85 -81 -91 -11 127 -125 122 -33 22 -127 -90 -101 -126 122 -128 10 51 -81 -15 65 56 -13 -83 16 -125 10 95 21 28 125 45 -59 -127 -65 34 -127 52 114 127 68 -89 8 -29 46 15 53 -122 52 -71 -30 -16 124 50 -43 8 -100 -71 30 101 60 -18 -113 126 -122 121 2 12 -59 6 0 123 113 35 3 -18 40 -68 59 5 -9 21 9 17 -6 111 20 92 -100 -32 -36 -90 -98 2 -79 105 54 -99 13 -85 -34 100 -123 73 28 -128 16 75 67 0 -85 -7 0 55 38 -121 -123 -127 60 2 -19 -1 -125 127 -127 -122 -81 -34 60 72 83 96 115 126 -25 33 -98 -30 -89 -125 96 -37 112 86 25 -68 -46 -31 -127 127 -6 -116 10 45 -125 -104 -127 124 -124 -76 -122 -115 -75 48 -14 76 13 36 70 -87 -39 -127 115 -66 -93 127 -17 -69 -117 -127 116 117 120 -36 123 0 40 -33 127 -43 103 -5 -127 -37 84 -3 97 126 -127 36 25 116 127 61 3 125 30 42 2 56 -56 125 125 -59 -122 20 -117 77 -79 106 29 109 127 53 17 -88 93 -120 -28 125 59 32 -28 -75 -127 39 9 -59 -126 18 20 -126 -1 -62 36 45 27 123 -29 -78 106 110 37 13 -126 81 127 -52 -68 72 -54 -127 65 -85 -117 -102 29 -38 -12 -52 -106 -13 55 -6 37 -52 -38 126 -120 127 -98 -114 -128 28 2 -78 -53 -30 117 -44 69 -51 -14 127 34 -5 23 -40 -128 -8 21 120 -2 50 -118 -82 -66 -73 88 126 -28 21 41 17 -91 91 48 -121 3 -13 18 123 -127 68 -9 39 -23 88 -121 15 121 99 127 80 49 53 -76 114 58 -83 -125 127 66 -123 98 120 55 114 27 -20 47 -2 13 -111 5 124 107 4 78 -22 -35 127 3 127 32 23 122 30 99 21 58 -56 -123 75 111 -128 -105 -97 -127 11 13 -44 46 46 -35 -108 -49 47 -128 13 28 -24 -81 121 127 98 -69 27 29 -11 23 36 -128 126 3 -114 -122 1 123 6 119 127 -86 -127 -119 -14 37 -1 24 41 -4 39 -36 -106 0 -49 -127 -79 -114 -116 4 -2 120 -63 -86 -9 -92 110 31 73 -70 -42 -119 -14 -47 127 -117 108 127 26 -18 -18 -92 -96 84 -2 -96 50 57 -52 126 88 50 -94 -36 95 -26 -31 91 124 -13 -85 -82 127 67 87 94 93 59 -103 -40 -22 -19 -62 55 127 42 30 39 -114 -19 68 85 24 -26 67 -125 -1 75 124 -22 -106 -18 43 12 -128 105 117 -67 120 -31 -72 -71 -113 48 -78 -93 18 -58 -86 110 -118 -102 -128 -56 -15 -128 6 -88 -43 66 48 69 112 -49 127 -31 -127 127 127 31 -11 -25 80 -90 -60 -39 40 -32 -124 78 -31 -71 -112 4 -26 -49 -61 -74 127 -32 14 94 -42 50 -101 8 -2 127 -79 48 -125 56 20 40 -20 49 -83 17 36 45 107 -41 119 -52 91 -56 127 -69 -13 52 -31 87 -21 -29 -17 -92 127 -117 -78 71 6 -1 -63 -127 -9 112 -76 -123 70 -63 42 40 125 29 -104 -83 -127 63 76 49 -114 39 82 106 -127 70 48 9 9 -58 -18 -54 -31 56 66 1 -61 -114 47 46 -55 4 127 -13 100 83 29 -102 10 -48 29 126 20 19 32 -97 26 97 -37 -85 127 -112 29 1 -115 0 -121 -100 -41 -120 32 -116 -11 126 67 1 -46 -127 -94 -69 -124 127 125 -24 -127 5 -107 39 -108 46 125 52 -126 115 -41 121 95 -122 17 -45 -101 -122 40 9 -126 3 -48 -21 -6 -125 117 81 20 14 -115 -72 7 -40 -60 46 -11 103 27 -56 -124 4 106 51 -128 -61 -89 -78 124 30 -89 -119 51 75 127 -35 123 127 123 95 79 -121 101 54 59 27 -105 2 25 -81 126 15 57 -52 111 -9 25 115 95 -30 121 95 40 59 124 124 -84 2 -48 76 -18 -126 39 65 0 -71 -59 3 -57 63 -58 -37 28 -50 -8 9 -56 0 -75 125 -125 -51 -46 -119 73 8 -96 5 24 45 39 -28 -126 9 16 -78 -105 -23 -65 -3 -88 -47 -36 -49 -38 -125 34 -95 39 -78 -87 102 84 -12 105 -38 -23 73 -112 17 -35 -125 -32 -58 -26 2 -49 88 34 -52 -14 -57 103 -91 -60 -20 -49 93 -115 75 26 87 -47 -53 -125 57 -5 -87 48 9 22 -67 -12 102 -72 96 37 122 -48 -48 -128 124 -36 -126 92 -74 1 5 -128 6 -115 -77 -75 27 -50 -45 39 127 -75 125 -115 -48 110 -16 -126 -126 -1 51 112 126 123 29 127 -89 69 55 62 -113 -30 112 127 -35 -128 -10 -124 97 -6 -18 -54 -123 -125 76 86 -33 -122 83 -85 125 -128 -61 0 -32 -93 32 -24 -5 -86 -114 -20 -3 -128 -12 -47 11 -92 -84 4 49 -85 -127 21 -43 -6 113 -114 -97 40 -125 123 -109 38 -16 125 29 89 -91 -31 -97 127 -71 41 -19 -54 -121 115 125 -46 105 -127 127 8 120 -9 -14 127 4 34 24 -69 123 72 57 -115 83 -56 95 -76 -52 -128 -70 61 21 -75 10 26 -125 -18 33 -91 118 -127 121 -94 126 -60 17 -57 -54 -41 127 -43 107 -118 -18 7 58 3 -41 5 -121 -15 -128 -61 66 21 71 127 -128 124 -30 -121 -18 -119 14 53 116 73 24 -72 84 108 118 17 -106 126 -86 -127 -106 0 -37 38 -8 18 -125 -108 71 -3 76 4 -117 -92 -81 20 34 -10 69 -65 -35 -90 98 -11 -41 -83 37 0 -47 -38 -3 60 -73 -111 49 -124 127 82 -123 -7 49 49 -82 31 78 -126 127 42 -64 35 93 127 -55 -125 37 -33 -90 -25 74 -69 -84 -32 -118 111 72 -127 -88 83 47 92 -39 121 -45 -19 2 -116 68 -91 30 39 14 125 99 -35 127 -128 40 -68 -64 -63 -126 -116 127 -6 -17 -45 -29 -84 105 126 -77 -66 -45 66 127 122 35 123 71 127 -53 -34 -127 126 -22 49 80 74 -19 -62 -69 -118 -41 98 -128 -98 -103 -94 -77 127 11 9 -68 -81 111 -9 97 25 60 127 -56 122 115 -36 29 -20 57 -66 85 16 -126 -53 82 -127 -5 47 -29 -125 -122 -73 -80 9 80 -90 112 -59 -29 6 -125 67 17 -68 -39 26 -39 18 17 14 34 -98 -48 -83 126 113 -22 115 -29 -10 -89 70 -123 24 -32 121 44 -126 92 32 -66 -50 20 84 63 -16 101 -97 -122 -127 -120 -4 57 -51 81 -112 63 -120 -80 100 90 -123 65 53 -9 -27 87 33 62 -23 118 -78 126 -126 127 9 79 -9 -47 -3 27 2 -7 41 -97 -53 -29 -23 4 46 -34 -4 14 26 -31 -72 46 -29 -29 -52 41 -80 -16 6 4 -7 31 -3 15 82 77 -27 -2 28 -52 124 -48 -13 -28 23 -21 35 -20 -114 37 -86 -43 73 -49 92 90 32 51 -17 41 -4 -1 -53 32 -25 -24 -16 -15 -43 84 44 -74 -4 -10 -54 6 23 -38 2 -110 -16 47 8 27 18 -6 57 -42 0 20 -12 17 -47 61 22 35 127 122 71 -24 -46 -9 -6 -22 15 42 -9 19 37 -126 2 71 46 -38 -45 -22 -120 45 -127 -84 -17 107 -73 -24 75 -5 15 -23 -63 -14 3 -43 35 -126 21 -68 -19 41 -45 126 2 -34 10 25 -12 43 4 9 -128 -3 124 -43 19 0 64 58 41 -34 -28 27 -42 -39 18 -5 -14 -47 -1 -81 -3 50 -58 12 6 -87 -5 9 119 79 22 5 -20 75 14 -32 38 -68 -12 -21 -33 51 121 102 -69 -120 -33 2 70 -35 -62 -25 -47 -38 10 78 5 51 -23 33 -105 84 -28 78 -99 16 -77 -127 -49 -49 -107 -60 127 124 127 -45 -80 74 -65 47 38 16 -68 -6 -3 -79 -9 68 109 -50 -65 -114 -13 69 -10 -117 81 98 -32 -19 -38 9 60 6 39 39 -15 -10 -125 -17 -17 94 -120 20 -71 -39 39 -63 55 65 74 -15 -53 -25 -102 25 -124 -50 -123 46 15 -125 -76 -54 -41 -30 7 -52 9 -56 -8 28 -128 -10 -126 -9 127 18 -60 11 6 -74 -74 127 -34 -44 94 78 -37 37 -41 -19 127 -12 -12 -92 64 22 -28 37 6 8 -17 22 121 -34 -22 -5 39 -7 74 5 -14 55 -78 26 97 -72 -101 -99 93 100 100 38 -38 47 68 100 9 28 -5 116 115 63 113 28 -103 -55 -124 31 -65 -124 -116 -51 -31 65 -68 -13 -22 -62 38 41 87 7 -10 19 -23 -10 -47 -21 118 -25 -63 121 -42 126 -36 -46 56 -93 16 22 4 127 94 18 15 -115 43 124 89 -14 30 52 124 127 -57 71 84 -82 -45 56 10 -6 -46 85 -40 4 -66 -59 -126 6 127 33 -94 -56 -41 91 33 -73 77 -66 47 50 -40 -113 121 -60 59 126 4 -112 -66 105 -126 95 -61 -40 6 -29 84 21 -9 -117 -45 -90 -28 19 -18 -16 -21 -36 32 8 22 -115 41 27 61 -4 47 2 -18 1 -43 -35 -79 12 -103 127 89 68 26 52 31 5 77 5 99 22 -30 25 -126 -45 -2 -32 -46 -71 21 -6 -32 32 -125 -14 38 -49 -8 -17 -42 -21 -84 -49 -49 108 -2 -95 59 -3 7 -43 -49 -9 65 127 32 -128 2 -62 114 -99 -4 54 -35 -110 -18 49 -1 -64 121 -114 -117 -62 -27 -89 -99 18 127 12 30 -71 65 63 114 -82 67 34 -53 -123 15 -70 68 -49 -16 -13 -94 -28 -70 -34 -81 -127 -58 -46 25 -123 107 -25 8 -127 -29 78 -41 -12 71 28 -45 34 -8 -42 -96 116 12 103 -127 -117 25 -46 -124 -109 3 -114 13 -26 -59 -5 65 -39 -40 112 80 103 18 28 -47 -7 23 -77 32 122 103 -19 -24 -22 -101 55 -127 92 103 -4 13 -17 7 -104 36 -33 -80 95 -104 51 87 -12 -23 -59 -127 -58 -93 16 97 -44 -124 -124 -12 -67 50 -120 54 -7 -5 -83 95 -32 -107 24 -23 -124 -56 20 104 -106 20 -77 21 53 -126 -18 -33 93 127 -111 -62 39 -1 -87 -24 52 -120 -47 9 51 76 -21 -128 -50 126 -71 -25 89 24 -102 51 -76 16 -25 4 -65 19 74 -125 34 -101 -46 52 -33 -90 -45 -37 66 -120 -18 53 121 -93 127 -24 125 -24 12 127 18 21 73 79 21 61 -103 84 -78 67 -11 -63 -126 2 -5 97 -33 -49 -114 1 -69 0 -65 -26 61 16 -13 -38 -79 53 102 19 35 91 54 22 5 -7 -49 -16 -119 -5 -106 19 101 -8 102 68 -8 123 15 -52 -8 -110 -86 89 -5 -66 -56 107 -35 77 115 90 -63 -44 -22 -58 -62 -10 -44 -66 -80 -86 86 -44 -41 82 8 90 -80 -109 67 -87 127 56 24 -127 -33 -25 -127 -22 -52 -65 -5 -45 -73 -4 127 25 -106 20 -78 -31 -21 -47 -58 53 1 47 -87 76 113 82 -60 33 -107 -60 -62 -13 40 1 -3 -103 -65 -9 -46 1 -29 -70 -5 -51 -2 44 14 62 127 30 -107 -62 15 71 -88 95 -29 33 39 -52 -14 12 -27 27 -17 36 -60 2 -41 -74 6 -48 -46 42 -29 38 36 64 -22 0 60 10 -37 22 -24 3 1 -32 11 -16 -27 77 -71 63 8 93 5 -113 -67 -49 126 -64 14 -105 47 -89 -49 12 34 -73 -27 -16 -17 -53 27 12 -6 -4 -31 -84 9 -126 62 -113 -11 44 -114 -56 41 -14 -53 72 88 -61 92 26 -127 48 31 -24 44 -28 -12 50 -14 -12 -11 86 85 106 -32 31 -74 -34 -8 -27 34 1 -8 -125 -77 8 40 38 43 5 -33 -119 -6 -14 -27 -19 92 6 33 -69 -42 -8 -82 101 -5 34 -25 92 -88 24 -37 49 62 -12 90 38 -49 -3 -23 3 13 -39 -7 -115 98 58 -125 17 -39 56 -73 70 -13 -93 81 98 2 -2 26 64 -58 1 -35 -59 -41 -83 50 -9 -41 -16 -12 81 74 37 -49 99 53 -18 -36 -36 127 58 0 53 -25 124 -84 12 6 -56 23 55 67 -80 -43 -61 -14 33 33 70 109 29 49 -6 -14 47 -28 27 -121 2 -80 91 32 30 28 57 -86 42 0 -69 50 -8 -64 -19 27 -43 -11 42 39 78 119 120 -112 -19 -49 23 2 -52 8 -1 102 -46 -10 72 26 18 -10 -21 1 40 -45 14 27 45 77 -86 -102 -71 38 -36 9 -59 75 16 -86 58 -12 73 49 -30 -54 -128 72 9 75 46 -25 68 42 34 11 88 -56 -32 44 13 111 -70 51 54 -33 85 -55 24 102 -67 106 -74 -18 -76 121 -18 -32 1 -4 126 -70 79 -32 123 108 58 -8 25 -25 -37 -38 107 2 -47 -70 63 3 91 20 21 25 -33 -31 15 47 -1 -13 -3 -10 7 -8 -45 -3 11 33 -33 86 -22 42 -7 3 117 18 -23 -42 42 33 40 113 24 -40 23 29 -30 -47 32 -51 60 -14 5 25 -19 -34 2 -90 57 127 70 -33 -2 123 -44 -26 38 68 15 -15 -81 47 32 99 37 71 -2 44 110 127 -11 -50 77 19 21 36 -8 8 4 -1 -2 -96 -17 -60 105 29 48 14 -8 -121 -52 -2 118 51 13 -46 43 -33 82 0 -59 -49 21 63 -8 -36 -28 20 35 -73 65 -76 19 -19 -13 35 -119 127 -22 86 37 -57 85 -74 -35 -55 -90 -72 18 -67 -38 82 -17 -29 -114 5 78 -7 3 -18 -22 17 5 -63 -114 -109 127 10 -61 35 54 -59 -116 -45 7 56 85 -71 74 84 11 50 -114 27 7 84 -108 37 -22 56 22 76 15 -123 -7 -5 91 13 -27 109 22 72 68 -27 -86 -91 18 32 -30 0 27 51 -89 -76 74 -85 4 -30 -64 -24 14 -25 58 -18 -101 -102 51 -14 -66 15 -75 -9 127 -62 -95 -2 19 66 64 -15 -34 86 -94 30 -3 107 -12 81 -80 -1 71 -74 -61 -79 -124 -45 27 -10 -6 -102 -30 6 -38 -39 24 -23 37 -91 13 -34 -8 32 19 125 115 121 98 22 -10 47 8 40 -3 47 -20 21 23 -113 -118 -14 6 5 33 -11 -120 86 76 34 68 14 127 77 126 8 10 80 39 -22 -27 -21 -57 -44 -60 -42 -12 -14 -24 10 -24 37 29 -91 77 52 43 -80 106 -23 -70 -23 66 -82 -31 49 -43 -3 -92 -51 35 -30 -15 -8 126 98 17 -45 71 -38 72 27 55 -26 89 -18 -60 -16 87 40 36 -40 -115 -13 39 -49 -34 -117 3 -55 2 -17 60 -14 -70 -33 -38 -4 104 115 16 -61 -38 36 -4 5 35 -28 60 15 6 27 -3 63 -122 27 -7 11 -16 -45 10 30 -28 -20 0 104 33 53 -32 37 86 82 -16 14 46 32 -9 -55 87 -15 -87 5 -7 62 14 -61 41 20 -89 -20 -58 88 62 20 -60 51 125 -126 -53 -16 21 61 16 -11 -31 -44 24 -71 80 -104 -8 -75 -123 -70 -60 -70 29 22 -128 62 -23 17 -28 31 2 -36 -27 -21 111 4 127 32 -18 32 -125 70 -123 -25 46 -36 50 38 -20 85 -28 -26 35 16 -117 59 12 -52 -16 34 36 39 -6 127 8 -106 -26 -3 24 -1 -34 -28 -92 40 -63 -124 80 -15 27 -24 -36 -6 15 23 15 -52 -8 2 28 -105 -126 102 -9 -64 27 -36 93 31 -11 13 9 -47 23 35 8 16 -3 -11 -90 -40 -72 52 105 -23 -9 -105 9 61 127 63 -3 10 -18 -51 20 15 -28 84 73 43 -128 109 99 -126 -128 51 -71 77 -62 -63 74 79 26 -35 125 -14 -101 8 -109 31 -126 -126 -51 38 -52 -73 -3 31 -127 -80 -57 -67 8 -15 -29 -28 -12 13 125 -127 -2 63 24 127 -51 31 53 -91 -65 42 -127 -57 122 -62 -68 101 7 -63 -104 106 -102 81 24 -125 -42 1 82 54 -118 -1 -55 5 10 -122 -128 -125 -124 -123 -63 -20 22 62 44 28 -114 35 -128 -65 -127 -31 -41 127 124 95 126 61 127 -37 63 -125 127 -48 -76 6 -47 39 -82 6 127 6 -72 -91 -115 -22 127 -68 -125 28 -87 11 25 -126 79 -10 -102 -63 -47 53 16 10 -41 -28 44 127 -11 17 29 -30 -31 -78 32 73 85 -76 -128 -3 54 -125 -118 66 -56 105 44 -19 -71 53 77 27 40 47 95 -12 13 5 -99 26 -11 39 -74 -90 74 -3 -127 12 21 71 -23 -102 -52 16 103 -13 84 11 -69 26 13 18 87 40 -11 -119 -32 34 54 3 111 -24 -69 -2 104 -32 -35 80 -127 8 10 -124 72 6 -79 19 -80 -4 -92 -29 -10 0 -128 -125 -122 -115 14 -62 88 64 35 -90 0 6 -125 46 -52 47 4 115 22 52 126 79 127 0 -39 -125 127 -3 -69 -41 77 -42 -18 65 127 -69 -44 -30 -53 -123 -6 33 -24 -34 -108 -41 -21 -74 29 -37 -121 -78 23 -46 125 92 -38 -23 -11 32 20 -21 72 19 -14 -39 -34 -17 125 12 -74 -41 61 118 120 102 -106 104 -4 -124 -58 -30 126 85 -37 123 124 81 127 -71 28 11 108 44 21 127 36 102 127 29 7 93 127 -77 -121 127 40 -74 33 127 -38 25 -89 -57 18 57 -117 68 54 -41 127 120 20 62 -89 -65 99 22 -118 -85 -127 -7 67 126 -29 51 14 1 -123 29 -37 48 64 93 54 -11 127 121 98 -21 40 -31 -34 -28 119 17 73 96 121 92 45 -23 -83 -91 -67 115 123 -19 -124 64 -20 -103 10 46 46 -30 18 95 -66 90 13 54 77 15 -128 121 121 84 -30 -43 -15 127 -117 -124 62 -56 -36 -128 20 42 17 -54 -34 -125 71 -38 -46 14 11 127 -38 -14 103 35 127 58 9 123 72 -16 68 -61 -126 -128 16 -84 74 71 79 73 -12 76 -127 -5 126 77 -37 100 -41 -12 -9 114 29 -16 -126 -125 124 50 -15 17 -23 -85 39 105 105 10 5 113 127 60 -82 91 -27 12 -37 122 11 51 10 33 -73 44 -128 121 -77 -7 14 119 -21 -91 62 -22 -120 -62 -100 4 52 -42 -16 36 127 -3 73 -12 -124 33 11 20 65 127 109 71 -28 8 29 63 50 -75 -15 62 -127 45 -13 -8 -15 -58 -55 -3 -106 38 -113 -26 74 127 -30 -36 -52 10 109 82 -127 126 -6 43 -36 -4 -108 3 -7 -65 -125 127 -125 74 19 -122 28 46 57 -35 -66 -17 48 -21 5 15 86 -23 42 57 -44 -42 -58 -41 5 -90 120 -77 -128 -85 -49 62 25 -30 -55 2 -118 -82 50 106 -11 127 29 -44 -7 -27 -99 4 73 -34 121 -35 -69 28 75 -109 55 -72 122 -2 21 94 56 123 -95 114 -107 7 127 114 32 102 69 -16 -94 -30 69 127 -106 47 51 46 71 -112 48 -73 -42 -49 22 -43 62 -21 -6 -46 122 36 113 -109 -127 -111 70 40 101 127 123 -19 -8 -109 16 36 -45 16 -42 66 -128 52 -32 -42 -7 59 7 8 55 -20 -11 19 126 60 -19 -57 -45 -49 126 -42 -28 -43 62 77 58 -7 6 -71 3 -53 -34 13 -107 127 42 24 8 -81 -1 46 -4 41 99 -48 18 -98 6 -62 -60 -55 9 -16 22 122 16 62 -32 -33 47 -128 80 4 -57 4 -17 84 -36 -125 -73 -56 -3 33 -24 122 82 -126 -5 -39 -126 12 94 3 25 124 -67 -90 -59 -125 -8 -15 -69 5 -128 75 87 102 -91 -89 -70 5 34 37 64 -9 -126 -39 -68 63 -110 75 41 0 29 -98 94 -59 -33 0 -67 -21 47 -17 -19 6 127 66 80 1 -126 -59 26 91 21 82 42 -85 34 -65 -38 83 71 -1 83 -68 -128 3 -4 2 9 -31 37 -52 -121 -17 32 45 -26 -39 16 30 127 102 -24 49 57 -37 -67 -67 -14 56 -56 117 38 -107 -87 90 -71 -10 15 3 -14 -3 111 64 126 18 7 54 24 59 -75 87 -15 -61 77 60 -5 -64 -28 25 28 43 10 -28 25 -57 -1 -24 -36 71 -44 15 12 38 -48 1 -3 30 -14 23 6 93 -5 -61 67 10 22 -48 -47 23 -15 5 36 -24 -7 -24 37 -47 -10 83 -4 9 -17 -110 103 54 70 -2 -49 59 15 11 -92 51 70 81 38 -8 -75 -27 83 33 8 20 17 34 40 11 -26 -92 14 25 56 62 -43 11 -124 24 -81 25 81 5 7 53 -23 27 49 3 -11 -15 -111 -127 -24 18 -4 3 2 14 11 29 -49 26 16 -56 34 39 -40 7 8 -1 79 43 3 28 -11 -7 9 -128 8 -52 -55 30 35 36 -15 -31 -33 -38 -10 0 18 -17 4 13 19 2 -9 -33 -110 -65 7 -35 -10 61 32 21 63 8 -126 -41 -16 -12 -38 -121 27 -47 -123 26 -55 -6 21 53 -31 -13 -45 2 -8 21 -102 38 -95 -64 -1 15 -58 -53 -35 -19 8 -49 7 63 92 -15 -18 -58 -20 48 -15 24 -4 17 -73 -2 43 -21 38 -43 -109 -40 57 -63 99 5 -10 -81 -8 49 13 85 106 -15 -128 -72 42 30 -90 86 -4 -44 -108 17 -20 -43 -16 -13 8 103 18 20 -94 24 -47 -5 -27 -23 0 -8 -3 -5 -17 -8 -6 12 37 -29 6 -40 -77 -95 -10 5 -126 71 -29 36 41 24 -61 -18 -16 39 15 -62 11 -72 -5 31 33 45 -28 34 -45 25 8 -27 15 1 -22 --36 -43 8 -25 -42 -31 127 -51 -25 26 23 31 73 -36 -37 72 15 -2 -103 -56 -58 0 -15 -38 -45 -46 30 32 20 -1 -33 36 -78 44 4 12 -63 -95 40 -18 21 48 -26 -5 24 -29 82 -17 -21 44 41 -12 7 19 47 -38 -26 22 -60 57 -51 -36 83 47 -30 -11 -50 -14 66 -85 58 14 46 -18 8 6 -4 -42 21 7 74 8 -12 28 11 -94 0 -11 6 -12 10 -23 11 3 16 24 -29 -20 45 17 -4 -71 -97 -62 -26 -76 4 20 -61 43 20 -42 4 -9 81 -45 -55 -9 -62 61 -31 100 -11 4 -13 4 -21 -49 -15 77 -14 49 12 -30 -7 4 36 -73 -11 82 53 -45 8 42 125 106 75 70 -44 38 18 -41 -41 32 -33 -48 91 -104 -128 125 78 42 -64 -40 -101 64 76 -56 -28 -69 -36 -30 -37 31 28 -41 -120 -49 -61 7 -68 26 35 36 -15 -21 -58 -59 -6 27 80 16 0 40 -6 -38 -60 -60 -1 56 0 21 -55 -44 -88 38 81 47 18 63 14 67 2 22 36 -49 12 -26 35 1 -6 -64 12 -87 25 -46 24 38 -3 46 -74 27 -6 30 -8 -13 70 22 -30 -30 -85 -27 32 -33 19 -24 -14 -1 -124 33 -48 -70 -17 -38 13 -115 37 -42 -64 -19 40 -31 -8 -35 -16 -89 -17 -16 9 -85 36 59 -11 -4 14 6 47 66 3 -16 30 -75 33 -5 -92 51 9 118 -110 -45 -82 50 -65 -39 46 -7 15 68 -26 24 56 -126 24 42 -17 -12 5 26 -6 -113 -5 76 127 32 93 12 51 -6 14 84 126 52 -43 47 -6 48 20 -7 8 1 59 70 37 8 15 30 33 -6 -38 56 -65 37 -38 53 -58 -19 -5 -7 -32 22 1 113 -10 -66 -3 -37 125 -26 41 -102 -63 127 -64 -2 -24 -27 -9 -13 -3 -42 -105 99 75 72 -27 13 4 27 11 16 -36 36 -19 -112 -100 9 10 42 -30 36 -128 -26 -77 -6 -63 94 33 -37 43 75 -71 -11 -85 -7 -62 -73 67 -4 13 -2 70 -41 -20 4 -6 54 40 52 -32 117 -36 15 -13 6 -45 -71 30 27 43 18 35 -16 45 39 20 -33 38 55 -93 67 79 72 -8 -29 9 -9 -60 -18 47 21 127 90 -37 39 35 31 -10 54 1 39 48 -68 18 8 -64 -99 29 -40 80 101 -46 60 -47 -48 -47 52 -10 -2 102 21 -22 27 54 -6 -46 2 -46 -87 4 -30 -56 -47 1 51 -24 -17 15 -17 -15 7 -5 -60 28 -32 -67 -48 2 11 51 28 12 -95 11 29 -26 33 16 21 27 -10 -12 -15 -60 7 -85 -9 -1 -34 13 -47 -37 -31 7 -26 -13 13 32 10 12 1 -22 54 33 9 12 -47 11 -4 -20 90 -35 -17 34 -38 72 62 -62 -6 0 37 -117 40 -48 28 12 -15 -11 -76 -39 77 34 -2 49 89 -49 -15 56 -32 4 -39 -76 -44 -29 22 -12 10 -50 25 11 -55 14 83 -90 60 62 32 17 9 -10 78 28 50 31 4 -30 -30 -13 51 -10 -15 57 32 -124 57 -69 -43 -1 9 -51 57 -76 127 55 -53 24 42 46 -36 -26 6 -72 51 -41 -2 20 43 27 57 -51 -46 30 9 1 35 -18 -83 18 -2 66 7 15 -44 50 82 -32 35 -64 4 -11 -4 -4 -35 0 -61 -26 -45 -26 -20 -27 -12 45 -26 -94 -29 6 25 24 63 -44 -18 126 54 4 14 -35 45 -3 89 -23 11 -44 -29 -8 18 25 80 -24 15 41 0 -27 -40 1 17 -4 -29 -26 9 24 -33 5 -22 -40 20 29 20 89 40 18 -18 101 17 31 65 -39 -15 42 19 -46 36 -87 -80 4 -66 -28 16 87 -9 -50 51 -66 -102 -33 -26 -13 -7 -87 15 28 -14 -5 -69 3 -66 -17 -56 -11 71 22 72 -49 -39 -26 -60 32 18 76 24 -2 42 15 50 -45 -8 -19 -22 -75 63 23 -40 -44 -21 100 -88 -38 -51 13 19 -46 -6 14 -50 -11 -27 27 23 13 6 8 -6 82 -18 1 59 -34 62 -31 84 -60 53 8 -1 23 74 50 -44 -53 32 -7 20 -44 54 -39 -109 -127 2 -117 -61 -21 31 40 32 5 -10 -19 -7 -66 -127 45 -19 17 -126 -1 22 -16 35 -21 -73 -14 125 -18 -13 -35 75 63 87 -7 8 -11 -52 -30 -79 -48 -13 28 30 -79 -17 -56 10 -17 3 -30 -10 2 34 -45 -63 28 -37 39 -66 -9 58 -67 -18 15 -37 25 66 87 8 7 -111 53 -50 44 -36 111 22 72 67 -77 10 -7 42 22 -1 26 3 103 22 -65 -10 69 -48 -44 -30 -21 18 -82 2 -13 -43 1 8 87 -28 -56 66 -58 -10 5 23 -33 47 -48 -46 -46 63 22 -112 -58 -29 -22 -13 106 27 25 -31 21 71 -36 20 9 51 -19 -63 91 -38 -77 5 52 -20 78 27 20 22 -1 -12 -20 33 57 -25 9 39 -49 -28 39 -60 -15 74 35 -35 -14 9 -27 39 -127 -103 19 55 20 73 59 25 -29 42 10 -17 -11 -18 -29 21 40 12 53 -68 -27 -77 -68 67 111 -15 -2 -29 31 -20 5 -128 94 -11 43 37 -31 -35 34 73 33 46 41 85 -85 -42 19 37 -68 -2 5 -2 -3 11 -61 93 -63 23 -106 74 97 -48 -46 -27 -23 31 1 48 -8 33 54 -128 -90 37 -9 -63 44 127 -45 -35 7 -33 16 -2 19 -48 48 48 -71 -62 -63 -65 -38 -83 -5 -95 -32 23 -41 43 -11 50 11 -16 -78 -54 -12 -34 14 -27 57 -49 -18 -2 109 -10 -7 -30 30 -21 -126 -18 84 39 12 7 -38 -40 -34 -8 -16 71 32 -40 -8 74 -11 -47 44 12 14 0 96 33 -17 -51 -9 25 0 -13 42 27 -25 -88 -23 -38 32 -28 47 -3 28 13 80 14 -18 3 -15 4 19 -15 -12 12 -3 -114 -37 -72 13 -3 126 -62 -1 -99 41 56 11 -117 31 12 -12 -21 60 -6 87 13 110 -125 44 -75 5 -7 5 126 53 46 -27 5 2 -2 56 66 -20 -127 -58 21 -70 15 28 45 -25 84 -58 -114 16 -84 -42 -49 -64 92 51 56 36 -77 -53 12 -115 -5 -17 13 23 -25 -25 -14 -123 10 44 126 111 -53 1 -40 38 21 3 1 -107 45 9 69 -36 12 55 93 102 -20 -10 46 -75 24 66 21 7 48 122 19 9 59 69 -37 31 25 -43 -1 -23 30 -46 4 1 -6 -41 23 -93 79 60 77 -60 -77 -23 53 -31 2 -127 7 -25 28 74 8 17 14 -79 -14 -82 32 44 -124 -55 65 -41 -25 21 -56 40 -70 -19 -14 -15 -57 32 66 13 -19 -44 -18 2 -1 48 -22 1 -30 -29 -59 -11 44 -65 4 118 26 53 40 -31 -15 24 -36 24 13 -18 20 -5 -2 12 -36 14 118 10 43 31 -8 3 -28 2 -26 9 -48 89 24 -13 47 55 -48 11 61 -22 -25 45 15 -6 -94 14 37 19 6 46 9 -33 -27 -128 -15 -20 -126 13 -97 21 -45 7 14 37 94 -35 -48 -5 24 -36 -1 38 -93 -82 -39 95 10 8 -68 -27 5 62 8 37 -37 63 -79 -3 -88 -3 -108 -37 -16 45 67 23 -1 44 89 -56 -26 -66 -11 -32 80 -28 42 -31 -67 17 76 32 -50 -36 75 -36 -62 -86 8 12 -62 21 4 73 -15 17 -44 -13 -60 37 -5 1 -11 -8 53 -13 26 -31 101 39 9 -3 -59 1 -27 19 80 -7 39 -16 -15 54 60 -24 -53 106 -128 5 58 -8 53 -19 -16 -2 58 4 -3 40 9 -60 -29 -14 17 -91 -58 -21 -17 -1 -12 32 -94 42 38 18 -61 9 -7 11 38 -35 44 5 -22 42 -17 -18 -35 26 -9 61 80 -10 -5 39 34 44 -100 41 -10 28 103 -30 127 37 80 -31 -34 60 -8 -65 -121 -5 11 53 -30 -18 25 20 37 80 48 -21 -29 -44 -76 23 -15 -112 -88 -108 -53 -41 -116 -22 -2 18 -19 -75 49 22 -12 12 97 -32 -42 90 32 -53 2 42 64 -36 86 45 25 50 -81 32 -27 -15 -115 -8 -90 -6 -13 11 68 42 18 63 -26 40 24 -89 62 69 33 77 40 54 -44 50 49 -68 9 7 16 43 108 -58 -92 16 -15 -57 72 -56 33 9 -31 70 4 -52 -5 -72 -21 -19 -47 42 -30 -39 -24 49 -7 10 -15 25 -6 -68 49 98 -28 86 2 70 -1 75 32 31 4 -6 -91 -13 -59 52 -23 -13 37 68 45 -10 12 9 -22 38 35 38 -71 -24 27 -60 73 -37 28 46 38 -49 43 -120 -4 -70 -40 -75 42 -33 10 26 -78 5 9 -55 17 4 -75 -90 -2 -127 72 -47 -43 -40 -15 -11 -23 -49 -20 -9 -13 66 -8 46 -8 -8 -21 15 30 -111 13 -9 80 -2 -29 18 -38 24 28 63 -21 49 9 23 -14 68 4 14 27 53 -6 -14 25 -33 105 80 -29 78 27 64 -9 -1 38 -31 -10 2 88 -17 55 -91 -39 2 -7 -98 46 -62 -33 59 -71 -127 -47 -91 43 -19 50 2 -79 55 37 -113 26 -12 -17 -17 -23 25 61 3 52 -30 -22 -2 -13 33 -104 48 97 62 11 -32 31 55 14 26 57 53 71 3 -39 -8 -2 -29 -45 -72 21 10 -2 -95 -127 -43 -10 -2 19 -24 -13 -60 -12 14 47 124 -83 13 -34 37 -26 13 9 7 -14 -6 -80 -32 -104 55 9 -77 63 -19 -13 -25 92 -19 -15 70 7 0 -8 -29 -69 -15 18 -36 -11 65 -6 -24 -10 -37 0 -55 -17 27 21 59 -18 -18 -21 -60 -115 74 37 -3 12 -34 116 -12 -77 -57 -3 -95 -11 29 77 -29 -23 37 41 -26 8 -31 -42 -9 -43 40 -50 16 -19 -45 41 110 40 101 -44 -37 52 -18 1 -23 -23 50 -21 5 50 -125 125 0 -121 5 -24 8 -47 -42 58 -36 -96 27 17 9 -58 -20 -2 1 97 11 75 46 33 -15 70 -25 -9 27 1 -58 26 -18 32 29 -100 -25 -68 -42 -72 85 50 -19 -115 -91 -63 8 34 -11 2 -10 -84 -64 33 15 -22 40 -11 -28 67 -12 36 83 -61 -26 29 57 24 -5 30 20 -51 21 90 -98 -48 77 20 0 44 24 49 -113 -3 73 -33 122 10 -76 -1 92 -114 -42 49 -36 99 24 99 -51 -102 51 69 -107 74 90 2 67 9 -6 -48 -98 0 37 52 36 89 0 -39 -8 -58 -70 42 1 -46 42 21 59 -50 36 -15 -77 -32 83 70 -90 -56 -11 -71 1 70 5 22 52 64 51 40 -15 49 -29 -56 46 87 -29 -46 -70 41 -21 -21 -84 -86 43 23 35 -23 22 31 37 -46 37 36 -29 126 -22 30 -72 -22 20 9 50 23 4 46 -64 52 20 -98 22 39 40 50 24 34 -30 -16 65 17 11 -45 17 2 -28 84 46 -12 -13 -7 44 -39 -20 33 54 -6 82 85 55 5 54 53 -18 -108 106 10 11 42 56 -79 -47 -97 -36 -38 96 25 19 5 2 -14 -34 28 53 -46 73 24 -24 -43 28 -33 -9 -10 -18 47 80 38 13 -54 26 -3 61 51 2 4 -19 28 -22 4 -43 24 -34 -105 54 -111 -6 53 -45 76 85 60 -17 6 45 41 12 -48 39 8 64 -43 -23 14 -18 -28 58 -25 -38 -14 -85 81 -86 -15 -71 -46 -22 84 37 -6 17 7 4 -47 54 27 51 58 34 97 34 10 86 18 -46 -75 -30 -29 -15 6 42 -40 30 -34 -29 -46 -8 6 -5 117 -2 45 68 -3 -13 10 6 -16 -105 -128 16 40 -2 -18 77 -53 -18 -41 -44 -17 39 -25 17 -28 37 -19 -5 18 12 19 10 1 -51 -38 89 -61 7 -24 39 37 -29 -7 -88 -18 80 -126 21 49 -64 -44 44 7 -58 -124 -112 86 0 -16 83 -33 -42 -55 -24 -21 -15 -59 11 -44 19 123 -46 47 -25 124 -18 -31 89 -49 46 -29 51 -12 28 46 -14 -33 55 23 6 -37 7 -92 -1 12 -21 41 -8 11 -75 -8 -44 -61 23 -100 94 29 4 -26 32 -4 52 122 20 102 4 -60 29 6 -1 -24 17 27 18 -3 20 66 -7 41 -99 -50 13 -7 25 0 -2 70 -70 -72 36 41 29 -32 -28 114 -39 -22 25 8 -96 25 -19 20 38 -11 -15 27 -32 11 -36 32 -24 -2 -4 15 0 11 -53 21 -65 -1 -34 10 107 23 69 -91 2 -93 107 38 -3 3 13 -13 49 30 2 0 43 -61 25 -55 49 -59 85 -9 -66 -86 127 -47 60 -4 80 24 26 -52 35 -17 118 -81 27 107 1 4 -62 25 -30 18 -12 127 35 -17 -7 -115 63 -89 -2 0 -23 87 38 -7 -53 -30 7 7 -45 60 -80 -30 33 -28 -62 12 36 -10 68 -64 12 -85 9 19 38 20 36 -15 53 2 18 -25 -9 20 62 -27 -38 -13 -42 -53 -6 43 -58 -35 -33 -39 -22 -7 -44 44 -97 -34 -3 11 -76 23 3 8 -59 15 -35 38 -12 -79 8 60 -38 -17 -56 -107 16 -50 6 29 67 -21 -15 -30 72 -18 -29 37 -2 7 25 38 -21 3 -12 -53 -16 14 -58 -4 -121 84 -98 -125 -122 64 -22 2 -46 -64 84 -68 70 7 83 30 50 43 -13 -17 0 52 30 -34 79 60 -27 98 -4 63 72 -126 44 72 49 -28 47 78 73 47 7 87 23 -41 78 10 -47 40 77 -37 -2 115 22 -13 -37 -30 17 44 84 -52 117 8 2 -30 -18 98 50 112 -105 -57 44 -22 44 -8 35 -7 -1 56 26 31 24 26 8 4 49 36 -56 -9 1 45 49 41 -27 75 -33 42 -15 26 -39 39 16 -24 116 -73 17 82 72 -26 -34 12 -26 35 70 -15 -127 36 -48 31 -97 -20 -20 9 28 76 19 -127 95 49 -7 -17 9 19 43 -35 -18 -105 43 54 -95 37 -77 15 -38 11 -78 34 -14 -12 -13 -53 -115 86 -29 20 -33 -38 -113 -2 -98 33 43 54 18 -35 69 0 -15 -39 7 78 -41 29 13 1 72 -28 54 62 37 11 -44 -1 37 59 -127 45 -46 -68 6 68 26 12 97 -46 25 65 -34 53 -46 33 39 18 -76 -18 88 56 34 106 -37 23 -63 -13 11 49 45 14 2 46 -42 -127 28 53 13 22 47 21 30 -12 -69 36 36 13 5 17 -27 -47 46 0 -29 -22 -27 -9 44 -27 5 -15 72 -71 -23 -40 -2 20 18 -1 26 7 -13 -57 21 -46 -58 -8 61 121 -42 -16 -18 -3 43 -39 31 -16 5 4 19 2 46 76 -42 -80 0 49 -76 -127 45 16 -77 -11 -87 33 0 -81 20 18 68 -109 -12 25 -57 -64 -51 -3 76 -49 -68 41 14 -6 -64 65 47 -42 -8 -37 -101 -19 -76 14 -40 -47 -73 109 -32 -90 -55 -23 -17 60 -71 -79 -5 26 2 -10 -29 0 86 -27 70 13 -10 -23 -87 -22 -44 11 20 -54 -58 -92 7 105 3 -20 -53 -27 -10 -33 35 97 -71 20 -17 -37 12 13 61 -78 -12 -11 -10 -49 -1 -113 -3 -9 -46 -41 69 28 -72 -17 16 28 -50 46 45 -17 53 30 -91 24 -53 29 -18 4 32 -48 37 -37 -13 11 -12 47 -18 92 -16 -59 -61 81 17 2 1 -23 -30 -18 27 -13 42 -71 83 65 -5 -70 87 -19 -12 12 49 -41 -12 -20 -12 -88 -27 21 -67 21 29 115 -53 -9 84 -69 -23 -121 -13 -42 -31 -34 31 -123 44 3 13 -21 96 16 -24 53 -44 -45 42 -125 56 91 127 108 49 19 -8 123 26 126 37 -1 95 -77 -63 15 -2 -48 14 80 -25 -47 -26 -64 -18 40 15 -16 4 -32 -3 -54 -60 28 -4 -20 -51 29 7 39 99 -47 -17 -27 -42 30 0 -26 29 -9 2 -48 96 -37 -17 -22 -42 26 23 34 -14 108 -10 9 9 -36 -30 22 -3 56 31 -1 -50 -5 -17 2 -128 -50 -46 36 19 66 33 18 -39 -27 -77 -40 -40 -101 13 -39 -21 5 19 -27 -15 16 -97 22 -29 -55 -6 -7 -29 -8 52 -53 3 7 -19 -32 105 17 -58 -2 46 -43 46 -24 -50 88 -46 -8 94 -50 18 58 4 40 37 -119 -37 -28 -4 -14 8 58 -25 -56 -33 43 -22 18 0 26 -39 33 -39 45 -56 37 16 20 39 -9 65 11 -36 -18 -91 -32 21 -72 16 -31 -124 0 36 27 56 44 12 -59 26 60 -114 26 37 2 -66 32 110 8 23 19 37 -27 -106 -31 -26 -22 66 -13 -118 86 47 62 -13 68 37 50 -33 60 15 -61 -125 24 47 31 1 19 12 8 67 -57 40 -12 93 -27 65 -22 73 5 -70 -10 53 -21 -5 14 52 53 24 77 -40 39 34 -52 31 0 3 36 23 15 -40 124 57 -26 -33 22 73 8 -25 -30 68 -28 -80 62 119 -24 -40 72 -77 102 -54 -64 125 -77 77 65 24 -112 -16 -60 -33 6 -5 -9 95 55 -63 67 21 14 49 64 -4 13 -72 125 46 30 81 77 100 9 -74 72 -79 -33 119 -94 86 51 109 -78 -91 87 -5 3 35 -17 42 56 -27 -21 -111 42 -21 -51 -10 3 -100 7 -3 -72 -25 -31 11 -80 -53 16 -124 47 -3 -40 3 -17 -53 -121 -43 -93 -63 -25 -25 12 8 -10 118 109 82 -2 20 4 29 11 10 57 -24 19 10 -106 -58 46 52 60 16 -28 112 12 -33 -9 11 -33 -18 -125 9 10 26 -31 65 -126 -118 35 -5 -25 -10 56 -78 8 -13 58 -56 -38 44 -21 -71 -64 -73 0 -37 51 -106 -13 -49 -25 -6 -46 -52 -18 -8 -15 63 -75 -8 -2 78 -47 13 -80 18 -16 -33 -20 -14 -3 69 -44 -27 80 -5 0 79 48 -123 -109 -55 114 -49 -59 -33 83 -44 -128 -59 -51 -40 34 28 -121 49 2 39 83 -29 83 21 55 -71 -2 -5 -8 -82 -13 39 -18 -30 -3 -70 62 -14 12 -19 41 17 -44 43 -38 13 8 -27 39 -1 -22 5 4 4 -122 -37 -22 -4 -17 22 -55 78 18 -23 19 -41 14 -38 -42 -5 26 59 -4 -55 -61 -5 -34 -21 -21 14 -12 -11 -26 -4 45 -10 -32 -1 -90 47 2 -13 -14 -69 -38 75 49 -23 -70 -47 16 -73 -56 6 -7 22 -30 61 -8 -8 -58 -24 -6 -44 22 -6 -33 0 51 10 -36 -21 -17 -30 -40 -45 -80 12 70 -16 -60 -59 76 6 -53 -111 -8 4 -55 7 23 38 -25 6 -17 3 -72 -7 -7 53 14 -4 -48 25 65 -37 16 -76 30 -36 7 65 -65 12 -51 2 -48 -128 125 59 -43 -6 65 75 17 -67 -72 -5 -68 19 17 10 23 -32 67 -7 -8 -19 109 -22 37 -43 9 39 -2 -7 -24 -40 -23 9 28 -15 -25 -47 11 65 -5 20 -72 -48 17 69 -33 -18 -66 -41 46 -8 15 -13 -56 -38 -56 95 -45 -29 24 31 35 -28 41 -8 5 -24 11 -5 -107 23 -109 18 27 -59 -13 -14 -35 -59 -99 1 90 -1 -13 -8 16 46 14 3 23 51 -11 48 -25 0 -33 -36 19 -40 -26 -11 -26 60 -20 48 122 -13 11 -43 -1 65 35 4 23 65 72 84 -89 15 19 32 67 -67 -1 -68 54 -29 -8 -65 112 -49 -13 101 -9 42 -46 -7 -68 26 -9 14 -29 -75 -31 -36 5 15 -3 -41 4 38 -22 22 13 -2 -16 3 21 48 -24 -1 40 51 16 73 39 57 -8 -25 -12 -8 -5 -13 -15 22 -29 -86 -5 -39 125 -29 87 3 2 5 13 -84 37 23 35 -21 -88 -4 0 -3 2 19 29 -25 -32 -31 10 -35 53 -37 3 -37 31 -36 -21 -42 19 4 -31 -30 6 -33 -11 -126 33 -26 -52 -54 76 -63 -1 48 6 16 -43 29 1 -70 -32 45 111 -29 47 45 0 -99 92 25 -39 -21 42 -11 -6 -20 122 -122 75 67 72 -115 10 -17 8 73 31 74 7 23 12 103 40 -8 89 19 44 -20 12 23 18 -40 32 61 -5 -68 5 -106 21 -2 -10 96 -55 -78 -67 55 -5 -2 -13 -49 16 -71 113 40 -58 -14 -15 18 -63 18 -74 -55 59 -29 39 37 113 49 19 8 18 -22 6 68 -23 -37 53 16 23 15 -28 14 61 -35 -71 1 30 104 -75 -18 30 -126 -55 -109 -22 -17 -12 15 69 45 -72 -25 -99 -9 66 -16 61 -16 -70 7 -65 -8 41 3 13 38 -66 -41 78 -1 -12 -34 -32 49 -4 16 -37 -18 -9 -92 -24 51 -7 -100 11 -53 46 19 -53 -5 68 36 -31 5 49 8 127 10 -25 -47 -13 -47 -2 27 -8 26 -32 50 126 -22 -6 -66 -45 -52 54 117 57 -15 74 -56 35 21 9 0 -19 65 -31 75 10 39 68 18 -34 -118 66 -20 -29 0 13 25 112 -24 64 48 -64 -17 -4 7 33 -7 17 -45 -20 -33 89 -10 14 25 -55 -58 79 42 29 9 2 -66 18 -21 -22 126 16 -128 2 -12 45 0 31 -93 -45 22 1 50 26 18 22 -5 -94 114 -39 54 -73 -5 3 82 -21 -5 24 -24 -26 21 -21 -37 -9 -1 -21 -64 49 70 9 -80 74 -1 -10 -71 48 77 -30 34 20 -3 12 14 -7 1 -15 20 -15 -58 61 -3 -58 61 42 37 44 67 7 -47 -73 3 -40 -28 -117 67 -65 -3 -33 -65 -23 23 -10 -94 24 95 -80 68 50 -55 -104 59 23 -14 -27 30 50 27 80 -64 77 -59 -19 -28 -125 -19 17 16 -86 42 -37 26 31 36 -4 -68 -31 -106 -11 -47 22 24 -16 -18 -54 10 102 90 48 12 33 75 -2 -25 -94 51 49 25 5 -25 32 -40 12 -33 -11 39 -36 -40 52 -42 -2 -29 75 -53 -125 22 -53 -8 -55 5 -25 -78 -10 -6 22 73 -97 -126 54 -48 -29 59 -73 -58 20 -3 0 22 -48 7 -32 -16 36 -121 34 -32 52 -47 54 -42 -1 -14 -44 -31 22 1 17 -29 -29 -18 -68 -55 -32 -13 -48 -92 -19 24 -15 -66 55 -6 10 -79 -8 10 -103 -123 -83 49 65 52 -27 26 124 12 50 -123 12 -14 -25 -25 68 77 -1 103 55 78 62 -85 67 -8 -27 -34 121 -64 7 17 -52 58 -62 -46 43 0 -35 16 -89 -51 -43 -66 76 -51 35 -81 -112 4 30 -122 14 127 22 -64 19 23 -41 100 -20 54 5 2 -117 -59 -16 70 0 58 39 110 -2 -36 -86 42 40 -59 -41 -68 -45 -79 -80 15 30 79 39 35 -40 59 -87 -11 0 45 -13 66 53 8 -41 -47 -80 -8 23 0 10 25 27 16 -15 -52 -12 26 -40 -38 -44 -8 -8 -9 0 42 15 -15 48 59 74 -75 30 84 -7 -53 -68 -63 125 -29 -114 -34 35 48 -56 -54 -67 9 11 -107 19 8 20 49 -98 -24 31 -57 62 -33 11 22 -38 16 13 -45 -57 -45 -20 80 71 -116 -49 -42 61 -23 -107 -44 -2 -91 -5 -44 -27 -15 80 27 -32 -33 12 44 0 105 -1 13 -32 -1 -40 -40 -43 -101 -30 88 7 -48 -63 16 73 -19 89 -124 78 -48 -125 7 3 34 9 8 -69 -3 4 5 44 52 -108 -55 -75 -40 -6 23 -108 -20 -18 -60 -66 -50 -8 12 -58 40 -50 -37 -59 -41 29 9 -10 -18 -1 -38 15 22 -62 -82 -2 28 71 -49 -91 -108 -21 -4 -46 -38 -68 -8 -88 -25 -30 -72 -22 0 -28 10 -48 -7 15 -6 33 -96 -79 -72 33 14 -68 51 125 -10 -58 -92 -37 85 -101 -122 -1 35 -59 -21 16 -126 -70 58 106 -34 -49 127 51 -25 13 49 -18 -31 -36 -11 41 123 -3 47 57 20 -13 -50 30 14 89 -12 -3 10 15 0 -25 -21 -9 45 1 -38 -17 -82 4 -55 9 6 -15 -12 51 -14 86 -1 -19 10 36 25 68 26 74 60 -31 4 3 0 -10 24 105 21 20 63 13 -22 -85 31 28 -21 -121 46 39 -68 -14 26 16 -8 7 -49 -62 -5 -41 -128 34 -42 -32 15 18 -43 -16 -11 -64 -29 -32 3 13 19 -33 -23 -12 -5 39 52 17 -45 43 -28 24 -25 41 28 -8 8 -10 16 -16 -52 -6 11 18 38 55 85 55 82 63 -10 81 41 -7 -18 54 -66 20 -31 32 -12 29 -106 -17 -9 -74 75 -5 17 -23 75 80 62 58 24 -69 -65 -43 -56 -44 58 13 -36 -16 -64 0 -24 50 66 -43 49 -84 -81 -4 -40 -57 -49 3 -13 -45 44 18 -11 15 -48 35 -1 -32 -124 2 -1 -19 -8 -81 63 41 -85 -52 -43 69 15 4 -2 -13 42 0 34 10 33 -12 -48 -21 29 4 -15 35 -45 30 103 -26 -25 55 2 127 20 31 62 -39 -110 -10 -26 36 67 26 -9 -13 13 -109 -104 -11 -9 2 56 -2 81 -28 33 40 -10 10 22 62 -68 49 -44 48 -43 -122 10 33 -89 -46 -28 -62 -3 -35 61 96 15 34 3 -45 34 -4 44 -42 -45 125 10 34 21 -11 6 -42 -33 23 74 3 3 32 89 -27 -16 15 95 30 -38 4 29 28 -4 40 54 27 -2 7 0 84 0 104 -32 12 34 -3 66 -124 13 4 1 104 -15 -13 -22 -113 -49 16 -58 60 -86 -41 42 43 -94 105 44 14 121 -46 -9 62 37 81 36 86 -19 13 -36 -41 -2 -12 -5 61 50 42 -21 65 -5 32 -34 -111 32 -20 21 38 -5 25 34 -41 -113 19 1 -51 25 -94 5 -65 -15 22 2 -18 -59 -10 33 -12 26 -86 7 -32 -29 -10 -8 -54 22 -57 -85 -11 -14 -87 -24 -27 -22 -14 -57 -47 23 11 1 -121 -74 -122 -113 -25 -34 27 -30 -36 -43 27 35 22 -20 36 -94 58 9 -18 2 -13 -110 70 61 2 -38 4 84 5 -2 -54 69 82 0 24 -41 64 29 -74 87 127 -37 74 42 -18 4 70 -84 12 66 -94 121 16 -6 19 12 9 -67 -13 -11 -33 -125 23 64 -26 -31 -20 20 -4 -10 35 -5 47 -123 11 -59 -3 16 -4 46 34 60 43 -32 61 -24 -60 76 26 39 -114 -7 38 46 12 12 -10 -50 -19 -89 10 5 19 -96 -7 22 -19 18 -30 20 -64 -60 -40 -38 15 -17 -4 -6 7 22 -8 -23 9 0 -42 -41 -41 -70 -73 84 -19 -27 -45 -76 -67 -65 -11 -43 60 36 34 24 53 -63 28 -18 -62 49 16 -35 -61 -65 88 29 37 2 43 -13 -41 -19 44 -42 25 -50 -6 -3 -14 68 22 -44 54 63 40 64 11 24 71 9 -9 18 23 -45 36 27 127 -80 -45 -21 25 -69 -42 -39 40 -98 -30 56 -2 -21 -33 11 -27 -38 5 40 -35 33 -15 18 -44 -2 -23 -64 -11 42 31 -56 -35 16 -32 45 6 -1 44 25 88 -59 -46 -27 17 20 -33 -73 -31 -53 -74 -23 -18 1 48 44 7 -3 29 12 -27 0 -5 30 -44 17 -47 2 -30 -11 24 -38 -7 -77 -70 -13 46 -9 -6 7 -86 24 38 48 66 -29 25 42 75 16 -3 -2 -72 -25 -7 -39 47 -15 -4 -10 1 -43 -3 -23 25 5 10 -21 -21 -55 -8 -12 21 -18 32 -35 -102 38 54 63 14 30 -12 -65 -69 -28 -4 3 -56 30 -24 44 125 59 -7 -14 94 -12 -19 -44 46 -2 48 3 -4 -77 -21 17 54 3 30 -15 78 -79 52 32 32 -65 -86 -12 -6 -90 12 -103 -61 -15 -71 3 31 36 -56 -29 -11 11 8 1 6 19 15 -27 -1 -53 24 95 127 32 34 -32 -28 -32 -13 -22 9 -19 -43 -29 -25 -26 93 10 58 -18 -37 9 8 -125 -23 69 41 91 19 -6 69 53 32 -11 94 -18 -128 23 -14 60 -34 1 -44 -67 27 -9 15 20 -86 1 -46 -79 54 55 -24 -33 -36 18 17 -20 -64 -69 81 48 8 53 4 -45 -7 61 13 -16 27 20 9 7 0 36 2 -8 -97 45 14 -39 10 -5 -39 21 64 54 23 -39 -107 63 50 -42 22 35 28 -13 -47 -45 1 -30 -21 67 -69 -56 42 34 -52 -18 2 -32 18 -52 -15 -8 22 25 -5 -20 -16 -39 -102 -39 19 -126 44 34 -63 -40 38 -20 -73 33 28 87 84 -30 -128 -34 81 50 12 10 -8 -58 27 34 -71 47 -52 15 -8 59 73 24 -98 -86 -12 -44 -128 15 60 -75 -20 44 39 -55 61 1 24 -34 -112 -34 21 21 -19 -8 4 2 -126 -11 1 88 -19 -26 -40 33 11 77 9 -25 9 -126 -48 1 -16 50 30 55 -119 4 -74 44 55 49 28 46 17 -126 6 39 -52 23 41 -84 12 28 81 -12 10 0 54 -36 124 15 -87 -5 4 -105 -40 31 -2 36 -66 5 16 -61 43 0 1 50 83 58 102 -50 1 37 126 -15 -35 -33 12 12 106 -37 7 -31 28 18 -4 89 -38 63 67 -51 -17 65 17 -115 -41 -107 4 5 -12 -39 -22 7 50 26 32 -12 18 -7 -12 29 -4 12 51 83 -36 3 -19 6 -21 -18 -15 22 -16 -69 0 36 -1 -8 69 -58 38 34 -13 -29 -127 1 7 -26 4 -8 -113 -16 42 2 -8 37 -25 59 -10 45 -22 -29 -114 -15 49 22 -37 39 -1 94 -2 32 -18 13 -14 25 -18 -50 59 -36 12 -52 -60 -21 -35 -19 24 -77 -1 44 14 -114 -8 27 45 -105 -39 20 7 -49 62 -30 26 28 9 -34 -104 -101 -27 -63 82 -31 -29 52 20 -7 -30 -28 84 -28 23 -57 53 -20 -10 97 74 -60 -56 -80 -26 -73 9 -10 27 16 -9 -64 2 -59 -15 -72 83 21 10 79 -55 -13 -1 -66 -41 4 9 -55 -32 -102 59 -32 109 1 -43 -60 22 -52 2 -20 -37 80 -24 -36 22 2 -42 45 -66 29 13 37 -36 5 -19 -63 -7 -10 44 56 -33 -50 35 93 -17 62 8 -34 -18 -19 -29 -48 -58 -114 42 18 -73 -8 -11 -100 28 -26 28 69 -2 -2 -31 13 -17 -13 -8 11 0 -51 -24 -5 88 -32 23 0 16 -67 -7 -35 -48 -2 -48 -31 1 58 31 10 -9 11 51 80 17 -11 44 -40 16 2 -22 26 -47 -50 7 31 50 -8 42 44 49 11 -61 34 50 61 36 -24 -5 -124 -34 44 124 41 85 -64 47 -37 118 -113 -20 -79 -79 34 14 -25 -11 -42 -27 34 17 -6 -59 -79 -19 9 -45 -57 -28 -76 -43 58 24 -45 59 -78 23 -18 14 -13 21 45 -42 35 6 -14 -37 45 -13 8 -7 -43 -38 41 4 90 0 -82 -15 56 8 -41 9 45 -77 87 11 7 -49 4 -92 -8 63 -9 37 43 14 77 30 5 -55 -10 -73 69 44 -6 -30 -26 -56 8 4 -1 28 24 127 37 26 -71 37 67 -13 -7 -48 58 -18 -33 -43 28 46 -44 12 -86 -54 46 -60 -28 -125 60 -18 -5 -9 52 7 -2 -42 47 -38 -75 -52 31 12 -43 -67 32 60 -12 -17 27 -17 -9 0 -18 -55 -96 -36 39 50 31 126 -6 45 -27 44 19 53 -31 91 -8 -14 -6 -70 39 52 111 66 33 -13 40 83 -17 16 -54 -27 8 18 111 21 -41 -61 -23 2 79 122 -16 117 25 119 -55 63 13 17 -86 -1 32 31 6 -23 36 107 45 48 -26 -35 43 -18 -81 -18 68 39 -26 -69 -94 78 44 -83 56 2 -43 18 -29 19 -63 -56 54 16 -28 55 -32 66 1 29 -73 -11 -36 -65 31 -26 -76 32 33 3 38 13 18 -106 -33 81 17 -13 37 108 -37 -109 15 26 29 -3 62 17 117 -7 -31 -31 14 26 4 -81 44 -55 -25 53 51 -38 21 5 24 34 21 45 18 59 -19 -52 79 -2 106 -43 102 -34 -56 125 -84 -16 4 25 72 10 -60 -41 7 29 47 11 -78 104 -11 -56 -20 76 22 26 -26 -15 -3 -11 11 -25 -65 46 -13 33 5 -92 -21 -9 -10 -51 -8 4 50 -102 -35 26 26 110 -10 82 51 72 11 22 -26 12 -28 15 -74 -4 45 44 -6 -21 -37 30 36 40 42 18 -35 8 -106 59 75 -24 17 77 -9 -5 5 14 29 25 19 30 5 25 -49 -66 -23 21 -4 23 38 78 -24 85 -51 16 52 -6 55 31 -23 20 4 -15 30 36 -34 -48 48 -27 35 38 79 14 -46 55 30 -54 -45 -23 52 -100 52 -29 -68 7 -32 -23 34 -1 -18 20 14 1 -7 18 -1 25 119 -127 12 -35 -89 17 74 -37 -3 7 42 26 -56 -63 -26 16 43 -64 -23 28 -41 63 102 -116 29 1 -51 -28 -2 -38 -74 64 -33 60 -45 35 -37 23 -4 -29 -94 -27 -20 -72 -4 -32 0 -49 94 -3 -46 58 22 4 -10 89 12 11 -36 113 -25 -48 -7 -9 82 -17 -13 23 -49 70 -11 -24 -48 22 -14 22 37 29 4 116 -21 -52 12 -5 -36 123 -33 -61 -72 26 -6 -95 -18 -45 -24 -32 24 17 15 56 -58 79 2 -80 -1 34 1 -41 -44 -30 23 -8 -38 6 -38 48 -101 89 90 8 -41 22 4 -6 34 45 63 48 65 -39 -62 25 -5 71 31 -9 38 -1 95 -24 -54 -47 37 25 21 -9 87 50 -76 6 78 30 50 72 -2 -8 -3 -18 -87 -24 -58 12 -88 -29 7 -39 98 32 18 -8 43 -45 -28 -20 -81 -124 12 2 23 -23 -77 15 -8 5 37 -63 6 28 98 56 -16 -7 -73 7 -61 -47 -40 42 18 -87 -72 -74 -1 9 21 -54 64 -34 -87 -7 -59 -8 -17 15 -30 -57 0 58 30 85 82 -73 44 -48 -32 -8 -7 59 -93 -52 55 11 -3 -23 -13 -42 -31 54 -6 12 -70 30 -13 -48 21 -41 17 -26 120 16 -35 1 43 -21 -19 45 29 2 -62 -12 51 99 60 11 39 -8 8 -62 3 -32 37 -29 47 23 87 -19 85 36 -87 3 65 67 -2 92 -74 58 31 -24 -1 -78 -1 72 14 15 -69 -29 -21 6 30 57 -43 24 -16 7 41 53 -51 -22 -7 18 -6 14 12 -14 -128 -9 -64 -47 -37 16 -1 -29 31 34 -36 17 -84 -60 -53 -4 51 -28 -58 42 60 41 8 -55 -59 70 -19 66 29 9 -3 -43 -27 -78 -122 12 -12 26 30 -127 100 33 2 44 18 -2 -43 -6 -66 -11 10 16 64 2 10 49 -39 20 18 34 -25 -24 2 4 76 32 39 32 -24 -46 -18 -11 13 95 40 18 45 -51 31 -62 -34 20 42 -29 -97 -9 13 -4 -77 -109 -11 -19 -2 -22 13 27 39 -8 -23 -6 -15 30 -66 -10 7 13 84 40 -88 -8 71 47 -21 -75 6 11 46 -65 62 11 -43 -92 37 -9 43 100 -28 70 -23 -60 -44 -58 89 30 20 -89 12 18 127 62 -20 -1 76 -56 -18 -9 -75 -49 -59 -9 13 -90 -46 14 114 33 -78 -31 92 -17 50 -74 65 22 -29 31 -2 20 20 -41 -78 -18 -28 9 -113 4 25 -17 -24 80 -7 -92 -14 -51 -44 50 11 -77 -14 8 4 -6 41 -121 -76 -11 47 49 68 77 3 -12 4 44 -18 -56 20 -13 65 -34 34 -16 -39 -35 -31 39 33 -82 26 45 -10 63 57 89 11 -17 39 47 11 59 -101 75 -41 -15 -66 44 -25 -98 39 -27 -87 -36 -41 -62 6 -27 34 92 -12 -10 -42 -4 -45 -27 59 51 23 38 101 41 61 30 47 7 -82 -12 -31 83 -54 78 94 108 127 50 -56 23 -5 45 5 -44 3 46 7 -17 -30 6 50 13 22 50 32 -13 -26 -6 -8 10 22 -5 54 25 -16 66 20 -22 0 22 -2 -7 13 -10 -37 -8 2 28 10 22 -27 -12 -61 -11 1 11 -77 1 4 -3 53 25 -1 37 24 -19 2 61 -29 21 74 8 -23 -34 18 10 9 -1 21 -17 42 34 -73 -2 -22 39 -42 -15 7 -9 -19 -19 -8 20 65 7 26 61 16 -6 -42 -6 -63 -11 51 -1 -48 -15 47 44 -114 96 0 --22 7 -53 -8 -46 -41 27 53 49 -36 25 -42 36 33 20 -8 32 -16 49 2 26 -91 -37 -23 -26 -28 -22 -7 20 25 -15 -41 3 21 6 17 19 -9 -1 -25 37 -43 15 -74 6 -29 2 -8 2 0 -87 -17 -6 12 -14 -25 35 36 -24 19 -4 -14 -22 -18 15 13 -21 -83 56 -20 29 18 -22 -1 10 11 24 -1 23 17 -5 19 -38 -11 -21 -40 -21 18 25 12 -32 -18 -12 30 -40 9 -7 27 1 29 28 -29 -28 12 29 18 21 -8 40 -3 -55 35 -30 -6 -34 -6 14 51 20 -31 -1 41 7 -14 -6 -5 -4 -23 42 14 0 27 14 -30 -1 27 29 0 -40 -19 -22 48 26 12 10 39 34 28 -3 -19 -44 -18 -6 12 32 0 6 17 -15 -27 22 -2 -37 -34 15 35 22 52 -28 4 -44 -13 -15 12 -35 -44 -45 1 -51 1 -3 -3 -8 18 -11 -13 16 -4 -1 45 -38 -14 -19 -3 7 -2 -37 -16 -10 -10 23 -19 -25 4 16 38 2 54 -23 -3 12 -19 0 27 8 -18 -41 16 11 -9 -8 9 24 9 5 -25 9 8 -7 32 7 -5 15 2 16 19 6 0 17 14 -8 36 33 -15 -15 -11 -1 -49 2 -23 -6 -4 -19 2 -2 -3 -13 5 13 10 7 -1 -4 20 7 26 -22 -19 -1 2 -13 0 34 -19 -3 16 -7 0 -21 -17 37 -45 -7 13 10 -14 -10 29 -12 -14 -49 -11 -22 -19 5 8 25 30 28 -8 2 28 -1 21 -4 18 37 -27 -18 -14 0 -4 -10 -4 50 63 -4 -36 4 -1 -11 -29 50 38 6 18 11 -9 1 23 2 -34 5 -2 -6 -30 17 14 -12 48 -14 28 10 -6 78 5 20 -10 4 -5 14 -63 8 -23 0 44 18 16 7 1 -14 12 -7 8 -30 -14 -39 20 -15 39 13 -1 20 -14 -1 0 41 -8 -8 -48 11 48 -17 6 -49 -16 2 6 50 -9 -55 16 -5 -12 16 -15 -12 11 0 6 -13 25 13 -11 -2 -18 9 27 15 32 33 0 -18 -11 26 21 25 18 20 28 -45 20 38 -1 34 -13 -17 29 -23 2 -48 5 14 2 9 -18 -14 15 16 6 -16 23 -17 32 9 -1 44 5 3 6 -12 4 7 26 17 17 -6 -10 -25 5 10 -12 30 -27 -39 -4 6 11 7 -1 21 -14 10 -23 1 -23 5 -8 -3 -19 6 1 34 -8 -17 -4 18 -7 -27 18 23 27 10 -20 -12 -7 -11 -18 0 3 8 -7 -8 -28 18 10 -7 15 -10 50 -28 8 14 1 -13 -52 -2 2 -10 7 -14 22 16 19 -12 20 17 34 -7 -23 3 -39 -6 -27 13 1 -20 8 10 -12 -15 -18 -14 -10 6 -8 12 -11 0 -9 -1 14 3 21 -22 -21 -4 -15 -5 1 22 -1 12 2 -5 -5 -5 -37 24 -5 -21 5 -1 12 15 -4 -39 1 -4 19 81 -25 42 -11 -8 28 2 -34 46 21 14 13 -2 68 -22 16 -30 -23 34 12 -13 -25 39 -45 85 33 -5 40 -35 17 8 1 3 15 32 49 -13 64 -20 -32 -32 114 23 -6 1 -30 92 -10 -20 -9 -33 -25 9 -42 39 24 -24 -40 -17 4 -33 -8 -28 68 71 25 -14 11 3 48 20 29 -5 3 64 68 -7 2 16 -45 25 29 44 -39 -1 18 106 79 15 27 3 -2 22 -9 -11 -42 -7 -44 49 0 13 36 48 13 -14 20 39 -5 12 49 -9 49 -34 4 -31 48 10 20 50 10 -19 8 -16 -25 36 -3 -20 51 53 -1 -18 74 20 -22 -13 14 -13 7 21 -16 -21 17 -8 -36 -27 28 -24 -9 18 -48 14 -7 -2 -7 -31 -30 -19 20 20 3 9 42 -23 -26 17 -16 8 22 -19 10 22 -32 21 8 29 20 -33 43 33 -27 17 -43 -25 -8 15 -56 -39 -4 15 -9 -9 -37 7 52 3 -14 -33 -15 -38 29 8 -27 -18 -7 3 -2 -2 3 35 6 -17 26 -18 41 -22 22 7 28 -7 -3 14 -42 8 -15 -16 -15 14 -26 -4 27 -3 9 0 -39 -2 -23 -19 25 -4 7 -26 -12 -4 1 11 3 18 -12 -18 -40 30 6 -27 -5 -11 15 -20 11 -26 -31 7 -5 1 -5 -38 11 0 -28 -7 14 -12 11 50 -1 7 13 1 -26 12 -29 48 -7 10 -6 52 21 -33 -27 22 27 -21 -34 13 6 -42 10 6 17 2 28 27 -22 15 10 17 2 -20 -7 27 -9 29 -18 5 -3 -13 1 12 33 -41 41 37 -30 -6 -3 -32 -14 4 -1 1 -1 -8 -9 -29 31 12 -34 -14 8 -15 -12 -15 15 -36 -21 -2 6 -29 70 14 -23 -8 -8 -14 -19 -6 7 48 14 82 -9 -9 1 -38 -4 53 59 10 5 -21 -55 -4 -5 -7 -37 36 -18 11 3 -4 15 24 3 9 -30 13 -3 0 -6 13 39 -19 9 14 -7 -3 0 -23 -33 -11 -33 22 -10 20 -1 14 -1 -11 37 2 15 -4 25 -22 4 9 14 -3 34 0 4 -5 -6 27 -36 4 6 20 -4 -12 5 -12 -19 -15 25 -15 51 0 -10 27 -1 -3 2 -33 -21 -14 -2 -17 17 3 -25 2 0 -12 -14 14 20 6 -29 8 -1 -21 -14 0 -17 -15 -17 37 25 -7 1 -29 3 -21 -26 23 44 1 -21 -18 -13 18 2 13 -1 -26 3 -1 -2 13 -17 -9 -11 -19 20 -3 -8 2 -14 -19 27 8 13 -3 20 -7 -28 -23 -11 -11 -19 -15 4 29 2 5 19 -18 -30 9 18 0 0 24 -20 4 -1 -10 16 -9 -25 25 5 -3 10 16 -10 -20 -35 -7 9 1 -16 21 -5 -12 9 -23 -23 0 23 -6 -21 37 14 2 7 12 -9 -24 -21 20 -4 5 1 -10 -26 -16 1 -10 19 -14 -6 -13 -19 -19 -24 25 22 7 -80 30 6 -21 4 10 55 9 31 44 -11 9 4 20 18 -10 -45 -2 1 -21 12 18 -8 3 14 41 -20 -25 -5 -39 30 -27 -9 50 16 50 8 25 70 6 -31 14 26 43 48 -15 -2 -20 -20 9 28 -25 18 14 -4 -15 51 21 27 1 -23 -8 -10 -22 19 0 7 -17 21 9 14 -5 69 40 53 11 -22 -27 11 -7 -17 -10 -21 25 12 -36 49 1 -39 -27 21 9 -1 15 11 0 -16 -4 0 -28 1 11 -23 6 -7 -21 -24 2 -34 -21 25 -6 -1 47 -16 42 -8 -6 -34 14 37 -5 -20 39 10 16 15 -41 0 -19 -12 18 9 -32 23 34 -11 34 12 17 36 -42 3 13 -17 0 -9 -18 -5 -29 -9 -20 21 -37 18 -26 34 -16 1 66 16 20 20 -7 -43 -25 -15 -1 17 30 14 -3 13 -1 -2 -28 10 -26 -49 -6 17 -16 2 7 1 -11 17 13 10 14 11 13 -22 20 15 -22 -23 -14 32 -7 20 -9 2 19 -3 -25 -9 10 26 9 0 -3 -7 -14 11 -33 -3 2 11 -41 3 -42 3 -12 27 -26 -21 8 2 0 -8 14 7 2 14 35 -6 5 -37 14 -36 7 -20 26 -7 -22 10 -9 28 -2 -7 4 -5 -2 -15 -17 0 2 -3 -18 -9 10 4 11 -12 2 13 6 -20 -23 -7 10 -5 -23 -2 -16 -30 -4 26 15 -7 -49 -33 5 -28 -28 -29 5 0 11 48 -14 11 -21 5 57 17 -5 -22 -6 39 4 2 -12 -15 -64 -31 87 4 4 16 -23 -30 -10 -36 15 16 10 12 -51 -24 13 -31 -14 -6 -14 51 -7 -35 14 41 13 17 5 31 -22 26 -27 -1 -8 -2 3 -7 -7 -8 -21 -13 8 -3 51 -41 38 3 -42 -21 7 39 14 7 52 19 -6 17 22 -22 3 8 16 14 3 29 -7 -7 4 27 1 13 39 18 -14 -62 30 28 -5 -40 -44 -21 -21 -36 -19 34 12 -47 -8 -21 7 22 -10 33 -23 41 -13 5 3 24 -31 4 -17 1 37 13 8 -23 -12 -3 -9 22 -27 -15 -26 -9 23 -15 -9 -8 -20 -18 -15 -14 17 -24 28 -1 -35 -7 -20 22 -14 5 -18 28 -12 22 30 -4 -41 24 5 7 -28 8 8 -9 17 25 16 35 -9 -9 5 7 19 10 -18 -26 -39 -16 -8 -2 13 -49 -43 12 13 -1 22 5 24 -14 15 14 -4 2 13 20 -9 -12 -21 -5 0 -29 -7 17 1 26 4 13 -2 17 -18 -15 13 -12 9 13 17 6 8 8 1 -12 9 42 0 -17 1 -3 1 -28 -27 0 -12 -36 1 -2 -11 9 1 15 -5 9 19 6 -27 -9 9 -14 7 -12 29 7 1 -21 11 -9 11 -15 21 -3 -2 -3 6 9 -7 -6 21 31 19 -3 9 -6 23 12 6 -16 -36 -13 7 -10 -23 -2 -2 -8 -5 -11 -17 7 50 24 -18 -22 23 11 -19 -5 -14 12 7 12 13 16 -14 -7 -75 34 34 1 -2 45 27 61 15 17 16 -5 25 38 53 3 51 21 -5 39 21 -33 46 -59 23 25 13 13 11 58 50 23 24 -21 -24 -5 18 -49 -24 -13 11 -20 -8 23 6 -25 -28 57 -33 12 14 14 2 -10 -81 29 -13 -7 -92 6 22 77 -13 -3 16 16 15 65 4 -1 -19 -1 20 42 12 30 29 10 -7 4 -1 20 -1 10 15 -24 -16 28 13 27 29 34 24 20 -2 -8 8 -22 13 44 24 -6 22 4 -12 47 15 -4 -15 -15 -17 13 33 -25 7 -25 15 6 -21 40 -23 -8 -8 38 17 12 15 -2 -19 -8 -1 -6 51 -29 2 -32 -50 -4 12 -7 2 2 15 34 27 23 -42 17 -17 7 -24 -26 16 31 -13 -4 -26 3 -46 30 -16 2 8 18 -9 -22 -27 2 13 3 6 -21 -7 -14 -13 -4 3 11 -18 -35 18 29 -10 16 6 6 12 12 -10 15 -21 8 30 14 -19 -14 37 5 29 -5 -1 1 0 0 -19 -31 4 -16 21 8 -7 -8 -2 4 5 -19 -23 12 17 -25 -7 19 -15 -2 2 42 15 6 2 -18 25 -10 13 8 -11 15 26 18 -3 -10 -17 12 -18 -49 1 -32 -4 -13 14 -2 13 26 8 -2 19 -15 -25 -39 -8 6 30 -15 17 -3 20 54 -3 30 34 15 18 29 -27 22 43 32 2 -33 -74 -2 45 45 14 -41 9 -11 11 -5 -24 -30 -24 45 42 7 -3 -38 18 5 62 -2 -12 37 -2 -14 7 9 -29 32 14 -11 -24 18 70 -29 25 -13 49 -9 25 0 58 -23 0 -41 8 -14 -6 -28 15 -31 -5 41 -6 35 63 -13 -39 13 -7 10 -50 20 -32 10 41 22 -30 -16 -23 -14 3 -38 20 0 -6 -21 -25 -62 21 45 15 3 33 -12 15 -3 -38 12 37 44 -7 -9 28 -13 -3 14 -1 -1 41 -4 47 -7 14 35 -17 6 32 -30 17 -26 -9 21 23 10 10 -21 24 14 13 23 17 -6 52 44 -13 0 -8 -6 0 10 -2 8 19 -17 56 23 5 -39 11 -12 -10 17 51 -1 -24 -4 -34 -15 14 49 0 22 -2 -6 2 4 -7 -30 14 -25 15 25 -40 -19 22 12 -21 13 12 28 -11 -2 8 -2 -14 40 21 -1 18 16 11 -39 16 5 -42 8 28 19 7 -21 -1 8 -3 11 -18 1 12 -22 -27 23 0 -1 -7 -34 16 -47 1 16 -2 -13 4 -11 18 -8 -14 2 -4 -10 25 -16 -10 7 32 16 -34 -8 -18 9 -12 15 -20 2 22 -14 12 -5 16 -10 2 -3 15 4 -21 4 33 -18 12 3 -22 -16 2 37 42 -10 -5 9 -3 -28 24 -2 -15 -1 6 -3 -12 7 6 15 -5 1 -3 32 7 27 17 -1 0 -42 5 22 36 -55 -1 28 -1 -38 -21 -30 21 -2 -31 33 -33 7 -19 -37 49 -22 41 7 -10 10 3 28 -48 6 60 21 27 -18 14 0 -40 -2 35 -16 21 36 16 -22 -24 23 -1 -35 6 -39 -3 -7 -5 49 -2 43 -21 9 -24 0 15 -22 -5 -15 11 11 -26 7 6 3 72 37 17 8 -23 -11 -47 -7 31 45 27 44 -13 11 0 -5 1 -36 48 4 -21 16 42 5 0 -15 10 8 -43 48 -16 8 8 1 18 -5 -2 14 -14 -4 -12 22 1 2 -12 -19 3 -6 -5 -4 -2 12 3 -23 2 23 2 -42 -17 -38 12 -5 4 31 19 -20 -1 18 -15 26 -38 29 28 -7 -9 24 23 -19 11 9 -34 12 8 2 25 -20 19 30 -5 -17 21 -24 -6 23 -12 -23 13 0 22 15 -12 -3 -32 16 9 6 -21 3 11 0 -12 -3 31 4 -12 12 -18 -13 -6 -31 -57 -32 -14 5 -13 -4 0 1 -10 14 6 -6 -7 -13 -32 21 14 8 -13 14 -34 19 23 6 8 -1 -1 19 -27 -4 -16 13 20 -3 0 -8 23 -10 5 -7 -1 12 10 6 -4 -17 6 9 -11 -31 10 -1 -21 8 10 17 -37 13 3 -15 -16 -20 46 11 6 -16 15 13 -8 3 -14 9 -2 -36 -36 21 -15 1 -13 -28 -13 27 -1 -10 -1 -38 -22 1 0 8 19 11 6 0 -4 -70 -64 -2 5 57 23 -74 -85 -112 -39 -88 -11 7 34 9 13 0 -7 -36 -15 -10 36 -1 45 15 10 -8 -21 5 83 3 22 -42 -3 -24 26 -59 -54 16 -22 19 17 -21 34 -41 9 -25 5 -25 -19 11 -4 -54 1 6 -19 43 48 -20 34 -34 -10 32 18 78 58 36 17 -32 -43 0 12 42 11 36 35 11 -48 11 57 41 2 -46 -5 39 -24 11 73 -89 27 95 -9 -24 -22 40 30 -33 9 61 -5 45 -5 21 1 -46 -43 59 10 -9 19 62 38 5 -42 -15 -12 37 106 -10 40 -16 -10 -4 4 -30 4 -4 44 -2 13 75 -23 24 12 16 -12 -12 21 -10 59 48 -42 -24 26 -27 4 -50 -14 -24 -7 -49 -33 19 7 -36 71 -58 -21 -9 -26 28 46 31 -66 -5 -79 -49 17 3 24 -13 30 -16 -4 43 4 -7 59 33 3 2 38 16 23 -11 23 -43 22 16 -22 -25 26 2 -31 -9 12 -48 -11 -34 -25 -47 7 -43 -4 1 14 -23 -4 -9 -7 -3 -8 -3 8 12 15 6 -19 -18 -6 40 -17 -14 2 23 -23 4 -19 28 -3 15 7 -30 -8 -6 11 8 -11 7 -4 -16 8 35 14 -17 -14 15 7 -5 -2 -9 40 -18 -25 12 21 17 -6 -16 12 -28 61 -45 -28 31 0 12 2 1 26 4 -8 -4 17 32 -79 -3 -1 10 13 32 -63 32 28 0 -32 8 -35 38 -11 -6 1 8 -42 -7 31 62 17 6 26 -5 -46 11 -5 20 -4 40 31 -24 5 -8 66 -14 -40 -7 -36 23 67 -9 -40 2 34 -34 18 -21 19 40 -60 70 36 -54 -31 -5 -29 -7 -14 15 -7 -22 -119 1 -20 7 1 -15 31 34 31 0 29 -25 -48 -15 -53 27 0 5 41 18 51 67 2 -36 121 -15 36 67 -4 16 -8 -32 -8 -17 -18 50 6 66 -8 -23 80 -9 69 -2 42 62 3 -13 -65 7 -3 -21 -13 45 49 26 22 -10 30 4 66 -50 -17 -47 5 -5 -56 -19 -15 30 11 -8 40 3 32 8 -10 -72 6 -15 18 -52 21 26 -19 8 34 20 -31 28 1 20 -59 8 17 18 57 10 -14 57 -27 35 -28 12 8 1 15 19 35 -18 24 14 22 8 49 3 -39 31 49 32 1 16 -34 17 43 20 -9 10 -42 -45 10 -62 -19 -52 -7 -8 31 -59 13 -56 -4 -7 -11 12 18 29 -19 -4 -34 -29 -40 -3 -16 -13 -5 -17 13 -5 -15 32 2 23 -38 -48 -6 -15 19 -10 -6 10 28 -2 -29 -9 21 15 11 -3 -8 1 31 -18 -26 -11 -34 3 -12 6 15 42 -34 -5 12 -14 5 -6 -7 1 -22 13 -7 -15 14 2 9 -9 16 14 -46 11 -3 -29 -58 -29 21 23 -20 -10 3 0 -13 -12 7 12 3 -9 31 -26 -8 23 -4 -22 -4 17 -5 -9 13 1 6 -28 20 56 -43 57 -22 -2 2 6 10 -19 46 8 51 36 23 38 13 7 26 6 -50 -35 89 24 -2 8 -50 -49 -20 30 12 22 -55 -62 -51 22 -56 -49 47 19 -17 30 3 -12 49 -58 10 -63 16 30 -75 -48 46 -20 -30 -33 20 48 -63 -21 12 72 -69 51 -2 53 41 -22 -43 -33 41 37 -34 -6 4 -22 -9 -1 29 -6 14 49 -11 -97 -11 59 21 -72 -93 -64 -25 -19 -19 73 -41 -29 -23 6 -86 3 -22 -19 -44 -63 -2 81 -37 6 -5 40 -11 -20 -32 65 53 20 -49 -8 89 -64 56 -50 32 -85 -21 -7 10 -55 -23 -11 41 -17 63 1 -22 42 -14 47 20 16 -8 10 4 65 44 10 -38 47 39 28 -35 80 -26 20 -1 -20 51 -36 -3 -50 -4 58 37 29 20 53 2 -25 -56 25 -7 26 -17 63 -29 -17 45 37 51 -10 -11 29 36 18 9 58 22 25 -14 -14 -33 11 26 -17 -23 30 -3 23 -52 29 -21 -12 -32 -36 -5 -12 8 5 -37 2 5 14 -3 23 -27 -19 11 -32 -4 22 15 -18 -16 6 -26 -32 32 -17 -25 -33 -1 -14 13 -18 -32 21 20 -1 -7 -16 -15 -20 4 -2 -2 -12 -12 3 2 2 4 -23 38 -36 2 14 -23 -14 4 -3 50 5 -14 -11 24 11 23 22 -10 -7 28 22 -17 4 -39 -74 17 -11 66 -2 -46 -4 27 -10 -2 14 -21 -6 -36 52 48 37 -72 41 11 5 45 2 2 36 13 32 -19 -35 -11 -24 -40 -27 -14 17 -7 10 23 22 -15 -25 -13 36 21 -8 46 9 36 55 -13 19 -113 -25 -63 -1 45 -84 5 -26 -6 13 -40 -1 68 -63 -15 -56 -56 -33 -61 -42 -8 11 -20 70 -32 64 30 49 0 -25 -18 53 2 -88 38 1 -1 11 -10 50 -15 -27 -11 8 -41 7 -2 -13 89 32 30 53 37 14 -22 -4 41 -29 -30 -25 -13 -16 -27 43 56 48 40 -46 8 -51 -24 -7 -8 -13 -34 41 -34 35 8 4 81 59 -47 -24 24 31 15 61 -17 -61 44 32 -15 17 37 20 -21 -50 3 -20 -2 16 -37 -4 4 6 -22 7 42 37 32 19 -50 9 -29 11 -5 -69 17 -22 -38 33 44 29 -2 37 -32 25 32 -24 4 49 10 -7 -21 32 -8 12 -70 14 92 8 -31 28 -15 87 -59 -6 3 20 -17 -9 8 -29 -6 41 7 33 -13 41 -30 42 3 15 -53 3 3 11 -1 0 14 -28 -26 -34 -25 26 -24 4 27 30 1 -6 0 -40 -31 -18 -28 -17 24 26 -32 12 -10 0 10 -38 22 26 -28 29 10 -9 -18 48 5 -23 46 -26 28 -5 -6 10 -15 -24 13 -5 -20 -1 -40 -4 -2 41 8 -12 -8 -53 20 17 2 -7 -43 -36 -8 15 24 3 35 11 35 -13 55 -42 -23 -21 12 -27 -19 15 -6 13 -12 23 29 -57 58 10 -15 55 3 36 -20 -21 -56 -35 -43 13 11 -33 -36 19 -20 -4 -16 36 7 124 10 7 57 -8 -79 9 -16 -23 46 -7 -23 -8 38 69 12 -31 -64 -7 -8 -36 27 13 -52 8 -11 19 11 -56 63 -33 18 14 -18 -23 -9 -59 -15 -27 -79 31 -36 1 46 9 58 -32 6 -10 -18 -77 -24 -5 -69 16 10 -52 21 45 -37 23 64 -20 3 -6 46 -39 -36 17 46 7 -8 -90 -9 -12 62 14 5 -4 39 -9 14 54 37 -27 42 -17 -9 -13 -39 18 47 12 57 39 23 20 13 -5 17 -55 -76 7 24 27 11 -63 5 7 0 -28 11 -6 24 32 -3 1 -3 37 8 11 -74 16 -3 20 5 -32 24 14 10 -9 36 27 -59 11 42 -9 -20 4 39 58 1 49 19 -22 23 5 4 -7 -14 33 11 -49 12 -36 -28 12 -20 -5 41 -57 99 -45 -3 -17 29 -23 8 19 -5 24 48 24 -34 35 5 -16 7 -10 -25 14 12 13 15 17 -41 -11 1 -11 12 -50 3 12 0 8 -41 -8 39 19 5 -35 -50 -5 10 -25 -10 -19 14 -25 14 13 -13 -1 -16 45 4 32 19 42 10 -3 -36 37 -1 -16 4 -33 -15 -34 -1 1 -32 47 26 19 22 -34 8 4 6 -6 9 -14 -12 -41 -18 -14 0 6 9 -16 -26 36 16 26 28 -1 -13 -1 -5 -20 -3 17 -29 15 -6 13 24 -26 -42 -9 0 20 11 -2 -26 -3 13 -6 -31 -5 27 5 0 -16 10 -10 42 23 2 20 81 -14 14 22 31 28 24 22 36 -5 5 11 26 -2 -3 9 9 34 27 22 40 14 -18 4 11 9 -9 -4 14 14 0 24 13 31 20 20 15 26 2 48 -59 6 -28 -9 -20 -12 14 -3 -21 -8 -17 50 -3 55 -7 4 15 -5 -20 10 -14 -15 -4 -27 -26 15 -31 -8 5 39 0 19 2 -10 -1 -5 13 -20 41 -19 4 14 10 -22 37 25 8 -28 4 -1 0 5 1 -15 -5 16 -14 -16 -1 15 -32 17 -24 -10 -17 2 -13 -12 -2 -19 -22 -10 37 -7 9 13 -13 3 12 -12 -4 1 8 -19 23 -2 -4 4 6 15 8 -13 -19 -18 -33 -9 30 33 -6 -9 42 6 6 13 26 15 4 9 20 22 -36 26 -21 0 14 28 -12 17 45 20 -9 36 -35 -1 -5 -24 -5 10 20 17 18 7 11 -4 1 -10 16 -16 -30 23 8 3 4 -34 -7 5 1 -12 1 -9 -2 -14 -25 0 13 -12 30 12 22 17 22 3 4 -9 -24 -14 -3 3 -24 2 17 42 -22 -15 3 6 -14 8 -10 -10 -18 1 -14 11 27 -3 -12 2 12 27 -7 9 37 9 -23 -1 -29 19 9 -8 -13 -8 -20 -17 -7 -18 -12 3 24 -9 -20 -2 -20 -33 28 2 10 11 -6 -13 16 -48 -6 4 33 -32 8 -1 11 -38 -40 -29 19 65 -75 -7 3 30 -48 -34 -15 -1 37 21 -20 16 23 13 -38 -21 40 10 75 5 30 22 -14 -21 -10 41 -19 28 -26 -59 -43 -26 -25 -2 -13 -45 -20 -15 -11 3 5 1 -24 -13 -22 -2 -35 19 -19 45 13 -16 -25 -9 29 -26 -29 -5 -8 -16 -17 0 -3 -41 29 2 19 20 0 -28 -14 20 60 -11 6 -18 -9 -7 -47 30 9 -32 -29 9 -12 6 7 7 -42 -8 37 44 26 -1 20 -34 45 73 -11 4 -37 6 52 24 11 2 28 16 10 3 -47 6 30 -24 -33 3 0 3 24 -6 -30 -21 -15 -31 -23 -2 -42 -7 -1 -23 -1 19 3 -32 25 -1 -35 32 0 -17 -4 -3 -15 35 19 21 5 7 5 5 -32 -8 -60 -34 -14 -20 6 -5 -12 -18 -16 -22 12 -31 0 14 -32 38 28 10 47 3 0 27 -14 -5 -27 -22 -37 24 -7 38 3 -26 22 -10 -8 11 6 0 -14 -6 20 4 -4 16 4 -2 -23 29 3 9 -11 16 -17 -10 -10 -10 9 18 -9 7 18 38 -11 3 -9 5 -12 -12 -14 6 -16 -2 19 -17 -18 19 7 -33 -4 1 14 1 -22 -5 -9 12 28 -2 -40 24 6 12 15 38 -24 12 -14 -25 -18 -7 2 11 -13 14 0 6 -21 -14 10 2 -29 2 43 20 -18 -33 32 20 22 11 26 -26 13 -8 -4 13 0 46 -5 7 11 4 17 -32 -19 10 21 29 14 -10 28 50 41 21 -33 -1 -1 -7 5 15 21 -22 -7 24 1 -4 11 -20 14 31 2 22 -32 -14 -3 -21 -36 5 -11 6 24 6 31 35 7 28 -4 2 10 24 11 -16 -9 -35 12 2 1 6 29 34 7 -28 -28 -18 22 -10 -15 -26 10 -26 6 -13 36 34 13 -10 -10 27 -34 -37 37 -56 -31 28 16 -26 12 -1 -2 37 3 6 -32 -15 -28 4 -24 16 -2 34 -1 -24 -27 -7 0 4 23 -32 -28 -29 -20 -4 22 -9 10 -6 3 8 -7 28 -16 5 -27 -24 -11 15 8 39 -20 6 -15 16 22 -8 -35 -34 26 19 -41 -17 -4 29 -3 11 45 -12 36 -8 -1 26 -13 -26 -5 -29 1 -30 -15 -30 1 17 1 -16 16 17 -7 -25 42 12 17 34 -10 22 0 34 -4 -9 36 21 20 0 10 -1 18 16 11 -15 0 -2 9 -6 16 -38 5 -17 -13 -7 5 -6 5 -12 -9 -3 21 -23 30 5 -8 19 -8 -31 -1 31 4 25 -1 -7 4 6 -17 4 -2 31 -2 -7 -7 -15 6 -3 10 -2 -11 21 -10 10 -2 -17 -7 -23 -18 -16 -22 5 7 -10 3 -23 10 -1 0 16 5 -25 -30 -9 -11 19 22 -11 20 24 10 19 -3 11 -20 -5 6 -15 -13 13 14 -3 -26 11 9 -31 -3 -3 3 -42 1 37 -74 14 -4 68 -6 1 7 19 -55 30 -10 -38 17 16 -14 -28 -29 -2 -2 -35 -84 -12 1 -21 6 33 -8 14 -24 20 -49 0 -38 -12 -30 -20 3 -26 54 -27 57 -12 -13 4 -47 -27 17 24 -14 68 -45 -31 22 -7 34 7 6 -7 3 -16 5 -5 37 -50 28 36 37 26 -28 1 -22 -50 -41 35 19 -11 51 -16 3 -84 6 38 -16 6 -52 23 -7 -2 2 33 -32 -15 9 24 -4 -16 71 24 -6 -26 -2 -14 -49 -26 51 12 19 13 43 -51 -3 -2 21 48 12 -49 0 10 29 -6 -10 0 -46 -58 13 -36 -8 -13 -40 -30 -26 -53 28 54 -77 -23 38 -26 -11 10 -27 -13 4 -11 20 29 6 38 21 -4 -46 10 22 -3 -36 4 -5 18 8 -58 15 39 -44 0 -29 -31 22 -1 -12 -4 3 37 -18 -39 21 -25 -16 8 16 -6 -17 14 6 -18 6 -26 -13 -2 30 44 6 -26 -17 -11 5 15 27 1 6 -17 11 15 21 -3 19 10 12 2 -12 -22 25 -30 -10 2 25 9 -13 -30 7 -12 11 -11 37 -17 -12 48 -6 -6 16 36 -5 35 -38 -33 5 18 24 0 6 12 2 20 -1 17 24 -22 11 -5 10 28 13 10 3 -22 8 -18 5 12 -1 -17 3 -15 26 -15 0 -15 -3 23 -5 -5 29 29 -11 24 38 -37 -14 -24 -37 11 -7 -12 -10 -3 -63 31 53 43 48 -36 5 4 1 -6 -39 -25 -44 10 -22 54 63 -13 9 2 24 -10 52 36 71 26 35 -4 52 23 49 10 34 62 52 23 61 16 -12 8 29 -83 5 66 -8 15 0 -13 1 73 -68 -92 12 10 -84 44 5 80 0 -3 33 1 13 39 -49 28 -45 34 29 8 -56 -20 6 50 -2 -12 1 -12 44 -34 72 22 32 95 12 -39 -13 -17 -27 -9 -1 -31 21 -4 21 -53 -13 -31 -2 -5 -30 -11 -1 38 -70 -69 58 10 -25 38 -57 -45 -36 7 17 21 -43 -1 11 -68 18 27 -10 1 -27 22 -19 -1 19 -6 62 12 -38 4 22 31 48 -15 16 39 -42 -14 3 1 3 -14 -43 -6 7 -4 24 -8 26 13 10 13 -21 45 -9 8 -35 7 -2 60 -7 -35 24 -30 -42 -64 0 10 -36 17 -14 -21 23 18 11 18 27 7 16 15 -28 -42 28 37 30 25 -21 16 -16 -27 -14 17 3 16 -6 8 3 -1 -11 23 7 15 -12 -17 -11 -7 30 -11 -29 -15 1 -5 20 8 23 18 18 -3 0 16 4 4 -36 44 -11 -23 -33 11 3 9 -23 -16 9 17 -31 -31 36 -39 14 6 1 -25 32 7 -9 -15 -8 14 -48 11 5 -3 -41 -19 18 -1 3 -35 18 -6 -19 -53 -14 14 11 13 -25 -13 9 -7 3 -29 -19 -55 -26 11 22 21 31 -32 24 16 40 -30 -23 12 37 1 101 53 -3 -96 18 -7 -22 47 -13 -24 24 15 -2 -48 -58 5 -48 -29 -1 -18 9 -2 63 19 -3 -1 47 -2 -23 -10 -6 56 -37 47 -54 37 38 15 26 102 -42 -24 76 -3 25 -27 -59 23 22 -26 127 54 55 6 45 -1 -6 -5 5 19 -56 -74 -9 -40 -47 56 11 -16 -9 23 40 -22 55 19 62 24 -40 -2 -35 -4 -23 -29 -4 19 4 13 33 -42 20 18 -32 -35 23 -13 41 73 9 -14 -29 -60 -18 76 -28 -48 -22 -20 65 -52 -44 -28 22 -37 54 -39 21 20 -15 9 -1 10 -9 28 -7 24 24 -14 -4 18 -75 10 14 -16 -12 -20 73 -14 3 -9 -23 -33 3 28 -47 10 -11 -26 16 -33 -2 4 -22 -1 -2 31 -67 2 -75 12 -28 -53 -3 -1 -37 -22 39 15 44 -23 27 35 49 -13 20 -48 -22 -68 -14 -27 -30 -23 23 -5 20 28 -26 -21 4 -18 -23 4 -5 29 49 -27 91 1 34 31 20 -2 5 2 1 -27 31 15 1 8 -34 -30 -24 1 7 -47 -1 9 -18 -18 -2 2 14 35 16 11 25 1 47 27 9 -11 25 -11 -22 33 6 -39 18 -25 -6 -21 -5 17 15 -4 7 -24 35 -10 23 3 44 -11 9 -11 15 -16 -1 3 -30 45 8 25 -6 -23 9 -10 3 -18 19 -11 -26 36 -18 14 32 0 -49 -5 11 -4 -34 12 17 23 11 -16 5 40 -8 -41 -18 26 -22 23 70 18 2 40 -14 -15 9 30 -7 -47 46 20 21 14 10 31 35 0 13 18 -21 25 -19 -14 11 21 6 -24 47 41 5 -20 -13 31 -11 -48 -2 -2 50 48 12 -23 9 -19 8 -8 -17 43 14 53 18 92 -11 -23 7 -4 -19 61 2 44 -9 29 40 -25 66 7 15 12 8 -12 16 1 -14 -22 17 4 21 -36 7 40 39 37 5 -60 16 -5 27 1 -27 8 -14 12 -6 17 -19 -10 20 8 -29 15 0 30 -28 -39 10 -32 0 1 -18 -42 -5 20 29 -7 -11 -14 -28 -19 -10 10 41 24 -45 23 -35 20 22 23 -7 25 -22 5 -6 9 -33 -28 -7 10 -6 42 -2 18 0 -15 11 44 -51 16 2 -30 -44 -24 13 24 55 -22 21 -45 44 5 -2 40 6 -25 9 -14 -8 -4 -2 1 36 28 32 -12 3 8 -7 29 1 -11 -7 7 -15 2 3 -6 1 0 7 1 -38 -27 -11 34 -20 -14 16 4 21 -2 34 -3 -21 29 26 -8 -16 -21 -30 -17 9 11 -25 -12 3 -1 15 20 -21 2 14 29 4 24 6 -17 -21 8 14 27 39 -12 -2 -1 7 -9 10 -12 -9 -12 -18 -13 23 2 -36 15 19 -9 4 24 -6 -34 -12 1 -5 -13 8 -3 4 17 -1 37 1 -23 14 -4 -10 10 5 -14 41 -6 1 -19 11 -12 9 11 -26 -22 8 -7 -44 16 -26 -11 7 0 10 19 -7 -5 -29 -13 25 9 -12 -40 18 17 -38 28 1 1 -25 22 28 -8 -11 10 -56 16 8 -21 12 -42 -52 -19 29 -34 15 -29 -23 22 -41 -21 6 18 -19 1 22 30 -51 -10 -3 -47 29 8 1 5 -11 12 -3 -4 -44 -7 -9 9 17 -35 27 -28 -20 -7 -30 6 47 -19 -49 12 3 -41 23 -17 -1 12 30 68 2 21 -6 18 27 -54 -25 -29 -11 5 4 19 -42 -26 -6 -7 -28 18 -27 34 30 -19 -25 -18 14 -14 38 2 -25 -29 -5 -34 1 32 12 -34 -5 27 0 -9 -26 -44 -57 -27 1 -24 31 -11 -17 -15 11 2 -16 -21 -16 24 20 -5 -52 -23 -28 -28 1 12 3 38 -10 16 31 2 -5 -30 17 25 27 -16 5 -37 15 -15 -20 48 -15 9 -19 -2 -15 5 9 -8 15 -23 -4 -24 -4 -49 -46 31 -29 -12 11 -11 7 -27 23 -9 17 6 15 22 2 -10 2 26 -17 -15 19 -4 12 -4 -10 -28 5 22 -3 -13 0 -25 -5 18 7 11 44 4 0 -5 37 18 25 15 13 -33 8 -10 -3 12 -1 21 29 -30 -7 -19 -2 -9 12 51 -19 7 -9 0 -4 -19 29 -32 -5 -8 -5 -29 7 -11 -1 -20 9 -6 7 -11 -37 -30 7 23 11 7 44 8 2 1 18 -12 16 1 36 9 27 4 -18 -7 -32 34 -26 35 -16 -7 -19 -29 12 -64 -33 -8 29 -26 -6 8 27 -30 31 49 22 -56 7 23 -2 31 17 -15 37 4 20 1 12 -14 34 -20 54 -9 -6 -24 -3 -6 12 15 36 -26 -8 8 13 14 21 44 4 64 -5 -15 -8 38 20 -11 38 -8 -29 23 11 -8 31 -10 49 2 38 4 6 26 -14 23 4 39 16 28 -12 -12 19 16 -15 -2 38 40 15 56 -23 48 16 -4 2 1 -19 3 11 14 -36 15 10 17 10 -16 48 42 2 -42 -1 11 14 -9 14 14 -13 19 23 -13 20 21 20 -5 22 12 -22 -19 -32 -15 -3 2 9 27 -30 17 23 9 -12 23 4 33 10 22 28 8 31 7 33 -12 3 -41 23 24 -6 -19 22 18 -26 -28 -26 -11 22 -33 -6 14 -28 26 -3 -20 -12 -5 22 31 8 -3 1 -16 -36 -8 -2 17 -26 -1 -24 -34 -6 14 -2 -24 -10 15 -7 -7 -18 -2 24 -24 27 8 15 28 -38 -8 -8 -3 10 13 -14 -4 -19 7 -29 -17 26 -17 -16 11 9 -8 -6 -7 3 26 -18 14 -23 -8 26 20 33 10 -10 -23 -9 -14 -17 12 0 16 -23 19 7 2 -24 -7 6 4 -5 -22 -5 -12 -25 19 -48 -16 5 -8 -30 -17 4 17 19 8 8 11 10 17 -2 32 21 21 -34 -36 1 19 -35 -29 12 36 5 -1 37 -10 -28 6 15 5 -8 -76 40 -49 -7 -50 17 23 13 43 10 13 -48 8 10 -36 -45 24 -74 7 4 7 -15 -18 21 -43 -27 -5 -24 33 -22 13 -27 -16 51 28 2 -4 0 -14 23 19 48 8 22 58 -40 -12 -79 9 -30 58 53 -47 -23 -11 11 -12 -3 -19 -45 22 -32 -9 -70 80 -7 23 6 -6 31 -14 8 -1 -4 1 16 -39 25 -66 -61 -41 34 37 -6 64 -9 24 -11 -24 -35 -53 15 21 -39 50 50 -4 -12 -15 -20 -40 -18 2 -54 2 -12 23 -1 25 -10 -6 -35 -6 -10 71 -34 -1 -26 8 -17 1 -50 26 26 17 -60 -12 0 -16 -9 -58 -49 -34 21 -9 -33 -16 0 -34 -2 27 -23 -22 -37 -29 40 32 26 33 10 -30 5 0 -28 38 1 16 2 -34 13 23 -19 -19 -25 4 -15 3 -48 -38 -19 -5 -12 -30 -2 -9 5 -24 17 -23 42 -18 26 -29 -21 18 4 -18 -18 5 -5 0 -10 -17 3 -5 -8 7 -13 -5 49 -12 24 -3 1 -27 34 -9 27 8 14 -29 22 -3 -2 4 -11 35 12 -50 15 22 -28 16 -1 35 -18 -7 -14 9 -19 -14 1 0 -17 -18 -14 -17 -31 12 -18 -1 -24 -10 -1 20 -73 7 -9 13 -45 14 -20 -32 -45 -3 49 16 -22 -7 -1 13 21 -9 10 -15 -39 -16 3 16 20 -26 7 4 -7 5 11 -4 -37 26 -5 -20 6 -18 14 -9 -25 -13 -37 -22 0 -20 -52 -77 -48 -63 -6 -13 -14 33 52 -44 3 19 10 -63 -8 23 5 -61 -21 -37 13 33 -66 52 -43 5 48 -57 -29 -21 -83 -56 24 -54 5 50 42 -56 28 38 -17 47 -33 39 -23 115 -15 -7 -73 -72 50 1 -106 -48 83 -31 10 -17 9 -96 33 -20 -17 -70 -2 -40 -89 24 37 -24 -28 -30 43 3 -49 63 7 76 19 -9 2 21 -52 30 25 -26 47 20 9 -48 -3 16 -15 -18 -12 4 -43 17 35 41 23 -32 -6 9 4 -9 -49 17 8 -31 -20 43 -21 28 38 -5 4 45 85 4 -3 8 -10 -41 -31 10 -2 33 -33 -55 69 -10 -23 22 -1 -42 -25 -6 44 33 -10 -19 8 -60 63 22 -3 82 7 14 5 -19 -16 9 16 31 10 20 19 45 -42 -9 11 -34 -44 24 -24 -17 -22 1 14 16 -50 -21 55 31 9 29 -59 -22 25 23 -35 -1 -12 -34 -19 35 9 3 -6 10 2 -20 -2 -29 36 36 -6 -17 10 48 41 18 6 -13 0 -15 -39 -17 -15 -30 -4 -16 -23 -2 -10 7 -32 16 -22 -14 -12 11 34 2 0 79 39 21 -8 -6 14 18 -3 12 6 9 30 26 -2 3 -11 13 -11 6 -50 -19 34 46 7 -27 51 -22 44 1 -17 -57 17 -4 14 -50 -17 18 -35 -18 18 -11 13 -50 -6 32 -17 -2 -15 61 6 -32 17 3 -9 -9 -5 39 83 -20 24 -97 -56 -17 -53 -25 19 33 -24 25 -25 62 13 55 9 -91 42 5 51 -62 42 14 66 5 -57 74 -48 -15 -35 14 55 -60 45 -87 -66 6 19 23 -52 1 -89 -81 39 -11 -32 82 -47 31 53 -61 10 44 113 -42 -30 -124 108 66 33 -38 46 -110 0 84 -41 -97 16 -24 79 -28 -36 -63 84 23 -10 -6 -8 6 98 81 61 102 22 -126 -50 -36 19 1 51 -14 1 -59 -55 97 65 -19 -7 -2 -12 43 -16 33 -10 -42 43 8 -92 -106 -89 3 -21 25 -39 -29 -5 -31 2 78 1 26 -15 -12 -9 -61 -93 11 17 -40 -46 10 -41 45 50 66 -19 -10 -6 -13 -33 -52 59 29 -36 2 69 43 -59 -50 2 73 78 -33 10 39 11 47 23 -57 22 30 35 59 -127 -8 33 19 25 10 -94 27 1 -20 13 7 49 15 25 53 -86 -73 13 28 28 -35 39 -21 53 -106 -6 97 -16 54 97 41 -39 -13 43 13 -24 90 73 -45 49 17 40 -14 -37 -13 21 -19 34 -52 -64 15 36 -30 9 -2 -70 -7 -25 50 3 -64 -19 17 94 0 -27 36 -16 -22 -9 -30 -69 61 -22 -10 -30 -8 64 24 12 6 33 76 -87 -51 7 -24 18 39 127 -31 -30 18 49 79 -11 -17 -1 -3 -7 -20 -16 -9 -27 -87 8 -14 -3 7 -16 -38 -36 -36 -12 7 35 -1 -55 -3 -4 -2 -4 13 -3 -2 -7 0 16 48 -19 -60 -29 -13 -77 41 40 12 -84 -1 -35 -35 -41 -17 13 -41 -5 115 7 -17 -127 41 -4 48 108 58 49 53 -111 -67 -19 -47 -17 -38 63 6 72 3 15 7 100 27 16 8 -27 34 -7 -127 36 -47 9 -13 -3 24 67 42 54 64 53 -48 -26 -8 8 4 58 -31 -51 -14 9 -33 98 28 -123 74 -4 -5 -23 38 34 -37 45 41 12 34 44 34 -3 6 9 26 56 50 -54 2 -21 6 20 0 -8 85 -64 13 8 41 -36 -24 35 -10 0 46 3 22 116 -41 6 60 75 39 80 40 28 -3 -30 -78 33 -28 3 -55 124 39 51 -46 75 -84 -17 -48 -53 -81 -7 64 -15 8 -51 -95 -109 41 -12 96 -73 70 29 15 89 -66 60 16 -3 -1 31 10 13 -20 -48 72 70 15 -7 -22 -63 -119 20 32 -82 53 7 29 -61 -23 15 -35 29 16 -28 64 22 127 29 -30 33 -40 -28 6 31 -1 -11 37 -17 16 7 26 -46 2 7 19 -3 -7 -20 -8 -12 5 9 -2 -13 -38 10 6 40 6 28 40 13 -37 22 -50 2 -27 -21 45 21 -27 -3 -14 -12 2 -24 26 -13 -17 -30 -97 68 6 1 22 20 28 -57 28 33 46 55 4 7 8 -2 77 2 30 23 18 -11 16 16 29 48 -33 -22 45 72 -11 -12 -19 12 3 18 -21 38 -5 21 29 0 -17 33 6 2 29 27 65 -7 26 -23 -5 53 19 31 6 -18 77 15 23 -19 6 -30 8 11 17 19 80 -93 -21 2 -1 3 38 -21 -5 -11 -12 -39 -6 78 122 11 35 -31 10 32 34 8 -5 -29 -47 -22 45 67 -35 4 55 -31 46 50 38 -26 -34 -44 37 35 29 -12 -2 -51 -72 20 39 41 68 30 118 21 25 23 -2 -12 79 78 -63 29 -32 47 12 47 26 46 -31 31 -4 15 48 -56 -1 -32 37 -77 -5 -11 90 64 19 55 22 38 -1 -27 33 -17 35 46 62 10 7 18 65 -116 -21 7 -51 49 44 10 8 37 2 4 -38 -4 -55 -19 34 21 -28 -18 0 -5 -21 -1 7 -27 3 -5 6 -2 12 37 45 -29 19 44 1 -13 -65 82 7 46 46 -54 -22 1 11 40 -52 7 73 5 -13 24 -12 -5 10 -34 47 2 -43 2 35 -15 -34 1 43 4 20 69 31 20 -28 29 -2 -14 11 2 -14 -33 2 30 22 35 18 -3 7 3 -16 -20 9 -29 15 -2 -1 -31 -15 -56 17 30 3 59 49 26 20 31 -17 -1 4 -11 24 -23 75 23 -24 -2 -12 -3 -15 13 21 -55 51 37 -25 8 31 4 17 30 15 14 44 16 -35 62 42 28 2 6 -20 0 12 9 -19 27 3 19 -5 -20 15 2 13 2 -10 -25 -30 -16 5 0 -1 15 -3 -15 6 3 -3 19 0 27 27 28 34 55 60 5 -12 21 -21 68 69 -56 39 17 49 33 42 32 25 27 11 40 21 52 33 -81 -32 30 38 -27 22 -46 27 2 33 7 5 122 103 41 86 28 48 3 -5 54 -15 81 97 -46 17 -18 62 33 13 -26 122 -54 16 -90 -2 21 77 -44 -33 6 -73 35 81 8 127 2 83 -4 15 91 -24 -3 -3 -14 20 -25 -6 2 42 19 -12 -3 4 -8 13 29 59 56 -16 31 46 -91 22 -51 -10 -17 -11 55 30 -1 4 17 30 -26 100 7 -46 20 19 -4 31 -8 60 -27 20 8 1 90 41 42 -30 -6 -36 -35 54 38 -32 47 -11 29 57 37 -7 -50 43 -26 4 -43 -9 -10 14 40 7 59 -4 -65 3 -43 24 -7 44 -41 -12 -8 -49 23 -18 29 -4 37 3 40 28 -8 -2 15 53 -28 -17 -9 -66 37 46 -14 54 12 20 -31 -88 9 8 59 63 -32 29 37 -12 -47 -9 -16 3 -27 37 29 -5 -22 -5 10 30 -20 -1 -2 17 -27 13 8 -7 0 5 -8 36 -5 -15 7 2 15 -18 21 21 17 16 -28 14 -24 -1 14 5 12 4 -6 -14 -16 -35 -62 10 -28 7 4 -8 -26 -23 23 90 -25 -15 -16 19 -2 18 -8 17 -11 -9 -14 20 24 -44 11 8 30 -30 25 16 11 -9 7 -47 7 -11 -2 34 -8 2 -2 -20 63 -22 17 39 61 -42 -14 -21 8 -29 -31 35 -90 7 -9 -27 15 -51 -81 27 -2 19 -16 -118 -122 52 18 -40 3 -12 -76 4 -33 53 -12 3 33 -40 34 40 -119 -115 -16 -47 8 -33 -57 -40 -28 68 -12 -108 7 -55 -83 117 100 -35 -28 48 35 21 -23 -32 -34 50 107 8 1 31 13 56 41 -66 18 -13 47 -11 -3 -42 69 -18 -128 -1 -82 -121 39 18 5 6 31 -120 -72 -42 -12 48 -83 36 36 25 -69 115 6 12 -75 -16 -84 -14 -19 -15 -68 68 31 -23 43 23 -8 46 -1 1 -67 10 -9 12 127 35 -31 31 -87 -19 -33 25 -22 -86 -32 -53 1 11 -54 3 81 33 -13 -47 6 -100 -34 -33 -23 -33 -7 51 42 60 -30 -13 28 51 -23 27 -12 55 14 32 95 36 46 -23 29 40 -101 -8 1 -29 -41 26 -66 5 -12 36 77 -1 -23 29 -1 73 60 -17 78 61 27 1 -19 22 62 46 0 26 -85 15 25 -18 -23 -38 8 59 -49 19 33 16 13 -30 41 -34 17 -28 -16 -24 10 -17 30 -15 52 -22 -42 74 -41 -47 -67 7 24 -50 -47 17 80 -7 24 93 0 -19 8 -35 -106 66 -7 -29 25 6 9 6 7 -40 11 60 -86 -55 30 74 -91 69 43 -24 -4 50 0 56 -16 -43 8 -2 36 6 16 31 15 7 -1 -5 60 0 -37 -38 15 6 -29 -25 24 4 37 19 -77 -43 -33 96 36 2 88 11 83 29 -64 -57 -4 -15 -17 32 -73 39 -73 30 38 66 21 -9 0 63 45 31 39 54 -86 -9 27 -52 -38 13 11 -16 -29 74 -23 -5 21 110 63 16 -24 -25 10 -39 104 -5 -34 32 60 125 30 -9 18 -67 64 55 -33 -6 -42 19 56 28 -13 -18 16 -37 41 -7 -53 61 109 47 -52 -73 74 -7 -8 13 23 -43 10 -17 22 5 1 -10 7 -7 69 1 35 37 62 70 -21 -48 -3 26 34 10 -51 35 -28 -19 2 59 4 46 -29 -7 2 17 -22 -54 -33 -19 23 -49 -15 -9 -37 46 -67 18 32 58 17 -93 1 9 6 -12 40 3 40 -48 -23 71 2 4 35 22 18 59 80 -26 77 32 -31 -125 66 -40 30 42 9 76 123 -79 4 -63 45 76 -55 24 39 59 -37 -37 34 -75 17 31 23 -48 -31 -40 44 -3 58 -5 74 5 108 -59 -24 -37 10 4 18 0 -13 23 73 4 -10 32 -31 7 -13 -14 45 2 5 3 3 30 -16 19 12 0 -20 -9 24 10 -10 24 -19 -58 -5 -13 -5 30 30 -23 -10 24 46 -29 19 -11 4 -17 1 7 14 -13 -16 -10 7 -44 22 11 -5 33 6 -19 12 -4 1 -19 -11 7 28 19 -3 19 52 23 42 52 6 14 -48 12 27 -31 -16 -21 -7 17 -1 15 -4 -20 17 37 14 12 28 -34 -15 -27 7 6 19 -2 8 73 1 8 -27 -13 -50 -18 27 12 73 -31 2 57 6 2 -20 55 -33 -9 -5 13 57 42 10 57 -30 -15 -98 -18 44 12 26 16 -18 -22 35 -1 -18 15 16 -16 79 -71 5 -4 -23 -47 19 64 -15 -7 -40 0 30 38 -12 72 23 121 -33 -38 0 25 -9 -50 45 -109 51 -11 -90 17 -74 66 -15 -31 -2 12 14 74 -4 87 33 -45 -25 39 -7 16 30 -8 4 -105 38 35 -25 33 -26 -2 12 -6 16 32 -16 2 27 -6 -41 52 -23 66 -43 28 -32 -6 -10 -9 44 76 15 52 -34 12 17 1 12 -56 42 -16 65 40 71 -8 81 -93 -52 -58 -4 54 -28 64 47 19 112 21 24 9 -51 -6 46 -30 -21 2 53 33 72 44 23 0 -11 -25 -18 -75 40 52 21 3 55 -16 16 -17 33 -75 -18 -17 19 -53 -71 3 -21 20 29 -10 -19 14 38 -49 92 3 24 27 -44 3 15 5 -12 -7 -7 49 -40 46 15 9 -5 35 10 -24 -11 -44 6 -16 13 16 -3 3 21 -80 17 -2 4 33 29 -26 -10 -20 -10 13 -26 -32 5 2 -3 -15 -37 -3 0 26 1 23 17 -38 14 25 -5 42 1 -20 50 16 5 -42 23 7 -25 -15 -28 -22 -13 8 53 5 24 -24 1 -14 -5 -50 26 27 -5 33 41 13 19 -5 49 1 0 -37 -41 -27 29 1 9 7 -6 34 2 -40 -22 25 -4 16 -5 -31 -43 -78 -41 13 9 -31 50 -38 -7 9 27 -21 -118 -11 -10 1 -11 -44 13 -35 -26 -46 -44 75 8 5 -40 -30 72 52 62 -4 -9 -51 -3 -41 -68 12 12 72 12 26 -39 -46 -28 41 -82 7 93 39 -53 8 49 29 33 46 11 64 26 8 -35 -18 -64 56 -12 45 -6 31 -9 11 31 1 -60 -65 33 -19 43 -20 63 -4 -6 -23 -28 36 46 -30 -46 -18 9 2 18 -98 37 -41 40 28 73 33 -43 21 -1 -6 96 -40 62 -48 -33 65 -7 88 22 1 -28 -29 -45 8 11 -13 -36 -19 18 35 18 -48 -6 80 -64 -50 33 32 -20 17 -102 -15 -1 66 -25 -2 -12 -57 24 43 107 42 -24 5 -29 -13 27 -9 -90 -57 1 22 -71 -14 69 7 35 -10 78 -42 -35 7 -9 -38 -17 -36 7 -65 40 67 22 57 0 63 -27 -5 -18 -44 -17 -93 -37 -10 -38 -19 -23 30 -40 -9 9 40 -18 41 -36 22 26 -19 21 -53 -25 48 -4 5 -25 -19 -3 20 1 3 -45 21 -1 -14 -19 23 -34 -6 -20 -68 33 -17 -2 -6 97 -13 5 35 18 11 -34 -41 53 -70 2 39 29 3 44 -1 -7 5 31 -4 -27 26 -1 -26 -2 31 -23 -9 -28 9 -15 29 7 -16 -23 1 8 -12 -66 55 31 20 -17 -7 -34 -66 16 15 10 6 46 45 28 13 11 -19 15 18 -16 13 -52 -19 1 -72 -19 -19 61 -49 19 17 7 -9 16 -1 -46 -18 -52 8 -35 17 98 -35 -32 28 8 0 -22 0 38 -29 -58 34 27 -65 -8 35 -13 4 75 18 -15 -1 58 37 8 -32 -54 -13 14 -15 -25 -9 -5 40 38 9 -38 22 -21 74 67 14 -1 4 81 26 -65 58 -70 -24 -32 -41 -88 -13 19 -7 -1 -27 31 56 110 -19 -39 -31 12 48 -25 -11 62 -2 5 41 -22 1 26 -74 -19 -6 22 12 -50 75 14 2 -43 58 8 -1 22 26 -8 -19 24 10 44 105 -71 52 9 -3 1 -21 26 -2 40 -20 -50 40 -57 7 85 -2 44 -7 -56 8 44 18 10 -69 -39 -15 -26 -42 -28 -39 -14 13 36 -30 1 33 14 13 17 -4 -9 0 -74 -38 2 -27 38 -44 -78 -4 65 35 -7 28 -29 -85 14 3 -39 11 22 5 -52 -12 44 -5 34 -42 -50 -4 25 -15 1 -22 18 10 4 12 13 9 29 8 6 -12 -37 21 26 53 61 20 -12 -5 7 27 -9 -6 63 4 16 7 28 5 8 -14 -58 -14 -20 15 -8 -72 -3 16 -8 13 14 15 -2 20 26 -18 8 7 11 4 6 34 48 -17 -22 41 -31 5 -52 -7 25 -5 22 48 26 -43 -71 -3 -9 13 -17 17 -18 20 11 16 -16 -57 12 20 7 9 -20 -8 -13 -3 16 -4 4 17 -25 12 -27 -5 -44 -20 50 -19 -41 24 11 -40 19 55 4 -46 0 -11 7 31 10 55 -56 2 15 -89 24 0 -19 21 62 50 6 11 16 -50 -20 27 -14 5 -33 -9 -1 -7 -14 -27 12 87 49 -13 -8 -45 20 -73 -77 44 -8 99 6 -20 43 56 -97 39 3 13 -4 -2 -10 -91 -46 -35 13 2 18 -49 -100 18 43 -23 71 95 -57 42 15 -56 2 11 29 -24 -50 -1 -49 58 -9 2 13 -79 27 31 53 59 -15 -127 47 29 23 -69 -14 57 -52 3 -31 37 34 -9 62 -1 -13 -33 28 -2 -8 -32 48 25 -40 27 -15 -59 -25 69 59 64 -30 51 -46 -56 66 -16 70 13 45 23 -48 -1 13 4 5 52 23 32 1 9 -98 10 24 -7 34 23 44 -49 -6 15 3 -7 2 -15 -56 5 38 49 -24 85 7 -7 31 -88 50 7 -85 30 -95 -31 -22 -65 16 -56 70 -38 50 35 38 20 -44 -19 9 -6 14 26 9 23 2 34 -14 -3 22 -39 32 -5 -22 11 15 14 -16 1 16 -4 -24 5 28 -62 36 27 40 14 25 14 44 1 -2 4 -4 9 27 -6 -35 -27 -23 15 -5 21 -9 -14 19 7 8 57 9 -40 2 19 -52 22 0 5 -20 9 6 -41 2 41 -30 6 10 -12 -12 -3 -23 19 -28 -118 4 9 56 -40 -26 18 -33 -37 -24 15 25 -6 42 1 -20 -1 -21 -31 -7 7 20 3 52 -74 -8 29 -52 -20 10 -127 56 4 -28 -8 -62 37 -5 29 9 36 -58 -73 -34 31 -2 -27 19 -13 -42 -82 -77 -25 27 -33 60 13 90 36 5 -84 3 32 3 35 -81 -23 81 -110 20 56 -10 2 -59 34 -57 -31 -61 -22 -56 26 -17 -14 -42 -38 -28 -2 12 -62 55 -20 -18 -11 -8 87 -1 55 14 -10 45 37 -83 35 -42 -68 -73 21 -56 34 -59 88 6 13 -43 29 79 2 -28 -44 40 23 70 30 8 -2 51 -14 -23 6 22 20 32 -31 -97 55 -20 -24 29 99 37 -50 13 2 -46 13 5 -58 -2 46 58 78 -18 44 -28 2 -16 -9 -26 -19 -5 8 18 -28 44 -67 63 -84 11 8 23 86 -70 -83 54 -13 -4 -22 55 40 21 -19 68 65 -11 -50 -19 -19 -6 84 -59 -5 27 50 40 114 44 -49 -111 -35 -17 -28 -26 -79 -3 19 -21 -31 30 -37 -32 -60 7 25 64 104 1 14 -58 -58 -8 -51 -48 -31 -18 -8 -36 25 15 -26 -12 -18 -6 31 7 -11 -26 0 -3 13 3 -31 -16 -19 -27 -13 11 18 19 -24 0 27 3 -7 -57 -46 -6 -33 20 51 -16 -24 -44 -18 -50 23 -12 67 -39 26 31 -29 7 -19 33 -8 -15 22 7 10 -59 23 -4 -42 -14 -23 0 -109 -57 -40 19 14 8 8 26 -46 -14 -27 -8 6 -14 -23 12 -59 33 2 -13 4 42 -48 -5 5 -24 -47 3 33 -15 -13 52 37 -61 80 -28 13 4 51 69 84 -10 28 -17 -6 -13 87 93 0 62 43 23 -17 3 -11 39 32 17 8 102 11 -23 24 84 4 51 23 99 -4 -22 -12 30 55 39 64 -9 -29 -2 -24 70 -30 49 41 -65 28 -11 30 22 -31 79 14 -15 58 1 -34 7 50 -16 17 -32 8 14 19 12 25 17 65 29 71 25 18 9 20 43 61 38 -24 -4 19 12 -57 17 -53 17 17 -88 -22 -14 -38 35 -63 -18 1 -24 -41 -82 42 1 -36 -2 -12 -4 -42 -11 -14 -4 14 -10 16 41 85 13 -70 -22 8 -17 -8 -36 -38 -6 -26 51 10 -35 -50 2 -31 -26 22 20 15 23 -12 4 -19 -25 0 -18 42 -75 56 -56 -29 -38 2 -15 -47 5 -48 14 42 43 -5 34 23 15 -88 22 41 -117 -16 -7 -59 16 23 -5 -47 9 -20 58 2 71 -104 -31 31 12 58 30 14 -11 -27 -9 10 -34 -14 5 9 -5 -24 0 14 -7 -34 -5 38 -16 20 11 -7 -2 -12 26 42 26 -15 48 20 34 10 -17 72 27 22 5 -10 -20 -63 -40 -56 -17 31 -9 8 -10 -3 -33 7 -3 7 -1 -16 -9 -39 33 32 -35 61 -20 16 3 3 19 -16 10 -47 -13 30 13 -7 -20 24 5 -10 -15 20 22 18 -6 -26 13 15 -15 -13 4 -2 -47 28 1 5 8 -3 -4 17 -64 -18 -16 -28 -32 -23 -126 68 32 77 -9 58 -92 -14 5 37 22 -32 -53 -18 0 11 -60 37 12 -10 -54 1 22 -44 -54 -33 12 15 -22 -7 -80 -9 -78 -51 -114 -26 -51 -36 -26 -83 -10 -39 -101 20 -49 -64 30 14 -18 -10 -25 -85 30 6 7 -17 34 -46 62 -74 14 -26 4 -110 -6 -30 -123 -52 52 -91 -10 -44 19 -23 -50 24 33 39 5 -105 -10 -7 -18 12 22 -36 81 1 -34 76 -48 -32 -36 34 -39 -21 -13 -17 -10 -30 -5 54 13 -4 -13 -33 75 -4 112 -42 -34 -6 91 33 -55 -20 -31 -25 6 30 -49 -51 67 -38 -10 -37 -105 -44 -16 5 -22 35 -3 -80 -67 40 34 -23 67 38 -12 -59 -54 -27 -17 36 22 4 49 21 -30 45 127 54 0 -49 5 -36 -62 17 12 -66 2 35 20 -38 67 10 -20 2 53 -5 3 31 11 2 -26 21 86 -27 14 -68 -16 -40 33 52 -10 -12 30 0 30 -34 8 -2 -11 -13 -67 108 -9 12 18 -13 15 -29 19 -8 -14 -27 7 -13 -5 -5 14 -12 -13 -10 13 -18 1 26 1 25 10 28 4 5 -18 -19 11 -28 -20 31 -23 12 47 -14 -45 8 35 -17 31 59 -19 -54 34 86 48 0 127 7 -19 -21 -17 -4 29 10 2 29 23 -7 -4 15 -24 -20 18 11 1 -11 20 23 46 -48 -15 24 16 2 -24 18 -19 -54 -19 26 12 -44 -3 61 -2 29 12 18 59 -35 49 110 -39 -13 -64 21 -37 76 -24 0 -9 71 21 38 49 87 12 28 36 32 124 67 -55 49 103 29 31 71 37 -50 116 39 28 61 -26 50 48 -23 67 32 55 60 51 -19 66 16 44 38 46 -33 -5 -35 34 50 3 2 13 25 -80 48 -12 23 92 82 -34 -40 0 6 27 -57 -14 -19 -38 41 62 6 16 27 26 -48 32 21 0 102 33 -39 -16 116 -19 9 94 12 54 55 -10 -89 -42 -18 -7 -33 19 19 -84 -21 16 38 -78 -25 57 64 29 85 -53 3 -74 9 -5 47 7 -21 -19 114 -40 -60 -24 -35 72 28 -35 -21 -26 68 57 38 1 3 -19 -38 19 54 8 106 28 65 72 13 32 55 -10 -3 -24 17 35 -26 -59 20 -24 -25 -100 37 -6 -42 12 83 -39 -69 -30 -61 18 43 15 12 -72 -38 2 -11 30 -40 2 29 106 -94 -42 14 9 -30 4 -73 10 17 24 19 -4 -49 -25 37 -29 11 -10 45 -30 -6 20 -12 -54 16 4 38 -29 -3 -24 -12 -3 -62 18 -7 -37 13 -26 9 -11 25 26 20 -6 -37 -39 -23 -49 28 16 -8 25 18 -2 -14 74 43 45 32 8 -44 13 23 -34 28 -9 18 -4 -50 -4 -12 -17 -23 29 -31 7 -6 -2 -13 0 -10 18 -21 8 28 38 46 4 10 -71 4 35 -21 -8 6 56 22 -23 -91 127 61 -28 -19 -26 15 -64 -21 -20 11 -69 38 -68 -10 -70 44 -5 -5 -40 105 33 17 -26 51 27 2 19 8 120 34 -35 -18 10 -18 92 -60 61 32 -11 32 2 -24 6 64 -17 71 -11 21 62 26 -47 -2 -39 -53 34 127 48 58 35 8 29 12 1 1 61 -7 25 13 53 23 81 -7 -86 -35 64 33 -50 22 10 -6 -1 -23 41 6 3 -6 5 -28 -50 13 71 74 13 -67 31 -9 -28 -36 12 5 -104 111 -54 -50 -94 13 -56 -26 -20 38 -90 -1 -28 40 -69 -23 28 -31 20 49 -102 42 39 40 16 57 -3 -76 63 -8 -17 18 3 -53 -3 -11 -80 30 44 116 125 -24 81 49 31 -32 77 -26 50 -8 82 -31 10 8 70 35 -23 15 0 -33 27 75 -80 -26 16 -5 -3 -20 -45 -1 -26 62 41 18 17 3 33 10 72 -14 -39 33 64 29 12 -17 -23 62 6 6 -22 7 7 17 -30 44 -14 20 -6 -6 32 21 10 -8 -25 -52 19 -18 -6 -28 -21 37 6 9 29 70 -32 -6 -44 -39 -36 6 -72 -40 -34 20 17 -2 24 10 40 20 12 -12 -3 0 0 -21 -5 66 -19 -14 -1 -27 16 -44 3 -8 29 38 -23 15 25 40 -14 22 -28 15 1 23 20 -11 6 9 12 2 -53 11 6 -9 48 -14 22 -17 -6 39 -20 18 -21 -51 3 11 -27 -53 50 -35 -42 32 0 23 75 46 12 -14 -4 33 88 12 -75 57 20 64 3 23 39 45 -10 -28 6 -57 -49 -67 25 -75 -18 122 -42 11 47 2 -17 2 -29 54 -29 -9 -35 28 8 15 -17 118 42 -68 34 -42 15 100 67 45 24 28 30 64 121 21 -8 33 -5 46 -17 -33 -29 27 2 72 2 12 -1 43 24 55 52 55 -12 -24 -44 -49 48 3 55 21 6 -63 26 -43 66 19 85 4 73 8 6 2 -62 -6 -28 20 -15 -24 88 -52 18 5 99 -58 -26 83 1 8 -75 39 -13 9 0 35 5 47 -55 -59 43 -12 0 8 -13 -9 31 73 28 -38 57 12 -43 -44 57 -29 51 -51 -6 -68 34 33 16 16 20 -21 40 40 2 -16 24 30 -9 -42 -27 5 -49 52 84 -41 20 -21 -15 -29 36 -18 32 -25 -12 -1 -9 56 73 -19 95 22 13 26 -64 12 16 25 -25 10 -30 53 25 14 8 -4 9 -11 1 10 -1 -2 6 0 -77 35 3 24 -17 -26 6 7 17 8 34 -10 2 -23 17 -10 7 4 9 44 21 13 -12 21 7 -6 -16 21 0 -22 37 10 -13 -38 -43 -12 -31 -16 -15 11 -7 -50 -12 12 -32 -1 13 67 -16 12 5 4 22 15 69 -6 -8 5 26 60 -37 -23 23 21 -2 -8 34 34 -1 1 -7 -33 -19 17 -41 23 24 -21 37 5 17 -41 45 -8 11 6 26 21 -12 9 17 8 -12 26 -24 31 21 1 5 13 -24 18 17 47 -26 -19 -2 55 -51 -5 7 85 36 -19 -49 6 124 39 -20 40 85 30 83 -18 -9 38 36 31 28 37 10 -12 -15 -8 -2 44 37 127 -91 40 22 54 -25 98 -9 18 -66 -23 28 46 -2 -11 -33 89 19 18 -30 28 4 19 -24 -21 -52 3 -10 22 -73 4 -7 -28 28 59 3 -7 40 13 79 -65 120 52 41 4 3 33 31 -45 44 33 -18 25 -57 -3 57 8 35 -28 -46 5 88 10 1 -26 -8 -6 -5 -7 -3 -41 -46 27 -44 -20 -42 -57 6 11 7 15 -44 -14 15 19 -15 -6 -9 32 44 3 -79 1 21 -65 -55 15 68 14 -15 99 -57 52 30 8 42 1 -25 -10 8 73 24 -73 -46 28 24 -6 -40 -20 57 45 44 10 72 47 8 -36 27 -43 -26 -57 -16 16 -29 -26 16 -3 53 21 76 77 4 -46 -20 0 27 -13 -17 7 57 -18 -12 -16 -9 -5 -8 42 26 -16 -6 -1 -5 7 69 -40 -37 10 -6 -4 21 57 -20 14 -25 29 14 -10 14 -5 -5 38 27 9 -8 -11 1 -20 -11 -19 -5 10 -12 19 -20 -19 -22 37 48 45 -6 58 -7 -29 -20 -8 9 0 18 -29 40 10 -16 -21 46 -4 -11 -25 9 4 29 -4 16 10 6 -4 -50 33 -30 15 -34 11 -1 3 -95 -18 5 -17 5 44 65 59 37 88 23 -5 45 17 -60 64 -6 -52 0 0 -38 -4 -45 17 0 28 -34 16 13 27 -14 -1 -7 31 49 27 -13 -31 5 -8 35 -88 76 -5 -35 71 33 -10 54 28 2 45 30 120 -12 121 39 -14 10 -16 11 74 47 50 24 73 16 -47 10 -11 -13 7 42 54 8 111 35 43 -9 53 64 -11 -6 -1 -26 -4 36 57 22 57 -6 115 -11 49 -21 43 86 8 2 75 33 -27 -17 66 -29 -10 2 2 7 43 -21 -11 -46 -13 86 32 -27 19 35 -21 28 -20 23 -10 75 76 23 20 -5 20 -21 37 -7 11 -24 0 -33 -6 -53 18 -3 -16 55 32 25 55 73 0 27 -17 48 72 8 36 -4 -14 -1 33 20 53 26 -69 -47 13 31 -34 54 27 -37 15 49 10 83 56 -12 10 20 -4 44 77 107 -29 9 23 29 33 -17 -17 7 47 -11 -25 6 28 63 54 -7 15 -6 -31 -13 -20 33 16 12 -14 8 -21 12 21 16 -21 -22 3 -13 18 2 22 -17 8 43 -31 -6 -2 -3 20 7 -37 36 22 22 1 8 28 -26 3 -49 54 -19 14 -12 -20 5 -31 -36 30 27 42 17 4 3 -22 4 -2 9 -4 24 15 36 69 53 -5 -5 -6 27 -11 1 19 -11 -20 -13 -3 -21 -26 -10 19 -9 31 -36 -25 -52 6 7 35 0 -11 40 -12 1 1 -3 -2 -3 41 -3 -5 -14 31 -8 45 -24 27 -14 -16 -25 38 -39 -22 -5 -1 -25 6 14 6 45 -8 -43 17 -66 -15 -18 -59 52 -52 -9 -7 -46 -8 60 -40 -75 -8 45 -44 70 -75 -25 -37 14 95 -86 23 -42 0 35 -3 -43 74 54 41 -21 2 17 -46 -28 -6 27 4 19 -16 6 -100 31 -92 -86 -23 2 -50 -8 15 -18 2 28 65 57 9 53 -43 -30 -66 12 -56 30 -52 67 -6 -105 69 59 -67 -1 21 -11 -8 -16 -2 -7 42 35 -2 11 59 20 2 -10 -22 2 42 8 29 -2 5 -26 11 -44 -18 -17 -11 -27 -9 12 31 2 9 -81 -32 -12 -60 -13 73 25 19 26 53 50 -46 -18 -37 13 16 27 23 -33 20 18 -35 37 15 -67 17 -25 84 -20 -53 66 43 -47 0 -3 -55 -24 -49 -41 3 -31 -22 22 31 74 15 -17 -27 -8 23 -43 34 7 -75 61 -15 14 3 -101 12 6 0 17 7 -8 -18 0 -39 0 10 1 37 16 3 37 -22 1 -8 10 -34 -40 -42 -29 -18 -3 -39 5 13 12 -7 -32 20 21 11 -8 19 -44 36 -5 82 -4 16 5 -8 6 -18 4 -30 28 -38 34 15 2 -40 -32 18 -34 -42 -7 -6 31 19 8 35 8 9 3 6 32 -22 -17 53 45 34 25 -3 27 -24 3 31 3 -15 -20 -3 3 7 -40 0 -30 -24 -33 17 -3 -21 -8 31 -29 -46 0 22 16 4 -16 13 -43 -17 11 49 27 -6 3 -57 29 -8 47 -6 8 25 48 7 26 -36 22 -65 46 -87 -47 44 -93 -52 -7 13 0 -67 -73 8 -15 -42 -53 -39 27 -30 2 22 -77 127 37 5 59 -19 18 20 -22 0 127 35 -58 33 -5 -20 31 -2 13 -10 15 -39 -63 -26 -3 -22 23 15 -7 5 14 -118 -58 -4 25 -34 21 9 -38 65 78 -89 -2 -22 -1 -23 36 44 -60 18 9 -90 -36 96 64 72 -10 40 74 -110 47 -62 21 -22 64 49 -97 -23 44 63 5 -8 14 -37 46 1 -107 -6 -1 60 -5 22 -24 35 2 12 -106 7 -56 -46 77 -30 42 -31 -107 -16 42 8 -44 -44 -47 -29 26 -58 -72 -3 54 24 -44 66 -5 -47 1 76 61 -35 -24 -52 -4 -39 36 10 18 4 10 6 -9 28 -20 80 66 -56 -33 21 -61 -59 -92 -60 54 -4 -5 -41 -64 20 3 14 -7 -1 -14 -61 59 -18 -9 -15 -86 33 1 -45 17 -32 0 -17 44 4 -35 -7 61 23 59 -40 -4 -83 2 10 -24 48 -15 -19 27 4 8 66 -34 66 -33 -28 -39 8 5 -22 -24 -9 -21 -36 15 -39 6 17 -2 2 6 -48 27 1 21 45 20 -34 -3 -10 -18 -37 65 -3 -20 -14 47 -31 -15 -9 -112 -3 38 -10 -19 7 -31 28 -17 18 5 -10 42 -30 21 -26 10 -53 -18 21 8 58 39 -1 4 64 9 3 106 -18 31 15 -32 -38 -7 70 -27 -6 -96 -17 46 -19 54 40 -7 -14 -20 93 -23 -7 62 -2 -39 -16 100 60 23 -14 88 36 63 48 6 27 19 -10 1 98 54 31 -41 49 -22 -35 29 31 39 91 53 1 87 -15 50 14 70 -11 30 -2 -15 -41 3 91 -16 12 -3 -12 101 28 -29 37 34 -10 73 -44 -3 34 -3 48 77 16 -44 91 83 18 -45 59 10 6 45 -37 10 -2 40 -15 5 17 -19 -30 -17 9 2 -1 -17 65 -35 51 57 63 -4 0 -39 11 -50 -27 -1 33 -23 -9 4 33 -9 32 20 -18 41 -25 56 -10 35 28 31 30 5 9 -10 -33 -6 16 94 -17 -25 -7 53 -31 39 35 35 -18 -4 -19 12 62 35 12 -32 8 22 8 21 3 -54 -4 28 -21 95 -53 42 11 -5 -18 3 32 -47 -10 -32 -18 -16 7 3 -28 -22 56 22 -14 -72 -3 23 -13 30 -26 7 4 6 0 4 -49 20 54 15 5 18 -3 -15 -4 15 9 -51 -9 -5 7 2 -25 13 33 14 8 -16 10 -34 3 -37 13 23 -33 4 19 -27 -4 -23 -30 25 -23 -6 17 6 -40 7 0 -25 52 1 2 12 13 0 -24 -8 16 29 44 -12 10 12 -90 7 -16 -21 16 -59 22 10 15 -2 -11 28 -11 -21 -8 -24 11 -6 -6 12 21 -23 25 9 -11 -8 38 8 5 26 43 -17 27 46 -31 -30 43 -15 32 -36 42 24 26 -37 -8 -10 15 -22 17 -3 -58 -14 37 0 -46 52 2 22 -4 64 12 -22 29 107 -36 50 -13 86 -33 7 19 31 -15 1 54 14 66 -14 -33 31 4 18 -7 26 3 -11 -26 38 -20 15 -27 -13 -26 57 13 44 -19 -37 22 -28 27 32 0 -3 -67 -13 44 24 37 23 1 58 -14 -33 -4 35 -8 52 -13 57 49 19 -64 43 37 -30 -11 37 -1 -93 4 -3 95 16 28 55 51 7 -33 1 12 -57 2 3 47 3 -25 -42 -1 48 107 -70 -38 75 30 72 28 31 4 -5 23 86 -3 -27 -57 54 42 -22 -5 -22 57 -16 43 -24 -43 68 58 -25 34 38 26 -70 69 58 83 45 -63 31 14 27 54 -15 18 -88 -111 28 -64 9 5 -27 -32 -74 33 -28 -4 59 -11 69 22 49 -20 18 -28 55 109 -15 7 -11 -13 -8 28 -18 -13 16 31 70 8 67 -58 19 16 17 -19 -16 0 -29 -15 -8 -11 -11 -11 10 8 20 -17 26 -62 2 -8 24 3 -23 15 -33 6 25 31 -11 -44 34 7 -7 -3 21 9 11 -45 27 8 4 27 -54 8 -7 -29 26 3 4 -11 13 59 -41 -9 -33 -2 46 -40 8 -4 -32 2 -4 -5 9 6 43 22 23 -66 -9 -30 -7 -14 -19 1 2 -12 -9 45 -32 17 2 41 78 51 63 -1 19 7 9 -12 33 24 16 -13 -73 28 -8 5 1 35 11 52 14 20 32 72 42 120 -14 84 25 34 2 22 13 11 -88 21 35 -9 96 39 107 41 -6 -37 54 -6 25 -20 -16 28 23 75 -43 8 66 68 5 52 -1 75 101 -15 91 -79 99 1 24 28 86 -16 -17 68 71 127 21 5 24 41 6 20 111 90 8 33 55 -35 -37 5 40 118 12 72 11 41 1 49 -48 -18 -34 12 -52 -10 -21 37 7 -35 -20 45 10 -66 -8 -37 10 78 14 16 -10 13 34 43 -18 32 6 27 65 -41 -35 -36 -39 13 33 72 -19 40 23 -26 30 -6 6 3 -48 -69 89 -5 -32 -13 -31 -9 15 -37 -87 25 -12 -43 -21 25 -7 -5 41 -24 70 11 -60 11 -89 -42 -9 -16 57 -28 98 -62 -9 40 -9 17 -64 10 45 11 -7 -8 -4 13 12 15 11 -42 -21 25 -40 39 -22 7 -9 36 -24 -19 17 -16 -5 -10 -56 -6 -8 13 -3 -7 13 -2 0 -46 -20 -10 3 57 -27 -17 -27 13 -25 -7 8 15 -23 -34 -9 -8 -22 -23 30 -12 8 28 27 9 -11 19 41 -4 10 39 7 17 -13 -21 20 -14 -29 -27 18 -20 -14 15 -10 55 -18 5 16 18 7 -29 -27 7 13 10 22 42 -3 -2 -19 -4 7 7 -11 17 44 28 2 -43 36 22 -1 -28 -7 25 -3 10 -35 -13 17 57 11 35 47 -55 15 5 39 -56 -7 28 37 -57 15 -4 -16 17 13 -44 39 45 -16 47 -33 51 40 26 10 -15 -57 60 -30 31 3 8 -4 67 26 58 -20 -8 8 -9 -4 -29 -61 4 -7 53 34 55 -20 18 -41 -3 60 -7 -11 30 -3 28 33 -9 13 -32 -22 -31 0 -6 -40 -14 72 -39 85 27 10 -69 29 47 -3 -40 36 -26 -26 -4 -17 -36 3 17 1 21 37 11 25 0 4 -48 18 14 -2 48 23 38 -84 -3 -26 -28 -10 29 -18 -18 -1 -5 15 -33 -45 66 103 -3 15 11 17 98 -18 14 -8 -44 -17 -20 5 40 4 52 -59 -31 -28 -30 -22 -22 -46 -52 -96 -24 44 4 -3 -30 -70 88 -53 44 -38 -16 -111 1 -64 82 -54 -58 71 7 -33 -61 -7 -43 5 67 -74 22 0 -6 24 -25 -32 78 25 -19 47 45 35 -90 -15 45 33 43 -5 69 1 89 -16 14 -57 -17 13 33 18 32 -9 -35 40 -10 -7 25 23 19 4 23 24 27 6 10 12 -25 8 6 8 34 -38 27 21 46 -20 -18 0 21 -70 23 76 -15 7 60 -15 24 -9 -9 -45 8 -8 -40 -5 0 39 -36 -55 -28 12 -27 -27 11 -44 -26 14 37 7 -48 4 18 17 20 13 17 1 46 10 -52 -8 12 -17 1 -34 3 19 -8 -17 32 -8 0 14 -14 0 -25 14 11 12 -17 -67 56 -14 -79 34 -18 26 -66 -12 -32 -38 19 -72 65 -27 -42 26 -22 -58 14 9 -14 24 -71 -14 15 -28 -104 -2 16 -110 3 -7 11 3 59 56 -66 -15 0 -75 -55 -30 23 27 -38 33 -3 10 -65 -41 61 -20 -30 16 31 -3 -31 42 38 23 -65 2 32 19 -6 -4 47 -26 -15 3 19 6 42 -17 -79 -70 22 34 37 -37 -69 -66 -55 -24 3 8 50 37 -63 -35 20 -10 -82 76 51 59 20 15 -10 52 81 9 0 92 39 -86 42 46 -50 -10 -7 -8 14 17 -3 34 88 -63 -34 35 -112 -13 -26 -50 -2 -17 -26 53 83 -11 127 30 -49 3 -39 -86 -66 14 59 36 40 23 18 -22 -63 -14 20 -48 46 -17 50 -3 -73 -35 -36 -62 -19 -34 71 -47 -17 9 33 73 -9 42 47 -24 23 -40 -47 -12 -99 -3 13 27 -38 20 13 5 31 -2 36 -5 -89 -91 8 4 45 52 106 -19 20 -10 5 41 0 6 39 63 20 -76 0 9 -30 23 -3 -6 -3 12 16 11 7 -32 2 1 69 4 59 5 42 -7 24 -20 -30 25 -22 -3 -7 -27 -13 25 16 34 17 30 0 8 -4 -27 -3 -2 -20 10 6 61 20 7 71 -16 1 9 -15 0 5 -2 -36 -32 -30 4 14 -19 -22 -3 -25 -9 3 -14 4 -25 -6 -13 1 3 -33 -38 17 16 -4 4 12 -28 22 -42 -2 -22 22 -39 -11 9 32 70 46 -24 -14 -21 -3 81 49 -25 48 -5 -6 45 21 6 -20 -8 69 55 66 17 33 -8 -68 20 22 13 61 -1 7 -14 56 121 -36 19 68 86 47 -17 36 -16 17 -2 -68 50 42 -34 3 27 23 31 29 11 68 -10 -25 -27 -29 -38 -2 34 -90 3 46 -5 12 -11 127 83 -54 -62 2 58 11 -10 -9 12 -52 47 58 -35 60 52 27 30 20 32 -47 -9 67 38 -16 63 31 15 -45 4 1 20 -10 -7 -18 32 53 9 2 27 -19 -18 -38 -24 -50 -23 -4 -53 3 17 -35 -68 -59 41 30 -23 -29 52 8 26 47 -22 -9 62 11 -38 -29 -29 57 12 -75 4 -46 -36 13 22 47 25 8 -40 27 1 44 -63 18 14 13 -16 14 -29 18 -14 -4 -16 31 -67 0 -61 -56 28 -23 -4 29 10 -9 13 -26 44 3 37 10 49 -18 46 26 -9 16 37 60 24 46 34 -19 -37 2 -18 4 -3 -6 -26 -19 -17 0 0 -4 17 0 8 11 -37 -25 1 26 6 23 -25 -19 12 26 -4 7 -4 23 3 -6 5 -7 -1 17 -12 -5 26 23 14 13 -2 -28 -21 30 -29 18 -40 31 1 0 -12 -30 22 10 17 -29 -8 -10 -42 49 16 18 33 -3 0 -20 0 -54 -70 -10 21 -4 -9 -21 -4 -13 -18 60 12 -41 -4 51 -10 18 -29 -56 -13 -5 -10 -13 47 -5 -30 -67 -27 23 30 41 10 48 -20 51 57 3 98 88 2 37 -81 -12 26 -28 -67 16 5 -3 59 6 4 74 -12 28 4 28 38 20 30 8 24 -35 32 3 33 2 -62 46 19 -28 -50 65 -2 50 -38 27 5 -36 80 63 10 47 -32 -50 21 15 72 -31 51 0 -40 -23 29 18 -47 42 24 -41 36 -3 30 -5 31 -60 28 16 14 -44 87 -28 41 51 26 -13 41 -45 -26 12 -7 85 21 -16 8 40 27 59 78 0 -31 27 18 -82 88 -37 3 5 -8 110 -17 45 -17 35 -53 -17 -11 -56 30 -59 -15 36 -2 21 -25 -46 -25 -57 6 79 119 60 40 -43 21 -56 -20 -53 -30 11 -13 29 -8 -21 -26 -22 -52 9 -53 32 -49 7 11 13 6 52 6 -22 -38 32 1 75 32 48 21 22 -38 23 25 23 -75 -73 -73 26 27 -10 -46 -3 -6 -69 -77 -13 -5 86 14 -64 11 15 22 10 -29 -2 -4 -19 -24 -26 8 -27 -1 24 14 30 -12 30 -13 5 -1 -8 14 -4 20 1 -38 43 26 -14 1 8 4 -16 -12 31 42 -13 -21 -26 -30 2 -11 24 -39 14 -15 -23 -25 19 -39 -2 27 21 -17 4 14 42 25 7 -9 10 -1 10 -1 16 -17 -3 -3 -46 -12 20 -13 -27 0 -32 7 33 -33 -12 -9 12 -28 26 -24 8 -5 26 15 20 -23 23 45 19 9 17 37 -22 43 -14 9 23 -41 -15 -46 43 82 30 -19 64 -55 87 11 32 -54 -14 31 -6 69 -14 31 43 21 20 -128 -14 -55 29 -23 -35 -32 15 90 -22 -6 -63 81 -24 6 2 67 8 -17 0 -15 28 -15 -23 -52 73 -27 11 58 36 -29 -51 67 -4 24 -10 69 15 36 -44 45 13 72 4 32 12 38 46 7 19 44 32 63 10 -8 53 29 39 72 4 -38 14 -54 -13 -46 9 36 39 15 85 0 -47 -37 23 -32 -87 -26 16 105 -30 -33 -11 2 15 40 92 -25 49 60 42 -33 -17 10 42 -6 79 -33 -37 70 -36 43 38 -14 -3 25 21 5 16 1 -25 57 73 -8 4 -34 -5 28 -2 9 -1 8 -10 -65 -13 58 -7 -11 17 24 31 10 55 42 52 -62 -80 22 3 40 9 -4 35 -24 8 34 -74 13 48 -8 34 -45 -47 28 0 62 57 -28 28 64 -50 33 -21 -14 -55 25 -24 2 7 9 10 6 -27 -33 -4 -39 48 22 21 -34 51 -33 21 8 4 -3 1 -33 4 -3 -12 0 -11 9 63 -7 -19 1 16 12 -23 6 -2 0 7 2 14 -28 -17 15 5 -7 13 -16 -40 -17 0 23 30 8 7 -15 -4 -10 -11 -6 -14 6 5 8 -28 9 5 -31 10 -23 -21 0 44 0 32 -4 20 8 -26 -10 21 -11 -12 -31 -8 -10 -10 23 -19 35 21 -12 3 -35 31 0 -4 31 -3 -8 29 -49 15 -73 9 46 15 -24 -4 -7 17 -24 18 -44 -55 -10 -51 41 23 17 44 49 12 -12 25 -14 -33 -26 20 1 26 -54 -32 79 6 2 49 110 115 -50 -5 -36 -25 47 62 -26 28 33 40 -85 29 30 -12 -9 81 -39 -16 -5 -28 49 -34 -31 -52 29 -66 64 -6 10 -25 66 -3 -54 -23 95 20 -2 21 1 -2 -31 -13 63 -71 -31 -13 29 92 48 64 106 76 -18 -14 4 -33 36 48 -17 21 1 -18 26 1 79 28 0 80 -57 40 -7 -12 -71 19 55 -13 -20 -12 -15 12 -54 8 37 51 32 17 26 18 45 68 12 6 -4 -22 -82 34 30 3 -19 -81 13 -25 -22 -17 23 -37 0 -42 -11 9 -16 25 -16 10 25 -27 28 12 57 8 -32 11 46 11 55 2 -104 40 15 11 12 7 -25 -6 -1 24 32 -43 -19 -13 42 35 -33 -6 6 22 -24 99 -34 18 12 -31 -27 -18 -30 -9 -13 16 12 -23 -45 -17 8 -18 5 11 17 4 4 -18 9 33 -1 38 12 -19 -4 -26 -18 22 10 -12 -4 21 14 -18 8 -6 -67 17 -2 -1 14 -23 33 -21 2 4 -11 88 4 55 3 3 6 -22 16 57 2 -1 -2 -36 -25 -17 -23 -9 10 -16 -21 4 -3 -28 -30 40 -3 -18 0 10 6 -2 -6 30 -18 -21 25 47 3 6 2 18 8 1 31 51 17 -10 45 12 31 -20 -19 -11 78 13 23 3 47 44 -23 -53 12 26 -19 30 -59 -41 3 70 -2 3 50 -25 31 9 -14 7 -1 62 24 -45 -24 -27 51 -30 73 54 -10 1 -63 -40 50 -22 -38 49 -20 19 -36 2 -46 44 17 46 -33 28 67 6 -47 10 7 28 -38 -93 6 -15 -9 -18 6 59 87 68 -42 68 -26 2 -19 31 -42 31 12 28 9 19 -1 -27 9 25 -69 1 61 56 -21 -3 -12 75 62 51 -31 -71 28 -13 18 42 39 12 -19 67 43 25 33 33 58 9 37 62 -34 42 -32 -35 -83 46 60 24 45 -36 28 -41 -71 4 -75 28 57 4 -23 39 -104 -30 52 -21 -78 16 51 -19 39 -54 -44 18 12 26 -2 37 -41 11 -22 -43 -19 73 -24 14 13 -15 56 -64 -43 -6 31 84 56 -46 -13 -12 -35 46 -47 -82 36 -47 14 5 44 77 56 23 24 -13 -34 97 -30 54 2 43 30 -36 -48 -38 -66 18 31 7 86 2 33 -3 2 -8 -44 -1 -49 17 24 27 -28 -25 -11 -18 43 -96 82 19 -21 37 -27 23 38 1 14 -1 27 6 20 42 -50 3 24 -34 8 -7 -92 -26 3 28 17 27 -18 -37 39 29 -15 33 -23 7 23 56 18 -25 12 -37 -7 -17 -15 4 -15 70 17 -21 32 -16 23 9 1 1 -31 25 24 79 -4 7 -1 -37 23 7 3 23 45 22 8 -34 4 -12 -20 57 30 -30 -49 32 -52 -11 74 -76 10 1 30 -22 -25 30 47 -30 -1 20 -34 -8 -54 28 -45 -11 7 -24 17 -29 26 15 -84 -61 3 -67 -126 26 -126 23 12 17 16 -97 0 -42 21 -12 93 42 71 101 46 -58 57 57 -36 48 85 1 59 3 12 25 -85 24 -127 20 -11 -39 9 12 -62 -19 27 -127 21 -50 -10 26 94 -4 -6 39 17 30 -26 -57 32 -90 37 83 -124 29 -7 36 34 55 124 -7 -1 39 -58 -66 -84 -112 34 -37 47 10 6 77 63 113 -90 19 -32 15 -31 59 -59 -60 -33 34 -15 60 -32 6 -17 54 40 -43 5 39 71 -10 37 -15 -99 -114 -76 -39 -23 53 29 -63 -91 -18 -40 -24 33 -70 -78 1 -19 -37 13 -36 -29 -65 29 -86 3 68 -7 -54 -17 76 46 -19 17 -33 50 25 -47 15 -35 -23 42 -86 -39 -62 15 47 15 -71 17 -32 2 -9 21 17 -8 44 2 13 -19 -8 11 -48 17 -57 -11 44 14 4 21 33 -4 13 17 -18 -22 -72 15 -21 21 -5 -30 -23 -23 28 62 -17 4 23 -10 40 22 -50 -8 24 18 24 -1 3 -10 -24 10 11 12 -99 55 67 -13 -14 -50 -26 66 16 -4 -36 -76 -5 -4 -13 -60 4 21 5 -17 55 1 0 25 6 17 -3 21 -4 -23 10 1 10 -19 26 31 11 60 -4 19 -21 -37 16 -7 17 -9 -14 0 -4 79 -45 -73 84 -34 99 -35 -83 40 20 7 -25 -83 -40 44 0 83 89 26 54 -55 26 -54 -90 -82 13 -21 -20 68 12 54 -93 50 -2 -35 -19 -26 -72 -10 -7 4 -53 -87 -5 -69 5 -6 -40 51 92 -89 41 42 93 -7 66 69 46 79 -21 5 5 -76 -28 -64 -11 -58 -47 6 48 22 -32 -1 -105 5 22 37 -1 58 -27 -40 7 -34 -17 15 -20 -12 -57 -11 -57 -23 -19 59 40 30 20 48 3 28 32 -49 29 82 -68 -40 -2 -9 65 42 -51 -12 -15 -75 -13 26 11 -21 -17 20 -4 17 -20 21 4 -35 14 52 -6 116 72 -45 -33 41 26 28 -37 44 8 0 -47 3 -42 -22 16 -13 -42 -23 24 -38 -47 -24 -32 -28 -42 -24 6 28 19 13 -19 -26 43 -26 42 -23 37 1 -24 13 2 50 -43 -10 55 -9 16 20 -35 -3 48 -6 -12 -40 -50 -7 -2 9 4 -6 37 40 3 0 15 13 -1 -3 -65 -33 -6 -5 -31 -28 -2 24 12 -3 2 -8 -31 20 -23 40 21 13 56 5 -4 -7 1 45 1 16 -8 20 -30 -46 51 -17 30 8 -40 -22 24 -10 8 25 -2 65 -7 4 -18 10 -30 -15 13 -22 -22 31 -53 -6 -25 17 -25 12 0 -3 39 -25 -33 -5 -23 34 -71 7 14 -8 72 -9 -8 -27 19 -11 8 -2 23 48 7 -3 47 11 -8 52 -72 10 -13 60 -28 -21 25 -53 63 60 -1 15 -22 -3 109 3 -50 -52 -7 61 -5 48 3 42 21 -73 45 2 -46 -44 24 -12 -1 5 -6 -21 2 -43 -31 -35 -19 -25 -36 55 -60 5 -11 43 0 -29 -19 1 -1 50 35 -112 -25 -17 -38 -12 94 -27 -109 26 -29 23 -49 1 -77 28 -3 9 5 -43 38 -39 58 41 -4 -47 125 0 56 -35 53 -4 -6 35 -16 4 -52 -61 -50 21 74 -109 -21 -80 -2 -94 20 33 18 17 75 4 -41 -2 6 -2 -26 -8 26 32 -91 -8 2 7 8 -53 -50 -38 -104 12 -18 -6 -106 47 21 -10 28 51 -27 127 0 -4 -14 42 -22 -70 28 -125 13 17 2 37 8 13 1 20 -16 -26 51 -51 71 -60 -42 30 8 8 -63 -4 -92 67 -18 -9 -17 -44 -40 -16 -11 -9 36 -1 45 -40 54 18 21 -5 -20 -59 21 15 -13 37 9 -32 1 -32 24 -36 -10 35 21 -20 -39 -17 49 -20 -39 39 -24 -49 -14 -10 -16 10 -3 -6 -4 -2 -38 16 -23 -43 -10 18 53 29 4 11 34 -7 44 86 -26 34 -7 12 74 6 -16 -4 -11 -17 10 22 11 -5 -7 3 -24 -1 -6 -54 24 22 -33 40 60 25 -10 58 -12 14 -26 2 -71 10 9 1 -21 9 21 -36 12 -14 -29 -2 20 18 -40 16 -4 -29 -3 10 -27 3 11 58 38 21 -25 -19 0 -49 -12 -19 -48 -47 21 -47 -60 -76 51 32 15 0 -69 -38 93 7 4 -24 -19 5 30 33 -45 16 32 -26 -75 -38 -40 -13 31 8 3 -2 36 48 84 -66 -75 18 11 -3 -20 43 31 -24 29 -64 67 0 -57 -43 22 -50 11 -38 -127 43 7 -22 53 11 -7 -22 -27 -40 -53 -74 -59 -62 -49 -23 -20 -27 -29 -36 26 44 20 -23 -41 -5 24 -7 -62 56 -32 36 -61 19 14 -3 81 -23 26 -13 -43 43 27 33 20 30 30 -72 -25 -1 -5 -32 71 -23 17 14 8 -4 -5 -35 13 4 27 -38 75 -40 -44 25 8 -40 17 -14 -12 -13 86 -48 -39 -36 16 -47 -36 -4 -8 -7 -49 -13 -11 -46 -67 -17 -79 29 -29 40 43 -3 -16 13 -48 23 -57 -23 62 -33 -25 3 59 -13 -41 5 -55 -8 12 3 -70 -64 -65 -9 18 -48 -26 41 22 -14 20 -24 -46 47 -15 51 -66 -31 -7 -39 67 10 8 8 4 -15 -51 37 17 32 -40 -12 -24 -2 26 28 31 11 -8 2 8 -6 17 26 38 17 -23 5 -23 17 5 -59 -5 4 0 -17 18 28 23 37 -13 -32 -28 5 26 -7 46 -51 -3 2 -2 -27 15 15 -55 -4 -5 8 8 -37 9 0 -13 18 46 43 1 21 -5 19 17 -10 -35 -55 -17 13 18 17 -19 20 15 2 17 11 -8 -34 9 -36 56 -18 8 -8 30 10 20 3 28 -13 18 39 -19 -1 15 -49 63 31 -21 28 74 -7 12 23 60 -40 -11 -25 -29 -10 2 37 -13 11 15 -39 -22 17 -3 30 -2 19 -9 -57 40 -7 -9 49 39 42 66 126 26 -5 -26 45 67 20 35 -48 43 -28 -75 71 47 28 -2 92 -32 27 -8 91 2 30 -85 51 -14 33 -72 11 7 47 -4 -16 -23 50 26 -19 -42 -7 79 38 50 18 99 -7 -5 74 -5 60 10 32 70 29 34 18 20 35 7 17 46 -32 64 35 13 -56 -19 26 2 23 22 -52 -5 -2 56 -5 -26 4 2 17 23 -34 -67 48 22 -51 40 6 -15 -12 26 -10 -41 23 -40 -26 29 32 -38 -18 -11 75 -8 -11 -35 -19 66 16 -14 -63 -21 -7 -50 14 -16 15 -37 22 28 -37 19 79 -9 -69 -24 -39 -4 1 69 -4 -10 18 -10 22 -1 6 2 40 -2 -21 7 -8 -23 -11 -5 -27 -11 100 47 -15 54 -5 53 9 -25 -46 -25 -20 -42 11 -4 35 -7 7 16 -9 -30 21 12 -32 -19 -37 46 17 27 2 14 71 -30 45 63 -35 -18 -13 11 34 20 4 -3 -24 44 -19 -10 45 21 -26 34 -7 -6 -24 16 26 -3 22 -6 -22 8 5 -43 -48 13 -28 -30 1 13 -14 -2 -47 -21 40 7 4 2 5 40 -16 29 -17 6 20 14 35 21 -44 -13 -3 -6 -1 19 -38 12 -5 29 30 9 -18 41 31 -53 56 26 25 -12 -13 44 16 -51 -32 43 -5 -35 59 -16 -3 32 38 -12 -25 47 83 -7 23 67 14 -60 30 39 84 46 -68 63 12 29 65 -12 89 40 -24 76 -89 26 54 34 3 -3 44 19 -17 103 -31 -62 33 14 -17 27 95 37 -23 34 37 2 -6 -2 -25 8 -28 15 6 27 82 -43 -15 119 43 -37 37 -69 2 59 44 -1 66 3 63 12 50 48 15 -70 15 -14 -20 49 28 11 -3 -42 -18 7 27 31 45 -49 58 -30 61 20 -49 -15 -16 81 24 90 -15 -21 -110 19 -44 61 48 50 52 46 -14 -10 -11 30 -42 38 -1 -30 0 21 -2 -13 -48 -39 0 -127 -31 -14 -69 27 -76 -52 -66 -51 40 -5 -1 45 0 -3 28 -11 -7 8 -22 -29 -42 20 29 -35 37 25 21 -9 -12 37 -10 57 -31 -73 -36 11 -20 -29 -32 -60 47 -43 23 -56 42 50 -52 -4 11 1 -20 -11 -103 -12 16 78 -42 25 3 10 -31 54 -16 -21 -18 32 -11 -9 -53 15 6 13 -28 20 12 22 32 9 26 39 16 39 46 24 65 5 -16 37 -10 -36 10 -28 -27 28 -6 -27 -47 1 -66 -24 9 8 46 -32 -46 9 26 -32 -50 -2 -14 -8 5 38 34 -17 -29 -46 -33 36 18 -39 1 -25 -1 -15 -10 -19 16 25 -5 -12 -30 -13 -25 44 20 14 5 9 26 7 -8 -30 -4 24 -15 -22 4 31 38 65 3 -28 40 -1 -14 37 -51 -12 -48 -18 13 54 -49 -13 15 -7 -39 21 39 -3 -114 61 -22 34 41 6 -3 -15 -17 -45 81 32 11 2 -27 53 -28 3 49 -7 -22 32 -11 69 -2 38 54 15 59 -17 10 -13 13 -32 -47 -19 72 5 24 50 18 9 37 7 -10 9 -17 17 47 7 106 7 7 -41 -42 41 54 -5 -3 1 -8 -16 39 30 0 20 -1 18 -10 40 19 26 -52 -19 -49 53 5 16 69 -3 -72 -57 100 -80 38 -9 24 38 28 -51 9 -5 15 10 -15 67 -11 25 -32 47 4 -2 22 14 11 -3 -29 -52 -1 14 -13 4 17 7 -17 1 9 18 2 -64 -26 25 -15 6 -52 -24 7 -29 -16 -7 96 -31 48 21 3 1 13 0 -19 37 -90 27 42 25 -28 24 62 13 14 3 -10 -12 23 16 2 -2 -33 -36 -32 77 -47 14 -4 -34 -13 64 12 22 7 17 -37 2 17 -1 0 -13 34 11 6 -39 -5 38 -32 27 -16 10 10 20 15 -7 22 -14 11 -25 -11 57 32 5 -5 -22 42 -3 34 4 -16 28 -51 49 -4 8 -19 -23 -27 -35 -5 14 14 73 2 9 9 -21 -1 13 12 7 3 7 33 -16 -8 -12 -12 -16 16 -7 20 3 14 -22 -36 7 16 -19 -3 20 -24 10 -26 -33 30 25 -4 34 -25 35 -37 16 49 18 4 5 3 -31 14 -54 -9 19 -45 88 15 1 -3 19 -22 24 -74 -33 -42 21 -9 -84 -23 19 23 28 41 75 7 -48 -25 -19 3 32 37 19 5 69 25 33 101 125 35 64 2 13 -23 -79 52 -126 0 35 -119 37 27 -4 -3 -2 -44 88 87 33 -17 -41 2 25 -21 -12 5 -1 -31 -38 -35 -52 72 119 -2 25 2 80 45 -7 -48 37 102 -4 35 47 9 41 -29 33 12 -128 -18 46 -11 10 25 -61 29 87 -84 -52 -54 77 29 64 117 -8 6 39 10 1 37 -119 45 11 -12 -21 -34 -17 25 -6 -1 26 -23 73 9 36 73 -76 -94 -17 29 -59 60 118 -13 13 -4 -36 -2 11 -37 -27 20 4 54 -37 -47 -10 -22 -10 23 13 6 8 20 3 18 3 -27 61 -28 47 27 24 25 -5 -61 39 -27 -23 -27 84 -84 64 -115 -9 49 14 -26 -16 -25 74 126 56 0 70 -37 4 87 -11 -29 -29 -61 6 -16 54 -33 74 14 16 54 -28 31 -8 -2 -13 -12 7 -21 5 25 -6 -15 11 -60 -11 55 41 69 -7 -25 28 -27 38 55 19 18 -27 -72 74 -27 61 -22 12 36 -11 23 -45 -19 6 18 16 17 27 20 37 28 -40 -4 58 15 -19 106 13 -14 -9 53 -49 13 42 -23 19 -8 12 14 -87 9 6 -10 1 -20 3 19 11 -8 12 32 24 -5 -6 -4 26 -26 -11 66 10 -36 6 13 8 34 35 35 0 -11 -45 115 16 -72 36 -88 53 -14 -12 -3 -51 20 42 44 -38 17 41 -49 43 1 -6 -24 50 -49 5 -69 37 -17 13 80 36 -16 -2 30 17 -21 -26 -35 -12 29 -26 -50 97 18 -27 48 -23 -38 39 11 -5 49 -18 10 -25 -7 12 -45 -20 -21 8 -24 -8 69 4 -3 -57 73 7 5 7 -13 -29 5 -31 -14 10 -1 22 6 101 70 -38 104 1 14 13 -72 -6 -21 -16 -23 20 -8 3 -23 41 50 60 -45 -15 5 -17 -47 21 -22 -38 -6 17 -54 -52 -5 2 -11 24 -76 36 16 -90 32 -39 23 -10 21 -11 22 27 -5 28 -53 4 -4 -58 3 30 23 9 10 -12 11 -25 -30 -59 3 43 -51 33 -28 -14 -5 -7 -6 36 -27 5 -9 61 11 -37 -7 34 18 -38 24 41 -5 22 59 -15 -16 -42 -12 38 69 -12 48 -2 -17 9 38 12 17 -10 22 -4 -34 -25 -31 0 -9 -7 1 -18 6 -23 -8 28 -22 45 -26 20 0 -16 8 26 -13 22 11 -10 21 43 2 13 18 48 -2 27 19 -2 13 20 25 30 -1 15 7 12 25 -27 -15 -20 -25 -9 25 16 7 -12 -1 -30 38 28 -8 16 -5 3 12 55 24 -8 -24 -21 -15 34 -2 -11 39 19 1 -59 26 17 11 14 -15 4 -30 15 37 18 7 27 -29 2 11 11 11 -14 55 0 -48 -41 3 -3 10 -51 6 54 10 -5 25 -20 -74 -7 -10 8 -19 -33 2 -24 35 -47 -13 -10 97 -31 -126 -66 -6 68 36 -20 -42 -22 31 43 -27 43 -26 5 -67 23 32 61 -23 -60 14 24 48 30 -15 14 -3 30 78 38 -84 3 25 23 2 -59 53 -25 52 12 -49 -125 2 -57 -47 8 22 -17 11 6 44 21 -78 7 12 47 111 -87 38 24 19 95 -45 41 -16 -61 59 50 -26 29 46 -12 59 -26 -3 -3 27 18 -42 53 -40 -2 -52 -25 17 45 -60 -28 12 -16 42 37 -18 25 10 -57 -4 -86 -5 102 -2 61 26 -21 -79 -4 -3 -48 58 4 -47 17 -69 -33 -69 -50 11 50 -44 5 51 27 2 38 -105 -22 16 -8 34 -59 67 2 7 15 17 29 -14 -6 -4 -19 25 25 23 3 -42 -25 -26 -16 -55 32 17 47 14 26 14 12 69 -31 58 69 34 -33 25 2 17 17 -15 47 66 1 -6 -25 -46 -20 16 19 41 22 1 13 22 6 -13 -10 14 17 -4 -15 -16 5 10 -11 23 16 -4 14 -13 20 8 14 35 25 32 8 -29 26 -42 14 33 9 57 14 -16 -43 -29 2 -29 13 18 48 -51 16 17 -3 5 -33 22 -26 -24 -7 3 -3 -17 -66 7 -15 -15 -24 24 -22 -15 -10 21 -13 34 -10 -36 -24 -48 45 23 18 36 30 -2 18 -11 -7 23 -33 26 24 -26 12 2 30 -6 37 61 21 17 -8 -5 36 -55 56 -4 87 22 42 -2 31 -2 3 -38 70 9 29 -30 34 -60 25 3 22 -10 -56 -91 -14 -15 -9 64 35 -7 -58 35 -26 -37 -42 55 12 1 64 -80 79 4 -33 22 31 -16 35 38 -14 1 19 81 10 7 -41 -27 -24 -14 -60 26 5 -4 107 -1 16 98 17 8 -22 43 -26 -11 90 51 21 -48 -71 24 -26 61 11 74 53 -11 51 20 -71 -1 -2 20 -6 -16 -35 -25 62 14 1 62 89 27 53 9 58 -30 3 -9 -13 -12 -13 82 -29 -16 -34 21 37 -69 26 -21 -95 18 -53 1 56 74 -17 25 -6 -58 -14 -46 24 -56 2 -13 64 27 -18 -18 -42 -3 -55 16 -47 10 -6 92 -4 38 35 14 3 -55 10 38 -36 -99 57 -70 23 -58 3 -5 11 -54 24 41 5 29 10 41 31 44 6 75 90 -42 3 16 -2 -59 54 -3 -1 -38 12 -45 -25 18 7 -9 -11 17 26 23 -8 -12 -19 -4 -18 -21 6 -2 -3 20 40 -45 27 -7 -3 -10 -38 -9 12 -3 -7 -10 -34 -13 7 -36 55 -8 -11 2 1 -8 -22 -2 10 -3 -3 5 25 3 -37 8 -35 -17 10 17 6 -2 2 20 37 -8 -2 0 21 13 -42 15 -11 -20 20 0 1 -23 -15 6 4 -9 31 -16 3 -20 9 4 25 2 -4 -45 8 -17 -15 -5 26 28 71 63 25 16 23 8 -48 43 -20 -67 65 40 -16 94 95 -11 -1 -32 54 -6 14 12 -2 12 11 -10 17 17 16 3 24 78 31 34 8 8 75 27 -61 48 63 20 -52 28 -3 10 -12 26 59 -51 29 65 -20 102 79 -56 -9 121 -16 21 57 65 13 -65 9 -28 27 -101 -1 1 -22 -2 82 14 5 55 14 0 -89 -43 74 106 35 71 36 54 74 -25 26 32 -11 -25 -40 -15 46 -29 62 -127 -27 17 -1 -52 -8 -58 67 -34 -33 41 33 0 47 -47 -5 39 47 -33 25 13 9 0 -6 -37 18 18 -3 28 12 74 13 71 -15 56 -67 3 97 -3 5 -66 -46 72 51 111 -92 -101 -64 -40 86 42 67 -37 34 9 -8 35 -33 -34 -56 43 84 -31 -33 23 -11 99 19 44 95 3 -40 -106 -42 -25 -36 19 -27 -21 -58 12 94 -5 -49 98 -127 -66 -115 -127 -8 38 45 31 -110 22 3 -7 -17 42 33 21 69 11 10 -20 46 10 -24 62 -8 -10 -18 -6 33 2 38 18 20 18 -37 38 -19 25 36 -1 3 -28 38 27 -31 -32 69 3 38 67 16 -36 22 23 -32 4 65 -25 -13 -2 -32 52 -11 -4 24 23 -26 -79 -20 48 14 45 -8 4 -47 -37 -12 10 -4 -30 25 0 -7 -12 4 34 -36 31 7 -37 21 -66 -21 13 8 34 7 -11 43 31 8 18 -22 -31 56 3 37 20 71 13 23 36 52 79 40 5 31 26 10 83 -5 -14 7 6 -7 14 -7 46 88 29 48 -36 54 8 -6 -3 8 13 37 18 33 43 40 13 76 32 -44 -13 -8 22 -15 24 -3 3 20 39 82 52 26 36 37 -14 12 60 32 -12 2 44 -28 -6 35 84 21 45 -53 -46 32 33 19 79 18 -19 8 -8 24 61 6 5 33 40 27 21 22 -35 120 108 24 -30 22 23 55 34 -3 9 -5 -4 21 4 -13 -6 8 22 1 33 26 2 34 12 15 12 60 -6 22 -22 19 -8 78 109 -56 45 -34 42 1 -14 46 -39 56 22 -52 -14 -35 27 4 22 -1 -10 -31 13 -34 25 -2 42 -7 -40 -5 20 -7 54 26 9 55 48 -70 -4 -15 -31 -19 72 -34 8 9 70 -15 -3 91 4 58 -28 45 -12 -42 -2 17 -37 -11 -9 43 10 5 20 -8 10 -5 -52 -16 38 47 -27 -2 -3 -3 -1 11 33 25 32 41 -61 39 18 -5 -36 9 -16 -23 11 -7 4 -41 -14 -5 4 34 -19 -20 -7 51 -16 5 46 -46 4 20 1 -1 -42 -3 14 6 -38 30 -11 1 -2 -6 22 3 -1 16 -17 -14 -1 -8 21 5 68 -10 15 -10 -1 -33 -8 -9 -8 -4 -13 9 6 1 -9 -4 0 2 49 -7 7 5 -41 -10 23 -3 31 18 4 -9 13 6 -20 3 -16 22 20 10 65 0 26 -36 -34 108 -40 -9 -1 18 -12 9 -41 -5 61 31 -56 -5 -55 -7 3 -31 -3 2 -36 31 -2 39 -47 -58 -16 55 65 21 -44 -90 -17 -11 51 28 26 -29 -16 -60 17 -115 4 17 41 10 -24 12 43 -27 -31 20 -54 -35 109 -65 19 13 25 -28 -6 26 13 0 37 -21 29 28 -46 10 21 -54 50 21 -24 -55 -35 -11 38 -42 52 -17 -2 56 4 -49 -7 5 -11 -22 -61 -34 -10 -39 -47 -54 -18 14 -7 -17 -48 -107 -28 -17 22 -44 -10 -10 -44 13 17 58 -1 -27 57 22 -37 -58 -21 -14 47 -32 -15 13 1 -4 0 16 -10 -8 75 -43 36 -49 48 -53 -5 55 -31 -36 15 45 65 3 6 21 46 -16 79 -21 20 21 0 40 48 -22 35 24 32 20 45 -19 28 1 10 -39 32 9 -74 42 2 -13 13 -25 22 38 11 12 -20 25 -13 -5 -46 7 -25 21 53 -19 0 14 45 15 -6 28 -15 -19 18 -1 -47 -2 17 24 19 23 12 -12 12 -3 -21 -38 19 -18 34 26 -20 69 -20 -18 -3 -11 9 -35 -31 26 58 -31 -11 18 -8 26 8 -42 1 -16 19 -52 31 0 -21 -10 -3 -17 34 -9 -12 3 26 -13 20 0 -54 -39 6 0 5 4 -3 -12 -19 -42 17 -26 15 23 -12 1 -31 21 23 -32 -18 -5 -4 -26 29 -9 20 -26 26 24 57 31 -31 -21 35 -11 41 66 -2 45 -8 36 66 56 -72 13 -38 85 -81 125 11 24 62 27 13 39 43 127 63 -56 -48 87 -21 1 16 -4 21 9 77 12 -8 52 108 38 110 78 -109 27 -20 -22 34 1 8 86 12 17 24 -2 112 -5 50 42 65 -35 -10 -37 -70 -29 -10 -22 65 -11 -4 -19 126 28 -60 120 37 17 75 49 24 37 29 15 25 -19 49 30 70 13 34 -52 0 -13 35 -42 -15 113 99 53 67 69 -2 2 54 -28 -62 37 8 16 24 -12 -88 -19 15 -32 35 95 46 50 -11 -22 -19 42 -3 91 17 33 52 60 -6 -16 -13 -37 -16 28 123 -25 63 29 -11 1 -33 8 -15 3 68 65 -69 89 56 -47 -66 54 -23 18 45 -9 -30 61 -31 12 -2 -89 -87 -4 8 67 -6 18 14 27 -4 24 43 -9 -61 -51 -36 -61 29 22 -16 11 -14 44 -22 -25 -34 -13 23 -30 3 32 4 16 -90 -1 9 -2 -27 -5 -14 2 65 22 -15 -49 3 -84 -10 29 8 21 -6 39 -3 -71 -9 -10 -2 -20 -13 -10 6 -1 3 18 15 53 30 -34 -47 14 -32 8 32 19 -44 26 -28 13 0 24 -22 38 7 -6 50 -23 31 21 54 21 2 -9 -16 -13 -37 -18 -25 -44 -55 11 29 -5 36 -48 -1 -23 -6 -26 30 -14 -15 -26 -5 23 -28 16 17 72 -3 -99 -42 14 51 -16 0 9 -6 43 35 60 35 120 -38 38 126 -56 -21 19 25 0 96 17 26 -4 45 -39 30 -38 54 24 -24 36 -67 94 -6 25 -39 31 6 39 -29 23 11 26 84 71 22 -5 -23 31 -32 36 109 -45 48 -32 21 50 30 31 25 43 -13 2 49 12 29 17 41 8 60 9 49 11 -27 -1 -14 27 5 122 -5 -48 -19 13 11 -37 40 88 -29 4 71 2 -40 15 -83 1 62 26 -31 76 14 47 52 34 -40 -11 31 29 44 49 38 -77 46 -22 68 29 81 20 22 65 -36 40 28 -41 -92 6 31 -60 4 -15 -30 -12 90 -30 -18 19 -74 -60 70 19 39 5 -64 3 -32 36 14 -8 4 -10 -48 37 21 6 -68 46 46 0 52 10 -22 40 1 -35 -27 6 -28 1 -19 -49 121 10 -2 8 67 -33 -25 52 -5 36 43 52 20 52 -63 7 41 15 56 -39 15 -30 -53 60 -103 11 49 -52 -13 -44 -21 33 -2 41 -41 53 9 11 -39 24 -1 -16 -49 8 -12 -32 -21 9 -3 -17 -11 27 18 22 -25 43 -9 -31 11 26 -26 -35 7 -49 18 30 13 47 42 30 -13 -6 -12 2 122 -48 5 9 23 26 29 -2 21 4 16 10 -28 0 9 -26 5 -25 -37 -21 23 18 -43 17 -4 30 -17 -43 -45 -32 -13 -27 -16 -8 -2 3 -18 -26 40 -2 11 15 -7 1 3 -6 -43 -17 26 2 -68 -11 53 -63 44 -17 -63 19 -39 3 -28 57 19 -30 14 -54 -54 15 -64 -21 -13 -26 11 -74 -28 15 -20 13 -54 -66 7 21 -10 9 -126 -14 -50 -64 -126 -76 -18 20 21 -29 66 -122 -42 -14 69 35 -25 22 -11 -46 -20 26 -30 -122 11 37 19 -24 116 11 32 -80 25 33 -28 124 -16 22 68 -46 -108 -107 54 19 20 -30 -11 45 -6 43 -11 47 -21 66 -11 -4 -23 -58 -63 10 -43 72 -31 -22 -43 3 -31 21 -11 40 -81 -62 -8 -36 -23 64 -19 -9 25 21 -54 -48 12 -36 3 -68 10 -27 40 -79 -7 -8 55 -36 53 67 -96 78 -52 -32 23 14 28 16 -74 38 116 -33 27 23 45 12 -81 -70 1 -12 34 36 -56 13 34 -67 -2 26 -4 35 33 0 60 -81 36 -14 -27 53 9 -24 16 -25 33 -42 -27 -44 -8 14 21 -41 1 -70 -76 29 35 80 37 6 -37 19 -71 -38 -1 1 42 61 -1 -22 -25 31 -115 -24 32 21 25 -19 17 -6 6 -9 34 4 -43 -38 50 -9 38 -82 -6 9 -42 -55 -21 29 -43 -26 2 -5 26 -2 -2 1 24 3 3 18 -40 -16 -82 -12 53 -55 50 -25 35 32 -56 35 -43 -42 -22 28 -16 29 110 -23 -40 30 24 -50 -15 -41 0 6 15 -26 5 8 -26 -82 21 -1 22 35 -19 30 -16 -16 11 -4 -8 -62 5 -17 -49 -6 25 4 3 4 -3 10 8 9 0 1 1 11 -7 -7 14 6 8 -13 3 5 6 5 -1 -3 4 10 -7 5 36 7 0 24 -16 1 1 8 5 0 0 5 -2 3 -15 -12 -21 2 -11 1 4 -13 7 -21 7 -1 7 10 -7 -5 -3 -6 -14 3 -9 -5 -6 -2 -1 8 1 11 3 11 3 1 -2 2 10 -3 -16 -4 2 3 1 -1 -11 -5 10 -12 -3 -2 -24 9 19 -8 -19 -10 4 -6 1 11 -10 -8 0 -17 5 -16 -22 3 26 -13 8 -1 2 -2 -4 6 1 -3 8 -3 -25 24 -1 -4 23 1 -5 -1 25 -9 -8 12 -8 -19 20 16 -10 -1 5 -1 -17 7 4 -5 5 12 2 18 9 23 -5 9 14 8 14 15 0 6 1 15 -3 -7 9 -6 -22 -11 31 14 8 16 2 -21 3 16 -4 12 2 1 3 13 -14 4 1 -3 4 8 -4 16 1 18 -25 -7 8 -9 -6 -13 -1 0 7 23 0 12 -8 9 -21 12 -1 -10 -13 2 -6 -5 7 4 8 -13 -6 -24 -2 10 -14 12 -9 -4 11 8 2 -12 -2 -6 -5 -4 14 0 2 4 -11 -3 3 -6 17 5 2 1 -6 -22 -7 6 10 0 4 6 12 1 3 -4 -5 -17 -11 -4 11 7 -15 5 -4 8 1 -18 -2 -9 3 3 -5 -6 -10 -8 3 -2 6 3 0 -10 5 -5 14 -12 -2 -2 2 -10 2 26 -7 -4 10 -9 -41 28 14 19 -8 -1 18 -20 4 -2 -6 -21 -15 9 24 -15 15 1 -26 20 32 1 -4 -1 -13 -22 -33 0 23 14 -19 22 3 1 -23 -3 -10 3 -10 1 13 -19 1 -16 -20 1 0 9 -30 -11 -11 -15 34 14 4 16 -16 -4 -14 0 4 7 -15 -2 -12 -14 -33 19 21 -17 0 5 -11 -10 -1 18 36 -26 20 3 11 16 -31 -29 -22 -1 -8 -17 -6 -6 14 17 0 -10 -9 -19 -17 20 5 48 6 12 -5 33 10 -15 -34 -19 20 6 -33 34 -8 72 12 8 20 23 18 -39 -11 -21 16 0 -8 22 32 -38 -2 16 0 7 5 -2 32 5 45 -34 -17 12 -18 -6 -8 -25 -31 16 3 21 36 2 -7 11 2 -15 -16 -4 23 -21 31 18 -15 -7 23 -28 30 -15 1 -13 23 -23 37 -25 -16 5 29 28 -21 -22 -9 -16 -15 -19 -5 -4 3 -5 3 -15 8 7 21 6 -9 29 -31 -1 -5 8 -9 -5 -8 2 -1 -20 12 -2 -5 -18 -18 -11 21 -21 -5 -4 -6 -2 -6 30 -1 -7 -1 4 3 3 5 8 -9 -13 3 25 12 -3 7 -24 9 -16 25 -42 22 -6 -11 19 -5 -10 -5 12 13 -11 19 -24 -18 -12 -28 14 10 2 14 15 14 -30 -11 -17 -6 -14 6 30 -23 -12 -19 -4 25 -10 10 -1 23 8 -6 0 -13 7 -17 30 -7 -2 -27 -14 11 -43 -43 18 19 7 4 -24 -26 13 -2 0 -18 -1 5 -3 9 8 13 -1 -18 30 0 3 2 15 10 -13 -36 2 23 15 -25 4 14 27 -8 -21 6 29 0 -17 -15 3 17 -7 -11 -16 -17 -15 -11 -16 -10 -14 -43 3 2 23 -20 1 23 11 -13 -12 8 -13 -8 -25 -17 3 11 -19 7 12 -3 -12 17 -7 35 -31 9 11 17 -2 -18 48 6 -20 8 -37 -35 -20 -46 -7 -10 13 -28 10 2 26 22 23 33 -13 -19 -5 -27 -29 -43 5 -11 -10 -21 31 9 -6 4 -3 23 -14 31 -32 -86 -43 31 -16 -5 32 -5 4 -4 8 12 -1 -8 -16 17 2 -18 38 -16 18 -67 12 4 -52 -28 0 -13 34 -33 21 -11 24 6 7 -3 1 -17 -52 -20 18 38 -12 -9 -17 -1 -38 -21 13 -37 7 1 -15 -31 -28 1 24 -48 -6 4 -19 22 12 41 -9 -21 -3 16 -30 11 11 13 -30 -16 -6 -9 -18 -13 -19 -4 1 4 -8 -4 -31 9 -14 8 -34 -8 -30 -8 -10 3 -3 -4 -12 -18 34 9 16 13 16 19 -21 -19 -1 -12 -36 -3 32 -7 15 -35 15 10 -10 51 -32 -1 -9 -20 37 -17 -6 20 28 -19 -5 20 -30 -41 -7 -28 -2 22 3 -38 8 33 -24 8 -23 -6 -2 3 6 -11 -13 -5 26 5 -24 -2 1 0 -10 24 27 -28 -21 -1 20 -25 -20 -25 -7 -8 -5 -18 -7 -21 -14 7 -7 -9 -13 -18 2 -22 13 -25 -14 -1 34 14 10 -18 30 -21 -5 19 3 16 18 1 15 8 9 26 7 -15 -5 -5 9 -28 4 -3 0 -17 -17 23 19 16 15 3 14 -17 21 -10 17 30 -9 -14 17 24 21 14 5 9 -31 -3 -2 2 -2 -23 36 3 -13 13 -1 10 24 -7 -18 -31 -32 33 20 -9 -10 23 -6 -33 -9 2 -1 -28 16 25 -16 0 -2 6 25 51 39 0 -62 35 -36 -4 3 -24 -26 -21 -31 -37 12 12 22 2 50 -9 6 -14 -22 4 -7 -28 -16 41 20 -19 -32 -16 12 15 12 -6 -2 0 56 61 -25 10 -26 31 -13 -82 21 13 52 37 44 -5 17 6 29 -19 28 -18 -8 -4 -17 -7 -69 -57 77 -23 -2 6 -13 -11 -8 -32 38 -34 49 -1 11 10 -29 -7 11 -11 -28 -42 27 -28 -20 -4 9 -34 12 9 -5 -9 -11 2 4 9 -2 -34 -4 -23 -8 -19 -3 -26 -2 -4 -12 -3 -11 12 -16 -5 30 1 17 -16 0 -14 -11 -18 -18 2 23 11 -3 8 -5 23 8 -3 4 -13 -9 3 37 -28 -9 -1 -14 7 -16 -14 -6 -5 38 -10 13 0 -9 -24 5 -4 -5 14 -10 47 -34 -27 9 38 -12 26 3 13 -2 5 -4 -13 -25 19 -12 31 45 -16 0 -22 -4 -8 0 -4 12 -5 -11 12 -50 -26 -21 5 13 15 6 12 -24 30 -6 -42 -16 -2 31 6 -18 4 18 0 -14 -13 44 6 31 -44 26 -59 23 -9 -2 5 24 42 0 -35 -2 36 2 53 -14 6 4 -34 -27 -26 12 10 8 12 7 -22 32 4 -9 27 -5 -1 -1 18 -9 -10 -5 39 -11 16 27 13 24 -14 -39 17 16 -41 23 33 -3 9 3 -19 -34 -12 -26 -14 -32 -10 6 -25 22 16 -35 16 16 -16 11 -4 1 -13 -31 8 -21 -13 32 5 -2 -8 -81 48 11 -16 13 -28 20 -49 4 -25 -14 44 -1 28 -10 47 28 -1 14 13 19 9 -55 6 47 19 -1 12 -64 -32 -25 8 0 13 73 22 -14 28 -10 18 1 11 3 -7 76 -17 50 48 21 31 12 6 17 -20 1 -7 -4 18 -51 -21 12 34 2 6 5 -56 60 -30 22 32 -83 -7 34 18 1 19 -57 12 -14 46 -93 27 -26 -16 -42 21 -6 10 9 4 -12 10 1 10 -8 6 28 9 21 -19 -12 14 -9 -20 8 -6 -6 7 -11 -12 14 16 22 -1 -7 1 1 -18 -62 14 8 7 0 -20 -5 -12 20 1 16 -3 -65 -5 -5 22 -19 -1 -4 -26 -7 4 21 -2 27 0 -2 13 -23 29 -2 -56 -5 -5 6 6 -26 -10 -2 -50 23 28 -17 11 8 11 -7 -13 30 72 -27 -4 35 9 24 4 6 -19 37 15 -10 1 -20 -14 -31 -13 17 -11 14 33 8 1 4 -1 32 3 -5 57 10 1 -24 9 14 14 12 -7 12 10 4 -10 45 51 8 -11 -3 -50 30 34 -23 -39 -1 4 -3 34 -15 30 26 -26 0 -24 11 3 19 17 17 -67 0 35 11 17 -13 -11 14 -76 -3 2 -3 29 -11 -8 -19 -19 63 3 -1 18 10 -31 22 51 -9 -13 -19 -21 11 -35 10 30 -45 -30 -33 4 13 4 44 -3 2 -27 -10 30 -15 -18 26 6 -73 -3 -7 -22 -40 20 13 -2 16 21 -25 -55 -13 -55 -15 20 -34 12 26 -7 83 75 48 17 -29 -37 -23 22 -91 -18 -7 12 10 22 28 3 23 28 -22 65 -49 57 -45 58 70 -30 -15 78 27 3 -46 -15 54 15 2 -68 -12 48 -4 -44 24 -10 1 -26 -17 -3 -45 -56 -18 15 -9 -9 -7 -13 -34 -4 -26 28 -49 -56 19 -19 -36 -20 -9 4 97 63 21 -18 -10 70 42 -4 -4 -7 8 15 -7 -16 -9 -2 30 10 -3 10 19 -14 24 -27 19 16 -2 -9 0 4 -10 -21 -3 9 -2 14 14 -23 -63 -9 -29 -1 14 -27 -11 4 9 -8 13 -3 -42 58 -15 35 53 2 -9 -46 -3 14 -14 45 28 13 -33 -9 -26 11 4 -31 6 -5 27 -37 6 -14 -16 46 7 42 -30 -26 -7 5 -14 30 -8 37 21 -18 -1 44 26 31 6 -9 -21 -15 -13 -23 9 -20 13 -80 -12 53 41 75 -13 7 64 59 24 -89 7 -64 -126 99 9 88 118 118 28 -81 114 -12 -38 44 8 14 -126 -111 31 58 -27 101 -49 116 -13 -73 59 61 4 -9 121 -31 -15 -3 34 33 12 13 106 20 -29 110 -105 -118 -50 34 37 127 91 -119 74 -50 -64 26 71 -73 127 -105 7 34 -6 76 69 124 101 -67 -15 -8 127 -81 -117 37 -100 -33 -116 8 11 -58 -69 -5 -27 -27 0 65 -2 91 16 -43 -39 123 -1 126 -72 -127 -13 -33 -118 -4 30 2 5 -127 127 -33 84 -2 89 -10 -101 -44 78 -40 53 -127 -70 127 -28 4 -127 94 -39 -58 17 -64 -45 -109 45 44 -128 122 -93 -28 -128 -3 8 78 127 56 -124 127 127 -118 -44 127 -104 -89 -16 -126 -54 -1 126 96 -43 30 87 77 -120 51 31 -104 48 2 -36 -114 126 40 -42 -10 -38 -25 -2 -58 -24 33 -45 -127 -19 14 -34 22 47 -45 3 -53 24 -20 -14 -128 5 101 93 19 -44 38 41 38 -6 -124 123 49 27 -64 46 13 69 -6 8 85 40 4 44 48 -41 48 55 17 15 -89 59 -20 19 19 50 -34 127 127 47 28 -66 -59 78 -127 44 -1 -16 -73 10 103 -25 -56 -31 -68 -9 -109 -8 7 90 -104 51 -15 35 -125 8 33 67 55 10 85 15 50 -89 -86 20 25 -101 -49 71 42 -51 -45 35 5 -50 11 -15 75 -21 61 -9 73 31 1 -34 124 -50 37 -51 44 -78 -25 2 62 -8 11 85 59 -50 -27 103 -14 -128 18 -52 92 36 122 2 21 -127 68 -82 112 74 -67 -54 -100 -28 25 53 -118 -107 67 36 -81 -125 20 3 83 45 -58 -4 126 -35 -55 91 -108 127 4 -124 67 -54 75 -54 -3 8 118 43 50 76 74 74 91 45 -125 -27 87 -97 39 -34 12 -7 0 -113 -54 127 27 -18 127 -8 25 49 54 -37 127 -82 -121 -66 76 53 121 -59 58 -88 -49 127 -77 71 -93 -57 -127 -37 -127 60 98 80 52 -2 126 18 -45 -43 -126 -55 -56 97 -6 -13 -57 91 64 -69 72 -20 71 6 -117 -100 2 37 73 127 83 -61 28 -95 22 127 -127 124 2 -60 -105 -127 -13 -34 -60 -50 123 32 -8 79 -11 50 117 21 -100 -57 -114 70 -46 -6 4 -125 30 -47 -105 21 44 93 -73 -114 127 -7 127 127 3 -4 -126 -127 -100 27 20 -13 -81 -36 4 -90 -127 -40 44 -9 126 -48 -120 31 -87 127 -10 -55 -85 76 -2 -30 -51 32 -5 0 15 23 9 80 125 50 4 27 -37 -36 22 -51 -25 29 35 127 106 -31 -98 113 -32 7 -125 50 13 93 38 0 66 -78 68 -82 -34 6 -60 -19 -127 14 107 50 -6 11 82 -20 18 11 127 37 51 57 -28 110 -11 -106 33 -92 46 74 -63 82 -56 11 54 -36 49 31 35 32 127 -81 54 97 31 -33 61 -47 -49 -27 13 107 -17 -19 -56 1 45 13 37 3 35 44 63 -37 51 25 41 -126 56 63 54 -5 40 60 -45 -5 -97 -38 -65 89 21 -43 58 50 -87 17 -101 -43 44 43 127 50 75 -128 19 -47 -3 41 93 54 -22 3 12 -5 -108 5 12 -83 -69 -62 63 4 -83 45 -96 16 -106 32 44 -36 25 -63 79 65 -51 -83 32 -87 24 -48 -96 -50 -64 87 -2 13 117 0 -71 58 -2 21 -58 47 29 -123 -44 -126 -30 -115 -123 11 -99 -82 -76 41 13 51 -7 41 103 -1 -60 -34 -93 112 -3 24 -29 -38 90 75 8 9 -63 5 6 2 126 127 56 103 -2 -127 -12 -4 -16 -51 -53 89 48 110 -45 -20 -64 -102 60 -78 -52 48 -121 5 -45 17 13 56 -127 -91 58 46 -71 -1 -88 -31 80 105 30 5 42 -46 -28 11 -4 -55 57 82 -64 11 -5 -2 -14 26 -23 28 -20 -17 -127 45 -12 23 -40 -69 3 -21 19 15 -43 7 -111 125 -125 56 -41 36 7 82 -34 -25 61 -123 75 38 20 3 72 6 67 36 -74 17 -38 11 26 107 9 -21 -17 -52 -67 29 -23 4 -81 -8 22 -1 62 10 60 4 -24 -45 28 25 -33 60 80 -73 -30 -82 49 37 46 23 53 16 127 -33 75 36 -11 -47 -34 57 -7 -61 -49 64 19 -85 -11 18 27 18 13 -29 8 -20 112 10 54 -24 39 29 -15 106 3 -127 92 -38 8 22 -66 54 85 90 -83 41 71 90 -38 -11 -20 36 36 -125 -42 27 -16 9 67 74 -12 33 26 41 0 45 -64 -95 84 116 -109 35 54 125 -47 28 73 63 15 7 -126 -58 -13 74 55 -41 -63 125 -124 36 90 -61 7 -127 104 -108 -92 33 -36 -79 -15 22 -128 4 -79 111 15 -13 4 104 -31 -125 37 -29 57 -45 55 -29 -78 93 31 33 122 -117 -11 -91 -111 -61 -123 -23 40 -38 -76 127 -127 89 -58 78 -85 61 114 126 7 -15 -35 -1 127 52 51 25 51 -126 -58 127 -19 -85 21 19 122 -51 125 24 -127 -128 -125 108 63 -122 87 26 70 -10 41 -46 -80 -60 6 120 73 -75 127 120 -59 -94 -120 59 125 113 -62 -71 69 20 127 67 16 -128 -92 125 -128 -101 -25 -127 44 -75 -109 -80 28 2 -30 -61 4 -50 86 57 -23 -28 45 23 -25 1 9 -18 -127 65 13 32 -72 -107 -28 -93 9 -106 -25 -3 -103 65 -116 111 -84 77 68 -8 -1 -21 -7 27 38 38 -6 -4 -56 -127 -37 83 -98 -1 4 126 48 126 20 -128 -26 -46 3 92 -42 -22 100 68 -31 -3 -44 -103 5 -75 21 6 -16 78 19 18 -110 29 -11 -49 -45 -1 -127 3 -73 -11 127 53 126 28 53 -43 68 -67 -14 -65 24 70 4 2 58 20 -107 -16 -27 38 -32 15 98 -14 -126 -39 -39 -69 -44 -56 90 -26 11 -25 10 -86 -121 74 -71 102 -125 -16 86 -32 -74 81 -65 43 30 1 41 101 39 -97 -82 38 61 7 71 -15 -112 0 -86 75 -127 -46 40 127 104 -79 17 118 122 -68 -69 -12 127 -126 -23 -114 -77 -108 62 40 -47 -42 -102 -86 41 58 -53 -111 -47 -63 127 -41 127 37 116 17 6 -27 -31 -115 -10 112 -34 -123 74 125 36 127 -105 -7 117 53 -59 70 78 -13 111 -103 103 40 -82 127 114 -3 -127 -48 109 -121 -126 -127 -128 83 68 -38 40 -127 37 -24 127 82 49 -127 -113 8 66 117 125 -56 127 -81 84 -21 -86 61 -121 -127 127 26 -82 -121 -112 115 127 -34 127 -66 -18 -78 -60 102 -6 -102 -120 127 -124 -1 36 -126 -121 -28 -103 90 -72 -53 -128 -59 -52 69 -31 95 -128 -78 -126 -45 -32 113 -1 -117 79 127 -126 -119 -68 -58 2 17 123 -88 125 -87 -28 15 126 -58 -127 -13 11 -110 -79 -105 -35 -128 -27 30 -122 38 -26 17 -125 77 -74 91 26 65 -39 -34 -27 25 -62 -66 -58 74 -128 -82 -93 127 -94 -125 -72 -81 71 127 47 -124 28 -128 67 31 -22 44 127 -42 -47 -52 72 -125 -3 47 127 -23 -88 35 46 -29 18 67 -68 125 87 5 127 25 -52 -82 79 87 13 46 -29 -9 -12 -128 42 -38 12 55 -72 127 46 -21 -68 -52 -31 68 -18 -53 120 -34 -22 -45 -77 2 127 -122 -88 -58 -126 30 -5 6 91 23 30 127 8 88 80 -60 -28 10 56 2 123 -37 -34 97 12 -3 44 100 122 60 -10 55 -60 47 -120 -70 8 -122 4 -52 50 27 100 14 29 54 98 -126 -127 -89 -11 -91 80 -66 18 90 -54 -30 37 54 -1 102 3 4 -30 -11 123 -20 118 120 -10 -58 56 6 -50 37 72 127 -1 74 109 -125 -105 -86 -15 -98 63 57 7 22 -55 2 -126 17 -126 66 41 53 24 125 -120 39 33 126 74 40 -125 108 84 85 -16 123 -13 112 -26 -2 -57 127 84 105 -87 125 37 -93 -104 -116 29 -14 124 -57 -86 116 -61 -127 -43 125 43 -127 -126 -29 125 40 90 -105 -12 127 42 -123 71 60 -38 -122 -127 -62 127 -57 125 16 91 125 127 100 -70 -124 -111 -84 124 72 57 -115 42 -57 -4 36 -3 -31 65 50 96 38 -124 82 12 110 111 -24 127 -18 -70 15 -93 -25 -40 51 -3 -95 121 -22 0 13 -40 -10 -32 34 -127 127 10 83 96 7 63 17 98 -77 -65 27 -70 -32 -49 -65 -83 9 -52 100 36 -53 40 -80 -53 126 23 -128 46 -24 -44 -2 35 94 12 45 -40 -91 4 60 -118 12 -69 30 -20 55 -123 9 35 108 9 -27 -127 74 -66 5 -76 -41 -127 -81 -61 25 -46 65 -70 -67 -16 -32 -116 -128 -12 47 -9 6 -35 29 22 43 16 -53 110 -43 -86 -29 -115 -68 118 -93 -7 -20 122 109 -116 -31 -42 -19 -127 44 -59 -28 -120 -128 -52 18 59 81 33 -34 108 -67 43 19 -28 -12 122 -13 106 58 -51 -127 -23 -19 24 8 -15 82 101 32 13 39 -52 -8 78 -128 34 -12 -121 -124 62 111 -52 -106 -102 -29 -37 -32 127 -19 -97 -38 11 -51 -50 -11 -110 -95 0 91 -39 46 -97 127 -80 51 11 -26 -50 119 45 -27 -105 3 -3 -118 -122 -86 -10 -21 -128 19 126 -1 60 -115 -106 -30 -20 -17 -126 54 -126 -112 126 -31 -14 49 126 36 126 14 121 65 90 -126 -55 72 127 52 -125 -75 -125 37 -105 -59 39 -127 123 -128 21 -24 -126 126 127 -17 119 -63 -125 37 53 15 18 37 14 124 -125 -119 120 -81 -119 -25 -125 -73 -15 -22 -127 32 115 -71 73 99 -115 8 127 -128 60 -10 -32 -13 58 -5 -36 -126 48 -22 13 32 93 -79 32 4 127 -74 21 37 -121 -92 67 -114 -71 2 4 -4 54 -52 -63 -18 24 -55 -128 50 -70 67 78 15 -35 -32 -11 -2 -105 -21 -91 106 -22 -83 -87 -13 81 -127 -56 -54 96 57 65 103 -5 13 -100 55 101 -20 -63 -25 -71 -81 -21 -109 -34 24 127 -10 -89 75 -20 38 -111 91 33 25 84 -120 127 -50 -18 -11 -65 -37 -7 37 58 -29 28 -37 45 78 47 -20 -109 82 -25 -40 2 5 -3 95 -60 -57 -62 -26 -63 57 -108 122 42 -99 60 -125 24 8 3 -20 60 -125 -86 6 -105 55 -18 77 -58 122 99 -43 -17 94 35 15 62 -127 24 78 -2 -6 117 -22 40 14 -117 88 -59 127 75 -128 14 19 -9 56 6 -126 -80 87 -124 -104 -1 -100 -8 -127 127 89 -48 -77 -128 -98 18 -128 -60 93 59 40 -41 0 11 -22 123 -84 -80 -100 54 -16 33 110 -61 84 9 62 -39 27 -82 -14 -34 52 101 -52 -78 -127 73 11 -49 102 124 -110 35 -123 -20 -124 49 33 127 -126 -127 124 120 15 90 48 1 126 34 127 104 -61 118 -42 24 -30 117 122 -72 127 45 126 -79 54 125 80 63 -115 -99 -126 25 -85 31 43 58 127 -25 126 21 91 106 -59 -54 111 -80 -33 -125 -79 -5 -1 60 -49 127 118 71 -43 127 47 -43 70 -126 23 33 120 127 -118 -73 -67 -78 127 -117 -122 -1 9 -75 44 -118 -110 11 55 127 54 112 23 -73 -2 -56 109 -19 104 38 8 21 -13 126 113 60 -61 -128 86 -116 86 86 25 37 -127 47 21 6 0 -35 117 64 -21 16 -106 28 95 95 73 -56 83 -53 87 13 99 -89 -50 3 32 -100 -55 -24 -21 41 -117 -42 41 -78 47 -43 127 17 -79 -2 99 -36 -22 20 -124 -128 -83 96 -12 -73 -14 36 -50 54 -23 -62 13 -4 97 -46 -49 12 47 -40 103 127 31 126 118 -101 32 -18 124 -33 -11 -126 -62 69 -125 127 115 -124 69 -61 -38 -123 -45 -80 29 -113 -126 43 -46 -126 -28 126 -1 -16 124 -44 116 127 -44 -40 -10 -117 -52 127 -68 89 114 126 -121 127 27 125 -127 37 127 -117 -77 -47 -54 -61 118 -128 -29 -31 106 -126 -49 107 126 -7 114 -88 -52 -38 -128 -125 -75 -128 -58 -14 -87 -69 -32 -63 99 -66 100 56 -76 -124 127 68 82 -126 28 -50 -50 -92 -22 123 -8 -8 41 -100 -105 126 104 -13 -9 124 -127 127 43 -15 127 -120 67 -81 -60 -123 127 23 126 72 -126 95 -6 125 127 97 74 49 -12 83 53 -61 83 -35 127 74 -35 13 75 -17 127 -113 1 25 52 63 -52 -93 28 117 -6 14 -8 29 114 -15 -97 -24 61 -37 -51 -98 -22 126 68 -85 127 120 -69 -91 75 -75 -111 123 112 -80 -47 -91 -70 69 -106 -124 -1 125 104 -20 -87 9 -73 -23 59 36 64 -123 -127 125 13 -127 -29 -24 -25 55 7 -48 118 73 124 125 13 -48 -6 88 39 -128 -97 -13 -3 72 50 -36 -121 -12 -34 21 -82 78 105 26 -43 -56 -124 23 -26 -64 -4 26 0 -14 -124 22 -2 41 32 -2 64 -81 1 11 23 -50 13 -48 -35 76 60 -66 125 -120 -68 -87 -10 51 -76 22 -20 119 13 -125 -56 -68 -14 64 11 -32 -108 34 -40 36 61 -44 -128 -39 96 0 103 -127 -48 108 49 -88 67 -25 78 73 -106 -66 -127 -125 -57 -100 127 72 -113 111 44 -55 -80 46 -43 -62 20 -48 1 -125 12 12 -27 75 122 -120 -97 -125 10 -76 -127 -114 -78 99 51 92 125 78 -126 11 -126 -33 127 -49 19 -15 57 32 26 -74 64 126 -120 127 35 4 -115 -40 89 -76 -14 12 -6 -102 -127 -5 -15 126 66 -128 4 -7 119 -122 -23 71 -18 50 124 68 76 76 111 -125 -93 12 33 -64 -54 60 125 111 38 -127 -127 127 -97 -118 26 -126 -59 -64 -127 -23 22 -122 -122 -71 -25 52 127 -66 126 -32 90 34 -71 4 -105 127 40 37 2 126 -7 -19 -9 95 -27 -72 23 116 85 -127 -2 40 127 5 -124 103 126 -75 114 -37 40 -2 -84 -28 44 93 -127 -66 58 -49 1 127 45 80 -73 125 79 -19 -84 120 127 83 -128 127 70 -1 -35 -70 -121 -32 74 11 5 45 -125 120 114 120 88 45 44 -15 112 -127 127 35 123 6 21 45 -51 80 81 -107 32 16 -45 127 118 68 -72 90 -42 -2 -73 -85 -65 -5 -59 68 103 -70 69 67 -26 4 48 9 -39 -61 -124 -30 -125 127 -54 7 58 -75 -127 -126 -44 -52 46 -39 59 6 -43 5 -115 65 -3 -107 -39 34 -9 -92 61 13 40 -53 21 -75 -64 32 -15 -23 20 -69 125 -76 77 103 -12 44 0 37 -96 13 127 81 44 76 -1 74 -11 124 30 -99 15 -73 -78 -128 110 77 -127 -72 11 114 -118 -27 -90 -109 20 28 -29 -96 -81 81 -66 -121 73 -3 -42 -89 -93 127 42 38 54 -90 127 -39 -6 -13 -19 -42 -119 124 -128 127 -22 -60 14 121 -19 -22 123 -115 113 -53 56 42 -48 -126 20 -119 55 -38 -101 -21 29 28 46 -126 110 -83 -52 -126 -83 -126 39 -68 -59 -4 -128 41 71 23 -39 111 -45 28 83 -55 25 39 94 -52 127 125 -102 27 127 86 33 -65 76 110 -32 127 -45 -124 -62 104 -54 25 -92 127 105 -127 127 123 127 118 124 -18 57 42 52 -94 108 121 82 126 9 117 -122 76 -128 54 -46 -107 52 -99 127 -126 114 -40 25 13 70 74 125 110 -122 -43 80 -128 -2 -127 -126 -15 68 46 -7 10 44 -44 -91 -94 -49 -99 -97 -18 17 -44 -70 -6 -115 124 56 127 65 -46 72 92 127 126 -114 -72 119 -110 -65 6 -59 -64 -5 -116 -121 29 -50 -119 -126 25 107 -14 -2 -75 6 -79 33 -73 38 -22 -8 91 -4 -73 83 88 -66 92 -39 -23 -81 59 122 106 75 -7 -76 121 18 18 14 -47 52 -68 -128 34 72 24 20 -11 127 -122 92 -93 73 -29 23 86 37 127 21 109 42 68 -23 -1 52 106 -33 -32 -9 112 44 -49 25 -96 -34 -91 -102 61 -5 19 -21 -126 -50 69 -53 51 -99 52 28 -15 -59 -115 -119 67 -118 33 -29 -76 64 -48 83 -3 79 -128 67 -49 -6 -115 4 20 -127 127 -106 -127 120 27 -105 -124 64 -3 50 71 -78 64 127 -119 79 127 -62 -4 40 -63 -57 29 29 48 78 41 -89 127 9 17 -113 -3 9 22 80 -14 24 -87 -15 20 55 50 118 19 83 27 52 41 -5 46 113 -46 -33 -128 27 5 -106 115 78 -77 7 94 126 -104 127 -104 29 102 -110 -8 66 -116 -11 -40 21 -127 127 -78 69 71 66 -35 50 77 34 -74 61 71 -127 -44 -105 -72 118 125 -127 82 -125 -6 73 -14 -128 127 -123 -10 119 -128 -81 -84 127 127 -54 110 127 127 -72 125 -66 -84 -109 -109 115 63 61 11 -100 109 -19 127 -108 -92 -124 40 15 -57 126 65 114 -115 65 126 127 -70 18 16 -6 80 92 79 19 -61 -80 -11 -126 -97 103 -36 -25 -94 49 81 64 125 122 -128 89 116 -81 60 -18 -23 34 112 126 -82 -127 1 -14 28 123 -109 -30 -89 27 35 8 125 35 -25 9 -117 63 28 -30 26 -115 85 -5 4 -36 127 -17 126 61 -2 112 2 25 126 -124 -87 -40 111 -27 -22 110 1 114 50 -89 84 -95 111 -105 -90 89 -63 123 -128 -48 -103 -35 75 17 76 -4 -125 26 -17 32 -117 -2 -32 -70 -50 104 106 -25 30 76 72 -28 50 -128 22 -53 -5 13 -82 112 76 51 -1 8 106 -44 49 -86 -47 -72 -47 67 31 -30 -30 44 -89 -65 -64 -83 -114 -55 24 64 -92 -37 -126 99 49 -89 15 -42 65 -92 93 -10 -10 -6 122 -32 -82 91 -30 -87 126 -14 55 -91 -111 102 -83 44 16 -97 -26 100 43 -46 54 -110 60 -93 -34 -116 -48 -66 -33 88 -109 -121 115 -69 -116 46 99 77 8 -103 -127 31 -118 -126 127 31 -11 -124 -7 -126 -8 -13 -110 -128 109 65 -126 120 -45 -34 -47 -15 53 109 20 -123 -10 127 7 120 31 73 -73 -33 -94 86 -127 -46 -9 -63 98 82 -82 127 55 -8 122 -17 51 -14 127 -115 45 79 60 -49 -126 -50 11 38 -63 -46 87 81 -2 -79 85 57 104 -81 -110 -87 -27 127 122 -20 -123 44 -42 38 -112 127 38 -61 -20 5 -69 -73 -7 -126 -94 -64 -65 108 -8 84 -57 -128 27 -73 -97 -115 -111 -70 2 72 93 -39 -95 127 60 -25 118 -57 -21 64 -49 -127 -60 24 27 36 -79 92 -72 11 104 11 14 -62 20 -112 -111 11 -102 34 107 70 49 -32 -1 -32 -46 -44 -90 -2 -47 70 -33 56 109 33 125 28 89 -60 118 123 70 61 84 -40 107 43 -36 21 13 8 65 33 69 -58 96 -49 -38 -113 -124 29 -9 20 -83 8 -65 3 19 -128 82 4 -15 71 81 35 -66 -83 52 -54 -53 75 7 -8 0 -82 -34 -56 -19 -68 -14 -127 -53 -61 -127 -6 10 -70 -54 -33 -5 -73 58 -30 -29 -48 -128 126 33 55 -41 22 -24 8 -87 -128 127 -27 -73 37 -89 -24 -34 123 -22 23 -126 -127 25 126 1 127 126 24 28 2 -52 -39 -54 -127 62 91 -84 -30 -53 126 -127 -35 43 -57 123 -79 121 -117 24 -35 -104 -60 30 35 30 121 -118 -66 -108 32 -13 94 -117 -127 45 -53 117 2 -92 102 -28 19 -127 -54 -26 127 -127 111 33 -88 7 125 -37 -19 69 -119 -32 21 -92 17 109 -125 -110 127 93 41 6 -128 115 -66 -9 -77 -9 13 127 -90 125 127 -123 -16 114 59 -24 -127 85 102 127 47 -108 116 127 0 -19 -121 10 55 -2 -70 -52 -93 -7 127 27 10 69 37 -127 39 122 48 15 -127 81 127 -127 127 -15 125 -14 -27 5 -126 -124 -67 -7 66 -96 -108 45 62 -85 -1 -102 -128 -3 -25 -66 44 84 -101 -128 64 127 -17 -50 -110 120 95 114 -67 115 -30 112 -9 4 -86 127 -59 68 -128 -16 127 66 -112 38 -127 109 92 -9 -33 -18 34 -74 50 -24 64 34 -15 -117 -85 8 -61 -51 11 -4 -85 96 22 17 47 -124 -15 95 106 113 -45 33 80 123 12 52 -59 -14 -102 18 -127 4 -46 89 -5 0 13 -84 -119 58 -40 91 36 31 -7 33 -52 105 79 -108 124 -29 123 40 -1 -38 -25 19 72 42 -17 -20 -122 126 29 -51 -127 -74 119 -66 -57 -127 -53 -34 -8 9 36 106 -42 -122 3 -69 -127 -41 -60 -8 -89 -54 19 -6 -39 35 -116 -96 -50 -20 -62 -102 57 -73 119 -91 -128 -122 7 126 12 92 -3 124 -72 -5 -39 -77 -78 -11 -19 4 119 -15 -37 -128 96 -60 42 -125 -43 13 -34 -21 -121 66 85 -40 30 124 -18 -117 94 2 1 -25 40 115 40 127 113 7 -42 -108 25 64 68 -38 7 121 -18 10 123 45 21 7 127 -125 28 -126 -82 88 33 126 61 26 -12 -77 -21 16 127 -128 6 53 126 124 -104 117 -75 -44 -10 -24 -84 -48 -73 -15 114 117 62 113 -126 -17 -127 52 -98 -128 -56 127 72 -46 -100 -79 114 -114 -127 -18 125 -28 -127 88 68 -32 22 -113 -20 -128 -123 94 84 -60 63 94 126 -59 15 -9 115 -64 127 -126 -82 1 -92 95 -54 -43 -60 -50 31 -124 -76 71 -128 -62 -125 -92 -22 -28 126 -33 -56 -30 42 25 -93 -105 126 127 89 -128 -69 -28 -27 -94 -54 -123 -125 -43 -5 99 -90 106 78 -24 120 52 -38 -106 -126 58 -9 90 38 -2 21 -115 127 32 70 -9 74 -65 8 102 -99 -96 -31 32 -18 34 -103 51 11 6 -128 98 -70 -29 -106 4 112 11 18 -13 -123 82 5 -37 -127 -125 44 -23 35 -1 -103 81 26 -1 -60 -32 -49 72 72 21 -29 99 -61 -65 52 72 63 -126 54 61 124 -69 -24 4 -67 -126 58 -77 -55 -126 6 50 32 35 91 7 -8 -18 -25 2 127 79 30 126 -12 -10 -78 -26 -49 -36 -128 126 7 -40 40 -14 81 31 83 8 127 26 18 -124 21 6 -54 -108 37 6 -5 89 -43 113 68 -1 -123 -68 127 -93 -98 -29 124 13 -49 -126 -128 109 34 -16 72 97 80 -123 -12 -95 67 -73 -32 120 -128 54 -12 -97 -112 -72 -119 -77 -31 5 -113 -104 -76 40 25 105 -126 -80 88 98 37 104 116 -6 53 127 18 126 -114 100 12 22 103 105 106 99 -81 -55 -103 20 19 37 -94 70 12 53 121 -37 -102 -83 -63 -38 25 9 126 42 -124 -126 -7 122 -117 122 -95 121 127 4 121 68 24 127 127 88 -81 72 45 58 61 102 110 -24 -6 -77 43 -126 18 87 -127 86 -127 127 -27 -120 -54 -4 61 13 -62 -21 127 124 14 124 125 127 -31 -125 -105 0 12 -124 -34 -94 -7 80 127 -5 -6 127 26 72 11 -128 -68 85 39 -30 -3 -110 127 23 126 -45 -126 53 -29 -117 -125 -53 -127 29 48 18 22 127 -3 -103 -9 70 48 -26 96 -5 -50 -68 -9 -122 -5 96 -33 -10 26 -126 127 -50 33 94 127 68 5 125 118 48 96 29 101 61 50 33 35 -78 -31 -89 18 -83 127 -118 31 42 -24 35 -127 -44 -82 27 -2 -23 -69 -7 16 -121 1 127 9 121 -30 67 2 64 -122 -37 -88 83 9 48 -100 47 22 121 0 12 -28 -46 83 -18 80 -77 -125 127 -21 -50 -70 126 68 -65 102 -56 -8 -7 -19 -5 -25 17 -9 -5 59 -43 8 10 -24 -22 60 36 124 -59 -30 86 -6 -21 -31 30 1 36 17 28 76 -18 -12 -42 20 -41 -17 -35 32 -77 -13 -52 -5 2 -5 -15 3 -93 -6 -37 54 -41 23 -3 6 28 -33 -45 -41 -12 -7 -6 -55 2 -36 -6 -11 37 -6 -11 10 37 -84 15 -22 -94 48 0 -31 34 -67 6 -17 11 -40 46 -42 -8 -88 -3 0 36 -19 -28 8 -18 2 15 -41 14 26 26 -24 -66 -88 -11 -100 13 -32 125 1 -53 74 -63 -32 -32 2 -38 -50 14 -17 -64 52 28 -2 112 -82 -33 -25 84 -121 -125 125 -63 -15 127 -32 33 -42 66 13 -61 12 21 -38 19 52 27 124 -20 -26 -119 21 27 56 -45 124 -115 3 -46 126 -48 21 63 -105 -126 20 126 19 19 62 95 -85 63 -11 -33 127 -126 -26 -8 113 -110 -1 39 -37 -18 6 20 2 13 29 -127 36 -51 -34 34 -42 35 -32 26 0 -15 22 4 35 -115 43 -27 9 -26 -2 -22 13 45 26 46 -87 -109 26 32 -77 -26 10 -25 -14 29 38 123 -4 -17 19 -76 25 -80 -26 -5 71 -53 -9 -2 15 79 27 27 -38 -6 -48 -64 5 -58 -1 -7 77 126 -128 24 15 -39 -84 -6 -17 -16 34 -64 36 5 17 -16 2 11 2 -10 20 -128 6 -21 -58 20 55 -9 -19 -13 -17 -61 -32 33 -19 75 -15 0 68 87 -53 11 6 43 -18 -10 54 3 11 -42 33 -88 -53 82 97 20 -81 63 14 -29 -82 88 24 -22 -33 -30 116 -19 2 -46 3 -9 -28 -127 -5 -116 20 -21 91 -76 81 -65 -51 46 -93 21 -98 -4 -29 -94 -3 -52 11 38 35 -72 -14 82 -26 -28 3 -53 56 70 -52 23 -20 3 -58 -127 42 -23 -36 52 -42 7 -64 -9 -63 3 28 73 -124 -44 -92 95 -14 14 6 43 -33 10 -6 64 -23 -56 9 7 -44 -128 -100 -43 10 -1 120 87 69 -21 -93 59 58 -57 -99 -100 51 -125 127 -10 70 -36 -2 87 113 -27 -85 -22 -128 -18 24 45 80 126 -88 -21 7 -97 85 45 -60 -44 24 86 -84 -122 46 -29 -54 127 6 33 83 10 125 124 26 -6 69 -14 12 -47 -80 125 -14 113 30 -89 -120 -26 -9 18 92 -11 127 73 -44 52 -106 113 56 47 117 -54 24 -2 -28 -27 -45 -57 2 -113 -87 46 -105 69 -66 -15 16 -16 66 -17 -48 -97 -34 -29 -92 -71 79 -19 -2 27 -23 94 -122 -48 29 -84 -5 -7 -1 36 5 43 126 67 -43 9 34 -104 -22 18 -17 -86 -16 -8 49 96 -20 -10 -27 12 0 49 -39 127 10 127 -36 -14 64 -126 -86 3 -38 -77 -14 -40 -14 -22 13 50 2 37 51 82 9 -2 -26 65 48 101 57 -7 -24 -16 40 6 -50 -2 -16 -44 37 12 3 23 10 -48 -127 -17 -73 -6 -14 40 24 -27 -50 -2 -41 126 -39 -49 -91 103 4 0 -100 35 31 -87 -92 25 71 -32 4 -4 -87 27 14 15 -51 57 -23 124 40 -30 -75 -43 31 9 1 -37 70 36 25 -76 57 -30 -11 -6 56 -20 34 12 -24 -75 21 -107 26 49 42 3 5 -30 -38 57 23 21 105 125 -33 -96 34 39 12 114 -87 22 21 48 -41 -54 -28 34 -127 126 44 39 -18 15 18 30 -26 127 22 -41 65 -94 15 -127 115 -23 101 121 127 126 28 -5 -1 -64 -95 -89 -54 60 53 -9 101 -37 105 9 61 13 20 -61 -91 -127 -128 122 -127 124 -5 -125 22 11 18 43 -18 -27 39 -46 49 -36 119 -8 -17 -126 39 122 -128 -128 125 -51 126 -100 110 -122 -1 -18 39 96 59 -60 -121 -95 63 85 -19 -126 -89 -89 -39 -116 120 42 -37 -16 -124 -102 -10 6 127 -118 -2 28 -80 -58 35 127 3 -127 94 19 -124 53 -76 20 34 -17 1 16 -47 -76 99 33 -126 -19 -27 -3 -84 10 -56 124 -80 -7 7 -71 -52 -1 -46 12 -4 -25 84 -125 -103 48 70 -34 -27 -83 51 7 103 -15 59 66 39 -29 31 -12 -127 71 -5 27 -90 -91 -116 -18 -27 125 125 -25 -55 -103 -27 -28 -30 85 15 71 94 -57 1 32 -15 16 -54 -15 79 127 15 21 -1 -38 119 -53 -71 -30 9 2 -27 17 117 -12 21 -83 -30 -96 40 -79 -46 9 -27 -44 -28 5 120 55 -72 -28 115 -27 66 -13 -65 -88 -6 -23 -46 8 8 -19 -21 -40 2 104 76 33 -39 -1 42 117 1 8 16 -57 -69 12 24 -49 -25 -62 13 -87 -60 -128 18 127 -58 -87 -39 15 -32 -1 70 26 108 20 -54 -43 118 -46 -15 -81 34 24 -76 -60 -72 4 120 -107 -96 83 -17 -75 45 15 -60 -63 38 79 -126 10 -46 117 35 75 44 -29 -39 127 -10 -81 7 110 -128 -94 84 119 125 -43 -126 27 -112 6 -11 -31 -46 -80 20 -102 52 -29 -12 21 61 -24 32 -124 -32 -3 46 -44 -88 70 127 -116 -34 -68 44 -9 -27 -127 -2 -58 127 40 -97 -121 -29 96 -42 -119 127 -120 91 127 127 -65 109 47 -31 -34 51 -127 4 -30 -44 127 -128 -118 42 -127 -30 -46 -78 -2 -114 -96 72 -14 127 80 -17 -1 -112 -14 -24 44 31 87 104 -19 126 -77 -29 -47 25 8 -3 10 -13 -41 -45 19 23 -63 14 -20 63 -71 127 -110 -59 -28 -19 23 -25 52 -87 43 77 -35 -25 -16 -9 -78 -4 -3 -23 -30 40 18 -31 -69 -1 -57 -22 -46 33 -18 -1 -18 89 -62 -43 -44 0 31 -4 -126 20 125 -60 -9 14 -44 126 -57 32 101 29 -12 -10 18 -82 -115 -43 70 -59 44 -1 31 -6 14 67 -127 -73 5 -23 40 24 2 68 -49 -49 27 60 53 53 86 50 -23 127 -120 9 0 61 34 -10 -115 -50 -3 72 -16 76 118 -29 127 4 74 -59 5 31 9 44 0 8 -2 -61 97 -127 120 -122 72 95 30 121 -61 -40 -10 92 24 126 15 -96 20 -58 -35 50 32 -32 -52 -45 -1 -14 67 -93 12 39 79 20 36 109 -91 -44 -57 -3 101 10 -71 68 -29 74 97 -2 -114 100 -3 -121 -3 -127 -40 -46 47 31 6 61 111 -124 -127 126 -11 41 11 42 20 -48 30 25 -107 127 -85 -109 -92 67 -32 -44 -23 -127 -1 -68 -90 127 36 124 -73 -66 -98 27 -71 2 28 20 31 77 105 15 4 -50 37 -80 33 117 12 35 76 -91 67 26 12 -28 22 44 96 -6 61 -76 42 8 -52 -117 40 127 34 118 -25 69 -16 -103 29 51 -64 77 3 69 61 -126 -14 -111 127 2 -39 4 -127 55 -116 69 114 -127 44 45 42 -97 49 -121 97 -7 17 -127 -61 -111 -41 -60 123 -128 18 37 27 82 -10 1 0 71 93 96 -113 -17 -18 -65 40 25 -39 32 -38 -29 83 -28 -25 -37 77 -85 14 -26 -103 -7 -14 -6 38 66 1 -111 -19 -66 -16 -53 20 -66 -16 -127 -104 -1 59 -11 27 19 12 -18 103 126 -48 88 2 111 -83 9 37 -81 -19 -61 125 22 15 -39 -22 30 -103 24 63 -54 8 64 -31 102 -119 82 8 -24 6 -29 -78 109 9 -22 16 -6 55 -37 -30 12 -14 -126 -120 63 -21 127 -27 46 37 -5 -30 15 67 -24 -10 -24 -70 6 85 -49 -39 -47 39 -10 -33 63 -49 58 20 -38 43 -12 -11 127 -66 9 -76 -75 -69 -98 -128 10 -21 125 -11 88 -57 62 98 64 -74 119 -123 43 -29 126 47 -74 114 9 -127 41 -123 -98 95 -16 13 -17 4 73 22 126 -97 99 -81 52 127 126 92 67 54 41 -43 12 56 -30 122 -88 -18 -85 69 -110 119 15 -53 20 -128 -66 -7 14 127 -60 -27 17 -12 -94 21 38 -42 -15 96 -84 -58 -123 -36 -37 35 80 -23 112 -72 127 115 127 -4 -41 3 -40 -29 -28 -20 -62 -27 -61 50 75 -92 47 104 -102 5 -123 126 -107 55 127 -33 -23 126 94 -35 -128 -128 127 -50 52 -128 -17 -70 -16 -122 -108 -113 92 -112 -22 -52 59 -128 -44 -15 -56 -14 -46 -109 3 -53 -87 5 -124 -62 -24 13 -72 -30 -28 -49 126 81 -54 3 -56 126 70 -59 14 117 122 -36 32 -53 -88 -56 -13 -113 116 35 56 -117 -59 -95 55 21 -4 54 -8 -16 -33 -32 -2 22 -78 -54 13 -41 -128 80 50 -60 26 -111 38 34 68 61 96 -6 -96 -49 33 49 103 -9 23 -74 0 -4 -106 -89 -125 15 -12 126 -13 81 -68 -75 -124 81 49 -86 -22 -2 -41 104 75 64 -41 -37 -72 22 14 127 -9 36 19 -45 -21 -116 53 27 -31 -50 -37 60 -34 40 25 0 97 13 -14 27 -41 -9 1 15 76 33 23 -9 -18 -84 1 -5 -30 -12 -54 119 24 -31 -9 -22 -22 -18 18 -40 -22 -25 30 3 -17 -32 -1 -3 -11 -19 -33 -31 13 -45 52 26 2 -7 5 46 -20 -36 62 2 88 93 -32 -2 -2 -29 53 -80 -52 35 -37 39 -27 16 -30 -3 -3 2 -115 -37 -5 -122 -111 -4 -68 56 -28 -41 29 29 70 -60 -96 -7 14 -29 -36 28 -46 62 1 -31 22 -32 -29 13 25 35 -1 -4 -15 1 12 21 -43 123 45 -63 5 -107 12 4 -13 -118 4 -61 -51 -14 -53 26 65 100 -43 26 -90 39 -62 118 85 -20 -20 124 20 -50 -16 50 1 -58 7 34 -26 -39 25 -21 127 -34 5 -127 13 9 54 50 98 -51 -44 47 109 -49 76 80 -21 -70 26 52 9 1 34 57 -43 -66 -37 -11 -5 48 32 -30 82 -72 -30 -7 16 11 -81 -26 -45 21 29 -118 -6 -126 -35 3 -36 4 -16 23 -38 9 -17 52 -5 -33 45 10 20 -4 79 -13 7 32 8 62 -83 -17 34 20 -115 -17 -21 -6 -4 -3 3 90 37 -27 18 16 14 45 14 -16 94 -41 -1 4 27 51 -22 25 -83 15 8 -100 -9 -40 0 -19 30 3 18 -4 16 56 16 59 -5 -28 26 -39 -10 4 -6 -104 -33 -11 14 -20 32 -16 -8 -7 -39 -17 88 -7 -41 0 -2 -43 -3 8 -5 108 -14 -23 -49 88 -59 -9 2 -27 0 -31 -99 -24 -20 -31 -13 -57 -12 33 -87 5 -85 102 25 -54 -24 -1 104 44 -24 1 -8 -36 10 -20 0 26 25 -38 -4 5 10 -55 -50 51 123 -87 -32 35 -66 29 -62 -20 -1 -93 -34 -55 20 -46 14 -70 -65 37 11 28 40 30 -39 71 10 14 -27 15 -98 34 -5 59 -45 -56 -47 9 -121 18 -12 38 98 68 -70 5 -25 58 44 -12 113 -37 13 24 -5 22 -1 33 5 24 -2 -68 26 51 -20 5 8 27 54 -85 -14 59 25 18 6 -125 20 -12 60 14 -10 13 -45 -60 105 -21 -23 -11 -123 -21 -28 42 106 113 -15 -13 -41 -27 -1 -91 -26 117 9 125 -34 -66 9 61 -78 125 6 41 66 -26 104 89 -17 -72 -40 -18 49 49 -70 125 2 -19 -59 -18 -39 33 -9 -37 57 -17 39 -30 -87 -52 -28 127 24 37 52 2 -33 70 49 -5 38 -45 26 -100 -65 47 -88 58 -65 -32 -122 12 60 34 -17 1 -72 5 -59 -26 52 -5 -9 29 -20 66 -122 38 35 -1 -32 -3 14 33 -11 47 65 -10 39 -16 38 14 -17 -48 -65 -60 68 -16 12 3 -8 2 -13 17 113 40 -2 116 -1 119 11 -40 17 0 1 -15 -27 -56 14 -1 1 91 49 -6 -5 15 13 -14 73 -19 -8 40 39 27 34 9 -17 -4 25 34 -75 -25 -57 -28 -2 15 -5 -18 -9 -13 70 28 -62 57 -67 34 38 -29 59 -76 -61 -53 3 -18 -72 65 -89 51 -63 24 42 -33 31 22 31 -37 43 -60 39 54 97 -36 -42 -12 -22 38 -8 42 9 -18 -79 24 -19 24 78 -19 14 62 -18 -65 21 -21 111 -8 27 -23 116 -23 -37 28 33 17 17 0 116 -15 19 -14 57 -7 -3 57 20 71 -114 56 102 9 -84 -7 43 1 -30 55 -4 -50 -56 58 -3 127 -126 123 -11 0 37 124 -41 -56 64 57 -41 -112 56 -25 10 127 43 90 19 23 -31 -60 -69 -20 23 -20 -51 -82 123 -51 -33 3 82 -76 29 6 -38 -52 -65 -79 -36 115 57 -86 44 -52 5 -17 -66 -23 38 21 45 -75 48 -6 -7 -73 49 126 -125 -50 91 46 127 2 21 -125 -95 0 -19 -12 19 -23 49 -71 111 82 -122 -124 -67 19 19 -6 78 52 49 8 -14 -80 -121 7 6 -35 88 112 -82 13 -73 11 -37 27 -17 0 -72 3 7 2 87 -13 -24 15 50 -4 9 8 -127 10 1 -11 -39 6 -44 61 -87 8 39 -90 -37 5 -13 -5 -9 28 24 -44 -13 25 9 -4 5 10 18 -36 4 -4 9 11 51 -37 -40 5 -110 17 -49 77 -10 -37 -37 -32 -95 11 14 -12 -28 -83 -77 19 -5 25 13 24 91 -22 -9 107 -22 13 -15 -12 44 49 5 29 121 13 64 37 -60 -33 64 -43 -71 22 84 74 -42 -46 -53 -2 -54 23 -15 -42 101 -56 83 -43 -51 116 -94 115 127 -74 -83 -25 -18 7 -13 -36 -46 6 37 3 -80 28 111 41 29 50 29 -13 -3 19 14 -16 -37 -8 -43 84 -3 52 60 -30 56 -52 -106 -123 85 121 -114 17 -44 -32 37 -20 6 6 21 -15 25 -60 -64 9 -22 62 86 -41 -7 -44 -58 19 -12 -41 -93 21 -66 -61 58 29 -2 -59 20 -123 -71 -89 -44 -62 42 -85 29 -46 10 125 5 -46 -65 29 -51 -51 -59 61 -24 -75 -36 80 -21 -9 82 -38 -26 -26 -24 39 69 -120 -46 -1 54 41 -9 -31 -42 31 18 -45 -52 71 57 21 21 -47 28 -105 -18 -11 1 -55 48 48 -21 56 -5 -9 35 -19 21 -127 13 59 92 -3 96 33 82 33 120 -76 82 45 -5 55 6 -65 -89 -112 -33 -84 27 -33 1 -34 98 -18 110 -10 7 -95 -35 -21 -1 99 29 83 -29 28 123 -38 13 64 23 -5 -29 45 45 -34 33 9 -14 -3 65 24 17 -27 127 -49 61 -26 -31 5 -25 25 -34 63 33 15 -14 -16 16 -42 9 -22 4 -70 -84 -1 -26 -52 -5 -98 -81 -106 53 -7 -10 -70 20 64 -18 -29 18 -11 26 -127 -43 55 -3 11 -113 18 33 -82 29 85 61 -12 -3 -107 -17 -60 -65 8 -30 28 73 18 13 -24 -47 -8 -14 10 39 -41 -42 -29 17 -4 -46 63 -36 -3 49 17 -7 -35 93 -1 20 120 52 -11 -113 19 -72 -34 43 -63 -71 24 25 113 6 17 -43 2 40 -14 -38 2 38 20 23 11 -69 71 89 -34 108 6 -7 25 15 20 49 -126 -29 127 55 -59 -39 -12 -24 10 5 -51 36 -77 126 40 -72 43 -1 112 -13 81 -32 61 -25 -127 -29 46 3 45 80 62 40 1 -26 -42 69 -34 -127 -100 -46 -30 -88 20 -11 112 112 122 27 -67 -67 -24 -24 79 -37 123 58 16 -68 -67 85 -7 72 -26 -22 34 127 -18 -53 -27 63 -86 53 22 -13 -26 1 7 -36 25 74 6 -23 -1 21 73 -16 51 7 10 -34 -31 45 -25 -28 44 46 -21 -26 37 6 -52 -33 31 25 65 -57 126 -45 43 -6 76 77 37 28 -31 52 62 -95 -26 -44 -64 56 21 -54 -65 -125 21 127 127 -7 -52 -51 -62 43 -86 31 -60 -38 127 -3 86 -57 9 -111 43 68 126 -41 -49 -105 -36 12 31 -14 38 37 87 -38 -3 -3 21 63 -37 87 -55 -15 29 -7 38 -16 -9 -10 -7 -7 95 -30 -2 -33 14 -48 7 -97 -40 47 15 34 33 -37 -37 61 7 -25 -39 -3 -64 33 -4 -58 -28 -1 -56 -19 11 -120 21 -75 105 28 -78 -87 7 38 -30 -31 45 -58 -29 2 -50 5 22 15 9 74 -13 -21 16 43 5 48 80 -15 -28 45 -68 100 17 -59 -49 25 20 56 6 60 58 -43 -80 49 -1 17 -1 -43 -3 -10 17 1 78 72 27 39 127 20 22 11 -44 10 17 -7 86 70 20 -13 -10 -74 -19 -118 -67 -115 1 -51 34 48 -15 50 -80 -18 -69 -17 60 53 44 -72 65 5 -20 54 58 -5 -28 29 -46 -87 -61 -14 -77 11 75 -102 0 -5 7 -125 52 -57 4 -24 -28 -88 29 125 -34 -34 -30 -97 33 121 7 8 30 97 -7 -75 60 60 27 58 43 69 -72 -42 -18 -62 -125 18 -110 55 -36 -76 -34 -23 -17 73 -54 -78 8 44 39 35 31 -106 -40 -85 -25 -21 64 72 -11 13 15 -74 71 43 33 -7 -90 -48 57 11 -19 -53 -20 69 47 -7 -20 16 -27 21 59 15 113 18 28 45 -65 -16 43 9 -21 -45 -113 102 -1 35 -25 18 27 14 -101 -28 -20 36 29 30 21 13 -101 10 -44 39 54 26 -64 55 67 -40 -126 -34 4 45 29 -90 -29 25 37 -13 54 19 19 -38 -33 46 1 -31 14 88 7 64 30 -97 66 -45 -7 -126 -1 -54 -61 -30 -54 5 10 -14 23 -27 36 -45 -112 -16 -11 -69 -47 -36 -49 -78 18 5 -24 49 -72 3 -123 -6 0 -29 -5 -13 -28 22 68 41 -12 -31 -4 44 -41 -8 -109 -75 21 -27 54 -2 -38 -12 81 11 -75 22 38 -41 -3 -48 28 75 38 17 -34 -35 49 -25 29 -5 24 7 -1 12 0 64 1 -34 -17 -22 102 -30 51 -112 31 59 38 -59 -100 -125 -49 7 56 71 66 -72 -112 -36 44 -101 33 -84 40 10 117 52 70 29 21 16 -111 10 6 1 -97 27 -114 -5 -24 -71 -17 -89 -79 -89 -94 -30 -128 -75 -34 -37 -86 -7 -1 -39 -127 -77 -14 -77 85 62 28 0 4 -122 -23 66 79 -36 99 -40 -17 13 26 126 -60 -128 68 -128 -3 -36 122 87 -42 99 -39 -126 14 30 41 57 29 -123 -50 -60 -24 56 29 -128 6 -127 -127 -22 53 -113 0 127 -32 -39 -85 -1 -26 40 46 25 -97 -61 125 64 95 -69 127 -58 -65 -102 -22 29 31 -65 -18 -30 -117 -70 -34 61 53 -95 13 -98 -127 78 1 36 -52 -17 -15 27 -42 127 -41 0 126 17 14 52 -124 -19 107 89 127 -58 -17 -97 22 36 44 -28 53 28 -26 31 -104 81 -7 -5 5 60 -121 -81 -4 -90 55 120 81 94 -59 114 -34 -44 -13 -12 68 -6 32 -39 124 -126 52 -38 -55 85 117 93 -32 -3 53 -16 42 18 127 37 -49 -32 1 -71 -39 -40 64 14 -109 -48 -62 13 60 -31 7 -13 -43 -113 -86 40 25 59 61 11 94 -38 -4 -1 -124 24 16 -11 -64 10 -14 13 111 -120 -53 -31 52 55 -38 87 -14 -83 83 47 38 -1 76 29 2 -16 -16 19 23 -68 -32 124 6 15 -50 -16 -57 -103 -8 30 28 31 -51 -68 1 -107 -50 -50 43 57 -36 104 -40 -127 -125 3 121 -127 -61 -125 -125 62 -5 119 109 65 -79 12 91 -46 60 32 89 21 -71 -16 -36 77 -24 -62 -125 13 29 -40 -109 3 -125 70 79 -70 47 -123 -126 22 -115 -48 -124 -114 -34 7 84 -1 32 49 123 -126 78 -126 -69 -38 8 4 73 -122 -24 4 88 -71 -13 -124 22 65 65 76 44 -72 14 -3 -14 -61 36 -59 -29 119 -14 119 -25 -15 15 52 43 -124 -89 -14 -19 19 57 -43 25 -127 -100 5 -125 -49 59 -105 127 68 -79 21 -46 39 56 40 -113 -80 41 0 107 -92 127 -116 -77 -124 -26 -14 -33 -114 -24 -30 -97 -21 -96 123 -24 -41 -65 -7 -127 73 50 45 -33 -36 10 -69 38 -2 -30 -32 -37 -2 -4 83 97 -29 -68 53 93 -27 60 -31 -92 -77 127 -115 -25 6 44 30 -60 -78 4 -9 24 104 -71 -21 -29 -110 29 -47 13 15 3 122 -49 -113 -106 -10 81 -13 -29 -2 121 -126 127 123 -60 116 2 72 127 -28 22 -21 68 0 71 -37 1 33 -9 -52 -42 13 7 -26 -70 40 -22 17 93 23 -49 -59 -96 15 -29 13 -3 -13 -6 28 125 8 47 29 -124 -50 14 -38 -86 2 15 45 24 -108 -16 2 -66 -30 -18 91 25 -128 -10 78 -17 17 107 58 13 4 -29 9 -16 -33 5 -49 11 5 12 42 -8 -96 -10 9 -12 -43 65 -16 -28 -128 -32 -77 109 -112 -44 90 1 -125 -125 3 3 -127 -114 75 -127 -41 33 9 62 91 51 -113 125 39 100 127 75 0 -70 -38 -96 69 80 -33 -80 -38 -11 32 -11 78 23 -48 -12 17 66 -33 -126 65 -43 -32 29 -122 124 -52 15 -46 64 90 127 -20 124 -29 -37 -19 49 112 80 94 -8 -32 -68 -126 -76 -98 110 98 57 7 85 72 -96 127 -8 -125 -85 -124 114 110 55 90 -27 -93 22 76 -20 39 16 65 42 -9 127 127 -118 84 127 67 -95 9 -1 -127 127 73 53 -18 -27 60 -101 -32 -113 -125 -3 -37 125 -58 -125 -68 2 -128 -36 -6 -9 -27 -94 -64 -112 84 13 81 34 63 -26 125 11 11 -16 65 18 -55 -65 40 127 -128 36 -15 -124 64 -128 15 43 24 -107 58 -8 -28 46 127 -95 -81 -17 -25 7 -11 122 -125 43 -126 46 47 104 46 120 71 0 62 38 -25 -127 -78 81 127 -25 -125 -115 -59 -43 -103 -49 -21 -48 47 48 126 -6 114 -14 75 125 56 77 -51 60 -26 -84 -89 -14 76 38 -26 -31 10 -18 1 -6 102 127 -24 115 54 -42 -124 -10 79 28 -40 -52 -66 -45 48 123 36 114 26 -84 38 -16 8 4 -28 109 29 14 -45 30 121 -93 -127 -16 23 10 2 -50 -14 -128 91 -72 79 -72 -47 45 -4 1 13 16 -127 -128 -35 59 62 27 -22 8 -35 -50 -92 55 85 -127 -128 29 47 111 7 13 -128 -54 -22 73 -45 -69 38 -101 -12 -82 11 28 4 -50 -122 -37 -109 50 -75 29 -34 0 31 -3 35 -23 11 102 101 -21 -70 54 -68 19 61 126 -68 32 -51 75 14 -36 -80 -127 -44 86 48 1 -11 -127 93 12 -75 -20 68 119 -127 51 96 35 63 -14 127 42 21 92 -121 8 -27 -1 58 -92 10 -43 -126 18 -124 -112 -26 -42 62 -8 122 -41 -127 79 6 22 125 35 94 84 -114 53 58 -28 127 -122 120 126 -24 -39 -43 3 49 127 -56 114 126 -22 47 2 -8 69 112 73 -3 69 40 31 -17 -60 -123 -31 26 -28 75 -99 -39 -128 -76 74 -4 105 -112 109 -25 20 -5 66 91 15 -40 -87 89 45 126 44 37 126 13 -120 -22 -128 5 67 119 79 -19 -74 23 -118 27 -125 60 68 -26 -44 -58 -97 127 -57 53 -83 -3 -41 -119 10 20 -35 125 -35 -12 -69 77 36 48 31 61 -112 -75 -15 -126 14 14 -127 -82 28 43 64 25 18 123 22 -12 87 67 61 27 -60 -78 36 -51 -51 -68 39 12 -83 -11 84 -8 58 -97 45 50 34 60 49 41 27 -23 -55 36 35 -63 95 -26 52 -21 12 42 -17 41 41 -40 127 -77 20 47 112 127 -89 21 7 47 4 -49 -19 26 -57 121 -30 2 87 55 69 -38 8 127 64 0 -33 -44 14 -34 -17 63 -12 33 -70 125 -77 -4 -8 -119 -89 36 0 -126 -124 -7 126 -46 -2 111 123 -23 -124 7 -30 33 29 -52 -29 92 88 12 23 -118 18 -65 -33 -1 11 21 -20 28 52 -42 14 -69 27 -38 69 20 78 -107 25 -35 64 114 -66 -118 50 17 -85 117 -66 -23 25 -17 -30 105 -30 121 -71 -85 126 -74 21 119 -69 50 -55 23 -7 -66 -87 -90 11 -37 110 35 -44 -124 66 -27 23 46 67 110 82 113 109 49 9 123 41 51 1 29 -30 59 -2 -108 118 110 -55 27 -69 -91 12 -127 127 14 116 -109 50 -109 85 -55 -53 119 36 -47 -33 -23 126 7 -117 22 20 -58 -87 27 117 17 -125 -49 -27 6 51 -59 15 -4 -63 45 57 0 56 -12 -49 -43 90 127 57 -3 -11 -58 -53 -9 23 67 -31 75 -45 -56 34 55 -33 -5 -103 81 -61 -15 -51 63 -12 40 4 -124 -72 -31 82 -118 32 39 6 -127 8 39 -107 74 8 60 21 -41 -103 -23 -16 126 66 56 126 -15 13 -79 -108 -34 122 4 10 -36 8 21 19 30 35 6 -6 -63 -1 2 22 -2 -31 35 0 -47 32 63 -21 90 29 7 51 0 0 -28 -13 -121 45 66 -49 5 122 34 -8 -10 -41 32 115 23 127 -17 -30 127 -32 48 123 73 26 71 7 49 127 -15 -118 57 -55 4 -35 7 -34 -67 -18 127 6 17 -20 11 -8 -24 -38 -21 70 -109 -3 127 -35 36 -15 127 -60 -125 -84 127 36 84 -78 83 -16 -18 -126 63 22 -24 126 -56 -75 7 -6 -50 122 -35 -53 64 -36 -48 77 -22 -54 -25 -2 -3 -70 89 49 -57 45 -83 110 31 77 121 23 75 21 52 75 -37 -50 17 30 -1 -127 -27 8 -18 127 -52 59 120 17 51 -71 91 -74 118 47 60 -121 -29 -50 63 85 13 127 39 56 121 -53 127 104 -124 37 -92 127 -19 -12 -25 13 5 4 -19 -18 74 -34 -33 50 -1 36 50 94 101 26 -61 98 -111 58 -95 118 -86 -126 -47 -15 79 -8 35 -118 17 22 84 -87 -117 -51 -52 -127 -88 -1 -75 -64 6 -124 -41 -92 48 22 -4 127 -74 -6 18 32 31 78 -70 38 32 -1 -116 27 -127 20 -6 89 -8 -85 -39 -56 -40 -49 107 62 -6 -13 -41 73 54 -126 110 20 95 63 -23 23 31 -5 105 -32 -102 13 -59 -2 96 -30 92 -114 -61 -23 126 22 48 119 37 -51 -127 13 20 -77 101 116 -57 -28 -45 -5 -103 11 -75 -46 8 22 13 28 -10 -4 98 -32 -14 -18 -35 17 -5 -22 -22 54 -6 72 -18 3 33 25 -81 38 -28 49 -30 20 -127 -20 -39 -97 -80 -126 25 28 -4 46 -25 73 -59 81 5 -29 30 7 -127 -28 54 23 119 -22 -30 25 100 -93 -55 51 29 38 73 23 -14 45 -128 -50 -38 -13 17 77 2 49 -17 -56 -94 6 17 -80 -123 38 -67 -122 34 -14 33 44 101 -34 -33 -3 5 -66 21 45 13 18 -24 78 34 28 -2 -4 26 -54 35 -18 -8 75 -9 16 -12 2 20 -14 127 -53 8 1 -34 27 -16 -17 21 -23 16 21 28 32 -9 18 12 0 -10 -4 -11 -2 -17 12 15 -16 1 12 43 -5 78 21 32 9 3 25 -40 0 30 -16 -12 12 -21 14 -54 37 67 -6 12 -15 -6 -3 -4 1 -2 4 25 25 -2 123 -7 13 17 -5 8 19 1 45 -15 10 -16 85 -61 69 -40 -7 -34 40 45 -31 41 -31 -22 14 -25 -37 14 -52 -6 -27 44 -118 -20 -33 -3 34 120 6 36 -2 19 17 30 -54 3 20 77 4 -20 29 -26 -36 15 -21 10 -31 31 8 -4 -40 -6 18 20 -8 3 -14 -4 12 82 17 21 -7 -15 -85 22 -29 -7 -20 75 23 44 -12 12 6 -15 -12 11 -22 29 -11 5 14 -7 11 44 -37 1 -1 -7 40 -36 -3 -10 -5 -41 30 35 4 -13 17 5 3 8 -7 8 -45 -2 -23 -18 -3 7 -12 39 -10 4 9 4 15 -8 -21 5 31 -50 8 -8 4 15 36 -5 12 -11 10 2 -48 8 -13 -34 -46 26 -5 8 -8 -12 1 -17 -3 6 6 -57 4 -7 -1 20 16 14 18 -19 -28 3 -75 -23 13 -9 1 -5 -1 -11 -7 -72 -22 -49 -8 -19 -2 32 3 -9 -8 -21 -5 -30 14 -45 10 23 22 7 -17 -6 -64 -3 -3 -20 -1 -18 -9 36 -1 6 -2 -21 -12 26 5 -4 -82 -43 11 -5 11 10 -12 35 2 7 1 -34 34 8 35 -18 -15 -10 -50 2 1 -18 -23 16 8 -12 125 51 -35 -8 10 -17 -41 7 19 -22 5 -22 18 -6 6 -31 3 -7 3 -41 45 1 -42 -30 19 -3 30 24 -23 17 -17 33 -21 -17 73 16 -8 -91 4 1 -4 -67 -13 35 1 5 17 -8 4 35 -17 -6 17 -5 -14 8 -102 -7 -1 -32 1 -20 -22 4 5 18 -39 18 -8 -28 -2 5 -22 -101 -1 -13 -12 2 24 34 25 -32 -25 62 -22 36 18 126 -52 8 111 -41 -5 1 15 -65 -30 -18 -55 48 -43 1 -2 26 111 -2 78 32 12 18 24 15 57 -21 32 9 60 -2 -14 84 2 127 22 -18 36 -1 -17 -34 1 -4 -62 23 -44 -38 -5 4 -119 -33 -4 -10 80 -48 27 22 -10 72 109 27 2 22 -30 35 -115 24 18 -8 5 4 -6 -41 -17 9 -31 7 -17 44 -7 -15 1 -38 10 10 3 -14 8 -8 1 0 21 5 -1 -2 7 -12 -35 -11 -2 0 -13 8 -14 -17 79 81 -47 1 26 -5 1 -17 -59 -12 4 -5 10 -7 -22 -18 -22 -22 -14 17 33 1 3 -3 9 5 4 21 7 13 1 -6 -1 -6 85 -1 -2 5 24 79 -8 -5 11 82 5 -9 -35 -2 -16 -39 14 8 15 0 24 0 29 -26 -87 -63 39 -93 -29 -26 49 7 -15 -24 -58 -124 70 43 92 95 89 54 -30 25 33 -125 -3 -72 -34 -117 87 -4 -32 -71 -71 -83 75 -45 -18 -65 -11 77 -32 -25 -11 -125 46 -17 77 71 8 -55 75 -40 33 40 79 -85 -102 -100 -79 -119 -39 -58 -45 -44 41 61 -121 1 -48 -44 -78 103 126 8 -18 29 -76 -2 -125 -35 7 -109 5 -4 95 50 -116 -17 58 -16 24 -89 -90 -93 -14 6 -62 -57 -65 81 39 -6 -63 -29 46 -62 33 -22 -9 -24 48 49 30 -24 61 38 -68 75 14 -33 44 47 81 9 -43 102 125 1 -2 74 58 -19 28 -27 23 85 -113 16 5 -63 46 13 86 13 34 -38 53 -66 105 32 -36 65 -4 -8 -2 -87 49 31 -16 24 36 30 34 24 -7 22 -31 -27 77 22 -22 -86 80 63 -49 13 59 48 28 -32 57 -1 -12 83 20 28 60 -27 -82 93 -10 -20 17 -68 -44 64 61 16 -18 -31 126 1 -79 44 -56 5 73 5 -11 -11 -38 -8 121 36 -12 -1 -31 -10 -48 55 -12 -33 -24 -62 -43 -68 1 -67 11 -84 -19 88 -43 -103 64 37 -54 -18 2 77 -37 43 -8 41 76 34 13 -5 -86 53 -128 -3 -26 -32 -20 46 -56 -34 70 18 -49 59 -39 -109 6 52 -55 33 36 -43 1 111 22 2 45 -10 -7 -39 -1 -28 17 -43 102 -50 -13 -64 4 68 -84 -30 -30 -63 127 -128 -74 85 -74 -63 29 -18 -14 -127 110 88 -32 -55 34 -19 -61 18 -101 -125 60 -20 -17 87 41 -7 -3 3 21 -121 -32 39 -117 4 -72 50 0 33 17 21 55 4 -9 -94 107 20 16 47 -18 49 -1 63 75 75 -13 20 25 49 -6 -37 73 4 75 -3 52 -19 3 63 0 31 -44 46 69 -39 -81 39 -45 68 67 -13 57 -18 -31 -41 47 61 78 -36 52 -49 93 82 -25 75 55 52 7 -73 53 34 -24 0 45 -20 -81 5 3 11 4 -21 90 -38 -9 -10 -20 -62 32 8 31 39 -4 9 -38 -111 34 -20 40 3 34 -47 -34 94 19 -111 -15 -32 -15 -15 60 24 25 20 30 12 -70 34 -2 -25 -59 43 127 -86 23 -35 40 24 44 86 -11 42 13 23 -59 45 28 61 3 0 61 58 -1 -41 20 -77 26 -16 61 70 -1 15 -3 55 19 -58 -65 63 1 -19 -77 92 -53 -7 0 -40 35 17 69 25 1 122 1 21 40 -39 -5 52 -23 -122 125 -21 27 -32 -75 -12 -103 -25 -125 80 -36 15 -68 -16 -59 6 -36 -8 51 -41 -21 14 36 20 -83 39 -50 16 8 62 -12 26 -65 56 -50 -72 1 -24 -58 -25 17 -34 14 -14 70 -85 -65 -49 -60 83 -73 -65 -16 16 24 30 -16 12 51 3 21 72 -47 84 -53 48 64 8 22 -14 63 -11 -25 -20 -16 31 -23 4 -84 33 -114 -81 -33 -77 91 8 -95 -23 37 -126 36 5 -75 -36 -21 19 -10 -8 -123 35 27 44 -17 74 17 14 3 34 39 9 -91 -88 -106 -69 -38 -101 -46 -23 44 -63 -14 89 -66 -73 -102 -65 -6 -104 -74 -103 -69 -81 -28 7 -26 15 2 66 -38 64 -86 14 -15 -2 -12 46 -22 -12 13 51 -93 -82 -60 -58 -4 0 32 23 -44 -38 -30 -113 -35 -16 -24 -16 -45 -37 -84 24 -61 17 49 -76 5 45 25 -70 87 -7 -18 -48 -47 12 11 39 61 -60 28 -7 16 -95 -19 -100 2 -36 68 -18 -101 0 59 -35 -75 10 58 -46 19 -12 17 -72 36 -13 -128 17 -13 62 -16 1 27 -47 15 32 -16 21 -6 -58 40 20 -23 9 38 75 -45 -9 -16 57 16 8 25 -30 -35 -42 54 9 -4 -4 59 4 82 25 35 37 69 -23 29 -10 -63 63 9 42 -42 -10 -12 19 4 -27 -84 39 -73 -18 -127 -31 127 9 38 53 19 4 -17 30 -27 -28 27 -82 -10 84 -4 -88 48 -12 -26 -40 83 51 -27 23 7 -20 -54 -54 22 70 23 -16 -6 64 27 29 -33 -23 8 61 -40 56 75 -39 79 -125 127 49 -37 -62 -8 92 75 -119 -115 -91 -74 -3 -32 88 19 64 37 13 17 38 42 11 -39 -10 -21 -65 17 -105 94 76 95 -26 -3 26 -36 -56 -92 -47 15 15 120 90 30 -38 9 -80 -104 -5 -32 20 77 -128 -123 -66 4 -127 37 -77 6 25 -104 -86 -23 -42 -33 -100 28 -46 -52 -123 85 -93 -27 -47 -57 -42 -63 46 58 -85 11 -64 -128 -12 31 17 -58 -17 -59 29 -2 7 58 -41 30 12 50 41 8 -24 -59 -118 97 9 107 71 25 18 -2 1 83 50 -6 13 -11 8 26 -56 4 14 -12 -127 77 -7 -35 110 60 59 4 3 10 -83 -49 -20 -21 23 44 -19 -34 -13 -102 -29 57 51 13 52 23 -35 13 29 25 -29 22 -46 -95 -16 -23 19 -34 -64 16 74 -36 -20 -19 100 49 -31 -15 -9 122 87 1 -22 -33 16 20 44 -67 21 -84 -12 57 -107 8 -42 -78 22 127 55 5 -10 -56 28 75 -50 19 -14 8 -73 -33 17 62 3 11 -74 45 35 -35 73 17 -52 65 -37 -20 -12 28 108 -4 112 -21 8 62 28 35 101 -88 -115 -31 -16 -55 18 -43 -26 -68 -35 -2 26 57 54 -18 22 32 104 121 -15 -32 -11 55 76 59 -26 24 -120 -60 -124 1 -79 41 -66 46 -42 73 65 97 -23 -16 -126 28 -37 -70 -11 -4 32 -27 125 32 -98 50 84 12 -16 7 -17 26 48 -39 -66 -45 -76 -15 -47 -28 -26 -9 -16 -52 -86 32 13 -73 -96 -53 -82 72 -86 -72 2 34 -65 -16 -34 17 -77 -12 52 -125 -4 7 -16 -15 -46 48 63 -78 31 -22 -36 127 67 15 -7 -65 66 -102 -39 -81 -101 53 -119 69 -26 -124 -96 -39 57 67 -7 -99 69 -19 12 -27 65 8 -77 -112 37 -72 -110 -37 40 7 -30 11 -101 -40 -20 -32 49 -17 -49 -26 19 46 -4 50 -7 -87 -99 54 -114 -42 -43 123 -54 -116 -5 -50 54 -24 29 75 -67 -119 -67 -30 50 -37 -96 -72 -85 -66 84 -70 -83 6 -63 -42 -26 11 30 -42 63 -69 -4 19 -70 5 -32 -52 -10 -31 1 -47 -100 61 -51 -70 50 -37 -81 46 10 54 -79 72 4 9 -104 -77 -24 64 22 -38 -26 -92 -53 39 -1 -24 -104 26 25 -54 -10 -91 38 67 32 -85 31 52 24 -69 -32 -105 61 0 77 40 -1 -1 -26 -37 6 88 13 60 18 -63 43 -53 -97 -105 43 90 51 -27 81 -31 -36 -65 30 -1 -38 -39 -29 -9 -23 37 -28 23 26 15 -85 12 89 -8 45 -51 8 30 -58 -34 61 -89 -26 -124 -100 -90 -52 -12 70 -3 51 -45 -32 -40 50 105 112 94 50 14 7 17 -96 -34 1 57 6 59 -36 118 -109 -28 127 -128 -99 5 -41 33 -73 47 127 115 69 28 -85 -4 40 66 84 69 22 53 32 74 28 40 30 -45 -44 30 46 89 34 -43 -101 21 68 22 127 29 -67 -43 -19 -11 99 -40 30 -38 -16 25 -56 -31 19 31 27 24 -48 25 40 18 -106 32 -22 -40 31 -28 124 -21 -42 45 122 -9 51 25 -126 -12 23 -42 39 -36 58 51 -6 72 9 -96 -78 95 -51 94 115 -45 -49 48 54 25 -54 3 6 11 13 -75 39 0 90 -4 106 10 -8 98 -45 -25 11 7 8 9 -41 20 31 -66 -2 -84 -13 34 10 127 50 5 89 -39 -68 5 50 63 90 -104 29 -7 -23 53 83 69 31 21 -36 127 -6 76 -107 -58 -42 -30 2 12 22 89 68 -70 -26 123 38 -112 -61 -55 -103 -108 70 -51 84 -26 39 48 71 -37 36 -18 -4 55 29 -53 38 87 126 18 34 -38 19 39 47 -15 -58 -37 100 16 86 -64 18 65 14 15 12 6 82 10 -39 -126 -20 -5 -29 -109 44 -65 -13 78 11 -123 -108 6 -25 -60 61 -49 -29 -97 -17 -103 -9 -54 13 -80 46 -128 81 25 -84 -11 -66 -42 -33 -11 118 21 -82 30 -14 -66 -125 -107 28 -93 -28 -36 -41 89 -56 79 -16 -87 -43 -43 -11 -21 -57 -44 -30 41 31 9 -69 1 -15 -4 57 25 50 38 -4 17 -127 -46 -33 16 2 52 24 18 23 8 26 -10 -104 -57 -14 -71 63 -43 -49 88 37 61 127 -127 -44 32 98 110 -33 59 -75 -49 6 39 -19 -9 -9 14 -71 -81 -43 -8 -115 45 56 -18 -83 24 89 -36 -100 23 66 -15 -19 -50 89 -23 -89 -19 43 -75 -48 -89 -26 22 -28 60 12 -45 -43 13 -52 17 29 30 32 70 -34 93 53 47 32 15 -58 -127 -41 -10 10 64 17 89 -128 -7 0 -33 54 55 36 -25 119 -57 -46 -16 -25 -23 -31 -117 -49 -10 -122 106 18 -68 -7 -45 64 -45 -89 -124 -25 -17 -57 -71 -62 -74 -33 -79 -83 -33 -52 -64 -36 11 -68 115 -38 -17 121 -42 -19 15 -102 103 40 69 -125 70 76 47 -67 125 14 12 -37 6 -101 15 -102 -89 30 -65 -50 46 -66 -44 1 52 -83 41 67 3 122 76 43 -22 25 50 25 95 27 -30 -11 -3 103 -48 -2 -46 -35 2 91 97 -35 30 59 -37 -33 -71 -75 -27 -30 -16 -25 12 23 27 69 7 53 8 21 105 52 -12 53 21 88 -71 26 -78 43 -33 -36 -23 51 -43 -53 80 37 36 42 13 26 -34 -123 -3 -42 -67 49 31 -54 -17 -39 51 -45 13 -100 74 -37 -12 86 14 -125 3 -15 -26 -48 -44 62 1 36 25 -100 5 26 59 -43 -9 50 -53 -29 -106 -56 43 -69 -7 126 -56 -27 -7 -9 -35 39 30 127 25 -19 -47 -21 -97 4 -3 43 -47 30 8 -107 27 -33 71 68 -87 2 65 -75 89 -109 7 59 35 127 -34 2 13 -77 125 36 112 22 -9 81 73 -86 -31 -10 -89 27 -17 -25 -6 -18 17 -6 85 107 17 82 -2 -107 -74 -11 125 -113 94 -58 40 -110 24 -59 9 20 -13 -23 22 -27 -89 -66 -11 -111 -25 12 -52 7 -20 0 29 36 5 52 95 25 -19 -61 62 -34 10 84 -1 -10 44 -91 -127 127 -3 -13 -3 -53 -54 -33 0 -47 -24 -12 -13 -34 -1 -32 -29 -35 22 5 -28 27 -10 104 -17 33 -89 -59 114 -51 66 14 -54 37 36 -80 51 77 -109 10 119 48 -42 -94 -41 -35 -53 15 62 9 -35 39 109 14 -84 95 82 83 11 -35 -21 50 -100 49 27 67 -126 -3 -31 16 -33 54 46 2 19 -100 107 74 6 61 63 41 101 124 3 -37 55 -15 -9 82 -44 24 -18 -34 -48 -55 -1 46 1 65 68 -4 2 24 -5 -35 24 -32 9 -7 3 -20 47 38 25 56 -40 105 -1 64 -60 -93 -78 27 19 11 79 10 -18 28 13 -17 87 -16 -59 -16 -17 -24 -39 17 -13 -16 12 -47 -8 -33 27 -11 108 -34 -27 -61 8 -6 38 6 28 -36 -53 4 18 -36 49 54 118 -50 -3 44 -31 -26 2 96 52 25 -28 -40 21 39 -62 26 47 49 -31 -54 9 26 10 -69 -23 -19 -31 17 -14 54 6 -50 -8 67 -41 27 67 4 -21 24 48 -50 28 16 -14 -4 21 49 74 -26 -1 48 -76 2 -18 25 -33 45 -61 -14 1 36 34 26 54 -6 5 -47 10 38 49 12 13 23 27 -12 35 -27 -37 10 -20 -5 -82 -15 4 32 -11 4 -54 15 -10 63 33 -22 20 0 6 17 -11 14 -4 30 -27 70 15 40 7 9 15 -26 -25 -35 29 28 53 -78 -46 74 -49 30 63 2 2 -27 -3 63 -40 -53 99 0 66 38 -86 32 -100 -25 -84 -100 -39 -46 14 -49 60 36 -9 30 -39 95 -7 63 -15 -45 -9 -28 53 64 4 -22 -70 -78 13 -55 0 118 -118 -75 -3 -126 45 32 -121 -7 -1 17 44 59 -95 -16 -52 -23 13 6 109 -5 94 29 91 21 65 -28 -127 -11 -26 90 18 -17 -6 -83 4 -17 58 100 -116 -68 83 -14 -123 105 -50 -34 -16 91 -7 -73 -41 125 95 81 -85 -22 16 -9 23 22 2 110 33 126 13 47 -41 -73 -24 22 -41 16 0 -44 -6 0 -19 8 126 77 -28 -38 34 -24 -16 69 -116 -17 102 35 -12 -13 -77 -11 -44 -120 42 -44 5 60 -32 57 78 -95 -74 50 5 127 45 53 66 -40 83 14 -36 30 85 23 -84 -94 119 67 -9 -123 -87 126 109 -3 9 3 27 127 127 -13 -90 25 -15 20 -13 -10 -9 84 -46 58 -30 53 21 -27 -5 -88 13 -55 -14 -12 1 68 83 53 -50 87 30 -45 -125 -80 4 -35 47 15 -25 -54 -87 -93 33 28 -125 92 -58 3 19 80 37 -31 -5 15 -1 -83 36 15 83 49 -64 -4 -1 16 10 32 -8 17 -45 22 -41 -76 89 60 -22 1 21 10 -3 -12 35 -74 -70 67 33 21 -127 -1 67 72 46 -101 59 -27 -16 45 11 -39 -11 -8 -7 39 36 2 -88 88 25 17 20 -24 88 -24 -26 -18 36 15 -7 13 33 82 63 3 22 -66 16 67 52 69 -12 -17 53 11 31 57 101 -107 67 11 -34 56 25 45 -36 25 52 -54 50 1 70 17 -71 -69 30 -2 60 -47 22 7 50 20 109 86 52 -34 -64 91 46 61 14 21 17 19 -34 110 90 -5 -70 82 82 63 30 18 73 70 32 32 96 57 -38 -10 -46 52 49 43 98 20 -2 127 6 47 28 55 42 14 11 77 -39 89 95 96 -5 16 -11 62 -40 -16 -19 -41 -50 0 31 17 34 27 -32 69 9 -24 43 86 35 45 7 -22 47 39 41 -8 -39 11 -43 -57 113 -24 32 -37 -109 91 -6 24 45 40 -101 -41 24 93 19 -9 16 18 55 42 86 17 -28 -41 35 -20 34 -31 42 1 2 -114 -48 -29 28 34 -42 -12 73 80 65 13 -17 127 34 3 24 40 8 -32 24 21 71 29 33 21 73 7 -28 -44 67 10 -1 -23 -54 45 35 -25 -57 -110 -16 18 1 -24 -16 22 70 -24 -42 41 79 -127 -13 -95 -44 -78 -4 5 72 -19 -68 38 -94 -10 -23 78 -14 -63 -86 -77 33 -23 -45 -5 65 -79 5 -42 -96 81 62 -41 -3 11 46 -2 3 -23 -125 -11 -122 58 50 -12 -63 49 70 -22 -31 50 -114 127 85 -27 5 -25 -43 7 17 59 -20 5 67 -18 -12 46 -22 -22 67 -2 -36 14 -34 17 -1 -19 54 -22 -5 127 -108 -26 13 115 53 -44 24 53 52 33 -17 -14 92 66 31 73 -77 40 91 -18 -54 24 1 -117 -28 -11 53 -47 56 20 -125 124 125 52 6 -43 -40 105 52 83 -23 -91 -12 47 -59 -18 44 -126 -19 -30 21 -47 64 -68 -112 4 12 -16 83 34 -89 -18 -61 13 -23 20 -48 39 -64 -70 -35 -14 -13 23 -75 3 -125 -9 21 -23 -118 -73 7 23 -35 46 -33 64 -35 -61 -30 -13 -66 -36 -17 -46 23 69 -2 -63 -8 15 -29 -52 -107 15 57 7 10 -64 -26 21 -110 -76 -32 -18 -17 -22 -25 2 -23 -15 28 -11 2 127 35 -127 -43 6 -33 -3 63 28 51 32 -6 -29 -118 -12 72 3 10 26 39 58 5 72 -47 45 62 -13 87 112 104 -25 49 91 27 -11 32 -58 54 -89 95 125 109 53 -2 -10 72 -85 29 82 7 33 13 -6 -39 10 96 -8 -9 23 -14 -1 32 -5 -66 91 -62 67 -36 -57 21 -37 -73 6 -59 25 -127 -1 43 -58 -39 -25 -58 -37 -9 56 -85 -104 4 21 65 -74 48 60 43 -58 2 -13 47 30 6 -84 20 -20 -4 12 37 -30 10 -3 -35 2 30 -29 -9 15 -91 -60 -35 -1 -5 20 -47 -58 114 23 26 15 29 -50 -20 1 -73 -16 -45 -25 52 88 -3 30 -32 -50 -63 -69 39 -53 10 -33 -9 -37 -49 -46 -7 38 25 -14 -33 -30 9 -69 12 -12 78 -25 10 -65 -45 -65 78 -22 123 30 9 12 -82 21 -33 -63 -112 -1 0 20 85 -91 7 37 31 16 18 35 27 -56 51 -29 1 16 -58 -39 3 -35 58 -3 -18 25 -96 89 -122 108 -2 18 -43 -47 5 65 -71 121 12 -113 81 29 -50 62 20 -48 -108 12 -35 2 20 -12 -125 -60 -127 30 10 -64 86 -9 -27 -67 -81 -8 89 -100 -101 47 35 12 -26 11 -60 126 80 -24 -54 76 75 49 67 -127 -75 -12 61 39 -4 -1 85 -89 37 -35 -87 80 59 -30 113 0 0 99 0 -6 -10 -26 124 28 -22 -7 -43 98 -33 -12 -128 116 -55 -39 107 93 -59 -77 -72 -23 12 24 -4 -42 91 -29 1 123 38 -57 -48 -76 -25 -33 26 18 -40 -9 -10 -106 14 26 -113 36 39 -46 75 97 -128 6 14 -11 -127 31 -36 13 0 -18 -42 41 50 -56 -7 -98 62 -10 32 26 19 -14 -42 -42 127 -43 16 67 -1 -56 4 -19 -75 -28 -44 -41 73 15 35 54 21 48 -14 50 22 76 3 -71 -45 65 39 26 34 -42 47 -53 73 -42 22 -43 -13 -72 27 44 50 -118 50 63 -16 -59 119 8 -12 -14 -56 -113 20 77 65 -82 -14 43 -37 7 -24 -61 116 -6 -36 58 -13 29 3 127 -32 -34 114 34 90 -15 -9 41 59 127 -26 46 68 -28 44 21 35 -19 -81 56 -32 -6 -61 -52 121 5 23 -5 6 27 69 15 87 -127 -117 -4 -8 -100 126 -2 -40 42 -7 -104 -127 -83 -85 12 -123 24 26 -36 84 67 -53 9 67 123 -86 11 -9 -24 72 -5 73 -9 10 -1 90 -98 1 -13 26 -44 69 23 83 -26 -62 115 68 38 7 -4 119 29 81 -21 -40 103 127 18 64 40 123 -8 115 58 98 -30 37 -38 -30 6 23 -79 -22 38 42 -17 122 -63 -48 45 59 22 -76 32 72 116 -3 39 76 70 -97 113 -33 11 39 -126 -11 75 -55 -30 -22 -67 -66 -6 -1 -36 -15 -79 -68 -18 -55 46 127 71 116 10 65 65 -30 23 -39 -75 -42 -6 76 -33 125 -12 46 1 -3 -126 53 22 -53 66 3 -25 0 -18 -6 -11 -17 41 119 -32 -53 -33 126 -83 -4 -3 -14 -37 21 -8 -13 24 21 70 -8 10 47 10 67 -26 -28 126 -50 -65 127 -101 91 86 -32 -26 75 22 -126 44 5 26 20 30 -26 59 -72 -43 -80 -9 126 27 -4 -3 77 -20 -77 -9 43 12 11 -37 -24 43 82 -121 39 11 -76 -34 56 7 17 -121 -116 -7 -73 -125 -92 -47 -37 -52 -127 -89 23 -41 -78 37 25 -101 51 49 -23 -3 53 -5 124 -16 -46 16 -61 -89 127 18 -91 -13 46 -19 20 74 67 -1 -42 35 21 82 23 -121 51 78 0 0 17 127 10 26 12 -12 66 18 34 -63 74 -32 -115 -70 29 -25 12 -5 64 26 -105 -15 60 -22 22 4 51 0 -20 95 -44 -4 -82 -51 11 -8 17 64 30 45 22 35 -30 57 -44 17 -28 49 -41 0 -12 -18 -6 35 -22 -11 9 -89 24 -22 15 22 -13 -28 22 21 46 15 14 58 -49 -36 10 74 -84 87 25 69 -21 -17 -27 1 -15 4 -11 125 46 -75 -64 -2 -14 -17 115 25 74 -43 -22 -12 -72 4 21 -32 22 18 -11 50 49 -66 87 -48 16 126 40 33 122 -44 16 -37 -50 -39 -29 55 79 -3 42 -11 -14 -40 93 -37 125 -16 -30 42 -14 10 44 58 -76 -62 -82 -57 42 20 9 -50 58 67 35 -30 12 -3 0 -42 32 56 -19 49 -10 31 -43 -70 63 -83 -2 -10 37 17 -13 66 92 -9 -13 -13 68 70 19 -61 65 53 0 -64 23 -15 -128 77 42 11 -21 32 -38 36 39 4 15 11 -41 50 -85 -71 40 15 44 23 -4 35 48 -17 -13 24 47 -27 -8 -126 -120 -85 49 -69 -16 3 -71 -81 -55 52 -46 -27 -54 43 13 -15 -40 13 -59 19 -34 17 38 2 -76 -14 -30 4 71 -35 15 29 38 29 18 -30 -34 -51 21 -54 -55 127 5 -1 -29 -15 33 -125 56 -6 39 4 -68 48 -46 -5 -8 64 127 6 -13 122 -22 23 -19 29 80 34 -58 0 -50 61 -49 88 -22 -88 70 -70 3 -36 -37 -16 -3 0 -84 30 21 124 -32 30 92 16 -2 -46 15 17 -47 87 -12 48 10 -123 1 35 -90 74 -32 -53 32 44 -118 28 0 58 1 -113 -18 30 -38 -32 45 -127 -40 25 -26 -101 -22 30 -99 -53 -65 -13 -19 4 -114 -8 51 3 -13 -18 -87 25 42 89 -34 25 -65 82 -126 -63 -90 -40 44 -75 -54 -40 -93 -72 -99 -47 -68 -74 -122 -15 -122 -58 50 68 62 -41 -78 -29 -36 -50 -119 16 -101 -19 29 -84 -61 -8 9 -56 -22 -78 -90 -31 7 -3 51 -6 33 -36 -36 90 44 84 -17 24 -106 -31 2 15 -13 49 23 69 60 -2 61 17 -39 -60 -82 22 55 25 -6 12 80 25 -10 -1 -95 -68 -24 111 40 -7 101 89 -51 69 3 41 -11 9 -12 -3 -89 -53 50 34 -62 13 -42 -12 -114 -15 -39 -76 -50 -39 20 -54 72 48 -16 18 -28 -17 61 -67 38 -48 -46 -122 19 -62 25 -14 -66 -104 19 -6 -39 -23 73 -26 4 -23 18 -24 -5 -1 29 5 -9 -104 -69 7 -92 52 -116 -119 -83 11 62 -2 -49 11 -41 10 -33 89 -107 -52 54 104 -128 119 -64 -30 26 -41 -54 51 97 -49 -15 57 14 -3 -128 127 30 -126 -32 35 -8 -10 77 -44 24 47 -117 -36 -33 15 39 54 -125 -24 100 -89 -124 57 74 -125 76 25 78 -84 9 -41 -45 46 -31 8 -1 22 -22 -72 -75 -32 -30 -20 -66 -42 -27 22 -125 65 28 -11 92 30 -5 -31 99 -18 15 39 -29 44 -44 98 77 -16 -78 43 20 -10 23 -12 -45 123 125 0 -47 38 56 -35 108 76 -11 -75 19 -47 -6 -30 -31 21 30 -79 3 24 104 -44 62 -60 -126 -128 44 -126 -28 90 4 51 30 81 -60 -48 -40 -5 -4 61 93 42 -6 -124 37 -25 -53 29 -35 117 -58 7 -23 -6 18 -62 44 -18 12 42 39 78 -51 -64 60 -21 58 -5 -25 20 -28 37 67 -79 -37 -75 -71 -28 4 -33 -4 56 -37 12 -67 41 17 31 71 -2 29 -4 -24 7 59 51 68 4 -13 106 63 41 -65 24 18 -21 -65 39 -84 66 108 4 40 60 28 -28 11 -48 -14 6 -44 51 -38 27 -18 -74 14 -41 -52 100 44 4 24 -5 -21 23 73 -10 26 -18 -16 53 55 43 6 -68 2 -41 71 -38 -55 28 -36 7 80 71 -43 -29 77 76 -68 -115 -13 -11 20 22 -30 -22 98 -37 46 -124 -2 4 102 -6 -41 -17 31 54 16 -43 38 -34 11 -31 5 -22 70 -44 -4 48 102 42 10 26 -1 37 -29 -33 52 -104 25 0 94 76 40 68 49 89 -56 74 43 43 14 65 -7 -80 57 104 -57 35 -45 37 72 -68 -85 29 2 34 75 90 -56 -9 45 101 1 -52 62 -40 28 9 -30 0 14 -78 53 54 35 -40 -11 -73 8 -5 40 -58 -33 2 4 -8 -79 -78 12 21 -4 124 1 0 -4 10 18 -22 -8 9 -29 1 59 -88 -103 50 79 -29 67 -35 -89 -46 73 -63 -125 -120 68 81 -43 -13 -107 -38 1 102 -53 -75 22 95 -89 -55 56 -18 127 -19 25 52 -70 3 -74 -122 88 71 -5 22 98 -42 -6 11 -30 62 8 7 -86 -50 20 8 95 -72 -125 73 46 15 20 117 11 -56 121 -13 100 45 -16 3 1 -78 95 -115 -13 56 -23 45 40 -14 -52 9 -49 66 -17 5 66 97 16 -27 -94 76 -17 -23 15 69 -3 -100 -100 125 33 -39 123 -77 -81 6 105 -52 0 -47 -3 19 -71 -38 123 -31 25 121 -7 111 73 126 83 -11 -125 53 -12 58 40 62 -20 -56 -43 -72 49 -9 -68 84 -11 126 49 57 -118 -105 14 10 98 -5 -54 35 25 -123 -6 -35 44 -5 36 117 1 66 35 -20 -32 -39 71 -19 41 23 26 -45 42 -4 28 47 57 72 -12 120 9 -56 -107 -53 -64 57 -17 -47 42 -46 -34 -31 -14 -79 -126 12 -127 17 -116 -124 41 -123 -10 -9 -58 -62 15 29 -110 127 -113 -126 127 127 -35 -36 -4 -82 -21 -128 52 56 -25 -8 -3 -67 35 -24 -15 -89 -114 -16 61 53 -1 12 107 -16 -9 42 -128 -33 -28 124 -71 -28 68 -77 126 -12 55 62 7 -127 62 -37 -25 -19 28 12 12 32 -72 12 -40 86 -85 -99 -65 -67 48 -27 -68 60 44 -31 67 108 -58 -36 49 -75 -27 -35 31 55 43 -108 -31 16 -78 121 5 36 127 0 -18 44 -16 -61 -112 -77 24 125 4 78 62 21 78 28 -67 -18 28 54 29 -72 127 91 -1 127 -83 -40 -35 14 119 -4 -56 40 38 23 -4 -16 5 123 63 31 91 -41 102 48 25 -56 124 -39 34 122 18 -4 -86 89 -8 -30 -1 -124 -8 16 -40 127 -110 22 17 -5 -9 -96 41 -116 57 44 -82 58 -12 -55 10 67 37 -104 -18 2 -21 61 -10 87 68 -44 50 13 14 58 78 22 -126 -11 -23 -66 -53 -14 -7 6 -7 -4 21 -83 -107 94 -89 -36 9 -73 -23 -33 -90 -1 66 71 83 -2 -34 -79 83 59 6 -17 1 -39 71 117 34 19 -35 -21 29 -10 63 127 -62 2 126 -11 33 -63 41 -59 -26 13 -10 1 -80 -61 -15 1 83 126 -91 39 22 12 -62 -2 -65 9 -27 -55 -45 -66 18 -118 99 -95 49 76 49 15 65 -25 -24 -44 -59 32 -15 20 17 56 -47 -128 -55 -29 36 -38 99 -7 10 -42 33 -50 -22 37 94 28 -66 4 29 78 51 19 -101 125 -59 -96 -29 -62 33 2 24 -5 -116 -71 8 19 -24 -123 -74 18 -1 -42 109 13 16 -21 -10 -52 48 5 -40 12 25 -126 -63 82 7 -60 -125 89 -127 88 89 123 -1 26 8 62 44 -20 -2 -70 88 -9 -33 122 -11 -43 55 -97 20 43 -118 15 -5 37 -57 -99 48 -9 78 -79 40 -36 -87 -31 10 -128 34 -85 -13 44 -45 -76 -2 28 -3 -19 25 -66 81 77 -14 -24 -14 -37 8 -35 -77 -34 -69 -15 51 -72 -122 -74 19 -5 5 29 -125 28 -94 -83 -78 -92 -1 15 -10 -125 44 -62 77 -12 -64 -103 -1 16 59 -18 72 -124 55 25 -23 -121 117 11 -23 -12 -6 127 21 -14 -22 -98 84 -57 30 -34 -125 6 -19 -57 28 40 50 -37 -48 75 73 57 -4 -29 99 9 -70 -5 71 -45 -34 -49 -50 38 -45 -41 37 -93 11 -25 -64 21 -30 -50 -51 17 118 -3 -70 -120 -62 -36 44 -47 -26 -19 39 -21 -126 -92 17 -127 -37 51 14 1 6 52 -18 -43 -76 39 -27 4 108 22 -42 6 94 78 -67 -53 -34 -53 -15 -13 68 -21 -17 -76 14 125 27 -73 -12 -77 -1 -118 -50 -11 -4 86 53 34 50 53 -19 46 1 -11 7 9 0 70 -83 9 -15 25 -8 -14 -28 47 33 -8 -22 1 4 -3 35 127 -5 -47 126 28 -15 99 -13 52 9 -67 -47 -57 3 -99 -46 -23 -123 -93 45 16 124 -127 -18 80 -62 24 -22 6 17 -126 -68 -126 71 -35 91 127 17 48 -21 -58 -115 57 0 44 125 36 24 -37 1 -80 -18 126 -98 -45 -1 -50 20 73 57 -108 -26 -53 44 90 -24 -124 27 100 54 -31 79 38 127 -99 -37 2 28 45 -39 52 27 -105 -52 -58 -17 -66 -41 96 -91 50 -62 44 -33 49 44 -128 -126 -9 -122 -4 -124 -14 19 -127 78 93 24 25 -11 30 -109 14 17 -122 -58 -51 -95 31 -7 -111 93 35 -98 1 -82 -60 34 23 -31 37 -74 -102 -59 -58 36 97 -46 5 -106 -127 -55 -97 -85 -73 -87 81 -43 44 -84 -105 -126 -77 1 -9 -50 -33 -32 14 -123 -8 -78 -9 111 -21 -80 -65 -20 36 -67 -1 -49 -79 -58 -1 13 -103 -2 -15 52 -18 -61 -38 -42 75 -52 -117 10 -122 65 22 -108 -41 -24 -125 -25 -39 7 9 19 -120 -14 -11 -31 -20 119 -57 91 -58 1 18 -85 -81 18 60 114 3 -36 -20 127 -107 -40 34 -21 -123 71 108 -21 -23 -56 -31 -7 -64 55 -62 -107 -22 78 40 -19 -8 -3 -75 113 -16 -31 -47 -57 -121 -106 67 -77 -100 -5 -126 -127 -115 67 56 -46 85 -39 40 -11 16 -23 -34 -94 30 12 -17 -24 22 -40 98 -12 86 -47 77 6 -26 -23 19 37 -40 -35 1 30 36 -34 50 -27 64 -55 56 -33 95 39 10 -8 -4 15 -76 49 -70 -59 -47 -2 41 35 -31 -16 -62 -9 -128 -47 15 17 23 -56 -28 -33 22 18 -33 -12 -5 -59 -13 19 68 19 -14 127 -85 -22 -126 20 -58 -59 127 -31 20 6 22 -14 127 8 -41 -9 16 -29 -26 18 -46 36 86 28 -16 51 -70 61 -39 61 92 14 -48 -18 87 7 -127 14 -5 39 123 73 91 -90 -122 -66 96 60 43 -128 119 66 1 -47 -50 16 -47 22 15 -33 14 10 -47 112 -110 20 -39 127 68 -52 83 13 -39 -51 16 -71 61 -66 -126 77 -34 -36 -9 -32 71 -44 -89 41 -95 -38 -27 -128 38 31 1 -56 -21 23 -88 -80 26 -30 -57 -22 18 -38 -34 -8 28 -26 -40 -41 15 99 -61 16 21 23 -50 -39 -55 26 107 -45 -47 -53 -24 122 -76 -41 48 -28 11 -32 112 -122 -12 -13 34 -52 -52 -91 4 6 -41 -95 26 -123 -37 -72 25 64 -1 39 15 -58 -74 -32 -39 -103 42 -29 126 -10 -20 4 -13 -2 -44 -62 -1 109 19 -124 124 -77 0 -9 -66 3 -55 17 2 15 16 -35 1 -8 -70 -26 12 -8 -25 20 5 -2 -35 -48 38 -2 22 -32 89 2 7 -4 -33 7 3 -15 58 -52 -5 -11 -17 0 24 -53 -31 0 -6 -3 -22 -33 -57 39 -82 -45 13 50 2 6 -3 -4 -1 1 -127 56 44 -21 19 -86 43 14 -50 126 0 -24 3 -51 17 15 5 -35 -43 -52 55 76 -16 10 -50 -6 -14 62 -56 -39 11 -60 6 -125 -28 -24 4 1 -36 97 -26 24 -18 -3 -102 36 9 47 89 24 11 -46 -103 8 -2 20 -75 7 64 28 -90 -14 13 -2 -32 -10 3 -53 -13 26 -7 -48 -91 18 44 23 -43 16 24 -67 -5 42 -7 64 -118 18 -26 35 -2 -19 52 8 21 -30 37 28 -5 -36 -22 89 23 -25 -18 125 38 38 58 -16 -50 -60 22 -68 47 -86 -8 5 125 -119 52 19 -54 -65 48 92 39 65 22 8 59 -4 80 -124 74 59 -21 70 14 -52 10 61 18 35 74 -71 12 -38 -26 40 -2 35 88 -9 12 41 -21 -51 34 79 -110 -50 -57 -111 117 -3 -27 -75 -22 -81 2 13 84 -12 17 -28 -63 -10 -110 -23 -16 -25 -19 -35 -35 65 -51 -55 -45 -69 -4 -58 37 113 25 0 -63 -50 27 2 12 91 11 -49 -34 30 -5 -38 -9 -62 -1 -61 -21 120 -14 78 110 -73 -43 -20 -56 -14 18 -111 -56 -32 11 31 26 -20 45 32 -13 -15 -51 -35 45 66 -11 84 -5 -83 -3 73 1 41 2 -85 22 60 14 -32 -5 43 -111 -13 127 -7 -27 -3 -33 -10 -12 -22 97 73 30 18 -116 -74 -84 62 53 -58 -127 -90 -61 -30 -61 90 6 -14 55 34 -34 -17 -36 -9 -8 -10 -20 118 42 117 -8 16 -110 45 -83 -65 57 22 21 -125 -81 -17 -4 54 3 63 -40 -9 41 8 89 1 73 -51 103 21 -88 1 -61 -44 -1 -22 65 31 -26 19 23 -21 -98 -88 42 6 27 122 -41 36 -10 99 -21 -45 -47 -11 67 1 -23 -89 61 -5 43 -7 85 7 118 -3 58 16 35 33 -6 -3 41 -15 -32 22 -27 23 118 22 16 -90 -101 -29 15 -52 -127 51 32 -52 10 71 -83 -6 15 -1 -24 30 -43 81 -69 19 -48 -41 125 -72 54 -126 -36 -11 -2 87 32 18 -12 4 -13 55 52 -88 -94 -83 -7 63 -91 -15 -67 8 84 -29 -73 126 -44 -78 35 16 -30 -128 -42 19 -55 -56 46 -69 -17 -15 -65 -7 -52 -18 127 -114 -47 -41 -38 23 5 4 88 -33 18 -128 -128 -117 -15 -127 -35 -26 -37 -17 49 -24 -11 -36 -26 91 53 -128 -121 -10 30 25 102 62 -33 5 -43 -32 -82 -100 -58 3 -110 8 17 76 -51 -30 74 -4 6 -30 -20 -93 -72 14 16 25 39 -25 -127 23 -30 -12 51 53 -99 -10 -14 -22 6 97 -36 -101 -8 4 -54 108 60 -116 26 1 -108 97 -13 -30 114 -3 60 -28 -117 43 -19 -14 16 125 58 18 -55 62 -27 59 26 -48 113 19 -33 -70 -73 100 49 -118 5 -51 27 15 50 -90 -31 15 -28 78 -1 -63 14 112 64 62 45 -46 17 69 -8 50 51 88 50 21 21 65 79 119 -33 -62 -11 -54 71 -51 -86 84 -29 -27 -88 -94 -20 107 -78 -56 -124 -18 -48 119 -9 74 7 -80 -8 -73 -128 127 92 123 -112 -128 29 -125 -46 77 30 -88 36 127 -65 -48 125 119 50 127 105 77 -50 -110 -17 7 -87 -127 51 -77 -14 49 124 -13 -120 31 127 8 123 62 74 64 56 4 -4 81 16 -12 80 14 127 19 -63 117 -51 -101 -61 -127 -98 86 89 41 127 122 -17 -57 64 10 66 22 35 -5 26 -36 4 13 16 48 -108 61 72 44 4 -2 -15 -59 26 -74 19 31 -52 39 -45 -30 27 2 -35 -47 -8 104 34 -30 4 -40 -22 11 11 -68 -23 -64 2 37 -79 7 -11 -91 -19 28 -24 -88 23 38 3 -101 23 -116 2 26 -47 -43 13 48 18 57 -33 -10 -8 38 -16 -60 -74 82 26 -9 -5 20 29 23 66 -21 42 7 -10 -20 -44 -61 2 -8 15 -29 46 30 -44 -35 65 -37 -51 -38 -18 -75 2 27 6 58 -66 -110 -28 12 -21 -79 33 -17 -77 25 34 -44 33 -43 16 93 -19 -12 28 79 -92 27 69 -9 -92 34 -10 5 -46 125 -57 -89 8 -38 58 -7 127 -38 108 42 112 26 30 -14 38 41 96 -22 8 -45 53 39 35 55 -44 -94 -56 86 14 -1 48 0 0 -56 55 -81 17 11 -57 45 122 -66 -27 26 -33 -42 37 -36 52 3 56 -50 -19 13 56 25 -44 22 44 48 47 5 -59 -2 20 -85 22 95 -29 -73 12 0 -49 78 70 -1 -41 26 12 -35 53 -87 -41 -60 -29 -20 56 13 4 10 54 -25 -83 7 4 -54 28 -4 -36 -19 46 22 53 4 -2 -15 -52 -42 8 78 27 -27 -52 91 2 -15 -26 19 -89 38 -6 77 26 -25 -57 -39 27 77 -31 59 -12 21 9 -27 29 14 -20 52 11 26 34 -49 -1 17 -6 126 -15 -22 20 -58 -26 96 93 -75 -39 -39 0 109 -94 30 -76 107 28 10 12 -123 11 112 -23 2 7 -6 -2 -29 -57 83 81 -75 -41 86 -17 56 -27 27 -74 -61 -41 -21 -51 102 88 27 81 -123 48 -58 -87 -57 93 53 60 78 113 -106 -6 46 8 25 85 -27 -16 -52 15 -70 83 8 -127 -22 77 56 102 -72 -6 42 -86 -44 -57 40 -19 52 115 -51 -25 10 -34 -57 -126 -49 125 81 -22 5 -63 0 -23 -17 35 3 14 -65 -94 -59 14 3 -126 32 96 44 93 -22 -91 -11 -44 108 22 -82 39 20 42 61 8 24 9 107 -2 -16 29 -45 6 126 28 16 31 -54 -55 -31 -34 -56 39 -41 -35 34 -66 -6 -70 -31 68 17 102 9 -25 -26 78 74 126 -15 -20 42 62 -78 121 15 -50 -23 52 -48 -55 106 -10 -57 -34 -14 92 -77 3 -19 -90 17 16 -81 -11 63 -1 -104 81 45 22 34 -39 -104 11 51 72 -32 -51 34 4 59 17 35 19 -16 52 -5 22 49 -1 -80 1 -11 -45 51 2 52 -55 14 -8 49 -66 -41 36 9 -66 -27 6 -4 -28 -69 39 54 -128 1 44 86 127 -19 -29 -67 16 -38 -19 89 29 -7 60 -51 -63 -59 40 -107 22 119 42 17 54 -71 114 -82 53 43 16 -60 3 6 -118 -21 13 114 67 114 29 32 -11 70 -86 87 6 -54 -41 -44 67 25 -30 11 -12 16 127 2 -25 25 22 -6 -100 -3 42 -91 30 126 107 37 28 -20 16 -66 126 20 31 -35 28 -5 -98 38 -14 -37 -100 -11 74 -15 -21 79 -47 23 -39 95 29 58 -36 38 -37 83 21 112 106 54 51 -23 107 -61 101 58 -36 -27 -56 -2 -58 -8 17 46 -17 65 -54 35 -13 -11 -66 7 11 53 -26 -4 46 -65 40 -89 126 73 -74 7 -27 59 -4 89 59 59 111 69 -115 48 -65 -110 -19 111 121 -32 91 73 -111 -31 -87 34 65 3 120 83 -3 -122 -67 26 8 48 35 -35 -100 49 45 94 -10 -10 26 -36 45 -98 -105 -35 -21 -106 74 31 -13 77 103 11 20 42 -42 10 32 56 -46 -11 -52 9 -16 28 -63 -9 27 -33 -22 -68 67 11 -127 114 -3 75 43 -4 42 -70 -52 -36 -58 -70 16 -18 17 19 71 -77 -45 5 -91 11 -10 12 -7 -2 -13 71 51 -119 21 -15 53 114 -119 117 97 76 53 4 -16 -6 24 -18 -17 15 -16 -76 0 49 -32 21 -55 6 -3 115 -126 24 21 -128 39 -43 65 28 63 0 -34 -52 -65 -113 -31 0 39 -48 -48 35 -3 -35 88 -92 -8 38 -25 -12 64 9 -42 24 -69 44 27 -2 -19 6 -60 -105 -70 -30 -56 2 89 124 29 12 54 -13 54 15 -117 -31 -14 98 -98 -44 -13 69 9 29 -17 26 37 -38 37 23 -54 38 11 7 41 69 45 -87 27 -85 20 1 43 64 6 -14 -113 48 46 -29 118 -23 44 -98 127 62 16 -107 67 71 -27 -30 -45 -126 -2 0 18 -40 -6 25 70 115 40 -91 -45 122 27 86 54 44 93 -27 87 -31 13 -8 70 -44 -42 45 -17 -122 52 -83 -83 -127 1 -24 35 17 31 25 -71 28 -31 -78 -44 -128 123 -124 -127 -6 29 -61 45 -37 126 103 -30 -57 21 -54 -55 54 -92 -56 -12 31 28 -38 -102 2 -88 127 43 62 -113 19 92 -35 61 -81 63 -11 -7 -66 -48 -63 -43 -6 1 7 44 -29 -68 127 76 -124 -1 119 45 -11 -16 -29 7 7 1 -119 -1 23 -74 125 36 -122 121 -49 15 15 15 75 3 116 13 7 -106 18 -5 -59 -11 -15 -102 -6 97 -46 -125 -37 -20 55 -52 -96 -121 43 -43 127 17 -126 44 -63 -22 -16 -12 -71 -69 -40 -32 48 67 48 -36 100 46 67 66 76 45 -20 28 -14 -121 117 -57 -42 41 -63 55 -83 -82 -33 -124 -22 -23 115 40 96 -127 108 27 0 -97 65 -4 -114 -125 48 -25 10 126 -6 -33 -31 -128 -44 -113 -126 -14 -4 90 -128 70 3 6 -48 46 -12 81 67 -65 25 -19 -121 -38 28 73 11 8 -77 -68 -123 48 9 31 -48 -44 -127 100 -79 124 126 127 -127 119 69 16 -32 -24 -1 -28 120 24 -81 2 16 58 125 48 -60 5 -46 -33 18 13 -108 126 49 -15 -9 38 30 126 -46 12 -15 -32 55 -118 48 -56 107 -45 56 77 -71 -14 -15 33 126 74 112 -50 23 19 -79 -1 -50 39 52 103 5 28 7 24 -76 -112 -47 -6 15 -84 84 61 16 50 1 27 18 49 10 -45 -36 87 -67 6 1 -125 -35 -18 24 49 14 -94 43 26 -52 -18 115 120 -79 44 0 -40 116 -126 12 38 -86 -14 28 -11 -24 44 33 -65 17 -43 -53 3 45 -17 32 -51 64 70 93 21 2 39 -40 -5 38 62 -46 8 -31 4 50 -46 -3 29 48 -29 30 -18 104 21 11 12 -6 -11 106 24 87 33 58 -23 -30 -66 -93 21 -16 -65 10 1 -32 -7 -21 0 30 -61 127 31 0 -7 -12 -127 32 -1 -44 -15 -55 -71 -37 40 13 4 -76 2 26 -15 -40 -82 -12 70 38 -2 -108 -50 -21 -20 19 35 64 37 -72 17 44 42 116 44 49 -13 37 9 66 26 7 20 39 -32 45 -57 -24 16 15 19 24 -11 -62 -74 -8 -81 -5 17 40 -10 1 -16 31 -37 16 -7 -59 -70 -15 -21 16 -67 -19 -31 72 6 1 -13 -95 70 24 31 9 26 20 -1 -127 39 -4 25 -10 -56 -39 13 -48 19 43 -40 19 74 67 -13 -5 3 -40 -13 0 -19 2 -9 16 86 60 63 -47 -2 45 -15 22 -4 64 -31 29 -47 61 -45 27 95 23 71 -43 -33 -19 -31 47 -123 -27 33 -34 72 -102 -40 -29 63 -97 39 9 127 52 -91 -3 22 -96 104 -25 -7 -1 51 5 90 6 8 -3 -13 -10 74 -20 36 0 62 28 -84 10 127 116 24 -106 -2 108 -22 124 -11 89 54 -61 -5 69 -105 2 -22 -45 -43 2 -20 -26 5 -35 30 -89 12 3 31 -4 -65 -33 34 -25 51 3 44 -90 -64 -74 -71 94 -59 98 21 70 25 10 44 18 -13 -123 -126 67 -122 -38 -91 -61 -27 -45 -57 -20 -50 -13 1 -108 -43 19 53 -4 82 30 46 13 33 -37 -55 41 8 -17 -7 62 -20 63 17 -57 44 -29 49 18 -23 -56 -4 -8 -57 -49 -29 -54 -104 -114 16 48 9 -22 54 -46 5 -101 9 73 113 -10 4 -24 16 -57 -84 -125 24 -45 -1 -18 19 -111 -9 33 -65 1 -45 -4 -22 10 -9 37 18 -103 28 -28 -73 -35 -5 -79 -44 23 13 25 -50 -41 4 26 121 32 51 -26 -36 -76 0 44 -34 75 -20 -26 -3 65 -31 -98 -117 -71 -97 -87 24 87 1 35 -125 -35 68 72 125 -8 -7 -26 -21 104 19 15 34 -91 91 44 -118 -37 13 63 54 18 116 4 52 -75 9 21 -113 -81 43 2 -5 39 -6 -57 11 5 54 19 -24 7 0 -22 41 -52 86 -45 -13 -44 27 -96 121 90 75 -30 -29 24 9 0 -27 24 -22 25 -15 25 79 0 23 45 -49 -59 68 -49 12 -6 21 -119 88 55 -6 89 -44 25 -55 8 21 -3 46 -1 -28 0 9 42 18 -25 -4 104 126 -25 62 25 13 43 51 71 -17 1 1 72 63 -45 -20 81 114 -5 68 39 56 125 -62 59 70 45 43 -3 10 71 56 28 16 -67 16 -56 1 31 -30 60 48 -76 -1 -10 -12 65 -37 5 14 -17 105 -35 110 22 -7 3 110 125 31 48 42 -3 83 -26 -30 27 -35 86 5 63 -9 18 -51 100 29 -10 8 1 1 77 -13 35 29 11 88 -52 14 -66 -66 -64 -12 -4 -51 -27 -4 13 -69 -55 60 -2 8 -11 -8 -8 2 26 26 58 -45 22 76 1 -33 10 -58 -15 -40 14 -11 19 23 6 45 -42 31 13 4 31 -27 83 -5 18 65 -2 49 -5 -19 22 -80 8 25 33 -67 -1 57 -19 -4 48 -46 3 -34 18 91 34 -20 -24 -11 -33 -15 -37 8 -37 -67 34 14 27 1 31 3 19 47 14 43 8 -41 -8 -10 -62 -55 20 47 -103 -29 -60 22 -40 64 66 11 77 12 58 -21 -62 -2 42 -29 -32 -92 50 16 10 41 6 38 -27 -62 -1 33 78 62 -17 -73 14 -4 76 31 -126 21 -22 46 16 -29 1 -4 -32 18 -128 76 59 45 -28 -42 3 4 78 53 8 -6 -43 -14 -13 57 16 74 25 -29 -38 -12 -6 -74 84 -5 40 49 -52 3 -12 0 67 -13 1 -5 11 114 -49 116 -113 70 29 -53 125 -9 46 5 -86 -83 -86 41 111 46 -61 127 -37 5 -4 4 -25 64 26 62 56 27 122 37 94 105 2 -19 -16 120 1 -52 35 47 -15 111 -55 17 71 -10 20 78 68 19 23 12 127 -97 -37 126 -89 -126 -19 -125 -17 -28 12 -40 3 -20 -113 121 74 -26 -127 -58 -12 37 16 22 -111 -93 -42 -10 -52 44 0 -25 -84 85 31 -68 -1 -9 -125 62 57 -36 52 18 20 2 -82 20 68 -36 -38 -32 26 -37 6 -25 24 30 34 -125 62 2 -15 -1 -17 15 54 -46 38 73 16 61 -21 83 -14 31 -89 -39 48 50 22 -76 23 120 -112 2 -69 -69 -31 -22 35 1 44 126 -64 83 61 -52 -62 -91 28 44 21 30 -29 -117 -43 23 9 -33 -127 36 -66 -22 -63 32 -92 62 -29 -87 -127 -7 112 127 9 9 -1 4 61 -92 11 10 -128 27 -104 -82 -27 -30 -54 -24 11 -51 59 43 -70 52 13 -7 123 -127 32 -6 44 -59 83 -127 -1 119 1 -80 82 -37 -59 69 35 28 -52 -39 65 117 -126 -64 79 7 -8 100 127 20 125 24 -78 46 -108 -80 124 -5 -9 117 -37 -82 0 14 1 42 -53 -67 -93 -60 44 47 -47 79 127 -25 -126 16 16 -12 -117 -57 -4 95 52 70 -45 -53 -110 -128 126 42 -58 22 -28 22 -80 37 1 -30 127 19 22 33 -126 1 11 26 126 -23 49 -87 38 16 14 -87 2 27 104 -73 -28 15 13 0 -13 -14 47 17 119 103 -116 25 24 10 -119 9 78 -1 88 -63 43 -59 4 42 -1 52 8 -22 -34 -123 -35 31 -1 -82 26 -31 97 47 19 65 53 123 -95 -40 0 89 28 44 -32 51 116 29 101 36 -25 70 100 40 -91 -24 42 36 35 -1 -43 44 -82 61 90 56 6 -72 -70 103 123 -19 -49 -98 -6 28 91 62 -40 125 -83 27 16 6 81 -16 69 59 36 64 -47 -92 41 -50 62 -14 58 -17 -49 123 -23 36 64 49 54 13 -57 56 -28 100 16 38 63 -93 42 100 -39 -74 3 38 10 56 104 9 -52 -18 -1 54 54 -32 -49 -35 -98 -112 29 -63 -26 -15 32 28 28 -18 10 66 43 -51 91 -112 40 -43 -54 59 69 -78 -1 -47 -24 30 3 -42 46 17 -67 51 55 17 -27 -28 77 64 36 5 -51 -36 51 126 123 52 94 48 -31 28 58 54 36 -27 -89 -43 100 61 44 16 80 41 20 33 63 7 62 -17 5 34 68 -121 114 71 -114 -12 4 -75 -7 -12 -44 48 -23 -56 -11 60 45 26 13 -79 116 118 62 16 14 5 20 52 -21 70 8 50 127 55 73 5 27 63 18 45 -127 -9 -85 -10 43 -44 57 -8 -55 -14 24 28 -16 -41 16 125 -16 8 22 67 12 43 14 24 -97 -50 -30 -32 -11 -108 20 -6 91 -1 -28 0 39 8 -66 22 -44 16 -42 20 29 19 38 -25 -10 -110 79 41 42 -122 -41 -39 -46 -29 -16 -50 47 0 27 37 2 44 30 33 -72 -128 -125 -16 -24 31 -125 51 -9 -54 -15 -14 78 37 12 -125 9 7 118 -64 -78 -61 7 32 -102 -98 32 91 -85 26 56 -45 12 57 6 35 40 -111 70 -64 87 -67 -121 50 56 60 52 -81 -34 -46 -26 12 5 30 -1 -22 57 -71 -118 -34 20 -41 -1 63 -53 80 -97 72 124 -14 -89 32 -84 -64 -31 1 -3 -24 84 31 9 9 52 33 -67 -89 -73 83 -69 -25 -77 15 50 9 -97 -85 -62 -52 47 -44 -11 32 57 52 104 10 9 -37 36 6 54 -30 -11 -17 -25 58 20 90 31 -16 -14 -1 6 48 67 53 12 4 -50 -6 37 11 52 -15 -23 33 127 62 0 -19 27 -71 -9 -24 -17 42 -14 4 -62 44 -22 -14 -11 29 113 60 75 -36 5 82 -6 5 -14 13 8 -20 -41 47 17 3 6 -26 96 -23 -20 -29 -26 17 24 -127 -19 56 19 7 42 -6 -3 -5 73 -42 6 0 8 -63 -106 -11 97 -30 -61 -25 -18 41 -19 24 -13 -6 -14 16 77 -52 -30 -88 -29 -89 26 -20 -16 -3 29 104 -4 34 -33 -99 -39 -12 -55 7 -72 10 54 104 0 65 7 49 86 51 -20 35 -52 -12 -9 24 -10 13 33 91 -11 44 24 -2 79 13 -31 -36 -55 -7 -52 15 -85 123 -32 14 -34 -103 -23 -45 -61 -106 2 -98 33 -20 -13 -49 25 45 13 90 42 20 -10 39 -121 22 -75 -12 17 31 41 14 -39 -26 -85 -71 54 -11 -40 -72 -20 -33 -5 -127 55 -26 92 -21 -49 11 92 -12 -52 87 -44 37 33 -31 -56 -126 63 4 27 83 20 -22 63 -22 66 113 41 -86 25 -93 -79 -20 1 -74 -17 62 37 -16 -20 -8 -46 -10 -32 -46 -45 23 -14 81 39 -15 24 -74 31 -57 34 72 -5 30 52 80 53 22 -11 -1 13 -18 -4 51 37 29 -29 12 17 4 19 41 -36 41 -44 -59 91 51 -28 -74 -100 -1 27 -41 -6 -9 58 55 -8 59 12 -32 9 -16 12 -26 41 -35 -37 45 -56 -30 -38 38 -21 -26 -15 6 -28 57 38 -31 -20 74 53 10 -27 56 -53 -9 -73 12 -112 -65 -4 -4 -65 -62 8 -54 -7 -30 -72 6 35 3 -18 47 11 -2 47 -53 9 37 -47 -17 106 50 -25 -26 78 -52 62 68 -25 -32 47 -124 -40 -60 74 40 27 -4 69 -80 -111 66 58 11 -48 55 -24 0 -123 -41 123 -24 -64 -72 4 3 -2 -8 2 -94 19 -34 -3 -38 -66 -84 115 -111 -39 -61 -37 -59 63 -23 -126 21 90 -23 -2 72 -88 9 -3 80 88 93 -128 -113 24 -8 65 -125 86 36 27 -31 -49 -22 69 6 37 66 19 -18 -107 -17 -35 -31 -69 -47 32 24 -21 -32 -55 -40 9 62 74 -101 16 19 -21 -9 72 -26 -16 62 -16 65 58 15 5 -70 14 -46 -112 15 22 8 -123 18 6 47 -60 18 -109 -39 9 44 3 14 68 62 53 1 17 78 -94 -37 -69 -84 12 -43 -47 51 -12 53 51 -22 34 53 18 -80 -30 -53 -29 -83 39 55 -17 0 -54 -45 -29 27 32 45 81 18 30 26 22 55 -105 -17 14 -32 -62 29 44 -20 -5 -78 34 41 -12 -56 -14 -74 13 -12 -11 46 36 -41 -34 -50 17 5 48 9 -22 -31 -2 21 32 51 9 -126 -18 -41 -128 23 71 20 0 25 -21 -7 102 -17 -70 3 -68 2 5 26 -34 46 28 3 -17 85 -10 -8 16 47 -54 -32 8 60 -26 -8 24 -125 -84 20 -19 -86 7 -27 -12 68 -32 -39 -46 -50 85 55 -23 23 -35 89 -30 -55 13 6 -11 -24 54 -9 7 -23 -64 -9 82 -65 -43 30 13 -44 -62 -123 -13 -49 -8 13 77 -36 27 82 -22 15 71 -14 70 -57 -44 -8 40 9 19 60 57 94 -7 45 -127 95 -53 -62 -6 -30 27 120 23 -45 -2 125 -17 122 29 39 -94 -77 30 27 -1 -35 109 30 99 -23 7 105 -8 -124 57 67 -38 43 11 -61 -25 -4 70 -100 24 -94 -75 -25 54 -121 -70 -23 17 -25 3 -121 -42 -15 26 18 51 -63 -60 41 -71 60 15 40 65 67 -127 121 7 -124 -13 -32 -20 -27 3 -65 -34 -52 -74 45 -60 7 5 50 -109 -22 0 -13 -74 -33 -40 -40 67 0 -42 -21 -44 6 -61 0 -61 38 116 -14 -68 -2 -36 72 121 38 -36 -42 91 84 -68 -53 -19 126 -46 -99 -1 13 -2 -36 67 -54 9 17 -108 -16 31 -1 27 25 -114 -42 12 -55 36 -124 -47 82 29 127 -25 -91 -60 81 -101 -90 33 20 -72 14 4 -21 -16 -41 24 4 31 33 -5 99 64 -37 -104 -108 103 4 -5 13 2 -40 34 6 -125 79 -26 50 -10 -30 -4 -88 65 -41 53 -123 -47 -127 13 -14 11 -73 11 -11 16 -56 -46 11 -25 55 44 23 -48 -13 39 -127 -37 -74 45 3 -66 -73 72 65 -19 16 -57 5 -26 -27 -10 31 28 18 74 10 47 7 -2 46 -18 17 -63 43 1 -47 19 81 83 124 58 45 46 65 -74 32 -18 20 -4 30 -82 57 31 52 71 4 -27 -49 -12 -28 -13 -60 1 6 -16 3 23 -30 -6 -40 100 -23 -22 97 79 -116 -4 4 -34 72 -23 -35 93 0 -25 -86 -3 -1 -65 22 -57 14 -128 48 39 124 46 4 -29 -117 -47 30 27 94 -8 35 -22 66 17 31 101 -63 -15 -32 39 -53 -39 68 127 57 -17 33 -5 -21 -12 -51 38 -30 48 -32 37 1 -1 -47 -10 48 -109 -31 41 -14 -18 45 7 -39 -61 4 -68 -36 14 -13 76 28 91 66 -67 14 58 34 39 -15 -74 127 78 -36 -99 -23 -4 -84 85 -100 96 86 -43 44 -76 -6 38 -22 -128 -27 -16 -127 4 117 -76 -21 -42 -28 -18 63 55 -63 21 -16 -110 32 5 -17 46 84 96 125 -90 74 44 -128 94 41 94 127 41 9 -32 21 -77 86 61 71 33 -3 -5 82 -19 29 23 -18 -33 21 61 38 59 -38 24 -23 -65 0 53 -18 31 -24 126 45 30 -49 -33 1 -39 -62 92 38 -15 79 69 107 -35 -5 -50 -7 13 -50 89 60 27 -89 23 -107 -13 53 -60 56 -45 -31 51 -18 -13 -66 4 8 58 -32 -120 17 2 66 63 -68 54 49 72 32 41 23 28 32 -2 -49 4 13 27 -72 26 -22 55 40 72 108 -70 25 -14 0 72 77 31 -23 19 -19 29 -3 -43 15 93 30 28 44 -62 -63 -32 -83 13 126 46 103 3 28 22 13 32 3 -20 -18 54 104 -31 121 24 -44 -12 15 41 -27 -27 -25 -41 -23 123 -43 -16 41 97 47 42 103 -56 44 40 28 29 11 50 -95 31 -46 -83 -47 -58 -83 77 -64 -52 50 -123 18 -27 6 1 -126 -17 44 73 77 88 59 -16 -13 -11 -28 -65 21 61 28 -40 -14 58 -40 -56 40 -39 -31 -60 -21 33 -47 -38 -8 42 -28 -69 -1 34 67 9 3 -43 -10 88 17 62 27 37 9 -64 29 -21 43 -34 60 -5 -51 -23 76 17 68 -25 51 25 -15 -29 -7 -9 50 67 -10 -15 115 -32 32 123 48 34 118 45 52 73 -5 -60 -16 -22 31 -42 42 84 98 -12 33 57 -21 72 8 13 -21 -72 -13 26 -27 77 79 58 34 35 6 61 -14 -43 -10 89 3 -25 -54 27 86 -66 72 -53 121 -31 30 -67 -5 72 -38 48 47 39 1 43 48 18 52 61 35 79 -20 52 114 37 -14 -33 16 23 72 43 43 105 6 32 -101 -12 61 13 52 36 -30 -51 -6 -7 57 -11 -33 26 -23 1 35 70 80 -30 -34 8 -8 42 -17 27 -12 10 23 26 3 -58 45 69 29 0 11 34 1 26 81 -35 -11 19 -64 26 43 2 -2 35 26 7 -42 7 -60 31 -11 19 -24 -11 60 24 -21 12 -21 30 -26 -58 -16 -12 -22 -18 -1 -4 23 -44 -16 87 29 -37 -10 42 33 63 -12 20 -25 -50 9 14 -16 -6 9 -35 -21 34 -30 -5 77 46 36 9 -9 28 -23 -92 7 6 26 4 58 31 89 66 -17 -26 -6 4 64 63 -62 -34 -20 41 88 -1 10 4 -27 91 -63 43 -19 -69 127 -27 -16 22 28 108 -33 -32 -23 -54 21 22 65 -38 71 -23 14 -13 -30 -62 99 8 64 18 -13 -50 65 66 -39 31 70 11 -29 65 -24 14 -122 0 21 -39 21 -35 -22 40 23 -39 -51 30 -78 -35 26 -51 10 4 25 24 58 27 30 75 126 -2 -16 80 29 -19 99 21 -63 -17 -123 -31 -12 -41 102 125 -3 -83 -26 13 -32 -124 16 5 -35 -11 -24 -111 -60 -20 126 -43 -112 -29 51 39 -45 0 14 -17 25 -34 27 -94 15 76 -87 31 120 60 19 -39 54 19 -54 -40 16 -9 45 -43 -100 96 -117 25 58 87 21 72 -12 -60 11 104 62 -18 12 22 28 126 -44 14 -76 -58 -116 66 -3 127 -76 -38 -67 49 1 -2 63 -3 -31 53 106 -101 44 127 -6 78 11 -126 21 27 -29 43 96 -120 -58 39 -16 -92 23 -75 -99 -28 -118 4 -36 3 -27 -30 -77 99 16 -3 67 -125 104 -21 -71 -127 34 -50 6 111 126 -81 -109 -51 -105 27 -26 7 -9 42 75 75 -58 -16 -82 -9 27 47 49 -95 -99 18 -127 -54 -16 -28 -92 -10 75 -51 47 -23 3 -49 -111 -44 -126 -28 116 -85 -23 -13 -10 -48 -28 56 -16 -16 57 13 1 -125 -38 -2 -8 -45 -95 127 -54 2 55 82 101 -33 -17 -21 -107 69 -87 13 -41 -54 63 41 22 35 -44 59 31 17 8 15 127 62 -36 -18 -23 88 -32 -11 70 -59 -110 2 48 31 87 36 -44 -91 60 1 -56 112 -28 -49 68 -54 -30 -22 46 32 63 -23 -55 -32 3 -47 -59 -29 -11 -58 91 -28 55 91 46 -45 -9 56 -83 14 37 22 79 -16 60 -13 47 -15 61 8 -50 -12 103 -80 -26 -33 24 -38 43 12 23 -45 -69 42 71 -14 31 -26 -76 24 13 -5 90 126 70 29 -5 10 38 -126 103 44 -31 18 -3 -33 -101 43 121 9 75 -58 115 76 -14 -58 -7 -1 -47 -36 -11 18 47 108 127 -16 127 -14 -78 12 -55 -7 8 22 51 69 51 -97 -105 11 -21 -65 93 -59 -10 -3 -54 -30 -2 74 0 3 -1 78 8 -8 24 17 55 -16 -109 42 19 29 71 -75 1 -22 41 60 -41 -14 22 1 39 6 55 6 40 58 -42 27 44 -83 -50 -79 -39 -5 -70 89 77 -66 75 -125 -100 -6 -69 22 24 -32 -12 80 20 53 52 32 -17 125 94 -85 -70 -90 -35 -23 43 72 43 -43 -9 -56 -10 -69 -28 26 16 11 -28 106 -26 -19 -28 -17 83 38 -42 -40 26 32 -17 8 -75 11 -11 -112 93 5 103 -35 -28 34 -91 -13 -28 -31 17 4 121 -69 -3 51 42 52 67 -29 30 34 -22 -57 45 -50 97 33 20 -11 -3 -27 -34 89 11 48 21 -58 21 -18 -20 0 0 -36 21 37 -44 -24 -75 127 -64 -8 -90 36 -72 -53 44 38 53 -29 -54 39 42 -20 -81 89 -107 19 7 67 48 18 29 -78 6 107 -52 -23 27 -56 -60 71 52 -19 -65 -37 -58 -22 -35 -60 -52 15 -6 -54 -9 -18 34 3 96 -27 -35 -41 -12 -25 21 55 30 93 22 4 32 27 13 76 -61 -24 -25 10 32 -12 41 -96 117 109 -34 55 -61 75 54 37 -22 39 -78 -69 34 17 -12 -69 76 -21 -27 48 -20 45 21 -35 -11 -17 -24 4 35 -85 65 37 31 -7 6 -34 35 -45 -26 -29 -2 -63 69 -9 69 -7 89 61 18 -84 -17 39 -26 42 -46 16 -39 -90 99 -20 -75 124 -60 -69 -6 28 1 51 65 -91 -20 -3 15 67 8 63 -65 -26 -99 44 82 8 6 -86 37 -48 86 60 110 -47 23 -34 116 -50 16 -49 -30 109 -51 -45 -55 -18 35 7 -24 37 0 109 58 45 71 -31 -45 -52 42 7 57 -94 -21 -52 93 -71 -68 11 88 -72 -14 -59 -62 32 -11 3 -20 7 57 -86 13 -99 -50 -28 52 93 111 31 33 -50 37 89 112 -61 -18 -33 -31 31 -53 -100 10 -16 -75 -16 80 -21 -38 16 -62 -32 -72 -80 55 -70 -28 -9 -2 -56 -100 -104 103 94 -52 78 -32 -74 12 61 -60 -38 -109 -102 16 116 -73 -38 -35 -98 48 14 -8 -18 9 87 127 -22 -55 -16 -54 -59 24 53 -119 3 -46 -83 15 126 31 -74 42 73 107 35 26 14 -120 -122 30 6 8 -14 126 119 -9 -66 -65 112 -84 -59 29 1 -66 74 2 -37 -8 55 -37 124 127 -67 102 -117 -16 82 59 92 93 86 123 32 -17 78 -29 -119 -8 -72 -109 26 -54 -121 111 -40 -81 -73 -12 -21 -48 33 -21 -114 -76 -80 8 -26 -32 -30 2 29 21 -124 -112 -118 20 24 -7 14 -15 56 -126 -124 115 126 116 23 -57 -32 -41 92 59 -15 8 36 36 36 -83 1 1 74 69 -18 119 93 42 -79 -2 20 115 -26 -1 7 15 127 14 112 -81 14 121 -64 -104 53 31 -128 30 97 37 52 3 -87 42 123 36 -17 -23 18 78 27 16 -18 -52 43 -32 125 -62 31 -14 -22 -116 -126 -33 -41 -127 42 -36 14 -42 -14 -60 23 55 -97 -6 43 -25 -18 71 -20 37 65 -2 39 -108 13 80 19 19 -126 25 -106 -22 -62 41 -66 32 70 -29 -53 -125 124 40 34 13 125 119 -69 -102 -21 -15 53 31 5 -101 -85 -18 -27 -73 -4 -65 -40 -54 -2 12 -20 91 -21 82 33 34 123 -16 -4 25 -9 59 -6 -116 -41 93 -38 -7 37 100 -98 111 106 34 -20 -29 -105 -16 14 -32 33 54 19 38 17 -62 7 -61 58 51 0 -109 35 -65 4 -48 -3 -15 106 -102 6 -32 -42 58 -39 40 -4 110 -44 -8 97 -49 127 -21 53 -10 -79 -19 22 58 -87 96 16 79 -36 -15 33 58 122 -89 -6 1 93 18 100 43 66 -28 116 111 3 31 104 7 2 70 -33 -62 5 127 -118 49 -33 16 -20 35 55 -67 -52 -6 67 -66 51 -21 44 14 -48 -13 53 22 -79 90 -33 -35 36 -56 -52 126 -13 17 12 -37 0 -121 127 -50 -46 -85 -12 -126 17 -18 15 -25 46 87 -53 -17 -22 90 77 0 10 54 74 -3 -12 -79 -2 -72 15 -33 108 4 -112 2 9 -28 -125 -25 -36 57 -48 -10 -31 124 -97 48 -18 -72 -31 45 29 -22 126 79 63 -5 -98 68 5 -66 13 6 27 25 65 46 -33 3 -52 61 22 82 74 36 -23 -92 -46 -34 -31 46 6 11 -43 -42 8 6 -26 50 -62 79 -127 -18 103 6 54 60 -88 -28 19 -31 30 -97 -52 -57 15 98 18 16 29 96 11 79 -18 9 21 105 25 -32 -18 1 119 -78 -15 -73 41 3 -33 64 -115 -92 18 -110 23 38 -61 -18 -3 -73 85 -2 90 69 66 -92 -30 88 -71 69 -127 -17 35 39 52 29 -104 -77 -122 -77 4 -22 1 1 -106 -25 79 69 7 -74 21 97 -12 27 -79 -93 27 -79 44 82 29 -34 31 127 -6 79 78 -3 -81 -66 62 -62 -21 -5 47 36 -43 21 11 48 -54 39 14 64 11 -41 -102 86 -10 60 127 -73 105 12 -77 -13 86 54 -77 -101 -55 -35 -33 29 8 1 11 -122 15 -79 57 -22 -32 2 -43 -11 -22 65 12 65 -53 14 83 -85 -5 11 38 -56 -34 46 15 81 -7 1 -99 40 -5 15 2 16 17 -100 11 50 -94 8 10 87 68 56 85 -77 50 -75 -57 4 -50 -96 8 27 -7 11 -32 -73 -25 -5 7 24 -7 109 27 19 64 -5 -69 -8 -49 -18 -88 -4 6 74 47 80 -45 -124 15 -66 -58 -44 40 -86 28 -38 -17 59 22 -116 -70 78 -16 70 1 4 -64 71 28 19 21 -18 16 -26 10 -40 -46 4 -16 109 19 4 14 27 -40 -43 -124 30 77 46 -26 -18 24 7 41 -26 0 -26 -99 78 -60 -71 36 -57 -119 15 60 25 29 -79 -88 61 -57 -83 -22 -48 17 33 -2 -127 -56 103 -45 -40 -42 60 60 34 2 -13 15 -24 -24 30 -25 -90 57 -127 -9 19 -80 -78 -70 -47 13 -24 -14 -49 -120 -4 75 -25 48 33 -43 58 108 2 18 54 26 -38 25 20 13 -60 6 100 96 0 5 62 -127 14 -37 54 121 -3 -3 29 18 -74 -70 52 -127 19 50 -107 -18 -31 -9 -21 48 -38 38 -28 -104 73 -27 -68 -51 -12 -35 -11 16 -11 -126 26 49 -110 8 1 -52 -28 -71 -2 -37 -28 76 78 -10 -14 126 71 4 31 73 -15 -28 -39 37 -3 -48 41 -98 22 123 -128 -54 -4 9 -33 -7 -117 64 8 44 38 -124 -84 50 60 -126 0 11 88 -23 -128 -18 73 5 19 -21 25 -70 28 31 32 13 73 -45 60 32 -58 70 61 98 13 -11 6 127 116 -118 37 7 -62 -46 127 5 79 77 -37 5 39 -56 127 -4 27 -9 16 36 76 26 97 -24 8 62 -11 -55 -5 31 -36 13 -128 -52 74 -35 -1 -23 -65 16 -17 -24 26 67 -57 -127 65 29 -38 -50 -13 92 86 -117 81 -41 -33 116 16 125 48 -70 -49 82 -26 -12 -21 -116 36 15 74 13 -39 79 87 120 -96 -37 -74 -16 -6 97 -45 -27 -4 -20 -79 -49 -45 -15 104 10 -70 -37 -52 29 -60 -53 -24 -61 -48 -4 72 -26 69 80 -51 -32 126 -10 74 54 -43 54 10 -67 -32 -3 -63 -20 18 101 53 66 -65 -78 1 -41 -2 -126 7 -100 -24 -50 -18 -93 -57 57 53 -29 -2 43 -85 -7 99 46 -2 -44 -101 -24 18 -53 -3 3 -36 -7 89 -22 -7 -83 119 -90 -74 23 19 -63 30 -65 -14 56 -21 -14 -17 -87 20 -122 10 -40 17 27 53 79 -98 -32 13 95 10 -27 15 22 10 -66 87 56 -13 34 52 -62 63 -123 -55 -37 -3 -92 26 -125 -32 66 -40 3 -23 40 -90 -98 -6 4 -51 49 -75 42 -68 18 58 -78 -113 46 -83 -9 -50 -4 107 -47 0 124 -44 -101 62 -9 3 23 -18 -11 -71 18 -83 24 8 -53 -24 15 -8 -85 61 -56 -26 57 124 23 -32 -21 -24 56 78 53 -45 -7 -8 58 23 -15 38 -16 -36 46 -1 -65 14 22 -13 12 -56 27 -19 -31 37 1 24 44 33 95 -5 -111 -15 -10 -99 33 38 -22 -14 62 -25 -4 -33 -25 32 -47 25 -50 15 15 -125 14 11 -5 1 -124 39 -21 -68 -21 -12 -4 28 -11 0 -13 98 2 -55 -103 47 25 -10 -30 -101 29 20 6 -6 26 13 -15 53 0 19 101 -39 -32 7 40 -9 29 -67 126 77 76 102 72 -1 -42 46 -24 15 47 33 -19 21 67 65 60 28 119 50 -47 -59 -35 51 20 -88 -20 104 117 24 -122 24 -50 -27 46 -23 29 42 110 28 64 126 -78 -3 69 -18 43 29 79 11 14 55 27 -43 68 25 107 36 22 53 26 -44 -42 -26 -58 92 86 31 -60 96 51 70 -123 74 91 -66 -12 -17 67 103 68 66 94 -5 92 3 -54 46 -58 35 77 -15 -100 43 33 20 50 -18 49 -75 20 0 33 0 -6 -9 16 31 41 -11 -75 -12 25 -24 18 -63 11 42 -10 -12 -2 1 -48 16 19 -28 12 34 35 0 -70 -124 81 11 -18 -12 -62 37 55 -55 67 23 5 103 64 -35 17 -126 125 -55 -42 25 7 88 -61 12 -23 -71 -14 -104 -27 -35 64 49 37 2 -40 -21 -36 -10 -7 -16 25 24 -46 10 14 121 -108 116 55 62 11 -30 -1 55 14 26 -128 73 47 80 26 71 44 -12 -69 -110 121 16 127 -43 -125 -46 16 -48 1 -46 -64 -27 94 -18 -32 28 -70 34 23 -86 -55 65 18 -28 -77 65 22 -30 -58 127 78 -57 -51 32 -88 -77 -50 -44 47 7 10 60 -13 -127 9 81 -18 -42 25 -37 -113 -128 41 23 -70 73 -24 91 46 -104 28 55 25 4 -86 60 -49 -23 -42 5 44 127 101 46 39 24 0 -47 -20 -45 15 -49 -25 9 -19 -117 14 -31 -34 71 -83 -128 -11 -29 -61 -96 -69 -93 -102 106 17 -89 -60 -13 10 -10 42 -1 -99 -124 8 -108 -2 -121 -48 126 -1 -4 -33 41 97 43 -20 -84 -40 5 9 -42 -112 120 44 -103 -112 -10 26 9 -108 -27 21 -14 -32 10 81 -42 -19 -109 88 4 -46 79 -105 37 -110 -27 -23 -40 -3 -29 -5 -21 18 2 84 0 -36 23 46 -68 27 -52 -17 49 -28 116 -6 -30 29 61 13 -41 -100 2 -4 -12 -52 24 56 67 95 66 10 25 -14 -37 0 -26 -23 -9 -51 57 33 -1 -8 71 105 11 -10 -49 -5 -14 -46 -56 -127 -22 -4 8 -55 6 -111 46 37 -12 -6 -78 49 -8 93 -26 -22 5 37 -78 -69 -118 22 -32 -65 13 -98 -37 -62 4 -16 -3 5 -57 45 -7 63 -75 -128 -51 -15 -36 -41 -9 -40 -55 63 -85 -8 -13 -20 10 21 5 -6 -55 51 -67 -54 3 10 -44 127 -7 -50 72 44 22 3 77 41 -127 -20 -31 32 -66 54 -114 -55 -28 -4 66 -11 8 -10 -29 44 37 92 -23 -45 -33 118 19 124 15 -63 50 24 115 81 41 29 -29 3 -61 1 -6 10 19 29 -3 -25 -27 -5 -23 40 -28 5 -42 -41 52 -35 42 -15 56 17 -1 -12 15 58 -53 -9 -127 74 38 -61 -47 39 -19 -8 -37 -25 -20 39 -14 -56 51 42 29 -63 9 70 39 58 71 -35 99 -21 -27 14 37 -9 -48 -61 2 -93 -8 -108 -49 -72 -1 -101 -78 33 -54 91 -19 100 -84 35 72 10 20 61 -67 -37 -61 119 -74 26 14 3 -57 50 -46 103 16 -15 74 -20 -16 -8 -64 -10 57 5 61 -51 18 -7 -42 -46 -35 -21 -60 -125 -63 28 -19 -66 36 14 36 21 -52 -41 -31 -82 14 -103 66 -70 -18 -28 -50 27 41 -32 -10 5 119 -9 -44 -57 33 -96 5 -5 -9 -20 -127 -11 60 -85 8 -47 -108 5 -56 17 12 46 -32 9 -18 -9 57 5 90 17 4 2 32 14 -38 -29 13 22 -31 -39 -37 -5 -8 28 79 52 60 -20 -42 -48 29 -102 -18 11 38 47 115 -24 -6 46 -21 0 2 -38 -85 1 16 44 -76 -3 59 109 12 -127 52 121 -92 -20 -30 53 -5 -45 63 -38 -5 73 -7 -84 -32 33 63 1 18 37 -4 64 -15 36 -18 -1 13 -86 -12 17 -94 28 -60 -33 126 -23 22 23 -43 46 47 -109 -33 110 -68 36 86 109 -73 93 -32 -127 -15 127 -89 -122 52 12 99 -60 17 67 -11 -31 -33 127 -71 121 24 -67 45 -81 71 127 -65 10 35 16 -40 14 -78 -2 36 25 -76 -43 9 -85 -61 0 -73 100 126 -36 -21 125 6 -127 72 28 -31 -27 -31 -17 -127 -52 -97 -61 98 -127 -7 127 -27 -99 -93 6 -93 26 -36 -85 -51 -85 58 -119 23 127 -13 65 -64 -126 81 94 -111 -21 10 -20 9 113 -85 -27 -23 -51 -23 3 31 22 9 -1 -77 -73 -45 -20 -64 -49 -9 -91 -67 46 -34 -32 -11 56 -80 -54 -39 -120 22 29 27 -50 54 5 -60 -90 -116 -54 -98 -40 -79 -82 -82 32 -48 9 25 -23 37 -7 -126 40 32 -53 -124 -23 -75 33 5 -16 -5 -42 -94 29 48 46 -29 -38 -79 -95 -127 -32 -83 -51 20 2 -73 -42 -14 -11 -123 -2 93 -50 28 14 -27 -63 -10 -115 -21 8 40 28 -51 -2 -61 2 27 -3 -62 -25 -24 2 11 35 66 36 -35 68 24 23 28 -43 -26 51 -96 -48 12 -18 -8 -68 -69 -70 -43 39 4 42 8 2 -4 -4 -35 29 26 -15 -28 19 47 6 7 32 20 -46 -90 57 14 4 19 -2 42 5 65 -16 12 -20 17 -57 -14 12 -8 -66 22 -35 -59 -47 14 21 -22 40 34 55 -20 -7 -29 -34 8 -27 -18 44 -9 -19 -10 7 -92 0 54 -48 -15 -40 67 31 126 111 -69 37 -87 85 -23 27 119 26 -61 7 -43 45 31 23 -48 -127 -128 59 -55 112 -84 -106 -36 58 -61 27 15 124 -25 -103 30 -25 -15 17 3 28 21 6 5 -46 -28 51 -78 56 -61 -1 -5 -115 -68 -1 21 21 -44 61 -63 -84 67 -55 127 -65 13 -12 114 57 -126 6 63 40 -120 4 32 -18 19 -67 64 77 38 92 60 -46 -29 -35 -13 108 -22 3 14 -17 -38 -126 51 22 -125 -45 59 4 -115 57 -36 -88 -55 -16 54 -13 82 91 58 12 -39 -24 -60 27 119 -27 31 -16 19 -12 -93 -72 69 -89 106 -40 -30 -30 57 -80 -54 -82 17 -7 -40 -117 -26 -85 24 -27 52 -15 127 -97 19 108 -40 93 83 -28 40 37 -3 -8 -11 127 -65 50 80 32 88 -64 -69 -123 -127 -74 124 120 10 -41 33 77 14 -99 -2 -115 -30 48 11 7 69 -101 28 125 28 -19 -92 -40 48 41 -72 -107 1 -35 -47 90 6 -3 11 6 -30 18 12 -6 15 17 123 70 54 20 44 34 -33 -102 46 55 70 98 -77 -127 37 -88 -49 -117 15 -62 -29 114 26 -36 -52 24 27 -74 36 -24 -23 -67 -60 23 -127 -73 -6 -66 -101 -125 -13 43 -21 -86 18 1 -7 -62 -58 -15 -33 -125 47 117 14 1 48 -82 -12 -32 64 -88 -39 68 -21 -13 -73 22 -26 78 47 -37 -28 -110 -94 116 -91 46 0 60 -89 -126 7 -17 -121 -58 24 110 15 124 127 -70 -53 -77 49 -96 35 36 26 41 -120 23 -96 11 -84 127 111 104 125 125 122 -30 -78 124 -68 -5 -60 -49 91 24 0 36 57 45 -125 -91 -12 -17 125 -106 -72 125 73 -127 6 127 6 -10 93 66 -90 35 -127 -85 -128 -8 -127 96 80 -33 -67 -77 -18 -59 -66 -5 -52 -107 35 -3 15 -128 -44 50 108 96 7 -88 -60 -48 -10 74 22 105 53 93 40 33 91 104 86 51 37 57 26 10 114 -26 12 103 68 -39 -19 34 37 -38 -39 48 -5 4 -11 -98 23 -25 -117 42 -73 126 32 -126 7 -42 -20 85 48 -10 103 10 -68 52 44 123 12 4 120 6 30 86 10 -60 68 23 -29 60 9 33 -62 27 -6 19 50 19 -10 61 -67 36 48 -38 42 -12 -14 45 -24 1 -28 43 53 8 127 99 6 -5 54 55 -41 -17 -5 121 -2 4 127 38 -24 13 24 -123 25 -86 59 -79 13 23 63 -21 -4 -29 6 -13 -79 -36 17 -27 -10 86 29 10 -10 -112 25 57 16 55 61 24 -96 87 44 36 -5 -39 -72 -49 7 -11 27 -53 20 68 -27 -24 46 0 11 6 5 -25 -14 118 -5 2 77 -12 -15 26 -5 23 -14 97 99 -9 -68 80 12 -56 -66 -55 -61 23 54 60 70 -23 -1 6 10 2 42 -33 72 20 -41 -28 42 28 77 -25 -26 -57 -14 53 42 22 60 126 21 -85 -9 -13 -39 70 67 -16 -67 -9 -126 84 -18 -26 -14 125 52 -90 -56 2 -17 -72 32 -56 55 70 14 -63 -97 -39 -8 3 125 35 -41 -10 -69 -15 95 59 -34 32 20 -27 53 12 -13 -29 6 -128 40 -22 -26 -13 82 82 -28 22 32 14 88 -37 -72 -16 66 11 0 -37 35 -95 39 6 -3 67 14 8 28 -16 -19 -1 48 116 -30 34 60 -38 3 -105 35 -29 30 -39 6 81 98 -41 84 -10 107 21 22 87 30 45 -33 -10 0 -7 24 38 42 127 71 -48 125 -104 -23 -120 12 -30 21 -25 73 24 22 0 97 47 -23 -117 -91 -125 -123 -8 2 -20 18 92 -124 -11 108 -1 -14 -31 71 -64 -104 47 93 -37 -14 98 5 -37 60 17 48 64 -49 58 1 -7 48 -2 -73 9 51 -9 -25 51 30 10 -31 44 -92 6 -38 -125 41 95 -37 -17 -125 -31 28 41 -51 -28 -7 -58 -55 35 27 -81 -16 43 28 -16 7 -9 -26 -126 -49 20 -1 15 -4 -103 -42 -91 1 93 107 -39 -61 81 -127 -26 64 -40 -14 126 -19 74 -23 -94 60 -41 94 14 -15 30 -23 -43 64 -27 -27 6 47 86 122 126 126 47 0 -111 74 -38 38 -23 -45 23 -117 127 42 -107 -30 -5 -96 98 7 -61 -28 80 91 96 2 -46 26 -7 -3 46 30 -37 22 9 -34 -124 -36 25 -20 14 -62 31 20 64 117 -71 83 20 12 8 35 -102 -31 -80 -5 -75 -60 27 30 -7 -112 -73 -21 26 24 -59 -13 -14 86 30 75 3 -8 -5 -17 -78 3 45 -30 52 -11 -68 30 75 -23 95 16 39 24 -61 -50 18 -14 -11 -12 78 -24 -51 70 25 -123 -36 -87 -52 -117 2 22 -79 58 -63 -3 -122 -21 -69 -64 22 -62 7 -23 -83 -105 -21 13 89 77 1 -126 55 35 -63 -113 -2 2 -62 -34 10 0 91 -35 8 1 116 102 98 75 20 -6 -10 80 123 -11 24 71 13 117 61 10 -17 -47 -47 38 1 11 -30 13 12 9 -62 52 14 61 27 84 25 -3 46 33 6 31 29 -4 -12 -108 -29 5 -51 42 86 62 23 -16 37 -62 -16 11 -5 2 48 103 -80 59 -119 -2 -72 48 5 81 -25 -15 0 126 11 -13 -18 -77 20 73 48 0 -10 34 98 -6 -52 -3 74 -99 -5 12 25 -54 -7 -28 9 9 56 19 15 56 29 -7 -9 48 -21 -15 50 63 -26 50 17 -60 7 -50 -111 48 42 -23 -56 18 19 -9 63 17 8 -14 13 19 15 37 17 41 -98 37 -16 64 35 32 -8 71 -70 -80 43 3 76 5 -28 -58 -23 3 -86 -89 25 -27 -27 -39 -60 -33 4 19 94 -8 -26 -4 27 -6 88 -29 45 -47 23 -18 0 -23 22 -28 -30 40 126 -51 -23 30 69 2 13 -52 11 -58 40 50 6 34 49 44 46 33 -16 -4 -19 -58 -2 123 110 20 -39 -82 40 68 0 -38 -24 18 3 55 102 -9 48 89 37 -27 -11 -3 4 -5 -33 125 -42 -34 49 6 -24 19 1 9 19 59 -93 56 71 41 126 38 -115 -8 -7 -13 -56 -46 0 -20 -34 -9 6 -72 -43 20 -12 36 -83 -19 93 125 -29 -71 20 15 46 6 -79 2 -63 -21 -3 59 89 96 29 57 44 -37 63 -3 -19 79 -128 56 23 -7 29 -15 6 -15 -100 -50 -108 -33 33 -11 -3 -9 47 18 16 15 -8 14 -102 -66 17 -9 9 -80 -11 -6 -95 3 -29 -28 -1 16 11 -22 0 -44 -59 -10 10 88 -3 5 -72 -95 -2 -27 -111 -44 22 19 -122 -35 -16 -51 46 -17 -127 31 -13 -25 -27 13 -124 -33 -45 -23 28 7 43 -6 -20 2 -44 -103 39 -99 -18 -55 -20 -76 -27 -8 97 28 -57 -50 -106 -19 -68 31 -12 -76 44 -32 -7 60 -73 -46 -18 3 34 38 76 -9 13 75 69 -14 20 -64 47 20 -56 -16 -34 -13 -2 13 69 48 61 80 -6 -31 40 4 -68 4 30 -73 0 47 -3 -7 8 -30 33 -25 -62 32 96 31 -34 -47 -87 23 34 98 -83 36 3 -90 9 50 -18 -31 45 17 -69 5 21 21 -22 67 4 42 -25 -5 -19 49 -65 13 -64 -25 -20 -1 -7 32 43 -23 35 -2 33 7 83 73 -29 -4 60 14 29 -49 19 -90 -79 48 54 -36 105 -38 -67 61 92 16 -13 42 -75 94 -41 -55 -102 7 13 10 127 -14 -12 96 -11 -27 -15 -7 62 -5 -26 47 -8 -128 -20 -113 -54 4 66 -86 59 41 -126 -33 108 -2 76 47 -90 10 -22 69 69 -27 -15 -36 5 36 -24 -77 24 -21 86 92 -62 -32 -29 -67 -54 -94 -38 -8 126 -54 -128 4 -124 27 -30 -31 127 -29 26 42 -7 -42 -67 -36 39 45 -51 41 27 -105 -36 -123 -111 -47 16 -3 -80 3 -22 -18 91 30 65 -17 39 123 35 39 -123 -68 -12 -11 0 -74 -47 -9 71 -44 -23 -46 97 -35 2 95 -24 46 25 14 -3 28 -50 56 10 -38 -33 -12 -75 -125 -126 -36 -127 50 -12 -48 -124 -9 -73 -30 -50 14 -69 14 -85 -70 -43 51 116 -6 23 -98 19 30 -57 0 17 59 80 -27 74 -68 -99 56 5 -126 -40 -125 -109 82 47 50 3 -20 64 27 -40 47 -63 46 99 120 -9 28 -90 -11 -103 69 -116 -19 -34 -15 -24 33 -66 116 97 -27 -95 38 2 -5 118 -31 -78 -10 -23 19 31 -2 -82 -27 -51 -112 -3 -8 125 48 104 90 -25 -127 -29 -31 -51 35 109 21 127 35 10 -67 38 -18 12 -19 36 -121 -22 63 126 -42 -46 5 -126 -40 5 -91 10 52 -8 -9 37 121 98 38 37 12 102 103 39 -86 -24 -102 5 72 42 -45 -93 21 -52 13 34 -25 -7 -55 -126 -127 -30 16 -61 -124 25 -127 -11 29 111 125 2 -112 -17 29 43 -34 -69 26 -128 71 -32 -29 -6 -125 43 83 -124 39 -59 127 -5 32 126 3 -56 -19 -112 19 12 -31 -6 -93 28 68 -128 -29 127 -25 22 86 -37 -31 35 33 71 9 96 8 -75 -2 -22 -127 99 -33 53 -5 84 19 5 45 -122 50 111 -12 127 69 -25 25 -127 -128 17 24 -128 -33 17 -56 80 -61 14 -59 103 -37 -75 32 91 -57 -126 -50 -101 -17 -21 -29 -52 -106 70 -40 62 -13 68 34 -78 43 127 -32 0 46 -57 -41 69 -74 38 -31 -74 0 28 46 -89 -13 4 -69 -75 -35 20 124 -14 -118 -16 29 99 -22 -31 110 25 -104 101 37 -25 97 106 -66 -47 5 -12 -18 108 -119 79 42 33 26 98 -26 33 44 89 -24 -57 -53 -2 4 -83 117 52 -22 -60 126 9 -39 -3 117 -18 56 -18 21 92 -68 39 2 120 5 -117 23 -45 -2 -27 24 48 -81 114 77 -51 6 -40 18 -5 -107 14 1 -34 -34 -75 -10 -16 53 127 127 86 -60 38 -35 -19 -12 70 4 30 -12 -96 2 -65 124 69 94 -78 -35 101 -49 -88 65 37 -92 23 5 121 36 -7 -128 51 -113 -60 56 43 127 -13 48 16 -9 -44 16 67 21 122 -13 75 70 -106 63 86 -28 -101 -101 124 -48 53 -6 -52 123 -120 -126 33 39 9 26 -30 -62 -127 -27 -47 -109 48 126 -78 11 -58 -47 87 1 -125 127 -126 -120 127 127 19 21 32 -108 59 -11 -43 -33 -26 23 -31 19 -68 -7 24 -35 -23 -127 54 -5 -62 14 3 -104 -78 74 -72 -22 57 -112 -48 -43 57 58 127 35 -74 -25 45 -115 -7 7 58 -90 22 -14 38 126 67 -8 -48 5 -41 -124 -9 -50 -5 -1 -30 -102 27 -127 49 113 -55 5 72 6 -32 -29 70 -49 29 -32 51 89 -40 107 115 29 52 108 -28 -7 -66 21 47 42 49 93 32 43 31 27 89 19 -53 -41 87 28 -81 9 59 94 -47 99 -35 30 124 85 -6 59 96 54 3 58 -34 -14 -35 95 -22 -29 126 -61 -110 0 55 -2 -28 19 114 58 35 8 81 75 -125 -4 -42 69 19 28 -40 37 -49 75 84 57 83 89 42 30 43 -18 -33 -16 45 -64 -56 -10 -8 1 -53 10 113 -11 -6 -34 4 -75 14 -10 -49 19 14 -5 -40 31 -7 -41 2 -22 -2 2 -67 3 -39 7 35 15 -68 20 -91 -6 -14 -6 -25 69 -8 28 -22 21 -81 -37 -49 34 12 -49 12 61 -10 42 19 -72 -30 -42 -21 -16 -22 -38 41 -69 -47 -22 47 -35 19 28 2 12 14 -45 41 -67 -14 17 4 30 68 18 -32 -15 -13 -28 -33 -66 49 7 -79 -76 32 5 -61 43 -15 -23 34 -92 -6 -21 -12 6 1 -72 21 -22 67 -69 -54 -34 -54 98 -50 99 9 125 28 48 -49 -30 -40 -65 29 26 -56 49 26 67 -106 -9 55 54 -41 -18 -57 37 17 43 -76 -22 4 39 12 86 53 26 -67 -5 2 11 75 3 77 16 55 20 -38 -112 51 36 36 61 -25 -15 -39 86 108 -23 26 -62 -9 -114 97 13 -9 44 -4 93 74 -67 45 -59 -23 -65 -22 9 -86 -27 -78 -51 49 -36 -75 0 -88 51 24 -39 10 -59 -66 -16 4 17 -10 98 45 -103 27 -16 -124 -7 -124 -115 16 13 104 -39 17 95 55 40 12 127 -41 -127 13 9 44 -103 -42 63 58 52 -51 7 73 -21 -71 25 -127 -128 -15 -93 81 19 62 60 -87 -17 -11 -21 -22 37 -14 -4 58 -5 30 -31 70 -8 -24 -20 50 2 -78 -65 -126 -32 -59 3 15 -57 67 -78 -100 81 61 -71 7 -13 45 -62 43 43 13 50 91 -37 -21 -47 -9 -97 -37 8 -13 -26 61 -54 26 -13 75 12 97 106 -47 -2 60 -111 77 40 39 3 -55 -99 -24 51 -28 87 -19 31 -57 1 -92 -114 -17 123 45 22 68 -88 -77 -17 8 -26 64 127 -11 75 5 -20 -34 60 -80 16 0 -36 45 -45 46 55 -46 31 -39 16 -87 87 -39 14 82 -26 -16 -64 -42 27 -32 99 -78 105 92 -126 30 -127 70 67 -51 0 -67 -104 46 23 9 -7 107 -67 45 -123 -31 -25 -61 -7 -84 -54 49 -118 -6 -64 -78 -122 -91 -31 -100 -11 70 -64 -65 -5 61 43 -55 81 -57 -15 0 98 58 -24 28 -77 63 30 33 -23 81 -8 -12 11 -58 2 -82 2 -52 -127 55 -7 -22 -13 81 -115 43 -6 -28 -4 -17 36 -2 42 6 -22 97 109 23 53 21 54 41 61 -26 19 4 -44 76 2 -32 -38 -69 83 3 -87 -10 -56 -1 40 30 -36 -23 -104 38 61 1 -39 -60 -49 -103 13 51 28 61 32 5 72 86 -40 -39 -31 -28 -82 118 62 72 -44 -110 -33 -94 -2 -65 -31 16 -30 67 -39 -94 -31 79 -69 -27 -4 -3 32 -87 -10 21 -14 65 10 22 -61 -4 -45 39 35 -34 51 22 -42 9 66 45 -69 45 28 91 -17 107 -37 44 -1 118 -17 -87 48 -53 -34 44 -65 -30 43 70 49 72 51 30 -69 28 -42 -101 -50 -9 -41 3 41 -1 -11 -44 -65 29 54 95 124 40 -32 -39 -14 -9 42 -65 -18 69 -109 -37 5 -64 27 29 29 76 10 73 70 127 74 -9 34 -1 -71 117 30 88 27 -114 38 -44 -101 -68 79 64 29 64 68 44 -46 41 -91 -31 -7 24 -55 -8 -91 25 -36 64 126 0 21 7 -3 -54 68 38 59 -50 32 7 17 101 -22 -25 126 96 13 -55 11 -3 -23 -5 -17 -16 -100 105 -85 -5 -38 -112 -47 -14 -13 -115 -72 -12 -46 -112 80 -3 74 80 -5 18 -19 -9 19 56 3 20 -92 52 -32 7 -21 67 -34 29 127 -46 81 84 111 -70 22 27 32 8 -76 -88 73 2 -55 61 -75 25 -11 91 -12 -54 27 2 47 -9 -27 23 39 -28 -51 39 -25 22 -7 -46 -128 -40 -5 12 5 -12 127 -55 98 47 83 127 -21 -83 -25 -64 -73 78 -41 12 -59 11 56 -63 15 -13 43 -33 3 7 14 46 -127 -91 -96 -21 12 -9 2 50 95 -15 54 50 41 8 34 30 14 66 67 -79 127 82 -83 -12 62 -57 -48 -83 -75 31 1 -84 -33 42 14 23 79 -8 36 -118 -66 -74 -14 -60 2 57 109 127 62 13 1 122 -7 49 -42 -57 -3 43 -31 -56 40 -14 -38 -90 106 7 27 -55 -29 -12 22 -47 -26 -10 65 49 -18 -23 -52 -97 -7 -71 47 -81 52 -42 -88 46 -27 32 -16 121 -54 48 4 -83 -15 -125 -109 -54 14 -70 -23 52 37 -55 23 -33 -22 79 -29 62 -25 47 -4 -109 -3 -84 90 126 76 -30 -11 75 23 45 -5 3 20 -36 70 41 -6 28 99 43 42 -17 -13 31 1 77 86 -32 90 -24 -72 -127 -48 -93 -3 35 86 -25 -72 29 -83 65 18 -4 31 -98 -113 98 -62 45 39 -58 72 -125 51 37 55 23 -121 5 -50 -7 106 101 -120 -127 9 71 -49 13 43 19 -82 26 -83 80 36 64 -5 61 -17 -32 -31 94 -106 -60 -62 -13 -24 54 -127 -18 50 -20 -60 -29 -16 -60 1 -103 23 80 11 -14 54 -9 52 -4 77 -14 64 -71 16 -26 22 -57 17 -9 -117 20 59 53 127 15 -94 -25 23 117 14 -32 71 10 -127 -8 3 -27 -11 68 -23 -4 26 -85 115 -67 -11 -41 58 8 -9 72 33 5 54 89 -60 32 93 6 -75 74 -127 -26 68 -34 -75 5 -24 26 21 -43 13 22 -12 -80 9 62 -2 -47 127 33 -10 -82 20 16 23 76 53 117 -16 1 -8 -84 42 16 -87 65 26 -92 -25 -71 -125 13 100 1 -36 2 33 42 -40 7 116 -77 0 34 -11 -18 -55 17 -4 88 -28 -16 8 71 -11 -37 1 -121 65 84 -23 -43 121 -50 -18 -124 -91 22 -70 -17 -8 -73 9 -24 -48 -18 19 -108 50 -126 50 -56 78 48 -29 -111 -12 -2 27 75 17 69 -42 -81 57 39 12 -7 127 -69 -101 21 -23 -104 -19 79 -72 -28 23 -26 35 -34 -54 -25 -83 31 64 -17 69 3 -19 65 -14 59 -52 -18 -1 -71 76 -15 -36 51 40 59 -67 18 49 -115 8 69 -42 -31 -18 -19 65 28 82 -19 -4 -96 -32 -31 40 3 88 70 0 -33 -15 14 -27 -50 1 61 -56 -39 -9 36 -102 -76 -53 -66 2 2 -38 -16 -10 -53 -47 -12 -62 45 -25 -127 28 105 84 -32 4 -49 9 -50 18 -122 21 2 -33 38 13 -28 -47 52 -39 33 46 4 -10 48 12 23 76 -9 -7 -10 -17 -70 -30 -118 -55 -4 29 49 67 9 45 -38 -2 22 72 -41 3 30 -20 -1 -75 -32 26 112 51 23 65 39 -83 36 52 42 61 -55 14 99 -17 -3 -26 33 51 -36 43 -30 11 -59 -23 -41 -70 -47 35 14 -68 64 24 -3 2 -77 40 -2 67 -50 17 9 -50 -31 35 64 -35 14 -24 -10 18 21 -21 118 -25 -8 19 35 27 -80 10 42 -11 -100 23 -29 37 -34 -73 107 -1 71 3 -19 -109 -34 14 -42 -119 -14 -4 -81 41 60 -13 -76 -16 34 -42 -126 -69 -92 -64 23 42 -79 38 52 5 -42 -68 28 -25 -38 -36 -105 31 -22 -35 -125 -110 101 12 25 5 -85 -63 67 16 -83 84 36 -57 -86 -36 31 24 -106 -9 41 -44 27 -127 75 -34 4 60 -19 -79 29 -45 29 -44 -13 -33 -113 -96 45 -24 12 -86 43 -12 7 -58 66 -86 -69 2 62 -10 -46 25 -4 -3 -36 55 -73 -1 39 -5 43 9 64 -108 -18 -83 8 -48 40 -51 5 -1 88 16 20 -7 -4 -10 66 -80 74 2 -124 -91 -43 -42 -62 -74 56 -7 85 -22 13 59 -116 -101 -16 45 50 19 5 -43 -68 -51 85 28 -47 -62 81 10 39 39 34 -41 -11 90 -18 -11 -38 7 -18 -73 -10 25 -37 -10 4 26 68 -66 23 -17 -14 9 -38 -62 -31 -79 21 58 86 40 -123 33 36 -14 -25 10 -7 14 -49 42 59 19 41 -45 82 -17 127 12 -62 -24 75 44 70 -76 53 35 104 -112 61 25 -126 -25 127 23 30 -127 -32 -79 -122 -14 -96 58 11 -15 -77 109 29 -48 -24 -32 34 70 61 -23 -26 -7 -2 -51 52 -85 1 104 -38 -40 13 -4 -92 -96 48 -70 -41 -79 20 10 51 68 7 125 19 -54 6 -39 16 -26 38 121 74 82 39 -60 21 -3 87 101 -49 -48 7 35 64 -3 48 -2 -13 7 -98 -16 -126 -60 -14 -19 81 45 16 3 -38 -119 -107 -83 38 -46 -27 -89 82 110 -22 51 -87 46 54 -38 -68 -87 33 12 29 -38 -64 125 68 54 119 70 -19 100 -46 -15 94 74 123 122 -22 4 -56 -110 1 63 7 -26 100 -106 -1 -57 41 44 -31 -7 -126 -52 49 13 13 59 -62 58 -24 126 103 25 14 -30 -17 127 -96 -127 114 -121 -127 -117 115 -96 65 57 99 -73 54 -61 19 80 -74 20 42 -32 56 36 -41 -22 4 -100 59 -42 82 80 33 40 -8 93 66 -26 -47 29 -35 82 -29 5 -104 -50 14 72 107 22 35 110 2 57 -70 -10 57 -123 28 -52 -30 126 74 25 98 -127 3 -77 -42 -26 72 63 21 -24 -14 34 34 115 -57 -79 17 -17 52 91 -81 12 71 -72 -59 -79 -19 39 -87 81 -1 -48 -56 19 -19 46 -113 -15 61 19 -19 -50 -13 13 -10 67 -10 42 27 -36 -38 32 17 58 42 -113 -127 -126 -84 -43 -123 -61 40 -125 -19 -30 -125 -126 34 47 18 127 -126 -49 -14 126 -111 -48 51 78 78 75 119 59 109 22 4 44 127 -21 82 26 -34 -70 -37 28 119 -47 4 -127 -56 53 -59 95 -123 -81 -3 127 62 -126 127 29 1 87 82 -75 -6 78 -45 -70 25 -127 4 101 -45 -112 56 29 5 -65 38 -21 -7 -17 14 50 24 -78 -18 42 -23 -25 -127 -62 -48 -8 61 16 126 6 43 40 47 16 -79 31 -39 86 96 8 13 32 -47 -75 -77 21 1 -27 -40 1 38 45 24 51 31 28 -6 7 19 107 20 -29 42 18 106 42 16 -40 102 95 46 -19 -20 -40 14 84 59 72 -11 36 59 126 29 -38 31 120 -51 65 111 -43 -2 -41 96 -14 94 -19 5 53 87 84 14 13 19 21 -51 -7 -5 -22 -10 -10 0 36 -28 33 87 -9 -26 42 -29 125 30 20 48 -95 4 109 -85 43 -28 9 80 47 1 66 3 -11 -12 7 -15 4 49 52 51 30 46 52 12 -12 107 -40 74 -79 -9 -23 34 -100 -48 -6 -3 -82 60 7 -22 11 -57 -59 28 43 -33 120 -52 79 -7 -37 -93 44 -52 56 87 6 -24 52 43 -67 9 49 26 -19 -29 26 15 40 74 78 -116 7 18 -52 -64 -86 -34 -36 45 4 30 -80 -21 -38 46 38 73 10 31 66 -9 -3 -43 -14 19 -37 11 -25 67 -15 6 47 -3 -3 70 -4 46 25 -40 33 33 -62 -26 -64 39 -61 61 -34 -9 19 -31 9 -7 -42 -88 6 -57 41 -51 26 -14 -5 -30 -6 122 -31 -18 31 32 13 -3 -27 -41 61 -35 -55 66 8 32 20 -59 -37 -19 -62 -26 -14 10 25 -50 4 -1 -44 41 48 -30 -7 -17 -93 -40 15 40 60 32 31 -34 76 8 -16 56 -35 31 64 31 -37 -60 -1 37 -58 12 -10 31 83 -14 -60 97 38 12 19 19 -2 -37 23 60 87 113 -41 -55 49 -9 15 -18 48 -31 -34 -37 -12 7 26 14 14 -68 101 -40 -23 48 -86 -50 -5 -54 69 -17 12 2 -23 -23 16 22 -8 -12 -34 66 56 50 -58 -29 -12 -107 65 23 8 41 -37 -16 -25 99 -27 53 2 27 -47 121 33 41 35 127 45 0 -36 -20 57 -51 -19 -34 -59 80 -88 -17 18 -66 30 -66 56 -19 11 -20 11 -35 -15 1 28 -35 102 -33 -68 -36 29 1 18 69 79 -1 -91 -18 14 -88 -60 11 -29 -53 -76 22 -26 -19 3 -64 0 -15 -40 29 63 -99 -35 -6 40 11 3 -6 -1 -39 -46 114 -12 -53 -6 -44 76 -18 45 -52 3 66 37 -2 -42 -64 73 91 -33 22 -16 33 15 22 79 60 55 -128 -13 125 -9 -75 -81 -70 12 -70 25 -118 -41 15 -21 -84 -31 -54 -35 -68 33 -31 42 -8 26 4 -13 2 -5 -11 -38 -29 -71 97 63 -63 -2 -1 68 -62 -10 -49 61 62 80 7 -18 73 -73 40 -36 -47 -64 -82 28 -63 -102 -117 47 5 -50 -66 -44 -30 6 -62 100 -21 -50 -40 20 -78 -33 40 -6 -58 17 58 -96 78 -64 73 4 -46 13 18 -28 -126 -15 88 84 -11 14 -57 46 124 58 110 127 5 -35 127 38 51 -16 -14 51 46 -19 -9 41 78 -25 64 -6 -26 -90 -101 -122 94 4 57 -5 -40 7 -89 -29 15 -19 61 -47 -94 71 -119 -67 127 -21 9 118 -83 -97 -117 -45 -44 -15 -34 -112 2 -53 109 74 -84 55 28 126 -72 -45 89 -32 107 -11 -125 60 68 -87 -23 -25 13 52 28 -8 60 -125 43 40 -37 124 40 24 -69 -107 28 118 9 -20 80 20 -60 61 104 31 97 -18 49 67 87 -78 -32 20 49 20 -17 -64 49 13 71 48 -9 -49 -35 80 74 -19 -75 101 98 -15 -20 8 26 86 8 127 -4 -8 40 -26 17 38 2 -4 -5 85 -52 6 123 38 -13 1 -54 -47 -8 75 58 -1 101 15 53 56 -19 -100 -16 -28 -9 -24 24 -25 59 16 34 -25 -19 20 22 -1 9 -128 -35 -35 9 26 -27 -10 7 -17 -6 72 -2 80 69 -39 70 109 16 2 47 57 25 57 11 -7 7 -24 100 -10 18 -33 99 18 -44 -26 21 -16 69 -77 -36 -10 58 -8 -61 -39 52 5 14 -29 7 50 -43 49 30 -19 18 14 23 17 -3 13 55 -35 10 -43 -40 -41 -13 -22 -43 -54 13 8 31 35 72 -43 -30 -13 2 12 26 -115 84 14 -43 -18 105 -45 -11 -6 67 39 10 -54 -58 11 55 -68 -23 82 -24 -49 -5 -27 49 55 19 -59 10 24 -10 17 11 -15 22 -56 -43 -59 50 -89 4 -5 -46 22 17 -15 -38 -22 -4 5 -75 -72 -3 0 -77 -8 57 9 36 60 -1 -48 10 2 8 47 35 -54 -27 6 -23 36 18 -127 -40 -30 50 58 -43 -43 -3 75 41 36 -34 -69 -19 -6 25 38 -39 -98 58 35 -24 -94 -32 -31 125 43 54 75 -47 18 -17 46 48 16 -48 -80 -58 -26 -40 13 31 101 27 60 -21 18 20 -71 -62 -47 -7 -23 -72 61 99 66 -34 -19 -80 -79 32 -9 -127 -52 -20 80 110 22 95 16 1 69 -83 47 -34 -109 -26 -22 -51 31 85 123 12 34 7 42 -23 13 -74 -45 -22 -53 -39 -16 -34 80 -9 53 50 60 -7 95 7 48 -13 9 -62 71 33 91 -72 56 125 -65 -33 12 33 124 -17 29 -127 -89 -16 -127 -41 43 -103 -10 21 127 -78 -40 -31 -35 5 72 47 -30 -87 -48 46 -57 -3 -72 -125 59 -101 14 83 -77 2 -54 43 -93 21 115 77 -33 -127 -50 122 -127 -16 74 46 0 -115 14 19 31 26 -21 -99 -21 -68 5 46 -90 3 -69 87 13 127 -39 8 -9 55 -26 10 0 53 -91 13 27 -32 39 104 -125 13 61 62 -5 -34 5 -17 33 27 9 23 -4 45 -18 127 53 114 116 -59 -13 -38 3 1 -1 -13 66 -20 -36 40 22 59 42 55 -33 -51 -15 -25 91 -27 -37 127 12 53 3 23 19 -70 2 -24 -85 57 -75 45 -56 -90 -8 124 65 -98 -36 -3 -60 -7 -11 10 -53 94 -29 -28 92 -127 -6 -7 32 127 96 21 69 24 59 -85 15 -33 37 59 -75 -34 -28 -50 13 18 -34 -41 47 34 11 -75 -36 -35 39 18 -26 12 14 -38 60 124 -38 14 -48 50 -9 -50 -79 19 -6 127 39 -126 49 33 -16 28 -35 -13 26 30 -82 9 -22 8 -33 27 -3 -24 16 4 13 -8 -13 -128 -66 -47 1 11 -25 36 -73 23 -72 19 -55 62 3 25 -126 8 45 -33 -8 -47 -31 -35 -89 37 -63 -49 119 -11 51 3 -16 30 -8 -33 -13 24 -44 -9 -19 15 -11 19 10 50 -61 29 -60 -17 76 -19 -22 39 14 0 -9 0 -22 -87 66 -28 -28 42 -46 -15 -14 -74 -38 14 45 46 -33 64 -17 45 -21 79 -40 -8 -75 -15 68 -7 -123 -44 -49 -12 -48 44 36 29 -96 18 24 -22 -1 81 -28 0 90 -29 -4 48 -5 62 -3 -11 -6 46 -82 16 18 -15 -8 43 1 12 0 58 15 -29 -28 2 33 -20 15 -64 43 40 -2 -66 11 -38 127 -98 15 29 -37 -22 67 30 -62 9 3 -36 -12 10 57 0 -2 -14 -33 -52 -40 24 -4 -39 -57 87 -13 17 2 -31 12 -58 -109 -81 119 8 -117 -74 21 77 20 124 81 8 -66 -2 -26 -53 -5 32 5 -16 -65 82 90 5 24 -28 27 -57 -30 64 -22 -5 -16 42 36 -26 56 -17 23 68 -40 -28 -24 1 -5 -27 -12 34 -52 -39 -48 53 82 -47 73 -5 -60 2 19 85 23 33 127 -41 33 -37 40 -34 -9 -87 104 54 15 -24 79 -59 -6 -21 8 -2 101 -60 20 -57 40 16 -99 -51 75 103 -20 44 33 67 -85 20 7 25 81 -29 -43 38 30 -13 -4 72 -30 20 -9 93 -29 -82 21 -126 3 -4 -5 -2 103 44 32 65 114 3 -8 120 -9 -127 10 -33 -21 61 -24 -15 -33 -104 -46 0 24 1 50 33 -36 -52 -20 29 68 -127 -13 127 51 113 106 42 72 -25 -87 -79 -57 -44 -79 35 61 11 -38 80 -25 30 22 -69 16 -16 2 -8 -30 119 -44 38 71 -79 -120 -68 -103 81 12 2 -15 95 20 -96 -35 -80 -16 71 46 -5 -41 -35 11 87 -13 35 26 55 52 -85 -16 -73 -84 50 121 57 9 47 -36 -31 84 45 64 62 18 25 50 -34 76 56 50 -2 -47 -59 -60 -30 123 -41 127 49 41 -25 -86 32 -9 -46 21 -83 -52 18 61 64 -38 -23 -37 59 -3 41 -70 -47 67 -57 21 -68 24 -49 35 -5 -124 23 -128 34 -91 37 -8 -38 -45 -8 -36 -46 89 -27 56 -56 72 58 44 -33 48 88 -59 80 -1 -35 -110 -62 113 103 30 -9 -92 -23 -22 66 -17 -34 16 56 -97 -121 25 9 -8 -58 -12 -52 39 2 56 125 -27 110 -2 -2 34 52 -12 30 -60 -73 -127 -4 19 26 -79 -1 11 -55 43 6 -14 69 -61 32 46 69 -4 -104 42 65 -85 -21 -88 -16 40 41 -32 68 -63 -15 37 -48 127 -25 16 -32 119 -7 72 35 -65 -70 127 104 123 37 -54 43 -12 -34 20 -90 -10 107 -10 -32 -17 8 45 53 48 -83 -113 77 76 -13 31 123 126 30 -19 -33 -45 -52 50 -99 -35 19 -64 -27 68 -19 51 -104 -97 -15 118 -22 -92 -9 -55 -122 -29 -20 -89 -122 -33 -115 -12 -45 80 -64 121 69 17 92 -24 -37 18 -118 -25 11 -43 -59 3 -28 -24 -17 9 29 41 1 -59 17 -128 121 51 -7 15 -17 -10 -57 67 0 50 77 5 -74 31 -75 33 8 -8 -62 -6 -101 7 -24 -60 3 -40 110 61 125 -12 4 -21 -60 42 -14 -42 71 36 123 -37 2 -13 40 -53 -31 -122 0 55 -29 -5 96 -13 38 -38 -38 32 1 124 53 -67 83 -6 44 5 68 31 -76 55 -12 -54 44 -124 -38 5 -10 -30 62 61 9 28 -22 38 -49 22 -63 -59 98 -75 -57 -57 55 21 -24 9 -31 45 37 12 -50 -125 5 39 -37 18 67 -26 0 -44 -8 103 61 35 -26 67 -15 11 90 -29 -41 49 -67 49 48 -80 8 82 5 43 19 8 28 -97 -66 16 -67 -86 41 10 -32 -33 93 50 27 98 -128 116 46 16 -22 87 -94 3 17 69 -14 9 -43 -17 -77 -49 11 -29 -12 -7 -49 44 0 -81 17 83 30 -71 16 20 50 -73 -34 -78 -17 -3 -29 20 -27 110 -76 6 -35 24 12 -18 10 -46 -26 -21 38 -48 -48 77 52 6 96 -52 -51 -57 -41 -15 -54 -54 -8 24 -73 74 -94 -18 10 5 -55 -36 -18 125 -35 -92 23 -15 46 -2 -78 30 60 -93 29 -70 38 -76 16 56 33 -87 19 -90 19 25 126 -62 -73 61 100 54 19 -20 -96 -6 -12 60 69 -24 62 62 71 2 41 -36 127 -46 118 -31 -31 -96 10 -3 39 -43 68 -5 -46 -9 33 8 -41 44 49 86 122 -30 -12 10 -5 -35 36 -88 50 -15 1 60 22 -79 -15 3 -39 15 -59 -37 -26 13 63 28 -86 -19 17 0 74 0 10 13 5 -30 -53 -23 -2 22 10 8 -9 -14 36 -4 15 -26 17 -2 -24 22 40 65 20 31 -9 -24 17 -45 93 -3 4 -10 75 47 9 22 56 -33 8 29 -79 -44 3 6 27 -11 127 15 -60 -83 31 66 -25 -19 69 -63 -25 -36 -41 28 57 -30 73 27 27 -18 -7 81 28 -1 -5 -69 -13 -60 92 86 -46 52 18 -128 -73 -68 -22 67 65 -2 -111 -49 41 -1 -13 -20 -20 36 -18 -86 -12 -28 -127 104 -67 -93 60 11 56 -58 -45 -18 2 -128 -5 23 22 -4 44 -1 -78 -15 32 -56 26 -3 -77 23 -127 -26 73 -31 19 -28 124 42 0 88 42 -7 -52 62 72 19 -35 1 -79 -6 -49 31 1 61 17 8 1 -97 38 1 118 -36 60 9 -128 53 13 -126 -50 -35 -4 32 16 -127 10 -21 51 -122 -83 -28 98 50 -14 -30 29 20 21 -126 -122 -88 -17 -45 -42 52 -86 -82 72 -51 -67 -18 -116 -124 0 -5 28 7 2 -107 -30 -38 -50 113 9 -92 -17 -21 1 -81 -68 -111 -38 30 -9 92 45 27 -70 -39 20 -17 -25 -100 -52 -10 10 -52 -81 108 39 -40 14 17 48 25 77 0 -17 -5 -33 -2 44 75 -22 8 9 8 -61 -64 -11 119 -46 103 123 -23 -73 -48 47 9 25 -1 4 73 42 -3 55 0 -86 -23 25 37 -26 126 -63 -71 -28 -56 -99 -34 -31 51 -49 11 23 59 -49 -20 -55 68 -9 -74 -10 -98 55 30 41 43 -111 -49 0 -28 -1 -40 -64 -29 -24 124 43 -16 -44 19 -84 89 65 53 -20 -111 40 2 -52 -27 16 -80 -50 102 90 85 -9 12 -51 20 2 -88 -59 -79 -26 -57 24 -56 55 -37 37 4 -38 -2 -22 11 -98 29 0 -92 7 -27 64 -16 15 -24 -17 4 9 12 -73 -88 -13 -85 -55 -63 23 28 25 -92 -109 -84 37 3 -61 -112 32 60 9 91 10 -48 -98 -13 22 17 -17 -45 117 79 -77 40 -77 -46 -15 -31 -26 68 43 -62 21 46 6 -27 38 -54 -15 35 -53 -107 -2 77 -94 36 42 17 -80 2 -12 56 68 70 -104 90 110 -33 90 16 -18 38 -45 -50 -39 36 -19 81 27 -56 102 31 30 25 -30 -41 14 -4 67 50 -121 34 6 58 -71 32 42 38 -30 -72 34 -69 -21 -37 91 14 -38 20 -41 -78 -26 -62 -47 -11 -75 -55 -11 -39 41 -15 -124 -81 4 -33 60 25 -16 -63 -20 -34 47 93 5 32 24 -2 38 -11 53 -108 -46 57 -99 25 100 -23 -68 -26 -119 6 19 38 -18 -76 31 27 35 29 -76 10 -48 37 63 48 96 -52 24 -26 23 -56 -14 10 -26 -13 44 -11 -13 27 -31 -31 -33 -33 -83 -64 -20 38 19 -6 10 37 -68 -18 -13 12 73 -17 -12 -123 74 18 -40 -33 104 2 9 -30 -19 10 -100 -23 52 66 124 19 -25 69 28 28 54 111 -56 -6 48 22 126 -66 -67 -47 -50 -64 104 10 -5 -46 10 123 89 -60 -30 33 -2 56 8 -2 -4 -36 59 -45 -61 25 100 -14 -20 14 15 47 53 39 -18 -89 30 32 17 -19 6 6 -14 -40 90 102 103 35 -49 -36 7 -16 -25 74 31 23 5 -18 -14 68 -74 55 43 -35 68 -3 3 -68 27 91 13 32 49 48 27 -79 -58 -17 81 -66 -20 36 -28 51 36 55 58 -79 -28 126 70 -124 -75 -30 33 15 -78 -83 -16 -5 -12 57 -33 58 3 -57 -67 39 -16 -71 51 70 -7 41 -118 -7 47 97 -49 22 81 -30 -3 5 29 -11 66 68 -52 42 15 -117 -41 -47 -3 39 17 98 127 55 -41 88 64 114 88 54 -3 -35 -82 -128 -39 35 -25 45 -126 42 -27 -25 -1 -22 -123 68 40 79 13 64 -12 25 26 35 64 -6 59 -14 123 39 28 30 33 63 31 95 -83 77 -74 12 -29 -4 11 45 -23 -10 37 52 -57 -41 23 18 -26 77 1 28 -111 -7 -59 -22 75 -51 -81 -106 -37 45 24 -31 -35 -3 -71 -64 -31 -126 -15 -12 -25 75 -22 92 13 10 7 15 -44 -19 -1 -15 -27 11 16 -19 -27 -1 17 -38 100 -93 -32 -41 -50 16 30 -62 -107 -14 5 24 -36 -18 18 79 24 -45 35 -83 51 76 -8 16 107 5 39 -21 -87 21 15 87 -68 43 -37 -31 11 -91 7 -47 55 -67 125 -45 22 38 -3 -45 -12 -16 -78 -36 35 -17 -46 35 47 -42 -5 35 -19 63 16 52 17 -28 1 -18 20 86 -62 77 -87 36 -16 -18 59 -18 -63 3 36 -2 -11 37 -50 -16 66 -19 7 18 30 29 -13 -1 2 47 9 6 67 29 39 -31 27 27 -76 -4 48 -33 -22 -68 -2 21 73 9 19 45 -8 30 -65 74 -83 13 -53 0 -126 -47 67 11 127 -128 -50 -126 -17 -103 11 62 26 12 56 83 -3 1 28 -26 -66 64 32 -82 16 -3 -66 -25 61 -29 126 48 -10 4 -20 -16 -5 31 -6 52 10 -11 55 46 31 -25 -47 -102 28 -13 29 22 -27 58 32 36 6 -81 9 -74 -44 -23 -1 25 -57 -128 -5 -15 76 59 -26 -36 -38 -42 -81 -57 45 2 -39 -12 29 77 -31 -42 -125 22 -77 -27 10 -11 6 53 87 -27 4 -73 -17 -50 -60 7 44 -95 -7 53 -95 37 61 -74 5 11 71 49 -84 -9 13 -43 -25 -63 -37 -7 23 -74 -15 -77 9 -37 0 127 -7 -17 82 -20 -47 48 -46 66 -41 45 -79 9 21 45 -1 -52 75 -47 1 -48 59 113 79 -78 -19 -1 14 -41 -15 -21 3 39 86 85 -47 -58 53 27 2 -50 -25 -62 -19 -76 -62 -6 -2 -38 49 -23 59 -45 -28 -22 -23 10 -24 26 -13 -43 7 51 -80 -49 -44 -103 41 56 74 73 35 -8 19 -61 17 -103 -39 -76 -74 -52 32 2 60 -65 -10 10 -28 16 -11 -52 3 7 -64 31 -101 -43 91 39 -89 -7 32 -43 -7 40 44 -30 -3 -33 -17 29 -6 -47 -41 59 24 52 -9 -13 3 32 76 -60 86 -18 -91 -54 103 -44 29 19 -6 37 3 70 -11 55 -14 14 62 103 92 38 -77 26 -71 19 85 61 25 -5 32 56 -119 84 -124 -1 53 -29 -53 -86 49 -93 8 -15 17 -98 -47 -61 -8 -64 -98 117 -117 -54 -61 87 -27 -98 -74 -115 124 -39 9 25 2 104 -43 -10 6 14 -2 -41 35 5 40 27 -45 -125 2 91 -109 -9 41 19 -61 97 -50 72 6 -42 13 39 -14 -91 -10 -90 -14 -118 -61 75 100 22 19 1 11 59 -28 1 45 -57 -4 -12 26 -48 -82 -12 -4 26 -59 1 31 47 127 -8 -103 9 118 -8 103 -62 -69 103 -24 -122 36 64 -45 44 -45 -24 8 8 53 43 20 -71 21 57 2 62 126 10 -9 9 127 5 58 4 -26 57 -21 86 7 24 121 -46 75 116 51 0 83 127 29 3 -81 104 63 -19 127 37 22 54 78 49 123 127 81 46 48 43 81 86 127 86 -4 127 -28 98 39 99 108 60 65 23 22 14 52 60 76 28 68 -41 -71 -29 52 79 -60 6 15 -128 82 118 36 51 3 53 -104 2 27 1 124 -50 37 71 40 -20 127 10 56 7 -73 125 50 -7 -82 -37 -126 38 -53 80 55 47 45 -27 16 -95 -82 -88 21 -94 -16 102 12 22 -109 -108 -22 105 124 97 -67 5 91 -86 73 -10 48 -81 10 124 -44 66 41 -83 -33 71 67 12 69 -44 84 24 -76 -115 47 -115 20 85 -114 -2 -73 -125 -36 -19 -33 79 87 44 93 -15 56 54 53 -19 1 -87 -77 7 -80 -20 -69 -34 20 65 -11 0 -4 24 -44 46 -28 11 0 41 -74 -106 -29 -53 -51 72 7 50 42 -23 -70 -15 43 -4 -51 -22 8 3 13 86 16 23 -107 70 44 -5 -114 61 12 13 -9 -57 -42 44 124 -1 50 -44 -42 17 20 -12 -123 -7 28 -22 -1 92 -61 -41 -88 58 -18 -4 56 -13 -59 17 -38 81 27 45 87 40 10 27 -51 -112 -75 20 -84 109 46 -124 -14 41 -64 -67 10 38 -15 13 63 -7 2 36 20 -77 6 17 15 -51 26 45 -28 45 -14 93 71 -45 -39 46 54 124 54 53 -34 -44 41 -126 45 -72 38 26 -13 -61 39 -108 -128 -12 -28 -10 -26 -88 30 -67 45 79 1 -62 19 45 108 72 39 -68 -118 64 51 -68 2 52 -60 -26 -77 -23 -18 -128 -53 -127 66 -42 23 -44 -55 -67 -49 98 62 1 21 -11 -36 -14 -73 -57 69 11 35 -55 -36 26 -127 30 -91 -125 15 110 -29 55 4 -18 -92 -123 50 38 69 -47 62 8 -65 -39 -55 -35 -13 -67 -109 69 -2 14 -65 12 71 -37 37 9 36 95 51 125 -47 119 -21 33 123 -8 54 58 -70 -68 50 -9 -35 105 -74 -53 10 94 -5 51 88 -119 -2 -15 -47 19 -50 -32 9 -29 79 -76 65 39 6 -65 63 49 -58 21 -27 -120 -40 23 2 -7 -39 -91 47 88 24 -94 -25 58 -45 16 36 -34 56 -59 -17 -41 -62 -3 -60 -56 -3 13 -126 50 110 53 -62 127 -107 -34 97 126 23 -126 -85 -8 65 32 91 110 33 49 -12 31 97 -14 30 2 -101 -96 19 81 -68 21 56 -55 8 -56 -128 18 -19 -20 67 41 -14 -59 116 -6 46 -23 20 -80 -6 83 -92 -127 -1 -45 32 71 -24 -14 3 127 -120 -127 71 -33 48 -28 -27 -121 9 -27 -3 -33 101 -82 24 -128 -44 -11 28 -5 42 -21 -17 -66 -24 -127 -121 107 -19 -51 29 -29 52 33 -13 -126 -98 -40 -31 -117 -119 29 -125 -113 96 62 -59 46 27 122 -85 -65 -10 -44 30 -29 -83 -9 -3 28 -50 -78 9 -45 110 -75 -18 -117 -8 -71 -123 -26 -5 -27 -18 70 61 48 -31 -21 73 69 -39 79 125 87 71 76 117 -57 81 11 60 15 -37 -40 10 -121 -35 39 16 12 -88 -18 41 -28 88 -5 3 97 87 55 -127 -35 -21 5 28 42 89 10 36 -12 57 19 -15 5 -34 -68 -115 81 -70 41 22 -127 33 -26 -122 -65 124 -32 -7 -58 -2 -54 -46 20 -75 -125 -83 17 11 -21 69 125 41 -44 -43 -118 45 3 -13 49 -17 102 39 -8 14 -58 -60 -3 22 -4 32 -41 68 10 66 -7 16 65 -57 108 23 -10 49 -13 -52 -18 -1 29 20 -31 -23 26 -19 23 53 65 40 -5 44 -36 31 50 -79 30 -44 -27 60 -50 -76 94 -111 3 -36 42 71 58 57 73 126 -22 -13 -65 -115 3 20 10 46 -54 29 -32 120 86 -90 -66 6 19 -68 -8 -29 -29 -89 -72 -58 -89 -50 12 -44 0 -15 -11 16 21 32 -109 -61 25 -60 57 -24 58 47 -51 -59 -16 22 -27 72 37 -115 -125 -55 -22 -37 22 -108 -21 53 -17 -12 -35 -49 -62 -7 67 -75 14 -77 94 30 19 -8 -11 77 64 11 11 80 -79 -25 16 22 -24 -13 9 23 -6 -117 -100 -36 12 71 -8 -13 4 -26 -80 -75 104 -112 -9 -8 49 -16 50 39 -75 -67 5 -16 73 -42 35 10 80 -32 87 -92 34 127 -107 -79 -7 38 13 44 1 67 67 -67 20 -75 75 16 73 -117 126 26 127 -110 -42 -61 127 -32 -110 -41 102 27 -8 18 20 49 37 -20 -79 -113 -94 -127 44 48 51 -53 21 43 53 69 14 -110 84 23 53 95 -16 84 -4 127 64 -27 -71 65 43 113 11 -25 -44 -6 -21 85 -26 5 124 -8 125 -6 59 -7 82 21 -3 -18 105 -8 -29 13 43 -18 56 33 -13 20 39 100 5 91 -10 50 11 83 -70 -80 39 -29 -16 13 70 -76 73 -10 -55 50 30 19 42 -59 -44 37 15 -23 37 -40 105 -9 77 121 44 8 8 -35 2 -17 58 63 -10 -128 -39 65 -36 3 -5 68 92 -42 -45 67 -2 -17 -66 -100 126 -40 24 76 -15 9 43 -65 -11 -10 -10 -30 56 47 36 -52 -11 3 57 1 -55 -19 -19 79 -128 -57 30 31 72 -16 -38 -19 59 -76 -19 -28 44 -55 -40 77 -32 -47 111 -29 -10 56 -42 -15 64 118 -73 -51 -35 -44 -97 38 48 26 8 70 33 -70 -34 41 -99 127 91 -9 -16 6 -84 -19 126 16 -9 13 -99 7 -23 -49 22 42 57 14 -9 -67 -29 -25 44 -120 -78 126 -25 -103 9 -127 -28 -15 -40 99 -23 60 81 17 -34 -20 -17 -19 79 18 -117 -63 56 -3 126 -27 123 90 -67 -25 -6 94 33 -51 64 -6 31 -41 10 11 -12 -21 -79 34 -72 98 -118 -21 -33 -36 96 67 46 -18 19 -53 -13 -85 -16 13 -34 45 5 63 -108 28 27 55 21 90 20 96 -86 0 -34 -70 -2 3 -90 -8 -59 -46 26 -69 82 25 67 44 -40 42 -66 -2 62 -75 -28 -52 -12 44 -30 58 -3 -7 35 -9 -54 -11 -62 -40 113 -19 -2 103 -33 -40 50 -43 47 -19 35 26 21 31 -75 -6 -33 74 -6 35 47 73 -37 7 -40 -65 49 -71 -11 126 -56 -107 19 -48 -7 -18 9 81 24 34 5 34 -33 -38 35 -54 -46 79 -10 -35 103 -37 17 43 -71 19 49 -32 10 124 2 33 -37 89 9 13 1 34 74 46 34 -18 -51 30 -9 -41 -13 71 10 -97 -9 -16 9 -51 127 -35 64 39 32 90 -5 96 28 -66 67 22 -26 -27 -34 -3 104 49 17 -94 32 107 44 -61 -22 -60 48 -93 -12 -88 -99 127 -100 -127 -15 24 -53 -26 -124 15 3 44 -128 -55 16 -128 46 -42 -100 -18 -5 30 -27 -127 8 -40 -128 -34 22 -2 -45 -103 -49 -52 -45 35 41 7 -41 -90 -6 -128 -127 126 -112 -15 40 88 35 17 81 78 -13 -90 127 -79 53 109 -94 -22 -81 -44 6 87 70 -94 22 84 -118 127 80 97 -5 73 59 -96 -23 -28 -52 -67 -79 -50 92 6 33 125 -92 12 -61 2 48 45 19 39 -6 -41 -72 36 -21 -41 59 -76 18 43 16 -23 -63 123 -62 4 -48 -19 126 -46 7 -46 -2 -22 23 87 67 -35 -93 29 -15 -2 11 21 120 -15 -29 15 8 12 42 110 31 -56 -17 108 90 -70 -6 48 48 -61 10 -42 7 -5 -18 7 21 -3 65 -32 -23 39 -3 -97 -66 -29 -5 90 113 22 53 46 84 30 44 86 12 127 12 -9 -34 -36 38 84 126 4 47 36 -27 -63 -108 18 -51 89 119 -59 -6 -6 -12 -15 29 11 -53 -44 23 65 11 -116 5 76 93 -83 -77 -39 32 110 94 38 4 -10 -3 -37 14 -80 -26 121 -33 80 6 15 47 -55 4 14 -66 83 24 121 -75 -17 -117 125 -66 -23 96 60 85 71 63 68 1 12 30 127 6 40 28 -29 -128 73 0 34 -28 2 -40 -6 4 6 -77 17 -33 -59 62 59 39 -2 46 18 75 -45 28 -17 -17 33 -7 -9 127 47 124 -47 127 -29 48 31 -24 -35 -2 29 -63 29 57 -70 4 -16 -13 24 15 -79 -27 -33 -125 116 126 0 -115 -98 77 -40 -20 -17 18 64 44 -64 126 67 -17 -29 -2 -34 22 -31 -41 -5 18 101 -46 37 34 -45 45 21 -12 68 -44 -48 -46 53 79 -121 36 25 5 70 11 -55 12 42 -25 28 8 -95 54 -16 -71 57 -36 80 -83 54 50 45 -31 108 -36 12 -37 0 70 47 -116 -25 87 38 100 82 121 -5 -45 -8 68 -33 -21 23 13 70 -37 -83 43 -5 -47 -14 -19 26 48 66 -18 66 3 27 64 93 9 -61 121 127 5 49 70 -56 -1 -25 -47 -20 -2 14 -87 -17 -15 33 -4 -15 7 8 6 -119 46 -49 73 -40 -87 -27 -15 35 -16 53 100 56 84 32 126 27 -33 -22 -41 -2 101 -58 63 27 -9 72 33 80 93 14 -79 -30 -61 30 67 47 -62 -8 65 47 -107 16 -36 -4 -65 55 52 69 -29 61 123 58 -1 -30 -126 71 -63 -9 18 -34 50 126 107 46 54 42 76 -18 -22 6 -33 61 -12 48 39 -20 -16 70 -73 49 -7 27 85 32 57 61 2 7 119 16 42 -1 90 54 9 87 -69 18 122 51 11 35 -32 -55 -61 124 26 125 34 123 61 10 -36 -77 18 -41 45 9 8 -91 102 48 49 -103 -122 40 86 37 8 -49 52 18 -27 16 35 -1 -119 44 103 -58 4 67 -40 -61 20 -52 31 -8 69 -43 126 -27 56 -40 85 -39 -45 5 48 11 54 -13 30 38 3 -25 -14 0 -8 -106 23 -12 -44 24 -36 -90 -2 -19 -66 29 112 -10 120 -90 -37 2 96 11 28 68 51 14 16 45 -11 16 -66 -128 -25 -3 -3 -66 50 -22 -73 -65 -22 -57 -11 34 -48 -17 -67 -43 66 -10 9 4 -26 62 65 6 28 -46 13 113 -4 -6 -29 -23 21 -78 -40 -20 50 4 -11 -5 1 3 -92 -102 -126 -109 -92 -27 46 21 -13 46 -47 -117 21 -17 -2 36 -106 7 9 -42 69 -19 54 10 -70 6 -44 -25 -18 68 45 -35 1 -39 -95 -79 -1 -32 -64 -88 -85 -3 29 73 -66 11 -120 59 -43 66 -60 -97 23 -20 -37 -122 29 99 -33 54 25 59 -16 4 -126 -23 9 107 13 25 -43 -128 -55 -5 6 -85 -37 -38 28 2 34 -53 -64 104 -9 -27 5 127 -54 -22 34 -87 -58 -23 -46 -79 -69 -105 19 18 -14 18 44 -25 -27 49 46 87 20 -122 19 3 -88 -8 52 -18 -9 37 54 24 48 11 -98 -28 -108 106 -68 37 77 -112 42 35 -60 -3 66 -112 90 42 29 92 68 49 9 60 72 -55 7 -16 71 55 -6 27 74 -41 -13 -20 -19 -14 -77 -38 65 -19 -23 52 -127 -59 38 18 -31 34 0 -65 11 28 28 -37 -3 -80 -10 31 38 53 34 6 -15 -18 -5 -35 28 -41 -29 -50 15 31 -60 -67 25 30 -25 -15 -7 8 -94 27 21 13 -4 -9 44 3 -12 -31 35 35 -11 -7 49 16 2 27 105 -12 -64 31 -23 -44 -63 23 -73 -14 -96 31 -7 -126 14 -39 37 7 29 111 14 -48 33 10 -34 59 57 13 15 -3 67 -27 24 -34 -50 70 84 39 63 -21 -61 -2 -67 52 -17 -63 -17 -32 -32 34 -38 -2 -26 -126 -5 -20 -14 39 -1 -31 -77 83 63 -72 -51 33 -12 123 35 -30 16 6 -62 -12 -91 -21 49 11 15 58 42 59 100 9 75 -87 -128 -62 8 89 -42 -42 -12 -109 6 -119 -6 3 -4 18 -15 115 -40 53 20 -82 -28 42 8 14 46 2 81 -4 -126 30 26 29 54 123 -7 17 -16 48 -122 17 -62 -24 -79 4 29 19 -102 6 55 48 -14 38 -76 -44 77 75 55 5 -11 18 11 -40 -58 -115 74 2 59 -48 56 94 -15 65 19 -76 14 16 33 9 -19 -27 -96 -46 -25 -12 -101 19 -49 4 -21 -43 -5 -58 2 -56 61 -127 -17 -43 9 43 4 78 25 13 -17 -62 -39 0 -10 -18 35 25 51 32 9 28 68 -4 -11 52 44 -12 77 43 17 17 0 -1 101 2 6 8 -70 -16 60 -70 22 36 -19 -5 -20 -69 10 9 -48 -47 -12 31 -98 32 3 45 76 -42 -6 109 33 -27 62 -52 14 -82 -26 -44 6 91 127 16 -47 82 29 53 98 -28 40 50 -64 5 -112 20 -54 86 32 -24 -14 3 12 68 40 -11 33 9 -45 -69 -23 -18 -40 -25 37 52 -5 6 124 -47 -105 -39 -6 -34 70 19 33 12 -82 74 -45 -36 33 51 103 -107 -65 27 -30 -23 11 -41 4 75 -31 0 53 17 -40 20 4 51 10 22 67 -36 -118 3 -13 49 104 -1 -15 61 -66 3 -2 124 13 -22 93 -15 -30 -48 -43 6 -33 21 31 57 127 26 -89 67 72 119 125 43 54 55 3 -37 30 62 31 -15 42 3 53 -73 121 -48 76 53 34 -48 36 -25 56 15 -30 -14 7 54 43 92 52 -59 98 -6 -54 73 -13 26 43 6 121 5 -113 74 125 0 15 28 4 -72 16 127 -123 127 117 66 60 125 38 88 -61 -4 13 3 6 126 3 58 66 9 35 -98 3 121 -102 -15 -101 -11 111 -1 10 37 55 35 127 15 -44 -84 39 16 -52 8 -50 -44 -61 45 -20 28 77 7 -15 -9 52 -4 30 -25 -56 -36 28 -71 -38 30 -15 -56 4 36 23 -56 5 -98 -50 -41 33 103 33 -104 -74 -2 -39 -36 -75 -42 -27 -65 47 -41 -36 -81 -34 123 7 -105 -35 -51 -101 -22 -3 -22 -22 60 73 -64 -88 89 -35 21 11 -20 47 25 21 37 48 -57 20 43 22 44 -102 -23 -44 33 69 -19 38 2 21 -47 -51 -25 43 -48 -54 -53 7 51 58 12 24 -41 50 -41 -31 -54 -30 -4 -7 -85 -36 31 49 59 -77 -47 -25 -66 11 15 43 -12 113 -20 53 -51 16 85 -22 87 111 2 19 126 18 -126 6 42 -5 14 33 -108 71 -55 23 -14 16 76 68 63 27 -47 4 -6 -62 6 106 -64 -42 15 -110 -91 21 -24 -18 15 51 53 -43 -23 3 -85 -49 5 -6 -29 51 62 22 111 -94 -62 -18 -7 -26 9 -14 39 -34 -17 83 3 6 -93 -25 -11 47 22 22 12 31 -27 -45 -1 9 9 77 -76 -14 73 75 -42 -20 -3 -24 -53 9 -38 -10 -12 38 37 21 4 -17 25 -29 -19 73 56 -34 -55 -101 81 113 86 74 40 24 82 -13 4 -15 31 -1 127 44 31 -12 44 -42 -52 -42 -16 76 26 78 -72 0 -53 36 68 62 -76 49 -30 -6 25 3 0 97 -78 86 -14 124 -77 6 -44 25 26 -8 49 -71 -35 36 -39 80 -50 23 -43 -10 -5 26 -3 -52 -61 -4 31 -29 -9 0 -4 5 -22 20 6 53 -68 22 10 -29 74 37 26 -4 -11 -13 -27 -31 55 22 5 -66 1 72 36 -27 70 33 -36 -80 -6 -15 -32 -70 -6 -43 -74 1 9 -59 -26 -6 69 -46 1 -65 18 -1 -19 47 -28 31 49 -67 49 -44 15 -12 23 20 -33 -2 -58 -61 69 24 -41 -74 -6 4 -8 -19 15 -16 12 1 10 -8 -12 2 33 -120 -33 -67 -42 -13 8 59 -29 -6 -39 14 12 25 53 8 -25 3 -39 -19 -15 3 -58 -17 -47 -9 37 -19 47 126 9 -33 -41 56 66 -18 -89 2 29 -24 73 12 34 -3 27 -65 -22 21 -18 107 16 -20 31 72 -6 -5 61 25 -3 33 33 -87 -85 -31 20 -1 -25 -37 -8 74 -22 24 -2 114 -35 -17 -51 -30 9 -6 -24 -41 2 11 48 51 -8 28 -80 -38 20 28 23 43 -14 68 -84 -119 -7 24 21 -16 -85 -123 18 -38 -10 59 -62 127 97 125 0 1 2 -63 30 91 -7 40 60 0 -52 25 -57 126 79 -100 -102 84 -11 -37 -31 9 125 122 2 108 50 57 -51 6 48 -26 -97 32 -27 78 0 32 17 41 -69 70 -60 9 -52 -6 0 -15 -29 -53 -60 -8 -116 -87 -127 38 11 58 -17 88 127 94 -65 -31 42 41 84 -16 7 -93 -125 -77 89 -78 5 94 22 22 -30 88 65 -32 -120 -28 68 16 49 79 23 12 125 -33 118 12 -8 36 104 43 -41 95 -97 -19 -57 -34 -39 -30 -7 77 12 99 1 51 43 -50 -59 35 -20 -21 -35 126 -22 -32 -4 -128 3 -52 69 -6 -59 -70 -15 -36 -101 21 2 22 -107 14 74 -78 32 17 -1 -70 -51 102 21 -126 29 -109 4 17 33 15 40 40 31 -49 -91 54 42 -28 -75 68 18 -15 -67 -128 -92 16 -75 -32 91 -33 -42 45 -12 -107 -118 -75 24 -75 32 -42 102 -83 32 -110 -16 121 80 127 -94 42 -8 33 102 87 -77 -17 -128 14 98 -84 73 97 -36 9 48 127 23 55 -44 30 -21 -96 127 95 -26 76 53 -128 -11 24 -60 59 76 9 8 -21 -117 76 34 -20 -62 15 -74 -44 5 42 -3 -31 -127 -4 106 -40 10 -108 57 58 -79 -128 39 -11 -13 76 -36 -89 -49 88 -78 10 -23 122 -15 30 -7 98 15 62 -10 116 80 77 74 -15 1 54 -84 -38 63 -24 26 89 -67 41 9 29 50 -84 -34 -49 47 -47 -47 69 56 32 -81 98 4 42 -41 23 125 63 15 26 -9 11 87 71 29 87 16 29 21 -19 89 19 8 16 -45 23 34 38 42 -44 -39 11 107 127 127 56 91 11 69 9 39 -47 -87 -100 -39 -13 -18 33 1 -10 79 10 79 -58 127 39 -75 43 124 32 -18 82 -33 25 80 81 15 -64 17 45 2 -8 -26 -18 65 4 45 10 -6 16 -6 -15 -25 -54 -49 3 -8 22 80 29 -12 -24 -66 35 -52 25 -4 63 -31 9 3 34 13 15 -37 44 72 90 -2 -12 -101 -10 -17 -4 -26 -43 17 -5 -23 -21 -12 42 15 3 64 22 36 4 3 -63 21 -37 24 36 -20 27 -13 -31 52 -16 1 -30 18 26 3 0 -84 33 42 79 29 23 -2 53 -12 -28 -9 48 39 16 -9 10 19 -42 61 5 -44 -1 -39 -5 36 76 -61 48 43 -15 -72 86 -76 49 18 -6 17 74 3 50 31 69 -35 -56 20 -34 23 -128 -1 38 90 14 -30 -51 82 -48 47 40 43 121 -18 99 -31 21 88 7 29 -29 -41 -16 0 -29 35 -10 -7 49 127 -61 0 -61 11 -54 -25 -37 -60 -106 45 -33 -40 41 -30 9 -38 66 -46 55 2 -17 20 -94 -69 63 -76 1 27 39 75 82 75 50 -15 -99 34 26 71 -14 -16 -19 -100 -112 -19 -92 7 51 25 -37 -17 -128 -13 48 -42 2 -2 38 -78 -53 97 16 -83 -78 -33 -34 10 -126 -68 -32 14 3 3 -102 25 36 -46 3 12 -67 99 -118 -53 51 67 5 -34 -17 42 -108 8 -57 -4 72 -29 1 79 -122 -66 20 -38 26 -127 51 -58 11 -49 25 -18 33 65 48 82 14 -11 9 -107 51 -31 3 6 -127 76 100 -123 88 -26 7 -27 -120 -35 -94 -37 -16 32 -116 -26 -36 -4 -31 -29 -14 -3 -96 -9 52 -3 35 15 -40 6 12 15 -80 -36 -82 4 124 15 -12 47 -1 -8 -63 3 25 -26 42 34 -57 -22 16 16 93 58 -50 102 -74 -39 -36 63 46 -10 29 -12 13 39 40 -16 -58 -42 -33 57 53 55 49 -84 103 56 -70 63 -104 -11 28 -21 -46 59 43 -1 -29 19 -2 4 -84 14 3 -88 -28 9 37 50 21 -42 9 -2 50 5 63 54 83 17 50 -46 18 90 69 -28 34 55 -103 8 -33 -38 -55 -24 -11 -10 -71 -32 -58 -4 6 -6 0 95 77 11 42 -35 -32 -10 -81 -47 -25 -12 55 -59 29 4 14 9 68 -31 -77 -5 -24 -1 42 -6 24 42 -66 22 17 -9 -49 -18 40 -39 -23 12 13 -16 -5 -47 -44 39 -14 -15 -20 36 -42 -30 28 -71 -36 -36 6 -89 -46 36 -28 10 26 12 30 -127 -94 22 -54 82 14 -51 46 -78 -68 -38 -33 14 19 -47 102 25 -17 -18 -2 -20 81 102 -114 71 68 -44 47 -39 7 4 -52 42 -13 26 54 36 -42 -63 126 18 114 8 51 -3 49 63 14 11 -84 12 -22 -56 48 -99 88 69 46 58 116 -4 -38 0 -9 -84 -14 81 -90 -48 51 -14 -30 75 -63 18 -10 118 -48 37 -11 85 31 -106 23 -18 85 3 -31 7 -41 0 70 18 61 -36 -10 36 20 16 85 -18 127 125 30 18 0 -32 50 20 16 -33 15 35 8 9 47 19 16 84 43 82 -7 54 43 13 33 8 0 -25 13 21 19 71 98 68 32 -20 -31 17 -31 -18 -30 15 -24 18 -36 51 54 -32 21 64 -63 -3 -98 20 18 30 53 -39 10 -71 -34 -61 -48 11 27 32 5 18 14 -23 -19 -27 -21 -68 -39 -38 67 36 72 -40 108 -39 13 13 42 -49 -77 115 33 -22 21 18 17 -88 -9 17 60 56 -95 1 -62 -7 90 -81 12 64 48 -5 29 -20 -12 15 -6 -12 49 58 33 -45 110 39 -2 -15 -29 9 -23 -33 46 -8 18 -51 9 -22 30 73 27 80 -23 117 98 7 -128 1 56 -14 63 24 -9 -39 -58 12 -127 -77 -20 -13 -47 -71 45 45 16 81 -30 127 21 -59 -23 -5 -19 -61 -14 77 2 8 19 83 21 31 -6 -11 25 -21 -58 26 -37 22 -69 -8 -31 -20 -5 5 9 5 -52 126 8 -8 44 -9 66 10 -3 28 -20 25 91 46 -23 54 -53 23 67 -57 -77 -122 1 -81 -1 -115 19 -61 -1 -15 43 3 -16 -43 50 22 4 -17 31 0 -37 5 15 38 -105 -22 -28 87 -32 37 42 72 -20 36 57 -1 85 49 21 -89 97 -17 104 102 78 36 5 12 63 38 74 119 3 104 -27 -39 -23 -42 46 87 29 10 3 76 9 37 -32 -34 14 6 -10 17 -12 -42 -37 84 51 -113 19 28 57 20 48 -30 -35 34 -45 -19 71 -24 19 48 5 -95 -19 5 -37 69 19 25 -61 -45 -58 30 -29 122 37 15 5 -102 -6 -15 3 -33 77 -32 -3 89 -93 -69 -58 -55 -4 -7 -12 60 32 -45 -6 -67 6 -30 -18 28 59 65 -15 -25 68 -18 -35 -25 -22 -34 -13 12 33 -70 5 -46 -25 -12 -34 -8 -88 11 -31 41 -48 -16 -45 56 45 6 17 -28 3 37 -7 -23 1 -11 -28 -2 -125 100 9 -47 9 29 33 41 3 -71 -28 24 -84 -51 -52 -28 -62 107 22 -27 44 66 32 12 -93 -39 66 -52 -38 56 50 -51 -104 12 -5 -75 -76 -70 -62 -40 33 104 -68 20 52 -23 -101 121 10 -12 48 -11 -105 32 -49 10 127 -36 -27 44 -13 -41 -84 25 0 -63 85 9 47 38 74 21 10 21 -25 34 39 9 87 54 79 43 50 54 36 100 26 60 -43 30 23 -28 59 41 -51 -39 25 14 55 -41 -8 53 -94 -50 66 82 -68 96 -38 -54 -65 3 -12 -19 -8 34 18 -25 5 15 -17 23 26 -73 3 34 61 35 -45 -16 1 -42 -10 45 -26 -102 46 -24 60 -28 -50 17 2 12 -84 41 32 -48 9 38 -45 -44 35 107 -60 -39 -57 -1 -10 -26 24 15 -60 70 -66 -60 8 -22 9 -77 -23 -115 -10 -83 11 21 18 -97 -29 9 7 -60 -26 15 -27 -36 -71 -1 95 -7 13 -50 -120 10 -3 -29 -16 -36 -34 57 41 47 29 -109 9 2 -25 44 20 56 22 -6 68 89 -22 -14 16 27 -101 84 -50 43 -23 -18 -46 -34 -21 75 -18 4 -3 -98 -19 50 6 44 38 34 18 -54 -59 19 -14 -3 14 30 12 35 -85 -86 25 47 4 42 24 31 21 18 8 49 43 -15 -24 -12 -39 24 -54 46 39 81 11 8 -64 7 -36 -82 73 -56 -28 40 -50 -88 50 -68 -8 17 -11 -24 9 -96 39 8 99 58 4 -127 -16 78 -122 14 39 19 -128 -52 -29 -43 -13 -31 -27 21 -15 33 54 11 -2 57 39 -46 65 75 -45 5 -7 48 -8 43 -63 34 -113 -51 78 -16 -9 127 32 -93 -15 49 -69 -67 3 -70 25 -21 2 39 85 -12 -26 7 41 -12 -37 10 -104 -22 -127 -1 -30 51 -13 -52 101 -19 3 -16 -18 22 -61 87 13 -31 -79 -23 -4 -91 84 34 84 52 22 24 -10 4 24 48 -31 -3 -24 31 -115 -30 124 -12 -89 12 5 -128 -7 18 -70 59 124 126 -70 -6 36 127 -21 29 77 39 -125 -50 -16 10 -123 -2 117 -44 -52 -74 3 123 44 6 31 -126 -3 -67 -5 25 36 -7 75 -117 -75 46 7 -44 -51 103 -26 -18 -125 20 18 2 -47 -29 24 -75 25 -109 115 -97 24 -80 90 -72 -31 51 23 30 61 -79 -4 -8 54 -77 76 89 -55 1 2 17 127 -22 -122 75 -47 -124 -65 -24 -42 44 -19 -40 -59 -34 -44 119 31 -127 39 -1 -74 44 -5 12 -35 -39 4 51 54 17 127 9 -12 8 16 37 30 -5 105 -10 38 3 83 -67 -127 -7 25 42 -21 -12 -43 63 30 37 -101 -125 -84 38 75 -44 -12 -33 -69 -79 104 -94 42 -54 6 20 -8 57 -84 -21 -59 71 -39 -40 42 46 113 79 -50 -20 -40 -59 -13 17 0 -15 -3 -9 2 83 -11 79 8 -45 57 43 9 12 111 27 92 -55 17 -66 4 0 -5 -37 15 124 99 45 -1 38 9 -97 57 7 -117 50 -112 3 -128 -6 -36 15 -56 -93 -50 -34 -126 25 25 1 -88 -101 -60 -24 -42 0 -7 31 10 40 -33 27 61 59 43 83 123 4 0 -107 -59 -8 -61 -55 81 25 -35 -43 44 -41 -100 16 109 -26 102 -48 -9 6 -39 45 -26 61 36 -10 16 -57 58 29 12 96 -32 19 24 -126 43 -14 36 -39 -54 8 16 -116 -20 -48 -106 103 13 -34 -51 -7 -31 31 -59 90 90 75 67 62 -11 14 -34 -71 -45 -77 -26 -62 110 71 47 -92 -103 -15 122 -17 35 37 30 127 -33 17 -55 -39 4 67 -17 -30 -24 16 11 -22 -8 -20 -24 18 29 -53 40 37 -1 -11 19 53 -14 44 23 45 14 46 15 7 72 -39 -114 -10 -52 -60 -73 67 73 -12 29 -6 72 -47 42 -44 -24 -11 -9 -67 74 -115 31 103 -38 -64 7 -95 28 -16 -29 -108 15 -21 22 66 -39 -3 -123 39 74 -32 -48 4 -59 0 66 103 -63 22 -27 16 -8 -87 59 31 21 -15 -112 -57 -25 -11 30 -68 -5 -20 -39 83 49 -79 0 -40 36 79 -98 -4 -34 -31 -36 39 3 35 21 -14 49 -85 119 25 -59 -10 -97 -29 21 19 59 -3 -128 -17 0 76 9 45 -44 120 -6 11 2 -39 16 50 21 -1 -8 -7 -66 58 -49 -25 -15 63 -67 62 11 15 1 123 -17 -13 -109 -15 -90 -80 98 -97 -14 8 69 -87 7 3 29 -40 -33 42 32 42 -5 -35 105 14 50 5 -97 32 127 70 -35 27 -55 82 11 43 -92 56 -50 9 51 27 8 -22 -21 -48 -43 -108 -28 12 -21 -46 53 -3 29 122 58 72 -62 41 -1 -11 -120 -51 -101 -32 -109 42 87 22 67 -55 -13 -85 13 81 -26 -45 23 -72 -52 45 67 18 47 30 -47 -32 60 -55 -32 -41 41 124 59 -60 29 7 127 -6 0 -95 57 -7 36 34 -42 30 22 8 93 -23 85 39 -1 46 121 -46 45 57 27 -7 17 48 19 78 0 -42 -80 75 -39 98 38 41 118 14 72 46 127 56 96 -12 6 -55 59 93 11 -81 55 38 9 -19 120 -44 -11 -69 125 -82 -21 84 40 -12 17 67 52 44 55 77 53 -72 91 127 75 -35 62 -20 -68 -9 -97 51 -35 -81 -29 -86 5 15 38 74 60 9 11 -57 110 -42 -5 54 -9 -35 1 9 7 24 -8 10 35 35 36 -43 -45 -12 -31 8 -3 2 -1 23 -86 2 -60 70 47 20 72 11 -22 3 -9 -25 -58 -42 -7 -16 7 16 -66 -36 94 74 -2 -31 -39 -40 52 93 7 9 -7 -78 -41 9 81 -57 -81 -33 64 50 47 58 51 -10 -18 -2 -30 -58 3 22 -127 47 45 -48 -88 -39 -46 7 85 40 -35 25 9 -63 6 -22 -68 41 -6 30 -24 62 28 -111 -106 25 4 -80 28 67 24 -35 -43 -44 -15 -7 96 -28 97 -105 13 88 75 9 46 -99 105 -38 -67 63 90 45 -45 18 47 81 77 -26 -12 -29 -16 51 37 7 15 53 -47 11 -4 -76 57 -31 -24 -63 5 -11 -71 40 66 5 -61 18 16 -83 46 103 55 -64 -98 -5 68 -4 -20 45 98 17 0 -87 51 -12 -17 -10 -116 48 55 -45 127 -29 -16 -113 31 -16 -85 85 -60 7 -45 -74 -67 -100 105 123 79 58 -21 -10 -103 72 -17 7 -71 29 78 -44 125 -101 -9 -2 46 -51 -105 28 52 -49 -27 22 96 5 28 15 -63 6 -52 82 7 72 43 -47 -27 75 -66 -34 -79 -91 19 35 27 127 69 -75 75 36 35 32 80 -99 -77 -48 -21 119 40 13 -59 107 -104 127 -72 -106 63 40 88 9 -8 76 -56 4 125 91 39 123 -93 -36 -7 -97 -94 -7 20 122 -42 -87 -32 26 -23 -52 -46 4 -45 110 -53 -70 -28 91 -39 57 5 -44 90 118 -33 44 112 4 -48 25 37 2 31 -34 97 -50 -94 -63 3 126 17 -49 7 33 -63 -36 -100 51 -60 95 -12 -15 123 -26 -5 93 65 34 62 -128 112 -24 127 121 127 -17 66 -31 68 -20 -58 -127 126 87 -107 -69 -58 -112 126 -70 41 32 -93 -8 -111 -79 114 -72 -119 -111 3 110 -23 86 -26 99 -11 -52 127 -92 -106 -80 22 -22 -14 -74 8 84 -54 -40 61 -90 31 -61 -127 -26 8 22 -91 -9 81 -57 112 -86 -36 76 31 53 42 55 7 -61 -11 34 -99 63 -46 -119 127 37 -22 -85 -107 55 61 -31 45 1 -109 -65 -52 -37 -52 10 -96 -31 10 -124 -45 44 26 55 -31 79 -32 -32 42 -91 34 46 123 83 -127 18 36 49 -69 11 -1 -67 99 -64 2 -45 14 18 -84 125 -101 -101 67 -126 -72 -47 54 113 -10 -56 51 127 7 -84 77 1 12 35 67 -54 -6 22 52 45 34 -39 25 -34 44 -87 -53 -33 45 96 -32 99 23 29 74 -82 97 4 -35 -30 11 7 22 -69 54 20 0 36 -10 15 66 12 -97 44 75 40 37 -110 105 -1 20 -59 75 68 125 -127 37 16 44 65 -7 105 -6 26 -126 42 -51 -54 -6 21 48 0 30 10 29 21 11 -2 -40 119 48 29 63 103 -56 35 -15 30 54 55 -70 56 8 25 105 10 4 -16 -26 -1 31 59 34 25 37 -45 13 -20 -25 -7 -12 11 56 -10 46 42 -7 -62 32 -21 58 34 36 3 -9 -51 26 -26 -6 20 41 15 40 22 23 -33 -1 -20 18 -19 -29 55 28 -52 -36 -6 50 11 -14 -42 34 22 5 -5 -35 -9 -27 -4 29 -14 10 25 16 11 -62 26 -21 -26 -10 34 17 -21 -46 4 -33 41 16 -33 -25 -8 -13 -22 29 -6 15 31 19 14 -49 11 2 -45 9 -22 6 12 87 10 54 7 31 -37 17 85 -10 -16 -9 1 -13 18 30 25 2 -70 9 11 -7 36 30 4 58 -24 -6 -34 13 52 -32 22 127 -2 29 25 -14 24 68 -23 2 -1 -71 -29 27 26 43 58 -70 20 -25 78 -32 -12 23 -33 3 11 46 6 -92 23 -24 -76 -10 -40 14 7 5 47 47 -26 -1 20 -2 -4 -6 -29 -30 29 61 -27 49 -5 51 27 -115 -7 31 -14 16 -96 22 1 --9 4 -9 -1 78 86 70 58 52 37 21 15 11 14 16 7 -6 -5 2 8 23 43 85 124 126 123 121 106 103 88 62 35 29 18 11 -4 -5 2 -2 -31 1 14 2 41 110 82 44 28 19 12 6 3 9 7 0 -7 -1 2 4 42 58 59 73 68 49 -25 20 48 61 56 41 40 28 16 12 8 -1 3 6 10 8 7 4 8 10 9 24 3 74 111 114 69 16 5 -19 -34 -29 -31 -25 -29 -30 -36 -36 -48 -45 -45 -40 -29 -27 12 -32 -25 -24 -50 -64 -52 -50 -67 -62 -61 -55 -47 -48 -54 -58 -77 -73 -26 -18 -42 -67 -62 12 19 36 10 -2 1 -31 -11 -6 -1 -4 -6 -15 -22 -39 -39 -37 -36 -40 -37 -28 -9 34 36 43 40 42 31 31 45 32 25 15 17 12 3 -18 -31 -33 -29 -24 -39 -45 3 46 16 27 20 11 -1 -8 -17 -30 -32 -19 -13 -10 -16 -17 -34 -39 -16 -5 -32 -122 -128 -22 -19 -9 19 52 50 21 23 14 10 3 4 6 10 10 12 22 29 8 -6 -30 -71 58 48 35 21 10 6 -1 -3 12 19 15 7 -7 4 24 11 -3 17 26 25 33 44 6 -15 -22 -12 6 11 -15 -32 -31 -31 -35 -19 -12 0 15 5 14 89 124 116 125 123 19 78 73 67 78 3 3 20 30 48 58 46 52 63 59 27 16 11 -18 -29 -30 -23 -3 -6 -12 4 10 6 4 -3 -14 -26 -40 -57 -61 -57 -52 -46 -35 -21 -4 15 53 53 10 -28 -43 -43 -15 -37 -32 -30 -16 -33 -42 -28 -26 -33 -29 -29 -33 -40 -25 -22 -35 -38 -13 -36 -22 -25 -16 -21 -10 -6 -15 -21 -23 -24 -7 -1 -13 9 28 26 -1 0 2 9 127 110 -16 1 7 40 36 44 45 40 35 27 27 33 27 35 47 31 10 10 14 1 -90 -90 -79 -63 -68 -79 -72 -83 -70 -76 -78 -76 -55 -38 -29 -10 0 -8 -2 9 13 -11 44 1 0 74 40 -5 16 -24 1 17 25 16 1 -6 -10 -1 1 -2 0 4 7 5 57 96 53 -45 -81 -11 -9 -80 -73 -76 -79 -75 -80 -88 -90 -82 -71 -64 -61 -70 -93 -84 -128 -128 -77 -21 13 37 41 20 10 14 15 19 33 38 18 7 6 -4 0 -4 -16 -39 -64 -125 -122 -79 -66 -54 -31 -21 -25 -26 -24 -18 -12 -10 -9 -5 -1 7 -1 8 21 33 34 53 57 59 67 63 56 42 39 46 47 44 50 48 28 1 6 44 28 -3 -49 -20 -5 -7 0 0 -5 -9 -15 -1 3 15 21 8 6 3 7 18 40 27 19 11 25 -3 31 -4 6 18 37 35 39 33 24 31 34 27 28 30 24 24 20 35 44 41 -15 -5 75 22 25 34 26 10 18 18 0 -1 9 -4 6 7 -8 19 37 19 -4 -12 18 -29 -27 -1 5 7 -11 15 -24 -34 -12 -7 -11 -26 -42 -38 -48 -58 -66 -72 -70 -66 -51 -27 37 3 -41 -57 -49 -47 -49 -50 -40 -32 -32 -32 -38 -54 -67 -55 -39 -66 -78 -81 -72 -67 5 11 -18 -37 -104 -123 -85 -49 -36 -18 1 9 0 -10 -24 -27 -18 -8 1 -1 10 23 -18 -64 -94 -114 -127 -120 -121 -127 -125 -111 -117 -115 -108 -90 -36 9 12 -1 6 14 26 37 -34 -52 -47 -49 -48 -57 -51 -36 -37 -37 -33 -33 -34 -36 -33 -27 -27 -38 -26 -6 2 -21 -39 -8 34 85 127 127 103 67 8 -28 -22 0 30 33 15 11 -1 -8 -2 16 24 -21 20 3 11 20 17 7 3 30 43 34 24 18 8 8 6 10 11 22 16 2 -13 2 -31 -51 -47 -49 -49 -60 -48 -38 -42 -23 -18 -31 -34 -40 -36 -23 -12 -13 -25 -12 -16 -38 -29 -38 -82 -92 -113 -125 -125 -126 -126 -127 -126 -110 -95 -75 -56 -43 -33 -1 2 -12 -20 -26 10 36 39 6 23 54 46 0 -33 -37 0 32 49 50 48 38 25 21 25 26 28 9 36 61 62 40 28 36 32 19 22 19 17 29 32 29 25 17 6 -12 -25 -19 9 9 50 40 44 33 38 21 9 1 -7 2 25 32 16 -20 -56 -98 -128 -128 -127 -127 -59 28 1 17 17 27 15 0 -2 19 21 18 17 24 34 40 47 45 25 32 65 80 113 127 78 44 40 44 29 32 37 46 64 66 54 31 41 29 10 20 36 26 13 5 32 45 -36 -14 -13 -17 -25 -21 -35 -39 -22 -11 -8 0 -1 4 7 -9 -22 -33 -36 -30 -35 -119 -103 -86 -68 -56 -43 -47 -55 -42 -22 -23 -18 -25 -13 -8 11 -9 -18 -9 -11 2 -19 -124 88 34 59 19 36 37 50 45 61 46 36 39 41 35 46 58 62 80 105 127 127 126 -25 -27 -49 -70 -66 -56 -68 -85 -94 -89 -97 -89 -85 -79 -64 -37 -26 -29 -35 -31 -32 -22 -93 -46 -8 -3 -15 -14 -17 -38 -54 -57 -48 -46 -46 -54 -71 -73 -65 -65 -74 -76 -59 43 10 23 47 63 70 62 43 65 77 58 47 57 57 45 39 31 29 35 31 30 34 17 -31 -12 -17 -26 -33 -40 -53 -77 -95 -83 -63 -50 -48 -34 -24 -29 -45 -33 -18 -10 -5 -53 -27 -25 -28 -20 -19 -15 -17 -16 -23 -28 -30 -31 -38 -37 -39 -33 -44 -70 -94 -107 -120 -49 127 127 89 22 -7 -11 -21 -13 10 60 113 119 104 107 73 62 44 51 50 39 34 11 -20 -24 -38 -47 -42 -36 -25 -14 -11 -12 -12 -17 -10 -7 -10 -9 -15 -29 -32 -40 -84 -128 -8 -12 4 16 7 29 90 82 61 55 54 51 40 31 33 31 20 15 9 19 33 32 19 18 10 11 9 4 -9 -5 3 3 -5 1 6 5 -7 -30 -41 -35 -34 -33 12 1 -8 22 16 13 -14 -30 -40 -54 -70 -69 -61 -68 -81 -103 -126 -127 -128 -127 -110 -94 -38 -6 8 -1 -22 -17 -19 -43 -40 -39 -49 -75 -104 -126 -128 -128 -70 -58 -41 21 36 17 20 72 13 15 31 27 18 7 0 -9 -15 -25 -31 -21 -9 2 16 2 -47 -128 -128 -120 -79 -36 -81 -78 -42 -7 -14 -13 -9 -13 -18 -22 -15 -10 -5 -6 -21 -37 -52 -41 -9 -21 -49 -51 -19 -121 -128 -128 -128 -122 -89 -50 -20 -13 -22 -41 -61 -61 -54 -26 -32 -42 -52 -56 -38 -33 -6 -14 -30 -38 -44 -47 -51 -47 -41 -42 -45 -52 -57 -53 -39 -39 -48 -49 -24 -9 26 12 7 10 2 9 14 13 13 11 3 8 6 3 5 17 24 49 88 127 127 127 111 70 -25 -37 -45 -62 -57 -55 -56 -47 -49 -47 -38 -28 -24 -22 -15 -11 0 2 -9 -10 -8 15 -11 -34 -35 -37 -37 -41 -35 -39 -54 -89 -104 -79 -71 -55 -15 -3 1 -43 -47 -14 -9 -4 66 54 30 17 33 26 23 50 53 39 29 25 36 44 47 46 46 52 38 24 16 11 37 15 -11 -27 -32 -24 -22 -17 -18 -11 -6 -12 -8 -12 -14 -18 -15 -51 -54 -21 11 50 58 21 11 11 5 11 7 -11 2 17 14 14 10 17 30 25 14 7 27 31 33 32 62 37 18 14 15 29 26 19 4 -17 -24 1 17 22 20 11 -28 -4 63 120 127 117 50 86 121 127 125 127 77 33 45 66 81 111 100 79 77 93 88 60 52 47 34 26 12 -7 -8 -13 -14 -5 2 10 18 1 -36 -53 -76 -73 -61 -56 -51 -35 -48 -79 -101 -19 26 12 36 57 65 92 122 127 127 90 36 28 32 30 18 7 -5 5 15 6 3 8 25 22 16 10 13 22 30 37 57 62 70 82 81 90 105 117 125 111 126 127 127 127 -5 -31 -31 -31 -28 -30 -20 -6 -13 -16 -10 -17 -29 -32 -26 -15 -20 -26 -28 -17 -20 -24 21 30 37 45 40 34 37 50 50 54 51 54 54 61 57 51 51 71 112 127 127 127 -5 47 58 40 22 10 2 2 18 35 52 62 60 51 43 32 21 25 34 43 11 -53 16 32 41 21 13 16 23 14 20 28 35 37 34 39 34 20 10 1 10 20 18 7 -38 -12 -30 -31 -12 -18 -5 2 -10 -10 -18 -1 -9 -2 4 20 13 11 9 0 5 66 20 34 70 67 9 7 46 93 90 68 44 38 19 17 19 34 35 12 -4 -3 -4 0 104 118 109 84 67 61 78 68 48 46 52 46 37 36 41 61 60 44 43 33 13 -8 28 4 -24 -29 -30 -35 -52 -48 -15 4 7 -16 -16 -10 -8 -17 -16 -1 13 -7 -25 -47 60 67 83 59 40 31 30 53 65 59 51 55 45 51 63 49 36 37 32 41 44 -1 -15 -23 -13 -12 -14 -11 -6 -8 -21 -49 -69 -71 -71 -70 -49 -26 -2 10 18 16 23 39 -12 -7 11 8 6 22 13 -2 14 35 42 40 58 82 104 123 124 107 75 66 39 79 41 41 64 103 117 127 127 117 61 28 24 35 58 74 95 104 118 110 53 27 12 -2 95 63 54 38 26 25 30 30 28 19 21 26 33 42 21 -2 -21 -12 12 19 19 -64 -15 -29 -30 -20 -36 -39 -52 -51 -30 2 33 60 85 97 107 103 103 80 68 51 26 -8 8 17 20 -3 32 50 39 37 26 14 6 2 4 8 13 24 21 10 22 26 15 2 -38 -26 -21 -32 -27 -23 -21 -33 -25 -33 -28 -24 -25 -20 -17 9 2 -60 -71 -42 -37 -26 -128 -61 -69 -77 -78 -61 -60 -58 -33 -12 8 42 16 24 44 24 3 -2 6 5 -8 -2 26 5 -25 -2 7 -43 -37 -13 -80 -104 -120 -114 -100 -93 -87 -66 -50 -44 -52 -52 -46 -30 1 15 34 23 7 4 -11 -14 -10 4 7 -18 12 5 -64 -122 -128 25 127 53 -20 27 -7 -7 -6 17 31 26 31 36 25 14 12 17 17 18 24 15 8 -1 2 14 28 56 -31 -14 -7 -7 -4 1 1 -2 7 -4 -3 -9 -11 -9 -10 21 48 94 125 76 -22 -125 13 9 4 1 7 22 9 7 12 22 20 18 10 10 6 -1 -5 34 76 58 13 -57 -41 -16 4 25 45 57 94 100 118 126 117 105 71 37 1 -10 -13 -31 -30 -14 13 36 -36 -14 -32 -38 -37 -35 -31 -40 -48 -54 -62 -53 -55 -60 -62 -47 -55 -69 -41 -25 -21 -27 -37 -50 -47 -48 -55 -59 -66 -46 -31 -31 -25 -29 -32 -37 -34 -39 -14 0 -1 12 45 127 43 13 -2 2 2 0 -22 -74 -111 -110 -72 -37 -9 7 33 34 21 15 11 8 19 31 31 4 -21 -18 -16 -13 -17 13 21 11 -3 11 27 59 76 70 76 102 51 -50 -102 -59 --30 48 50 38 8 -6 -39 -35 32 45 35 31 17 13 1 14 40 -7 -38 -9 -14 -28 -24 1 1 -127 -128 98 -128 127 -128 -128 127 127 83 127 46 96 127 127 -128 127 127 -128 -128 -128 127 -128 -128 -76 diff --git a/labs/rnnoise-model/voice-record.rnnn b/labs/rnnoise-model/voice-record.rnnn deleted file mode 100644 index 0173a1866..000000000 --- a/labs/rnnoise-model/voice-record.rnnn +++ /dev/null @@ -1,22 +0,0 @@ -rnnoise-nu model file version 1 -42 24 0 -3 -3 3 4 20 1 1 4 4 6 2 -9 2 8 2 -3 8 0 -11 4 9 12 -4 3 -31 -2 17 -3 21 -9 -4 -26 18 -6 1 -16 -4 34 -2 15 14 -5 -18 -20 0 7 -63 -21 37 -58 36 6 49 -19 16 -31 -10 -1 1 -40 -43 24 -3 12 -10 6 -18 -47 -10 -21 23 -19 9 -40 6 4 27 5 -24 -36 40 65 6 -52 -21 4 -31 -71 -63 7 -11 11 7 21 50 11 20 121 37 12 -106 17 37 -12 -16 59 17 17 49 -6 16 -57 -97 40 8 14 1 11 -78 9 -68 61 -4 -1 59 -12 1 10 44 7 1 -7 24 -16 -4 49 -30 17 -8 34 33 -10 19 23 -111 -98 -114 40 -104 -81 119 88 -54 -64 71 -118 -30 -127 -34 127 -16 83 -35 -90 116 -14 -51 -8 -106 107 -116 -15 101 23 -128 9 100 40 95 2 29 -126 12 -76 -43 -30 -14 80 80 45 14 -119 -99 2 -111 4 -83 41 69 -21 -107 11 127 47 11 -125 -27 -20 -62 -75 -32 6 113 51 127 -126 29 -24 -122 39 -55 22 -26 59 127 -20 23 -33 -73 -128 -84 12 -46 7 -8 -24 32 116 -83 16 -27 88 -81 83 93 -8 98 61 -40 91 -54 83 -124 -2 -39 -40 123 -9 24 -3 38 -25 -124 42 -24 -9 -37 -76 -122 -58 -11 127 26 -13 -92 87 63 127 -66 -50 57 -80 5 -77 65 106 -11 -124 45 -43 67 127 -40 89 122 78 -122 25 -60 28 -23 65 0 124 6 -50 36 -30 -34 -21 55 -70 -15 113 88 -28 38 -1 113 75 100 -20 15 -22 -93 78 41 68 -59 -71 -18 125 -36 -66 -5 -97 -27 55 20 81 67 80 -54 36 -69 -24 126 38 26 65 63 2 120 -35 66 -62 31 -125 54 111 31 -84 61 80 9 71 -109 62 26 73 123 41 -68 43 -20 -99 116 -75 -19 7 -30 -48 -59 106 127 85 9 91 127 23 19 38 -28 -29 127 105 -102 -100 127 28 -23 -26 -30 50 -85 -127 -128 -32 -26 -128 97 127 -115 127 32 121 32 114 -119 -126 -43 -23 93 54 -120 9 -109 10 -128 -51 38 127 28 77 -60 117 -26 -24 126 11 -45 21 114 38 -119 -51 68 118 -118 -45 -19 -69 75 103 33 23 88 -122 -45 -11 127 -107 -126 -15 -2 -20 127 -6 -32 -61 -79 -101 0 -68 84 -101 118 92 -41 -34 -127 -124 92 107 -97 -117 8 -110 -46 -54 8 2 -6 8 -31 21 -120 -111 37 -44 96 -98 -126 -66 124 127 78 -44 127 -18 -40 4 13 -128 15 20 -128 -107 110 118 -51 79 -112 62 -32 -96 -128 -32 -103 -100 36 4 -116 33 -11 117 24 127 -31 -127 85 35 127 -78 -24 -119 -116 127 -32 47 61 127 23 114 81 -70 34 -79 16 -128 11 89 72 -127 -7 75 127 -65 85 -128 -60 127 -126 -24 -54 68 19 -82 127 45 -78 -120 -8 -38 0 -2 -94 -128 -94 44 101 -120 -17 -20 -127 -47 7 -18 -22 -52 74 -127 70 27 -121 -13 -88 36 18 63 -57 -123 64 -51 -67 -116 -128 113 -24 -6 11 27 -45 93 -123 120 51 64 -64 -51 33 -72 1 35 127 -19 74 -14 125 -117 -54 26 -92 -119 -34 105 -28 -22 106 -26 -35 -33 7 99 -15 4 2 -34 100 -41 62 -83 -33 120 75 127 -21 12 31 -46 52 9 88 26 16 44 96 -127 18 -117 1 -121 -77 50 112 31 -29 -5 14 68 -13 49 43 -8 -106 107 11 -67 43 -30 -5 -68 34 0 -20 7 2 -89 13 44 65 -44 -10 -45 -38 122 22 45 -80 -51 -116 96 59 10 71 83 9 -104 -15 19 -127 -27 -11 25 -45 -17 -52 8 37 -10 -30 -50 -8 -5 -17 -91 4 -54 -42 76 60 -103 53 -41 -47 -33 8 27 -106 -18 -25 58 16 67 -66 19 30 56 110 4 16 73 -27 -55 8 -95 -105 75 108 -8 48 -29 26 80 79 34 63 -23 49 -77 -123 37 -128 -12 32 -35 -106 18 50 -102 14 7 -81 -98 71 -38 -17 -21 -62 -30 1 -118 31 95 -33 58 -79 -102 84 -4 -49 127 -126 59 -65 74 -20 -7 127 127 -90 127 124 80 -128 125 -128 -45 127 26 -100 -119 107 100 8 127 -113 103 -104 57 -124 -128 108 110 -65 127 122 -79 -128 125 -128 -77 17 122 -46 -119 127 17 -5 -1 50 92 53 5 53 -31 -81 -23 73 -35 -65 -78 -6 42 -34 -100 -95 120 -55 68 94 -43 98 -55 -7 -32 -28 21 109 22 127 7 119 -128 -116 76 -62 -111 -23 -58 33 -74 52 102 96 58 -58 27 -85 47 -36 -51 3 -36 127 48 37 -65 -62 64 -50 -38 -54 -34 -20 -9 77 -25 -4 66 10 -34 81 -3 60 -64 27 10 44 -120 19 -122 -44 -28 97 -7 111 127 -101 -56 101 85 -55 -48 12 -25 25 -21 25 -50 27 -82 -47 -35 -10 -37 -2 -22 2 51 29 10 76 -39 94 -6 -47 61 77 43 -19 4 -27 70 9 71 86 -16 1 -33 -62 -50 -23 -51 14 -26 -15 108 --56 125 -87 -127 -85 -91 -20 -124 120 68 -125 -68 2 21 -43 -27 -80 -13 -3 34 -33 -108 46 63 -24 24 0 --6 96 -13 -69 77 84 21 -48 21 22 -4 -128 35 -47 39 37 -69 79 35 -35 -31 42 100 -108 20 29 46 -18 2 40 42 -82 -40 -42 51 -30 -36 72 -39 -25 -28 -76 -18 -13 51 10 1 -84 66 55 20 11 25 -9 -42 -3 49 -48 -18 -6 -28 -9 38 -8 59 -4 -35 57 12 -39 27 -25 105 -41 59 -34 35 52 -22 46 126 119 -46 77 67 48 10 -95 -87 -73 66 -39 -73 -97 -60 -128 41 78 119 109 97 10 -2 -50 -9 0 34 -79 -27 39 -30 11 72 40 15 -3 27 20 83 42 8 -52 -81 51 32 80 -20 -34 11 72 -23 -51 23 -18 23 -8 32 -7 -1 -75 -14 60 -39 56 -86 72 -31 41 69 -8 -38 -104 -69 69 63 67 -101 -35 -69 -1 41 38 107 127 -25 -39 -9 27 -19 -48 -5 -102 -125 29 -67 -54 25 102 -13 55 54 62 -13 37 8 -113 -10 -113 45 -24 -41 -30 41 75 125 -69 45 -82 -3 -38 -40 -15 108 -53 66 -1 -24 101 97 28 -83 62 125 -116 -36 10 -123 109 37 -53 -12 54 -12 -123 -37 5 100 -106 -118 -62 30 92 -83 87 73 28 42 -24 -108 -9 -85 65 -28 -2 -76 32 3 -84 -97 92 57 -8 -66 0 -72 -33 -120 -2 19 88 8 -40 27 -101 6 -45 116 -59 107 16 -89 51 -18 7 32 54 19 -54 -94 73 -10 96 19 90 48 3 -29 -24 -71 114 -41 115 105 96 42 -84 -37 66 -57 46 -13 -2 -56 88 -109 -14 81 30 50 5 62 29 -4 -6 -25 -55 -33 12 96 -58 -105 57 64 -54 -7 57 49 75 -24 45 -28 -32 32 -1 -58 -11 0 65 -6 27 -19 -38 -68 12 17 8 10 -55 -33 -77 18 91 -11 -2 -12 26 59 49 -17 28 -128 70 -64 -31 -83 127 -76 -45 -44 112 -67 -116 -115 -19 -39 -69 -111 -128 -118 -94 -3 57 -112 -98 -115 68 12 -26 54 -26 21 82 -67 40 -67 -87 -84 -45 -65 -73 -100 -43 -105 93 44 28 5 -95 -8 9 9 -106 -45 34 -59 77 1 74 -51 25 41 28 -30 32 56 69 -17 19 -36 -56 -17 60 16 -13 42 -7 -5 -54 -38 -30 -26 73 49 -26 -60 -103 78 123 114 122 114 105 61 66 -53 62 93 -31 9 92 32 -1 12 -98 94 51 98 109 -59 55 -29 -46 -5 18 76 66 99 -16 19 75 -18 -37 -51 58 61 41 -11 -25 -57 98 -105 -25 -13 43 -7 -75 -67 -87 37 -110 -57 19 20 -87 -66 114 77 -31 28 -65 -15 71 -28 118 124 -81 -44 -90 5 15 -52 -62 25 24 37 -39 -34 17 35 76 -78 -33 2 19 2 -53 37 -52 82 20 -29 94 92 -26 -68 31 86 73 69 -88 51 -11 20 11 1 20 -14 -49 -22 88 -19 7 9 83 52 15 -26 54 -14 105 -79 58 65 -69 7 -8 67 118 9 -47 79 82 127 -109 102 -26 -64 -31 127 47 39 -44 -82 80 41 -94 -101 7 24 41 40 46 -27 -22 -74 118 112 -42 -22 127 21 -3 38 -60 75 99 -65 97 41 17 26 18 -50 -45 50 30 89 0 -14 12 0 38 26 -58 54 0 -31 24 -20 63 -4 81 -127 120 89 -85 -34 -5 89 -29 -125 5 21 37 -23 41 -12 9 -116 -65 -100 -55 -61 -127 88 -124 -24 -108 -87 -5 14 85 -1 -72 -91 -78 -76 0 -4 47 71 38 -128 -60 24 -46 -60 -85 12 -123 -23 -95 -51 -29 43 -67 -15 96 51 -118 9 -9 52 65 36 -43 46 16 -36 -47 -40 50 -24 -39 8 41 122 -72 -66 57 -128 101 127 82 -21 25 76 47 40 50 -65 18 98 31 112 116 35 117 119 86 68 127 -51 -32 -17 49 10 109 -15 35 58 -91 -34 59 104 76 52 106 -125 54 -45 -40 -19 12 8 43 -10 -64 62 -21 -40 -43 -21 97 4 12 30 52 -22 3 -69 -37 57 -22 59 7 -21 0 -55 20 63 51 -23 -120 47 -112 -108 16 14 -82 -100 68 -128 -101 40 -9 87 33 64 18 -128 66 2 80 60 35 -14 -128 -47 35 92 -120 -121 15 9 -117 -39 -64 -103 9 54 -121 -123 19 -108 -28 46 -75 23 -63 10 -4 -73 -13 -27 33 -8 -35 29 -27 -52 -22 -38 -18 -13 -26 -67 51 81 -15 13 34 7 20 -63 -119 116 -48 46 17 -78 0 -36 -31 87 45 -127 -124 2 79 -25 54 -46 -71 126 -72 -27 -68 -23 -117 -77 20 13 -61 11 40 73 -28 -106 -72 -12 45 127 66 -35 13 11 -56 44 28 81 85 -17 127 -25 -86 -67 -70 52 -49 -12 -110 89 -9 28 14 -118 38 25 71 37 19 21 0 -57 82 -44 -40 -5 37 95 -38 -17 -68 -120 -82 3 42 -98 -58 -128 -67 -69 -120 -64 -19 50 29 7 -128 -30 -96 -38 -128 -2 127 -47 -18 -68 113 -85 -60 24 -43 -60 -70 -98 -101 -96 -121 -57 -103 -48 66 -5 67 109 -105 -17 -27 15 -14 -4 -77 125 -54 0 -56 -91 73 107 106 -55 71 88 -95 -28 42 -56 96 3 81 27 -81 94 116 -6 -29 -78 110 127 -12 80 125 94 0 127 6 60 65 51 -26 7 88 -124 29 -63 16 -57 -78 55 13 -35 103 80 8 58 106 68 79 67 -78 -18 -8 -33 -15 58 -71 1 -10 48 -61 1 73 -7 -20 27 60 35 -33 29 -35 54 -20 -11 -8 46 11 69 63 -116 118 99 60 101 1 -74 -61 -115 102 125 -88 -112 -36 -112 -30 -125 -127 19 78 57 -55 117 -96 8 -50 -110 -38 30 43 -44 -40 -128 55 21 27 -42 -22 43 -61 -127 -31 11 -74 8 -33 -20 -4 -15 -58 32 -113 16 -54 -14 -56 7 66 0 9 62 16 -51 61 52 74 13 115 45 -103 29 60 -50 -55 127 120 1 -117 -70 88 -100 -8 42 -56 -56 26 -117 -22 36 -5 -13 77 119 36 75 -46 -70 -61 -36 -128 70 -105 -35 -57 -14 -65 23 -44 -128 4 -52 7 -55 -45 2 -55 5 -20 7 -37 44 -16 -7 -78 -59 -5 -4 -45 -23 -33 124 65 -27 -91 -65 84 28 86 -37 23 26 0 22 54 46 4 -126 -49 44 59 -8 -4 -3 117 81 -46 -95 9 64 -49 -27 6 127 118 -54 -64 -23 -12 56 105 5 126 -46 32 8 -74 -24 0 42 28 87 -17 39 87 -114 46 -90 21 -31 -32 -10 -92 29 -11 14 -58 -87 -32 37 -42 -64 53 35 -1 62 51 46 -29 -18 76 -10 69 27 -85 -44 -84 96 119 91 -44 -24 -13 75 -13 47 81 -56 -38 108 27 48 -67 56 -18 -34 -36 -113 102 52 17 76 4 -76 107 106 -60 -118 61 -26 -117 52 85 -18 -38 -59 -30 -95 -26 -64 50 -53 -9 66 25 -59 -124 -43 -63 -51 -42 35 -112 21 108 -47 34 -57 58 75 -46 -114 -66 -14 -1 27 -18 -75 -54 13 33 33 -66 6 11 24 23 115 -21 -27 29 -85 -95 -120 -8 -24 -125 -11 -127 -106 17 -98 -128 48 94 -10 -56 119 28 -41 -60 -54 67 17 -31 14 -115 110 60 -62 -47 73 -2 2 -26 -19 8 0 10 41 -120 14 -71 1 -25 -49 -18 90 91 13 79 -55 26 31 42 -86 77 38 -27 48 64 33 0 29 -13 -57 -28 28 -127 37 14 91 -101 93 -2 85 127 24 127 80 -26 110 22 -12 119 -18 83 20 127 -117 -112 59 -94 -40 -124 48 111 88 97 83 11 -115 51 -29 70 -35 106 -39 -92 52 39 -81 30 40 48 -7 51 41 -15 0 22 -76 -6 37 5 -127 30 4 11 -100 92 -9 -67 -92 18 96 -122 36 12 127 -37 26 53 110 -85 4 -99 -31 97 -17 -25 18 16 118 124 -75 -5 5 127 -108 99 3 15 69 -98 -3 -39 66 26 125 -52 -3 36 -122 -38 -15 88 78 6 1 46 48 81 -10 -79 -42 -13 -29 55 -7 -31 27 62 46 -26 -63 20 -74 -36 -119 23 25 32 24 -48 40 113 -86 48 78 87 46 79 -11 0 -75 -26 -60 40 -10 -51 -126 -67 64 -88 -119 -94 21 -42 68 36 49 -62 -19 -47 5 -44 31 -70 -33 -29 43 -52 12 -15 37 97 -1 55 39 -20 -60 58 -20 1 -15 37 -62 37 -12 -53 -34 67 -29 41 24 47 -45 -54 -19 -25 -28 -93 -3 5 12 56 -46 -105 -87 -84 70 -54 43 32 11 -97 -87 -36 95 -20 8 -79 63 -54 -111 -119 -86 -77 89 36 -100 -112 -122 -125 -65 0 -85 127 106 -74 -127 114 -76 3 19 -38 -68 -106 115 -127 -57 -73 4 -79 -29 60 118 -112 23 -51 13 47 -31 -47 120 67 -83 8 4 118 -22 9 96 102 115 -67 -11 35 -122 19 -128 -30 127 33 127 39 -112 96 -21 -106 7 14 -28 -109 -90 -57 39 -128 -96 -125 105 -29 75 -28 57 89 63 -36 -113 118 -29 -18 -72 37 -108 -99 -113 79 115 94 119 70 -25 -27 111 -6 47 -127 -117 127 -117 24 -82 -126 115 101 -82 -98 10 -47 58 -37 -126 -110 121 -128 -94 105 -120 -121 42 -103 61 127 -26 48 67 -22 -61 -115 34 -15 73 104 72 73 61 76 114 65 87 46 -22 93 76 -37 -32 -36 -117 65 113 -105 -33 60 -5 -48 45 32 43 -8 38 -21 -31 -12 -87 -1 -88 -36 107 127 25 -33 -77 -128 -82 13 101 -128 50 -77 -14 -65 46 -36 -25 -60 -36 8 -40 -28 -13 -103 -79 47 -59 31 -79 -12 -127 21 -103 -10 2 -10 -127 2 20 -6 25 -8 -128 15 -2 10 -40 32 36 -26 68 -2 7 52 -68 53 -11 -10 29 4 33 13 -46 11 62 8 4 -11 -18 32 96 37 -7 81 2 -100 -40 -84 101 -20 2 -22 35 69 111 -33 -20 -1 16 107 -5 60 88 -53 -7 31 122 -108 -127 -101 72 42 125 11 123 9 -106 99 118 -20 -60 -65 -103 -128 -26 -113 -121 -126 60 -70 34 -43 -47 -31 -33 0 99 -17 75 -20 -80 -7 118 -62 15 28 93 -25 -49 29 32 77 -60 20 31 -25 -128 72 57 127 6 10 18 56 -125 6 5 58 -3 -118 -24 -95 38 -128 -87 53 -63 10 -126 51 -85 -44 -61 124 -127 -77 17 126 -33 -55 -127 -109 -115 -16 22 17 -70 30 -32 -128 30 -59 -7 -55 -68 -24 37 43 -14 21 6 34 -76 35 -42 63 56 -67 -35 -87 -98 -127 51 39 -21 101 -75 -27 40 0 29 14 -92 50 50 30 0 -25 -66 10 -79 -23 12 -6 -10 -1 117 -128 77 88 -55 -63 -115 -92 88 123 -127 -74 -13 36 -107 62 -25 -92 -121 -128 -89 -117 -88 -106 -116 -54 -44 -1 19 -14 23 -54 9 51 25 -100 -25 83 -26 -33 -16 -13 63 -71 1 -120 -89 -59 -65 33 39 41 -41 -16 66 -29 102 -4 30 67 30 53 -22 -80 44 112 -89 -8 65 -19 -39 15 102 -11 15 97 127 -103 -53 5 -26 -100 126 -115 62 -128 -128 37 124 107 -30 -125 7 -20 -23 -125 -120 51 4 53 41 -103 -5 9 -37 7 84 -43 15 -67 -83 -26 64 5 -83 -25 -6 -32 91 105 -63 -6 35 38 49 24 52 -105 -108 37 46 29 22 18 91 74 77 119 -21 120 46 86 -123 103 76 -58 -63 -3 -128 112 77 97 -89 56 -78 -37 -18 -34 -22 -92 95 -60 -122 -31 -41 49 -60 -96 5 24 -110 -80 -71 70 15 12 -102 19 29 -36 -121 123 10 -55 3 -24 14 -123 -117 -119 -73 -16 -127 -36 -98 -7 -18 121 119 -117 15 57 -80 118 -51 -106 127 117 -28 27 -77 120 101 76 -119 127 108 -128 99 105 -106 14 -97 -127 119 113 127 99 64 118 -114 93 -42 -62 -28 -103 85 -36 37 -91 -95 -74 61 -23 3 -100 27 40 -81 11 -30 113 44 -12 -118 16 21 -1 16 37 112 54 117 -10 46 74 -15 55 118 -2 -96 80 -113 -37 -82 -81 -2 -19 -91 -30 -75 -114 76 -115 -35 -18 21 -88 -86 127 -128 -39 19 -20 -126 -126 51 109 -42 -118 46 22 -108 -8 -21 -101 -85 -124 -119 -128 -110 -128 -127 -126 16 -79 40 -16 29 -82 22 5 67 -38 -68 23 23 13 -7 -53 -3 -88 -37 -73 -74 -21 50 -2 56 83 -127 30 97 -69 68 -41 52 26 -13 48 89 -23 -17 15 -108 88 29 17 5 82 45 -69 -84 95 57 49 -41 31 25 -114 -22 7 -102 -105 40 -57 42 34 -41 127 9 -6 -46 39 -70 16 -42 -47 -8 32 60 1 -17 0 -78 -8 -55 -11 3 39 4 -16 -13 -18 66 82 -4 59 -51 30 -18 99 3 63 2 -52 11 -32 78 -33 45 -101 36 -34 28 -66 24 87 43 38 28 46 127 44 -26 -5 81 -18 -55 -16 -124 -120 -27 -44 27 -128 -55 -38 127 -37 126 -41 -127 -30 -103 -75 4 65 -118 52 -26 52 5 -62 20 -27 61 6 -57 15 42 26 -23 -11 -99 -17 -52 -90 85 33 -22 10 -101 -94 7 58 127 -108 -54 -32 14 69 -53 -68 126 40 42 13 -30 125 24 99 -122 125 125 -52 -67 107 127 -70 -128 -91 -10 -125 120 -121 67 -127 -128 -46 127 52 112 -45 -113 -123 -120 -127 -119 -90 -82 -39 125 3 88 -52 -9 18 -34 55 3 47 16 23 82 50 34 -5 -42 60 127 126 -8 66 20 0 -43 20 31 -3 -46 17 116 13 -50 90 31 107 28 112 -71 125 20 42 -75 51 44 -67 -63 -28 127 -102 -116 16 -87 -42 -35 6 115 -114 -109 64 115 84 101 -72 -99 -88 -64 -94 -118 99 -53 16 61 -128 3 37 -11 -11 51 -75 -6 3 -113 66 77 -9 19 43 -47 6 -28 88 -31 82 -32 31 -28 62 29 -7 30 -62 78 50 -98 -1 72 71 32 62 11 58 58 66 -116 82 65 -11 -34 45 -41 12 -126 -100 34 50 98 -74 61 109 11 108 102 34 -71 114 -22 107 127 102 -25 -113 127 14 -98 -18 33 29 21 36 9 -35 -48 85 35 -5 36 -64 12 13 55 -17 -106 -63 -70 -70 -27 -10 -80 -80 -88 94 -18 127 -77 17 80 125 -105 -70 -83 -84 103 -37 -8 -87 94 -101 -32 124 61 -64 20 -2 -27 12 -58 -111 -1 -39 -59 -114 16 47 26 71 12 123 -35 -63 -14 -11 -31 -10 -77 -19 22 75 22 20 26 -25 -38 -27 -62 86 21 -8 82 7 -34 -64 33 11 39 33 -25 33 19 -12 25 44 97 33 -27 67 28 20 -8 -52 127 -19 111 -26 -9 63 -44 -12 3 9 75 -110 -54 44 -118 62 127 89 -44 69 -127 -29 -124 9 85 41 -126 -63 -96 120 59 121 -58 127 124 122 -33 31 -26 -48 99 -41 32 -11 -17 -6 -102 44 92 -23 -19 19 -1 77 42 25 -51 -23 -31 -27 4 61 57 75 115 -122 -38 -66 14 47 -124 -116 127 71 48 -5 -83 62 124 123 -108 127 8 -72 -10 110 51 0 126 117 -114 -45 -69 -18 -115 19 112 1 -127 46 38 117 124 55 -22 118 120 119 -37 124 -90 9 -5 32 -10 -93 -58 -9 -14 -64 77 -5 -51 -2 -14 -4 -4 121 46 61 -47 6 -13 10 42 103 127 -120 -80 -66 102 4 -93 -94 126 48 36 20 2 120 47 50 -76 127 101 -37 -6 9 -123 -119 -78 -118 -39 57 -99 -23 4 51 -94 127 -104 -114 -77 -73 -20 -25 -75 -66 -47 -31 1 -98 -38 -59 -40 -43 -23 12 -50 36 -6 1 -5 24 -68 21 -39 -91 37 -26 3 1 -59 -42 32 49 29 -116 -125 111 123 91 -14 47 30 84 -118 -90 -90 22 15 -127 -81 -43 122 -74 -126 14 66 -74 40 59 83 59 -59 -112 51 -29 -46 -11 28 -22 -7 105 -6 4 17 31 -69 60 77 118 5 25 38 3 37 -7 -4 -43 41 32 -74 74 -9 -28 23 70 75 10 14 61 89 32 -10 -31 -4 -47 11 82 70 -58 -20 -122 49 6 -57 -84 124 -2 105 -53 20 127 -4 55 -45 42 127 -75 -15 3 -1 66 13 -27 -16 -26 -104 -16 -26 -66 38 3 8 -5 -34 -42 0 -28 -20 10 -5 -32 -4 32 37 14 24 -5 70 21 -123 70 -30 84 37 -43 -34 6 -7 -23 -33 63 64 -3 -32 53 72 102 -49 -22 75 -25 5 -17 -12 -43 -30 13 43 -37 48 21 -103 19 36 37 74 -24 53 -9 -38 45 -9 -83 -42 14 65 -55 126 32 100 41 -33 58 100 -23 -34 -55 8 95 94 -38 -67 -44 48 -33 -39 17 -58 -6 26 -8 39 -27 19 -6 14 30 -6 -59 -19 16 -4 30 -10 40 -88 46 17 -125 19 -72 -63 40 18 96 -36 -41 108 13 -128 -39 -118 50 100 -9 -13 -90 25 -104 -126 110 19 -43 -128 103 88 118 32 102 -127 -40 13 126 69 18 -123 -58 -26 124 106 122 73 127 120 -11 -33 -23 -85 45 -6 62 -36 46 -83 -62 24 101 22 -90 -38 -20 -40 -95 -24 -60 -126 -87 -14 -111 -38 -120 -32 -27 44 34 51 30 -123 103 -13 -46 25 -9 3 -13 37 36 65 -37 74 -52 68 -26 65 40 -75 -10 58 -10 -37 -30 -127 35 -48 -29 -128 115 -102 -64 -29 -9 -9 -41 -118 9 -64 117 -80 44 -19 -68 54 12 72 -48 49 6 7 86 -27 -54 -92 26 -29 -105 27 -12 -53 -24 124 56 -69 -2 17 127 106 -127 -46 -39 71 66 -80 13 127 88 34 53 -9 45 112 112 -113 71 40 -86 -117 66 -123 19 -128 -127 119 3 125 67 125 -23 -128 98 127 49 -25 -123 -100 -121 -103 -127 -128 -123 78 -97 121 42 -13 -24 61 40 95 36 118 27 -19 102 115 51 67 22 6 34 78 36 -14 88 75 31 6 40 27 5 -65 -59 80 13 39 -15 34 26 21 31 -20 48 -12 44 -50 32 24 3 -127 25 -90 48 2 -42 35 23 3 6 -38 61 47 45 37 31 -16 -31 58 -75 35 -4 -13 84 47 25 20 0 -67 32 -40 48 -60 14 25 -10 -17 -21 -2 -12 17 -16 -78 16 31 -70 -12 -2 -34 42 32 102 -85 77 -61 -63 91 -33 35 50 25 -66 -15 16 5 1 21 -38 19 -43 -14 35 -18 29 -70 13 45 3 -40 -12 -10 5 21 -2 -57 32 12 -8 -17 51 51 83 -16 29 13 25 -57 38 32 -49 -27 51 -33 -51 23 -14 19 9 -15 15 25 11 -20 -11 12 -66 9 -14 -22 -24 30 -11 4 -4 -23 52 -27 21 23 2 24 24 80 1 -7 -2 12 10 33 22 -31 -18 37 47 4 -19 46 61 -37 -83 61 -34 29 28 -123 -2 -25 96 57 83 -9 -27 -32 -4 -78 -85 26 -89 106 14 -61 26 -22 38 94 -41 -12 0 -59 13 17 55 47 -47 114 28 87 31 84 123 -72 -1 1 14 -26 6 -76 1 -54 7 -60 -16 -87 -22 -73 -41 5 -92 7 -15 -82 65 -88 5 -48 1 -24 45 -42 -26 33 9 124 -103 -105 121 64 18 -25 4 22 5 -21 21 -13 24 25 -14 75 2 28 53 -15 16 30 31 30 29 36 -2 14 18 -26 4 0 -27 44 43 -64 29 19 -77 27 -98 -10 -125 13 29 -13 -91 22 47 34 8 70 -10 -35 -33 -84 53 -11 37 17 1 -7 11 36 -1 13 42 -9 15 2 77 110 63 -38 7 -20 -16 -27 -38 -14 4 45 -127 -45 -100 -3 43 -86 -17 27 -4 -1 -71 -21 37 -125 6 50 41 -2 -42 -11 -10 27 -3 -50 13 57 36 -127 -17 12 -5 41 -97 54 -8 96 31 -2 26 24 -38 35 -39 15 -84 -12 84 31 28 -40 125 -56 -4 -45 20 -29 -42 -18 0 70 -20 -33 66 22 -33 42 15 54 70 43 39 20 55 42 20 -10 -58 -27 -22 9 -49 15 20 -51 -19 41 11 -34 -20 37 6 17 -1 -50 9 -47 -78 -39 -16 6 11 -16 43 23 6 -19 -26 18 -35 -64 -31 41 -43 22 -38 -57 54 -73 -51 -74 -54 -32 -42 -12 -34 46 20 -14 -59 13 -9 -11 -42 39 -6 -4 30 -32 -38 -36 -101 -27 -6 -20 -69 -75 60 18 -63 -11 -29 -56 -49 71 31 -35 13 -25 6 -41 -62 2 -61 -61 -1 18 10 -18 -60 -81 62 18 -11 -8 1 10 45 -19 14 39 15 17 -20 30 51 62 -92 15 -1 -31 86 -49 -11 -10 -23 7 -24 -54 20 -20 47 8 -23 -69 -103 -1 21 -15 1 -50 72 -34 -5 -8 4 -62 -3 11 66 -2 -8 20 -8 28 12 68 -48 -71 -1 -35 -7 -47 -20 -6 8 -23 34 -22 59 -6 -10 11 -59 -29 -2 19 -27 45 -60 3 -16 26 -1 38 -3 -45 -27 9 6 -43 47 -31 10 34 -9 24 -32 -9 -23 -35 11 0 11 -27 37 -19 -11 17 -27 -26 31 13 20 20 -33 9 -29 -79 -52 83 80 -43 -30 62 -20 -8 -38 99 -42 -94 -41 2 -3 -11 -17 -78 -42 -41 22 -2 -61 70 -11 -4 10 92 12 -8 88 14 79 -30 39 -22 21 1 -54 98 15 2 -103 1 76 -61 40 -24 -19 -17 -38 23 -27 -50 54 -28 10 -79 9 -33 -20 -25 -13 -11 -4 19 0 -58 -47 -6 53 -37 15 26 28 -26 -19 -8 13 60 23 44 9 30 -4 -7 24 10 25 -46 47 10 30 19 -7 -38 8 -2 -62 -6 8 57 16 -5 -86 -10 -17 8 9 -28 15 -17 49 51 16 12 -3 -31 9 9 -15 -4 7 -37 31 21 10 -57 -6 -29 55 -16 32 5 72 43 50 -80 -48 -7 100 26 -15 13 20 -31 78 1 -56 -32 -43 -52 -43 64 -92 0 -68 -35 3 90 -43 -11 89 -77 46 -21 -18 -59 -102 -63 -24 -51 -63 63 47 40 -54 27 -8 -58 -36 38 -4 6 -11 64 12 50 26 -26 31 -21 29 36 -1 -41 -20 -59 -69 -25 88 29 56 62 -63 46 31 45 -69 18 24 -38 82 -28 11 14 -91 -11 -45 24 6 6 -57 -25 34 5 -41 -92 50 32 -14 -11 -23 21 -29 -28 -19 8 42 -4 -43 -24 -55 -73 32 64 -20 62 18 30 29 31 47 42 0 -41 10 37 5 -50 11 -47 -59 -60 65 26 12 54 8 17 -8 -63 49 16 -42 -15 -7 -113 25 -8 -12 19 -18 12 72 23 8 22 58 -81 -56 37 29 -33 -12 92 -47 5 37 108 31 15 -40 -23 3 34 10 -20 1 17 22 -85 80 -65 19 -57 -2 92 -117 -10 -25 12 85 59 -28 -38 50 -23 -28 90 6 36 -39 31 15 -2 20 -37 37 -33 -21 8 90 -13 65 22 -9 3 86 11 95 32 -12 -5 -14 67 87 47 27 31 5 -27 24 53 -12 -47 17 -20 -13 2 -1 -16 42 -11 33 15 -1 -4 -51 27 25 -36 -59 36 23 32 -7 70 26 -14 -12 -19 26 -3 -13 -39 31 23 16 58 34 2 7 -18 -39 52 -66 59 -9 12 3 -34 -29 -30 38 29 10 18 8 -2 21 -76 54 -79 -41 -7 24 67 23 39 -43 -92 77 50 -109 -31 10 8 34 23 -31 44 -49 6 -38 -52 -3 -9 11 3 0 -120 87 39 -38 -7 -30 -35 17 -40 49 -18 58 -38 -73 -8 -67 -21 116 52 4 22 12 37 -2 63 34 52 33 -21 16 59 35 -5 -36 -77 8 75 9 -35 -70 -22 18 46 37 -51 65 -51 40 44 -7 -46 -16 -17 12 -49 50 -58 25 40 -22 -16 80 39 15 41 -16 -61 -18 -33 -22 25 5 -15 36 -23 18 -36 -20 6 37 17 42 34 -23 8 -16 -54 -27 51 38 30 -2 -52 -1 -29 2 -29 -20 30 24 -1 14 -10 7 51 18 -9 10 19 16 -69 57 19 8 70 -9 70 -10 -35 91 51 -39 33 4 38 -5 26 -97 49 86 63 -20 109 93 46 -4 16 -13 50 7 18 14 51 -22 -29 -27 78 -12 -9 4 53 29 20 57 -124 45 55 110 22 11 -47 26 25 -10 76 39 -40 -1 5 63 -20 -69 -2 32 -4 24 42 54 -33 -30 -22 -13 25 -10 -61 -3 37 -31 21 -5 -14 -19 4 14 4 -8 49 34 21 -16 -65 -102 46 -78 58 37 -10 37 14 36 -9 -15 -64 -4 -24 2 21 2 -4 -38 -42 -9 52 -51 -17 -26 -32 -22 -73 -34 -24 0 -1 40 -24 13 -10 20 45 -17 -36 17 18 -29 -20 59 10 36 23 23 34 -13 -15 -12 28 0 8 -13 -88 -75 30 -17 29 -85 34 -35 -61 -58 -13 -65 -125 52 20 32 -49 82 -42 -33 7 6 -105 -61 13 -5 23 29 83 -21 -63 110 50 -5 -109 -122 -68 39 -126 -119 57 48 60 -48 -102 -7 42 -63 27 33 23 17 -14 14 57 6 9 16 -30 -33 -25 -3 -70 39 -55 -49 -79 -9 -116 75 -19 49 24 25 80 -25 -33 32 78 26 -125 48 37 -89 -91 -2 29 -81 56 -35 10 -114 -67 15 19 -5 -7 26 -31 -27 16 -39 -34 40 15 17 13 0 -24 -9 65 22 -34 39 21 33 -13 -67 -25 -20 16 -29 30 -15 -125 5 20 47 -19 -78 38 24 -44 58 32 75 10 -10 -29 13 47 -35 -31 39 -53 30 24 -6 -13 -56 -7 115 -21 20 -14 80 -35 91 52 53 -36 -32 -70 -53 91 30 59 -71 -52 -19 41 36 9 -82 -62 39 -12 42 53 -105 -46 -114 -55 21 -52 -20 -6 53 88 33 -39 -88 -57 -54 44 105 -18 -8 -41 55 -64 88 -1 9 24 36 87 -5 -35 115 44 -5 71 17 21 43 82 23 -14 -6 47 -13 -78 -1 -28 56 -57 -75 50 19 65 95 46 70 55 52 3 14 -92 15 21 -15 39 66 34 7 15 15 -22 65 23 34 61 -51 -26 -16 -9 -5 -24 -34 -37 34 -65 25 19 43 -8 44 -29 25 -42 41 -18 -5 1 22 37 -24 -65 8 -18 26 -34 -12 13 -24 -23 -87 -48 -8 -26 22 -19 -2 -37 -30 8 -46 23 -74 43 -27 -1 35 30 83 -8 20 -38 -40 17 22 28 -2 23 36 -50 -59 15 -85 79 9 -81 0 -27 1 57 -4 43 -31 -1 -55 97 5 32 44 -6 2 -43 26 22 58 99 -99 -29 15 -53 -47 -25 -27 19 2 -51 47 -5 -42 -3 27 55 -64 37 -66 -34 28 49 -2 21 -42 65 -110 42 43 43 -1 -35 5 -4 -16 51 -22 56 26 11 43 -58 5 -40 9 -52 -17 -29 9 -40 26 35 -3 9 25 -32 -57 49 -5 -49 22 21 -9 3 12 -2 -2 14 -51 -2 29 -13 -23 7 21 1 -37 14 -16 -7 6 25 -66 7 6 -68 55 -24 -94 -104 -46 23 -5 -24 11 -88 -7 26 26 60 -25 -46 -6 14 24 -22 58 50 -63 -7 8 -25 -66 23 31 11 -5 -15 58 -125 -20 13 22 -39 -11 47 64 56 -123 -3 19 60 -105 54 -49 48 -22 35 35 -40 26 -19 68 33 -11 56 -35 -78 22 7 126 -35 91 10 3 29 -121 -29 0 73 -60 -4 12 0 -71 -28 115 72 15 -27 -110 34 -7 -18 69 -7 -81 78 2 69 -31 -11 -21 -94 -9 -37 -7 -82 -26 2 14 -31 -3 -28 -28 29 9 -11 -27 69 -80 13 6 25 -29 11 -18 2 -77 10 -46 127 45 -28 -62 -3 -14 14 13 -38 -12 14 68 79 12 -24 19 -12 10 -16 -73 -53 -56 32 20 1 -7 -50 35 -13 -38 51 -31 53 -78 17 -84 -121 97 -11 -13 -18 -76 -28 -117 31 54 -108 -60 74 -5 -2 23 -19 -107 45 84 -126 55 34 93 -71 -33 -23 2 -20 -63 58 -104 41 26 50 47 57 2 -38 6 -10 -89 25 1 90 1 -109 74 -71 -29 -55 -47 -23 -92 25 7 118 -67 -107 -70 -11 32 33 -10 83 46 56 2 51 22 65 41 -24 -55 -1 73 41 56 37 14 -29 7 56 67 -26 -10 49 101 -32 16 8 31 4 -7 -64 -16 -13 -56 91 17 20 74 23 -52 29 -84 -72 -14 37 -2 38 -29 84 86 -58 -15 -89 -67 -31 -69 -4 -63 89 82 -20 11 7 7 -26 6 67 -23 -3 57 -17 -18 49 73 27 -2 -3 64 19 14 48 52 20 -55 -4 52 32 -49 21 -26 -11 55 -27 28 37 25 -69 80 38 8 101 31 8 51 34 10 31 92 5 32 82 20 -35 51 -37 6 39 32 -2 -70 50 -120 -54 75 1 1 38 -21 93 -5 -12 -67 -45 25 4 51 34 84 80 10 66 3 -29 -16 54 -16 -9 39 27 -4 -94 89 20 9 -33 -72 79 30 -43 33 -37 -38 -51 -4 -66 -37 5 56 9 66 -33 31 -46 23 -39 -18 44 41 22 8 -62 -19 38 34 -13 -2 24 17 40 -31 -14 6 13 22 -16 40 28 18 -2 -31 9 -6 40 27 1 -9 -10 -1 34 -7 -27 30 -14 -47 4 -58 -5 126 -21 -28 20 -49 -55 27 -80 43 -36 -43 -83 -95 31 -70 18 48 -118 -22 70 24 59 32 5 -1 65 12 -127 -35 18 63 76 -91 -105 -2 -29 32 -51 -31 -63 -38 -37 -27 17 -43 15 78 33 28 -15 64 38 39 30 -47 7 -49 -5 18 -39 29 -12 -107 -50 -9 -60 -24 -16 -2 -3 44 2 30 32 38 -75 -19 19 37 -100 -39 24 -35 -19 18 -3 -72 22 -4 -29 59 -48 -16 -19 48 44 11 0 -15 33 8 68 2 -24 -25 18 32 71 22 -75 -56 2 -45 4 -25 14 0 -9 -16 -54 5 27 -92 -69 -36 22 44 -45 -19 45 17 -25 -59 43 -67 -62 95 49 -14 -14 14 41 -31 94 -12 34 -16 -106 -4 -9 -41 -61 -4 -50 -3 -9 -58 3 17 13 53 -117 -41 -48 5 54 -32 38 79 16 53 41 19 -87 5 15 11 79 2 74 -82 31 53 78 -24 -29 -3 87 2 0 31 -56 11 -18 19 66 7 -41 -68 -60 -78 -20 -5 -123 -18 -45 -96 47 -9 34 35 -75 31 5 -3 -27 5 41 -35 -17 116 29 22 -39 -63 -10 28 52 127 -82 -60 -10 2 -17 21 -50 -45 20 -4 57 47 -12 22 35 41 -26 15 -3 -67 8 10 26 57 -49 -46 28 -113 25 -45 -16 39 -31 -60 -44 39 11 26 -100 -36 48 -20 49 13 51 26 -37 -2 -10 -49 -76 17 -45 79 41 12 -27 -19 16 -32 -109 -40 57 45 -22 11 16 11 -71 -70 25 -24 33 -22 14 31 28 -72 -70 6 56 -25 51 -113 24 10 72 80 58 -67 44 59 -56 -47 19 28 26 -34 -21 -9 31 -11 39 33 10 -62 30 85 29 -42 -108 -89 25 74 -9 12 72 32 40 -32 -34 8 20 -13 52 -40 3 -44 69 -39 -68 36 27 -5 -47 -27 73 6 -48 29 -73 7 -30 -31 -20 -33 83 -67 59 -1 61 34 7 13 14 -26 24 1 -33 -29 87 3 -35 -8 -50 -12 25 -90 -61 -38 15 35 15 -78 -90 0 20 -8 16 21 -48 -76 -88 -39 24 87 1 51 32 -50 -6 -64 78 32 18 47 4 44 -31 25 -60 6 115 24 -6 75 122 23 88 -16 -43 25 20 -93 47 -30 5 67 -7 80 10 105 -20 65 -2 -10 56 -127 47 -31 30 65 5 -47 118 127 -41 16 -16 -12 -44 106 -19 7 -99 -35 -25 104 -12 11 6 -40 -39 1 -77 -37 22 -15 -19 53 5 -29 -1 -6 105 -6 -42 -61 109 -16 -79 -53 61 15 -63 -96 30 -42 81 -15 27 54 57 29 -55 22 -54 -67 9 6 16 26 21 -30 40 40 -56 -10 -14 49 19 -22 -32 -19 -40 -12 -26 36 28 -41 -23 -25 34 30 -57 -12 -32 71 -6 -10 50 24 14 15 56 10 64 4 -8 -8 5 -52 14 9 -38 33 -12 58 29 120 -105 78 -25 68 -31 112 -39 -66 92 -19 -61 -13 18 -123 21 -86 -49 -35 -45 -3 -124 13 -95 -17 27 34 -36 37 -25 -69 -71 123 56 6 52 94 32 1 17 -84 -77 93 -51 -80 6 -21 -39 13 28 -43 -24 56 -45 -21 66 -41 -72 -26 44 -3 26 37 -65 35 -33 -9 -89 18 -87 -38 8 -90 -70 -43 98 90 -55 2 -14 122 -4 -71 2 -18 -82 -1 -77 -74 2 -2 -29 25 39 -55 -19 -55 1 -44 -23 4 34 -110 -50 -26 -42 29 11 14 -58 16 33 25 50 36 53 86 -34 -99 52 53 -50 -37 67 19 29 -2 25 -1 17 3 14 -40 25 50 7 1 11 50 -31 -23 46 -10 12 -54 -53 -26 -32 -54 41 -43 -49 0 -10 6 23 70 18 -72 19 -11 24 36 53 62 66 91 16 61 70 25 -60 29 -29 -39 4 -2 -17 -14 34 66 19 -24 29 113 -21 26 12 22 -39 118 56 -24 -9 38 1 14 -72 -25 -15 66 26 -13 -13 -37 25 -88 -22 -59 13 14 52 44 -76 -50 -67 6 45 53 -59 54 78 -2 -65 -128 -25 -20 9 2 11 -49 36 12 -5 -10 -44 58 -71 33 -27 -15 -55 -36 21 48 -19 3 27 -52 -28 -14 8 -55 100 8 -49 -12 5 -13 -16 -51 -25 -13 -24 3 -32 92 25 -12 -1 -35 -15 7 13 32 62 -8 86 -39 -3 12 -35 -7 -12 -11 -39 14 -11 -38 -101 60 -29 56 39 -19 18 52 6 -16 40 -50 18 -48 25 -38 -11 -21 -44 -11 -71 60 -70 -79 29 12 -5 20 14 22 -29 4 8 24 9 4 -56 -64 95 -24 -60 23 -2 -26 33 -12 -29 109 -42 54 -11 109 31 -5 6 24 28 61 -32 49 29 34 43 81 -79 -6 36 -120 -13 7 5 -41 -4 10 -12 90 21 43 -14 -66 -36 -25 -33 29 -24 97 -17 30 3 -34 19 -63 89 15 -23 -25 -35 -44 -59 21 -15 21 -46 15 -49 -6 -6 -42 1 20 -26 6 -14 -9 2 -49 -48 -24 -25 -18 27 25 -7 1 14 18 7 59 -43 -9 -4 -14 51 -5 22 52 3 41 -18 -44 18 -13 -10 -26 -6 40 -31 -39 -6 29 -16 -33 49 8 16 9 14 -61 -61 11 17 -24 25 -8 -13 -41 -3 4 56 17 -6 58 48 -84 -55 25 30 53 -47 -19 -93 -8 -18 -3 29 -3 -75 -54 -23 5 -14 -48 67 -26 18 -34 16 -21 62 -49 -29 -51 48 9 -33 23 68 29 122 -6 -45 27 14 -58 25 33 36 -17 -75 48 -35 1 -42 12 -48 39 51 -55 -53 23 49 -108 6 -64 35 -10 -17 -111 -7 -7 23 -2 18 -5 60 30 23 -33 2 0 -49 -26 -9 -9 21 -9 48 -20 -1 -72 17 -12 -32 20 -16 13 -32 -53 7 35 70 14 -39 20 38 -37 32 98 8 54 -8 -10 -27 -91 8 -6 6 -52 -57 15 -48 -26 -24 13 -122 -126 8 21 -111 -25 -126 -99 71 -77 -122 -24 53 49 27 13 62 -80 -124 116 -28 -99 3 31 -111 104 38 44 1 27 -14 116 9 -124 58 10 -60 -18 -11 -4 8 73 1 14 -7 -31 41 43 -47 -74 34 -91 24 21 66 68 -86 56 71 -15 -38 34 -16 26 126 -75 26 30 14 -30 -79 -126 77 -103 -21 -121 127 24 -122 27 -90 -115 88 -10 17 100 33 -15 -21 105 -32 68 -13 -65 -4 -12 1 26 -28 0 -38 59 -66 16 98 -20 66 11 13 45 4 -55 -1 19 19 -63 111 -4 9 -12 29 -21 31 45 -27 -6 2 68 -7 -18 -5 16 10 11 -43 -6 -20 62 58 -28 88 -85 10 -66 44 -11 54 -38 -38 -91 75 -21 -29 5 71 -106 76 30 -16 89 -21 -2 36 -18 -26 79 51 12 -71 32 11 -84 -55 79 23 32 39 -11 -19 89 122 78 -25 124 -25 1 -26 -90 27 15 8 82 28 10 24 -5 19 -7 -19 42 56 -22 -18 68 -51 -58 -14 -40 11 -14 23 -13 14 -52 -38 11 16 -60 9 17 20 24 6 -19 -44 -73 10 1 46 19 44 -13 16 26 -17 -57 29 0 67 55 -10 14 -28 13 -40 0 -74 -39 20 -15 -3 32 -15 -29 -6 8 -28 -32 -49 7 -4 36 -94 52 -48 -5 -25 23 -57 84 -5 -18 -17 2 -67 -14 4 -122 12 -14 75 -45 1 35 17 122 8 22 -35 -13 -18 -24 -36 -23 26 18 55 65 -40 72 62 124 48 -7 11 -72 11 -10 55 -25 -14 12 -59 9 -26 35 3 -8 -51 -32 43 -52 17 15 7 -9 -33 -42 4 32 9 -58 -26 21 -26 -80 51 3 -55 -9 -29 -24 -3 -71 -25 -15 3 -34 60 -30 -33 -2 -45 43 -40 45 50 35 33 31 -17 -47 -33 7 -25 24 -8 -2 -34 -35 -31 -52 18 -31 -19 -40 -27 3 13 -26 30 -44 23 32 1 0 -16 -3 5 3 54 -4 -9 41 -15 20 26 14 13 30 1 -7 -9 0 31 33 10 -62 -4 3 0 -7 -15 65 0 -34 -9 36 -26 -50 36 5 -17 -5 -3 -2 4 -25 24 62 -31 -42 -46 -62 10 1 -23 33 4 -55 34 6 -13 -59 -24 26 28 1 13 24 -17 -19 -27 20 -14 -17 7 26 -50 6 -17 -42 14 -19 -65 -53 11 -30 -26 -2 12 -31 0 57 34 -69 39 -11 -32 -27 -21 -35 27 31 -2 18 -24 -48 7 56 -33 -14 -10 -76 2 60 26 18 -33 -22 -5 -3 -40 -20 25 33 -8 -22 -48 25 45 -34 20 -7 15 14 -8 -33 2 -76 -43 -53 2 21 7 21 26 -26 34 -22 32 -32 20 -22 8 4 -34 -1 -14 20 30 3 28 -21 -21 40 86 26 -15 14 31 -1 14 -14 9 6 13 27 -18 -13 -33 1 12 -31 10 -76 0 -20 17 28 -14 -52 -1 56 -2 -24 16 -23 -29 3 -32 14 -17 -59 -23 7 -41 39 -73 5 -12 -60 37 -32 32 -59 -19 52 11 -60 -32 -34 33 37 53 16 31 14 11 37 22 69 -52 73 -37 12 -48 -18 23 -5 13 12 12 16 18 28 -44 16 10 41 19 -5 4 -10 32 -40 -12 18 11 -20 -7 6 -15 25 -11 31 -3 37 -8 10 -16 35 51 2 14 -22 24 -10 -41 -32 -22 12 -12 -13 30 -34 13 1 17 -43 0 37 16 -38 -8 31 5 -42 -22 42 -3 19 -8 27 -15 -12 30 21 -12 45 8 -1 27 -36 13 54 11 -9 6 12 7 28 -50 -40 -13 -7 1 26 6 12 -1 -6 23 -7 -77 -17 -24 -6 23 -32 -5 -21 -6 -12 -12 2 -100 36 -60 -45 2 -14 -74 23 63 29 -30 11 24 73 44 -29 0 -48 -21 37 -31 -50 36 23 -47 44 -21 21 -24 8 -18 -64 45 -64 -5 41 -7 43 14 -28 -10 23 50 -30 -5 -31 19 50 -5 16 -60 40 7 38 -13 26 -33 -31 -25 -16 -30 57 13 34 -6 -30 -2 -39 -5 4 9 -28 -70 -27 73 46 17 -10 32 -30 52 14 9 -17 20 -30 25 -8 16 25 0 27 -2 -15 16 1 -26 4 3 27 -23 53 -13 28 21 13 2 -14 -9 -3 -5 -5 21 12 11 20 18 16 10 -45 -23 -38 25 21 -3 26 18 -13 -26 -27 8 -86 32 25 1 20 46 -30 -78 -14 54 10 -38 72 -27 15 -4 55 24 -3 -39 13 -16 19 33 8 88 107 -4 51 3 -44 8 -33 35 21 16 79 -33 -8 -41 -2 -5 13 11 -33 2 7 10 -55 -26 27 5 -24 15 3 0 -38 -28 17 -5 44 34 1 -18 -5 22 3 -14 12 20 -13 -15 -24 25 25 2 -12 64 23 5 -15 1 32 31 -5 -16 -52 -19 24 -25 -38 32 -25 -23 -9 -85 -1 -6 12 -13 -7 -17 -38 -8 -1 -16 14 -40 -27 -13 -31 9 -6 -61 -2 16 -15 -17 15 14 -48 52 -9 -4 -3 35 -10 -24 -21 9 23 23 -26 5 8 -19 -7 -22 14 7 -46 -43 1 -12 41 48 -54 61 34 -14 -19 6 -37 22 10 21 34 -76 29 41 35 11 107 -1 35 26 39 10 24 32 36 38 -5 31 -15 -23 -23 6 -5 91 0 -45 11 -16 48 19 3 66 -11 -80 -24 8 24 -1 -22 22 37 7 -45 2 -37 34 24 -25 -9 -106 -43 17 -26 1 -85 -72 -34 -5 46 31 84 -40 -51 -45 24 30 -36 43 39 -17 4 18 4 -19 -13 9 8 -33 -20 -35 5 -38 3 69 53 12 8 -42 2 -33 -30 0 -42 25 19 47 17 13 -25 -16 20 -22 16 -33 -12 -17 20 3 -20 13 -24 16 16 13 -33 -11 -30 21 -3 -4 7 -50 -57 -32 -36 33 19 -3 30 -12 -10 -72 -18 -58 -28 15 -53 0 34 77 -5 -31 15 -18 35 -30 49 -62 -21 -74 -17 0 -27 38 14 -111 -49 2 60 -44 -31 -33 -43 -42 119 -33 -20 1 -48 16 -39 -72 74 32 6 -11 -109 71 -52 -50 20 -19 37 -21 -67 -37 52 53 8 -47 43 -26 47 -1 -8 -7 30 -36 63 -21 -11 -74 27 -40 1 -74 52 66 -1 19 16 45 54 -12 12 -50 27 -27 -36 -20 80 45 -111 -60 56 -29 -69 -47 25 17 35 -10 -2 16 5 11 19 20 8 -30 29 37 4 29 -15 -20 -7 -4 16 -9 1 5 -40 0 -18 36 51 -15 10 46 -48 6 -30 25 -53 4 11 -19 30 -42 -3 -14 50 -10 20 26 -28 2 70 -16 -43 -47 -94 -43 -65 -16 -15 -69 41 -53 11 -29 51 31 13 -82 64 5 89 51 -18 7 -31 52 45 -72 -15 -14 -61 21 -8 -60 20 98 -50 20 -120 18 -74 127 62 32 98 -35 75 37 -38 8 11 -90 56 24 -63 0 -45 -2 -19 -5 -12 -12 0 14 -60 45 23 19 -15 47 -69 58 8 -16 -27 -66 -13 38 -122 -38 1 -16 -29 97 36 -38 -33 23 -4 90 -12 36 22 -62 0 -46 -31 -22 -34 -3 -9 -31 15 -34 57 -17 6 6 -45 -12 -53 1 32 62 -47 -26 -26 28 3 -63 3 9 8 -21 -13 -39 -7 -19 12 -44 15 -27 -4 -9 20 -14 10 10 0 9 -79 23 -21 39 34 -10 37 -2 12 26 -60 23 -19 -11 2 -43 -7 -74 20 0 -8 -42 -41 38 6 -57 55 -50 66 11 35 6 -51 -48 -18 39 -19 -10 -20 22 -34 20 15 13 4 -67 -28 -4 -10 -36 -5 -38 -12 -1 8 34 24 -10 -38 -12 -12 -58 12 26 -5 21 -12 34 32 -34 33 -21 -41 11 -25 42 -43 -22 22 72 45 11 14 -47 24 42 -3 0 33 17 12 3 30 -58 -17 -5 -4 -23 -2 -24 -19 -22 -50 6 -43 16 16 7 36 -3 25 17 -54 -46 -15 -21 -19 43 -29 9 -30 -10 20 5 -45 -10 -47 18 9 -37 -2 -12 -24 4 7 -5 7 6 18 -17 32 9 -12 12 -49 5 21 -29 1 -25 -8 -7 0 -24 3 28 28 -30 19 18 -43 -51 9 25 49 5 16 -32 40 32 -9 25 -14 -9 19 11 14 39 -34 -14 14 -36 28 -1 -23 17 41 0 1 16 11 6 40 8 41 36 -67 -7 1 -38 -46 21 32 15 -30 -15 17 -14 -27 -55 4 6 -1 4 29 13 -1 44 -13 26 0 -44 13 -33 -19 8 32 4 -32 4 38 31 -11 6 9 13 46 14 -12 -11 0 21 13 -17 13 -29 -26 -9 -34 -11 27 1 6 34 26 -14 7 29 -17 -28 13 -9 27 -25 2 1 -13 -5 -11 28 21 -5 14 -38 -23 -1 27 28 -26 14 -6 37 13 -27 20 6 -1 -25 1 22 -28 109 -59 -21 -60 42 26 41 28 55 6 15 76 36 -54 17 35 -11 -55 79 37 -15 11 53 17 19 112 29 41 -2 24 61 -43 11 -12 -34 13 29 9 -52 27 31 -26 -30 -40 26 16 -21 15 -65 3 0 11 9 6 6 -2 40 -16 27 25 39 -22 -36 18 -44 -24 21 43 -19 -5 -26 67 -11 35 -55 -2 35 30 0 32 -23 15 17 12 25 5 -22 71 -26 -109 -86 17 -42 -43 -11 44 -49 5 28 -20 -17 31 30 -12 -4 1 14 -8 14 27 -60 -19 37 3 -34 26 26 -30 -8 39 46 -11 12 -34 15 -51 32 35 67 -31 -46 -1 -14 -31 25 12 -4 -10 6 -40 -25 4 8 60 46 26 -24 -37 -4 15 -4 44 18 80 44 -1 25 -16 8 -8 91 -21 25 -2 -42 -26 -2 54 5 -30 -3 57 8 -23 -52 30 73 -11 -33 79 -51 78 -4 90 25 -2 -31 20 9 -4 -39 -82 -1 -16 -27 -50 21 -47 -15 30 4 -14 -34 -42 -22 -24 -24 -41 -40 20 11 -24 -86 -7 71 5 43 28 20 -29 -4 67 79 23 -57 59 -43 36 -74 25 -89 -2 -16 -24 2 6 28 11 -7 -27 53 -12 -9 -14 -19 42 -5 40 1 14 7 -35 -4 -11 27 4 -2 -15 23 -21 24 4 -20 -31 6 -26 27 7 -15 46 -7 7 8 -25 -5 -34 -2 15 -49 0 -6 -2 4 4 28 -5 -30 -109 50 -13 9 -56 95 8 33 17 1 56 24 73 -30 23 -11 -79 -83 77 -31 -40 -125 -21 -13 34 -3 57 19 99 -59 82 -14 -11 9 58 -22 47 -53 -71 -32 -14 84 18 -3 -28 11 -69 36 81 49 45 -12 14 32 82 8 -13 41 -4 -71 -48 -23 -3 -8 45 28 -39 -46 59 -20 52 20 30 -47 -20 -33 37 15 -29 -46 68 -41 -25 93 24 -46 -59 12 14 31 9 -55 66 -54 -7 -31 14 44 -5 25 4 -20 -73 -29 35 23 -45 36 28 65 -41 -11 -12 -10 8 6 -2 -18 11 -22 5 -22 0 -28 -7 23 18 -2 -9 35 -12 -4 27 -15 52 -2 6 43 -8 3 21 18 -72 -63 20 13 41 7 -57 -57 55 0 10 65 33 65 46 -2 57 -36 -49 41 -65 28 2 64 94 -46 43 56 30 -40 51 23 -7 46 121 13 -86 -24 51 28 8 -26 124 3 2 -25 30 -52 13 -61 -85 -90 7 1 -62 67 23 -25 -74 -18 -71 79 39 23 -24 20 -44 36 67 18 70 3 25 -13 0 23 16 34 -10 55 -91 25 8 -10 -82 61 -97 7 -5 -60 33 25 90 1 6 14 -9 27 1 -30 -49 52 52 26 -12 -1 -23 -21 -32 10 27 -1 1 12 -14 -10 6 12 -21 -8 -11 54 -35 27 34 31 6 36 -24 22 34 -1 1 14 -25 25 -2 19 0 -40 23 21 -27 0 11 -36 -8 16 -7 40 -56 -13 -28 9 -42 -10 -20 26 2 -32 32 2 -61 8 0 -18 -15 33 49 -21 0 -3 -15 6 -60 -4 -37 1 -16 -16 -39 12 7 2 1 9 -1 7 19 19 29 51 -11 5 -11 26 -26 21 -26 7 4 9 3 -29 1 -21 -10 21 -5 -26 35 4 55 9 -11 11 -1 -24 -2 48 -14 -21 45 34 11 -38 -23 25 -3 -43 7 -20 -78 -29 -21 -17 -22 -4 17 -30 -35 -12 -31 -26 -30 12 -38 5 23 24 -16 -25 1 -12 -15 11 -23 -45 -28 4 9 31 35 29 16 25 -18 -18 -18 8 -7 39 39 -15 -28 -34 -33 9 -36 -24 6 22 -1 -23 19 8 -16 16 17 28 -31 51 -67 6 52 -72 -13 43 120 18 -15 58 -30 -60 41 -12 26 -65 -28 48 -4 25 -87 -12 18 -61 -40 -11 -30 -39 24 24 -31 -40 42 -49 -120 24 -5 -34 -94 56 -16 5 -42 75 -120 9 -21 -35 -6 -14 -5 18 -2 -22 -17 -13 25 -5 -5 -56 6 1 -2 10 7 -11 -26 -12 51 -9 -12 -16 12 0 -27 -5 13 17 58 5 15 16 11 69 4 -17 34 28 68 -57 39 0 -19 -42 36 71 27 38 24 44 54 3 1 -24 16 -6 19 2 37 -2 45 -44 -29 -49 -42 -23 -9 -6 -10 26 -20 -31 25 16 26 -27 30 33 -19 24 -34 -32 -25 24 -9 35 18 -7 41 -24 13 -51 -29 27 -14 -60 75 73 -14 3 37 -19 -29 -46 -43 43 45 -19 -5 -29 -33 58 -33 72 -35 -17 -45 -31 -3 -28 11 -3 0 -4 -35 -28 86 -14 -13 -17 11 74 -42 17 -27 62 -12 27 -2 62 -2 16 25 46 38 33 5 -22 33 5 25 -12 -44 7 32 -17 -5 -14 92 31 -28 23 -36 29 -14 41 24 5 40 -8 -17 -60 48 25 -40 -62 -51 38 5 -26 22 -24 -18 -10 56 -51 -51 -20 6 28 -16 -21 -35 -22 -25 12 8 -15 2 25 -23 21 -34 -17 -5 -40 -38 -11 11 -7 -30 10 2 -47 -17 -19 -10 35 11 21 -23 -20 -55 -20 -1 -34 -18 -15 -32 -1 26 -11 23 3 -13 6 -42 -2 -5 -61 19 50 9 10 -11 -18 -14 -11 4 -40 64 32 -118 15 28 -24 6 17 -65 5 58 -18 16 -10 41 65 -57 8 -1 -10 -11 21 21 39 -41 -53 55 2 -31 35 64 25 42 55 -13 -6 36 -41 -49 19 37 -16 -52 11 -21 5 -4 -32 45 15 -20 -6 99 -13 23 13 -39 -14 -15 -9 33 -12 -19 -15 -18 22 27 0 -26 -19 -14 -14 5 -8 23 -6 22 63 -21 32 -11 -27 9 40 -24 -14 -6 -31 58 -7 -8 -29 6 -39 -17 34 -7 -27 10 -17 -4 22 14 38 37 -15 4 65 -13 21 -8 23 51 -43 19 40 1 10 -32 12 8 -24 25 -25 -5 -11 -24 7 -27 5 18 25 26 -60 -36 -69 23 75 2 22 24 -2 -13 -6 -16 -20 20 10 22 20 8 68 -36 15 -32 16 42 0 25 -7 73 17 6 -3 2 -11 16 -38 26 40 -10 -14 35 48 26 1 30 -28 -6 14 -16 -31 6 -26 -38 -48 30 44 -22 -5 12 43 -16 -31 -30 3 -16 18 0 -42 -40 33 -35 -33 44 42 22 22 45 14 8 -18 -25 -6 -33 53 -8 2 -31 38 -10 24 -6 29 22 -9 -24 25 2 -33 -26 32 -3 -17 0 14 -24 -16 -6 17 23 14 -60 8 -2 1 28 -29 -9 -32 25 12 -39 29 32 10 8 -6 -24 -23 -19 -12 7 27 2 -6 23 -30 22 6 60 -7 -8 0 1 9 6 47 -3 -25 -18 3 -19 4 14 -33 4 -57 -29 -20 16 1 -27 -21 -5 15 -14 -3 4 -13 -33 5 20 -1 3 0 -6 -43 35 12 5 -37 -34 -22 -1 -45 24 25 9 3 34 9 45 12 -4 16 26 -6 -3 -11 -2 4 10 -25 -2 -19 -36 -18 18 -12 18 43 -63 -35 10 41 -11 24 -30 23 42 -11 -50 -35 1 0 24 30 43 -9 0 22 -38 17 0 61 -5 37 -17 -47 -27 -18 -20 23 -2 53 -36 -39 27 -33 39 -7 -23 -25 -7 17 -6 -34 -19 -16 -55 26 6 -2 -6 64 -7 -15 24 15 43 -8 -12 22 14 26 15 26 -39 -12 -19 16 18 -15 -15 -2 22 -12 -19 -12 -26 14 -26 50 12 -16 17 48 24 -43 -50 0 9 -11 -44 -32 38 3 -7 -27 8 48 -23 -10 39 -32 5 -44 24 -8 10 33 -74 43 -3 25 57 64 12 31 42 16 17 -32 -13 19 -2 51 24 -1 -14 -27 -10 -2 -6 -51 -6 -2 4 1 -5 8 -44 38 -10 -12 56 -36 11 38 20 27 36 49 24 30 16 -27 -4 -2 -37 21 -30 -24 16 -30 63 -35 3 -8 -37 -11 10 -2 -19 -25 4 -3 -21 -21 -5 -7 -25 -17 3 6 -25 -8 -5 -10 -37 -14 -11 11 47 17 -16 28 -9 5 28 19 16 30 41 -23 -26 -25 -44 -16 -8 20 -5 -30 -25 -52 4 -14 43 19 -1 35 1 -51 -14 -10 106 9 -54 48 15 35 -62 18 50 -80 -47 4 -14 35 9 -35 16 -25 48 18 12 -5 -43 -25 -45 2 -15 24 58 -4 -57 -8 -26 -54 -73 -2 -33 32 -30 -60 -46 9 -33 -36 -30 0 28 27 5 15 56 28 4 10 27 42 58 25 -43 53 10 27 11 1 46 -43 16 -76 -26 -70 67 40 33 -35 -60 16 38 9 -70 0 0 6 -17 6 113 -23 44 33 8 55 -13 -58 -44 38 25 5 25 20 -19 2 -45 22 -18 59 32 -13 -8 -2 -45 -29 -30 36 60 38 -4 17 11 17 48 -23 -29 30 0 27 13 47 2 12 2 4 44 -8 -29 0 3 -32 9 26 27 -28 -93 -12 -99 -53 95 -50 9 -60 -25 -28 3 -18 16 -92 53 5 8 -69 38 -20 -21 -8 -113 -40 -44 36 -80 -5 -86 -6 -25 4 -38 -20 11 -52 -95 -45 -52 24 -31 8 -7 -5 -25 100 -40 3 21 19 47 -15 32 31 37 15 -65 18 16 -45 2 -76 61 -18 41 -52 -38 31 12 2 7 -29 39 28 -30 -30 -50 21 -10 8 37 25 8 54 15 4 65 3 33 -26 -46 -12 58 -14 -9 -43 41 49 -1 -30 4 -18 -62 -27 -13 -25 17 -9 25 40 -4 13 -6 -11 -76 17 -33 -14 22 37 56 -8 47 -28 35 -40 33 -12 21 -42 -25 -10 12 2 15 -14 -42 39 41 -32 73 11 5 -23 -45 -22 -5 -5 -3 14 1 7 11 9 4 13 22 -10 2 4 0 -21 6 9 10 -1 -20 3 0 4 57 -1 8 -32 6 10 -13 -9 12 11 -24 -21 59 2 17 16 -28 -7 -47 -9 -28 20 -14 -39 18 -7 1 16 -15 -15 -3 13 -18 34 -14 -23 -1 -15 -4 34 -12 15 9 8 16 6 11 13 -2 -14 22 1 -1 10 -50 10 -5 18 -9 -10 17 21 15 5 -4 53 3 -10 17 6 12 14 0 13 9 -8 -17 2 1 10 -16 11 11 9 10 -2 8 -22 8 -13 15 3 6 -4 9 7 -8 -3 10 -1 4 16 -6 27 -5 10 -11 -8 -7 -4 -12 12 8 4 20 -11 -4 -2 76 -17 -5 1 -51 -23 -24 -4 23 -15 -3 38 -53 -12 1 -5 -17 -21 12 9 21 33 -2 -36 32 24 -33 -3 -22 20 12 10 25 36 32 -10 -19 41 -8 -7 -7 11 62 -21 -28 -23 -13 -5 -37 15 6 2 -38 2 33 5 24 -18 -24 31 24 19 17 62 -1 -54 11 22 -31 17 -33 -40 9 -18 -42 36 26 -15 10 25 -2 41 52 -16 -24 -1 -26 -45 -31 -41 4 -33 2 -40 83 13 16 29 41 -22 -18 -19 38 10 -6 34 -18 -16 -19 -22 -25 5 -39 -25 -36 15 -25 28 -11 17 21 20 18 -3 25 39 -11 -32 4 38 -22 13 -1 -22 2 -8 -10 5 -13 -13 2 -29 24 -13 -5 32 -18 0 -40 1 -31 17 43 -42 -29 -37 -59 2 -59 -2 -20 -4 44 -1 25 110 6 -13 16 15 -16 37 -35 41 -49 95 38 41 21 7 19 31 37 -29 -37 11 0 -6 33 -19 18 13 13 -20 -25 112 -54 -50 -18 -43 53 7 -14 33 12 -46 17 64 5 65 -108 -15 0 11 -10 18 22 -77 31 -21 24 8 14 51 16 5 86 -17 -16 -38 5 19 -16 -26 -1 20 5 -91 -21 -14 -24 29 0 8 6 -14 60 -18 3 35 -3 -24 57 -35 30 -16 -47 2 4 45 -1 47 -20 -24 0 16 34 26 19 18 20 44 44 23 -12 -25 10 -46 -9 -45 3 -11 7 39 -22 -29 -31 -1 12 -6 48 -8 20 28 12 16 -29 11 43 -14 -38 -42 -103 14 -42 21 -16 -19 -20 -65 -33 -33 -14 -37 21 0 47 -37 19 -82 -49 -26 23 -18 -4 41 2 -11 25 5 41 -14 -22 -51 38 46 12 25 44 -46 -18 51 35 -18 49 -13 6 22 -27 22 -62 -1 26 -34 51 -4 17 -42 69 26 -26 -41 87 -31 -14 53 35 11 23 -37 5 -35 24 -30 -38 -22 -4 9 31 -89 -69 47 17 -4 -45 27 -28 -4 27 -18 -54 -54 -5 -46 23 20 36 -18 -19 -11 20 -15 37 4 -3 -9 10 4 -7 -8 -28 -5 -6 18 68 -34 21 -12 -36 -19 -12 -7 -1 -19 -39 10 -19 -31 -44 -11 -22 36 -69 8 -12 -78 40 -11 -3 -17 53 52 22 31 -3 -8 -6 7 24 47 55 -23 -21 -8 -31 -2 33 -82 58 14 23 44 -33 65 31 5 28 -34 -1 -9 -47 16 60 -17 -57 56 -84 48 -22 28 -9 -5 28 -39 63 37 -1 12 73 -49 42 -23 -25 -47 117 -120 53 -20 47 28 -53 -30 2 -3 -73 6 27 -41 -8 -20 54 63 -22 -31 -21 -61 27 2 -9 22 116 35 -22 -52 -77 39 49 15 8 -10 26 -21 37 -40 30 -71 5 -56 54 4 -33 -1 49 -13 20 24 28 -4 -69 31 -10 28 -2 -1 -70 -23 -18 -4 -33 -7 -9 -45 2 40 9 -24 -10 -3 -9 38 -35 72 7 -22 1 -11 19 -33 -28 26 -22 -58 -40 19 1 -23 2 7 24 -36 66 -4 -1 29 22 2 -61 42 11 -125 68 -42 27 -1 27 44 62 -79 35 -26 -80 -2 6 13 86 49 -9 -29 -10 126 -54 71 -4 -26 -80 -20 56 9 -27 -68 2 -43 48 -36 38 -22 -11 -62 56 -31 -51 52 -61 -44 61 -70 -122 -67 -93 11 -50 64 15 0 -33 -61 -23 -34 -12 30 -97 -16 -47 38 -41 43 0 -27 5 -16 28 -71 -43 3 -5 -8 17 20 23 -11 -40 29 12 -54 12 51 25 -15 -24 1 -49 -26 -52 -13 6 41 -11 7 -28 -29 16 41 -75 20 -21 8 -55 -17 55 -11 29 32 -18 -8 -2 -70 15 -9 -17 -23 -54 -87 95 127 -125 17 -118 -127 61 -77 -12 6 -42 -30 -114 111 -83 69 -102 -45 -125 -14 110 -53 -2 -15 -17 -25 42 71 97 51 127 -74 -51 116 9 -63 -80 -32 99 41 -6 15 57 47 -19 3 -125 -26 82 -127 -101 126 95 121 123 121 123 -88 -78 125 -26 104 -126 3 125 17 94 21 -123 -73 127 83 126 127 -91 72 -40 -125 -20 -16 105 -59 64 -55 79 -64 85 -35 -22 13 -112 -38 107 28 -77 26 -83 109 115 126 -25 127 -120 -8 38 106 13 127 126 7 15 53 62 -85 88 38 -7 -116 103 126 111 -22 -38 -74 27 -76 35 54 -100 75 33 24 82 -56 30 -127 -68 126 -46 -83 62 5 11 -3 -1 60 -115 -61 -9 -116 92 -73 50 32 -34 91 111 125 -42 121 -122 70 127 -35 -10 74 10 72 -57 -78 53 34 -24 4 62 -33 -92 39 9 16 117 -27 112 12 15 -83 82 -104 6 81 -31 64 1 124 3 -121 -128 -41 125 -98 127 -32 6 7 -84 53 -66 9 -112 62 -12 -111 -69 -127 126 105 64 21 -41 -101 127 -17 66 47 -119 -88 -128 -9 -49 79 -88 -31 37 113 -37 -51 -45 -46 -66 -81 -112 116 36 -30 -128 124 -126 -70 22 -46 -85 125 127 -68 64 -90 -10 99 72 -124 76 48 71 114 103 -2 5 5 19 17 13 9 -53 45 -3 -45 123 127 -18 -87 12 -126 50 24 115 125 105 -128 -102 72 -19 124 -88 -77 127 -5 -21 -121 -40 -117 53 127 -70 -49 120 -119 48 -60 76 8 60 56 125 -47 -37 71 -4 98 -67 -87 -29 5 38 -64 -75 21 51 37 -90 39 70 -47 31 124 -27 -7 49 -126 -20 12 -63 -125 115 -42 126 42 -82 122 1 39 25 16 112 68 16 100 9 -104 29 35 26 -124 1 -63 69 -125 123 -72 60 66 69 -24 -106 19 127 -127 -15 -58 -91 -100 33 -128 36 19 -12 -40 125 -2 45 -127 -27 -43 64 -29 -36 124 17 -84 34 65 -60 53 -98 58 122 -18 70 85 61 -18 -73 -28 93 -2 86 101 -14 72 24 -39 13 75 53 45 10 57 -20 -49 42 -19 16 -11 -109 -70 -103 55 22 126 -41 62 -61 -71 -83 -95 0 127 40 -56 127 94 -65 -3 -99 -79 -117 105 33 -5 -117 -44 54 63 98 124 -99 -123 14 -99 -127 97 -53 16 119 59 -128 -103 42 -48 120 17 127 -119 127 -63 -45 -98 127 124 32 126 126 102 -16 -35 127 -22 -128 -84 23 108 -30 -121 -127 116 -57 -128 24 -127 -16 -125 -117 47 125 12 -126 120 -107 -7 -90 -102 -30 69 -46 -59 73 -128 22 16 16 -28 94 -62 -69 -128 -61 -38 6 50 -125 126 125 -127 127 29 -72 -48 8 123 -36 -127 -124 78 33 -25 58 -24 -3 -48 -21 -13 -128 -84 36 127 30 -41 43 -128 57 39 -80 -64 86 -123 48 65 -52 30 79 127 67 67 -118 72 -125 -4 -127 -86 -120 84 12 12 -26 -52 -4 -62 -21 127 16 -111 -112 7 117 46 -114 127 99 -28 5 -54 -67 -33 33 125 127 12 6 -109 -64 -108 99 65 -26 13 100 -102 38 -11 17 100 8 -2 63 -75 46 -123 3 -122 -20 -37 -27 -125 100 -8 -126 25 -8 123 95 -126 127 73 -128 56 -121 -88 23 102 69 26 -128 -61 -15 98 11 18 127 127 125 -88 -38 27 90 -51 124 49 -64 51 48 52 -18 76 84 83 3 -125 80 54 12 -91 92 -61 17 117 -101 -106 117 20 -55 -67 -97 -91 -128 74 126 -25 -10 53 -105 14 -126 -3 54 12 93 30 20 -101 -128 -98 -111 -59 -5 15 4 -43 127 4 -65 49 49 -107 -44 -128 14 102 84 -32 -62 41 -2 -73 46 13 -58 93 -4 -24 -109 -50 -128 -43 -23 -90 34 -43 8 -60 75 -15 -50 127 -114 -128 120 119 63 41 127 87 -127 -121 120 -64 30 64 116 10 55 -125 57 -116 -117 42 101 96 109 127 -128 80 8 -122 85 126 -78 -6 127 126 -126 -128 -14 35 21 -63 24 -37 -107 122 -123 -46 126 -56 106 125 -90 -127 71 25 -11 -29 -113 121 -80 110 15 -125 -18 71 -116 127 -124 63 98 -43 -9 -66 -37 -63 -35 -4 120 2 -124 82 8 75 -128 -50 52 69 -8 -74 -127 -13 55 92 84 127 0 12 -54 69 -95 -69 74 -128 -29 -10 -91 127 -94 59 -33 127 77 -35 67 -82 -121 52 18 62 45 1 -128 -84 57 -50 64 88 -108 -13 -80 -26 -20 18 92 -81 -10 -92 13 -75 34 1 -127 -128 -58 -24 127 -26 11 17 -47 -103 -127 68 -127 53 -126 19 127 65 39 -1 -87 70 121 -110 -90 -38 44 -29 -65 -15 69 123 127 68 10 -127 120 126 70 44 76 124 -127 50 117 11 -121 77 65 -34 -125 -42 -36 69 -46 -39 109 -42 -20 -125 43 -37 11 -33 -37 -127 40 127 8 127 101 101 -115 13 83 -118 -47 -68 127 -69 36 -10 27 -5 125 -2 -126 102 -128 -3 50 -103 124 30 -87 -126 76 -121 12 -53 -24 127 -123 -124 108 -125 88 88 0 -77 -126 127 -23 124 127 36 -68 -106 -78 127 125 78 82 -128 -48 127 -43 127 -41 60 13 -4 -128 -97 38 85 -73 -84 -38 41 115 2 -41 -119 105 -128 30 -128 -32 91 127 104 -102 43 92 126 19 -123 44 -30 118 -27 127 8 -7 123 124 -59 126 -127 44 -119 90 -121 94 -10 122 -40 69 2 93 95 -21 104 122 -53 48 119 51 117 -127 -42 -28 127 -52 68 -83 127 48 38 74 116 90 -128 10 56 127 -97 88 -128 -126 122 9 -111 113 -108 53 34 75 126 64 77 127 -10 127 -38 -50 -35 124 103 -75 15 -126 88 -89 -126 -6 6 6 -56 -104 127 -71 -53 70 31 88 -65 2 -54 -12 30 -20 -60 -127 124 124 21 125 115 13 -4 10 105 -29 -126 -103 -105 -40 127 -13 -127 -46 90 -60 23 126 -127 -71 3 -14 56 -63 -125 78 -78 -55 -127 86 72 -82 -85 39 16 -31 62 -102 37 114 -90 127 -14 -50 -21 16 9 94 84 56 -62 91 1 9 -63 99 -2 -76 83 -117 -48 -93 -89 110 124 -110 119 99 82 -13 -51 -111 125 18 102 -49 49 -68 5 125 -91 77 94 3 2 5 12 95 124 -93 126 125 -120 0 -98 -70 -46 -85 -117 -75 57 79 -52 100 94 -84 16 -104 -83 64 96 22 69 -126 -39 109 -124 94 29 -55 125 -118 -71 -72 -125 120 -116 104 -98 61 -127 127 -30 125 -110 127 70 62 126 -120 -73 -28 -40 118 -13 -90 69 51 81 -127 -107 -128 -44 127 122 42 -128 0 -33 56 76 29 -79 18 -103 100 -35 -108 -125 108 -12 -74 48 126 49 -86 20 51 102 5 -51 -91 -126 127 -89 -128 52 120 -90 69 46 66 -99 119 -122 -38 -66 -109 -126 65 127 -49 64 -116 -49 -127 -128 123 59 -115 53 -50 -40 -13 126 -113 -68 127 -72 -91 125 -55 -74 126 -125 96 -1 -96 52 53 -114 123 127 30 71 4 -36 55 -118 42 94 -45 -103 2 -21 -117 24 35 82 -123 25 -102 -125 126 -63 -120 -8 -126 76 127 70 125 126 -18 126 -128 -3 -126 -6 67 121 125 -127 18 -83 117 -45 120 14 76 71 127 122 -72 80 -60 -104 49 -106 31 8 -56 -26 43 -58 126 -76 63 49 36 -128 -62 -103 46 -122 84 -53 -124 103 -57 127 127 7 117 -128 -12 -128 60 16 127 33 5 127 50 31 11 69 4 33 -32 -121 17 -105 51 19 -18 115 -127 -42 -124 20 66 -32 127 127 26 124 59 25 -8 102 -128 -27 -11 106 -38 -23 -81 10 -116 73 32 -122 123 120 -50 116 69 4 114 44 32 66 62 127 80 38 42 -55 100 -46 124 111 -67 119 28 65 -13 46 127 -51 108 123 47 -93 60 -118 23 -123 -114 109 126 -124 -124 11 79 7 -26 -67 -13 -116 -7 117 -102 -117 57 -128 22 -68 -124 17 -83 -79 36 125 -61 7 -125 -16 56 75 50 -122 -18 107 -13 126 123 36 126 -82 -85 -20 89 122 2 127 -128 -87 127 25 -125 69 8 90 56 -29 -48 -17 125 19 -104 49 -29 -24 -56 -70 30 -14 66 -128 -69 120 79 126 -116 64 15 -39 -66 -6 -127 117 57 63 -123 19 126 63 127 -4 98 -124 28 -104 20 -113 125 123 23 127 118 125 -128 -66 84 -32 91 47 28 -78 -128 -36 -2 38 -86 127 36 -49 121 -116 -127 -22 53 -106 109 -92 -53 118 73 -43 118 -3 -76 39 -29 126 50 -42 70 -27 89 119 40 -115 -97 -39 -74 51 -59 123 23 -31 126 -7 -127 -24 -60 99 11 -92 19 29 -104 123 46 20 124 122 -128 -1 -23 -124 127 53 -91 -51 106 5 110 31 121 -111 -33 -55 -61 83 -128 127 -11 124 -36 -68 52 -128 127 54 111 123 -123 -44 92 -100 -82 3 -109 38 126 58 -26 44 89 20 8 -127 -48 126 -48 120 -58 -70 93 -96 116 -60 -54 -83 20 -21 -127 30 -54 108 46 26 -26 -7 4 -128 -60 127 26 67 -56 40 69 30 -61 120 -4 -16 81 23 72 -47 104 55 84 -13 56 -80 6 117 116 -6 -62 -68 -59 -114 16 -50 -31 20 -9 -122 -122 24 -52 -1 -125 127 -78 127 116 51 -7 -52 -3 114 -127 121 56 108 55 2 90 127 -34 87 72 9 124 -105 126 79 -24 44 11 97 65 46 51 -117 -127 125 -126 -7 -123 -109 -93 79 126 -25 71 -58 -35 -22 -102 112 127 -62 -125 -126 -52 11 24 -113 -101 -9 -16 -15 -120 44 123 -35 -2 -115 -92 14 118 -19 127 127 124 -127 56 -122 59 -34 127 40 -47 -127 126 -89 127 80 -63 82 -37 -12 -127 1 10 -57 -79 120 -60 109 -121 15 60 -96 2 127 -68 13 53 90 119 15 115 102 -125 111 112 124 123 -102 -93 -16 119 -117 76 -18 3 -95 127 126 -94 -91 -87 -37 97 125 -39 -42 127 -120 127 -84 96 -126 -1 97 37 17 -97 106 50 -85 30 -3 -72 -101 127 32 125 -4 -68 68 -119 2 -49 120 54 36 126 -128 -33 -112 -110 124 79 -2 55 79 -17 20 -125 -128 -69 -127 -67 74 -11 -23 -2 -126 16 113 -128 -124 -3 -109 100 63 48 124 -16 -4 81 127 -100 73 24 -48 13 126 10 -21 -84 -51 30 124 105 48 63 111 48 -73 -6 -43 103 -49 -23 66 -103 -6 127 34 -127 -80 81 98 69 -19 -123 21 -3 -17 -13 -102 -4 -102 15 -38 125 67 -5 65 -33 -39 -75 -113 80 -5 -103 103 91 -106 117 -117 -122 -8 10 63 127 -127 -100 47 78 -20 -58 33 62 -33 103 127 56 -22 -116 5 -55 -15 55 -17 90 -19 -104 58 105 -12 109 74 -12 111 -53 114 29 -58 40 36 -26 87 -83 -122 -108 16 29 -38 -99 51 -115 36 -84 -111 49 -103 -128 97 -20 -109 1 -48 -61 -76 125 115 112 127 -112 -105 -44 95 -66 -123 -109 -85 86 47 -80 -8 112 127 1 78 127 -110 -98 103 -75 124 47 -16 -120 37 -41 39 38 -127 -77 -88 127 18 -19 -30 -128 61 -14 -80 -90 -53 -99 106 -10 124 -69 127 -127 13 124 122 26 -126 -116 -127 88 -26 126 -9 32 -126 48 127 -32 -86 -52 -125 -119 -5 13 -46 94 -42 32 -26 -11 17 -14 126 31 125 55 -24 -126 -124 -119 125 75 -123 -79 22 63 -47 -128 127 -41 -6 127 116 122 -100 62 -40 127 -45 121 -50 -122 29 125 86 -128 -18 -115 64 127 -128 126 -10 -78 -122 13 -48 89 127 -27 125 -16 -10 1 2 46 53 15 -76 -22 -10 -40 18 50 -22 -78 -26 -31 -53 31 -6 87 8 -53 9 -91 -57 -51 -53 2 19 -51 40 46 50 -23 7 -67 13 -66 -126 -106 49 9 -26 30 -11 -77 -47 -18 16 34 -63 -18 45 -84 68 -46 54 23 -29 -22 14 -9 10 27 80 18 74 -77 -53 16 -16 12 -119 56 66 -24 -50 3 125 30 -126 -56 72 23 -128 19 -23 -84 103 -89 -5 27 62 -28 26 -32 -32 50 -126 -128 10 29 -29 -121 -128 5 59 10 30 57 101 10 -40 -30 -21 69 62 -26 41 57 71 -16 15 -31 -33 12 -13 -34 -14 39 40 -19 -52 -20 27 5 -125 -4 6 51 -48 -34 61 95 15 -6 -7 43 -10 -99 90 -36 4 33 49 -85 -79 -5 44 32 -20 -6 16 -69 -3 -61 -5 81 -3 43 -85 -26 -31 -26 -83 126 -24 -40 5 -23 49 4 -23 -127 -46 -15 -10 -1 24 94 -27 87 -128 -33 -1 -25 -12 -10 -4 -10 -5 13 90 115 -118 75 56 78 -123 9 50 118 38 -47 -17 127 51 -19 43 83 -101 127 -28 44 114 40 95 83 8 92 64 -110 115 75 2 47 -69 26 18 121 22 83 -2 -77 -72 76 55 53 69 27 44 94 -57 -24 66 -84 -85 -7 103 -87 61 119 -73 -56 102 18 30 -37 -19 38 -125 -58 -41 -105 2 17 -89 9 -14 19 -4 115 -29 20 40 46 67 -33 10 -63 -29 -50 -103 -48 -99 22 103 -68 -26 -71 47 12 -42 24 -124 56 -49 -13 36 -25 7 -34 12 -26 9 5 -105 4 7 -84 43 40 73 -34 1 9 -43 40 -2 66 106 -55 -25 26 67 30 127 59 107 -124 56 -1 -54 -49 127 -37 27 -39 27 -57 -60 19 68 -32 78 -107 -5 21 1 46 -13 -46 45 83 -75 119 -15 118 127 4 -75 -26 10 -78 37 29 5 84 45 125 -102 38 -46 72 74 19 31 21 88 8 10 52 126 -62 -13 50 -5 127 57 -96 -44 -124 56 -124 -48 31 -73 -32 -31 -12 -13 -16 -36 45 23 106 30 -61 -26 30 81 70 -12 71 -6 -60 67 6 -19 -23 29 94 116 -83 58 105 -107 124 116 -28 -94 -126 127 -58 127 40 43 60 -120 -45 -83 -49 88 114 73 14 -37 -84 57 -19 20 60 112 7 -35 64 -94 75 -53 -109 -24 -47 57 14 -9 39 -66 -119 10 9 -50 -101 -82 82 -62 -17 -35 10 -128 -92 -127 -89 44 23 -82 91 -34 10 -20 48 126 -2 67 -118 23 122 -89 121 58 105 94 21 30 34 5 71 -127 97 99 1 -81 124 -88 -117 93 -14 -9 2 -54 -27 -43 -39 22 4 -128 63 -30 -74 -23 107 -58 -126 59 47 -71 86 -72 47 -50 -17 62 -84 -47 40 69 20 82 70 -34 115 -20 10 -114 -27 -48 -19 -76 103 -78 -40 -100 0 -47 39 -40 -127 27 -70 0 36 -53 -123 -21 -126 4 -10 65 -27 -124 8 -83 -18 -122 -19 60 23 116 35 -21 -15 -86 -7 -3 -88 -67 -89 -3 81 -71 -99 15 -96 72 -38 -55 -38 -9 -5 112 -106 126 -28 -125 127 25 78 -36 127 -17 -124 -124 -69 -109 46 15 -67 33 118 122 0 -40 -107 122 -116 127 103 -100 119 71 77 56 113 127 127 -41 5 -124 -21 -54 -74 -19 69 -2 127 5 -29 92 -127 94 -68 11 -54 86 80 -11 -77 -36 -47 -121 127 37 0 63 44 -3 118 -21 -12 103 72 44 -128 -93 -23 70 71 10 -23 -44 125 -45 -108 6 71 -126 32 -32 -21 44 14 80 21 6 11 126 24 -15 30 94 -19 -18 -58 68 -118 -53 -64 -12 -27 -19 50 10 121 27 29 17 -29 -41 9 -127 88 8 93 -127 64 -74 -60 2 12 87 -14 -119 126 126 -98 49 11 6 -44 -82 -13 -34 -85 41 -80 -96 59 73 -125 -6 28 126 -9 -36 -99 -101 -92 127 19 -2 74 19 126 -52 38 121 47 104 -13 -39 38 -44 -72 -38 -106 -3 -36 -125 -127 -80 95 1 -94 -74 -126 47 45 117 -6 -120 79 -55 -28 -81 -64 -47 -6 -90 3 -33 34 61 92 21 -66 82 57 -54 5 33 6 10 50 -27 -104 -19 -29 12 -115 94 94 12 -39 22 -22 25 -85 79 -18 61 -115 -127 31 63 16 -53 -27 -89 84 -126 -3 23 32 -70 -77 38 -24 49 -32 32 8 -36 70 4 -47 -48 51 -20 -94 -49 -19 16 55 34 -48 40 -27 -34 39 12 55 -113 -94 4 -19 -58 13 -14 -28 2 40 21 65 127 -26 50 -60 26 22 -22 -7 56 -21 -64 8 11 -20 -2 -73 -57 -18 -3 -82 16 -52 -94 -24 -36 35 25 -25 -28 -102 -57 -59 -3 7 -19 45 -17 10 77 29 78 -22 125 -86 -67 -5 -123 -59 -85 -15 -23 39 -12 73 0 -74 4 -22 2 -16 -83 -92 34 36 8 -110 -125 4 13 -56 38 13 -45 -116 9 66 11 23 -2 -68 40 -29 -3 39 108 -62 87 34 -56 32 85 43 -36 -31 58 72 -1 -52 -12 41 7 32 -8 -6 73 36 22 -54 25 -64 36 12 81 77 55 -52 -64 0 5 3 -17 -54 -14 -61 -71 28 45 34 65 59 21 31 -49 87 -117 80 -36 48 -22 -33 -36 89 -13 24 13 -18 11 73 73 62 -98 38 -14 -48 -56 -51 -27 -119 -7 -30 -88 -16 75 58 -26 124 107 23 -38 -91 -9 6 -44 111 -49 -52 -47 9 112 76 -54 -23 -50 -118 -46 -11 20 123 -111 25 29 0 41 -100 -30 36 80 -37 10 -10 31 50 -28 -34 -44 56 -77 13 44 5 119 -18 64 14 44 -64 -16 81 115 87 22 -12 -29 51 -29 45 23 -63 93 57 16 107 -34 -113 -38 -12 47 91 41 11 118 101 2 88 -4 -24 -40 30 81 44 -46 -100 -25 -36 -26 76 -88 -37 40 8 -45 -116 8 -8 -28 49 29 31 70 82 -50 -58 88 78 51 -45 82 44 -4 -34 -66 -67 89 40 16 -43 84 46 -128 -80 -42 -23 -61 35 4 -23 -24 -25 -22 90 57 21 -7 -22 2 -28 20 -6 21 85 -69 -35 47 -44 34 -55 21 94 -21 115 26 10 -12 -18 -105 31 16 73 -27 -31 -61 100 17 92 111 53 51 -6 -86 -85 38 41 -89 12 -74 22 50 -16 -23 20 82 20 4 11 11 2 85 -63 -40 23 49 74 44 -89 3 0 10 88 -40 -80 25 -4 -59 -92 11 61 22 -6 -4 -27 15 3 59 28 27 43 54 -43 9 74 -33 -9 -44 42 -34 -52 -28 6 23 -18 -83 60 58 -88 1 -39 38 -71 8 44 -128 37 126 109 -2 -24 68 127 -127 116 74 62 7 -82 -30 -103 120 10 28 4 42 30 1 -102 26 0 86 24 -126 116 96 -25 87 94 -72 55 -56 97 -42 5 -19 -51 -48 -76 -46 -18 -37 -78 8 -17 50 -26 -50 123 55 -68 53 62 -74 21 71 -34 127 83 -2 36 41 -17 51 123 12 23 53 38 20 12 -11 -64 53 -37 -9 44 65 -78 58 18 -92 -36 53 -39 -43 42 25 -28 107 -52 83 -23 50 -9 4 -24 -20 -36 -13 28 -37 -31 9 -39 4 98 -96 88 73 -52 53 29 -72 17 30 -12 -29 44 47 -40 -61 88 47 -128 -36 -10 19 96 -6 10 -6 72 -58 126 101 16 48 66 64 -10 126 91 54 38 17 -31 -4 53 -16 -35 -41 -120 -56 -107 -104 -35 -22 60 31 -85 33 -21 23 -19 -32 -87 29 64 -127 -126 67 95 -1 -14 27 118 -27 71 52 -61 -61 111 50 16 -117 127 -35 -2 97 -75 -45 53 5 67 35 29 -7 82 -60 10 -41 46 -127 -38 13 -8 31 39 127 21 -104 29 -124 -73 -128 12 -65 48 -49 24 44 -50 68 -28 -30 67 12 49 23 54 35 56 -13 127 -39 31 25 -27 0 92 39 19 16 -39 -25 11 -18 -8 53 -24 6 -52 113 67 70 39 0 88 -116 -69 51 -125 -41 -99 51 10 -72 -9 -14 11 -99 16 -128 4 63 -128 10 -33 -121 -40 16 73 -60 54 121 -80 -69 -14 127 76 10 5 29 37 -67 52 12 -57 -127 -67 5 29 -45 26 -61 -71 -119 -67 -75 51 64 2 -9 -73 3 75 46 -47 3 -16 -30 -58 117 -105 -17 0 -67 -93 -42 124 125 -50 -70 40 4 69 48 117 -16 -127 35 7 -35 27 -9 -104 27 74 15 -50 36 28 -80 -54 124 -12 -20 -3 -34 -34 -40 -70 -51 98 40 69 73 60 -9 33 -66 21 74 5 35 24 -3 -9 70 -78 47 35 -24 -119 -15 -61 -26 38 -42 93 48 26 -23 -37 33 -13 -35 37 61 28 -122 -48 108 -4 -23 32 -25 -62 -49 4 -18 28 5 -97 -24 -127 -26 -63 81 91 69 -128 41 9 -34 -32 1 -72 -118 -124 -45 -126 -109 -123 -47 -50 127 21 -61 123 12 -65 26 84 -106 -57 7 41 -66 -114 126 80 -2 -12 12 -124 60 -4 107 -67 -80 15 13 58 0 124 15 -71 41 -45 -59 -81 -83 -124 -21 -29 117 -23 -90 -67 38 44 -126 -126 24 14 67 82 -19 127 -28 26 -88 -125 93 -125 -87 127 102 16 -14 -11 70 -43 -10 5 98 -40 1 57 10 99 -8 -127 -20 5 10 -35 0 -2 -124 19 73 36 127 90 10 -69 127 15 -60 -127 -124 -26 -78 68 -58 125 8 -58 -123 -88 -59 122 7 49 104 -26 5 -98 125 -126 -120 -24 11 120 -23 51 -26 -28 74 -31 107 44 -86 -128 -65 80 -8 -39 -82 5 -50 -127 -61 -126 -88 -116 -119 -38 115 -81 25 106 -53 64 -28 55 -128 -57 98 58 -27 -63 126 29 -73 -5 -49 -126 27 25 104 -21 16 -112 -125 68 -54 124 48 -125 124 -2 2 53 -72 -53 38 -53 96 13 -124 -67 50 13 -127 -15 48 -46 -100 8 -76 -18 -25 -27 -125 -9 74 -86 -126 -25 18 24 -39 -9 43 -48 74 44 69 19 71 -61 -123 66 20 -90 7 -16 -45 -122 -10 46 -117 -8 62 5 126 -22 -117 -126 127 -37 -126 -84 -57 24 -7 70 17 -80 -100 -84 -125 -75 27 125 3 -41 58 13 -54 36 126 -31 35 101 71 20 63 9 -52 116 92 45 58 0 -77 -108 -53 -68 93 -97 -14 -70 123 121 125 64 -23 51 -28 -14 46 -49 27 -41 -35 114 -67 60 20 97 26 -1 106 105 -30 -17 3 -44 36 -3 28 -34 14 -58 127 -127 -103 2 53 -71 56 -6 93 -111 -62 125 127 26 -6 -102 -87 -20 -108 -78 -127 -75 -68 66 22 -21 -127 2 34 -119 112 36 22 88 -126 -82 15 -126 -123 37 45 52 -2 82 56 86 -97 -59 51 113 -32 9 -8 -38 89 71 -66 -106 -10 -49 -28 -13 31 12 4 -123 13 -17 -78 -68 -44 82 72 49 13 84 -88 -45 -60 119 69 28 32 27 -15 -124 -58 45 16 -72 -13 55 100 88 -40 6 24 104 -40 28 -27 66 -61 69 93 26 123 -121 86 44 41 42 94 56 125 -11 8 -34 -37 16 16 95 -46 -64 -68 -12 7 -26 -76 -25 64 -43 100 25 -125 120 -126 -1 84 -7 -29 -105 -22 -29 -13 50 48 32 123 -94 37 51 -86 -124 -127 127 10 -87 -18 104 127 -73 -117 5 121 60 -94 -18 -14 -30 -2 -51 47 10 65 -2 99 31 -75 -49 46 104 -36 -6 89 -105 24 44 -56 -52 31 -60 11 103 76 -11 8 45 -50 -6 45 -6 27 -52 9 -22 -44 -33 -18 -108 -44 -22 18 -35 -18 -67 43 31 -37 61 -29 53 -124 -6 -43 -122 -112 -33 8 51 82 -110 8 -72 -20 -20 -11 -16 18 47 40 -16 -120 54 8 54 99 118 61 113 69 -50 42 8 50 62 -31 -12 17 52 116 -19 31 -124 -35 96 66 114 -46 21 -53 81 54 -118 54 7 -94 112 -4 25 -126 66 25 1 17 -128 -127 113 -88 42 -91 -11 30 -97 122 125 -96 -108 14 125 -124 25 2 122 119 69 -56 122 95 -47 -26 -120 73 -56 47 33 -49 -106 81 60 -2 64 93 13 -54 -81 -56 -95 -87 -3 -82 -60 -94 34 73 -19 -37 55 -63 -2 32 -64 4 125 -24 6 -24 -24 -1 -14 -128 -48 -24 -117 -69 -114 -34 -29 -6 -61 -10 11 -43 -12 -30 86 10 -21 -22 -128 6 -10 -12 -125 -2 21 -30 102 -90 -40 46 -44 -70 -58 58 -42 -76 -10 57 34 -61 74 96 126 -13 -36 -43 26 -81 26 -28 64 32 -12 54 -57 104 -125 -66 -54 101 -49 -39 94 -5 121 108 44 125 61 37 28 3 94 90 31 46 -27 30 -113 -126 43 -2 -95 -95 78 2 75 127 -84 -24 -95 26 124 126 1 8 41 52 -33 -45 -27 38 -19 51 64 125 126 -126 126 62 -55 45 7 37 85 59 28 26 126 122 26 -52 73 -27 10 3 78 -124 -58 -65 -10 -46 81 -19 -24 96 -15 78 47 -40 76 75 -23 -126 -104 105 -125 111 127 45 -8 46 -90 63 10 -19 -8 -121 -128 32 -15 117 -127 -20 117 -51 88 -99 13 -28 28 -8 2 76 25 -81 17 12 27 -106 -1 -17 -82 8 -19 25 -3 -2 110 5 -8 126 -15 -126 -4 15 26 33 -117 2 -31 -2 0 -39 -62 81 -73 -49 33 -33 19 14 -52 39 2 57 6 -67 -12 -26 -104 -4 -73 12 -122 -20 -68 49 65 127 13 -8 -34 -77 -34 -5 -85 43 -8 23 -17 44 -121 0 -1 -2 -59 -93 17 -41 96 -57 37 37 -78 -32 -50 -10 -69 58 -66 57 55 122 -55 -60 18 119 -47 -83 -30 37 -124 -22 -6 -71 -34 -3 -51 -9 0 -27 19 -2 -13 35 2 40 -27 16 -65 44 83 -33 -71 32 -29 -10 -9 19 -4 -36 -16 5 -2 57 55 -17 18 25 33 0 1 1 -33 -54 -36 42 40 -8 16 46 -3 10 18 -90 5 43 -37 -61 73 -51 -71 29 50 12 6 -55 99 36 -29 -48 3 -4 39 -14 -33 28 38 13 -30 27 -53 -78 21 -14 38 -39 -89 11 -13 -50 -9 23 2 16 -27 -6 -15 -32 5 61 35 -93 -1 -1 -3 6 21 -5 -97 -3 -67 16 -7 16 73 -67 85 -33 -12 -31 81 -57 5 27 63 -20 -93 55 -40 -64 13 15 -8 -27 -13 62 5 8 -46 -10 -43 10 39 -44 -34 -29 7 61 15 11 21 20 -8 2 24 6 10 -17 5 -42 31 12 -20 59 -14 4 -22 0 -8 -27 -5 36 -7 17 -21 -25 7 -59 13 -33 -1 -40 -39 -46 20 -1 10 24 28 -92 --22 54 -85 -9 -67 -31 65 25 -26 3 16 -60 -100 21 23 31 24 33 -22 -17 -57 9 72 30 36 -3 47 52 -17 47 -39 16 13 36 19 13 73 97 -5 66 -33 1 70 -23 52 67 65 -22 -23 3 -32 -64 -73 22 -95 57 5 31 -96 66 -23 16 -64 99 -66 114 -5 73 10 63 67 -46 2 30 -44 -39 -21 -24 6 -7 -21 18 48 20 7 -34 88 35 2 -15 84 -6 31 -52 17 24 7 1 12 7 -85 -11 -31 -19 60 -45 -23 -3 -26 27 -119 -76 -59 49 -3 41 -31 -95 29 34 35 -43 42 -3 47 92 -8 24 -17 -126 26 -4 43 -50 -32 -14 22 -7 -20 124 -85 -2 92 -31 31 37 47 19 4 -77 -24 25 -20 -14 72 31 -94 119 5 66 98 127 26 26 -44 -56 74 -22 41 -18 44 -28 23 -39 -113 -24 4 60 -3 -3 44 90 122 -76 52 -115 37 -125 15 -40 43 -50 -22 -9 3 11 10 -6 -30 53 -65 74 -30 69 -56 -46 14 34 -49 52 23 -29 -48 -35 -3 106 67 -24 15 -19 -48 -14 -7 82 24 -14 120 17 -33 27 44 -36 1 28 67 -19 -35 8 11 5 6 -70 -112 -37 -10 39 -25 17 -20 -56 38 21 -22 -49 -17 -91 -39 20 -28 67 -20 10 55 40 43 -14 -29 -49 16 -82 1 -43 3 -31 83 -8 -9 -69 -38 -47 34 -10 61 -24 -30 -21 11 -50 42 -69 11 -127 -8 -81 107 38 32 -33 13 -45 59 -44 -37 23 121 8 -42 -9 -38 14 -59 -6 -26 28 -32 -6 22 12 84 50 49 -28 -15 43 41 -30 8 -44 -11 -62 0 21 -24 -23 -23 56 6 32 -25 121 61 13 -63 57 2 -37 24 9 119 -4 -41 -14 64 49 28 -9 49 6 -21 -15 67 4 3 20 94 -14 -36 108 27 7 -38 7 19 92 -57 4 21 -17 60 -13 -113 -3 44 -87 -48 18 -31 79 15 53 44 -15 -61 80 21 -3 86 40 87 17 -124 -39 -32 -2 66 16 2 -95 25 -61 28 -79 21 -29 -12 -5 4 20 23 -26 43 22 -63 -27 -38 -38 -38 -7 29 -36 17 -57 51 75 8 15 -43 -57 -15 -82 -69 -25 67 -35 70 -2 -44 -28 -27 22 -57 -1 -28 -21 -25 -50 -49 14 -7 43 35 96 -18 -102 -80 -24 -108 26 87 127 -11 57 74 -18 11 -58 2 32 56 29 42 70 -128 -35 -8 -6 74 30 -8 18 -35 44 78 6 17 31 16 -2 -50 45 15 -64 -33 -24 -10 -27 -11 42 -11 -102 -19 -33 -5 6 38 -7 -32 42 30 -80 -12 -42 0 34 -59 -12 -28 -39 4 -8 -43 10 -66 -105 60 73 -64 48 102 9 -38 -117 -3 -40 -127 29 -126 23 -17 4 -7 37 2 -85 17 -44 64 -82 -60 -59 20 -25 4 -41 -35 7 13 -100 -21 6 -20 -58 -23 51 -107 -38 -6 -54 44 4 -42 13 5 -93 18 7 2 80 43 -22 32 -9 14 -20 -5 -120 -28 -21 87 -57 -38 -12 20 -44 -35 22 -69 -81 -54 15 -52 -13 101 74 37 24 -12 -46 6 10 -28 35 -46 48 -39 41 -59 -32 -40 18 83 103 108 15 -31 -10 1 8 85 5 41 46 0 57 -49 -33 -20 -19 13 -4 -35 -11 37 -25 -32 -82 1 15 29 -98 -34 94 117 46 18 -11 -1 -50 -59 -120 37 34 36 16 -11 -62 35 41 -84 -39 -20 33 26 -5 -83 16 -43 31 -2 -8 0 116 -21 12 -24 65 -127 -123 44 38 25 -10 -102 -50 59 -44 38 -124 23 -18 -4 -24 -17 43 31 -4 -19 -58 126 -62 -23 86 87 -1 27 -38 -49 -13 -21 -19 12 -20 -68 -54 33 -29 -77 -30 -23 -57 -68 55 52 -30 -73 29 69 -27 -23 39 -32 -87 -25 -61 -58 -15 59 -27 -27 13 43 -125 -8 -16 8 -83 -37 -3 -14 36 -94 62 27 -21 -6 -50 32 -16 9 24 -3 -98 -7 -37 -31 -27 34 23 18 68 14 21 3 -51 -67 59 -74 64 -85 -72 -22 -37 3 -96 -25 34 97 -18 23 -110 2 57 59 -5 -8 36 56 31 18 -28 -35 -13 -18 15 7 12 -11 -55 33 31 45 -111 30 6 1 -27 -93 -16 22 -82 26 45 -33 19 22 7 30 -3 -9 26 -35 26 56 65 -117 19 31 31 34 68 26 -43 -14 -3 28 -97 -29 78 47 -26 -10 65 -35 -99 -38 -49 -28 13 -4 69 -38 -14 -6 38 18 -61 10 28 -25 -57 13 28 27 -15 76 45 -44 -26 46 13 -2 -25 -62 57 6 -12 35 -10 82 -32 -11 83 22 17 5 34 -4 -25 -39 -27 -24 -29 -3 -52 124 -68 17 -96 -1 -3 65 56 -31 1 -7 -34 32 0 -45 -46 18 -85 8 106 39 -118 27 -53 53 16 -70 24 -20 -48 -68 -33 -27 77 -79 -48 17 27 -46 -25 -68 13 -80 43 3 0 -19 57 98 51 42 -5 -25 29 12 41 -64 -68 3 -13 -14 -15 -99 -23 13 5 -37 -12 -42 -113 -37 60 -35 1 5 -50 24 20 -21 34 -93 -41 -88 -41 104 7 12 -43 51 -121 83 -126 -25 52 15 -125 -46 126 -1 14 86 10 87 32 -22 39 5 2 -37 -29 -1 38 -27 75 47 -77 124 36 -61 -19 37 44 83 33 71 -14 -59 -21 -26 -109 33 8 -17 26 -1 51 -1 -23 -1 8 -6 15 -76 20 -16 -15 -128 26 -80 18 1 -6 -30 123 -98 40 57 0 -29 85 33 28 -1 39 -46 20 -123 -53 98 29 61 -8 -74 -32 -59 97 62 -14 -102 125 -73 21 30 -1 -86 40 -56 55 78 -1 -88 -3 -65 15 49 -55 -127 20 47 20 -8 -75 -9 3 -69 -21 -1 16 24 -79 -16 -48 -5 -4 -98 -43 -42 -41 6 -12 59 16 0 47 -110 44 -7 -21 -65 62 -85 -33 14 -54 77 -53 -13 -8 -19 -52 84 -30 -79 -28 103 9 -48 -59 -4 -25 -18 -9 88 -42 -30 -77 -83 -23 -18 29 -36 37 -1 -118 -20 65 -69 35 21 -102 -29 -45 -20 -103 2 94 11 -11 -17 75 17 -5 14 45 -9 45 -38 33 60 22 86 79 72 -3 -7 4 -38 -3 8 -85 91 -46 123 19 -6 -13 -37 -68 -67 -33 2 -88 0 31 90 36 28 -22 -39 7 -91 -9 16 -51 -113 0 38 28 -5 32 -10 -122 -33 -37 -5 -63 25 -65 46 -125 22 -46 23 -21 55 -34 19 -46 109 77 12 24 -53 -70 34 5 25 -43 21 30 -10 -101 -66 -5 62 12 -48 -19 70 10 -114 6 -14 97 73 5 -2 -14 1 -81 7 -22 -6 33 -65 -96 -63 11 -47 16 -24 19 77 17 -18 11 41 -6 67 -7 56 -21 45 14 -27 -44 -51 -73 34 -17 17 -59 -6 -29 74 -9 114 -64 76 44 42 79 27 -13 1 -20 -31 22 37 -10 41 102 62 7 12 62 -34 -42 -29 46 16 -26 -50 -39 0 -38 47 25 -46 -109 -41 6 25 -12 24 -83 -3 23 62 -30 5 -69 92 -20 -65 20 -61 32 52 30 31 -43 23 -60 40 14 -67 20 27 -31 -33 62 12 -105 7 -27 -23 51 -111 35 13 -30 -26 2 25 -101 -9 8 -26 -24 -4 -40 26 13 40 -101 -2 35 -25 -30 -46 50 -73 -11 -57 -22 26 48 18 -21 18 -83 82 19 38 -24 31 66 7 -11 39 52 -2 -13 -62 22 21 8 14 -101 -59 31 -17 -70 46 -64 -7 -38 -51 36 -28 -18 -34 2 6 70 1 38 84 -12 -42 -41 17 9 -54 48 15 -14 -35 -25 -36 7 -44 -12 -39 -20 -84 -118 0 -18 -19 -22 -3 46 -66 -9 -20 22 25 -29 14 -34 -126 -20 -22 34 37 1 32 -7 -56 -23 -5 9 29 -22 20 -51 -28 -32 -7 19 -7 70 15 -27 45 -9 -5 7 60 66 49 -49 2 50 31 -14 -16 -7 3 -42 11 12 -84 -7 114 -4 26 -38 -13 -4 -39 -35 9 -2 -96 11 20 6 -17 50 -6 44 48 22 53 -94 15 -27 71 29 42 -70 -9 -52 9 -67 81 -35 -87 -26 -103 41 6 -46 36 -56 -71 -92 -29 -110 12 -15 -8 -17 -34 -22 75 -96 -2 -9 80 -18 23 3 24 -32 -5 -5 -33 -97 11 -124 49 -10 -29 -22 14 -13 4 -20 -8 56 58 -25 2 98 39 5 -9 68 -38 59 29 12 48 -70 -27 -45 -60 -1 8 25 12 28 23 -18 -60 -17 87 37 -24 -27 34 32 -46 -20 27 -42 -27 -49 -75 34 59 -47 -74 8 -14 -70 -24 34 -49 4 -45 -35 22 -38 -9 -51 -24 -76 17 12 -53 76 -1 16 -43 -14 5 30 1 11 -32 26 -68 -70 -29 -5 -22 -29 -13 67 -26 29 40 -72 -5 4 -37 31 26 57 0 -13 113 23 27 -92 9 -65 -25 34 -27 60 -50 -84 -50 -37 -83 36 46 -29 41 -72 -126 -99 -1 26 -71 23 9 64 0 -3 66 -75 -3 -50 34 7 56 11 -19 43 -23 -109 52 -19 18 12 -1 -2 -27 25 11 -66 -30 -7 -34 -10 -34 -111 41 -16 13 99 -9 -105 41 -82 -44 1 12 10 15 44 21 -2 -115 84 -29 -17 25 45 83 -3 -4 107 -2 28 54 62 40 -25 -3 -1 -77 26 101 -13 71 10 59 82 54 14 14 41 5 -116 -43 -48 -7 -108 -10 -23 -95 20 -30 -33 -66 126 19 18 -80 -4 53 -66 -33 -5 -92 15 16 15 64 24 -78 -24 67 -45 51 6 -20 -49 -39 4 37 -87 126 64 -63 -19 -31 30 -3 12 -32 42 -8 -120 -7 23 2 57 -73 -126 -41 -42 17 -18 4 -2 -4 12 27 -28 -73 -5 -42 54 -26 11 52 1 -58 24 52 2 14 57 38 85 16 12 -12 29 123 19 -42 -51 23 -25 65 39 53 -9 33 22 10 70 11 -16 114 46 7 21 -56 -54 32 41 -31 -36 -7 -14 -39 -7 126 -5 2 -41 13 -24 58 26 -5 89 4 -19 17 -21 16 -1 16 -59 -43 42 3 -23 7 23 -32 39 -4 36 -29 34 -21 -128 -20 -8 37 11 11 4 -75 11 10 28 71 10 50 -66 -16 89 10 -43 -74 -38 -19 36 -18 -14 27 -104 123 61 38 68 42 25 49 -39 122 -12 -76 54 19 -41 -35 -8 -29 30 20 -21 15 -71 -47 13 56 -58 42 -58 40 -36 1 20 -42 -26 -4 30 -7 29 105 -47 3 -30 -8 127 -49 93 68 5 -16 13 25 46 -54 -59 47 37 100 -27 -10 -32 -123 -8 37 54 25 55 -60 74 -31 95 23 93 -28 -6 18 -16 -93 33 -27 20 -15 -65 -82 -77 28 -21 12 6 -2 75 -106 30 26 -53 -45 127 -14 -34 -19 -54 -3 -37 -50 -12 44 24 96 -63 14 49 -53 -60 39 -19 -58 32 7 19 -107 -43 -87 7 -124 -1 -13 64 30 -35 80 102 5 -118 -126 12 -39 25 -91 -55 -32 -78 -58 -126 -85 -68 12 29 -34 28 43 32 -33 -53 -80 -112 21 -10 76 127 -27 52 70 55 47 0 102 24 0 -104 -35 28 35 -102 -109 -17 -22 1 -6 -30 -73 -56 62 -2 -107 39 87 -19 -30 -43 25 -9 -99 -11 -28 -127 -8 -27 -28 -21 -11 -32 30 2 23 3 -11 -56 -28 124 -13 -123 -7 -40 -39 -64 -14 -53 55 -34 79 -8 -57 101 39 18 20 10 -44 -121 -2 30 66 -22 -23 -15 -25 -28 85 44 66 1 -127 -39 0 20 -27 93 3 -43 5 -51 -13 -85 29 33 50 69 10 49 99 58 23 22 -10 43 11 33 41 1 12 -125 120 33 -34 2 32 -64 119 -29 -125 22 18 41 47 16 43 -8 -49 -40 1 -17 -89 43 51 -101 30 4 -23 33 -35 69 -47 -19 -9 1 -93 8 -31 -9 24 -17 -55 -9 -90 -92 -5 -53 -33 22 -58 -54 -9 -13 106 -58 76 32 -112 22 -40 -35 52 -74 78 45 -63 -73 -17 -42 35 126 -18 -22 70 54 -128 -42 -66 51 18 126 38 -37 16 23 15 50 -9 -10 34 -92 8 -123 -4 4 -21 -52 51 -29 44 -36 12 -33 -22 -82 29 -35 15 -51 14 78 -62 93 27 54 16 -37 -101 123 0 -54 13 65 -37 -6 -36 -46 -59 -121 -13 -56 -36 -26 -75 17 -36 -34 -13 69 -14 14 1 -101 -79 19 -96 -67 31 -3 -71 12 -10 54 1 -45 14 -32 8 24 -107 -81 -65 12 -15 -68 -115 -4 28 21 -56 30 -70 55 -94 -125 19 33 65 14 -7 53 74 -60 -38 -60 -40 5 -13 -28 -101 36 -34 12 -98 56 -54 -25 61 31 39 -14 -67 8 14 -59 68 -54 -51 17 53 16 3 -115 -63 32 -47 38 -74 106 80 -24 -12 0 -91 10 48 27 29 103 4 -51 -85 -89 -69 -18 -52 84 -26 9 -93 4 13 -115 8 -8 8 -45 3 80 104 -17 41 -72 39 60 51 -4 -8 -65 -83 -56 -14 8 -12 -23 -44 34 -75 62 -66 22 -64 47 -128 7 -60 -98 -85 16 15 -5 10 -127 42 -78 83 46 -67 14 40 -36 -78 33 7 -42 12 93 -33 17 32 -106 -40 -7 4 40 -24 39 -17 -23 39 -59 -69 -10 -30 -2 -24 65 5 11 65 121 20 8 35 -73 -14 -4 -10 26 -55 0 10 37 8 -91 23 35 23 -65 -10 -9 30 10 41 44 -24 -20 -48 -67 -14 27 85 -26 -41 -38 -50 -115 32 -98 -2 44 -13 17 -108 22 -2 2 -68 -123 8 -72 -59 45 49 1 -69 25 -49 26 -11 -31 -67 -34 -16 -32 55 -59 23 -37 -18 -28 -25 -5 -46 -13 -32 -20 12 51 -9 -85 -35 -38 25 11 -79 110 33 40 59 9 28 11 -87 37 -33 -52 -1 -64 -2 -18 95 -12 6 -56 18 78 -5 -5 -36 -93 28 -54 31 24 -35 -124 58 -1 17 -76 -126 -27 -119 24 32 -24 -28 52 35 20 14 57 -17 14 22 10 6 73 -25 -15 -91 -26 -19 -126 -21 47 79 -54 -18 -118 -123 -8 64 -32 23 37 12 -18 -20 -58 -71 -44 -18 -26 79 46 4 -64 31 -14 -9 45 91 36 -24 45 109 72 -41 -82 -20 -21 -30 -40 -14 -8 -50 -23 -8 -69 38 -15 -1 -23 -24 60 -41 -74 -96 35 93 7 -32 9 -70 80 -4 59 6 -62 43 -42 -3 -88 12 -28 -51 -70 -27 17 32 11 12 80 -63 35 -49 -21 -21 -49 -50 27 -12 -64 26 49 -32 17 -20 23 99 -15 -62 -17 -10 127 12 28 52 -44 -3 32 -70 -15 -37 17 -6 92 -101 -52 11 -13 54 31 -39 -21 4 -10 -107 77 38 -112 17 -4 26 -11 -64 -36 47 -28 -115 -33 -63 -25 -78 -45 1 11 45 -36 11 72 -3 -1 14 -37 -7 65 49 37 10 -15 -45 -2 39 -82 64 -47 28 -1 -56 84 -30 7 35 -51 7 61 -25 -25 60 46 76 84 17 60 54 23 21 85 -62 5 -66 -52 -48 -52 110 16 -9 77 -8 -107 1 4 -58 81 -22 10 -28 6 81 22 109 -68 -34 -116 -6 -128 -47 -40 -93 9 51 -13 -18 26 10 31 -18 -13 -19 125 -8 -50 35 42 37 -33 30 -33 -21 -16 -19 45 -24 23 42 -56 91 12 -87 -20 -20 77 11 23 28 -11 28 -21 20 36 -123 -61 -38 -13 -60 -119 -50 -15 -67 -76 31 51 -127 -14 5 -20 3 -44 47 72 -7 -58 5 27 -31 19 23 24 22 -26 -73 63 82 -17 -28 39 2 -34 -4 75 -20 -34 14 -4 -76 -26 39 17 42 36 78 -1 40 -46 -31 19 85 19 28 15 62 -64 -91 55 -49 -118 -34 -116 19 -80 -41 39 -37 63 18 -13 -6 76 37 -46 -49 9 -32 -3 17 28 38 -16 1 -32 -28 27 -34 74 -17 -27 7 -67 -36 79 -29 71 79 13 27 -9 -60 76 -42 -29 -18 52 45 -12 10 2 29 37 -59 12 52 41 -85 -41 -20 -43 -70 -3 41 9 20 31 16 -72 95 -32 7 1 126 43 -8 -21 -90 53 49 -28 15 -44 55 -28 37 93 -20 68 -38 119 -17 -36 -4 -11 3 -16 -4 -26 -26 -36 35 23 29 31 -88 34 -44 -125 26 34 -11 -33 26 10 -11 18 -17 104 41 -93 -8 -36 -10 -2 -23 7 104 -72 79 117 -50 -86 37 -20 -109 32 127 29 72 8 -82 -51 4 -42 -83 -50 -1 -22 13 -2 -127 71 -13 27 36 -1 -3 78 -13 -50 32 -18 -15 43 -32 90 -54 -26 -91 -17 -30 33 72 47 -89 46 -8 25 34 -20 18 -38 -98 49 -4 54 30 -40 26 80 -54 -17 -20 34 -44 -40 72 45 -80 27 -27 -61 62 -28 -13 22 16 29 39 -55 3 28 25 31 30 66 -97 26 19 35 -71 60 28 43 -8 -78 18 21 53 18 -9 23 53 -10 99 -44 -54 36 16 3 -3 -40 19 31 75 -12 14 -74 38 -28 -1 38 22 57 49 37 -34 -68 -90 -32 24 -7 -22 -53 -7 -8 -43 36 66 -6 -55 23 56 17 35 -7 55 86 -30 -67 -32 -8 -13 -84 -34 123 42 -26 42 25 -32 58 -24 64 -19 22 -18 67 -21 -5 19 -19 73 -29 -80 -70 54 7 61 95 -55 69 26 -54 31 -50 -47 69 3 -15 69 9 37 -89 22 -126 -46 31 -8 -16 -19 -6 31 11 -22 119 -1 8 -13 31 11 7 17 9 -40 6 -21 18 20 51 22 105 -19 -107 -19 8 -16 -18 38 25 -14 -51 5 -112 -50 -33 21 10 43 -105 14 94 11 -88 33 -112 -53 17 91 -82 18 124 -44 -36 48 -51 25 -49 -9 -10 17 -51 29 34 104 20 47 21 51 56 -46 22 -127 -11 22 -22 -29 32 -19 -113 -101 49 -15 18 -90 -14 59 34 -29 13 -72 54 -42 -68 -43 48 123 1 -114 8 -63 -43 -3 -62 65 72 -5 17 -39 9 -9 -46 -48 -21 72 -15 67 92 -46 73 20 1 -74 -19 -13 77 32 -74 -59 -25 -86 47 75 35 -37 -106 1 -59 47 34 113 -28 -58 70 32 -6 -53 -74 -18 20 -39 -37 -60 8 -11 -54 -38 -88 -55 10 25 66 -51 31 32 -45 3 -18 73 4 -81 -15 -13 51 -39 -33 -19 -42 46 -6 1 -87 -6 -17 22 -23 -18 -4 -95 3 73 -9 91 8 40 -56 -12 49 -1 -34 -29 35 -28 28 -8 15 -46 -39 70 -63 21 -43 -52 -4 -74 -120 -86 -24 32 22 -49 -41 49 -51 -86 -21 11 -15 -41 -12 2 -3 -1 -36 -35 13 -23 -98 57 31 59 -17 -80 -33 -25 -46 -76 -112 -123 29 -48 -45 -26 12 -95 27 28 -111 23 75 60 2 0 -24 33 2 -47 0 -16 5 -51 -20 3 31 -6 -9 50 -28 -94 -28 42 -79 39 6 -4 -33 7 39 -54 48 -41 -89 103 -40 -67 -3 14 -68 -50 -42 -60 -27 34 118 -34 -11 -23 37 78 39 -45 51 32 58 113 -38 28 -39 -36 42 6 27 -22 -50 106 53 59 -3 64 -23 17 20 14 4 48 64 63 53 31 -119 26 -58 6 102 37 96 -123 -49 12 96 -117 84 59 36 -5 -55 8 27 -118 5 -102 -9 93 2 33 8 -66 -19 89 -102 20 -5 -49 22 42 -16 24 -87 14 17 -58 -59 23 61 13 51 -2 14 10 29 -9 -47 44 81 -41 -8 -22 -70 57 9 48 -5 12 20 -32 111 77 -31 28 -33 63 -22 -35 22 -120 -69 -51 25 -11 25 24 -17 -29 20 38 -5 15 -117 5 -29 -55 13 -20 123 -10 0 -50 89 3 -24 63 -12 -127 -40 19 18 -20 -29 47 73 42 6 20 -117 -124 -23 7 -10 18 52 54 -42 -66 -1 29 -22 -13 39 20 16 -33 35 20 -23 -49 -31 -56 5 -3 20 -88 5 41 -66 67 -11 19 -61 -69 21 122 -25 -40 32 13 4 19 -3 -18 72 68 -46 -94 12 18 -17 -5 -86 -55 61 -55 -44 -33 25 -32 41 4 -8 9 7 -7 -5 -57 127 62 3 43 -45 -25 -60 -69 -2 2 34 -92 6 -88 19 41 13 -67 -11 -35 81 -9 -11 -14 -28 -19 35 54 35 27 46 -1 38 -29 -34 -54 3 78 30 -16 62 -15 -52 -78 -5 21 -45 -37 -39 1 73 -1 -20 -42 62 -79 -48 1 62 69 54 -21 -19 7 30 9 7 98 2 -5 47 -37 -19 8 6 -38 33 14 -16 44 42 70 -24 -14 -65 52 -12 114 48 -30 -7 42 -44 43 -13 -61 -111 -31 21 -4 -34 43 22 -36 100 110 10 1 -5 -63 -128 -14 125 18 -12 11 -119 41 5 -98 -25 23 -46 -112 108 4 49 59 127 -61 2 92 15 127 64 10 8 -2 -18 46 58 36 42 76 -24 -78 -80 123 68 1 -10 19 -89 114 104 65 16 44 -3 1 -47 3 101 4 -101 -1 37 -3 8 -40 81 9 7 -8 97 18 66 -45 -42 -63 6 -116 17 -8 -62 72 7 -5 -11 85 -32 35 -92 53 -53 -52 40 60 -60 -70 23 -58 -27 30 -29 -50 63 -21 -68 39 15 4 51 63 -69 29 23 14 -7 -61 -69 56 -27 3 72 -19 17 -112 11 -11 -1 -26 -23 -4 6 -47 -9 1 24 48 -36 0 11 -55 -6 50 55 80 -33 -18 19 -26 -6 27 46 96 -99 -6 20 18 5 114 25 57 38 42 -12 109 -57 -81 24 -44 66 107 -35 59 42 53 -17 -19 9 23 72 37 20 52 -126 -49 55 22 6 18 31 41 -1 -17 43 -27 -16 -44 2 20 9 -51 66 16 -119 -51 -49 -4 -63 -49 11 -44 -25 -21 -12 35 -44 126 -30 -87 9 61 65 -4 -21 -16 56 35 -10 -77 29 -21 12 -49 -40 -12 -11 -29 79 15 82 -104 4 51 -42 -16 35 54 -100 -128 48 -126 -72 6 47 -62 76 -16 24 -35 -39 44 -56 -119 -64 3 11 88 -26 14 2 52 117 -127 -126 2 50 -64 21 -3 116 68 53 23 -53 -26 59 8 -113 24 39 12 19 46 -45 -62 -85 -36 -78 -38 -28 3 7 51 -54 21 -19 -21 15 -51 -20 0 18 -76 -86 41 37 52 -87 -103 7 -20 -13 -32 14 31 4 -111 -70 37 96 9 63 44 4 -26 67 -36 28 -95 89 41 -19 5 -27 20 24 16 83 -32 5 74 60 -49 115 34 28 -93 33 -58 73 -60 68 85 -20 83 -18 7 55 -2 -24 50 53 -32 -35 7 92 35 42 -13 6 61 71 -55 32 50 -59 -7 -7 -21 -49 -104 11 74 1 12 -55 12 -14 54 122 5 -77 15 14 -99 7 9 -78 -55 -24 -28 75 15 48 -2 -15 -107 -5 10 41 -39 -121 -14 54 57 -66 -8 -21 -55 -23 -54 -93 26 33 55 -11 -97 -20 -7 -72 -71 -62 55 -20 -61 -30 -2 -37 -44 50 -30 3 44 6 35 -16 -120 47 19 -12 -61 -9 66 -2 -11 -4 51 16 34 -40 73 37 -70 -88 -28 -94 59 78 35 -37 72 -45 25 33 -4 84 -7 40 -58 127 -8 9 9 -103 -84 42 -34 -13 32 117 41 9 -8 -4 -10 -54 6 115 29 13 -65 -41 23 -3 -15 -30 -25 21 -79 -3 -51 -35 -20 -86 25 58 73 -66 -15 69 -31 -45 12 76 -3 -72 -79 10 -24 -81 -13 -30 -30 -23 -54 44 -19 38 -13 -67 -75 124 -50 17 -16 46 39 -17 -71 -37 22 -53 5 -31 52 -123 25 -119 -31 -61 26 -8 16 5 -47 2 -67 -40 22 -46 12 126 -126 -51 -57 14 -21 -38 18 -86 2 -127 -33 30 0 -123 -66 -118 -97 -87 102 -39 -39 -45 21 99 -84 36 30 35 -41 -39 -3 -56 -88 -127 18 -32 -110 47 -97 -89 12 -125 93 39 19 -35 49 25 17 7 -52 -5 -49 33 -6 -17 75 -2 76 -23 97 -4 -57 -110 -80 -25 -78 11 -8 -43 127 25 46 65 -32 -8 -79 -40 12 28 -50 -118 36 -53 83 -71 -2 19 35 34 -3 -5 -74 -57 -77 10 -39 19 30 24 2 -51 86 39 7 35 1 -53 6 35 -5 1 -57 -127 -51 -14 29 1 14 -68 44 -43 4 43 48 -63 -29 6 23 -86 50 -90 32 -30 17 -17 -41 109 15 4 43 4 -127 -13 59 -57 -6 -43 127 16 98 11 6 -28 -24 -40 -21 -4 -15 28 71 -14 -36 4 -49 -39 12 4 69 50 21 -39 -1 31 9 -37 16 22 -7 -80 13 26 78 56 104 5 113 33 4 -127 25 16 127 -55 -41 -13 1 -38 -52 -52 -18 20 -83 -33 67 54 35 18 22 27 -32 -34 44 127 6 5 -76 -31 -2 8 115 43 -44 -1 -77 -28 56 3 7 -69 44 -76 40 18 44 47 68 -57 -2 87 39 -35 33 66 0 -1 35 51 -63 -17 25 29 4 -1 65 84 68 55 23 54 36 14 -18 68 -3 -14 -57 -9 66 6 78 42 52 -113 61 28 -108 56 -111 10 4 -57 15 15 10 28 -76 -28 14 23 13 -7 -7 -79 -27 -36 14 -63 13 -1 57 -54 63 1 0 2 18 -42 -44 -106 -5 -63 -9 -6 -97 -15 -18 -52 126 -67 46 58 -37 126 31 8 36 -119 -20 -80 12 -5 4 24 -18 -30 -17 62 -11 74 69 25 -23 -56 35 12 -1 98 -7 -52 -60 -1 36 20 -2 32 -23 30 20 -4 -74 71 -21 4 -34 -43 -14 -13 -64 44 45 -23 -44 -24 -33 -14 -4 78 30 8 0 -55 50 36 30 -2 24 38 -12 66 64 14 -13 -20 -8 -57 -6 -61 -46 -23 32 -100 7 -76 40 -31 -98 50 45 -47 9 2 14 -128 66 11 8 -79 37 -27 -34 36 21 0 -97 -54 -50 10 -81 79 36 25 121 -67 32 -26 26 69 -5 14 -19 12 -57 8 6 -24 -12 50 5 -5 -65 -6 -17 -42 5 -95 -24 -120 49 41 94 16 44 -12 -101 51 -36 33 -81 -1 50 -44 9 51 21 54 91 -108 11 29 24 -3 -72 7 20 -14 -62 40 29 88 -35 -4 -15 13 36 29 87 -25 -55 6 8 -49 86 9 -18 -23 -17 31 42 -54 -62 45 -7 -31 19 -26 -32 -32 -105 25 -39 34 35 -52 -69 14 -32 41 44 -14 23 -7 -45 -52 31 -54 -13 -18 -9 3 10 48 -1 52 -1 70 -41 14 -97 -20 -20 93 -24 9 -47 35 40 56 24 -20 12 5 -29 46 20 -9 68 20 29 97 56 0 -31 -40 -11 -27 -34 -25 38 57 -9 -9 -47 10 74 29 15 28 82 -52 94 -5 -39 -37 -51 111 -125 9 -10 -116 24 -4 -16 13 116 -28 115 21 -16 18 -81 65 -38 30 35 -39 19 6 35 123 -11 -16 -15 -31 -75 68 16 -16 -14 -51 -26 -39 -6 29 -6 124 -29 -128 -37 73 -51 -2 -60 113 -11 -1 86 -62 -57 -68 85 -16 14 4 22 -26 -10 -36 67 -9 -5 71 -79 -29 35 -8 -92 97 31 2 -5 -20 21 -5 51 101 -1 88 26 -44 -16 -14 -69 93 43 33 40 -11 23 23 -52 -40 99 -95 30 31 -16 -42 -7 102 -43 -88 12 -20 -4 21 -43 38 -25 56 37 -60 -61 46 -61 -23 -32 17 88 -47 -23 -98 1 95 10 -10 -29 -3 28 -12 55 25 16 -81 -98 -76 2 -11 20 35 -63 19 -50 -14 -47 -127 -82 -61 -27 -35 -13 -15 108 -72 14 22 -49 -95 79 -61 -8 -27 -7 5 41 -67 30 -14 44 102 61 -13 -1 0 41 58 43 -16 4 21 -56 28 127 52 41 -88 51 46 25 38 27 50 -45 -7 -4 -54 -44 17 18 -19 -24 -39 67 -64 -22 -66 24 -53 -69 -26 -23 111 -69 2 71 44 32 -48 -31 123 36 11 66 -127 -42 15 77 57 18 -89 58 -2 -6 -128 -26 15 -53 -4 -23 -40 -41 -47 -32 -17 -17 -89 17 0 -90 2 -10 -5 -32 -1 -115 -55 -42 -5 18 -24 22 -1 1 -56 2 -40 75 34 38 -31 0 -39 -50 -54 -41 67 24 -36 -73 41 22 56 9 -2 125 74 4 -26 -33 19 -116 -52 -8 13 125 41 44 22 26 -36 48 -81 104 -9 -37 -81 38 -50 79 -36 68 98 1 -72 -47 11 10 -96 54 5 24 -10 11 -34 -27 45 -10 29 34 70 -97 23 -39 -15 17 -20 14 35 58 71 54 21 49 -37 82 -32 110 -92 -1 -18 29 -59 -1 16 -18 -5 2 73 -57 -43 14 74 40 -89 93 -5 -105 23 20 15 107 -58 -20 120 3 -13 -34 37 -23 -8 -37 9 -40 57 -11 -127 11 -98 57 13 -68 -108 54 -24 -3 59 52 -11 -33 12 19 -33 -16 -86 -24 19 46 -38 18 -101 -44 50 50 18 12 51 -40 -35 -11 13 -70 53 22 -33 -33 -7 -42 -5 -20 -42 -33 -19 8 126 -21 20 13 5 126 -6 18 -53 -12 92 -5 -126 30 -43 40 -34 20 39 20 8 -74 -12 0 -35 21 13 39 111 55 -55 13 -23 25 -19 -44 -95 -30 -21 -73 -9 -34 -89 -12 34 -40 -85 -1 -18 27 -41 -44 -12 -48 6 60 75 79 -4 1 -43 -22 21 64 -3 8 -16 -22 -66 -1 -90 11 59 -28 -18 -76 -56 16 -15 -65 -34 2 49 -2 -24 39 7 20 19 22 70 22 -55 -39 -28 44 -75 18 41 15 21 -69 46 -5 49 48 67 -14 13 73 -20 -29 23 16 28 41 29 19 -89 35 -11 -30 61 -78 -94 -18 13 41 99 -13 34 29 -22 -9 -117 50 10 55 40 8 -8 -1 64 89 66 -40 20 -55 49 66 9 -42 69 -9 114 -46 -40 -4 -46 90 9 -4 4 -38 -25 -18 -35 15 -2 -8 4 17 -58 -27 27 54 -26 22 -6 -57 26 -36 -18 -21 26 -54 18 0 1 -21 -38 -30 -62 4 12 -37 60 -11 -9 25 -1 -126 -33 -19 -1 8 -86 -13 41 -8 -59 -87 73 41 42 -47 -22 -55 -73 -122 31 37 57 -83 -18 125 21 -70 -11 24 -78 67 -117 -44 95 -19 -28 5 56 1 2 14 -58 -68 -35 -7 6 53 -42 -25 9 20 -9 -7 -57 -30 -16 27 25 -79 35 22 4 -41 -86 5 0 40 -125 23 25 10 -71 44 -13 26 36 -23 125 -81 -67 -9 -25 33 -19 -36 46 31 -40 -14 -2 21 -41 7 3 -55 21 25 -11 -36 -116 50 54 109 41 79 -30 20 28 29 -121 92 -4 -61 -4 30 20 18 38 -47 -10 21 99 87 -1 -9 -67 85 -5 111 127 -31 13 -25 -33 -97 40 13 -79 -79 -23 -60 -88 -73 14 4 -26 103 74 48 127 31 -29 -13 -8 55 6 13 17 9 9 72 -55 -11 24 -18 48 89 30 24 41 -37 8 6 13 -51 -61 -46 88 52 12 -11 -15 -22 19 33 24 -118 -33 37 -2 -11 26 -37 19 56 7 61 -50 64 -48 76 1 -35 46 -80 31 15 -75 -25 16 46 22 -55 48 -73 40 -18 -47 -8 3 -13 -56 -20 -8 17 27 11 -15 -27 -36 -6 -51 48 1 58 43 13 -29 47 24 25 -9 -59 -15 31 30 -93 39 20 -14 -11 -29 -23 -56 50 2 58 28 -14 41 25 -32 52 35 -9 36 -60 7 40 -54 -69 87 -41 11 21 -93 43 -4 5 35 -6 -37 31 -89 -46 -32 -12 -7 -40 7 71 -58 -18 -22 -31 -10 24 47 -83 67 -15 72 -45 50 41 48 -65 25 14 -100 9 -55 -26 -5 -51 -1 8 -29 29 -17 -23 8 22 50 -14 -47 44 18 31 16 -1 1 42 -69 42 -55 92 -41 50 88 101 -30 36 51 -5 -15 12 -5 -18 -74 -91 -53 67 3 0 26 -35 8 55 -128 -71 -16 44 16 69 -49 37 24 -65 20 27 -88 -10 -4 -15 -18 23 -47 34 26 56 -12 -53 30 -41 -35 -32 -13 4 16 64 83 5 24 -41 -56 -22 -52 59 -67 41 -55 60 20 -50 18 -72 -121 51 80 33 123 -4 64 -12 -22 -39 45 32 -10 -25 32 -53 -67 101 -58 3 37 -18 81 33 11 60 -7 72 -1 -79 -113 -25 -50 42 -4 10 8 -70 -65 19 7 -46 10 37 30 -56 -97 38 -18 -35 -34 53 -65 -35 -43 -35 -40 -37 122 -14 46 -16 -2 -4 -18 -82 12 44 6 12 78 -6 28 -33 6 11 6 65 67 16 6 115 3 -59 20 -4 -67 46 37 -4 127 -46 -36 54 -1 6 12 -3 8 51 -51 -56 -47 -24 -6 -23 -5 -5 -19 -66 3 63 -5 52 -47 18 -40 21 -29 48 -1 -69 -102 3 -33 -3 93 -62 11 11 -19 -98 -41 60 100 47 -14 -39 20 22 -60 19 -20 -69 -20 8 12 -8 -44 7 -29 -98 -16 42 21 35 9 -17 11 48 -22 -91 -17 -72 -92 7 -70 -46 10 41 37 -17 -3 -53 63 -45 -2 -101 38 17 75 -35 -11 97 -51 30 15 8 -67 -21 84 74 51 13 -8 36 -40 21 -63 -33 101 -85 -60 -59 -32 71 38 -37 37 -44 -111 63 -95 31 94 -61 -45 -48 -36 57 -86 -10 46 -47 -13 -56 -11 30 -18 52 -20 53 79 3 57 -12 0 -54 49 54 -18 105 -2 20 9 -9 8 -81 19 -18 -75 -2 29 118 -13 7 -1 45 14 -81 18 30 -95 -63 -19 4 -31 78 78 43 -69 57 66 31 68 8 -75 -18 -35 -12 0 -38 64 -1 -11 -30 -15 -23 -14 57 -62 -17 -43 -79 -128 33 18 4 13 -53 9 -39 55 -57 51 -22 43 29 -12 -53 -8 -9 -47 27 31 -5 13 53 -6 38 -6 -31 -107 17 -17 -56 2 34 -14 59 31 -10 27 -23 -51 8 4 -28 6 13 107 33 -45 71 -1 -18 -19 14 15 125 -46 -21 44 100 -18 -102 -14 -36 1 49 -29 -40 66 -77 -20 -56 -37 -30 -39 -37 81 -14 18 -73 -66 49 -35 23 -38 53 2 -49 -68 33 -116 -61 -79 -39 -39 37 -55 3 -35 20 74 -6 -71 -27 -18 -15 -50 -8 15 -72 12 81 -24 82 -12 -11 -15 -63 -28 71 -44 -57 14 88 5 -6 78 12 -35 -2 74 16 -3 -18 64 -16 4 6 -42 16 -43 -1 -23 36 48 -31 -28 17 -18 41 -45 88 -46 -35 -61 -85 -68 -45 -13 30 -10 -103 -58 41 -13 -19 -10 -11 -23 52 10 -23 19 -25 -72 12 44 51 -124 1 -9 -68 64 40 -41 -19 19 -7 48 48 -83 -80 67 60 -56 -22 -9 -2 2 -68 -18 19 -47 28 -44 57 53 -49 -27 -54 -77 67 39 2 -37 36 -17 6 6 41 -89 51 -19 -36 21 -83 -8 1 11 -19 -31 -15 -29 8 -59 -57 7 -21 -18 50 73 97 -19 -41 2 -20 -9 -23 -90 85 -72 -14 -29 31 67 82 62 -75 -48 85 81 12 -29 56 -11 -58 -85 123 109 123 -77 120 23 38 -30 98 -29 -78 -11 20 -2 -121 -45 -18 15 -16 18 31 3 5 -38 62 -10 5 29 -28 -62 36 37 120 -55 33 -12 4 19 67 60 23 13 14 10 -70 23 15 37 -51 67 -50 -93 -28 -93 105 24 -71 3 -22 23 -70 -29 -69 77 31 7 -21 -37 -114 -52 -109 102 -32 -29 -3 57 -46 67 -24 65 -28 -6 28 -13 -68 47 15 -14 -8 -60 21 12 -21 -78 56 -25 -87 37 44 19 -47 19 4 -71 --2 86 -18 -32 -14 2 93 -53 -75 57 65 7 -1 19 -124 -9 -1 0 19 -25 2 -67 -31 -21 -5 35 34 10 82 -29 -30 -78 7 52 -6 63 92 58 42 32 43 -28 25 -55 71 -27 15 -27 59 43 -6 41 -3 -34 -20 -15 -14 24 -46 -16 12 34 8 11 -26 46 -30 -18 9 -24 -46 0 50 15 -9 -2 14 25 -26 -21 9 -68 19 -22 -16 -9 -10 -1 -14 40 -52 1 5 -8 49 63 15 -37 -26 38 1 -11 -12 78 -1 12 -23 -59 -68 13 -15 -34 -28 64 32 -8 -7 20 -22 19 31 -69 -4 3 19 15 20 21 -17 -27 -8 12 10 -11 2 -2 6 46 -10 48 -37 53 -1 36 -114 96 0 -61 -72 -112 20 -47 54 30 45 -13 -16 -5 28 4 -32 30 -82 127 16 -15 -7 -2 76 -16 99 22 43 -34 77 40 75 3 42 74 2 51 -45 -16 37 -13 -58 52 7 24 55 87 -56 20 96 26 -59 26 -9 24 18 -32 -6 -21 -29 47 -11 31 35 90 4 -55 21 34 7 -103 37 35 93 -59 48 28 93 -7 27 3 94 -29 86 -5 3 -14 1 61 58 70 55 -20 68 23 -65 40 55 27 7 -14 22 -8 7 -16 5 -39 -42 -71 12 20 -19 -19 -111 -67 -65 4 -11 -34 32 -7 2 -19 29 15 40 75 -12 -49 23 -20 32 50 2 12 66 17 16 -30 1 -96 15 68 13 29 -3 25 42 -4 38 -15 -47 29 -26 34 -12 6 8 60 -79 -51 68 14 -12 33 49 -18 -3 -90 -39 40 -6 56 12 15 34 -8 -49 -14 -36 5 16 -19 2 28 -44 -4 -14 11 -46 10 16 -7 -127 5 30 23 -61 -18 -7 -12 -19 -48 14 55 6 -19 -11 4 4 -18 -17 11 46 25 -22 2 9 37 0 -60 -48 -85 26 -23 -15 33 -52 -20 -13 1 33 -41 -55 -4 -36 20 -54 8 36 -16 -4 11 54 24 -17 -27 -4 1 14 -38 13 -16 12 -5 12 9 -28 34 -23 21 -18 -33 7 9 100 -32 -36 21 -8 -40 3 -2 -6 -12 -27 -24 -15 -49 6 -6 -24 13 45 2 -77 -21 -22 -28 -5 0 1 26 -12 -2 44 0 -13 36 -3 10 -21 61 11 -5 40 3 30 -25 -20 1 -33 55 16 41 -35 9 -12 19 31 -7 -31 47 -12 35 -11 6 -18 -46 2 33 20 14 -28 30 -33 -10 31 -20 35 -15 40 27 31 23 31 44 19 -59 50 30 17 57 -20 46 -66 26 3 -27 -13 69 47 18 -36 -13 -8 -24 -3 -8 28 -24 77 -52 22 23 0 -18 5 -18 0 -21 1 18 9 -7 -29 -26 -7 11 5 20 -58 -47 64 -5 -28 -11 -26 12 -24 28 -1 30 -5 -33 -12 -12 1 -42 -31 -3 9 7 22 -33 36 16 27 -1 1 -28 27 9 36 -77 6 -15 -53 -23 4 -13 -27 -36 28 6 -4 -23 -26 22 24 -20 -34 -18 22 -19 14 12 -1 -44 -52 -12 1 -1 31 61 -7 7 -41 -7 46 -2 15 -15 -3 17 5 9 35 3 19 -25 -51 -37 -6 35 -13 -16 3 -38 3 -20 19 53 -19 -3 30 -31 18 -1 17 -12 -1 -53 -25 16 19 -2 15 -17 6 10 8 -13 5 -16 9 40 -24 -7 -3 -18 15 -13 9 4 12 -13 16 -9 6 9 -4 -30 12 3 32 15 -15 -5 3 -19 1 35 0 -24 -32 17 -25 10 -7 -2 9 -4 -16 -3 7 15 7 -35 -9 19 -6 -10 -28 -16 -19 10 19 14 -6 8 -26 5 21 15 27 7 -16 4 7 -1 -7 9 15 -5 3 -8 8 -3 1 -46 58 28 24 -22 17 -21 23 -13 -81 7 8 -21 -28 32 -15 -91 16 14 11 43 -12 6 -31 -20 9 -42 1 2 6 -17 31 -7 36 20 22 -34 14 -18 16 32 -1 -6 -19 27 19 -59 -10 -26 -35 24 20 19 12 -1 -23 1 -11 -30 -24 0 8 -9 22 17 8 -33 45 -39 -9 -5 49 -36 -20 22 -20 26 -17 -65 -37 -13 67 28 23 18 -18 15 -15 -6 -3 5 32 -33 -6 -17 -27 40 -41 40 -8 1 -8 -17 8 1 0 7 -25 -7 -8 14 16 -8 18 15 8 -36 13 -6 -37 -3 13 -11 -16 4 14 13 -33 9 -7 -1 -52 35 -15 -27 6 -16 17 -52 17 21 2 -10 -43 36 3 8 -33 -17 32 -35 0 -8 17 -31 35 -37 65 2 7 -10 4 6 -32 -15 -6 -19 -8 -39 -47 -48 6 20 -35 -4 -18 -11 39 -4 -24 30 -38 8 -31 -8 31 -20 -36 -16 8 -12 25 31 -59 -6 2 -13 -33 -8 3 36 -21 8 -19 37 4 -25 19 0 -17 0 11 -12 -13 -17 -8 -3 28 2 17 -2 -40 12 -7 15 3 -4 -5 -7 7 10 48 9 7 2 -3 -18 -1 20 -21 14 -15 -14 29 -5 21 -19 1 23 0 19 -41 -20 2 -3 18 10 -21 -24 -7 -14 -8 -22 22 8 37 -3 21 6 17 17 24 -5 14 14 -11 26 35 -37 -1 -3 14 26 -12 10 -10 1 -6 -18 -56 12 0 -24 2 -50 11 30 -100 -6 36 61 24 -21 31 -39 -20 6 -42 17 37 27 2 -32 -34 -1 21 10 20 -39 18 25 2 29 -1 34 -14 38 -4 -37 -69 3 15 20 -4 9 20 13 -14 -5 19 -29 -8 -15 -20 19 -58 1 4 -19 -28 -27 -22 12 11 11 -49 -17 34 -22 -31 -1 25 38 -1 17 -39 -12 22 -29 11 -30 -30 -58 36 -28 -6 17 -32 34 6 -11 -2 -17 -11 10 31 -26 15 -9 -6 -31 -45 12 15 16 -29 54 -14 -13 30 -1 -9 13 -10 25 -4 35 -32 8 -19 20 15 -12 22 19 -17 -6 19 -27 -19 -18 -6 -22 -28 8 -18 33 -3 9 21 12 -6 -17 40 -3 18 31 -17 22 65 46 13 4 -8 -65 4 33 -10 -29 30 34 -29 33 3 -32 -23 32 -23 -7 4 12 6 -27 9 3 22 37 45 -22 -35 7 -68 25 29 -7 -5 -7 6 23 -30 -22 -10 -19 3 21 45 -7 2 -17 -3 18 -10 30 23 -16 27 1 9 -4 20 27 6 35 36 -49 21 -31 -11 -23 27 30 2 -6 3 -17 -17 4 -6 -25 -37 3 -30 22 -26 -19 3 -24 13 23 -49 -49 -22 -2 1 14 22 11 3 0 -1 -16 -46 -31 -6 -13 32 19 -6 -4 -43 5 0 35 -23 23 0 -27 14 2 16 -18 9 2 -1 20 15 -30 -26 13 -15 6 -43 -12 21 43 25 5 -5 29 -42 -12 26 6 10 -16 -14 -48 -44 3 -55 32 -42 29 -15 -24 55 -81 -6 63 -5 -78 -12 2 -10 25 -28 -11 -62 -29 33 44 10 42 10 -31 5 8 -5 -41 -44 -18 11 -41 28 68 -37 33 19 -32 -28 -4 -28 26 -61 -59 90 -19 13 -34 23 17 9 -10 14 -4 -47 -10 37 -4 -27 -25 -8 4 80 -25 6 -4 -18 14 4 -35 -14 18 48 -18 -25 3 66 -76 -17 35 67 20 27 -7 23 29 -37 -64 19 9 12 -42 1 -28 12 17 -74 -16 4 -29 43 -32 -9 -32 36 -13 32 -16 -10 39 20 -54 29 -33 -42 -41 -12 25 12 3 -33 8 4 12 34 34 6 1 -7 44 -27 40 46 -35 -5 29 7 6 27 -31 55 -33 -12 9 40 8 10 -59 -8 6 -30 -10 6 -21 -19 -12 -34 26 -1 -26 -31 -7 -10 5 -29 5 52 31 35 -55 26 9 35 3 6 -4 64 25 17 1 -16 -12 32 23 19 -26 -28 -1 15 17 -1 39 8 -21 12 4 -29 1 12 -27 31 32 14 4 3 41 20 -12 -12 24 -25 21 6 -8 15 53 -1 1 -8 -13 21 -6 -2 18 20 16 13 -2 5 -32 -24 46 5 22 -5 9 -24 28 10 62 5 -12 -29 7 25 11 -1 -7 20 0 2 3 36 -14 -6 -4 9 18 -4 -11 -2 5 0 5 18 -2 14 -21 33 -23 23 45 41 -53 30 20 -6 -6 30 32 -12 18 -14 25 -42 14 -110 28 19 -45 -5 -10 -10 2 -37 -4 -23 -5 17 -47 -4 -23 -18 1 -27 11 -13 -16 -28 -19 -27 17 15 -49 59 -45 -29 -34 59 -23 -21 35 -8 42 -27 -31 22 -40 -6 -49 -37 -47 7 21 -29 13 -16 15 -11 11 20 31 -14 6 2 21 -2 48 -30 32 -37 -54 4 18 25 37 -23 8 24 -38 -11 -64 42 -4 -4 -17 -31 14 -14 -32 30 6 28 3 16 -24 0 -19 -7 -5 -15 38 2 -3 -40 -21 -12 -36 6 40 -46 -7 -7 6 30 1 -53 -32 -4 -33 27 -28 -15 13 4 24 0 -8 14 -24 -15 -9 1 32 33 -43 -49 14 -10 6 16 22 -54 -4 11 -35 -13 3 16 -50 10 19 -2 -32 -1 -18 38 -29 -22 16 1 17 -37 -53 -28 14 -27 -11 -20 2 -23 -15 -17 -5 0 -30 -6 -24 35 12 4 -33 16 -8 0 38 -9 -15 36 10 -51 15 6 -49 -7 -12 -17 47 9 -23 -20 -5 5 -3 -20 25 4 23 10 5 24 -6 33 -18 -2 -19 -6 -17 -15 15 -14 -5 14 1 -18 20 -11 -29 11 -3 -23 -12 1 13 -16 29 -22 -17 -4 -34 -18 24 13 33 18 10 -5 -11 12 -3 -25 -27 19 2 20 -10 22 18 2 20 7 9 10 -11 -30 28 5 -8 5 8 -9 -27 2 11 -12 15 17 23 -12 31 -3 15 1 1 15 -76 8 17 -9 16 32 14 10 -19 -8 -125 -48 -32 56 20 -14 72 5 -10 -9 26 -77 -29 35 59 -25 28 59 -50 56 38 -12 17 7 6 -70 6 -12 -58 -43 -10 -38 -64 0 -30 -28 4 -20 32 29 46 17 -59 11 19 44 17 -11 -54 -31 -24 -29 -19 -28 58 35 0 -67 -50 -36 29 -15 -7 -3 1 34 -58 16 53 15 -72 -9 9 -36 -28 12 -19 7 -1 -9 6 -39 21 17 -68 -63 55 19 92 -1 49 -29 -39 40 -19 9 -6 67 2 -5 48 -62 51 -23 -16 25 55 0 -24 5 -41 -11 11 -4 -23 5 -26 -31 -67 -7 15 3 -11 9 -10 -14 16 -15 -37 1 -12 -24 8 -88 26 -71 5 -11 14 -4 -49 16 -11 -28 -8 11 -8 -15 32 -14 19 -48 9 14 12 -20 -34 -8 14 -27 14 50 7 -66 -57 -6 8 4 2 -49 -29 -26 -22 -5 -4 -8 12 -56 24 6 8 -9 -12 9 14 -13 -56 -26 -12 -30 -37 -4 -5 41 24 -32 21 7 8 -1 -2 -1 30 42 20 -10 -4 -29 -28 45 21 18 -32 -12 47 -8 -46 42 18 37 3 -9 19 51 4 -57 19 5 -27 -21 22 -9 -22 22 42 26 27 -7 -14 -12 -57 36 11 -9 45 12 5 -1 -9 30 5 -9 -12 -1 19 2 7 22 8 -19 8 -34 17 15 -14 -42 -23 7 5 -19 11 -10 13 29 -26 -91 21 -31 2 23 12 -28 -33 -1 13 -10 9 28 -21 -13 -30 -49 44 18 -23 32 -3 9 25 35 -43 -9 20 14 -2 -36 -9 28 20 4 -19 56 -22 2 -32 -19 14 -13 17 17 -31 41 -73 -21 14 -4 -37 -13 32 42 10 -35 -32 -41 50 -25 76 56 14 34 54 -47 37 39 -61 -23 -11 25 -39 -55 -14 -9 14 4 -107 53 -57 45 7 19 -27 0 59 -41 -49 -4 65 -60 -14 23 -46 11 46 37 30 21 -2 16 27 47 15 -42 4 27 -7 -29 -19 -15 -69 -45 14 -73 -9 -76 -11 -23 46 -18 -5 49 8 16 -39 5 23 -28 11 0 97 13 61 12 -14 19 99 70 -1 -71 -41 76 54 -14 -8 8 -8 -26 -43 -21 -10 -69 6 -71 -10 14 25 20 -62 -11 -19 -63 -53 -15 -40 26 29 -8 -12 11 -7 -24 -15 68 -25 -68 -4 39 -32 2 -66 4 4 -7 15 57 -18 41 31 -1 8 -6 12 -6 -7 13 5 -16 -15 -3 36 -14 6 27 5 29 10 -14 -8 38 -51 58 -25 25 -28 -2 -40 -20 -5 -26 1 -6 14 0 34 3 15 -3 -10 -44 -31 0 12 6 23 -5 20 9 -27 2 8 -52 2 -11 8 -5 9 1 -3 -5 -4 8 19 2 -4 -13 11 36 -3 39 -13 12 -38 27 37 -17 -2 50 -15 19 2 -11 -10 -38 24 27 25 -44 63 61 -20 35 3 -14 -44 -19 -2 65 -6 -19 90 25 17 -72 -26 20 -37 13 44 -42 -15 10 -67 -27 -38 70 2 -11 39 -12 0 17 -35 -40 7 15 8 -88 -54 -9 39 49 40 -43 9 4 23 -16 8 19 -52 2 -53 43 -19 8 29 -124 -19 -4 -34 -3 32 -31 16 7 58 -32 -19 19 20 -13 -72 -22 -11 64 10 30 84 -49 44 -47 40 38 -18 19 46 -62 12 -8 80 -40 -76 61 -48 4 -38 -22 -34 78 -8 9 -74 19 -45 1 -40 -28 -11 -6 9 -9 51 10 72 -26 -20 82 4 38 -22 12 -42 -19 -27 -28 17 46 -37 -12 5 8 19 34 -27 24 11 14 -64 -11 10 93 -20 41 9 20 2 -5 29 -47 -15 32 -60 18 5 -4 5 -43 -33 -24 0 25 60 -12 -23 -13 -20 -38 -91 27 -1 13 49 91 -2 -54 40 -19 -27 -66 -30 -12 6 1 27 -12 -32 24 -31 6 42 -31 77 -14 -38 54 43 5 32 23 -7 16 0 13 -7 -27 -10 -22 3 -6 -8 5 7 -19 -19 -44 -51 29 2 -21 -16 -17 57 54 -22 -15 -48 -23 -17 24 1 -4 15 -23 -27 4 19 13 -29 28 -36 2 5 4 58 -7 -48 -6 0 12 5 -41 32 36 -25 -23 -2 39 -8 1 -31 -4 -46 -9 30 58 -18 16 -63 35 -14 11 -27 15 -15 16 -21 9 -16 4 -46 -29 10 43 17 -3 17 -17 -12 -38 -2 40 -56 1 21 -21 13 8 2 39 -14 -88 -6 -19 -37 -30 -28 -53 -2 36 -64 27 -8 -11 42 -3 -82 -39 3 -1 46 -49 15 -36 9 44 7 11 -28 25 -36 8 -48 -41 -24 -52 10 -20 -1 4 16 -10 -5 50 -15 22 -17 -7 -66 -11 -63 -32 -60 60 -19 -19 -5 -20 -7 -34 -11 1 -17 0 29 -42 -21 -31 31 61 13 3 17 32 3 27 -13 28 24 8 -46 -7 21 13 -34 -38 11 -27 -4 26 -35 -17 0 -37 -32 14 -3 -1 36 -4 -20 32 25 21 -5 13 12 22 1 0 -44 -22 13 -47 -31 -6 18 -32 -38 16 -7 11 -32 20 9 -2 -17 -7 0 24 2 21 48 -2 -23 -4 -46 -30 -12 -33 -15 -1 -7 -1 13 13 -23 25 35 8 54 15 2 -22 -25 30 9 3 -28 -5 13 -6 -12 -24 18 -25 -3 2 -22 -11 -23 -29 1 -9 -8 4 -21 4 9 -10 -9 26 -12 18 39 9 -25 -27 -5 -11 -1 8 10 -21 -11 -4 5 0 -20 4 -19 -14 24 11 -20 23 -19 9 0 21 32 -1 13 23 21 6 9 -20 22 9 28 16 17 23 6 24 9 -11 -5 11 11 42 -8 12 53 5 -4 19 -21 -14 6 -1 1 9 -3 -1 -11 8 0 -6 -9 3 -38 49 -5 7 -14 5 -12 -3 22 -32 11 -4 10 13 7 -5 -7 -8 -21 -28 7 -4 -20 27 7 -11 16 -19 -3 35 30 -3 2 -19 -1 16 12 -57 -24 -31 19 -12 36 -10 -4 -9 23 4 3 0 8 21 14 -35 -32 33 -21 6 -21 -34 33 -10 6 29 1 1 -5 -3 -6 4 -27 63 -10 6 26 9 14 -21 0 14 17 -5 -4 16 -23 -15 -21 21 -16 7 -12 13 9 39 -31 7 40 0 -9 -5 9 -29 -1 16 33 21 28 8 15 44 6 -12 -58 7 -9 29 -28 -27 -5 12 34 -1 24 37 -7 -8 -17 -6 1 -3 -12 -14 -19 7 5 27 -3 -1 35 35 -19 1 -11 13 5 23 13 13 -15 -9 0 16 2 -14 -5 12 -1 -46 10 27 43 20 -43 0 8 23 3 49 24 -10 -38 14 6 -11 -6 -32 -49 10 -20 25 -12 14 7 -6 17 33 24 32 -47 -32 -13 -9 9 -11 -15 -7 1 5 30 5 15 -30 -21 9 9 7 5 19 15 -10 -13 3 -2 8 6 -40 -17 -15 -16 -27 2 -18 27 30 17 -13 -7 -30 -28 -11 9 -20 -5 9 36 7 18 -6 10 14 22 0 -9 45 -9 -18 34 -13 -17 18 0 5 2 -28 -1 11 1 6 25 18 24 5 3 -10 -19 -11 -6 8 16 15 9 23 -7 16 -15 12 12 3 -4 9 8 -10 10 1 5 14 -2 -14 -8 47 16 26 -4 -27 -2 -16 -16 10 -15 -42 9 24 -20 -15 3 4 -2 33 1 -9 -34 -11 -5 -38 37 83 25 5 -23 -4 44 -22 33 -23 -24 124 -24 -21 -46 23 11 0 -5 -8 -49 3 20 15 -1 66 77 -19 11 -42 26 10 -24 44 13 10 13 -5 -47 -36 -19 0 14 -2 11 -31 1 -14 2 -31 40 -22 -46 11 -37 16 -7 -32 -28 -22 -14 -17 25 -33 28 81 -50 -35 -24 24 -18 -43 14 46 38 25 -54 8 -31 46 -11 19 65 15 -10 26 37 39 22 -11 -27 42 38 -31 25 -9 -15 13 16 4 33 13 71 24 3 20 39 23 -23 -3 36 5 -43 6 56 16 -27 24 42 2 1 -8 1 -23 -10 30 14 25 -7 34 -31 -21 -10 -39 15 32 86 71 -8 34 11 24 -9 12 31 81 32 -9 12 62 -10 -4 -5 -29 15 -10 -11 -42 52 12 -13 -10 15 -62 12 34 49 -14 40 14 21 -58 20 -17 17 -4 14 -20 33 -16 7 -31 -1 -14 -45 33 7 -16 -3 -27 12 10 30 42 -9 70 5 -14 19 21 -16 7 11 28 12 17 29 15 -26 16 8 -14 -14 45 -14 3 20 -12 34 -4 24 3 -24 -12 25 14 -1 35 -2 -5 -13 -7 -10 10 -28 26 -37 18 16 -18 3 10 -14 -16 14 -5 5 -8 13 -12 15 -1 -4 -7 -1 -12 1 -39 8 12 -3 -11 12 10 17 10 17 -30 -39 -25 15 -7 5 7 -8 -8 7 -6 -10 -3 -21 3 -16 21 -3 24 -23 11 29 34 -67 -39 -46 0 38 24 13 25 21 55 -2 -8 44 -34 -31 -43 -14 -37 19 42 10 -22 37 35 -26 -25 -31 75 21 32 -9 39 -34 -15 -47 -35 -39 -89 -1 -33 -47 2 31 -6 15 46 19 -96 22 -11 14 -20 -4 12 13 35 26 5 -27 28 43 24 -41 5 50 -4 -52 66 26 38 -39 22 -11 70 28 -3 -38 36 -49 -7 17 19 53 56 -10 80 13 -41 2 62 -24 -10 -17 -59 10 -29 -6 -26 10 -36 23 -9 -58 33 -24 -8 -18 -5 -62 -10 -35 8 45 -7 -34 -7 16 7 -17 16 14 35 -7 -26 1 -32 -21 -22 9 18 -1 11 -12 -45 -28 0 -7 4 59 -10 7 23 -40 -20 -41 32 14 -35 47 -13 0 -23 -18 12 23 -76 -24 52 0 29 -10 -24 7 23 -26 -48 -3 7 23 -1 -1 -15 -40 -15 -15 -3 -91 21 11 27 -3 -12 7 -67 -13 44 25 17 -13 -16 45 -1 2 1 -2 13 -2 12 1 -9 4 6 -9 -42 -24 5 -29 14 19 31 9 0 26 8 23 12 7 -13 -19 28 -13 19 -25 -12 -29 -20 -8 -11 -9 -14 11 3 12 12 -26 0 19 2 6 -23 26 27 12 -12 7 -32 11 16 13 12 6 -7 -38 5 21 11 -2 -3 10 22 -6 1 18 -4 4 -6 38 36 -1 -32 -7 16 32 -8 15 17 -13 42 7 -23 -30 15 19 -31 0 23 9 2 64 -67 -25 6 12 7 100 -23 -30 24 -6 -58 12 -5 -48 20 13 74 39 15 33 -87 -92 -35 23 8 -94 -6 -17 29 32 -14 -22 61 54 -21 18 -8 -44 6 8 7 -43 -41 5 4 -22 2 -26 -37 -27 -33 24 5 14 10 48 24 -34 26 -3 -10 3 -60 21 0 -4 -57 -11 16 21 15 -49 9 28 -2 -15 -103 29 -27 31 23 81 34 -51 -102 -50 49 -23 -14 -8 -17 -39 2 36 -68 -36 30 52 31 25 -49 27 25 45 14 42 11 -21 23 43 22 -1 38 43 -48 -42 -26 -12 7 -18 -19 46 -15 -5 18 48 -6 -46 31 3 -9 -56 2 25 -27 60 -24 -23 -23 10 -12 1 -15 -37 31 12 2 37 -43 9 -36 30 -14 18 15 -6 -42 16 52 30 12 51 6 4 15 -22 -17 -7 31 -40 -64 43 24 8 -22 46 -48 -35 -10 19 -38 -39 2 -55 -4 -31 6 13 59 14 -42 31 -22 -3 25 1 -16 17 -1 -16 0 10 11 -2 -36 20 -4 0 -21 22 -5 3 -6 -6 -3 25 2 -26 -24 0 1 -25 30 -4 -34 17 32 -16 -17 -8 -15 26 -29 5 -20 -38 15 38 -8 -5 4 15 5 8 -21 36 6 0 -19 13 -36 18 32 -44 1 -24 -19 12 -19 -16 -79 -15 3 11 -26 18 -4 14 -6 12 6 0 8 8 4 6 -1 1 -44 -6 13 -45 20 5 -47 15 -2 55 25 34 15 27 4 76 12 13 79 -74 -1 -10 51 31 59 -1 44 -8 -9 34 76 64 -12 35 63 48 25 -14 68 14 25 -49 22 29 56 3 51 24 -59 -12 58 0 -2 41 -77 16 -41 25 -7 40 44 -32 49 13 20 -27 48 22 47 31 10 -41 -28 -41 32 31 63 3 63 13 -2 29 4 -66 17 -15 36 59 43 77 19 38 -54 48 -11 74 -27 89 -13 -6 1 -3 -84 46 -48 18 -11 10 19 1 -34 -7 -50 53 -39 50 -15 -70 14 -14 -25 93 43 17 32 -13 -26 -20 46 -12 -18 10 -42 20 10 -33 -26 0 -11 9 18 -1 -25 83 0 16 14 40 -37 -8 13 -4 9 -39 -103 23 -36 26 63 -2 40 -7 -36 16 -34 65 28 -23 23 35 29 14 42 87 41 1 28 -46 46 -4 33 -26 -43 -5 -50 -16 63 -3 24 -3 9 -31 53 -54 -91 25 -5 -19 -12 -11 -30 16 -8 12 11 -24 -32 23 -1 -15 34 -9 8 -10 51 21 -29 30 -33 4 -10 15 38 -57 10 51 2 -40 13 -25 -7 3 -1 -13 -21 8 15 -34 -10 -28 23 -33 26 -20 0 14 10 -13 12 -10 1 3 21 -19 15 -16 6 -40 8 -36 17 15 15 -1 -7 5 -19 -15 32 -3 22 17 -20 32 2 -15 -11 -32 -3 17 -4 5 -7 4 -3 -29 7 26 31 -15 -31 -7 -32 33 29 -4 -15 -69 -45 26 -29 -11 3 -4 4 32 -38 -16 30 -22 5 16 17 10 32 -9 3 0 7 -8 -19 -6 22 16 11 10 -24 -5 -12 9 -26 0 -31 8 20 50 -19 -4 12 5 20 -13 18 7 -2 19 11 18 21 -20 3 -6 3 -13 40 36 -28 -36 10 23 -1 -4 -22 1 47 17 17 -19 12 4 -9 -24 3 2 31 67 22 22 86 6 -1 -17 6 -40 10 4 -18 2 -3 -17 2 -15 -3 -24 -9 -26 -13 -9 -27 -22 -11 -21 1 -9 16 -2 29 14 36 23 -5 6 -3 -32 -15 47 -11 12 -23 -23 2 21 37 -10 12 3 -14 -3 -15 -2 -15 -37 41 7 11 -27 40 -18 18 7 12 -39 6 -6 11 -1 23 -38 -13 -1 -50 16 21 28 -2 53 -6 5 9 19 24 5 22 36 -4 -35 16 36 -11 -7 21 -8 10 -29 -5 -2 -32 -30 19 3 11 24 -3 -22 -11 14 2 -10 17 20 0 -8 -9 9 13 -13 10 8 -2 19 -3 -2 18 8 0 -30 -5 6 -8 -14 -29 11 -8 8 36 10 -5 9 -7 24 -1 -3 -60 26 8 22 13 -24 -11 -10 -8 24 -6 28 -2 1 -10 25 -15 -8 15 -17 -7 -55 -9 -9 -8 13 32 -15 5 -6 -7 -9 18 -22 13 14 20 24 2 -22 5 -1 -27 13 1 1 7 -6 7 -7 22 -35 4 -8 -20 -4 -22 16 21 18 -11 -79 30 -57 -45 -1 -48 15 -5 35 -41 -32 -22 -34 -19 -29 -40 21 -20 -21 19 35 23 37 -19 1 16 -87 -3 -32 25 -13 -3 5 64 50 99 68 60 17 58 -35 25 -31 84 -47 -5 -17 92 -2 29 -21 -27 43 -19 4 -84 -49 67 -8 20 17 33 -19 -11 35 -64 -3 -13 44 95 -6 -7 45 24 -47 -24 69 6 3 -63 46 -73 81 38 62 -24 23 14 26 -18 62 -6 -37 -3 -57 -34 17 -98 8 -39 -12 -5 -44 90 -40 -40 -44 -10 43 -31 -4 -33 -10 -69 -47 31 -31 -29 -7 5 -52 47 -53 -38 18 -16 -18 -19 33 -1 5 5 43 -82 -3 34 81 13 -55 -28 -29 -65 4 -6 -43 -30 -9 -50 -28 29 23 12 -65 -5 -60 -19 13 -50 11 21 -9 8 8 39 -41 -84 -25 -15 5 -14 -59 4 -93 34 20 19 2 11 -1 16 -51 64 -25 58 11 -41 1 4 -68 -25 -14 -31 -43 29 42 -16 -2 10 -6 39 27 -6 68 -23 -19 38 34 -30 -6 -1 -6 42 15 -50 13 -38 0 43 -38 47 -7 42 -1 56 0 -12 13 -13 -31 -22 7 7 -7 -9 6 0 23 -15 -32 -30 -2 -2 -25 -48 -11 3 35 -20 15 32 -4 4 6 19 -4 8 44 29 1 -10 -44 2 -15 40 -8 -28 1 25 -26 -32 10 -24 -17 -25 2 -10 13 -1 -9 -6 6 -7 21 0 -12 25 -1 20 -22 -63 56 -21 6 -60 28 -24 -12 20 -17 -106 -14 -40 9 -21 29 30 26 -32 -28 -4 -37 26 -4 32 -37 -14 -27 -19 -18 5 29 12 -10 -41 -19 -3 40 -10 18 -48 -37 17 3 13 -19 -68 -3 -55 6 -2 16 -28 49 -47 -21 -29 -14 -20 -29 2 -3 50 8 -19 -13 -18 32 -8 -22 -17 0 36 -12 -20 -28 9 -27 2 34 -11 -3 -24 9 18 -13 23 -11 42 31 -48 -33 -28 -39 20 21 -11 9 -28 16 43 23 4 13 10 6 46 0 11 -40 -14 -35 -39 -8 -21 8 -28 -17 28 -11 27 -10 20 -10 40 -7 -24 1 5 8 -23 4 41 -12 25 22 -11 -26 34 3 -15 -1 -13 19 -2 39 31 10 11 -23 29 -8 -26 -11 4 -9 6 7 -14 -17 2 1 -18 0 -9 -5 36 -10 -1 -23 43 41 -4 -47 -15 0 -28 -41 -28 29 27 -23 20 2 2 -56 -23 -6 -26 -18 4 -23 -2 -35 20 20 1 5 3 26 -10 30 -22 -19 -47 20 -3 38 -6 -4 -11 11 -9 -26 0 0 -15 40 7 21 2 -1 3 -1 -14 -17 -11 21 7 -35 38 1 -1 -9 -18 -28 -21 -14 2 1 24 -7 14 -18 9 7 15 1 -16 18 8 17 -32 1 -14 9 0 2 -34 -3 22 -15 -8 -3 21 9 4 8 -21 14 35 18 -17 28 -8 9 -6 -10 -41 -3 37 26 -32 28 31 -9 17 3 5 13 9 32 35 -22 -32 -43 -29 -23 13 -27 7 -29 0 -34 29 1 1 18 12 -34 -24 30 -8 -28 14 -59 -2 14 -26 -7 61 9 46 35 29 -79 -1 -17 -10 3 -46 -27 13 -12 -33 -22 -20 -36 -23 12 -29 -17 25 -55 8 38 31 -28 -17 -5 -51 -31 -27 37 -25 -14 62 31 29 -15 20 33 16 -7 -49 -6 11 2 -28 15 36 30 15 38 11 -25 12 -69 -42 0 1 -13 5 59 18 2 14 9 -2 14 -29 -1 3 -64 -5 25 -22 -13 -27 0 -2 12 -63 -8 10 -16 -13 -20 -27 12 -12 -4 -3 -25 -36 50 -32 5 16 -23 8 10 5 -17 -4 63 0 35 -19 -7 -33 16 31 -30 -23 -11 16 26 2 14 14 14 -17 -20 -19 51 91 -16 -12 5 -13 -56 12 -16 21 -24 -15 42 20 23 44 -16 -18 7 -21 17 3 22 -29 -10 2 -20 -10 -15 -20 18 22 15 -35 20 5 4 -40 -12 -2 -5 -12 -1 -29 16 6 -6 14 16 -24 13 -16 20 -10 2 9 -14 7 1 5 -1 18 5 -25 -24 2 -13 8 -14 11 14 6 -11 -21 -24 8 -11 -13 -8 5 39 -5 5 -8 -11 -5 34 32 -7 -2 4 -9 15 -26 -6 14 -4 -2 31 -19 3 -9 -4 9 -4 14 -25 -11 15 26 -15 -7 33 -27 10 15 -10 -14 17 -17 -17 13 3 -37 -7 6 -25 66 15 -18 7 15 27 25 48 -25 7 16 19 4 7 -1 -16 -16 47 10 30 -13 15 -7 -24 28 -2 44 -2 -17 -23 5 -19 4 -8 -6 21 5 -17 4 18 -1 -14 -5 18 -13 -5 -41 27 -55 28 45 -2 45 2 17 -23 -9 36 17 0 8 -4 -8 -7 -47 -6 30 -20 -26 12 0 45 -43 56 30 -3 -23 40 0 14 3 -26 9 19 -10 -8 64 -24 -20 -13 30 51 10 4 9 -8 -36 -49 11 15 22 -27 -5 17 14 -27 34 -14 30 -24 15 -2 -29 18 23 8 3 -23 44 14 13 -41 -7 -5 33 8 14 6 16 9 25 -30 -1 -16 -31 -12 5 19 0 17 -7 -18 -16 10 -42 -9 11 -3 -5 -26 -7 -13 13 -23 -11 33 20 16 7 26 -21 0 -23 -5 27 6 -11 6 33 -23 -15 10 33 -15 -14 60 18 23 -24 32 -34 16 -21 18 -24 8 -11 10 7 -22 -24 6 4 22 17 17 25 -11 0 -44 2 -6 -42 8 24 -3 8 -35 13 -13 15 10 -13 5 -26 -36 18 22 1 35 24 10 -3 13 -27 -39 33 9 5 -5 -25 -4 -12 7 -19 8 -7 -7 2 -14 14 -8 -4 -7 21 10 -16 -27 -1 -16 0 -18 10 -4 -22 4 11 -13 7 23 -17 -5 -12 -12 -8 16 33 -21 -13 3 27 11 58 26 0 22 -2 -4 26 -17 33 -2 -9 -22 -10 17 0 -2 39 10 -17 -2 9 -45 17 -36 9 9 20 -1 6 30 -25 54 -1 8 -9 22 14 -1 37 -27 28 -44 -17 26 -7 -14 14 -21 -14 6 -19 -23 -8 0 2 -7 11 -16 18 -23 25 -32 3 -11 14 -19 -52 -42 7 -25 -4 -34 7 -42 -5 4 -14 21 7 -29 17 6 -16 -23 -13 -2 3 16 -9 -29 5 20 52 17 -28 -21 -1 58 -16 -39 -35 9 33 15 2 13 2 -19 -11 -76 -2 25 47 23 45 -23 -6 10 -39 -17 7 32 33 -32 28 -26 32 -16 -15 -8 14 23 -17 2 -15 15 -2 -1 17 -23 -27 4 -29 -37 5 -1 4 -9 -27 -19 22 21 21 -26 5 15 -22 -6 -1 -52 40 -26 13 -2 -22 -47 -21 19 -2 -12 4 6 19 25 -4 -16 32 -31 22 -12 -4 -15 -22 -11 -16 -13 -3 7 32 5 -1 -23 -3 8 -12 -25 20 -28 -19 -31 5 -6 5 -35 5 -23 -1 15 -33 6 7 -23 -22 38 -5 8 -36 -2 1 7 -13 6 -9 19 33 48 -13 2 -6 -4 33 7 -22 -8 36 -40 -2 -37 -14 7 -4 20 10 -8 31 -7 4 32 4 27 4 13 0 13 -23 -23 23 -10 -2 -7 15 32 7 -6 -14 21 -14 25 -26 27 -21 26 -13 21 -6 -9 12 20 -14 3 18 -14 -11 -30 22 -31 -33 -11 33 -14 -17 -17 -12 -7 2 1 21 25 -13 7 15 -7 23 -8 -12 9 -10 -12 -14 35 50 -17 15 -8 -39 9 3 29 0 22 -42 -18 15 14 4 9 -35 40 -46 15 -11 31 52 68 -30 -9 -8 9 -8 16 -2 13 9 71 17 -30 21 -4 17 13 -37 21 7 -18 -17 1 7 -19 -22 36 1 11 33 -24 -8 7 -23 -27 2 18 -13 31 -40 28 12 -38 43 0 75 47 -18 -7 -13 -47 5 -40 -43 16 -2 10 -18 57 9 -22 -1 56 18 38 -13 -19 -30 -8 7 21 19 -6 0 12 1 12 -6 24 -17 6 -25 29 18 -36 6 2 7 14 -12 -14 25 -17 -25 25 11 13 9 43 -24 -27 13 20 -13 -9 54 57 4 -12 14 18 17 -31 3 6 -20 -6 5 -13 -11 -23 30 13 -13 19 -4 8 -8 13 -13 4 -60 5 -30 12 2 4 19 -7 37 -4 -31 46 32 22 63 29 12 -34 0 -19 1 8 -4 -40 -16 28 57 30 -20 32 15 1 15 -4 -5 26 -8 -8 -5 24 -24 11 -8 -22 -10 -34 11 5 0 -41 -1 -4 -3 10 23 -7 -21 -14 11 52 -16 3 -22 41 -10 26 18 -1 24 -14 -25 30 2 3 -11 -11 4 16 15 -15 -20 -1 -15 -5 -19 -44 15 8 40 4 -34 -4 -6 20 19 -3 -5 4 -25 42 9 -12 9 -6 -16 12 -10 -13 -4 7 -10 -29 19 16 -9 -13 3 -16 12 -28 14 11 -4 17 18 -14 32 27 11 16 9 2 -21 -8 -36 0 -26 14 -28 12 -66 19 15 -65 -8 -20 -40 48 14 11 5 -20 74 -21 12 3 7 40 7 -41 7 17 3 -20 -22 6 33 -60 -4 -20 -9 55 1 48 -9 2 -9 -1 -59 -21 21 -30 -17 -14 -1 3 -1 24 -39 -16 -29 -20 31 52 39 0 5 -25 7 35 -7 -12 -54 34 32 46 -38 -37 -12 12 30 0 -47 28 8 18 35 6 18 12 -13 60 -6 -58 41 -9 -19 2 34 -7 7 19 71 57 -21 14 40 3 61 -25 -36 -38 14 4 -36 17 3 -31 9 -34 -10 -1 14 -113 -10 6 10 40 -40 -23 15 7 44 50 37 10 22 -5 -26 -55 0 0 -13 13 5 23 -31 35 -31 -22 -2 -14 18 13 -16 -21 49 9 35 -33 -53 -37 13 -9 -12 -8 20 20 14 -27 23 4 14 -33 -32 -11 10 55 -15 18 25 4 -34 -31 -4 -28 28 -29 -17 -39 -14 5 -11 -5 -3 17 -8 4 25 -4 8 -15 8 33 -33 -6 -42 30 4 14 -4 -5 11 -13 21 -30 9 -39 -15 3 54 12 -32 -10 13 5 4 -14 -23 0 29 -2 -4 -27 -49 8 9 1 -2 -14 -27 -8 3 0 3 10 30 23 22 11 7 7 -19 -17 -12 -43 -4 46 2 7 6 -3 46 -35 40 -12 31 19 -39 -16 -2 -29 -12 9 20 19 5 4 -14 -42 -19 6 38 -43 1 -13 16 -15 8 -43 -12 -33 -71 3 11 -21 -42 35 30 -22 -27 -30 2 -17 55 1 -24 -39 -29 -69 -44 63 -73 -35 -76 -3 -49 -5 13 23 -49 34 55 -1 -63 -35 -15 51 22 -33 -3 -30 -119 8 2 -11 -56 -13 2 -35 -6 5 -36 -29 0 -71 -4 -103 -38 -63 30 21 -44 17 -58 13 -17 93 -125 24 -29 -26 62 -28 39 -26 -14 30 -20 -8 18 -18 65 32 -16 -9 -6 -17 -13 -92 -24 -1 13 3 23 -35 20 2 -35 -2 -16 -23 44 -21 -11 -1 38 -18 25 40 0 27 -19 -66 -27 -57 -18 -11 25 1 -49 -3 -5 -27 -9 19 8 -23 71 -74 13 33 -46 -19 -28 28 46 -4 -5 -37 -72 38 32 -23 -20 -33 36 -55 -30 -7 -53 -12 29 -11 29 65 -30 -31 -40 120 -46 27 11 -21 -77 -3 -27 -24 44 63 4 -17 -32 16 18 -7 26 47 -62 -3 -51 9 -21 -51 35 -23 32 44 -8 1 50 16 20 22 1 17 26 24 56 -4 7 -17 -21 7 -63 7 -12 18 1 -21 17 -5 -19 12 4 17 -21 9 5 22 -20 48 10 -28 14 8 -14 -16 -2 8 -6 23 -15 25 17 -16 0 -35 23 6 -6 -29 -34 -20 -64 3 -31 17 -19 29 8 -4 -2 -7 -17 7 -22 18 31 21 1 -35 4 -19 33 26 -3 -4 -37 7 17 -28 23 -8 -11 -14 -17 37 -32 10 -11 -24 11 -23 36 35 3 14 -51 -23 12 8 22 88 -24 66 -34 46 -39 -38 -23 39 -37 -25 -32 -28 97 -11 18 8 62 -17 49 -13 21 -14 60 28 21 -76 26 46 -32 -26 38 57 20 35 31 23 -8 9 3 -11 -18 0 6 -40 -19 91 56 14 38 82 -16 -14 -3 12 -73 50 11 -8 25 2 13 39 20 -9 26 10 56 64 -5 -17 82 -27 84 -18 26 12 -46 -22 -19 6 0 56 34 9 45 -33 116 28 127 12 -3 44 31 0 -16 -40 4 -60 -11 21 44 37 -24 19 -9 44 1 -9 -13 -8 -12 50 14 24 -19 52 -32 -76 56 -35 -29 -33 -55 19 -29 14 32 -1 8 -10 30 -6 0 123 3 -14 -40 30 37 5 38 0 -2 27 -36 -14 25 -44 -8 112 63 -2 33 -41 -39 7 -53 -9 32 -17 4 17 24 -22 -15 25 62 -16 26 -49 62 21 16 26 67 -6 8 68 -21 30 -9 -26 -18 50 -18 12 -10 -31 36 -11 -7 -2 -7 -29 6 31 -2 -14 12 -69 -7 -8 -15 0 -34 7 2 -31 13 17 21 -5 -19 -59 25 -32 6 -11 -34 -11 -11 -4 -8 9 32 19 18 -13 3 15 -2 13 -23 -13 -31 -7 18 2 -10 -27 20 -114 -1 -8 15 -24 56 4 -19 -14 -32 -24 -28 -3 -7 16 12 -18 0 13 46 3 -15 -12 19 19 31 -7 6 1 -42 -17 -43 11 26 8 -40 -60 -88 1 12 21 2 61 26 5 22 -44 5 39 16 34 4 18 33 43 -32 54 -26 8 51 40 48 -103 42 25 14 -54 -3 58 -1 -66 74 11 10 39 -43 -70 -1 -23 76 -6 -43 16 57 20 20 59 12 5 -6 43 -25 63 -19 -1 -24 88 -56 53 32 22 2 -9 12 -2 52 3 65 -55 32 30 31 -58 -13 5 1 -19 -8 35 12 29 0 9 -27 -32 -2 -21 78 31 6 -9 66 -11 6 -9 -16 73 -1 30 -51 32 -35 -41 8 -48 13 59 -5 49 40 47 -23 3 27 -9 8 -3 -11 24 -23 -45 0 -35 -34 -12 -39 -19 57 -44 21 31 -69 1 28 -30 -70 -18 -8 -13 -28 35 6 27 -21 5 -14 -6 -88 -10 -63 78 22 51 -73 -35 7 42 -17 1 127 -29 -11 55 49 -49 -65 -74 -43 -39 43 -20 11 46 43 21 5 -26 18 14 5 -26 -18 25 29 -12 -31 14 -68 35 69 -38 40 -50 14 47 26 18 -6 -32 -11 31 -27 20 18 27 32 -51 2 22 11 53 14 11 63 -4 31 4 -17 -29 -51 15 15 -3 25 25 12 28 24 -17 21 -26 -18 44 -15 22 0 -15 -4 -32 25 -18 -56 30 -6 30 65 -18 5 -55 -7 -20 12 21 46 -8 -5 -10 -12 -32 -2 12 -22 36 -47 6 -38 40 18 -10 51 -11 -24 -17 9 -21 -13 16 -48 -33 26 51 22 8 -28 7 1 10 1 -19 8 -64 -30 -40 -8 35 40 1 28 -17 -3 39 -76 10 81 -7 2 19 56 16 74 33 45 19 37 -43 14 72 12 19 25 44 42 16 31 85 113 124 34 21 94 25 -11 22 13 28 13 19 34 26 41 45 22 11 28 93 0 -27 -43 -16 22 47 22 -12 51 -11 -9 25 -15 -63 3 42 1 -67 -40 16 27 16 122 30 -67 -56 40 11 125 22 -45 -17 71 -13 4 26 -45 45 -8 41 -3 29 -71 -78 43 -12 74 -36 20 6 -42 -70 15 63 3 -34 127 1 45 31 -30 -10 36 23 -28 -59 18 -24 8 53 53 9 -13 30 119 -55 -36 -17 92 48 21 34 29 20 28 -9 -23 27 2 72 16 -19 -22 23 -30 31 -91 14 -40 12 -41 30 12 7 33 -3 -42 3 37 25 -48 21 29 59 -12 22 109 -13 -51 57 -56 16 54 -40 17 -34 12 47 -21 4 -53 100 0 26 27 42 18 -59 17 -10 14 41 19 -10 -3 -69 10 -4 35 32 60 -21 -20 41 -26 8 -27 8 17 6 -17 13 -26 -32 3 -9 -31 -27 -17 -43 -15 -5 28 29 -11 -67 -26 -42 1 7 -26 43 -16 -29 -26 31 35 -26 103 -14 22 -26 25 -51 28 26 -10 17 -15 -60 15 -13 -5 -3 -7 40 -35 27 0 -21 -13 15 -13 42 -121 -16 -16 15 23 -27 8 21 -3 -51 34 -12 18 -47 -30 29 14 58 39 -32 24 -21 40 61 -2 74 -23 5 -20 13 -80 35 5 -12 -28 -8 -67 1 21 9 110 -92 46 -7 -29 35 103 -16 -11 54 -14 1 -16 -21 12 -35 -80 24 47 -56 -13 23 -14 95 -3 -40 37 -42 52 46 44 -11 25 -12 -3 -79 -75 -5 18 -40 37 39 28 -30 98 41 -18 31 23 -41 52 23 85 -15 40 21 -6 -48 -26 -26 81 10 30 -20 6 66 -19 14 72 42 33 -24 11 8 20 69 55 0 23 -13 10 -5 10 -12 45 -1 42 -10 11 -24 7 7 57 -37 23 35 -16 -43 50 2 61 12 7 -25 32 -13 -7 69 8 -16 41 20 -46 -20 -49 -12 56 15 41 33 25 25 38 -15 71 -17 30 4 -43 -21 -26 -24 -44 -35 -50 32 -3 2 11 5 -1 36 6 12 2 11 -43 -1 30 17 39 41 -26 -23 6 68 -17 22 13 14 -51 26 -24 36 28 0 56 16 0 -15 -16 14 -26 2 -25 -18 -4 -31 -12 -16 5 -42 -27 -40 9 -30 32 40 45 -16 32 40 -22 20 25 -23 16 47 22 -8 30 66 -19 13 13 -34 -32 -6 -4 44 -24 2 20 32 -3 -29 -11 7 -33 77 22 -20 8 6 16 15 -3 -18 17 10 70 -20 -9 -33 -22 -1 13 6 -35 29 -15 8 -19 -36 -30 52 13 39 16 -35 -39 -28 -17 24 55 -8 19 32 5 -5 -1 21 -42 -11 7 24 -94 51 6 23 -13 44 50 -45 38 62 -75 34 -18 -5 10 -15 15 -27 34 -62 45 -79 127 -24 22 -69 6 4 7 -7 2 -25 -21 11 13 -62 40 -15 -6 127 75 -60 10 15 -41 1 5 -14 -25 26 35 121 11 7 19 -2 -1 -17 -56 25 2 86 9 8 -9 -3 61 22 -48 3 -64 -35 19 9 85 55 -11 28 77 -41 14 -80 4 0 70 -29 69 -45 -45 -53 40 -31 26 31 11 41 11 -21 65 -37 -14 44 60 48 20 32 77 65 -79 -56 18 -8 8 -3 25 6 -42 45 24 -13 -21 -54 -17 32 67 -28 12 1 -33 50 -35 -12 -56 -11 -33 -54 21 -2 37 19 9 -5 21 10 -35 -27 8 62 50 -39 11 51 -9 21 28 24 -9 -62 -75 -79 -51 -48 68 59 20 -58 -20 32 15 31 -38 57 25 -17 17 35 20 -33 -25 47 22 -7 21 -38 -22 24 -49 -6 -38 -14 20 61 -14 21 -15 -21 8 59 -35 50 -16 -35 3 -6 -14 -35 -40 -19 23 14 19 -4 15 8 -54 82 -46 -20 -38 21 -63 9 3 -24 -2 11 -18 -8 24 -28 -17 30 36 -27 3 45 3 -20 -22 -45 16 -6 14 -6 16 10 8 8 -26 -5 -4 38 -20 0 -1 -25 -37 7 -20 23 8 2 14 -11 5 23 -2 36 26 11 -1 -11 -8 30 -38 -92 12 25 47 29 -25 20 -31 69 26 -26 24 40 44 18 15 54 -40 -14 -39 -47 31 -93 -17 -27 -45 46 16 -27 57 -50 55 -84 -37 -10 -69 -104 7 30 -16 44 41 -12 -15 3 -87 0 -21 -92 18 -5 -37 -6 81 -36 -12 44 1 -5 -61 50 38 91 29 -38 -67 -32 -23 52 -11 -40 44 -18 -30 -62 -34 -21 16 9 12 22 68 -10 -36 -28 16 -1 -19 -16 -31 45 24 4 21 38 27 -20 -68 22 22 -31 -84 -78 27 -77 -5 1 -90 -29 37 28 71 -27 29 113 -14 33 10 36 -78 24 89 -48 13 -47 -51 0 -44 -6 -67 -17 -34 83 -69 -100 0 25 -64 6 7 63 22 -28 -40 -57 -26 -43 -13 42 -10 70 -41 1 3 -8 -21 -113 47 -52 -44 -42 40 -38 -81 34 56 19 -20 -72 -43 0 -75 68 49 16 -74 -23 48 17 -80 35 83 -38 -30 29 40 56 -58 32 5 -7 -48 -55 77 3 17 -9 -27 3 -5 -42 -58 -58 -2 -18 -47 25 -25 49 10 48 14 30 64 21 17 -15 3 -21 -17 8 -12 -23 -68 22 46 26 2 -29 -14 7 4 58 -32 -94 -5 -111 -11 21 14 29 6 -15 -4 -25 -46 -13 14 -47 -8 -42 10 -26 -6 17 32 34 35 26 -8 -14 1 -3 7 -19 17 16 -11 5 -17 14 21 7 6 -60 35 -3 -18 -51 -18 -6 -73 6 -42 14 39 18 -10 16 -49 -13 -14 -32 -19 4 36 36 -56 -13 -29 7 2 3 81 26 73 -8 18 -87 -42 -1 -17 -38 -3 29 45 -21 -46 20 13 41 42 -3 -4 -36 35 -6 -33 3 -31 -14 44 -20 -63 -53 -45 45 13 33 -26 -41 32 -10 -77 -16 -23 27 -40 -4 18 -19 -26 29 45 19 -11 1 -7 -5 14 15 6 -30 -22 -1 -33 40 -23 82 -11 31 -6 -17 38 -28 33 15 -51 27 26 26 63 7 8 -19 18 -55 55 -6 71 -60 2 33 38 10 -9 -40 20 4 -41 9 -15 -5 -27 75 -15 9 6 -90 14 16 -7 19 4 25 -38 -56 -9 60 -2 -22 -61 -60 -58 -33 -12 -7 42 25 5 -2 -6 -25 -47 -7 -30 64 6 69 41 53 -32 -20 27 92 13 -22 50 31 -77 45 -20 -31 -70 15 58 94 -11 16 34 3 59 -26 113 -39 8 127 -56 12 -42 37 -4 38 -9 25 23 24 15 -18 -37 45 4 12 71 38 -15 -29 -8 43 79 -1 17 38 36 -13 8 16 -25 43 0 19 -2 -10 10 -13 -44 9 -9 -10 28 21 -27 14 -15 -4 -32 3 9 33 -43 30 8 -7 -14 -5 25 22 33 7 30 6 28 44 7 -25 20 -14 14 -51 -8 -14 -53 -4 -58 -1 62 -14 -56 1 -10 3 -8 -16 -46 -10 14 31 50 3 33 47 22 2 78 34 -35 6 38 -8 26 42 -15 25 -16 19 16 33 -2 31 42 54 -31 11 11 10 -30 47 14 -14 7 5 31 5 -21 72 -38 -89 32 -20 35 56 127 39 -27 65 16 80 5 -30 41 -14 -89 -43 46 -50 -66 -11 62 10 -14 23 -22 20 -72 -49 -25 3 82 44 -36 -21 35 -34 4 22 81 18 -46 37 55 -75 45 -21 3 -4 11 32 103 8 30 -35 114 52 111 63 69 -7 -20 -18 -21 -111 38 30 124 76 5 57 127 0 -100 29 33 22 52 38 -32 14 54 -32 -7 17 2 13 31 -71 36 -49 21 57 -111 28 -29 -24 -2 -74 24 -27 -47 70 44 48 -40 98 -58 -122 -100 90 2 109 15 -19 -57 31 20 -20 -70 26 126 105 9 -74 14 108 3 47 82 -4 79 71 -26 7 -28 -2 -59 -16 2 70 83 36 51 -30 31 -70 -79 53 15 -67 -16 -2 -70 127 53 73 -114 -34 -20 91 38 30 42 122 -2 34 3 3 -48 39 5 -6 -41 -112 -57 -22 51 36 -13 -31 21 -14 54 101 11 -13 35 -16 42 36 8 3 -16 31 -15 63 -120 -1 -23 27 -46 -25 -24 9 -51 -14 22 -27 119 14 -4 37 -56 7 -17 -53 5 11 -16 37 42 39 12 66 24 70 20 44 33 -16 -34 17 51 -20 -42 -17 -26 -30 2 -62 -24 48 -47 11 9 -72 81 17 -49 0 47 -38 27 -18 2 -29 -84 -43 46 -7 3 10 49 -10 -4 44 25 -35 21 -15 -15 4 -41 21 15 3 -48 -5 35 47 6 37 -49 -2 37 98 -16 10 71 27 61 -18 38 -6 95 -42 -12 108 -21 -68 -34 69 -70 -73 91 46 29 37 -24 24 -1 16 -5 -31 -5 -64 25 51 11 127 -15 -73 -37 91 -32 15 -37 7 -38 59 99 -28 94 -1 70 -56 -34 -54 7 -3 -3 -13 -24 16 7 30 39 -91 34 -79 -23 9 12 118 -8 82 -5 -14 -28 17 13 1 -38 85 54 30 -35 15 81 -18 11 55 -46 8 -24 -28 50 23 -4 -15 -44 14 -54 -33 -33 -50 29 12 -15 25 -19 11 75 -41 -2 -96 -56 52 -20 35 36 83 -20 -25 77 -17 -71 26 -54 32 99 51 24 -18 -20 32 22 6 -42 -8 -40 -54 0 6 25 -39 19 -25 -99 -50 41 16 45 -32 -74 88 13 -1 17 -32 33 88 71 5 31 2 -94 8 51 -25 12 77 -33 -40 42 -57 -42 -23 37 -127 -48 -9 52 -2 10 80 -1 -52 -7 -1 -16 22 -19 23 -20 -28 59 -28 30 -19 20 -9 74 -26 -22 11 21 61 16 59 -21 23 -3 -33 36 52 -43 -10 -57 -75 -29 -95 -27 -43 31 26 9 -26 19 -23 -14 45 13 -37 -20 -4 -22 -24 -51 -34 53 -10 -57 45 -19 -52 39 -11 3 -8 -13 -41 9 58 -15 0 -61 16 30 4 3 51 36 11 12 34 3 50 -18 -27 -35 19 -21 -19 -27 -52 4 6 34 -11 -35 -2 23 -7 39 28 -14 71 -31 26 50 -5 56 -7 31 -36 72 -26 13 54 58 34 28 79 -17 -8 93 -30 117 83 14 -18 58 24 5 33 63 -31 -3 65 66 103 -67 -23 12 19 51 59 -8 -29 51 60 -58 26 55 -44 -31 61 -57 120 58 90 -39 -15 -12 -25 -6 60 -8 27 16 0 -12 -28 60 11 27 -30 66 28 -35 66 122 49 1 -27 7 45 31 -34 -66 -2 11 47 34 -48 52 -61 68 41 36 19 21 -61 -19 5 -58 11 -18 -46 -12 -2 35 0 45 21 -49 48 -9 40 37 -38 -11 -71 36 -5 -21 45 5 -3 -19 -33 -11 -36 -6 63 -16 36 74 -18 -8 -27 52 -23 22 -31 -33 -10 25 -21 -9 24 12 -9 1 16 -5 -74 41 27 21 18 -6 -16 -28 -78 4 0 -77 36 29 14 -7 -91 -26 -44 -7 29 -14 -13 36 88 2 32 16 -1 15 17 33 6 -3 43 -30 -26 62 -16 4 50 18 -11 -14 -15 7 -3 12 4 -53 -1 31 19 8 -17 -12 46 -21 -21 -9 78 17 0 56 3 22 -1 37 -32 -34 5 -15 3 -13 -97 -59 -22 -15 8 4 -69 4 -44 -11 1 5 13 -1 29 -15 -29 19 40 -4 -89 6 12 31 -26 -26 -21 -19 -16 -10 26 12 5 -25 -4 -17 19 -16 23 12 -15 -21 -50 24 47 -52 -8 -30 -34 0 5 -5 21 23 -30 -41 45 18 67 -24 -1 19 17 -33 -22 -10 44 62 31 -16 37 -12 36 26 6 -27 -3 19 27 5 52 3 7 12 -34 3 58 28 66 51 23 -12 12 14 82 -23 -11 -19 1 43 59 -22 82 1 2 48 35 20 -1 2 -36 21 -32 23 -49 11 43 57 -28 -19 21 4 -53 51 -10 -30 16 -25 55 17 21 31 70 -23 88 -55 21 64 3 -28 17 19 29 28 3 -18 -3 26 28 54 -7 42 -25 40 -1 45 32 73 -17 28 18 54 -36 11 13 -35 10 -26 16 83 1 -3 96 18 9 -11 63 32 -7 26 -37 -4 11 15 43 41 -8 -48 10 24 -4 -14 -37 29 -66 -14 49 19 -27 27 17 1 89 12 26 -2 -25 77 7 -42 -25 10 35 -70 27 -34 42 -22 -12 -22 25 -6 -5 -31 16 17 25 19 -102 45 47 14 -1 5 16 -8 54 17 21 3 9 46 -11 17 0 48 -31 41 -38 62 -31 68 37 -19 33 45 21 5 42 22 -4 -8 -16 30 26 15 19 -2 17 32 -32 -12 36 -26 -33 -27 -29 7 3 -65 -30 45 6 49 -16 -39 -13 -9 15 26 51 12 26 -7 41 1 4 1 35 -16 -56 16 8 0 42 -48 21 -5 -13 -21 7 25 7 16 20 -9 55 -1 -11 24 -10 31 13 -1 -3 21 5 -46 -13 15 31 -8 -27 7 -26 16 -16 -7 8 5 17 25 13 31 -7 -21 -34 -21 27 10 -4 21 57 -29 28 -37 -8 -14 49 -23 0 67 22 -39 25 12 26 102 54 -11 -18 58 -33 45 17 47 2 78 31 3 -91 107 3 34 31 -5 30 -51 -75 -15 63 107 34 10 -68 -42 -3 -56 47 29 27 -3 102 92 59 40 55 -79 15 -43 32 -18 21 12 -48 98 -7 40 -34 -10 -24 -46 -61 76 -2 4 26 45 19 -66 -56 -6 7 37 52 -37 5 40 -27 -35 31 -5 71 62 -19 19 -30 36 -99 -10 46 43 62 -43 -99 36 -20 27 68 -5 34 23 2 -33 39 -18 8 21 -43 17 -16 37 -57 -11 56 -3 -9 26 -6 -54 -46 10 -31 -15 6 50 -41 -30 42 18 54 0 34 24 8 -10 -18 -38 -28 -55 18 -4 -53 -6 57 99 -12 65 78 -6 -77 4 -72 -91 11 43 -32 103 -25 11 -1 21 9 14 55 70 17 -90 -19 27 41 12 -5 -82 -32 10 -27 -4 -1 25 -9 24 -22 30 57 -24 19 98 51 13 -59 -40 -1 4 1 12 7 -10 -23 20 -8 1 -22 0 5 -33 -26 0 -2 0 4 -23 -57 10 41 15 -15 49 5 -21 26 25 -31 23 -25 12 -11 17 1 3 -19 3 5 20 -30 8 -16 6 -26 -18 12 -30 -8 13 -39 15 4 -40 -21 -35 -46 -16 -25 -22 -1 29 -5 -48 44 -2 -17 -8 30 16 -25 23 -4 14 -8 -4 29 14 -6 -3 -8 -35 1 50 -27 35 127 -14 -54 22 -24 -10 -21 -49 -64 12 33 -36 56 -1 -31 36 -11 14 -82 -21 -5 98 8 2 72 7 20 61 57 49 9 13 65 -68 38 -12 43 124 -16 30 12 39 -78 7 101 13 44 63 -23 -17 71 89 -48 -7 53 -4 44 2 19 -78 123 0 52 -4 25 -8 32 12 -81 -46 18 75 16 -7 44 -17 59 -35 34 -1 40 127 44 -27 38 -80 7 12 29 -32 -39 -52 28 2 35 4 -29 -22 -12 -20 4 -62 124 19 28 -34 48 -46 37 34 46 -14 -19 11 -18 -67 24 -66 15 -21 42 -41 66 23 8 48 -40 27 -28 24 32 29 21 55 -21 -61 26 105 21 -35 33 2 -23 10 7 -17 28 82 23 36 36 3 -19 30 -28 -11 59 -42 -82 69 -112 -21 26 36 -26 75 -1 -22 43 74 -20 22 -9 38 -34 -39 9 27 60 -5 -61 -41 -49 62 37 -1 10 -23 -37 -25 -15 26 -13 -17 -42 -45 -32 -12 10 20 -11 15 17 47 -15 -7 -8 13 -19 -35 49 41 17 13 -19 3 -22 -4 0 -65 42 -58 -44 -12 -51 -20 0 45 4 15 -4 -8 -35 -33 -26 43 28 3 -4 -3 -36 -11 -41 -28 -26 -13 -20 20 -26 5 -12 13 -15 56 58 -45 -12 28 -33 26 -44 -25 -8 43 5 -9 -4 -69 20 -32 27 4 -27 -16 -31 0 55 21 36 -18 16 17 16 41 26 -11 26 -21 48 26 -15 10 24 -15 18 18 40 -13 -54 36 -4 102 24 -15 88 -45 71 80 28 32 21 57 22 -33 33 -21 57 -3 20 -37 -31 -14 28 -27 29 52 1 58 25 -12 42 76 85 -8 24 -49 33 -66 39 29 127 46 22 127 32 -35 62 -94 2 23 103 73 -46 21 35 26 -39 -4 -88 -72 90 21 76 -26 32 -38 -16 83 45 9 -4 -123 -61 -50 19 -28 -54 -19 51 48 93 -31 38 -18 -63 117 -25 -38 44 122 107 42 -110 3 -71 -8 -68 -10 14 -14 -64 7 84 -8 -14 -37 16 18 37 -60 -41 -79 -53 29 33 -29 74 105 37 89 -17 26 60 -21 30 25 -35 75 31 -52 -32 34 -17 66 66 -33 57 -34 -43 77 44 -10 107 -113 18 5 26 -90 -16 -2 34 -37 -8 85 126 -24 -24 -39 105 -4 -19 -22 102 -26 31 14 35 3 42 19 -2 -10 -35 -16 95 18 94 30 24 18 102 40 -7 58 -31 -1 16 -75 -12 -16 -52 17 7 -9 27 35 -26 17 27 -9 4 -64 23 45 13 -29 24 -3 -22 -24 6 31 -59 6 9 15 -20 5 -46 21 -4 -9 27 1 60 12 55 -29 -77 53 60 63 6 19 -13 25 -36 9 4 -14 54 7 48 -57 -7 -26 -5 -11 38 12 17 26 18 -12 39 -9 19 -62 -22 -42 -6 -13 -11 3 -62 -8 -47 -11 23 17 -24 27 -25 7 -38 -12 72 48 -44 -44 -36 39 10 -52 4 49 38 -39 68 63 57 38 29 -27 65 -49 -36 -29 -30 71 -108 34 63 -25 40 18 -14 19 -29 -2 59 25 -12 21 -8 -6 33 -90 3 33 -22 16 50 -122 84 -28 96 36 111 81 37 -23 -4 9 35 -50 47 62 -31 23 -115 31 -43 -51 -46 76 -62 120 3 101 21 55 69 0 74 10 87 -41 60 -29 4 68 -83 81 38 36 6 5 65 30 -12 53 21 -124 49 18 -55 -75 -43 74 -23 2 20 30 27 -19 2 -9 10 22 1 20 -76 -8 22 48 27 -12 47 -37 -60 10 9 10 42 29 42 19 25 19 18 60 -22 42 -66 22 103 22 47 -3 18 66 -9 -7 75 -84 83 18 127 -16 20 -57 -17 -69 38 -73 -24 -27 -34 35 70 68 -3 23 21 9 -15 11 -83 70 66 14 -20 26 53 42 -55 -63 8 -41 11 -24 -6 112 44 10 0 -30 -89 -24 -42 -49 53 5 -46 -20 -14 -38 -31 8 -31 5 45 20 -22 -14 23 -1 19 -68 40 -8 -37 48 20 -24 14 -7 -40 -16 -18 16 -8 21 -20 28 3 -31 -47 13 -6 26 24 -11 -35 -4 -86 -4 48 5 -34 43 22 32 -63 17 -22 -2 -25 7 6 -38 -8 25 -19 -39 -40 -33 -4 38 27 54 2 22 -8 -4 -12 -49 -5 3 -21 -15 17 0 -33 42 3 66 1 -1 13 -34 35 -29 -29 -4 102 17 -56 -52 28 -88 7 89 21 -34 39 -14 95 81 3 -9 3 -70 -83 39 4 -69 23 9 49 3 -28 15 23 30 1 19 -49 -72 -109 13 53 -104 -5 -31 -33 -32 -33 -27 25 29 8 -52 -44 67 17 -24 79 -6 -48 -2 -108 46 -17 -11 -4 -73 18 -90 -64 0 67 -63 46 -72 -122 19 -31 -6 -19 7 11 -35 -53 65 0 -9 11 45 -14 -3 -69 15 -95 60 68 20 25 -19 -97 11 41 67 -34 -112 -45 86 -39 23 -4 -13 31 60 16 113 39 90 47 7 -5 24 81 107 4 120 68 -24 20 18 18 -46 18 97 -55 -32 -70 60 -41 72 -79 53 -13 24 -28 0 15 -44 -97 -24 -71 -47 3 -36 -2 -115 -40 -13 -10 -50 25 23 -38 93 -32 -34 65 29 81 -33 -13 -79 -15 19 34 10 -6 16 87 46 -20 -33 -22 5 -58 -49 -12 -49 8 -63 -34 1 5 -8 -10 -39 -36 13 25 9 -14 -26 14 -23 23 14 -29 -13 20 42 -98 -6 28 -4 -105 -16 3 -15 -33 8 66 70 64 -7 -12 73 68 23 17 99 65 -19 -20 38 121 29 3 0 24 1 26 12 58 15 35 68 43 -9 28 -61 14 -26 32 -7 13 1 27 -50 -16 71 -63 -56 -28 0 22 -17 -52 -53 -20 -26 -48 13 -78 7 -28 51 31 -82 2 -27 59 18 22 -19 45 -1 -12 -22 -10 -3 35 13 -24 29 -17 2 -51 80 -13 4 39 81 81 18 7 30 10 23 18 -47 42 90 -48 55 -40 69 -21 24 51 97 -78 -16 40 22 -4 -63 -10 -7 -104 23 -35 -78 35 45 16 -17 126 16 28 -70 6 1 32 4 123 11 14 46 21 5 2 -81 -26 -63 22 3 26 -86 -18 28 32 -39 -19 60 21 92 28 42 -8 30 -55 -18 4 -11 -14 37 -20 23 3 -4 -6 51 -53 31 26 -31 -11 64 66 49 41 -22 15 17 4 0 35 -21 13 79 -32 -28 26 -44 -46 55 53 17 -16 4 29 23 -46 -68 17 65 -11 28 45 29 71 -30 106 7 -10 -68 27 4 5 -39 1 -62 -2 -57 -7 33 39 117 11 47 9 20 -28 -18 55 -45 -17 78 4 -33 -43 77 50 39 -37 40 69 23 -87 8 24 4 -29 31 -10 13 35 1 3 10 76 -57 24 -24 -27 35 1 17 32 22 -73 -52 42 34 20 -15 -14 35 2 25 64 -3 14 1 22 -17 13 2 -8 -11 -38 -9 -33 21 8 10 18 21 68 -22 -68 5 -15 20 -128 -9 4 -5 19 16 -4 88 -9 -27 22 55 -23 -17 -21 5 -24 6 4 -16 -16 -12 -26 -51 28 12 -11 9 -24 9 13 1 47 -1 -11 19 35 -21 33 -19 22 -4 -9 -3 0 -49 17 33 -17 9 18 -4 -4 23 -15 -31 -31 26 2 22 -11 25 -52 50 18 11 75 34 -12 42 32 24 47 37 -2 9 18 34 14 10 35 27 17 43 50 0 63 64 67 2 9 2 53 32 67 12 33 1 93 22 -12 50 34 -40 6 -2 6 69 12 32 -15 -24 65 71 4 22 54 32 45 35 31 -1 27 4 48 6 77 72 -65 37 81 65 5 48 84 39 -10 51 11 29 37 -33 47 54 21 14 -7 76 -22 48 53 33 -6 -27 -28 -7 -18 10 44 89 23 -74 -44 -81 -91 6 14 -36 23 -49 -72 94 -56 -5 124 36 54 -48 13 34 -48 -22 104 3 34 36 -52 18 -49 -11 -56 36 -56 19 -29 -23 3 83 6 0 18 8 49 45 -53 -34 18 24 25 5 34 19 -1 15 -8 -12 27 -19 15 9 -6 -12 69 15 29 14 -6 13 -11 -38 -13 8 31 -27 -73 -36 -32 -63 -29 -5 -52 6 -23 11 -25 -48 -24 39 3 79 28 -26 -3 37 -35 -29 45 -42 6 -20 13 12 17 -9 -4 14 26 26 -37 -20 52 8 -57 -24 4 49 22 -8 -5 28 28 -22 -18 11 28 71 11 -29 -113 -21 -56 39 -18 -44 -7 2 16 5 6 40 23 41 -35 -25 4 59 41 -15 -36 -47 55 13 18 -13 74 35 -2 -21 -2 -23 -3 -19 -24 29 19 -2 -1 1 -41 11 25 4 -24 -28 9 33 58 -16 -7 -58 26 14 17 0 34 -10 -30 -26 -42 2 37 -2 8 4 121 42 37 39 1 -18 -22 -12 24 52 -28 -46 -4 26 -65 62 74 -26 0 86 14 12 -30 -67 -37 -27 0 -10 -19 47 48 -25 16 11 -39 -50 11 -31 24 -25 43 51 -21 -46 38 29 -23 27 -48 -28 7 5 52 -47 14 -11 10 -22 -16 -9 -53 -39 -28 86 -33 49 -25 -38 -24 47 -17 -40 21 2 11 48 37 -13 9 -45 77 1 35 41 57 -35 -11 73 6 -57 70 47 51 78 -24 61 -36 20 -54 19 12 2 -3 53 -46 -19 67 12 -40 27 -14 -26 -17 17 8 2 38 -51 4 89 -18 -71 -15 -41 13 29 -23 33 47 9 24 -3 -51 -7 9 27 -3 29 0 -20 -71 -18 -30 -34 -24 -12 -53 14 33 68 -23 -7 32 -39 -6 -19 5 -27 -40 125 -16 28 37 -36 -51 -27 -19 -76 6 80 -10 -9 26 13 127 -60 18 -18 23 3 -52 -46 9 16 0 -57 0 38 -116 -31 40 5 -38 48 -47 -16 -28 -11 22 -3 -36 23 52 -5 -5 -29 34 -23 -7 -7 37 2 35 16 51 -36 -22 11 -9 -30 -8 -9 -27 -24 26 -14 -11 9 3 -42 -47 -32 51 -10 -18 26 -8 -5 -17 -10 -22 27 -48 -9 -6 49 -11 -17 -31 36 -5 -12 12 -3 -5 -54 18 -24 -30 38 -41 4 22 -16 -6 -14 11 44 12 -44 62 -5 33 25 32 3 1 -11 -62 46 7 -67 -3 -27 18 36 -11 -55 -20 1 25 -25 20 6 18 9 123 4 24 -39 16 -45 -5 -64 22 -26 4 15 -66 5 -83 16 120 -12 0 -15 25 37 118 16 -28 7 49 31 -34 -94 2 54 -62 -41 -20 -52 -44 -38 -8 37 -30 -42 -20 -9 68 87 21 -21 14 -40 45 -32 15 1 -67 -55 1 -51 35 39 -20 5 -14 -38 -67 14 -53 56 16 -14 4 21 -52 -19 -45 -33 6 -17 -38 -22 56 25 -47 -30 34 -10 -19 -13 8 -7 -54 57 15 71 -4 -14 1 -16 28 68 48 81 -54 -74 -35 -13 -17 2 -43 -17 -7 8 -9 3 -11 -92 32 27 -28 1 -60 67 60 -15 13 -42 48 -37 0 86 2 53 56 -22 43 10 54 -31 -8 -13 2 37 -19 0 66 33 -23 21 49 -16 -11 36 38 4 57 125 -66 -9 -10 92 55 -51 -84 43 28 -20 -5 63 -56 0 -32 79 8 -5 -31 39 37 3 43 -46 -41 -27 -4 -26 6 -5 28 39 13 23 -1 -25 15 -3 -18 -39 19 19 -15 -19 36 -15 -29 4 -5 -22 39 8 -30 44 -13 49 -52 -51 20 -1 35 -9 15 -7 -40 -23 25 3 55 -10 42 14 -34 10 -68 9 13 -15 -34 13 47 20 41 -15 64 -10 44 -29 31 -8 -20 26 7 -65 -9 29 -27 -3 2 25 5 -49 -111 27 -9 2 22 -7 -22 -33 -1 -2 20 -6 5 17 28 -12 -23 33 -50 -50 -5 -5 -30 1 14 111 -24 -52 31 47 4 30 -10 39 -16 76 -122 -6 34 -23 -23 -59 22 59 -26 -127 32 45 -34 -63 34 -43 -1 -44 108 37 29 2 13 -80 23 -5 -90 -28 -24 -12 78 -2 32 13 19 121 41 46 -86 48 -12 -16 -72 -20 -21 12 31 59 48 4 101 31 -14 -28 17 -33 -11 32 112 22 -53 -3 -13 33 28 124 -50 -60 -54 -57 -46 -8 55 35 -2 -60 36 0 -49 18 -27 -18 3 26 29 -36 -11 -57 116 127 -13 28 -43 -101 -35 -39 -98 -1 2 -40 -28 26 105 -7 0 43 88 -53 16 85 -29 -89 -18 48 -34 64 26 10 -65 0 -14 13 32 41 -22 -15 22 7 40 -36 -15 -61 4 38 -73 13 -11 30 16 45 -55 -32 -3 -52 16 -40 -33 -59 -20 5 -40 -110 -78 -68 -16 17 54 41 30 -48 125 -18 53 9 -8 17 -12 -30 57 69 -8 -32 -95 64 21 49 37 2 -12 20 21 -64 36 -16 27 0 19 -26 55 3 17 13 -15 33 21 -26 18 32 -4 27 -3 -15 1 22 11 2 41 4 -44 13 76 -12 -33 -12 -4 -8 26 -6 -10 -26 -18 -21 -30 -5 20 -12 25 -13 -35 -37 -64 23 -20 23 23 0 12 -6 -30 1 69 11 -49 -4 -44 -58 -33 4 10 21 -15 -26 -39 34 41 -24 -7 50 -25 6 18 18 15 -5 19 -42 72 -28 -34 14 3 -56 -24 -37 27 26 5 46 19 101 62 95 32 78 -4 -29 22 42 -20 -14 14 85 93 66 44 -10 -49 29 7 8 27 -44 11 54 53 16 20 -77 -7 17 12 35 -16 -9 77 57 -6 15 38 -6 23 41 -54 11 -41 74 -5 117 25 32 63 -21 -34 -53 -63 -11 73 54 11 15 2 23 -17 -5 21 24 -69 11 -7 -14 0 -47 41 -43 5 2 -15 -11 2 101 -39 65 5 -9 7 52 43 -31 -14 -1 50 67 -52 -1 -75 22 33 -13 -16 8 15 -50 28 71 1 31 35 27 -25 101 -27 -5 31 -78 -37 -77 31 24 -34 69 29 49 -52 11 -95 15 82 -35 -31 2 7 54 81 -86 41 -12 1 16 65 91 4 -24 44 43 70 -12 -1 -45 -39 9 -22 -46 13 10 2 11 20 70 30 -80 12 -39 67 123 -24 -15 88 -12 107 17 57 -32 -3 -33 -93 -27 -1 -5 39 53 39 -57 -16 82 -2 -66 18 -12 -12 103 -14 33 10 12 -1 -13 -35 30 27 -3 -3 -4 -28 1 -13 -26 -18 76 5 -71 -31 10 -25 -39 -78 60 35 -28 -25 28 -18 -2 2 55 3 -18 -17 -18 7 34 64 8 -18 32 20 41 15 -12 14 -114 3 -28 23 6 3 -4 15 -37 -41 -33 -26 -26 -14 -22 14 -28 34 43 8 41 24 1 -44 46 13 -30 -25 -12 -25 14 -43 22 -13 28 -19 6 9 33 52 -8 7 -15 101 -3 17 0 -45 54 -15 14 40 -82 69 59 2 25 88 87 48 -42 -2 4 0 13 -13 46 -75 61 69 110 125 69 20 65 -9 1 -20 -41 29 70 26 65 47 -15 -6 38 48 -21 63 -4 -6 9 67 47 31 64 -24 30 25 -12 30 9 41 107 -7 43 13 -71 -32 19 -24 67 -36 -97 89 -21 35 21 21 -10 35 45 79 -21 14 -17 0 -19 42 63 110 33 -16 112 2 24 87 24 -24 61 49 -3 -66 -33 14 -28 -31 -7 9 -39 19 56 16 -68 -26 5 36 -31 34 -42 22 -17 -68 25 1 41 -1 7 22 -66 85 31 31 -17 14 39 -4 -48 8 -69 -2 -46 67 -35 -10 -31 18 38 23 33 2 -49 -37 -17 22 -23 -9 -5 6 11 126 8 20 -17 38 0 6 13 40 76 35 20 37 62 -12 -12 53 -10 -57 -21 -46 28 -17 -43 56 -46 -12 18 41 -32 27 49 12 22 -25 0 0 35 -1 11 22 -5 13 1 7 38 11 -3 20 2 7 13 -18 6 5 -3 26 25 15 31 31 -39 -22 22 -18 -27 7 5 16 30 -24 33 -5 -6 -29 37 6 -14 -13 -6 44 -16 -16 12 16 24 24 -26 -2 41 -46 5 -1 13 -69 18 -18 -3 34 -28 6 -7 -13 9 -22 2 11 -25 19 8 -12 23 -9 24 -12 -1 -14 1 -2 11 51 31 10 25 -4 -6 13 -5 21 14 68 -11 -12 7 20 -59 34 -38 16 -22 30 -24 -9 -72 25 -34 -12 22 -43 36 -45 60 23 4 -27 2 -77 -60 5 81 44 -30 40 -7 50 5 -87 -51 9 -23 -91 38 -2 -19 23 -44 -4 57 -77 -29 49 -61 -1 36 -7 39 -43 -2 -71 -20 -63 -38 8 77 25 83 -57 33 44 -31 43 22 -59 8 -67 -10 -7 10 7 64 4 -65 -9 36 47 65 -28 -16 5 -5 -20 28 14 70 -124 -45 69 18 15 38 -36 9 27 -12 -6 16 39 37 16 38 23 -51 8 -91 -40 62 -100 2 10 31 1 -21 7 4 -6 48 10 12 -47 1 24 -75 -49 -26 17 -25 -30 -25 30 41 -11 13 82 -40 71 -27 -32 10 51 54 -68 -46 -58 -37 -70 13 7 -21 1 25 41 -2 45 -14 -16 -2 23 -10 22 -17 -44 -51 2 1 13 45 -35 -32 -5 -45 -34 -17 -70 -37 26 62 50 -17 -77 19 -11 -102 23 -5 39 59 -3 13 -1 -32 16 -55 -27 -41 -10 -8 15 1 -42 -44 34 -21 17 0 47 -6 69 -14 3 31 44 32 30 -4 -10 22 -31 39 -16 -5 -15 4 -33 33 -4 -32 -21 14 -38 13 4 22 9 -5 -59 12 8 13 14 -17 3 -15 -33 16 -12 -5 22 10 -16 -18 -21 -8 31 26 -22 30 -36 36 20 24 29 29 29 -7 19 34 1 6 -15 7 -11 8 -18 -13 -16 -45 -31 13 -12 54 -1 21 -22 62 3 -28 58 13 -47 -76 -8 25 -89 41 -16 25 -14 7 63 52 20 -74 -35 -48 -16 46 -62 26 11 23 48 -11 -2 -8 12 -42 49 -25 -46 -20 -99 -54 25 -9 -11 -44 6 24 74 86 -5 37 54 11 97 -10 10 -16 14 15 -28 1 69 -112 -2 0 -14 -21 -19 45 8 -19 -43 -17 -3 26 28 -57 -8 70 3 23 35 66 -79 52 -5 91 22 7 -63 68 -32 -15 40 -81 11 -26 -9 19 32 2 10 -3 -44 -49 76 -26 24 7 -13 -24 -12 -64 56 -1 7 3 -4 47 46 35 -50 -52 -24 -16 -42 20 13 39 -64 24 -1 -13 -44 38 36 -22 114 -41 44 -38 -16 67 -75 -77 -10 -26 -23 -41 -14 27 35 -63 -32 -48 88 50 5 55 7 -69 1 -49 -8 13 -87 80 -6 -39 -56 32 84 -24 16 30 -54 -52 50 -52 53 87 8 -31 62 20 -67 52 -13 6 11 -16 -33 -61 29 -36 30 9 29 40 39 -3 24 33 -47 -14 -27 1 24 -5 12 32 62 13 15 -8 -4 40 -49 13 21 -3 -6 25 -45 60 -54 -3 35 -16 4 3 1 -42 -26 8 -15 -8 -46 -76 24 29 6 -1 -21 97 -22 10 17 59 -51 -34 -38 26 -9 11 -32 43 -9 -29 51 25 10 -14 13 27 -17 0 44 6 1 -20 -1 -2 -37 32 21 13 -64 8 -16 -3 37 -59 16 -20 45 78 -22 47 -55 -9 -18 66 -26 -31 -7 -63 89 8 50 -41 35 20 29 50 -8 -49 -31 -49 36 24 58 35 6 20 14 28 -42 -114 -2 17 6 2 127 -39 -8 83 14 -62 11 -21 4 -14 -6 55 7 28 105 -2 -4 38 58 0 -1 -108 31 -31 -56 47 -23 -16 2 0 -54 8 -32 74 -85 69 -41 -91 102 -10 -52 2 -13 0 34 -50 -8 -59 1 5 -81 45 75 73 12 -1 -49 36 -82 0 31 -4 48 47 -127 -30 37 -41 -15 -31 58 -127 -1 -23 61 -5 -52 -41 0 -37 -28 -57 3 101 -73 32 -126 -8 15 -29 35 -59 49 -3 62 39 -61 -41 -3 -35 -19 24 13 -70 -39 79 -27 -6 29 -1 29 -127 18 -47 3 75 17 53 10 -37 61 19 -105 -3 53 -41 -9 29 -15 -57 36 55 79 35 -6 -26 127 -46 -101 -36 83 -7 -42 10 106 -9 -10 -57 -36 12 18 0 55 -21 13 7 -60 -9 45 12 -37 7 1 5 20 15 13 -46 -43 53 11 -13 -41 18 31 5 -18 37 2 -30 -32 -20 -45 -7 -10 -30 -1 7 -1 10 1 -23 -53 -36 9 3 -30 8 26 -11 3 0 -62 -10 28 -28 -3 90 23 -17 21 15 -49 41 -21 30 24 -47 43 8 2 -10 -8 -50 31 -46 14 -1 21 -11 -26 -66 3 -11 0 1 -21 -22 8 5 -13 55 -43 39 -19 72 50 -28 -1 16 23 84 50 -51 36 -94 41 -27 -14 -19 6 -22 36 -79 46 38 -11 -19 -57 -35 28 30 0 -60 13 83 3 -30 7 -3 35 23 17 -10 -38 39 -54 -8 -29 -14 68 -5 31 8 23 16 26 61 -6 -7 47 22 54 43 23 26 82 3 -55 -47 -32 30 41 18 -12 -86 63 -10 -12 -23 56 122 -15 3 -21 -36 0 -20 -2 -17 -41 7 85 -54 -12 -47 39 -37 -29 40 -40 -4 47 -31 66 67 51 45 28 21 -70 -34 7 -1 24 2 -13 -56 -42 42 -10 6 -38 38 3 54 21 -54 33 -73 -17 -30 -42 8 -60 0 -13 6 -42 63 49 -12 -24 14 27 -44 15 20 -18 -53 69 79 46 -18 15 -9 -5 76 92 -21 13 -24 39 23 -21 -35 -6 -22 -20 0 -24 25 31 69 14 14 26 -4 20 99 -58 29 119 94 46 7 -5 57 26 59 0 -5 33 5 13 -60 21 44 40 26 -40 -10 29 8 -24 24 -15 3 -19 13 2 12 -45 19 11 -27 3 7 27 -26 -14 -16 -1 65 -7 54 -14 35 -36 25 18 29 -42 -61 -58 -7 27 -27 -38 18 -5 -18 -18 17 9 -10 33 -1 -4 -12 23 -7 -20 20 -43 59 -20 53 -64 -14 8 -5 31 28 -8 45 15 -53 12 -18 23 -34 7 -71 -2 15 -6 82 21 44 -3 35 -27 43 -12 -14 24 14 33 32 -7 -11 35 -42 79 -6 41 -11 -3 -33 13 -36 98 31 102 26 62 48 71 -128 -35 -29 -24 -21 70 34 -66 15 -73 -39 -30 -42 -44 9 -69 21 -50 -1 -54 -40 -1 -29 -37 -69 -76 41 -19 -25 -33 50 6 -7 -46 -66 -12 -9 -128 4 30 2 -1 26 -7 124 -82 9 -128 -38 58 -42 -43 2 2 68 -10 -18 7 -31 -11 -38 -104 31 -11 3 -8 15 -15 25 -15 6 -107 -2 36 -14 -41 -18 36 39 -83 -7 77 -2 -99 -20 -84 9 49 -2 33 29 11 -63 -54 18 -27 12 -23 -34 -5 2 -22 41 -44 0 -8 36 -52 -36 -4 21 14 28 -33 31 -27 10 14 -67 -117 -14 15 -73 -44 -9 57 -48 -73 53 37 -22 38 -41 15 -48 49 51 -39 -43 9 -110 29 -21 -55 -26 -19 1 38 3 -37 59 -38 81 -82 8 23 9 -75 -35 65 -40 33 79 19 23 -73 49 46 -23 -51 39 14 1 55 65 -53 -23 53 49 -28 30 33 -29 22 8 -10 -6 19 26 -16 -56 18 -30 -34 -29 22 12 61 -3 5 4 9 13 78 -22 94 -12 -39 45 36 -44 -22 38 -25 4 63 11 12 -30 6 3 55 -44 31 17 -22 -5 -23 -24 27 -60 -56 -31 -11 8 0 -40 13 -19 9 10 56 26 33 26 6 -50 4 19 5 38 -19 -14 -23 41 -27 -40 -13 -32 33 -8 -7 38 20 13 2 -23 23 -1 8 -27 17 33 34 -76 27 5 68 -22 -6 64 37 27 62 8 19 14 78 31 27 54 10 26 82 5 -29 60 14 76 81 13 99 26 -67 45 61 4 80 37 55 15 -11 -62 -31 -15 66 97 59 0 -30 -34 92 2 -2 -8 -48 -21 27 10 106 39 39 47 76 7 6 -27 60 35 33 -5 -2 2 43 50 45 -19 -49 62 23 74 72 33 55 32 63 22 22 69 -6 -27 -1 7 91 124 79 -10 -38 125 28 43 19 68 -23 39 -41 -16 -24 -1 -10 -12 7 42 8 29 63 -87 1 7 -57 -42 21 -19 -10 -13 -3 63 -13 -69 46 24 65 -40 -55 -10 20 5 4 -15 -44 42 -34 -3 5 8 7 22 -52 -5 -34 9 51 20 -51 57 -10 53 -31 -15 56 27 -95 -1 -12 1 -29 -27 -20 -27 -47 -9 35 51 19 18 -84 -48 42 17 24 6 -30 -51 12 -32 27 23 -28 -12 -38 -4 1 27 34 17 -50 -11 6 -8 15 13 -22 -5 -13 -8 -2 0 -8 -10 12 42 -30 9 22 9 -1 -11 45 -4 -6 -8 -6 13 14 23 -8 -66 -30 58 -3 2 -12 21 2 -1 20 -7 1 -4 -24 -15 3 -2 11 15 -1 -32 -37 13 5 9 -49 27 4 13 17 8 -13 -4 -19 34 -8 1 0 -14 -24 0 0 -4 27 22 0 -45 8 29 14 36 5 36 -6 -64 -9 -6 10 -8 -22 -16 10 -11 0 -1 -24 -30 -12 19 21 19 21 -19 -7 52 43 -60 65 28 3 2 6 21 24 23 17 -14 -9 -19 15 28 -91 10 -5 -7 22 14 8 11 -35 27 -31 -8 8 84 -28 -8 63 34 42 -1 66 22 19 -10 42 -72 -36 -46 -30 43 38 38 -51 25 -105 44 -46 15 55 44 -33 -7 -41 -94 41 -31 4 5 1 -5 -5 5 -13 -29 -13 24 34 -127 -16 32 -109 -34 -49 12 52 -1 -13 11 -41 25 63 56 23 -78 56 43 24 41 39 15 -32 -53 7 34 -17 -12 75 -6 54 -34 -19 86 -11 -61 66 25 -11 56 -41 -18 23 39 -96 11 16 -42 8 1 15 4 27 27 -52 -22 -37 -35 -2 41 48 57 27 8 6 -49 1 -22 15 -24 -58 -10 -16 31 3 -26 -9 -35 -9 59 -45 -5 -16 14 15 8 -23 32 26 34 21 -15 -31 23 31 -18 -17 52 16 34 3 59 25 -3 10 10 -4 59 6 17 10 -24 1 -16 -41 -23 -2 -25 7 -19 -5 21 -75 7 26 9 -9 23 1 23 20 17 0 -19 86 -51 27 17 -17 18 -2 -11 -50 19 -2 6 3 -9 -5 -15 -20 -27 -45 9 11 20 -7 -9 -21 25 -15 -5 0 0 2 48 -15 17 -1 15 -13 9 -27 28 -24 22 -26 31 26 4 -21 -14 -14 -14 12 -3 2 -22 35 -10 -14 13 -13 -44 -5 7 32 -12 34 22 17 -56 -4 -17 43 34 15 32 12 -15 -38 -28 -21 -9 -13 14 -29 -14 5 55 38 18 38 29 -30 64 -7 -17 -5 12 -48 -3 27 -26 -30 -49 -4 21 44 -60 40 93 25 -9 53 -26 72 30 10 -20 -10 10 48 -17 -50 -37 -31 -20 39 -21 14 5 6 -13 66 37 1 -64 81 61 0 -38 -4 -26 -26 35 53 29 -74 49 72 56 42 -8 34 21 -6 57 77 46 -28 -65 -12 4 84 -92 71 42 65 59 41 78 28 65 -25 10 14 53 0 33 42 125 29 -11 17 29 -8 -48 6 5 25 -78 0 -5 10 -31 0 8 -45 11 38 -45 -34 22 -36 9 0 -18 41 48 -123 -4 -45 -3 -33 37 -9 35 -49 -71 10 -5 26 37 89 40 -7 23 3 11 -50 -25 32 15 16 37 -14 -21 -52 -38 25 0 -49 -97 -21 39 -111 13 42 3 42 22 40 -29 -8 18 -15 9 -36 5 45 -63 -20 6 49 -12 25 44 121 27 -11 -24 6 31 -39 37 -16 23 -34 5 25 9 -2 0 -4 7 -28 -12 74 0 -5 -23 3 -53 14 -39 17 13 11 -57 3 10 -17 -30 24 26 -74 -8 3 -1 -6 -39 -5 -24 -12 0 -49 9 19 16 0 3 43 26 8 16 -6 16 -27 -26 -21 12 -9 -22 -38 -16 33 18 21 -1 -13 -43 26 -8 -10 -1 5 -64 58 -31 12 -23 2 20 -8 7 -65 0 17 -43 -44 -6 -12 36 -30 -26 91 -45 2 26 96 29 79 40 17 57 56 1 39 -41 91 38 82 -3 7 -42 46 57 -124 54 -6 0 11 -1 -40 97 50 19 -45 46 18 -9 52 5 21 -61 -36 76 27 55 11 8 -3 -20 35 -36 38 12 67 110 -75 57 -7 -47 -40 -40 47 89 -45 -20 -20 9 35 94 59 1 18 68 4 18 59 -26 -13 2 26 61 -47 -128 -122 -15 5 46 -43 -25 36 31 42 1 86 -2 42 66 -119 38 24 53 12 17 5 13 11 15 1 2 -32 36 33 -8 -39 59 65 44 9 31 -11 0 12 10 10 9 -37 0 117 25 41 49 -13 15 -24 -19 26 33 -18 23 -75 75 -77 30 13 -13 25 28 1 31 72 2 26 -9 21 3 9 -28 12 -41 38 14 11 -25 -36 -10 -53 2 -38 40 -8 -10 -14 29 26 -4 114 -22 46 -58 63 17 14 -56 1 -22 -24 -8 -6 51 64 69 -5 -53 -35 -9 10 65 -16 -17 -13 -50 6 -22 2 -15 -19 11 5 23 -1 -33 5 -30 -17 64 -27 -26 25 -16 3 14 33 40 39 31 33 -29 9 -6 -9 -6 4 26 38 -10 -4 -22 -23 3 2 6 -4 -59 28 -8 -6 21 -18 62 21 -21 -11 48 20 -10 -1 -33 -49 15 28 18 -10 4 2 5 22 5 -3 51 -4 26 37 -60 20 15 11 77 0 12 -28 35 -29 15 15 -25 3 -65 -17 -14 -111 54 23 -40 7 26 70 126 5 19 -58 12 -13 13 -33 -23 16 -123 -5 24 -15 46 63 -81 -123 57 -58 33 122 -41 70 35 121 49 -14 -40 -67 68 29 31 76 39 -28 -17 57 -76 -13 -62 34 -120 67 23 -9 80 -58 84 -66 10 -60 -54 -9 71 -67 92 -7 -124 -20 11 -88 -19 -19 -28 -17 46 -13 -9 10 104 86 -51 99 -58 46 -42 25 49 15 49 -30 55 5 31 -6 -36 -72 -7 17 -31 10 54 -28 1 21 57 -12 15 46 21 66 -40 -26 6 -57 -69 42 106 -128 19 72 -12 -48 24 -126 -20 -44 44 49 66 22 -81 -49 -24 -49 -67 39 -53 79 127 46 -3 51 -127 -36 28 0 -33 5 -24 15 31 -73 -30 31 12 40 -22 52 59 2 28 90 -27 -39 67 -32 -1 -33 11 124 7 -18 37 -32 -91 105 36 -71 94 -77 75 10 -34 -5 -2 -71 96 2 -4 -23 109 -82 -1 19 -3 21 49 -111 19 -27 -9 32 -16 -6 -12 11 24 -12 -36 35 24 -82 -39 8 58 -9 30 17 -13 8 1 -124 -46 -19 -22 -44 -47 -25 -55 -2 -8 -33 -27 57 11 29 -3 -16 0 -87 -4 9 13 -17 -43 13 2 -21 -51 -50 4 -16 -55 -6 -46 -25 68 49 -74 37 -16 -11 9 -23 36 -30 -23 0 37 -8 -63 28 24 37 -35 3 23 29 17 -53 -33 73 22 9 -67 52 -45 -30 -13 0 31 84 -36 -16 13 85 72 10 73 12 26 -107 -6 -43 71 4 30 0 -31 22 25 -61 24 -12 5 -22 -12 -34 52 -12 1 -120 -30 -14 36 12 50 -7 -24 -34 1 -10 -2 31 6 42 26 -46 -23 -2 36 17 48 44 90 -24 -1 -18 38 45 9 -47 13 39 26 -39 54 -63 -38 -25 -63 -16 14 36 50 -32 -7 23 44 -26 -23 0 1 66 45 51 19 15 21 42 64 24 -21 3 21 -102 3 15 10 18 28 -26 3 -90 82 -1 45 15 8 6 11 26 -118 -27 19 16 -9 61 30 55 -49 -9 4 57 4 10 30 3 44 9 57 -27 60 16 6 18 -8 38 -6 10 39 -26 -10 33 71 31 37 22 -8 -30 32 73 -17 11 -63 -31 -47 -56 -5 -35 -4 30 21 -92 38 19 4 -123 27 10 -22 70 69 6 -42 10 -8 93 111 -19 14 36 -16 21 -34 27 12 26 -44 82 60 7 0 28 27 15 -16 -37 -27 -10 33 80 23 -9 -17 90 38 -13 -22 44 -2 -1 55 52 5 0 10 51 -26 -2 32 28 -13 -31 -19 3 0 -4 -19 -18 25 -20 -14 -13 -49 28 5 -36 1 3 -2 49 -31 -2 3 -12 65 -34 6 -22 15 -21 -43 22 -57 -34 -21 21 11 -29 -24 10 10 12 -5 -23 15 9 -40 -28 16 15 6 -8 4 3 29 18 -9 11 -48 -5 -20 8 69 15 34 63 24 14 5 25 -29 52 -11 5 31 57 22 -17 -17 61 31 18 19 -67 -56 -10 2 65 60 77 5 56 -2 0 60 -13 0 -60 -17 29 25 -22 16 5 -20 75 126 -4 -44 -12 -52 -45 27 -45 21 59 -9 -46 2 30 -29 48 7 -55 -80 0 -54 -28 4 61 69 -1 -6 24 7 57 -45 -32 59 8 -64 37 -24 -51 -21 22 42 -67 -16 -3 14 56 -8 -9 19 64 -57 58 -12 -26 -4 -69 36 59 13 -26 -17 -53 -50 16 -33 -3 -5 -57 -47 82 -21 -32 -39 0 36 -6 33 41 13 -60 20 -4 32 65 -34 36 13 101 3 -90 -45 96 37 19 80 -19 -48 -12 -9 21 37 -94 47 -28 10 12 -60 -23 -41 82 -30 -2 7 26 34 -43 -36 13 41 -19 73 -30 21 -22 26 -45 4 61 116 -17 -6 82 -11 43 11 -45 -44 -19 -50 17 21 13 5 -18 88 -71 -103 -26 -50 1 -47 4 -6 -20 26 16 -13 -3 6 -4 -23 47 -5 30 13 48 -7 38 4 -44 -25 -6 22 -16 11 43 13 13 -10 -16 34 12 -31 -6 -4 -28 -38 -8 33 37 4 14 -42 49 4 -14 3 13 12 -7 -3 9 14 18 2 -15 -12 -19 13 36 -57 12 -9 19 -43 7 12 25 17 -7 37 -5 -34 18 -20 -5 -10 3 -27 3 57 -5 19 9 11 29 -5 -13 -6 -49 -25 20 -55 -1 2 5 -37 48 28 -8 24 -20 87 -32 0 38 28 35 63 -1 0 112 34 -12 -17 -3 -1 30 23 8 122 21 -3 47 26 48 81 33 47 104 -23 -26 -10 51 32 23 42 15 58 45 31 97 -33 74 -110 47 58 107 65 -22 21 -34 92 41 20 26 -23 46 7 34 -35 65 32 72 41 4 18 -6 57 43 45 38 24 43 64 19 51 23 45 -15 -63 -17 31 14 21 55 67 -5 99 55 -17 57 -11 7 51 1 -10 30 5 45 -28 20 38 -21 20 -51 89 65 16 -57 52 58 -22 -14 -26 18 -28 -21 22 -40 3 15 15 4 -45 -20 -30 0 52 8 26 -9 1 29 -59 -7 7 7 -29 15 18 12 57 39 47 -9 -53 23 -15 17 13 48 6 1 -18 -50 -7 -36 17 -5 -65 -12 -15 19 25 -27 76 27 15 52 -11 7 -10 47 -1 -37 -6 52 -10 -12 -42 34 60 13 25 12 -3 -27 -13 -6 4 -61 -39 -31 -16 19 -32 -43 29 -30 47 12 -9 -13 6 -24 12 -1 49 -8 -15 10 -17 -5 -2 -13 -10 -18 41 -28 4 -40 8 4 48 -29 31 5 -44 -76 -45 -34 -16 36 -3 62 11 -8 -24 14 -17 -22 -57 -13 7 -5 -14 -14 25 -66 -50 -19 -32 0 10 48 35 13 2 -3 -36 -20 38 49 -2 4 25 -23 57 31 52 2 16 -27 4 51 10 -31 -7 -5 10 6 17 32 -37 75 22 9 121 14 -27 -25 22 38 78 66 33 -19 52 81 49 24 66 26 80 32 47 -101 75 -58 54 44 33 52 6 -15 11 36 -30 28 52 12 7 35 -28 60 -73 -42 5 91 -17 29 -8 7 27 4 22 43 51 17 92 -48 45 -41 -42 -46 37 -60 19 51 8 42 18 -35 73 -33 26 -10 74 59 58 101 64 36 -43 48 123 62 58 46 31 -6 15 64 33 8 -79 83 -15 -3 6 20 -84 24 -1 33 6 12 -62 55 14 9 -19 -27 45 76 6 -18 2 -42 84 16 16 17 -13 -57 56 -65 -38 -16 -43 -33 -40 -33 -45 -2 -25 32 16 -28 90 -6 -46 3 -86 15 -11 60 15 17 -61 -12 10 20 -47 91 66 20 -47 2 37 -29 16 -3 43 -21 16 16 49 18 -34 35 2 13 -92 9 -40 -15 -75 127 6 -7 -3 -34 27 -5 -6 39 -8 -68 -15 -55 25 -19 -40 21 -89 58 20 5 -24 8 -24 -6 -20 10 -9 -35 5 7 10 -34 -30 -27 -28 -3 4 7 19 35 -16 2 -1 4 32 -83 58 -9 14 -5 -15 -9 -29 8 -57 8 21 -27 -8 -16 -7 6 13 26 21 -2 -9 51 40 24 -26 30 -3 27 -3 10 -21 -25 1 -17 21 13 8 13 -5 -4 24 -22 -34 11 -24 9 -36 -6 18 -22 -22 12 3 26 7 26 -19 21 43 -41 -16 -17 0 -21 -6 8 -2 40 -7 -16 10 40 -34 28 7 14 63 90 0 -35 -43 56 -16 79 29 -71 22 -45 44 6 43 -18 19 -29 -25 118 3 34 38 20 19 -25 -75 -22 -2 -25 -29 28 66 12 93 24 -18 -9 10 14 -15 13 10 96 59 -45 93 51 10 21 11 26 -27 17 -15 11 16 -9 5 70 -27 64 40 29 31 -2 32 18 -10 -11 -21 16 52 -13 50 107 93 -22 -44 40 -2 -65 46 13 -20 56 -12 12 52 -46 -17 57 48 -6 -14 -50 49 40 25 37 -23 -19 30 40 3 10 10 -24 -1 -19 -29 -11 6 -70 -30 6 28 9 36 26 21 -72 39 25 -12 -11 -15 2 67 32 0 -27 -7 -2 3 41 72 11 -23 3 38 -38 33 -9 84 -20 4 7 -7 -128 -1 61 -30 -16 26 -1 63 -80 4 -13 40 -3 12 -4 -26 -6 -25 2 -43 15 26 -23 43 -69 1 21 52 6 -19 -44 -55 12 16 -3 16 -22 15 30 34 14 26 -23 -43 19 -30 1 -14 -16 -21 24 7 48 -62 4 -28 -46 3 -15 -1 -1 49 -30 -60 -6 35 -35 3 1 -1 3 -2 32 -28 6 19 27 -9 -43 13 -43 -11 17 14 -32 -22 31 15 28 -95 -8 -13 52 -24 23 14 -2 -33 10 -8 -7 -3 -28 8 -10 8 -5 -9 -23 3 -29 -31 53 -27 11 -9 35 15 19 -22 0 -16 -32 -19 -10 26 -8 44 -39 -13 -61 49 -5 -87 10 -44 27 7 10 26 -18 -44 37 13 15 16 -9 -6 38 2 -23 19 -24 43 15 3 -1 -1 -61 28 -17 -28 -15 34 78 108 -17 -9 -9 -86 4 5 -62 36 -39 10 17 -9 -16 -47 6 24 -42 8 71 -36 34 6 33 -59 -7 -1 -38 -38 -1 -25 -6 -34 -11 23 -61 15 33 127 -54 13 36 52 -38 -110 35 -6 32 -28 11 45 -44 102 -9 75 -61 -22 39 93 11 66 28 -40 -25 32 7 -59 0 46 -28 -71 44 74 69 79 -35 16 13 -1 -43 -13 28 -21 5 -10 -4 12 82 1 -38 51 -6 -55 -15 -6 -55 49 -15 -1 -12 50 5 48 9 42 -11 -64 -26 -41 20 13 -2 70 -10 -11 61 2 9 71 -19 -14 62 66 29 26 -61 27 13 81 20 48 37 -10 -75 -7 -15 -32 46 57 5 -8 10 54 -42 74 2 -36 -11 63 28 39 6 -56 71 -31 -30 9 -25 -17 14 17 25 -7 -25 30 -5 8 -14 -9 18 -12 -33 -30 72 3 38 -23 18 41 24 36 1 42 -8 -18 45 -16 -45 -44 66 3 21 15 -10 -27 -9 -9 26 22 -2 -5 -37 -11 -12 -28 15 -12 -57 -27 65 72 -18 -2 -14 -2 3 24 16 -42 -7 4 -41 -5 22 17 -10 -27 -13 -13 10 -13 -22 -12 -23 -24 29 -3 -5 -2 -4 -21 18 3 20 51 28 -10 24 -9 20 33 -8 -25 -34 -14 75 -71 24 35 -49 27 -61 60 7 -10 38 17 103 13 39 -81 22 5 54 -35 80 -23 124 -30 11 -37 35 -21 71 63 26 -21 29 27 19 43 49 7 41 -23 -69 -19 -86 -12 6 -11 22 17 18 -63 21 32 83 38 53 59 48 -56 32 75 -12 68 -18 -77 -8 11 -34 69 20 47 28 -67 -6 6 1 -8 0 -128 -5 8 11 -21 -55 46 -34 59 -9 -9 -56 45 47 24 32 39 42 -14 -3 -17 -103 49 -18 -40 12 89 -8 16 32 12 -8 18 -24 -5 -45 33 -10 -7 29 55 13 -25 50 -12 -11 -12 -7 -35 -20 -42 -6 -24 11 37 -1 -71 18 -37 80 -3 22 -8 -13 -12 -17 7 -12 19 -97 7 20 -10 6 44 16 -67 6 -9 69 -32 -8 24 -11 -46 24 -33 -75 -51 -8 -14 22 17 1 31 -20 -4 -59 68 -43 -14 -24 15 -69 2 17 -12 17 77 5 61 6 -16 9 -17 9 -23 1 23 -22 -22 -18 -11 -3 -17 -18 -25 17 21 11 24 27 -33 17 7 21 -5 -16 -4 26 22 9 34 42 -8 2 -30 -13 -3 -17 4 0 -23 -34 20 19 16 52 -19 -22 46 10 -43 31 16 -18 11 50 -28 6 28 -4 1 -14 12 -22 -27 -42 31 -6 -33 11 -52 1 3 5 -17 8 -13 -6 62 12 -60 8 19 -6 -1 9 -44 5 53 -17 43 -8 -41 -22 -18 -29 -43 -13 63 15 48 -20 15 73 27 47 11 76 14 50 10 39 18 -17 -16 49 15 -4 29 -4 0 -33 62 4 13 30 -66 -20 -3 -6 31 42 -22 16 -2 19 19 13 -15 72 0 51 10 7 -3 34 -41 -51 41 101 37 23 23 80 -6 -24 -22 16 7 11 10 82 21 40 16 82 -36 -6 89 88 83 -9 14 37 20 -25 16 8 72 69 -30 49 66 -22 61 -22 -8 -51 -54 39 110 26 -37 40 -50 12 36 27 -4 43 -81 -35 10 30 -50 42 46 4 15 -6 -27 -36 -26 51 -28 -23 18 -31 -19 56 -30 -31 2 5 3 2 -55 4 15 23 -4 -50 4 26 -7 57 -21 11 -38 -6 18 -61 28 -39 -9 -41 -34 -6 -26 -4 27 -62 -48 25 6 43 -18 -61 48 10 4 -32 24 43 -17 11 -42 -29 -34 6 10 1 -6 -15 3 13 26 -36 -19 8 75 31 -9 24 48 38 -43 -18 -4 -8 -17 22 69 -18 18 -5 -12 11 -14 -40 44 -5 2 18 -15 2 10 -10 -24 13 -1 -12 -2 -31 7 22 11 -43 5 -60 8 28 10 41 -5 22 -12 38 12 13 3 4 10 -56 12 -8 27 15 -32 0 -6 -60 -30 -23 4 1 4 2 -21 54 -38 12 1 -20 -20 -40 10 1 -11 -16 16 4 -4 -17 -7 -42 11 -3 33 21 -33 11 -10 35 -3 -6 15 -18 -25 19 -3 -2 -23 52 -25 51 16 -10 39 49 93 71 1 54 -29 53 0 30 -3 -59 -122 16 14 118 68 -17 -31 -11 -107 -21 35 12 -26 38 59 -25 23 30 5 -107 64 30 41 -12 9 -49 52 -27 69 67 -22 -25 -10 50 -97 19 25 109 37 57 78 21 -53 28 -65 16 65 -94 52 27 -44 -3 8 -98 -25 -35 51 63 33 72 54 19 25 10 66 35 22 -12 -22 67 19 -46 39 -31 5 80 29 -11 17 -22 46 42 11 17 3 46 -5 60 125 -24 -24 -57 -8 -31 -39 19 -58 -24 -80 -8 -7 -43 -44 118 3 -1 -76 -61 -15 39 3 -19 -9 33 8 25 84 -28 -3 -46 -11 50 45 22 -5 22 -13 -74 -31 0 -84 -14 6 -30 1 23 19 -36 33 -71 3 -15 3 -61 -24 -67 20 36 10 -50 -49 -21 -56 21 -14 -60 29 -17 41 62 39 -81 -34 14 5 -8 51 -25 26 112 -70 56 15 -74 7 110 6 -30 -62 -71 38 19 -4 38 40 72 -53 106 7 -27 -32 23 23 11 -14 57 60 8 -12 34 -8 -13 17 -27 -6 51 38 -6 1 -63 2 -6 43 21 -14 -25 -22 50 39 -7 -5 24 -3 -3 22 5 50 3 -54 -14 20 11 7 -21 16 -52 18 9 -22 18 66 95 -50 -8 65 -20 -22 -10 -13 15 -64 -45 -33 40 6 12 -14 -29 5 -23 -8 5 51 0 47 0 -31 -22 -4 17 14 9 -34 70 10 -17 73 -24 56 56 33 16 30 -70 -41 10 -7 7 -23 -20 35 -40 32 -10 -24 -4 47 -25 54 18 -30 49 34 -3 49 -56 -20 48 -21 -105 -40 62 3 -11 40 -21 -18 15 -10 -13 -108 3 -1 -84 -37 109 12 -12 -14 16 0 -12 -95 -31 43 -49 -42 42 0 0 -16 -59 -65 30 -13 -66 29 -25 80 12 -23 -21 74 -25 37 41 12 30 12 -38 17 -20 62 -66 24 54 -50 -52 3 -11 -22 89 -37 -16 -5 -15 33 45 -79 21 22 17 -52 20 9 -12 -127 0 83 -29 24 1 25 -70 -27 -53 67 127 -39 -68 30 15 56 23 23 31 -22 21 55 -10 9 -86 56 -36 47 24 -2 52 63 -31 -100 7 71 -7 23 32 -20 -60 -21 -33 -76 -83 -40 -6 -11 36 49 -94 24 16 -70 -42 38 11 -33 -17 14 1 -16 -14 -4 -46 -2 19 -31 26 0 -69 51 -4 4 -19 71 24 77 -64 8 33 54 19 -19 4 3 26 -11 -75 -17 -7 -10 25 -9 4 -24 22 -13 -17 32 -18 16 10 25 -66 -6 -7 14 -43 49 -18 -19 0 25 0 1 24 -28 19 -13 9 16 -22 4 -22 37 -29 32 4 -12 -38 66 -4 -9 39 -2 2 4 50 -2 -19 -2 57 13 -24 -14 37 -12 23 24 -13 -29 -24 -10 -8 -42 1 8 -17 10 23 14 -19 76 -8 41 14 17 3 -63 3 8 -23 -67 15 77 -17 75 -43 15 17 20 -61 -41 -19 -36 -48 18 -4 -3 18 -2 29 -10 32 68 28 18 39 13 53 -17 12 27 -14 -24 78 79 51 42 -2 75 3 73 38 -30 7 19 41 9 48 3 7 3 70 49 89 57 11 -10 22 59 92 76 89 83 2 30 7 -62 46 61 -20 31 38 -98 -12 9 19 17 56 -47 41 -38 66 72 -7 -40 -3 -86 70 63 4 5 4 10 -8 -12 54 10 0 93 37 -51 -11 -34 -102 -37 -53 -52 27 -33 80 -104 54 -30 -60 12 -54 19 -19 -51 3 -75 -4 6 -28 52 35 -29 -20 -22 -73 -64 2 -60 27 16 -13 -29 -53 -22 121 18 126 35 -16 1 39 88 11 -7 -51 -31 19 -55 78 24 28 -66 -11 -128 39 49 -67 -85 69 58 26 -16 -71 99 18 76 -3 44 29 -79 84 -9 -25 -12 -7 125 55 -126 83 -52 -33 28 58 -40 55 -13 26 32 -5 35 -20 29 44 -39 -26 -73 -5 -7 -18 21 46 26 1 5 -23 -20 8 10 4 69 -14 74 45 14 -39 -21 -36 68 -51 7 -31 -24 -63 8 9 -24 21 -106 -59 -23 -10 21 31 -13 10 -3 -40 -7 6 27 13 21 42 52 13 45 -28 -8 20 -24 -14 -28 33 -44 10 17 -12 -30 -62 38 10 5 13 -9 14 3 19 -27 -33 6 -43 -16 -14 108 -26 41 7 -11 11 0 13 -25 1 -67 -75 5 -29 -36 25 -18 76 -15 -16 12 77 -30 -1 -69 -87 -23 -40 -6 -61 -65 18 -10 57 30 91 18 -8 3 -58 -42 -48 69 -42 -6 -18 18 -6 28 0 17 3 4 -56 9 0 -11 11 18 -29 -8 64 22 -30 40 6 52 -27 -38 -9 45 -11 -13 1 13 29 -7 27 122 15 4 -15 -39 -7 -4 16 1 -55 -37 -21 10 -4 -19 13 -116 -7 10 -45 26 -7 12 68 -72 49 52 21 76 -70 42 35 14 -41 -31 6 55 6 16 -46 31 27 -2 -77 14 42 -80 -12 -56 78 4 21 26 -7 -22 46 15 53 -16 50 4 -74 -16 -41 -1 -15 25 -10 -1 14 -4 125 2 36 52 -53 17 -45 93 -16 -56 -24 -8 4 -42 21 -52 -55 -38 -50 13 18 -38 63 -55 -31 2 -54 -55 25 -39 -26 31 17 -12 63 63 61 -27 -75 27 -27 3 -27 10 54 1 -34 59 4 12 11 -47 -45 -34 -41 -7 0 22 48 -28 -31 -64 17 -18 93 -9 -9 32 -31 73 -12 9 6 12 -4 40 13 -27 33 -38 -41 -13 -11 31 22 16 -34 22 24 -12 4 -15 -13 8 -40 -23 3 19 32 4 1 13 -8 48 11 -42 -17 64 15 18 -16 -10 -14 -7 -22 70 -10 -32 -27 10 38 7 9 -13 -3 5 -17 4 -3 3 7 -22 23 16 -42 15 -3 -12 -5 -9 -25 35 -12 11 28 -43 37 2 -2 -19 -62 -25 -5 -29 -4 30 72 53 -4 48 9 -32 25 11 15 26 27 37 -29 3 -18 4 -69 -60 28 4 -31 -33 -9 15 46 -6 37 35 -1 -44 -15 -76 35 -45 33 37 3 55 -29 -14 36 15 -64 4 23 -21 -14 -1 -6 10 44 -19 12 -121 -25 36 -28 -36 -33 22 -30 -33 -87 56 22 -127 -76 73 -32 2 39 7 33 -56 -24 -20 -13 -13 54 -65 -12 10 -23 52 33 -93 -42 -51 -46 -82 14 -70 -78 43 -65 -14 -9 19 15 63 -30 -12 1 19 67 -21 -32 13 -19 0 24 -6 14 -23 -1 -74 23 2 42 -18 -31 17 -27 -15 -8 -53 -16 19 69 -15 -52 10 2 17 12 -44 -58 -30 58 -27 -26 -63 7 3 31 -9 65 -10 78 -10 25 -12 21 -6 -15 11 21 9 -33 -43 56 38 22 -52 -10 10 -19 4 6 12 -28 -6 -50 -33 -73 9 -39 37 60 -1 7 -55 -2 20 39 -9 11 -60 -8 68 4 24 -28 40 25 11 -42 -24 36 8 1 -32 -16 -4 34 28 4 -45 -12 -31 34 27 6 0 65 4 17 30 -28 -39 29 -36 21 -50 42 15 -34 -14 26 44 -14 -17 -3 47 -5 -30 -39 19 32 -3 -6 -42 -20 16 -24 16 48 20 33 6 3 -6 6 32 5 24 18 -15 36 -51 -37 -19 22 -65 20 29 -25 -19 13 -6 40 12 -4 19 -17 5 -9 -29 0 13 0 -1 -44 -17 -38 -13 -36 45 -22 36 9 -7 8 70 41 -36 60 27 -12 39 19 64 11 36 2 47 -55 27 50 24 -46 -5 97 1 19 -16 9 -28 44 -1 -39 28 39 49 55 19 46 16 -37 -44 58 -17 -9 -1 8 26 -2 82 22 32 46 37 29 31 -15 41 -3 15 -2 4 9 61 41 0 -18 2 23 -27 16 82 61 -37 22 35 16 -45 -41 -25 69 10 17 10 6 -6 1 -7 62 42 -2 -46 15 30 0 21 15 -23 59 -4 9 -21 -25 -24 -25 -2 -15 -7 42 12 -5 -90 -2 37 -6 -44 -54 -71 -17 -20 -5 35 -29 26 -24 13 -2 27 -21 9 -2 -38 39 29 42 89 -33 10 47 68 -2 22 34 -7 -17 16 38 -27 1 -70 4 44 67 41 -7 6 52 -15 -29 -9 17 16 -22 53 60 1 4 41 55 19 39 9 7 -14 1 -31 -40 33 31 23 -57 -17 92 44 56 76 -18 16 -10 40 0 -31 33 -25 21 2 -20 9 -46 5 -73 25 -44 -4 -3 -5 11 -51 -27 40 -32 -34 -3 -42 14 44 -39 -24 -45 12 38 21 -3 -31 -10 19 -39 -15 17 10 -52 2 88 4 3 10 48 7 0 40 -34 9 -27 8 -38 39 22 -2 18 -16 -5 -32 -17 -81 3 -5 10 -94 10 -42 11 -13 -18 -3 17 -4 7 18 -4 17 1 -14 41 37 -19 -26 -15 -68 -49 -1 6 -4 53 -4 -33 20 31 23 26 69 57 35 -2 -51 22 -10 10 -58 35 -64 47 4 14 82 127 61 127 17 -64 -7 -81 68 -75 -23 -46 31 28 14 6 61 43 -18 -18 59 -21 55 84 11 26 -37 -71 -29 37 16 -16 65 26 -12 -4 27 -78 -89 64 -53 33 -48 38 5 28 -2 30 15 67 -18 24 44 -19 54 -43 -10 -1 25 3 -38 -128 16 51 3 30 89 26 20 53 32 21 33 -4 7 24 -17 24 37 48 -16 0 7 4 8 41 8 -18 8 -15 -11 -30 5 -53 5 -1 -3 3 -28 18 12 -29 29 4 -61 7 20 22 -39 17 34 -22 -36 3 28 28 -34 -14 9 -14 23 59 12 -13 -36 5 -47 -19 13 -18 57 65 50 8 50 -6 -12 20 31 -34 25 75 46 -77 14 42 41 -72 -81 -82 -7 70 88 -14 1 -18 -14 -25 -32 -20 4 25 49 30 15 -46 3 -18 -17 -18 -11 -6 18 -24 45 5 -51 -24 46 -24 -5 28 2 -7 -3 63 -19 20 32 56 29 13 24 10 43 47 -11 13 19 48 70 6 55 11 -12 27 -7 -24 3 -3 -37 -59 -8 9 2 -32 -13 -8 15 20 22 102 2 -5 13 28 -14 -13 4 6 13 -3 16 -13 -21 -3 -2 -21 14 51 7 30 10 1 48 25 -58 0 -27 22 -13 -13 -12 12 -4 38 -20 -30 -37 46 38 35 -33 5 -47 -17 -53 -8 2 15 -21 -1 -10 -7 5 12 -7 8 6 -7 -6 13 9 -23 4 11 7 -1 -17 20 -15 11 -13 6 -10 -3 -20 2 -6 -9 1 -15 21 1 -5 2 -4 -11 -3 6 -3 -22 -7 -6 -2 -1 11 -11 -7 -23 -12 1 -2 1 5 -6 2 -11 -1 -5 -11 1 -11 -3 -11 11 6 3 0 -3 -4 -22 -24 3 20 -10 -19 3 1 12 11 1 4 -12 -18 -17 10 -7 -14 -6 -13 -1 -21 16 -26 6 -10 3 0 28 -1 7 2 10 -10 -17 11 -11 11 11 18 -6 9 16 -13 10 0 11 0 -9 -6 -30 12 40 -1 -18 -10 -18 9 5 -7 -28 8 22 -1 14 3 24 -19 0 11 -3 -3 -1 -14 3 -29 12 -12 30 -8 5 1 5 0 4 -2 -3 30 -1 -5 -5 3 32 -5 2 -13 -2 -23 -15 2 28 17 -8 23 -4 -6 -22 2 -5 19 -14 6 4 -7 7 7 -4 24 11 -5 8 3 4 5 5 6 16 -2 -19 -3 14 -3 -18 -12 4 7 -8 -12 2 -1 5 -7 -13 3 10 9 9 -8 22 -2 -21 14 11 -2 1 -3 16 2 -3 7 0 8 -19 -10 0 5 7 -9 -11 -7 18 -5 8 -15 6 6 5 -2 9 -12 0 7 -12 14 7 2 17 6 -13 -21 2 5 3 -11 -4 1 6 1 6 9 7 -1 14 -11 11 8 -18 -23 -8 11 -1 -28 4 14 24 9 5 6 -5 -14 5 12 17 0 15 -1 6 17 -25 2 -24 -4 2 -33 8 21 12 -9 15 -19 29 -16 -11 -12 -19 -35 -15 12 1 -10 8 -11 -4 -3 -22 -13 -22 16 -31 1 4 23 -3 15 -9 -3 19 13 -2 5 -5 11 -18 -13 8 -1 -1 4 18 -19 -20 -13 -6 7 17 -15 15 -1 -17 2 -21 3 -25 11 -1 7 -35 11 14 -24 -17 -17 -6 -6 6 -10 13 -4 9 -23 14 -5 -19 -31 31 -42 -42 -6 35 -21 26 -3 -3 -15 1 -5 -2 56 -28 43 21 26 10 -7 16 20 -29 36 5 -11 -13 -10 8 34 -15 28 27 0 -18 -44 27 -3 -26 -9 19 13 15 27 -15 -23 15 7 45 -2 -25 6 -2 45 -22 23 -7 -25 -2 -1 -52 6 29 -7 -4 -25 -13 34 11 1 -4 -6 -20 48 29 -51 -36 -5 3 -8 5 4 32 -42 -26 -29 12 -8 3 36 19 42 1 -21 14 8 27 2 -29 -1 10 19 -6 -10 17 19 -6 -6 11 13 -1 -6 -4 29 -17 3 -12 19 20 26 -3 -14 -14 8 0 14 4 -23 -16 2 26 3 7 16 27 -1 -13 -2 -12 5 21 -6 -10 -14 7 -5 30 -25 28 1 17 -4 16 25 3 -15 -21 -20 -18 22 -2 -4 5 7 4 6 -15 -18 -4 13 18 17 -15 -4 7 -21 13 24 -7 -28 -24 0 -2 5 38 -16 -17 26 20 5 -4 -7 -12 -6 -20 -14 4 9 -19 13 -8 25 -26 2 -42 -35 -56 -9 -13 18 -12 -13 -24 -15 6 10 -9 22 -37 5 -25 -20 -2 -28 19 -12 -16 2 -18 -25 -9 34 -42 18 25 37 -15 -14 -3 -31 0 7 15 10 -2 14 -19 29 20 -31 1 14 33 -26 -17 -36 5 32 -5 -21 50 -39 -5 -42 -19 -28 -16 -10 -8 -9 -2 23 5 -36 -16 52 10 -10 -8 9 -30 -29 12 -5 11 -34 -49 -39 -47 -77 -49 -5 64 -47 8 -2 -4 12 17 -36 36 -36 -29 8 28 54 -19 -6 13 15 -2 40 -9 -26 -76 -12 -23 23 -8 3 -18 11 7 19 6 -13 -17 18 12 64 12 30 -17 -67 48 -24 -15 43 -46 7 32 2 -39 8 -5 22 15 18 -38 -7 -51 -4 4 -34 -36 -2 -19 6 -33 -33 -6 -21 -26 60 -35 28 -68 37 6 17 -32 47 9 -26 1 1 35 -24 -8 -28 6 -5 -7 -34 -1 3 -40 4 0 24 -2 -5 -11 50 -7 -13 -4 -19 4 5 6 36 -36 24 13 20 14 -3 -9 18 0 0 -7 14 -9 -22 -33 11 0 -25 -14 27 15 -19 -10 17 -4 15 27 -20 5 14 1 11 12 -25 18 -1 5 3 -9 27 8 -10 -8 -24 -1 -68 -22 -13 24 1 2 -7 2 0 -3 22 16 -9 -7 17 11 -6 -5 -25 14 4 -23 7 8 -26 40 12 -21 -5 10 32 -4 -34 -46 23 24 -9 -5 4 8 -14 13 8 17 -1 -35 16 -90 -8 15 53 -10 52 10 16 -13 6 7 31 4 78 -3 -60 -15 -12 -3 24 -7 21 -13 35 21 -26 -3 -14 14 2 -44 26 -2 -35 23 19 30 4 6 18 -25 16 12 9 35 -7 -8 26 2 -6 -7 12 11 4 9 -12 17 -36 0 20 39 -9 -23 -36 -5 7 -12 22 28 61 11 26 -36 -21 10 8 -14 10 47 7 -23 6 13 4 31 45 12 -9 27 7 -28 27 57 -17 31 26 7 -45 -6 -29 -15 -2 -43 -27 34 24 -20 6 29 40 -35 -38 2 -2 -20 -71 12 -22 47 -30 41 19 23 1 -5 55 -15 -38 22 1 42 8 -2 -11 -17 -1 -6 37 15 -39 48 78 -20 -11 -38 -11 50 34 15 -39 -45 26 5 -8 4 75 15 -30 36 46 76 -68 -25 21 3 24 -33 20 -31 88 42 19 -5 29 -26 8 -16 17 -37 -10 35 29 5 -8 -26 -4 -14 61 16 -41 -11 -12 21 5 -14 23 2 17 56 -15 4 -14 12 45 0 0 10 -28 -22 -12 8 3 -8 34 -8 -10 -18 21 -7 17 16 31 -5 -41 10 31 11 8 -10 -10 -23 2 -10 -8 14 -22 10 28 -4 -5 33 -12 -4 1 26 -4 0 8 5 36 23 25 15 19 -14 18 3 25 2 -21 24 -28 -2 -9 39 48 21 19 30 19 -9 17 23 -31 -26 15 7 -23 8 -39 5 -13 16 -34 0 -15 -11 41 -55 52 -12 68 24 29 8 11 -40 17 58 18 -40 39 -37 -24 9 -33 -82 -4 -9 4 16 7 -28 1 15 0 -2 -7 -41 -23 -1 -40 41 4 28 1 -23 11 26 23 -12 3 -18 -28 17 -5 -33 -19 -32 -11 -17 5 -22 13 11 -19 -5 30 -19 10 4 -11 -32 -11 -10 2 11 -27 0 6 -13 -28 22 1 -79 -13 90 5 -23 21 3 26 46 22 -50 6 41 37 -4 -7 -21 15 29 3 -4 -46 -8 -20 8 -18 -64 -25 57 11 67 -15 -10 15 57 -74 15 -23 -35 -72 29 28 -9 30 -8 15 -25 -55 7 -6 7 -51 3 -19 52 14 -14 26 58 23 0 -5 25 -57 28 25 -20 -7 118 -17 5 30 -7 0 -46 17 -33 -10 -10 1 -74 -50 -18 26 15 42 -10 -91 -18 -80 -34 33 -1 -11 -39 -36 -55 6 -32 -7 23 0 -34 16 21 12 36 -72 -2 3 -5 24 8 -27 0 -3 -5 -10 -4 1 20 -3 36 -28 6 -12 47 4 -2 0 20 0 -17 8 69 0 -12 -44 14 -14 28 -28 -14 -8 -3 0 1 -8 6 19 -3 13 10 19 -20 1 12 2 4 10 -1 23 -6 -10 -30 17 7 17 -5 10 -8 50 12 -6 13 4 19 16 -17 -7 -5 11 -2 41 -25 -58 13 -10 22 22 26 16 37 14 16 -14 37 47 -34 -1 39 -13 -22 -27 34 5 17 -31 -31 15 12 14 36 17 3 15 -22 22 1 10 -15 5 22 70 42 -47 70 28 17 -13 -28 -20 -3 -9 15 -46 0 -10 -8 -8 -1 0 -19 -15 39 -4 -7 -7 36 -2 11 -4 59 -40 -47 26 10 -2 10 -28 23 -1 -21 3 -32 -20 -51 39 15 -25 18 22 -42 15 23 9 -53 21 -5 8 17 -14 -4 28 11 13 -3 23 -41 -25 80 11 -13 -49 -5 7 -21 16 -83 -16 25 21 78 -38 -7 45 -24 -42 -3 41 -4 2 -33 17 49 32 -13 39 -49 -38 -21 -30 -73 -9 16 1 -27 -11 9 -76 5 18 -79 15 15 -22 22 -77 59 -24 18 26 -90 -20 0 -10 -15 28 27 4 -6 24 52 21 -2 -16 -3 10 -9 44 -6 -25 23 34 29 -29 1 73 -22 57 -9 23 -37 -42 45 115 -18 97 -3 -14 -28 -15 23 -45 -59 56 -29 -18 17 -1 10 -6 -5 -7 56 -47 15 6 35 8 -34 35 26 8 -23 -20 2 15 -26 -12 -27 3 -2 8 12 -17 -28 -4 -25 27 -12 13 56 -2 34 28 -7 29 19 26 11 -34 3 -37 -10 6 20 -6 27 19 12 6 12 11 16 43 14 28 2 -34 -2 -12 -3 -36 -57 -12 0 -4 -12 33 0 -31 -15 37 -10 -34 9 23 -6 12 -4 -3 -27 50 -8 14 -15 -56 2 42 42 55 80 -84 96 74 -73 -17 -3 48 -99 -59 8 -4 -2 126 -40 125 62 4 64 -18 -6 118 3 43 -127 -12 47 44 29 84 42 -32 -34 45 33 -29 123 -17 -23 75 28 -58 5 -98 17 -14 52 -55 -51 -122 64 5 -3 -127 127 29 -67 50 63 -125 45 -45 -40 -11 -53 -99 22 -80 -45 127 -102 33 127 -16 24 3 98 -104 -29 61 20 40 124 -70 -22 -50 -68 -35 -117 -36 -2 -2 -119 27 18 -18 112 -22 -43 7 125 -11 -20 -80 42 -120 6 58 127 -77 55 82 -113 54 -23 39 8 -14 -83 19 73 90 -16 84 1 32 -36 -77 -45 111 61 -87 -127 27 -73 124 -35 -111 -53 -67 58 73 51 -8 -53 49 12 94 125 39 36 -11 -6 -46 98 -19 119 -128 39 -25 -62 -87 -127 -84 24 -39 -43 -40 6 -21 114 57 -71 -46 -10 -128 43 33 -49 -127 127 -128 127 -124 -128 -5 -59 127 -99 -74 36 -86 -19 20 7 -61 40 -15 29 -59 46 86 33 38 -3 -65 28 97 21 -62 3 -25 -3 29 60 -1 -127 58 -50 -32 34 -23 -40 40 -1 58 -25 90 -31 -9 41 -99 -32 -2 -126 73 -26 -66 13 -112 -108 -28 63 53 -6 43 -26 30 -20 127 -54 127 50 -16 -11 -23 27 17 95 -28 10 -10 -47 -6 -28 127 23 -56 -3 -3 -33 19 65 6 66 -20 -33 83 87 -71 68 25 0 75 18 -11 26 63 52 -7 50 -61 -79 33 -125 -16 90 122 -57 -70 -101 114 111 17 124 -10 4 -49 -25 -26 111 3 -2 -30 33 2 -100 66 32 20 -72 -56 -60 64 127 26 -89 -92 34 -62 8 -11 -28 9 -40 -63 -91 50 55 -70 -126 -14 -1 -44 64 -41 0 -127 116 -31 42 -74 -56 -37 -1 36 77 120 49 15 22 0 28 80 28 2 -123 -22 -21 9 -45 63 -127 123 -90 38 -4 -99 -40 -76 -59 66 93 -25 40 -126 99 -125 -101 70 -60 28 30 77 -44 42 -128 124 -15 -42 -81 -80 86 -85 -71 -26 -125 123 -26 57 -1 113 57 -95 44 31 58 78 17 -128 -116 -20 8 -76 3 -45 6 -52 14 -2 124 37 -54 -122 52 67 -99 -35 104 -92 125 -51 60 127 -16 -75 125 -57 121 123 21 21 -73 -13 -77 43 -54 77 127 -114 10 27 40 127 -94 92 -21 -108 58 127 -123 101 -20 41 -127 -100 -68 108 115 48 40 3 35 -24 9 -41 -21 18 -78 -66 -2 11 -56 -123 11 -50 -24 -81 -11 -32 -66 3 96 6 -35 -55 34 -40 61 61 -27 53 117 -127 -23 127 -127 29 -6 44 -19 45 -75 -58 27 -86 81 -32 -122 -85 35 76 -63 78 -107 -26 127 -57 -61 -20 34 13 -51 11 118 34 13 -83 -37 90 125 -42 85 72 1 45 -41 0 64 52 -63 106 -32 61 -59 -61 71 35 -8 7 87 -114 -51 -11 -42 80 -110 82 101 -3 -95 52 -14 -13 -13 -124 -28 41 -43 -62 61 -82 22 -3 123 14 -44 -6 -36 12 -38 44 -37 69 -5 35 -27 -123 14 107 58 7 55 -122 -53 -29 55 -14 2 -25 28 81 -49 -54 -91 -31 -21 -21 98 -55 89 125 -118 28 -103 48 -88 -57 71 -48 -46 -51 -96 -105 -98 27 -63 -59 -68 18 104 74 58 -50 -62 -9 32 -40 58 -90 -128 -13 -23 -33 -118 -16 109 -117 19 -77 125 -24 -54 -7 126 37 3 22 105 -112 -45 -41 75 75 65 124 -44 -68 -77 -123 -55 -128 -76 38 0 -29 119 -103 -125 97 43 -111 -8 -30 -57 -13 53 -82 -78 -43 -101 -49 -46 -29 27 35 85 -67 127 75 47 68 -126 -6 -49 -27 -68 60 -128 -82 87 -39 77 -30 4 55 15 32 -95 -6 16 -2 -102 -57 -66 -48 -34 -4 61 -80 -11 -122 -66 -73 -105 -37 124 -38 47 62 -40 -84 -34 -40 -66 26 116 58 -15 25 -48 -104 -32 46 31 -68 -103 4 36 24 -30 -127 80 -74 -25 62 -6 21 89 25 14 66 -34 -81 -6 -34 -52 -19 -14 -11 39 -47 -38 95 -1 43 -36 3 -20 -63 -38 85 40 -88 -17 -25 -77 22 46 70 -7 89 42 20 -118 -21 -97 28 -22 57 71 5 69 -69 119 -21 46 11 -14 -24 45 69 18 -27 -32 -28 -25 6 -36 20 3 33 -81 44 -65 91 89 37 8 33 55 42 -65 53 -123 -104 109 -51 36 12 61 -3 -109 7 -125 35 60 -91 -23 -8 92 -26 124 105 -65 21 -126 -122 -54 96 -48 1 -121 72 45 -29 109 57 15 -92 -127 -106 -73 28 86 -125 73 -1 127 50 -16 31 -80 -127 16 -43 20 -125 8 -65 122 -23 -73 -50 -9 -40 127 -18 -32 -58 -52 -8 -45 -117 -92 -18 -101 -35 116 125 10 80 28 -10 47 66 61 -28 -128 -105 43 -31 -125 98 -63 -98 20 -125 60 -85 32 -50 -127 29 97 127 16 -128 -83 77 -128 -3 112 9 -126 11 24 -7 -71 74 -51 102 -20 18 75 -128 11 52 -126 7 36 27 -127 58 11 123 126 -127 43 127 7 -28 -27 -61 4 -56 122 -58 -72 60 8 127 124 -36 117 122 127 -72 5 42 58 54 -122 -92 -71 82 27 -57 12 -21 -46 -41 17 -99 -36 57 22 49 -11 36 -103 61 86 -4 126 12 125 -54 -120 -87 -67 65 101 35 33 1 -125 62 37 30 -89 55 16 -17 -49 -111 -43 64 77 -126 -80 -1 -34 65 21 44 39 32 -71 67 -10 -121 -65 34 -59 75 -44 -119 -66 27 -46 -56 81 4 56 -126 5 43 -20 51 -33 -10 -49 -37 -118 67 126 101 -5 6 33 57 87 -56 -45 -121 -41 -36 105 22 -19 -59 125 55 -20 -9 56 81 58 55 20 -115 -38 45 -121 -63 23 4 -28 71 -46 86 -104 71 85 18 31 -25 18 58 -53 64 -53 10 75 77 -31 125 46 -127 -118 -5 -27 74 16 8 -122 103 115 22 -71 95 -32 -86 10 -25 42 -105 -6 55 -6 123 74 22 123 91 -7 -26 -127 8 -31 -33 -58 37 107 -22 127 74 77 -119 37 -8 -15 -115 61 92 -111 118 -72 28 49 30 -64 -25 127 78 -98 102 -89 118 -28 -75 43 -27 -79 -34 19 -13 -59 60 -92 -82 17 109 -57 82 -128 120 -50 121 -114 -30 -93 48 -67 116 25 30 -28 -104 32 28 30 76 118 -128 -88 -120 -76 39 -24 -127 -126 79 28 127 -63 22 -117 -85 39 99 96 -128 113 -21 93 -52 106 116 -128 127 -20 -47 99 -120 14 -128 -29 -1 -91 -61 -118 127 106 -9 32 127 10 57 -105 -28 127 44 57 -7 -68 123 -10 -92 -123 -109 51 91 -25 116 -114 120 -39 -127 125 0 20 -56 -24 -13 -22 -74 -128 68 -25 -128 102 11 -127 76 -25 126 49 -51 -82 40 -115 -125 -80 -16 -21 31 24 36 -24 53 -69 -9 82 -2 27 -103 -70 73 -64 40 -54 39 -26 83 -103 22 13 -109 16 36 13 59 45 -28 -116 51 -5 80 97 60 58 96 10 96 -55 -65 64 0 79 -20 -69 -26 25 110 124 6 -77 48 -96 -60 -26 -127 -23 67 127 61 76 -66 115 -22 -23 105 -15 40 -68 117 14 116 8 105 -43 45 12 -12 -53 17 -127 -109 105 127 -8 -24 81 19 -17 65 -54 5 -14 69 122 -30 1 -121 -126 -81 -121 -110 -90 -35 -50 -1 19 62 -7 80 -30 -12 21 82 -103 56 121 -37 76 -87 -125 -121 -87 -128 -91 127 -37 -79 114 -21 -96 -122 73 -52 -125 82 36 -45 50 -126 109 -91 -126 -42 101 -69 -3 103 89 68 55 123 53 120 -5 -63 -99 -15 -28 101 -72 -69 127 -32 35 95 -127 -123 -126 105 3 -124 44 -79 -127 -33 -127 -101 -6 42 -87 34 75 -36 -111 -47 22 -26 -123 127 127 20 -122 76 45 68 120 46 -114 -114 -27 -99 27 115 -52 -102 -38 -115 10 -29 127 -92 99 18 -60 -29 82 50 62 -65 76 -46 53 74 14 127 -100 124 -127 -115 71 -21 -28 -23 31 101 73 81 126 -110 -53 121 80 -45 125 -1 27 -128 -56 -124 -48 -40 45 44 67 -43 -12 1 -11 66 127 -48 -62 35 116 -85 -21 117 -118 11 -15 20 17 -47 41 -12 -128 -96 -83 127 -14 21 127 83 46 66 -69 -84 69 45 103 52 -128 -5 -55 49 44 92 -19 40 42 -30 8 87 52 -88 -36 14 98 32 -2 -2 125 -43 41 28 -15 70 -10 20 26 -89 -23 -125 24 -27 65 127 60 30 -1 -101 -2 64 -29 52 -37 39 58 12 127 43 79 -100 104 -20 65 54 -22 -72 -53 -11 32 20 -9 5 5 102 3 127 48 4 28 59 -19 -18 -8 19 -128 123 17 -15 60 29 -20 26 126 -97 -119 -69 -98 -8 124 41 23 -69 -36 -99 -98 -15 -45 -32 -120 104 9 22 55 -24 45 127 -15 -2 10 127 94 -55 -54 31 -40 -107 52 113 126 -79 6 -5 127 127 8 -128 -38 -92 -53 -7 -28 -60 -127 -88 115 -44 -44 33 5 -60 -116 -2 78 -52 88 111 95 -66 93 127 -55 25 -128 36 -58 68 -127 -67 122 -101 11 -63 -125 38 -22 103 9 6 -39 -71 -127 -27 13 17 -117 15 -79 -49 -126 26 29 69 -39 -28 8 -53 -2 127 -8 -27 60 -92 -125 -116 48 70 -64 -8 113 11 -103 -62 71 112 88 44 -71 127 127 -111 -5 -30 -103 -80 -75 18 -65 127 -127 29 36 -37 -70 4 59 -74 91 -53 127 -22 66 -27 35 127 13 41 127 5 33 57 -43 -127 -73 73 36 81 126 0 -94 -4 -73 -128 -121 7 -128 8 54 27 11 -49 -32 -108 126 -72 -123 -19 -87 125 125 77 5 -123 -119 40 105 -87 -74 -52 -122 109 -8 -78 -127 69 102 -41 23 -61 67 38 -30 29 -111 29 -95 -17 39 53 -15 17 -89 31 7 65 -33 71 116 51 44 114 -75 22 36 110 -88 19 -43 122 47 91 2 -61 -54 38 8 0 11 -11 26 -37 43 -89 -95 91 -15 -96 4 -17 79 30 31 73 122 19 34 -6 40 0 127 21 7 0 -25 12 77 72 -125 -71 91 -100 40 54 -128 -83 -13 32 -1 87 121 -93 82 125 -11 -69 -100 -119 68 120 -100 4 50 41 127 39 107 -126 -111 18 39 -54 69 -100 116 15 67 11 -46 25 38 -128 -61 -102 -126 -8 54 53 8 -90 24 6 125 127 16 127 -38 -108 -50 -124 73 -96 -86 -120 124 -114 18 68 76 -19 61 127 -92 41 127 -3 45 -11 127 126 -123 -73 -127 -43 -30 123 -125 8 98 43 70 95 -28 -85 20 -124 -16 92 0 -5 -128 -55 99 123 -40 -23 -80 39 -68 -4 -59 -12 27 -12 19 -36 -47 2 127 -123 121 -124 -113 -120 -125 117 -127 -123 -54 86 33 117 11 -1 127 119 -99 4 41 -114 -63 -2 58 -30 -127 -125 -127 8 -125 -128 54 20 -55 20 11 -128 -122 0 127 125 127 127 94 118 -50 -128 127 -17 119 -52 -97 -111 13 -128 125 127 127 98 -70 111 101 -127 112 -47 -69 -64 47 65 -84 4 -66 78 14 19 -91 20 -44 -82 16 -26 -59 121 116 -66 -14 55 -127 -47 -34 24 8 2 -18 -127 -18 48 -124 -49 -15 37 43 9 -46 63 -30 -16 -18 46 42 9 31 -65 51 92 -52 81 -104 107 -101 -46 117 100 -4 -6 -126 -6 -56 -127 42 -14 -42 99 -16 8 -64 21 47 126 46 -89 -27 -107 113 120 -1 35 34 -96 -72 40 -33 4 51 38 -45 92 43 -92 13 35 9 5 25 -14 -5 127 -65 47 -98 4 55 -25 -128 -89 -63 36 -64 44 87 -6 124 -83 -23 -45 -69 -37 -25 23 73 114 -82 -128 -32 98 -89 -93 0 127 -126 -103 -85 -23 13 114 -63 -115 -106 -41 23 -12 106 -46 127 -30 46 -121 -118 46 82 31 -128 22 -120 -121 78 106 39 35 29 -33 -125 -126 123 123 -128 -34 -119 -94 -127 127 -2 -128 70 28 41 -88 124 -13 -67 122 -98 -71 -21 35 -127 70 -65 2 124 -38 -40 -85 -40 20 -23 -12 61 56 -128 11 49 127 -127 118 -125 -82 67 127 -26 96 -72 52 -63 -11 -111 -126 -15 105 20 26 16 -87 -29 108 84 47 -99 121 127 47 -13 54 126 -25 -6 73 41 56 -31 -46 33 125 -122 -89 82 127 23 -63 127 126 -105 -46 -91 -117 39 123 126 82 125 65 24 127 127 -89 127 -54 70 -122 125 5 16 127 -13 20 127 -127 121 -2 4 10 6 -97 99 48 -127 31 109 -31 53 -125 101 -125 -16 -98 -65 -65 -125 -126 74 92 -100 -25 59 0 -128 19 38 -39 -122 -127 -75 -123 -17 111 -124 -121 -9 64 34 49 -123 40 -3 16 23 66 -16 -123 -26 -36 125 102 89 -34 -123 52 -2 -116 -1 100 57 -128 126 -87 -74 124 57 -116 6 16 15 20 -44 28 81 99 6 9 62 55 -92 82 77 -2 -36 -122 -72 -127 75 12 96 59 6 -55 77 58 64 -49 -122 -42 126 121 -54 64 -52 126 79 -46 28 -33 -128 -50 127 -127 -128 -38 100 -75 23 53 96 -107 21 -6 -13 -107 -50 -67 -67 -128 111 127 -127 -107 60 65 -106 81 95 127 12 -52 -81 50 127 45 117 18 -10 70 -104 36 30 57 -32 51 16 80 -128 -21 21 124 70 85 12 100 -41 -28 -126 -128 111 70 89 -32 -69 -90 100 125 -101 41 8 -3 68 -125 33 94 11 -44 49 -5 52 -121 56 118 -125 -98 127 -79 -4 -17 3 109 -70 119 -57 122 -125 10 -93 -93 15 38 -108 127 -3 91 -104 -105 -23 51 -23 -42 -92 63 -67 -66 20 -108 -35 73 -122 -125 41 93 -71 88 122 101 -13 -98 66 55 -120 -128 40 0 58 -81 56 124 96 13 90 22 127 -61 125 -117 -105 68 -91 -112 5 96 119 121 108 -67 -89 -5 -40 -7 8 -113 66 -92 4 -66 17 -58 -90 -127 127 76 -72 -61 83 -21 -128 -57 118 66 -127 46 -54 36 103 127 30 92 -128 54 -97 80 112 62 -51 38 -13 47 -127 -107 -125 -79 -106 -66 -118 20 -11 -18 63 92 62 -17 -117 -29 -4 29 -74 20 66 -41 -42 -107 -40 -37 40 60 7 -62 -96 100 124 15 -30 -39 -103 112 -40 -95 126 -33 -110 -86 4 -91 68 67 9 -27 -127 -121 50 -77 40 22 -26 -31 -58 105 125 -7 61 -124 14 84 -45 112 44 31 41 71 -113 52 -44 14 -124 -18 -27 3 -1 85 -72 -29 -26 -11 -32 9 -128 -32 36 -4 37 -30 33 39 -20 71 -49 -101 -64 75 -21 -38 41 -128 20 11 -20 123 -89 -86 -115 41 54 -62 127 -20 -42 -16 122 -116 -123 1 -29 -81 65 -82 122 127 -125 -112 -93 -128 -88 -112 117 -127 -27 -42 125 73 -121 -126 57 37 -105 -127 69 -77 122 122 124 -94 -105 83 -34 0 126 81 52 99 -14 127 -128 -127 -81 86 -26 -47 -87 -128 127 -116 127 10 38 -25 -6 125 127 -90 126 -3 -128 121 -59 -124 -126 -4 -23 -20 15 -12 -84 127 -15 98 23 -82 -44 18 -28 48 -52 67 -126 -114 -127 120 53 -39 -33 62 120 108 127 127 -128 127 -94 127 54 61 -94 -14 -54 -103 -121 119 -126 127 -127 26 120 -69 127 73 86 -67 117 95 123 38 36 126 11 112 55 35 82 -16 62 51 -3 -126 -58 -124 58 127 127 86 -71 10 37 11 126 -115 6 -49 -114 15 31 -98 13 -32 -9 -124 37 -126 15 43 -60 -61 -3 -43 -9 97 -113 97 -126 -47 -70 -6 -28 -22 -123 24 -46 -38 47 -19 104 -17 59 -4 -85 19 -13 64 -116 90 56 -122 76 43 -126 124 -98 -97 -19 13 -110 -81 106 29 101 -128 -89 -97 -101 52 -11 -34 15 1 12 7 -96 -22 111 -80 27 -34 1 -127 96 69 127 32 61 -57 -42 0 -121 -10 20 -5 54 -7 77 2 73 -51 30 -128 -23 67 -71 -31 69 -106 -26 -119 30 -30 -127 -52 -39 -36 69 86 7 33 -48 65 -6 73 82 -15 23 90 -123 -21 40 80 9 -45 -24 -18 -128 -72 73 -114 92 26 -37 126 10 50 14 35 -13 127 -14 127 127 92 -127 -52 67 -127 122 24 125 15 -68 20 47 -110 -60 115 -22 -128 41 -126 -111 13 113 86 -97 -79 -110 127 -70 -60 127 6 125 -30 98 -17 -107 93 -126 -46 -63 89 -127 -127 -1 -7 116 -91 8 -54 -114 54 -31 -10 -1 -36 -128 80 110 125 -110 -62 -127 -67 126 -74 57 -92 47 103 -12 -104 88 -15 -35 29 -128 125 30 -9 74 127 74 120 -97 -28 113 14 19 10 32 -91 -124 127 -60 20 44 -57 -42 127 -127 -59 -127 127 -128 -128 124 127 69 92 21 -25 36 -126 127 127 68 33 122 92 28 22 126 -52 -20 9 23 -123 119 -111 92 127 115 -24 19 53 -15 -125 107 -126 -125 76 52 -23 -70 -8 43 -121 112 124 -120 -59 -23 -128 -128 51 -124 116 127 127 115 68 -125 -93 6 119 31 -73 -124 -109 -1 -127 101 -126 35 -6 -100 44 70 -40 -20 -91 -17 -20 40 113 64 -28 -115 126 -76 19 -14 45 124 -36 118 -24 98 -127 -128 42 -122 26 102 -8 5 -21 106 81 47 -124 -14 -73 -62 -72 -33 -64 -117 -24 122 -123 -30 -32 -64 -123 -103 119 119 10 97 100 -59 -114 2 124 -24 -109 55 83 -30 123 -38 -79 28 83 45 28 -127 -59 8 35 -91 -119 100 112 68 -62 68 -85 7 6 -65 -41 -127 79 6 -46 74 -128 111 4 -10 -38 64 -55 59 12 -9 -115 14 -122 39 127 -105 71 127 113 34 98 115 123 -61 -42 55 -7 36 -97 56 -111 -41 -103 -76 14 -125 90 62 -44 37 25 -119 -102 -41 68 -62 127 123 3 36 47 18 40 127 -89 16 102 -96 -37 16 82 -7 125 -52 -98 52 25 126 -64 40 -123 -71 -101 7 -18 -127 -119 20 48 -124 -83 -55 127 90 -34 -51 -18 127 0 -8 29 -101 35 48 66 -27 90 74 -128 65 123 -1 -44 -17 -101 -111 126 48 35 -96 -103 -23 -5 -53 -50 -31 99 25 33 25 -38 -48 117 -55 -29 34 -69 59 -47 -95 10 -112 76 109 127 -128 -92 -86 -128 75 -66 42 -78 51 24 -35 107 9 -126 43 104 127 7 -33 127 -37 -29 -34 21 82 -27 118 -125 -123 100 -107 -4 -44 -125 88 -66 -51 125 -74 -39 -105 -61 108 30 29 -33 -21 22 127 32 -69 4 -87 -30 -100 -126 -7 35 -128 17 -105 -103 46 -11 -10 -20 73 4 43 15 127 -5 85 -124 -27 -69 12 72 72 76 13 -57 64 -15 -68 47 -128 27 38 57 -55 -21 -17 -74 111 64 -4 -7 -75 -127 5 -21 40 -12 20 -75 26 9 -21 45 -50 -55 -17 78 -41 -49 60 -36 33 -8 -11 29 42 33 -94 4 44 42 -14 104 -65 -19 -128 72 -28 121 -51 -98 -79 -38 -38 -8 -13 -104 -23 24 112 118 89 -117 22 -73 -1 116 127 -2 103 125 -68 -89 127 -26 -101 69 -112 101 34 -114 -35 126 -80 -124 125 88 -4 126 41 -47 43 -127 -126 -74 -96 110 -1 -44 -32 -10 37 96 -127 -127 121 -101 88 65 103 -123 70 22 -26 27 -44 120 -62 80 40 125 -34 16 -41 -88 -108 38 -93 121 -58 -78 40 76 41 -18 -125 126 52 2 0 -63 -99 64 -43 70 -126 -127 -47 121 -104 -121 -41 119 8 -10 62 -91 -126 -99 70 82 120 -1 -46 -128 -11 -127 -2 80 81 49 -76 15 -66 111 4 19 -102 -126 -128 127 -78 -108 58 -16 127 -55 -57 -105 127 112 -25 -32 106 2 -86 -126 39 105 -127 126 -110 -126 -128 -127 -39 -40 -79 -35 110 -110 95 -122 -70 35 37 -125 117 101 -40 -127 3 81 -121 84 127 127 33 102 -13 -17 23 -32 49 62 -44 -108 -124 -124 121 -41 -99 58 49 -66 37 108 -51 127 127 -43 -113 -25 126 127 -36 15 -114 -12 -126 -63 -110 -118 43 -43 -59 7 -63 18 -35 127 55 24 125 -126 -32 -128 -124 77 -115 66 -110 56 -56 -127 127 48 -72 -118 -122 -88 5 49 -88 -76 54 0 31 -128 127 -127 -48 8 30 46 -16 11 -76 25 -26 41 6 -123 127 17 61 -20 56 20 -20 53 -115 -127 -9 -55 -46 98 22 23 -109 115 -35 -111 -127 -83 0 -22 39 -57 -125 -87 124 -103 35 -69 127 -96 -85 127 -110 -115 -72 -128 92 54 10 24 56 -17 37 88 116 106 -44 36 -13 60 62 -128 126 110 -6 -17 24 30 19 -108 70 10 118 -73 82 -71 -31 66 -112 -114 127 48 127 16 -31 -108 120 106 114 -24 105 11 -17 -89 -19 -25 112 116 19 -121 -17 1 -22 -75 -24 46 127 -71 -69 86 5 19 44 -94 -107 -70 -128 -112 -106 112 -105 -86 -102 67 -31 6 50 -33 -7 -125 -119 4 -21 -80 113 -43 -68 -12 -54 6 -128 -80 -72 -20 126 39 127 -102 126 126 -114 -122 -126 52 -73 12 15 -94 -87 82 120 -127 -9 106 104 56 124 -74 -97 88 -119 -34 -66 -43 90 -42 -45 -121 -84 4 82 107 -7 -118 127 -4 -58 70 -65 -124 -85 -68 -30 18 -31 -110 -126 -126 127 15 45 -126 -40 48 20 70 -125 8 103 -126 10 -18 16 27 55 127 110 -85 -125 21 -113 72 127 37 124 -127 101 -10 127 96 126 106 -77 116 -62 -21 -52 50 -121 -2 -46 -44 -70 3 -17 48 -102 -32 -36 36 12 -49 103 -20 126 -89 45 -115 -58 -99 76 -9 8 -45 59 -29 -52 10 -118 -121 -54 -57 -30 -28 -127 72 81 -125 -41 -110 -128 -121 -16 118 31 -128 -61 -18 79 -62 -118 14 66 -126 -23 -101 -112 -68 -62 -53 14 -127 107 -115 121 127 84 -47 79 -26 81 22 58 -63 -120 -61 107 32 -127 94 -128 -128 126 -93 7 -125 126 7 42 -21 -125 52 -128 -87 10 89 11 11 74 119 -14 -14 70 76 126 39 120 12 -74 -127 102 127 6 -8 -125 67 45 -11 117 38 81 -36 27 34 121 -128 -120 -25 -127 -58 -64 -111 53 -15 -128 67 -16 -19 127 -11 -108 68 108 -10 114 87 94 57 -81 -92 28 -128 99 79 -74 65 109 -18 -37 63 51 88 -93 -54 -122 -42 123 -126 -64 -126 -64 -69 -47 -83 -40 -127 10 -123 -120 62 125 -13 115 -128 -128 -21 -118 -125 127 77 -4 118 -38 -34 109 127 -127 65 -12 29 -11 123 -2 90 -118 73 23 125 1 -127 109 -128 -128 -96 -126 -14 -41 37 -127 127 -19 127 -22 -12 -62 2 -123 -127 127 -128 -125 120 -128 -126 127 -3 108 99 78 -80 39 -99 113 -111 127 124 11 1 -11 -24 110 -110 127 -66 -80 66 17 -119 127 -53 -3 -5 -26 126 -127 -28 25 -98 34 118 -17 -127 127 127 38 -19 83 -128 -25 5 39 -35 -121 -127 -2 -70 -52 28 127 48 15 127 -94 -82 39 65 58 92 19 121 126 127 50 86 14 -51 27 56 47 127 126 32 33 124 -103 21 50 110 -118 -97 67 29 -84 8 127 18 -28 -19 -37 -8 119 1 58 -103 -59 -34 -27 43 -43 107 -77 127 119 -96 108 33 -5 12 -62 40 46 124 125 -39 22 -19 -4 126 -53 -38 -59 5 -118 102 60 -21 124 67 -19 121 123 127 0 33 -19 0 -32 -7 -1 -72 -58 -44 -5 23 3 35 -5 31 77 11 -23 -37 -3 -22 -10 10 -41 -22 33 19 22 16 -16 -60 -24 14 8 -25 41 3 -91 20 54 -51 -40 33 -71 -94 -10 -25 -26 5 -77 39 13 38 18 22 31 -75 4 -24 -61 -7 11 39 -33 -21 20 3 0 -8 13 48 -33 60 -8 60 1 -65 -65 -60 26 18 27 16 7 -8 -17 50 24 -3 31 -32 -55 -2 -52 63 4 36 -52 -127 -35 -63 -76 32 73 31 -37 33 12 -89 -94 -57 -69 -12 50 -10 -85 11 -52 108 -44 77 -81 -2 -66 -13 -123 31 -2 -17 -9 16 -128 39 -42 -3 -117 35 127 9 123 -71 81 -26 16 79 -108 67 41 -80 2 -128 -14 -41 72 -8 -128 -41 -43 17 11 -65 -41 127 -27 -73 -64 -5 114 -126 -25 22 76 -84 49 127 101 59 -67 61 55 -51 -127 4 -17 60 -39 63 7 -19 51 109 13 90 -30 125 -28 36 13 15 -77 -13 -24 127 37 0 35 121 6 -20 39 -128 -19 -50 6 -56 -18 52 -16 -12 -13 4 51 28 -48 -18 -67 123 43 -11 -47 39 127 -23 8 30 -16 -108 12 -25 40 10 58 -6 19 52 -17 -19 37 -8 57 36 1 -3 21 -4 67 7 -119 2 40 -39 36 44 -35 -55 40 25 -12 -20 -128 18 -126 9 127 6 -14 -36 -50 -63 -16 29 -34 57 -12 62 -29 -47 -18 -42 26 25 -70 16 -8 -22 -3 -17 2 27 -78 -2 -12 -23 -11 -43 38 -126 37 65 22 37 3 -4 -17 -34 -41 25 27 -11 39 65 -72 0 -57 -34 -49 62 55 37 -1 -39 -43 101 -27 41 -69 15 -113 -19 16 -39 11 26 70 -118 48 -4 -62 17 -10 42 4 -35 -8 -99 -14 38 36 9 27 32 -66 23 -9 21 -51 5 -10 -2 -16 127 -18 -28 -89 6 -12 39 -41 -49 3 -14 38 -62 65 -7 -30 88 -47 -121 83 -47 -99 -60 -84 -38 55 -125 101 32 -48 -33 -16 45 -123 52 98 13 116 -24 46 78 -96 32 64 -27 -43 -92 10 112 -79 -26 23 4 22 -127 126 89 -92 52 42 -23 95 39 -42 9 -78 42 102 21 12 -18 1 -9 -126 -30 -54 -90 -82 -83 -62 -121 126 -77 -83 -34 -36 127 127 -8 -25 -28 -125 29 52 -128 -128 11 41 -54 117 -52 125 -77 -119 125 84 102 -63 102 61 71 -29 -89 41 40 29 79 67 46 -89 54 11 -11 -2 12 -3 12 18 65 -39 -1 -17 -70 -67 -34 -90 -48 36 52 14 12 124 -58 49 55 -7 -17 -30 20 126 23 -97 51 126 127 4 -5 55 40 127 10 75 127 56 9 0 -20 3 8 54 -50 -22 -7 47 -116 71 -22 37 -73 -11 30 30 11 16 90 127 -78 -128 13 -60 20 -128 104 26 -101 17 124 50 -21 77 -55 2 -93 -83 30 -54 -128 -23 52 -126 -46 14 -35 -34 -58 43 125 -29 1 -71 -41 126 -18 -11 103 -125 68 -12 26 -120 76 13 -77 -25 -13 -5 87 29 42 19 -39 35 -30 127 18 -6 127 54 55 3 60 6 72 -34 25 -106 78 78 -2 -42 123 -51 -98 -45 8 -15 -25 85 -34 -29 -26 -29 52 -4 14 16 127 46 101 21 -96 30 -37 63 -13 64 -50 37 -105 46 24 -102 -8 -64 61 35 57 45 108 12 -44 84 2 -2 124 -95 39 -96 -125 -91 99 14 127 82 -126 73 25 117 -127 58 3 -97 -98 79 14 -20 44 23 51 61 105 98 -125 -125 82 0 -71 110 -8 -76 26 -63 126 107 49 -70 -63 20 127 59 17 -66 -124 127 -49 13 127 -50 -57 84 -120 -14 2 -69 1 47 -12 -84 -128 -77 55 125 -97 -20 -64 99 25 -127 -122 -118 -18 -86 127 -3 74 -112 124 64 45 -91 118 -19 -96 86 86 126 -25 47 -6 30 -127 -88 16 10 -70 -18 -22 -69 -3 5 -20 108 109 0 8 -1 124 -34 43 -9 26 -86 19 95 25 15 -13 16 50 -90 14 17 -22 -20 -80 0 9 -93 -82 40 -33 16 -119 14 44 25 69 126 -62 -39 125 37 50 29 -64 -31 -3 0 41 -6 82 75 -71 -22 11 -5 78 -114 -127 21 -81 91 -20 76 -30 67 -47 70 -26 -89 52 9 -12 4 9 21 -14 -45 -43 91 -28 -41 33 -50 54 -80 -55 -121 9 -30 17 125 -57 101 -14 -43 44 18 -6 18 -80 114 15 -108 25 39 -78 -18 50 5 21 -22 47 9 -21 -64 127 -108 40 43 36 75 73 -81 -126 12 127 -8 42 -14 26 -5 0 58 27 -40 -53 -116 61 -58 -38 -42 -47 123 -59 127 24 80 -93 -28 -10 5 35 -65 58 3 116 -27 -9 -127 -127 15 -43 -68 -60 -63 -67 -82 77 -127 33 26 25 -117 -28 108 -23 61 104 45 -28 52 54 -68 -27 -58 57 125 7 1 -81 72 -66 38 126 -14 -68 39 40 99 -54 -13 -30 55 -35 -128 -111 73 20 -41 -109 -66 127 -62 -56 -36 -18 -104 -127 57 -93 126 -45 127 -70 24 10 88 81 -104 -118 -50 127 71 67 15 -125 -45 127 -38 127 -36 17 127 127 -118 64 -125 12 -66 -20 -18 -126 -125 -72 -125 -66 -52 125 18 -123 104 62 127 -121 -23 99 -65 -17 -55 -53 -120 114 50 18 -123 69 -128 127 1 -7 -109 9 -101 29 -60 9 117 -1 47 85 89 50 29 -10 -44 -15 -35 127 18 -19 125 -55 11 7 27 11 66 -71 35 -113 90 24 4 -73 13 127 15 -73 -118 -12 -5 38 93 54 41 -33 38 117 -8 -77 2 52 96 51 -60 8 97 23 109 92 20 -43 46 -57 96 5 8 0 -27 124 45 48 127 19 -45 67 127 21 -8 36 43 56 91 -65 27 16 52 10 127 -37 46 -54 -127 42 -41 -96 -4 43 127 13 -90 -106 -116 92 -13 -46 42 -49 -32 -27 6 -22 -31 -22 125 -30 30 8 -78 65 -13 -63 43 -15 -36 127 -55 -79 -99 127 -55 127 -82 56 20 38 -46 -24 -106 43 -16 -128 -54 -54 -2 104 86 -83 92 -83 30 -28 127 127 -96 -66 -33 -64 -87 -51 -65 -52 42 28 -75 -33 6 -45 10 -106 -14 100 34 126 31 -2 -67 38 106 -13 60 2 -56 -37 45 -50 -8 -55 -89 46 -23 -126 -81 31 81 117 -121 51 73 -82 88 19 -116 30 20 18 -9 2 -7 -32 -42 -113 126 -101 127 -10 87 -52 -109 -49 -50 -128 53 -20 53 -125 45 96 -14 3 -104 114 -35 -71 126 -118 -122 -9 -83 -115 53 -23 42 32 120 44 -122 -45 37 -120 -27 59 -12 -71 127 49 -45 28 -40 95 -75 8 54 28 -128 91 21 14 -98 46 -47 127 5 -127 50 -124 -43 12 26 -14 57 -100 -128 -29 -22 58 45 32 -57 107 -55 9 17 -85 48 16 29 127 94 -94 5 -103 16 7 -30 43 -7 -29 -18 -71 -33 -13 11 12 87 -45 127 8 -19 41 127 -122 20 -125 -76 -85 126 124 127 -43 89 -28 28 63 -55 -6 -3 13 -51 30 -118 43 14 -34 56 -70 3 57 -64 71 -32 -43 114 86 -27 81 1 -26 -29 59 90 -101 48 -25 -108 28 23 19 -40 -25 31 26 -94 -52 14 -47 -113 -125 29 61 -125 -36 -4 51 -59 60 107 127 -128 94 28 86 35 -44 -26 24 23 119 33 64 -47 67 -6 -120 -79 64 6 120 100 0 -127 65 127 76 57 -127 -37 127 -2 51 -122 43 51 -45 4 44 15 84 -17 -39 -115 -15 -126 43 -23 -117 12 -33 88 4 74 -112 -35 -13 -84 -68 -122 71 -19 25 -85 91 -126 -67 81 18 -9 -19 90 73 70 -89 119 -29 -86 126 27 50 53 -110 103 -28 117 -88 19 -10 124 116 -128 -121 127 -6 46 -36 -121 62 113 110 -58 -104 -12 -17 19 -104 127 98 -56 17 -91 87 -122 73 -79 84 -102 -116 30 -23 -59 -51 -7 -30 123 -1 -15 -128 39 117 -22 -34 123 -1 126 -75 -85 -80 78 85 -51 14 -50 2 16 48 -118 -2 -68 27 124 0 -73 4 -50 -56 29 46 22 -13 70 -45 -110 -50 -26 -56 -77 107 101 53 -123 -66 97 127 -53 94 18 -121 16 3 110 17 -126 108 -33 -127 -61 -18 -15 48 -6 -22 127 2 68 12 21 -71 29 -6 -4 -127 50 66 -5 -67 48 -15 -2 -48 122 0 -13 11 1 -6 -55 -41 -19 107 74 -118 49 93 -30 -41 41 -125 51 -55 24 -126 -58 -78 -41 56 -37 22 -22 127 -58 -11 -14 127 -3 127 1 -26 -43 84 -111 64 -123 13 27 -74 -70 75 -127 -17 26 -78 7 9 32 -35 58 85 -9 65 -56 -127 53 -128 -26 -16 99 118 36 -62 97 15 -31 22 14 7 -29 -25 -43 -40 -48 -47 20 -34 -4 -50 22 -53 -11 8 -36 -42 -37 -32 -56 11 7 20 -7 -9 -5 -68 13 66 25 -15 -23 34 -8 13 -13 -56 -43 -30 -29 3 2 -18 -64 -27 89 112 -40 10 -26 -34 -45 -37 -26 -2 44 -65 -67 19 -53 -16 -33 -1 -17 70 -74 -27 -33 -72 -12 -60 -34 -11 -33 -123 25 -15 11 -42 -34 -33 28 23 -32 -35 -70 -13 -7 0 64 47 58 -81 -49 50 -49 -4 72 30 -3 51 -12 -57 -49 11 -38 14 30 -21 -128 42 6 77 -79 -57 -61 13 -34 3 -21 35 14 -37 -5 19 -87 58 -29 -13 -59 -23 88 44 13 -56 20 23 24 -10 -10 78 -3 -17 -2 -112 -6 6 36 40 -31 6 6 -28 17 -35 -72 127 -28 -121 -62 -46 80 -50 -60 97 49 -78 55 -14 120 38 -60 38 3 -25 -44 -45 37 11 -8 -8 -35 54 10 61 7 64 -18 65 4 35 -49 -25 -32 22 59 4 -17 25 8 -10 17 11 -13 9 75 -27 13 7 -29 112 -13 0 -15 -21 -12 11 -29 -20 33 -3 -47 -6 -18 74 -5 -4 -17 -67 -22 1 53 -4 1 5 40 14 39 -41 -120 56 3 -8 1 15 -2 23 3 -33 62 42 -33 -42 71 9 37 50 -5 18 11 107 -25 -64 -61 3 29 -49 76 -19 -15 -18 -22 -39 -1 19 -14 56 5 91 -43 43 15 -23 125 -47 -64 -2 -6 -26 -105 81 93 -56 82 -69 -47 -40 46 -35 72 73 -8 -1 4 120 -51 101 -34 12 54 5 19 -123 53 87 29 58 15 24 -126 72 3 52 -50 -7 12 28 -42 1 34 35 -99 -7 105 6 27 -109 -19 -74 -34 -10 -57 -34 -10 89 -6 -31 34 -91 59 -17 -33 60 -28 8 -16 7 -22 -39 -49 -56 -3 67 -8 -94 -22 -18 -10 -2 -20 -27 -103 3 -76 11 22 71 47 51 -95 30 -3 -128 126 3 -79 -13 28 -65 24 -117 49 86 9 8 52 119 -126 -10 77 -33 34 -70 11 16 71 39 -107 24 45 -107 -49 -2 -21 -3 17 8 23 -10 95 58 -30 14 21 12 -18 -43 -30 -8 -2 20 30 53 50 -117 -13 -36 -112 -96 2 25 -35 -78 -8 -58 64 -50 34 22 71 103 99 93 -48 -49 59 34 -31 -34 -48 14 56 -117 -38 -3 -10 -39 -25 -16 26 92 -10 82 8 8 -99 -30 25 -7 -31 2 28 63 12 -126 -18 23 20 2 -15 7 -69 -37 19 -44 -18 -125 10 -116 -73 -37 2 -11 -61 -95 -44 -65 -42 -32 -24 30 -53 68 19 13 -28 23 49 -42 -91 1 -30 46 86 -2 127 1 93 123 -5 -117 -4 -14 14 -26 -104 2 34 -15 70 48 17 -26 11 13 -22 -33 37 80 95 43 -48 13 101 37 -77 -13 -4 -18 23 -7 14 83 116 -19 -22 -27 97 -30 34 33 -20 52 -56 52 -6 31 -11 -123 -65 61 10 -47 10 43 71 -22 14 24 70 17 72 -41 19 -23 46 67 22 85 23 -62 69 -65 -19 80 14 2 121 -75 52 84 -30 -42 12 -71 88 58 -6 54 11 14 -58 1 -47 39 10 48 6 -8 89 -8 -67 -36 -67 -5 -62 -43 -16 22 -37 0 22 1 63 -55 -125 -38 51 -69 -23 -68 -47 68 -2 -20 -31 -36 47 -9 -39 26 -96 -22 -89 -68 -23 33 -1 97 -24 113 -50 -62 -22 58 -2 -20 52 -41 -2 -70 1 -81 18 22 15 36 -96 -34 16 -55 51 20 50 43 10 -78 80 41 3 27 -6 127 -2 -19 2 96 51 100 -25 -34 1 3 48 9 -64 -73 35 14 -4 26 58 -44 49 -20 121 58 -80 -7 51 25 -63 -95 44 5 -60 -23 -31 44 29 -20 -47 -42 -2 60 -112 73 -1 32 -17 124 40 -1 46 46 -42 -37 61 30 68 -117 -43 6 -28 -96 7 -34 81 2 -6 -73 41 67 27 13 70 41 44 27 89 20 -6 81 4 58 -20 -26 75 48 32 34 34 -19 -66 31 -38 -25 29 -31 30 32 14 -59 -5 -115 1 40 -3 7 20 0 38 -42 -60 89 -34 63 -36 7 -5 -1 0 32 49 51 48 3 -4 56 58 89 13 -111 34 13 19 -101 84 -78 17 62 112 -36 -28 66 9 -3 -19 37 -56 -61 -28 -33 17 31 -1 127 6 -44 -92 -40 -19 -90 44 -41 22 99 13 41 -125 -58 58 -4 -84 -35 70 -1 -82 -28 -25 38 71 40 108 -39 -88 34 67 -69 69 -60 127 118 -1 61 8 60 -98 -106 -55 -5 7 25 45 15 -34 29 80 -103 -16 56 -37 -123 -77 114 -20 14 -19 46 -52 31 -13 0 16 -81 -57 43 -28 32 -114 -84 -16 -3 -79 -24 109 -15 50 1 -32 -17 -116 -87 -42 -9 -102 121 -6 25 55 20 44 126 31 7 62 31 45 -96 -71 -9 87 -45 107 -32 -9 -54 -62 -5 113 -1 -2 -9 21 -58 -49 43 38 -33 -128 13 -43 56 -96 -89 -65 -4 -40 4 -67 23 -12 -85 -33 -79 73 -109 -50 35 10 52 14 -1 63 -79 68 38 62 55 4 -85 -42 42 -68 40 24 23 16 122 20 29 -64 111 -26 10 46 -123 75 -24 10 -104 19 -41 -15 -27 -67 39 85 -7 25 22 -3 -31 17 9 -32 50 52 -101 1 43 -9 102 -12 35 0 -59 -61 15 -15 65 -33 58 82 -11 125 32 -10 -57 -7 -104 3 39 -69 -32 -27 18 57 10 16 47 -41 67 127 2 0 44 23 -5 40 107 -103 23 -14 -77 35 26 7 -14 38 -19 -13 22 -92 -13 -1 75 125 20 -6 18 -6 96 37 16 6 -70 63 83 -8 46 20 32 -44 -126 47 -54 -3 64 33 93 101 -127 20 31 -43 1 85 -57 -8 37 -28 -123 64 18 -46 -125 123 7 -16 103 70 -65 51 -5 10 50 -27 -66 -51 -48 121 -13 125 -30 93 -54 49 -72 -3 10 -76 101 5 -78 43 105 124 2 -17 114 -2 -44 -33 88 -38 126 -112 -4 -62 -25 -128 -10 -89 63 63 -51 125 -40 126 -33 56 -48 -77 -70 -43 -105 44 12 -60 16 -45 -13 60 -16 3 -84 33 -24 -25 -8 -17 -95 14 13 -12 -116 30 18 23 -107 -128 67 -21 -102 97 34 -49 26 -107 -106 121 94 -66 54 -101 33 -4 6 14 27 -92 -43 68 -35 -6 39 -113 15 31 109 -5 24 15 -20 13 20 121 -57 77 -53 -26 -48 -66 -86 -14 -13 -46 -77 51 -4 40 126 -31 72 14 82 4 -61 81 -2 -63 -19 -77 -101 39 52 -97 11 7 -119 -126 -37 -13 -79 -39 74 -7 -68 119 53 91 14 0 87 -33 37 -11 -4 -41 25 -68 -2 -7 11 21 122 14 -84 20 59 -62 -58 -10 86 14 -119 -78 -4 -33 74 29 123 -51 -29 86 -24 -6 127 94 -1 -17 52 17 30 -81 20 -68 -37 -6 -33 -28 -65 18 -4 13 -3 -39 -64 -12 27 105 65 56 9 53 -70 40 -49 -121 43 54 74 -78 -11 -43 -10 38 -52 0 -30 -57 -40 -18 -12 -60 3 -17 -35 -82 -4 -9 6 -4 41 24 -33 -4 29 -30 49 -16 116 117 -7 -5 -32 -122 -8 -46 -15 9 2 -38 -4 75 -8 -37 0 -2 57 82 -11 -69 79 -75 40 -32 -31 -22 70 44 16 -82 31 -46 -98 69 127 -111 -42 -16 -46 -80 22 -47 70 62 -50 -56 56 45 109 52 -94 -47 90 75 25 9 -40 -9 42 14 -82 8 21 -27 -50 -110 -3 -28 -72 -56 -81 85 -86 -66 27 2 9 40 -28 -60 -7 30 -34 -5 71 51 -2 -121 117 -8 19 42 -20 -64 31 -3 -68 34 -68 31 121 13 -83 -32 -92 -40 -31 -12 71 -26 -90 37 -121 -28 80 3 -19 -21 44 -59 7 -19 25 13 -7 -6 102 22 8 25 -16 -48 30 -52 -16 63 -10 6 66 -26 -69 -76 53 -40 4 111 -44 -64 -17 22 -34 69 -26 59 9 1 -118 29 40 -57 -105 7 -25 69 -19 -43 -67 -29 28 -57 3 -25 -31 -64 8 113 -13 -44 40 83 -107 -36 -21 -41 1 -43 124 -67 -10 127 -82 -55 -62 -99 -69 24 80 6 16 10 104 -46 47 33 -47 -16 -13 11 -78 -4 -102 5 51 -54 17 -23 -67 -5 49 95 -13 -60 24 -3 71 -11 -1 54 -30 20 2 6 126 -20 -10 1 65 -14 -64 9 -5 59 -13 11 67 -70 -78 -47 29 22 -59 -53 29 57 -18 12 -55 47 -4 -57 -16 -19 -7 -95 -51 -124 38 -45 26 28 9 4 81 124 -17 35 7 26 39 71 14 -42 51 51 -30 -27 -124 -82 -47 -7 -109 7 6 -9 23 29 27 -25 14 28 16 -97 -128 13 53 62 74 -9 -16 4 65 -117 23 68 -128 -36 4 42 43 -10 -128 -78 7 -125 -124 -31 -34 126 -67 53 13 -59 -100 122 -104 -125 -85 23 -49 30 -119 -1 -11 93 23 39 -85 -27 101 -128 -42 -127 -29 -44 -30 -34 57 43 -22 -69 -102 2 -47 18 -104 -42 48 -79 -127 -126 18 -77 30 -16 16 124 25 -38 -61 -86 -119 -25 60 -105 51 122 15 -25 -61 57 -62 15 76 33 -1 -124 5 -65 52 -45 -127 -124 126 -128 -17 79 -124 -125 79 -73 -11 19 48 -83 -69 34 123 81 45 19 -90 -73 -93 -127 -125 -64 36 4 11 -102 -79 38 -120 67 -32 77 34 4 23 107 -126 -118 31 58 24 -89 50 -18 0 -71 5 127 -119 89 -42 -36 86 50 127 -5 -87 90 -56 -63 112 83 34 68 -83 22 -3 -32 21 -40 -81 -84 -12 -65 -127 -127 58 -44 21 36 53 -71 -15 61 84 -109 24 23 60 -114 -124 127 37 88 -67 126 -68 -23 -110 45 -5 37 117 -51 127 31 -21 30 -127 -50 14 49 -128 -12 11 57 -41 25 -27 -16 -90 15 -8 -127 100 19 -58 15 52 -20 -44 44 -18 32 -100 -41 -47 79 10 33 -13 -11 -40 -106 82 39 3 -12 -2 -23 7 25 -56 -23 6 50 -71 67 -12 -33 -42 -36 -16 -16 76 -79 38 49 77 -20 -23 28 88 50 18 106 -4 -36 25 -76 -87 -116 27 -100 17 -21 18 -26 -7 17 35 -126 -49 106 58 -45 -31 -12 -33 85 5 90 25 93 -128 40 -11 -64 -93 36 5 73 -22 7 -22 -14 -126 37 -99 -123 -73 -3 -9 67 -89 -13 107 45 46 -4 -55 48 -99 -97 -18 126 104 -109 -8 61 122 74 -119 -126 -32 -44 32 -101 -128 20 2 22 -126 -31 -27 -66 107 11 80 124 74 -11 -24 -94 37 -73 81 -74 58 126 12 -8 -13 -55 -117 78 69 51 115 -63 18 14 4 70 -12 127 97 -127 114 64 -72 -112 43 105 73 -41 65 -33 -90 15 127 56 -25 25 -47 -33 17 -92 -41 -113 5 32 62 93 -58 22 -15 127 14 -2 108 -18 106 52 -40 48 -39 30 125 -59 96 -85 101 -42 24 -33 -126 127 -48 -26 23 1 116 -11 -5 8 -128 39 8 78 21 -43 -20 14 -5 -27 45 -16 -128 61 -9 -44 -96 -127 72 16 -63 -21 11 -12 -8 -66 114 52 -57 64 -45 61 -38 -20 -2 -7 10 127 -60 -75 5 66 34 -27 -24 24 75 28 -55 72 -127 88 11 118 -46 62 4 84 -20 21 45 33 -49 -40 125 -127 40 -8 -56 -2 127 33 24 -7 64 32 -124 53 -19 79 -7 -82 15 -102 10 -50 56 90 -30 -19 -40 102 12 32 -125 -24 9 -19 -10 76 28 -15 70 21 5 -23 1 16 13 35 -104 12 15 -51 26 28 -14 34 -62 0 -108 80 19 -4 -52 -52 42 75 -25 -6 28 -125 -22 -127 -24 79 3 -108 -104 17 127 6 59 59 126 -31 119 -58 41 69 -48 66 -35 -76 113 28 -106 80 -87 -118 -46 126 108 55 127 -67 53 39 -21 63 63 -48 14 -19 -120 117 103 120 21 -121 -82 127 3 70 3 12 18 127 9 -117 -25 69 -33 85 89 127 61 -119 -26 122 116 59 26 126 -41 33 117 -126 113 125 -6 68 -126 95 -45 -44 -3 84 8 -112 39 126 -58 70 -127 28 127 127 -23 95 127 110 -42 -7 -34 64 -21 -36 -39 -27 -56 -52 127 -91 -94 33 126 73 110 68 -51 -127 -71 44 -51 64 37 59 85 70 -23 -2 36 -38 -6 -57 127 127 -29 -58 117 -13 -16 -16 127 15 29 -84 -55 117 -34 -124 -101 32 -113 -102 -125 -12 -128 112 -46 -127 -114 -41 38 -114 67 -17 40 127 -128 126 -89 118 57 63 -65 102 -57 -118 26 68 -69 -126 -121 84 -61 105 -66 87 124 -127 -13 108 -11 -60 -127 -41 126 126 1 -107 -126 20 -127 -121 127 48 -128 -53 124 -74 -45 51 89 46 121 -2 126 -41 -40 17 127 30 -23 -18 126 -14 3 31 -45 37 -13 -49 -22 -106 76 33 -4 -74 -60 -98 20 121 -17 56 -47 -1 -73 35 17 -10 -128 -92 11 -126 33 8 -88 -85 11 126 -44 79 -42 31 -42 -20 -94 -46 -54 -66 4 -25 9 85 38 58 -44 29 -53 85 49 77 74 63 7 45 -65 -125 -124 -58 125 -126 37 -128 24 109 20 -80 2 13 67 -124 71 -41 117 46 -120 -15 -62 41 -67 -9 1 127 104 15 35 27 17 -54 -30 -88 93 -62 -116 -26 84 74 123 91 34 -2 119 -128 -22 75 60 127 64 78 39 -23 -128 122 -59 -21 80 -56 17 -8 -4 52 89 -103 -95 94 -93 19 -8 6 50 99 49 -34 124 76 -96 -84 -122 8 50 125 -1 65 59 81 -123 -128 -14 39 52 12 10 -3 32 91 66 29 -119 -93 52 -123 -15 -98 30 74 -126 -12 127 107 -45 -15 49 -31 47 -21 29 -116 7 -40 18 -105 54 56 -127 79 23 28 -93 -41 44 -48 -3 57 -15 66 -35 47 -81 127 -35 -61 -30 127 -21 -128 -3 32 13 1 43 75 -85 49 82 -56 125 -84 34 126 4 -27 -28 8 -16 127 76 -32 10 92 -66 126 27 33 40 -10 -19 -63 10 126 -117 19 27 -14 20 -90 -58 36 -42 -2 56 -18 -33 -28 -124 127 42 -61 -62 22 -16 45 8 -108 -128 -123 89 -127 27 104 49 -46 48 -26 -61 -1 65 37 -59 -58 -18 95 11 8 -126 1 16 -47 -35 -16 18 -2 -2 18 -126 35 -3 45 -22 124 66 -9 -3 -113 -28 22 -109 35 -127 0 -10 -3 29 87 -67 23 -23 33 -35 -22 -1 112 29 30 59 10 -61 24 85 -43 -68 56 -3 0 42 -44 44 55 -30 -127 77 -29 -29 38 123 6 -6 127 18 -128 -1 -17 78 64 -57 118 -63 -82 -53 49 58 -14 33 85 -106 126 112 -16 -8 51 -111 126 24 76 -2 -112 -75 107 -128 -70 11 -127 -92 50 -56 -34 118 5 -66 6 108 -4 97 111 -17 120 -41 124 0 -62 21 112 -24 -125 126 -69 -29 -29 75 95 -38 -18 42 27 -78 -38 81 -39 54 -96 69 -44 -6 -105 15 -24 -47 -115 -4 -120 -40 30 -21 -104 37 -128 -122 116 125 -3 96 8 -33 27 -46 54 27 -61 -10 -32 -78 -103 0 -80 -101 30 127 65 -9 17 37 8 -127 65 -128 -89 -37 29 -31 -23 47 -8 -107 -38 -41 74 74 8 12 -13 53 -124 -101 71 -5 -14 -58 27 -94 -72 -16 57 -8 -123 5 -44 -7 -41 -8 127 -53 -27 109 23 34 -4 -44 3 22 28 -59 21 -58 -4 119 -96 31 1 -73 115 86 17 63 14 -9 70 -74 79 126 17 -39 -127 -25 -50 -88 -16 -2 -58 80 -75 108 -44 -2 2 -61 16 111 -128 -5 81 -28 -41 -71 29 60 -126 -31 -4 -67 -3 14 49 11 -42 21 -42 -120 -56 -14 -89 -86 -90 -91 -33 -106 48 41 47 10 -26 -30 16 -124 25 -13 9 12 -37 30 -14 99 78 -16 52 101 39 -27 -88 -48 9 63 124 47 -2 7 21 35 -101 39 -7 -17 -15 -66 -16 -83 -74 -35 20 80 -86 35 9 -105 9 19 1 -4 -124 -96 103 120 18 -71 9 -81 125 0 -64 -128 -66 92 -119 51 112 74 -71 42 124 123 -1 -52 -3 91 95 47 -107 122 45 -121 43 127 62 14 27 -24 37 100 57 59 -9 2 -58 -27 53 83 39 86 59 117 32 -69 -24 -13 26 125 -11 -4 -99 57 126 -4 -80 81 64 -22 20 -4 92 -3 5 -121 -68 -43 -15 3 126 -5 -22 -19 80 22 12 12 -67 55 -87 -54 43 -102 49 -8 -43 -84 111 -41 76 67 -34 -6 -19 28 -36 -60 106 59 -125 54 -4 49 -27 -52 -119 -24 24 127 -15 9 -82 -63 83 -67 44 -45 -25 -35 -74 37 15 115 42 -97 -1 31 -19 -91 -55 46 -66 -12 -73 -49 -57 21 51 -43 -27 58 16 54 72 -7 -85 8 43 117 49 -25 -27 -128 -10 41 -79 127 -31 20 -57 -30 -99 -31 82 77 84 119 43 -14 -43 -128 -9 -54 -21 -53 -31 -54 35 53 125 58 90 40 126 26 -2 50 -2 33 45 -12 29 68 -112 37 102 24 67 -127 21 -41 16 71 -37 49 16 -21 -112 83 126 -127 34 -93 -27 -1 24 32 46 88 -50 -76 -10 -64 -16 75 -1 -34 -59 -6 31 121 -15 88 -63 -86 -11 -37 107 33 116 -48 -57 21 -126 87 23 18 -16 -82 11 -4 37 59 -73 -22 60 -34 62 -49 24 -43 17 -18 -84 -21 -19 -11 -98 -126 -2 30 -43 76 -6 49 25 67 103 -20 126 58 113 88 11 95 -95 57 101 36 5 -5 -3 5 64 39 19 -27 47 33 124 2 -25 -1 -49 -2 -28 5 -56 17 -27 -50 7 -21 13 34 29 26 24 19 14 -18 -7 -29 13 -16 23 13 5 38 5 21 1 -3 74 -17 125 39 41 1 -14 -11 21 26 26 9 37 -17 -15 -71 73 8 -22 -30 50 30 -48 4 11 -4 17 -10 -14 68 5 72 -16 45 -83 21 -8 -11 -16 10 21 15 31 13 44 -2 25 17 89 -5 22 27 -32 5 48 -7 98 -11 -13 -42 40 -70 -6 121 32 25 -53 -53 4 41 15 -12 -9 -17 16 -3 28 22 46 -11 52 -32 -4 1 -47 -16 -22 9 48 -23 -43 -18 17 -95 0 -29 17 -44 60 -54 104 -32 48 22 10 -16 55 -74 33 -1 -37 123 3 -41 12 -34 -35 11 -18 18 -9 5 13 -14 6 37 15 0 69 35 -9 2 -12 7 17 50 -6 -8 -16 -22 7 -26 -30 1 -7 48 -58 3 14 2 -18 8 53 -18 21 -12 -16 16 9 16 -22 -30 13 -18 -30 4 -26 -17 15 26 6 25 15 -8 -33 6 -59 79 -17 47 -4 1 3 1 -7 15 0 6 -8 -95 -9 -10 60 2 -19 -1 8 -17 -17 -77 -5 1 26 -62 -10 -5 -10 9 4 18 -1 -9 3 -14 30 -4 2 -20 -9 -37 1 80 27 40 -6 -9 -38 -32 4 24 11 3 3 -15 17 54 -81 0 6 22 -44 -12 16 16 48 -22 -22 -25 -24 59 50 55 -27 1 -14 -73 1 10 -12 -26 13 -21 -12 26 -81 31 60 -13 -59 -3 -80 5 -11 3 28 -9 39 -73 -26 -23 40 2 -2 5 6 15 -26 5 1 16 -5 9 12 -13 22 53 -6 1 -13 68 -45 2 -41 13 -18 54 27 -64 -16 14 -26 -6 -22 -45 2 -44 -6 -12 20 9 -3 -23 43 4 1 -8 31 -9 46 -6 -13 -23 20 4 -90 -30 54 -36 11 -21 31 7 -10 8 -16 -19 19 -11 -16 88 124 -11 22 -9 -23 -3 55 -24 22 -127 28 9 31 -44 -15 -4 61 7 -13 79 -41 31 -12 -22 45 7 -9 -16 -35 -34 -34 101 11 47 -29 24 -7 -67 97 52 12 18 3 -16 -1 -54 1 -46 -74 -35 -48 20 12 25 32 -46 -19 43 12 -26 -3 -19 11 126 42 -13 50 -7 -62 13 -127 15 -3 -128 -69 -8 -4 25 -19 -22 17 56 -98 -42 -7 -19 18 -3 -16 2 -1 -5 23 -24 2 -47 -2 1 -43 11 41 7 9 -26 8 -126 0 15 -13 43 -10 38 -22 14 27 -17 -40 16 25 78 -10 7 -2 -13 -15 2 25 35 -6 -9 -47 -1 29 -32 12 -3 -6 -24 16 7 3 -96 -78 -9 3 4 -9 -18 6 15 -1 -77 2 -3 0 -2 -20 21 -1 19 -30 -8 -2 -7 -57 21 0 -21 19 -23 -5 27 39 -15 -28 -10 -4 2 21 -1 4 6 --10 83 36 6 48 -72 76 19 -45 82 52 -64 32 1 -34 109 55 -33 -54 -104 -30 -45 -127 50 126 -50 41 62 69 125 -75 22 41 -19 126 15 5 105 65 -39 77 127 11 -7 33 74 -59 -24 -18 47 70 30 17 118 20 16 126 35 39 -3 127 122 -15 37 15 -26 76 6 -97 32 -44 -59 125 42 -22 124 35 32 -2 67 45 -125 19 46 4 108 47 -47 -128 65 121 48 52 120 37 41 -28 -28 123 30 6 31 -11 -95 -82 35 -1 79 23 -33 40 65 24 -42 -58 25 -74 13 -31 -74 119 -94 44 23 -123 50 102 38 65 -5 36 -40 -17 -56 14 -126 -67 83 59 -23 21 15 -2 46 8 -22 39 2 -1 29 -112 74 44 111 5 20 77 111 3 46 -47 28 -8 11 -62 2 -53 -61 -92 -42 -107 48 32 -75 101 32 20 58 62 -18 5 57 38 116 42 19 -74 -43 23 58 11 11 35 34 -105 8 -64 -123 -12 43 63 63 -110 20 22 -5 127 -124 -28 47 -19 125 -25 -91 -15 -9 -21 27 23 50 -70 21 -14 70 -90 10 88 -4 7 -107 -115 -33 25 -19 -16 -22 62 -31 1 -77 -42 35 -29 -2 6 125 -70 -52 20 18 -45 5 -2 -74 59 8 -2 4 40 -54 -35 -19 34 79 -126 -12 -105 -40 15 120 32 20 -9 -120 7 30 -78 72 -42 91 -59 28 11 1 38 36 109 -40 -81 -26 -98 -77 -68 64 30 -67 -57 17 -84 -127 -10 -62 11 10 54 -43 24 -27 -87 -43 18 -99 30 -43 -73 15 -31 40 4 -47 -90 -81 -98 -45 -83 14 120 -35 -79 32 47 5 6 -124 45 -17 -99 -84 -126 -96 31 43 -53 -25 81 -112 -124 -46 -90 -127 18 -105 74 -45 -50 116 -34 -127 -41 12 -127 24 27 -40 -51 -60 114 47 -17 -98 -58 -63 -73 6 -55 -96 4 -19 -127 -123 62 -103 28 25 13 -11 -7 -80 99 32 17 -42 -42 20 10 1 43 47 90 -38 29 74 86 4 -118 43 -52 -41 -17 13 24 -126 13 15 -45 11 21 95 -26 1 -100 -26 37 -67 23 -23 -25 26 16 -69 3 87 -16 -25 -21 14 64 -72 -74 -84 -14 -78 -100 31 -10 -68 21 61 125 -16 0 -17 -33 -24 -76 -59 -10 51 2 -25 -59 28 8 -28 11 0 125 -57 -19 30 -71 -52 -31 17 -29 -22 -44 -15 46 24 13 126 5 11 -72 67 91 8 -49 -5 11 -12 23 -31 103 -52 92 -56 14 26 6 17 -42 -2 -39 48 -31 -84 -13 -36 30 -42 -26 13 28 -7 -42 58 -51 -16 17 12 -38 15 20 4 -18 -50 41 -16 -118 -92 -53 -127 58 -47 19 -24 73 -19 61 37 82 73 91 21 36 24 -28 9 98 -10 37 -33 -63 21 -77 7 18 41 53 -22 56 108 30 12 -72 84 78 75 73 101 47 26 -21 -101 91 -20 -99 -78 8 -110 52 -42 102 120 30 98 66 -30 -7 -91 63 18 -15 13 -30 42 -59 20 87 5 79 -42 106 -24 86 91 15 92 48 71 76 -14 69 -72 -6 13 32 -90 75 -52 61 6 -35 -1 113 10 7 -17 -72 -20 -58 -20 -30 -26 -26 47 -30 69 79 53 8 98 13 42 -26 22 35 42 -13 66 -35 -1 78 100 -59 31 -53 -18 97 -15 60 -83 59 30 -33 24 45 41 24 82 96 -21 -34 -21 21 85 52 121 -35 20 -52 40 105 -62 47 73 38 21 0 88 -50 17 -72 -81 -9 -49 -22 -83 -10 -4 17 0 -55 32 47 25 21 -29 126 -2 -13 96 49 -43 -46 -92 22 57 -36 -2 -32 25 -16 2 -83 -94 78 -31 11 -85 34 -53 14 -30 35 10 -54 -39 -20 59 57 -35 13 -122 68 -52 -46 -79 -14 -22 37 21 93 -15 70 44 54 -46 32 29 92 32 -84 51 -7 77 67 41 -110 -122 28 33 -7 22 42 5 60 20 4 -8 7 30 17 20 112 86 17 64 -127 -60 -49 -37 18 37 9 -109 53 41 29 -127 -14 16 -44 -49 -20 -26 106 7 -55 -11 -28 6 -36 118 -30 74 -9 -30 -69 -44 -79 -25 90 51 -90 111 17 -34 42 -31 54 -26 -125 22 -38 -31 40 89 93 -19 -55 -4 51 -45 77 -33 35 0 -7 -9 6 67 -46 76 5 10 -127 -13 -19 59 -38 34 31 41 57 -46 69 23 35 60 23 -39 16 13 18 68 93 3 40 23 11 41 -55 118 -9 87 -27 -17 59 39 49 125 19 9 -7 31 42 -27 21 3 -8 -94 109 -8 19 46 113 14 -3 17 45 -19 118 67 19 9 -35 86 -26 -27 -11 10 46 38 -28 20 2 -56 82 18 38 -21 21 -33 7 -3 75 17 -21 78 18 56 -75 96 10 -47 41 -23 2 -3 127 -17 23 9 84 44 -1 21 127 -70 -18 4 -40 -17 85 -32 -7 7 86 23 61 -2 -44 72 6 -38 -10 63 42 -12 -52 -31 46 24 44 38 26 -25 19 26 -73 33 24 -26 -26 20 14 6 -17 -24 9 -12 -26 -18 -18 -5 12 -33 -2 -40 -16 53 -65 0 4 25 24 -15 -13 -26 -61 17 46 71 6 -18 9 -53 -64 25 -56 -67 -46 -13 -12 -19 118 50 -27 -16 -86 48 -49 -31 -36 31 28 -33 -90 -20 -10 9 38 66 -4 -16 6 19 30 30 -55 19 -3 19 25 -11 12 -64 46 -22 -31 -14 -16 -84 21 -27 -15 -16 67 -35 48 60 50 -2 -12 -38 -33 15 68 -43 43 -32 -34 -24 25 -30 0 -51 3 30 -2 43 6 54 22 -44 -56 42 -36 -63 11 -30 14 -39 -33 -28 -44 35 21 -39 5 -28 -65 25 26 50 -76 -1 -19 -1 1 57 24 -30 -15 -3 61 51 -17 50 33 37 -33 -44 2 47 -22 33 -23 -10 -22 -70 -24 114 -20 59 -39 1 -53 20 39 55 66 -108 -56 69 -96 -95 -116 53 55 15 -13 54 -42 0 56 29 -47 -52 -72 46 103 -126 115 84 -12 19 -123 2 -98 -84 28 36 -97 -17 -22 95 -60 37 -45 -14 -35 -42 -11 -59 -96 16 42 -3 78 -17 24 -124 -124 25 -113 -127 -61 85 -32 -66 -79 -54 -38 -68 10 20 -32 -4 -59 -101 53 97 -127 -15 -34 -112 -67 -79 -32 -41 -93 -117 -52 -64 61 -102 -19 -7 1 13 113 -15 -30 -12 29 68 -28 101 71 -47 24 -60 -76 -70 62 -45 21 -12 -2 -34 101 30 -120 -65 -4 32 123 -118 40 -47 42 -75 -43 -19 19 5 3 36 -76 25 0 -80 56 11 -47 -3 -54 117 103 1 -11 -57 -58 8 -21 -15 0 53 36 12 -61 -128 27 11 4 -42 -101 -62 -37 4 70 26 2 82 2 70 18 -36 21 18 -97 28 -69 -13 64 20 -19 -24 -9 -8 -7 -5 2 -8 12 17 -64 -73 -45 -32 -40 48 -59 31 -115 -78 -40 -39 -59 -3 -56 25 31 -42 -51 42 -81 -31 115 78 35 -126 -5 -72 -125 51 -104 52 -78 42 30 38 -70 48 -47 -50 -71 127 -60 -61 -45 -82 11 75 -23 -22 -47 19 -124 -1 -81 47 20 5 15 8 -59 -128 -23 -100 -23 -6 21 -34 -24 11 62 12 36 55 -23 127 -9 37 -26 -42 1 69 -86 58 -52 69 123 -54 11 64 -86 -92 -104 25 -47 -63 102 69 -56 109 39 -19 -119 38 -5 -38 -40 60 -127 -119 -22 51 -25 -59 71 57 24 -48 76 127 -51 -27 19 -10 -2 -121 -110 -92 -77 -71 50 115 37 12 44 9 23 80 45 25 -3 -80 -52 42 -63 -89 35 -58 -54 -39 -65 -126 56 -118 60 98 -70 15 119 -107 68 68 -77 15 96 -9 -89 28 7 111 -14 31 -10 73 -3 95 -77 37 24 19 -126 -24 -18 -35 -22 32 -11 26 85 -1 -58 11 40 -71 11 16 43 -11 55 18 41 -54 -37 8 -39 -99 -13 23 -114 23 -28 55 -31 -24 -8 64 -41 5 63 -5 6 -50 -64 13 25 -74 23 6 -75 56 110 -29 8 -12 27 -39 20 117 32 127 3 68 -83 25 44 45 -28 2 -13 14 0 -38 0 51 12 85 -38 6 5 -8 24 32 68 -48 -21 -27 7 8 87 38 10 30 2 -20 -37 9 -52 51 33 59 27 -19 -99 98 -99 -92 -3 4 40 75 19 30 55 7 -44 -27 -46 15 -93 -114 31 -24 -98 1 -49 -82 86 -49 72 -8 8 69 49 -27 4 -35 89 -49 89 62 -12 3 27 -45 126 -33 19 122 -92 -2 106 15 31 -34 64 -21 -56 -51 -5 -25 127 -36 66 -68 -58 -9 125 -50 -73 6 -7 116 53 127 21 14 49 30 16 33 -111 6 -16 -14 89 115 18 73 -64 -78 29 72 126 -75 94 44 -57 105 66 26 -33 -36 -27 -110 42 -69 -74 -23 93 -6 54 -67 -36 43 14 -76 26 -39 88 103 65 -6 -36 -25 -2 37 15 124 40 -38 1 109 125 -60 79 -23 90 123 -32 -117 -128 4 -111 21 0 34 42 -118 -118 -12 -47 22 33 -19 15 65 64 -22 -90 85 -109 77 -127 -10 124 -76 -123 126 -19 -21 117 -128 -116 -14 51 75 -88 108 127 -63 91 -86 39 -87 -118 0 -45 34 119 -83 -52 117 22 46 16 -49 41 37 -66 -52 -128 1 -58 4 -87 55 27 -27 -35 -99 42 -2 65 51 20 104 69 53 114 44 51 97 -9 -39 14 -4 125 -32 126 -36 43 127 -6 9 -71 93 -36 36 6 109 13 34 -16 -21 65 110 -22 25 -7 115 -71 40 6 121 -15 60 108 78 -105 -59 -35 76 13 -33 -3 86 -80 -12 -27 23 78 -65 -48 43 -128 -67 -123 89 -35 -15 97 18 52 -122 26 -127 -8 -21 49 -127 -27 -127 -17 -11 41 -123 -54 -36 -38 -1 -55 12 -21 7 24 -4 -18 16 12 -54 127 40 -13 50 -14 41 73 -82 -107 58 9 -54 44 81 -66 9 -63 -30 -40 -98 -9 -8 -29 39 -36 -84 -7 25 22 7 60 -22 25 -7 51 2 21 118 -49 26 -88 127 -81 -15 -16 3 -97 -98 23 -73 -72 -78 65 -102 62 10 10 -18 -7 14 -128 -54 -123 -125 104 31 114 75 -45 -25 -3 -22 32 -5 -11 96 -68 -38 7 -70 -72 74 -116 -13 -32 -14 -14 94 67 -34 -124 76 -13 -73 5 5 64 -61 100 1 -67 -22 42 40 50 -83 -4 32 35 127 -25 -40 -85 -53 11 -72 5 -80 10 -50 83 31 30 -2 21 -15 -47 95 17 -122 20 -31 -39 -55 15 111 21 23 -65 29 -80 -127 -94 -2 -6 60 -24 -89 -50 -76 54 19 -9 5 -45 47 -32 64 58 -121 -59 -103 13 18 -47 -59 -75 83 8 -120 127 -9 -40 -74 70 -2 3 -123 13 42 -1 -9 -11 13 7 -34 -75 10 -13 -14 -122 35 48 -10 62 90 69 2 5 -31 14 30 -53 -59 -5 50 -47 -19 -18 109 -86 52 94 18 -40 69 -9 -31 -107 -34 18 2 -23 -52 -111 -121 9 45 7 -61 -50 -72 -52 8 -91 -37 -95 11 58 -25 3 -20 64 -1 65 47 114 56 -29 -40 -2 -38 -71 22 51 63 -125 3 -61 0 29 -63 105 -85 13 -3 41 -35 34 -35 -37 108 -36 26 28 47 -39 62 -46 47 81 18 37 10 -89 41 108 -54 11 27 44 9 -78 -3 -21 -124 35 48 -57 -83 -36 3 6 23 -73 47 26 -8 -59 60 -21 64 -47 -102 -8 9 -71 52 27 -110 -127 -46 75 -32 -44 55 -61 -48 -105 -42 41 -126 -60 40 41 35 -68 -90 -21 -99 54 -38 -4 51 4 41 20 20 -38 -105 -52 -44 11 -9 -11 77 -94 29 -121 -12 -6 4 47 -71 82 22 89 -4 21 38 -15 54 -127 24 -47 20 89 113 -34 93 91 -14 59 -1 7 35 37 40 86 50 45 -87 0 76 -73 29 -4 21 59 -63 54 38 -55 28 -24 -75 -17 43 36 49 -37 -27 63 55 71 114 -65 -49 9 50 25 -24 116 -4 2 -49 -93 83 -127 66 -92 -64 -71 -11 79 0 90 -24 96 25 -80 56 35 -64 14 -58 106 -123 -55 -34 127 -101 23 -56 81 -45 -9 -70 26 -73 -13 41 -70 -32 -116 32 -42 -57 -3 -38 -38 35 -55 -127 -26 -87 -15 22 59 -47 -1 11 -63 -8 -26 -78 10 -22 24 57 54 -66 -18 17 66 57 -67 39 102 15 -124 -8 -35 -46 43 -10 13 -44 103 -51 77 57 17 125 59 123 86 6 55 64 117 92 -108 18 15 -107 -78 -73 -9 17 -121 72 -124 -31 -56 105 122 -11 -109 -18 84 54 78 -49 127 -3 54 13 10 -63 -82 -17 29 23 126 -36 2 12 -51 19 -66 9 31 57 -82 -49 111 -4 11 -23 57 77 -109 49 9 76 -72 -49 25 -50 27 45 -60 53 -75 -10 10 -50 32 34 -12 85 -11 -40 -61 51 57 82 -26 15 52 92 18 -3 90 -28 47 -19 -66 100 27 0 9 -49 17 1 -4 7 42 26 90 -82 3 44 -3 60 126 83 -31 -77 12 9 -55 79 -47 -11 -21 -40 115 59 1 -36 20 -103 -21 32 125 47 40 1 -91 15 -125 -92 13 -19 -15 51 65 -5 126 89 -9 -38 54 -109 -38 -79 -5 60 -17 38 -71 -87 -4 -97 114 -20 -50 -83 34 68 -59 -42 -54 -66 45 41 -115 -68 -117 -90 -36 14 -126 -54 2 44 -23 -82 11 -5 -7 -51 116 51 -68 -41 -114 -117 87 -59 20 -47 -60 -127 122 10 119 -29 -11 -106 -10 -127 -119 119 -32 17 -91 11 -97 -52 -68 -66 4 79 -60 83 -114 -8 -41 -21 -59 -12 -19 -24 -63 -17 -90 23 19 -26 -4 -124 9 -29 73 -9 -41 -52 1 -69 3 -50 -31 -71 -73 -38 34 -126 32 54 26 -127 41 -10 -128 -83 -51 -45 44 58 -1 20 60 26 75 62 -25 -88 -74 5 13 105 75 -85 -59 101 -72 -27 67 -19 20 -128 -3 -56 -64 -17 -61 102 81 -91 29 14 -20 14 -128 0 11 -41 47 -127 -92 -24 -4 -65 -4 114 -39 -55 -128 33 81 -108 -97 -102 78 54 61 -34 96 -6 -118 29 11 21 18 53 23 -53 -52 -14 -22 -1 -29 -21 -28 67 58 66 24 22 -42 18 -31 44 -25 -98 -54 -1 -30 47 0 -29 -19 -9 29 -12 -39 18 88 -35 -22 39 76 -47 -15 0 -25 19 84 18 7 64 -99 -9 -40 90 35 16 25 -43 88 82 68 -78 -3 7 98 -49 49 -60 -7 123 12 105 23 62 -59 26 -17 -29 36 113 52 68 -62 47 -29 -4 47 -113 -29 48 -18 -15 -29 12 -37 -3 -51 20 -69 60 -81 -39 15 37 -70 44 86 3 -12 20 45 -86 -66 -34 -12 -1 28 4 -12 33 35 -121 -5 -45 -35 -19 -1 -36 -5 62 -44 75 16 -29 0 -76 -119 -76 -16 -70 17 -40 31 127 28 -18 -33 58 124 -2 40 -40 50 51 -25 0 -98 -110 42 -24 106 -48 -48 -21 -28 49 -80 -40 15 -47 -89 -52 18 95 -20 4 -11 20 21 123 -71 -70 -47 31 13 -109 -8 -47 -128 -68 -6 -38 -4 -39 -63 -6 -37 25 23 -31 -16 -30 -7 -18 48 -5 -118 -38 -39 -44 3 -72 -21 -27 -2 64 74 2 67 -68 -19 -5 0 8 6 -19 36 96 4 -14 -56 59 94 -55 -6 -41 41 -122 -88 -7 -80 89 -75 93 -11 -88 41 -77 -84 -104 -1 -89 52 7 13 49 -11 -5 17 9 -81 -72 89 26 -29 -47 117 -21 -38 60 -52 -3 -16 -36 9 -38 -4 3 95 23 93 -80 -8 -47 -6 -101 -54 29 -32 9 -16 56 38 -17 3 -56 -31 -3 39 -35 -9 -30 -2 46 21 33 57 23 34 -6 5 23 -10 -25 8 -16 -93 11 -70 -85 40 -20 -5 6 -16 -21 48 -8 -27 0 -53 42 -64 -126 28 53 34 -27 -32 42 70 -3 39 -4 -16 2 -77 72 -43 -7 103 8 -35 38 -29 20 2 17 -31 -2 62 87 43 41 27 -6 -31 -29 -12 36 -26 -65 55 -63 77 23 95 17 -36 -31 -3 -9 -61 89 -55 -12 61 51 -88 35 2 -31 -125 -50 43 -125 -26 76 69 126 -79 -78 20 123 -31 -65 57 78 -22 -4 118 -38 2 -55 55 8 39 -18 23 58 -4 127 -112 -47 72 -30 -49 8 50 43 7 -23 127 61 -21 91 83 23 -62 125 32 52 -56 40 85 59 87 15 -105 44 -38 -78 3 -45 -42 29 94 -101 70 15 -55 -36 -38 14 26 79 25 55 -55 3 88 85 30 -8 41 89 21 -9 -112 -28 -6 -25 -56 -20 -58 -67 -18 -45 86 67 -11 -1 -28 41 -49 -16 -70 87 21 2 -13 9 56 -23 18 65 -23 -20 -48 -29 -40 -44 -1 15 12 -7 2 -10 -43 7 -65 -80 -23 -8 -10 -65 -42 -18 74 112 -13 29 -9 -28 -13 25 4 30 -45 -4 38 25 65 16 -34 -26 41 1 11 41 -41 59 45 2 27 101 85 -30 51 1 6 -26 75 46 -25 -22 -12 -55 51 1 74 27 44 27 21 29 68 -18 -128 73 13 -16 -44 -79 19 60 -98 79 87 -68 -34 127 -84 -84 16 -74 -44 37 -66 10 -16 -2 127 -64 41 68 14 -122 23 32 -26 34 -45 11 60 19 -116 111 48 -16 -32 80 4 52 -68 -12 20 77 26 21 -110 -19 -88 127 -38 37 -108 -33 118 -91 -93 -21 -66 18 -1 28 59 11 118 -3 50 -47 10 63 -73 0 -38 -19 2 -62 54 21 -34 127 23 -29 -44 16 5 38 21 38 -80 38 -26 -125 80 -11 -40 8 28 -45 57 66 -58 38 -13 -29 10 62 88 53 -7 33 -64 -11 127 -96 -15 41 -57 -12 -1 -54 80 50 6 -55 16 72 63 -45 83 79 -61 -45 26 -6 59 10 86 118 -8 25 -120 -55 62 -34 6 22 -11 62 19 -81 20 -11 93 -9 14 86 49 41 41 1 21 -38 34 60 85 -76 -16 -24 75 -33 -45 -27 62 35 -20 59 -13 12 85 97 58 -14 -35 -6 -59 49 -121 -37 37 -47 -12 -47 -52 26 0 -85 -44 24 5 26 39 -84 105 1 -11 111 -70 -113 -16 21 -35 13 2 23 0 52 -35 -4 -31 -27 -14 -40 -31 -22 -46 26 88 83 -77 -1 26 -38 49 -21 -29 33 -7 63 116 44 54 53 86 -19 3 -7 -26 76 -90 18 33 -6 -103 -91 5 7 53 -31 -10 75 48 -61 25 37 36 20 42 58 -5 15 -37 -14 17 -88 -41 -11 126 4 18 -26 -69 37 -33 9 55 31 53 -13 27 6 27 -28 -92 -24 42 69 39 -17 2 -27 -30 24 30 4 -44 -51 -63 -9 59 -30 80 34 50 7 -56 9 95 -28 -17 -59 -4 -61 21 -124 -76 110 -4 -36 56 26 -23 19 -10 -75 -28 5 -37 51 51 28 11 17 -43 41 14 -60 35 4 -20 72 25 -98 -12 -20 49 61 63 -40 -11 -88 28 -50 98 -29 12 23 -44 36 69 21 -8 16 -6 16 -23 -47 -64 9 69 36 -26 -89 -10 14 49 -23 -61 54 -53 -37 -37 -64 -18 -11 -114 -125 -4 -3 -15 -127 57 -58 41 -86 -24 -60 -33 -88 60 -65 -63 48 57 -51 -10 36 -124 32 8 -16 -71 25 26 -13 104 -50 7 -121 14 122 44 -97 50 -13 -7 -56 -110 -127 -66 -66 -73 -9 33 63 69 -119 58 -32 -72 13 -93 30 75 -29 85 -123 12 -103 -33 43 2 69 8 -7 -63 32 -14 -125 25 -97 27 25 50 -39 -39 -55 6 70 70 11 42 -71 34 5 124 20 -51 25 40 17 12 38 -68 22 -21 107 -110 -56 58 -109 78 -75 23 123 34 7 11 -54 43 -50 89 57 18 -5 119 3 -66 47 101 69 -85 -124 43 -124 81 37 -13 72 -16 49 -49 -56 -60 16 54 123 15 -23 7 21 1 21 103 -42 64 57 -48 41 -41 27 -65 40 -37 -76 30 47 -103 -30 -38 -2 -35 60 1 24 125 -59 4 -58 -127 20 -61 123 -43 97 3 67 101 12 -95 -116 -13 42 -81 -3 -8 -113 -127 -128 66 -33 72 -63 -42 53 68 81 90 -116 43 -13 93 125 37 -12 82 -39 -68 16 85 -113 41 11 -112 51 -103 -64 99 59 -14 -24 -11 91 -43 127 21 -32 49 -28 127 -5 -30 30 12 -85 -18 60 24 37 -86 74 -67 -123 -127 57 7 -33 61 58 39 -111 26 -15 -65 -13 -38 -127 38 -21 38 58 62 -65 -56 33 -33 -88 65 -77 -35 19 -50 -4 -47 -62 -5 -21 -108 -120 41 39 -128 -1 48 -60 -90 -52 38 -53 -110 -32 84 -30 -15 -65 -85 -5 4 -89 -86 13 32 -49 -29 -71 -57 -121 17 35 -12 -14 5 -36 -13 122 -127 -41 51 -14 -68 -5 -121 37 -21 -78 -79 -120 -48 6 -70 -36 -15 -54 -53 -76 66 -27 11 -127 -96 -116 -12 64 -45 121 -51 -30 18 117 20 -44 26 -15 -128 20 17 -38 -60 -54 -90 -116 -26 -70 15 -41 30 37 51 -15 112 56 -32 1 -124 31 -50 75 69 11 79 28 125 -33 -29 -15 73 -55 -76 48 -43 -29 21 21 32 -83 -29 70 29 -100 -83 32 -48 45 11 -33 -64 2 7 18 62 53 2 -13 94 -126 -42 -9 -4 -72 -4 51 -56 -18 10 84 17 97 -87 -125 -66 -55 117 -40 -52 -38 -51 -61 -121 23 65 34 15 13 -48 -34 -35 -51 -66 -72 43 -5 28 -26 74 -81 22 63 -46 -45 68 -29 -20 -26 84 -14 42 -31 -44 -59 43 -21 37 -124 -1 2 -52 63 -72 35 67 -51 -67 16 -96 31 46 123 84 10 -72 64 37 23 1 18 64 -6 -62 35 -19 8 18 -73 -14 -53 45 -68 13 -65 14 -15 24 -60 121 -34 59 -22 10 9 -73 53 -56 61 122 3 -36 28 73 39 -33 62 1 -51 -78 20 8 -49 -8 59 127 23 14 -65 86 -61 -44 -73 26 -81 37 -98 31 19 29 -44 1 124 28 -126 -18 -17 13 -20 -76 -7 -5 67 -106 -10 40 -14 -26 -1 -30 56 -17 -35 -47 110 -18 40 -27 9 -107 -102 -51 -48 7 125 18 -70 -31 53 -79 44 -109 -57 32 -29 -88 -77 33 -100 -71 -92 27 39 101 -16 -102 -4 -37 -14 -126 33 127 -60 29 -81 -47 -39 17 -61 105 43 -7 -30 -77 -116 -48 -74 -74 -83 -7 -103 29 -68 -92 -56 77 50 16 -105 24 -25 65 10 -1 20 -68 110 -42 -42 -80 42 36 16 48 67 -116 -26 -15 6 98 -28 17 15 37 -122 -16 -100 17 96 -121 -11 -66 39 -112 115 -39 -88 -68 -68 -119 -45 84 98 9 -53 -102 30 98 4 5 24 7 91 -114 69 85 -70 46 108 53 -30 -62 15 -73 -18 33 -29 2 -125 -19 -97 64 120 -107 106 30 17 16 -41 59 39 -61 111 -30 15 -53 19 4 -33 119 -3 -77 -22 -122 110 21 58 109 -58 38 -5 46 -19 56 27 -19 66 -90 -125 -114 21 -66 33 53 85 -3 50 27 -13 -48 -47 -114 -34 114 -125 36 93 -89 86 19 -91 -74 119 -64 -22 85 -5 31 -126 -22 -35 86 3 84 -9 -53 86 1 -23 -7 -70 -14 -125 53 64 -40 -10 -21 -62 127 -38 110 -52 -15 -35 -32 9 23 11 -18 9 91 69 -66 -37 -21 -26 -4 37 28 3 38 -81 -1 5 28 47 -20 -84 53 2 73 115 -34 -24 -63 -15 13 -82 -28 -15 -82 -12 -4 14 38 -57 -24 108 82 -6 -51 -5 -115 21 35 55 22 -66 38 -73 0 111 53 8 -111 -36 -56 -44 -105 13 -16 -15 -28 -2 -46 -73 -38 -57 -71 -5 -103 -122 14 17 -26 46 -34 35 32 -14 66 -66 -44 5 -17 -87 36 0 -6 -14 89 14 -82 -128 42 47 64 124 -63 -25 13 -58 -71 -24 -22 -71 -46 32 -17 -25 1 4 10 -33 -98 -100 -39 -60 93 -49 48 -27 -15 70 -23 28 -50 10 13 -41 -23 -8 -9 -5 16 9 -24 31 15 -75 89 83 -124 -14 -37 -2 -53 58 98 -21 2 61 -38 13 -54 39 -28 31 55 7 -9 -5 46 65 3 -1 14 -50 -24 28 -38 -15 15 -77 126 -23 -62 9 -29 19 17 -31 49 74 4 4 42 -23 -80 22 -31 76 -121 9 0 23 7 29 108 40 -9 23 95 55 27 11 -1 -12 -24 -78 4 24 12 -3 8 30 -2 -10 37 115 119 39 31 -44 -45 -35 -6 118 -85 -65 24 57 34 -4 127 99 -42 -33 -82 -95 100 -93 -44 88 12 42 34 -54 5 -52 19 55 -84 18 4 75 50 4 -28 -101 -14 74 10 76 7 -79 52 -23 -88 125 125 70 -61 -14 -8 -54 115 -78 39 -78 -28 14 71 48 43 -44 -116 76 39 63 -77 122 -27 -12 -122 85 -118 50 -31 -51 -40 77 -33 -33 -125 -16 -49 126 -62 -11 -100 31 -84 -109 -41 38 -108 -105 7 33 -58 -51 -40 -48 -93 -105 -33 -45 30 -9 12 -126 -112 -24 5 76 11 74 57 8 36 51 4 -43 -47 -15 -68 -122 52 -87 76 80 -112 -17 73 -59 -7 -109 -48 38 -4 -26 8 -41 54 -8 -33 -11 -30 15 -51 18 5 40 21 54 -69 70 -39 -77 -9 -47 -56 40 -128 8 79 -23 64 -4 -62 -124 17 13 -23 -54 68 33 -11 -110 57 110 -28 -33 68 51 -52 -126 -75 12 -41 0 27 -10 -16 -16 -10 -22 -42 -56 -63 22 -52 -15 -19 15 -37 -49 46 29 23 -15 0 -49 31 54 3 63 -68 -44 -15 23 -72 -3 12 1 -18 -25 127 -98 23 -70 -61 3 57 96 3 -91 106 27 -41 -116 -59 127 -9 -3 21 3 12 -12 -25 -35 -72 -70 53 -38 38 -33 -38 -24 -79 -3 1 -28 -70 2 60 -100 -34 -10 39 -32 -103 -18 123 -13 -36 -40 3 -25 -45 46 -93 2 36 -107 5 10 61 -15 26 -49 -31 -48 -36 45 18 -41 -98 44 31 1 -7 -58 -16 103 -15 13 -71 41 -56 -28 96 54 0 17 -69 7 47 14 -79 -3 -18 -37 -128 -61 17 12 29 -37 48 -34 42 18 84 26 -73 13 -27 86 -30 40 61 52 29 27 -44 28 -62 -8 82 35 -48 -57 22 -67 8 -53 16 -73 -50 -71 20 48 -14 44 -90 67 41 -49 -21 19 13 -46 -69 59 34 -54 -6 -7 -68 0 28 -48 122 1 22 31 -11 69 -23 27 127 -19 -38 -125 -30 61 -19 -21 -39 5 -47 -73 -82 69 67 31 103 -2 59 -70 62 -11 64 21 -4 52 -127 53 -14 -19 124 -19 89 -127 44 -34 23 -20 -47 -41 75 77 -27 8 79 35 82 98 -14 -43 36 86 17 121 -124 -51 16 -76 69 2 -6 127 -3 -3 45 98 -127 20 15 -51 -68 45 -17 4 21 66 56 40 103 -8 -4 20 10 -24 68 73 79 -88 59 28 -18 119 27 -11 -48 22 4 44 -87 -29 -32 -37 -51 4 -1 28 -21 -62 32 -34 -9 -57 -20 55 8 -63 72 -49 68 -10 72 71 -35 19 -30 -49 35 -84 3 2 -22 -33 -110 -99 11 37 11 -16 -82 -73 -22 92 -10 88 30 -24 -2 8 -71 -56 31 49 -125 0 99 -60 9 0 -56 4 -8 -15 52 27 16 13 -20 54 15 3 -54 29 -2 28 -50 -18 22 6 -38 26 48 30 25 -33 -19 35 106 -3 21 60 -18 7 -25 38 -20 -43 24 5 -2 -15 33 -28 36 -12 53 -11 -65 -26 -122 -20 32 -21 -40 -73 20 -20 -64 -54 -69 43 23 -62 -69 58 -69 38 34 -59 -16 56 8 -36 42 -38 16 -38 40 25 -19 -25 -107 98 -53 -4 -6 -128 -63 103 21 44 17 -101 -50 27 63 -18 58 -43 104 -1 18 -1 37 -85 0 -16 26 13 28 30 -74 -62 -126 -35 19 -38 41 8 24 37 -21 59 -39 -112 -13 68 75 30 -22 -61 -81 -21 36 21 26 -115 59 95 -11 -49 65 6 -2 -123 63 -19 -87 -44 -126 32 -82 -99 -92 -73 127 -2 -117 31 -115 -73 75 -68 -50 -6 -110 63 -24 -21 -53 -71 -10 -11 -33 -57 -24 58 -30 94 -21 67 -74 89 -46 -40 -29 -42 -18 -32 -44 -51 -62 4 -76 44 -10 -60 13 18 -125 -58 46 4 13 -16 -38 -47 -28 -27 -39 -81 -51 -43 -41 -68 -82 33 82 -83 20 1 23 -8 -66 -72 73 -19 11 53 -101 -105 -24 74 26 7 96 -48 -24 39 -44 -47 9 -1 -121 -89 49 -84 41 -1 -11 55 3 -57 8 -92 46 -12 -64 -25 -123 -5 -70 -126 26 -49 -91 -30 4 -43 -24 -32 36 57 -84 -42 -24 -36 71 3 23 -6 -99 9 -17 77 76 -87 7 87 -7 -35 -31 -59 -59 -66 51 32 63 29 19 -4 -95 -128 97 -5 109 -24 -33 38 -61 0 -92 21 4 -123 87 -63 -64 99 27 -2 48 4 33 55 10 -122 -100 7 12 -50 -32 109 43 -33 -39 -55 91 44 17 -61 75 -33 9 -15 -76 -35 -15 34 58 8 -18 -10 -40 54 -73 -75 -54 61 99 -45 -107 38 73 40 31 -57 82 75 11 14 -78 60 -3 -72 -80 51 76 30 32 -13 -37 -71 14 115 -38 -31 -32 42 0 61 -38 -30 -29 -6 81 -38 49 26 -68 -50 -28 20 -31 60 -10 -61 39 -122 -62 -23 -66 41 -63 -72 11 -41 31 7 81 -38 24 -84 21 -56 121 25 -61 34 -26 -62 106 121 -37 -78 -26 -18 88 -70 -58 -47 124 16 51 -2 17 118 23 -19 -113 -128 -68 -44 98 -63 -117 -109 15 -63 -59 -116 -16 -44 -21 95 52 3 -123 60 -99 78 -67 -125 98 34 107 -7 -38 -25 125 113 56 93 25 -35 60 -37 15 19 26 20 -19 20 88 -13 31 1 17 64 65 85 80 121 99 26 -47 34 -101 29 -5 -89 -126 26 -83 101 34 53 60 -89 -125 -92 -11 -57 -15 -100 65 127 -112 -7 13 -18 49 -15 28 -108 -96 -75 123 -43 -32 4 -43 -87 -31 14 -121 -112 -56 47 -17 -70 -39 -5 -3 83 -80 113 88 85 -32 8 -123 -67 -3 -9 35 103 -55 -128 -32 59 86 -115 -90 38 -125 84 123 65 -55 -58 -59 49 -82 -87 -64 54 80 -60 59 -63 -76 -52 -28 30 100 -10 37 -116 -80 68 -14 58 -4 51 -128 -45 -43 115 -23 -70 34 44 41 -82 8 -85 5 -94 -75 -38 40 38 115 40 7 -34 -71 21 -126 -124 55 66 -123 -16 -8 32 18 -27 50 -70 102 -22 18 104 -20 -46 11 25 39 57 44 126 -21 67 -24 79 97 -44 -86 7 -86 -71 13 -122 -21 -117 -107 -16 82 124 63 -38 -1 16 0 100 95 -12 -65 3 8 -29 -3 122 -85 30 -69 125 17 78 35 -2 -10 -104 40 67 127 17 -14 7 103 7 19 113 -1 -62 -4 88 -9 -30 30 103 92 -29 82 -15 -92 25 70 -107 -33 57 -8 2 77 -16 -12 -32 -27 19 -56 13 14 -46 -15 127 52 -37 86 68 126 55 -6 1 -71 -38 -16 59 -61 -5 63 11 -20 -11 -15 1 -56 6 6 4 120 120 36 -4 -43 -111 68 107 -82 14 98 17 83 45 19 -125 -5 -22 2 91 -21 20 18 -48 53 27 30 66 -36 92 -45 52 -6 -42 -86 -108 -1 -5 -19 61 -53 -26 77 49 -25 -67 -39 -52 -16 -52 13 18 -17 -2 3 -23 65 15 -6 -23 6 -68 5 34 20 20 34 25 -4 -4 -80 -92 67 -7 -46 67 -29 -7 -88 3 -65 103 -27 -80 104 43 -54 -25 -18 -2 -33 40 18 26 25 17 33 -125 -29 -42 38 7 -54 -17 36 32 -19 -11 31 -32 38 -24 49 7 -14 -29 13 10 -6 37 14 82 -106 -8 67 7 -30 -79 65 -28 25 -27 -37 65 -56 -52 -18 -18 -22 -100 -16 -60 -55 48 50 79 33 124 60 44 65 -58 -65 -81 -51 70 66 22 10 37 24 -68 -85 -3 17 58 -1 8 -41 -50 6 -99 66 69 -36 -39 45 12 3 -127 72 -27 -3 -2 -87 22 72 108 -84 77 -1 9 10 17 46 -26 18 -68 -11 -28 -6 -14 -38 -61 32 -17 -19 15 -88 28 -49 -14 23 18 83 -59 2 47 42 -97 -57 -58 76 -50 7 32 126 -28 -3 -14 122 91 -1 -23 39 1 101 -61 42 123 39 -2 -24 -4 -2 4 29 -11 -8 -1 -22 54 51 -19 34 127 24 51 37 -56 73 13 68 94 29 37 50 20 86 43 5 96 -20 -49 -15 18 -24 10 74 -24 -23 0 -46 -31 -85 55 50 36 53 92 126 -55 20 64 -17 75 16 45 -28 -15 60 -29 -13 16 -84 -61 69 -31 31 -2 55 22 -28 43 67 69 -55 76 -38 14 -21 18 -49 -28 30 10 5 37 8 -19 -11 -29 -32 24 -25 -5 33 25 -4 9 -23 -24 -11 -45 10 0 -23 -22 16 -12 -74 64 -6 -26 87 5 42 46 -53 18 15 -2 -2 92 26 6 14 4 13 -5 27 68 -59 -27 22 -34 -21 43 -54 50 -10 2 68 -5 -4 -1 -7 -31 73 20 -21 -15 -27 -7 -47 12 55 42 -33 -14 46 -8 23 13 58 -39 -33 42 -95 -4 -8 56 9 21 29 21 40 21 12 33 12 -15 -15 -39 1 -43 21 34 13 -47 59 -29 -15 36 -22 -26 14 -76 3 19 -24 125 15 -13 -17 33 -10 64 33 16 25 -37 15 40 48 -9 61 14 -46 64 2 -18 74 -21 30 17 5 43 25 -3 8 -30 127 -44 -10 -24 -29 30 -16 -9 28 -4 6 74 3 11 -72 -30 -18 -6 -46 38 -18 60 6 -38 94 37 31 -31 -59 -10 16 -20 63 -18 9 27 -30 -33 -49 41 -21 76 -45 15 -24 -70 -53 -107 -42 -33 12 -40 19 -18 -78 41 25 -90 45 -38 105 -74 -89 64 -75 -29 -67 -115 -40 81 -60 41 68 -18 -5 -79 -8 16 -74 50 38 -56 -125 6 -78 -16 -50 11 -126 -50 -60 -27 49 -68 -63 48 -1 60 15 33 42 26 -61 -18 -52 3 -61 -33 -18 -103 86 -47 -81 -55 64 18 -29 -22 -7 -113 69 -6 47 11 -19 -102 33 -8 54 27 -84 27 -4 -86 -46 -92 109 26 -123 32 -97 -76 48 -32 13 -20 -126 -2 -21 -126 -107 -11 10 47 -113 9 46 42 -65 -57 54 126 -11 -111 -33 31 -48 -51 -11 18 -12 41 -25 71 43 -81 60 28 -101 -25 -93 16 96 97 -57 -13 2 -105 66 10 27 66 30 53 105 65 -47 31 -53 44 -41 12 6 102 -51 -25 -89 -41 10 -118 6 126 -40 -56 -49 -39 -4 -32 -16 -75 38 80 -28 23 57 -128 -3 -9 -99 -40 -75 -27 -12 25 -21 36 71 15 -4 -63 26 -102 -25 -36 -97 96 75 -32 45 -6 60 -8 8 102 -3 8 -19 -1 -90 -17 86 -56 116 89 -74 -42 37 -4 -24 -36 32 72 -2 60 127 83 -24 46 15 88 4 48 -101 -20 96 -9 114 42 -64 18 -87 -24 -6 -32 48 38 -124 -15 42 6 -51 -66 27 -127 92 34 47 -68 40 -54 -22 -117 33 -86 36 3 -41 42 -11 -6 -35 72 48 -128 18 96 27 -15 92 43 65 -27 123 24 43 58 -11 -57 -30 48 17 10 61 46 40 -1 -7 37 -23 2 18 -29 13 -13 59 72 98 -19 33 91 39 22 38 -66 22 26 32 36 -3 43 99 -11 44 23 55 76 45 58 24 29 31 1 -28 -9 -10 -40 -27 20 -28 29 7 -11 96 127 54 -60 28 14 -49 36 14 25 -26 52 65 6 33 31 -117 39 -9 62 92 -23 63 40 64 42 0 76 -38 64 -29 -2 19 42 0 -43 32 -3 47 17 22 -29 9 -21 -6 13 -12 52 31 38 -23 47 8 -6 87 -24 -24 39 18 0 43 -10 -88 38 -25 -11 44 89 -2 10 -17 -23 59 -9 4 -28 -12 -13 21 26 -6 -17 20 30 -49 -36 -37 -6 23 18 -66 -6 -14 -21 -14 16 16 -15 18 -3 -22 -32 75 -2 -37 22 -60 -16 65 -27 -68 -21 -62 5 -41 8 11 -63 -2 8 27 61 41 20 -2 76 -13 -116 2 25 37 -120 7 -22 69 -31 -26 -4 102 -46 -1 49 20 46 38 -14 -51 33 46 -38 15 -46 -3 37 -25 -17 -50 78 -86 127 109 -21 82 -105 76 19 21 32 127 1 67 54 -96 63 7 -1 40 -20 -8 -17 -9 9 -45 -35 39 18 -8 -61 -1 -35 -19 -20 4 50 -13 43 23 -77 -2 6 15 -60 8 -10 -15 -17 16 88 -24 35 61 -13 27 73 -5 -42 81 21 59 -92 -48 -4 -23 60 -16 -6 62 38 -25 12 -82 -50 43 -56 -44 -61 -13 20 36 0 -55 -45 -38 -13 122 80 -7 16 96 65 27 24 -3 -27 21 21 -84 -2 25 -36 -37 -33 79 91 37 -10 93 34 1 11 23 26 -24 -4 71 33 5 -54 121 -25 -9 -9 -9 16 2 -15 7 66 92 42 -34 -38 4 6 28 108 0 -30 -45 68 -19 47 8 111 -16 2 31 117 36 60 -52 -49 63 51 -59 16 -7 73 -60 16 -32 1 -71 -15 0 67 54 -15 97 34 -35 58 15 13 -7 -15 76 16 -29 15 -113 -36 85 -61 127 58 91 -15 -27 33 46 -46 120 -50 -101 -45 87 18 -29 29 40 -29 20 26 -54 -16 23 5 31 26 31 48 -45 -4 -91 85 -23 82 68 -11 42 110 33 -50 -14 51 -18 33 -9 -82 -63 -41 24 75 82 57 51 -22 23 122 73 -52 21 60 49 -14 39 85 -46 2 8 -60 53 -120 -47 61 56 -11 -56 -41 58 -111 -67 4 95 -45 102 114 -30 45 101 -95 -103 -32 -48 -44 -27 -127 -80 123 86 35 -65 -3 34 19 19 -44 51 -6 38 -106 -18 -10 41 -48 64 -84 11 44 11 -118 43 88 -116 -13 -92 2 -124 -14 32 -94 51 6 16 -94 -30 87 -6 -47 53 -36 -109 37 86 25 70 -15 -5 127 -28 -100 -40 86 43 18 51 -75 23 -9 -56 26 -23 -43 21 -58 26 -69 29 22 124 -92 100 -29 -25 56 60 14 11 105 61 -1 61 120 -7 87 16 19 -7 -32 22 68 9 1 61 126 -123 1 72 53 85 36 64 50 33 53 14 124 31 -40 -11 75 -54 -6 62 -7 -38 -7 79 -53 116 97 -31 17 -2 55 105 50 61 4 82 -32 -22 -54 -23 74 39 108 126 -46 -41 127 91 10 109 29 48 2 35 -35 8 119 -97 -34 -14 116 48 80 117 -21 91 16 50 43 39 110 -41 50 -6 -30 -25 -80 23 -29 -95 53 11 -111 -31 -51 17 -10 -75 -13 58 -37 -85 -66 54 -19 27 82 10 123 13 51 54 -11 31 -18 89 -34 16 96 42 16 -10 -43 -15 46 43 52 -12 -35 -1 39 88 75 -15 -25 -27 30 -67 75 60 -98 40 19 127 14 -124 -52 28 -14 -44 113 -84 31 47 -11 70 36 42 -51 35 59 16 13 -14 0 3 -17 -4 51 10 53 -33 36 61 97 47 -51 7 19 -59 33 -38 -52 -24 -64 -42 31 -10 85 -70 20 18 69 21 44 -61 33 -5 -18 -12 -34 119 19 -39 -50 -26 -30 -9 21 -15 -5 -37 -54 -5 -98 -34 -7 9 3 -89 -12 89 -48 126 -33 -92 -20 19 109 67 63 -95 42 -118 -46 -60 12 -48 71 16 -33 5 0 -13 -85 -23 6 -43 -107 -29 7 44 101 -7 109 -107 11 3 -64 -80 21 -44 -63 -64 38 44 25 32 -86 39 -1 30 -89 -88 -50 -29 -60 72 -4 45 31 75 71 -38 10 -48 -40 -88 -127 -52 116 -99 -122 -26 27 -34 -126 -42 -39 -8 -5 -7 -62 27 17 27 -32 -124 109 -74 -125 15 -33 -126 67 -75 97 -46 -54 9 116 21 60 7 -44 57 -31 37 -122 49 61 28 -36 -127 -28 -17 -82 122 98 -5 35 86 -85 49 -11 -78 117 -126 -24 12 -15 21 15 36 27 -78 -82 54 80 -54 -91 -42 -1 24 -67 -69 34 -14 34 -73 -22 -24 51 -9 0 43 -28 -15 -20 27 -72 9 -110 -17 124 2 -124 -124 -19 -43 -41 -16 0 3 -53 -54 7 28 -19 22 94 -30 6 1 40 -79 -87 -10 -73 119 -40 -13 24 -35 -59 36 -70 -70 42 -72 0 -72 -51 -52 -28 3 -126 47 -115 -80 50 -8 -127 7 93 25 -56 -127 -97 59 9 -80 4 58 -4 -128 44 14 44 -55 37 14 26 6 76 4 60 -30 -52 -26 62 -33 29 -89 94 -46 -62 -16 6 71 -11 42 112 19 -31 65 -14 -57 -59 27 -66 28 -1 49 -10 85 -53 -112 -125 -72 -25 27 -28 8 13 53 9 34 32 -11 -58 -64 -47 1 -13 127 -5 -6 44 -19 -82 -127 64 1 80 41 -46 -8 -17 -20 55 49 70 -86 2 48 17 -56 -12 35 110 -44 43 -11 -43 -47 -43 75 -31 -127 54 60 -74 124 -42 25 8 -20 -71 -8 10 38 -66 23 -15 -127 19 1 -58 -20 24 -33 44 100 -22 23 -59 -101 -26 -122 -63 -4 52 45 10 -126 22 -95 -12 6 14 50 -22 -122 -27 -12 -23 26 13 56 -87 -15 57 5 20 76 43 122 28 -80 79 -107 -124 -28 58 -11 50 -78 -37 -28 -51 -48 -31 28 -79 -67 -32 -53 84 65 -5 -60 -120 83 -41 -40 -9 -89 -35 -81 19 64 -98 67 -11 -9 1 16 -73 -54 -81 -3 -90 10 -10 -26 -124 46 -52 -64 -118 -7 -7 -44 -10 -7 -21 -34 28 9 -87 -72 83 18 -41 53 17 59 23 76 15 16 -39 4 0 -6 4 -41 8 2 17 -82 -8 73 -16 36 -15 -47 -38 11 -34 -34 -7 7 -15 15 -5 -36 0 -125 4 40 12 24 -16 46 9 12 39 4 99 -62 53 -10 1 20 32 27 -65 -50 -26 32 -64 4 -45 -24 -11 -123 73 2 10 11 78 -25 65 -47 -25 76 -23 -126 42 20 3 28 8 -124 -8 69 104 -32 -35 43 -27 -91 34 -12 0 -43 -18 -26 -50 -55 31 39 91 -60 20 -43 48 31 57 -11 -11 -21 41 -93 114 -23 -64 -26 -37 92 -42 -67 65 -6 -60 -50 -15 -17 5 -47 25 -102 -5 15 -44 -79 -28 21 -26 -12 84 53 35 14 23 -13 -19 -15 -28 -69 -32 -25 -20 -11 23 112 12 35 37 -64 23 -5 24 -15 -11 53 -13 -12 63 -63 28 3 63 -39 -66 -81 66 -51 -17 13 45 26 -52 -19 40 13 7 -9 29 65 24 -116 79 16 -6 -82 62 -9 -56 72 -99 -75 23 -29 -107 -40 6 -28 14 46 37 -55 -64 16 14 21 -71 -29 -119 94 -102 -63 10 -34 41 -21 -39 -40 87 -84 -37 -19 36 124 90 49 -123 32 79 -18 114 37 -23 -39 -32 -5 -54 -22 38 -106 -102 7 -24 27 48 -91 88 -117 -35 -7 86 -75 79 124 13 31 54 42 52 62 -94 4 99 38 32 -13 -42 -93 24 -88 -54 -41 -48 59 -29 22 68 -84 20 -72 21 78 -2 22 -37 9 44 -32 -125 -56 41 17 23 55 35 40 -39 -58 23 75 18 9 18 -25 -28 -5 -36 -35 -25 7 77 -103 16 -48 -85 0 -25 20 67 8 -14 -88 23 -23 -78 -38 -74 111 -19 63 -54 -18 9 8 -33 37 46 -49 -11 -79 -89 9 11 39 47 -35 -32 30 -17 11 15 -66 -11 -27 -15 -43 6 -51 13 -10 -30 26 -43 -5 83 -124 -108 19 -64 -101 -63 -17 52 10 -120 -32 6 -125 31 -5 27 -38 -7 -96 -30 -55 1 7 25 -53 32 3 74 -95 -90 -66 -89 3 98 37 0 -2 84 30 115 5 -17 -67 -19 -86 127 -126 4 12 -117 71 31 -44 66 81 -31 -126 -43 124 -22 -33 9 -111 -1 -121 -23 -25 28 -39 47 22 -27 -46 31 -66 46 -7 42 -12 93 -8 -69 -53 -42 -25 45 -101 -53 41 -64 125 84 36 24 -63 -19 13 6 127 33 -33 9 -31 -34 -74 -3 1 -49 -50 -37 -26 23 16 -31 -123 -63 -19 -39 -68 -54 48 -55 21 -10 37 17 -28 25 -56 -27 -17 -28 6 -4 36 -113 -45 -7 -57 -41 -4 -42 -5 -110 25 21 -71 51 27 -25 -38 -86 -45 38 -25 -24 -68 3 -10 -7 8 -111 34 -1 -7 97 -116 -48 -69 24 -36 -41 37 -83 -2 -22 3 -18 -1 -113 16 -126 19 -16 -49 -107 -25 19 -15 -71 35 -69 -41 -46 0 -52 -69 26 -36 -73 3 9 -97 -8 -8 -58 3 5 110 -36 1 -69 -38 -60 53 -49 34 -9 12 41 -58 -10 22 10 -30 -7 -31 -37 -7 -29 0 11 -35 -20 127 -51 -82 9 -62 -77 -1 65 -66 -24 -32 -38 -56 53 -20 63 4 95 -19 71 -20 4 -1 10 38 80 38 -90 -62 -19 32 22 -80 89 -10 2 4 31 41 -59 -41 -102 16 -84 48 -11 126 68 28 -36 -54 -64 -47 2 -70 -49 5 -59 18 -42 -3 -44 -34 -11 -21 -14 -10 7 -1 -10 -26 36 31 60 51 30 62 43 106 13 -5 -52 66 -2 -15 0 27 -5 53 -13 90 -60 -120 13 -75 21 29 -40 -6 1 -15 20 -49 16 66 1 -26 101 -9 60 11 -28 -17 31 81 -6 -71 11 38 77 -11 54 47 -40 -25 -13 -16 -44 -16 8 21 1 22 -38 14 -35 -2 -89 -40 -16 -39 48 11 -13 -28 -30 -15 98 29 35 25 26 37 -15 34 -3 -3 -127 -22 28 -81 33 -69 -92 58 11 -128 26 12 -23 -46 -15 -72 -125 120 -99 -17 -75 -40 -113 -28 50 -3 88 -47 -89 23 74 -102 -14 15 -126 -9 -66 -72 -89 11 113 -76 -6 71 48 -64 53 47 -45 60 -37 -69 -38 -39 44 12 22 -127 6 -62 90 97 -110 58 -16 -124 3 -10 123 -63 10 -10 -26 33 39 35 -21 5 -108 -47 -93 -5 -36 54 37 56 -126 -29 38 29 -17 23 -33 -85 12 -21 -29 -26 13 -34 32 -5 -2 -31 17 42 -79 -34 15 49 -79 47 -32 -89 -19 -12 -68 36 -32 -26 -46 51 -29 -93 -97 78 -45 27 100 -24 60 -13 34 19 65 18 -38 -11 83 102 41 24 -36 -19 -67 68 -26 -38 -48 -2 -86 24 -35 -29 -66 5 -41 16 42 -28 49 -27 -1 -36 -8 -35 59 -68 -11 40 -41 6 -14 -21 -12 -15 -7 -72 80 74 -33 -49 -42 -19 -39 50 -12 -29 -8 -59 21 19 -1 -98 -23 -6 7 38 79 63 4 -60 -48 17 69 52 65 101 67 -8 -6 -9 44 97 -8 -56 -73 25 -29 30 66 41 27 -127 -51 -91 9 34 16 -4 -113 -120 21 -17 -43 -19 45 10 0 -39 91 -34 3 2 -59 32 76 65 107 -67 -2 2 -23 101 66 52 54 -10 -5 30 -28 21 85 123 -96 5 124 -31 -82 -25 87 -60 47 -17 -49 11 -22 20 4 46 31 -67 109 -28 -58 18 -27 73 -34 -32 14 -17 -7 -16 36 -10 10 -96 21 -3 76 -106 -7 67 33 8 -61 69 -96 -3 -12 25 -24 -81 -123 -106 17 -61 82 41 -33 5 30 -47 -35 -92 -57 55 -41 -107 -29 -93 80 -50 22 -126 36 26 -57 -8 -39 48 55 -33 22 -29 20 25 -3 38 28 -47 22 18 66 -41 4 52 50 -69 -115 2 84 -112 27 39 -115 35 -42 -20 60 -19 -67 -84 -72 29 -57 -1 -64 89 -47 -28 -92 117 -17 22 -43 73 76 76 -27 -103 25 -11 45 -34 92 23 28 -15 48 16 -9 60 125 110 10 38 -6 -26 105 29 -123 -17 -1 8 48 -28 99 -126 66 124 56 32 33 24 -25 -127 80 -56 23 58 -40 -84 -127 -2 2 -27 -30 -35 -108 16 -48 -3 -11 -127 125 6 -49 -18 -83 94 -59 41 48 70 -42 1 72 -5 73 -55 84 33 113 -116 -45 -25 -69 -56 58 127 53 42 23 1 55 49 46 2 -116 23 40 4 5 -29 51 -128 60 52 -47 -126 27 84 -4 -25 -11 80 24 23 46 -65 14 12 -53 -65 -19 -18 -24 30 125 -13 6 22 -7 -6 -23 -66 4 -44 101 -111 -53 -32 8 22 86 -44 -23 -27 -3 88 -33 72 53 -30 90 10 -56 43 20 -106 24 -25 -7 -10 -25 -93 -18 25 -69 -39 10 -20 -30 7 58 70 -56 -66 -60 -79 -30 48 46 30 51 -95 4 -42 -30 -11 -22 -54 32 -3 -8 23 -110 83 -28 109 76 49 -71 -11 72 2 -73 10 38 -9 -95 -64 -94 114 -119 -31 -125 48 -62 -24 -22 62 21 45 6 -42 10 124 -127 127 53 -126 43 26 -10 -31 3 -72 22 -15 7 -5 115 85 26 24 -112 66 9 -29 13 -80 112 -30 17 54 -97 0 127 34 -16 -14 122 -8 127 -128 42 -2 67 89 15 56 -94 -82 -68 60 26 11 -41 -20 -21 59 16 -25 29 -56 55 -127 -16 -98 5 2 -21 -32 -94 43 -38 -5 -75 -57 1 -39 40 55 1 14 127 -91 125 -91 73 -33 19 -62 19 51 64 64 83 -9 75 2 -35 92 41 -67 -13 36 -52 75 11 -51 -54 70 126 4 -80 62 -68 47 -16 51 -14 13 69 27 -33 -59 24 -12 -11 59 -60 -11 17 -16 -33 -6 11 56 -11 97 54 -25 22 53 32 -125 45 -39 126 -33 -15 124 -13 42 80 -19 -33 127 64 66 18 -18 69 18 54 -49 -36 51 106 74 -58 -31 -33 26 22 25 -46 29 35 -58 -10 -83 -123 -18 -92 -32 84 4 109 49 14 55 -24 -36 20 45 1 97 -117 -47 47 64 -97 27 -36 -46 66 -64 40 56 1 28 47 -37 -42 8 25 -64 -22 30 -2 28 2 -46 45 -32 -8 -34 48 -41 39 6 9 -94 -47 -119 127 -9 -128 60 53 -20 29 35 -9 -57 43 -42 34 50 30 49 58 84 30 -77 -38 116 124 63 -93 -5 69 50 95 20 -19 -85 -43 -71 31 11 66 22 -9 126 19 42 88 71 -2 21 5 40 36 9 -40 -10 7 88 105 29 105 98 73 127 -70 -82 49 -2 127 62 82 0 -62 106 113 58 -29 104 94 48 38 20 62 22 22 66 53 -105 116 36 -28 123 93 -42 111 31 5 126 118 49 43 96 25 3 -50 118 38 59 69 87 111 -17 -47 -6 66 124 -85 62 -25 55 66 -66 -59 -53 -29 -108 98 -58 44 40 90 69 105 21 -55 11 124 127 -60 98 19 -2 98 -126 -104 -1 24 58 -68 -17 53 80 112 -75 -30 33 45 -127 -21 -52 -58 40 64 -8 47 52 7 27 101 28 -58 19 13 78 -13 -122 81 -44 -109 34 -32 -27 42 -55 31 -46 -19 41 -51 -12 -29 75 -42 -89 -81 -128 53 -7 3 59 -101 -52 44 -65 51 -67 -51 34 41 27 -58 -95 33 47 87 86 -49 34 -3 53 -15 -53 26 39 -37 36 -1 47 -25 4 -14 120 -46 -77 77 34 73 -31 -2 -18 7 18 2 62 87 39 -6 15 75 -124 29 55 -41 72 -22 -128 40 21 -70 39 -15 18 69 -39 -49 94 12 45 -62 -88 -104 -7 93 -118 2 75 6 106 -23 -85 17 58 -18 82 -60 -54 14 -5 -4 -9 -128 -56 5 8 78 63 -35 16 -53 75 116 -105 88 25 -83 14 12 90 -87 31 -68 8 16 -30 -101 -32 123 126 -3 -21 11 -11 -84 9 -4 -1 81 -74 -43 -59 -52 -3 18 -12 -43 -20 -34 62 10 19 -7 -114 -96 -35 -77 -14 95 49 -91 120 45 -125 38 52 -5 93 20 -4 24 -55 93 -124 -58 -16 -48 -79 -89 -76 -47 -18 -22 -60 3 16 -124 65 -32 -29 100 45 -47 57 -23 50 -27 -16 -31 -82 8 37 -24 2 114 -49 -100 -51 -19 24 -88 47 -27 20 -125 -68 40 7 -2 32 28 -63 -15 -61 -19 63 -37 41 53 26 32 -7 -51 12 20 -28 11 -9 44 20 -17 34 115 -55 25 -27 52 -22 -70 14 -68 -42 -118 -105 -8 4 30 7 20 81 38 -97 -62 -12 60 -5 32 47 -72 -99 30 17 -1 65 127 70 21 -16 -8 6 22 -14 -9 64 -11 63 -68 -12 17 1 66 -73 1 -88 -1 -40 78 21 -29 -27 5 83 -31 -41 -87 87 17 40 -17 5 117 -43 -22 -4 31 15 -30 14 29 -11 -31 9 1 26 35 -55 12 -41 42 11 24 -39 20 -20 3 -76 8 -32 -69 0 8 -22 4 -17 30 8 -36 15 -11 -26 15 -11 -11 65 -71 -25 30 11 30 -20 -14 -15 70 -55 -30 73 -22 -37 77 -7 66 -29 -49 19 -20 68 -61 21 0 -53 103 92 -71 16 -18 -19 122 -9 0 -66 52 -15 -62 -28 40 -29 62 54 -7 86 41 -47 7 51 -6 26 127 43 62 -68 20 -46 52 1 111 -44 -43 65 24 74 126 47 8 -54 94 -116 53 12 -122 55 23 4 -55 -8 53 -76 -124 5 -125 -48 -80 3 53 4 49 -32 -32 -113 -37 -100 -123 78 -16 -124 47 -54 38 -23 23 -66 56 38 -4 69 -18 -10 106 16 16 122 -55 49 -23 -50 -116 -63 8 61 97 35 98 11 -10 -10 -90 -31 124 -38 127 -42 -25 -52 42 -49 -78 87 -71 -19 126 -89 -35 -51 60 -111 1 84 9 9 81 34 82 -17 -11 121 86 13 -32 38 52 -61 -97 48 -87 3 89 90 18 127 5 -108 54 -17 -62 23 -65 111 -122 39 110 -113 75 -20 124 42 -113 76 -23 62 -39 -7 116 52 73 51 -4 27 31 -96 -59 -20 -89 109 62 -23 88 -80 -27 -29 20 15 21 -123 -16 -28 -5 83 91 -14 -1 -19 -23 90 -95 -81 37 -10 51 17 -3 -1 12 9 17 22 -75 9 -34 -106 98 109 -105 -5 -39 -20 67 -104 -13 5 29 40 80 127 57 122 -127 -50 -5 109 -73 75 -25 127 90 -5 -122 -7 -127 -16 19 -55 118 32 78 77 -127 39 104 -79 63 82 -57 97 -127 10 121 114 -114 64 -28 48 -2 47 -31 35 17 -38 -122 -59 32 -39 91 -53 -59 33 -62 104 -65 -48 127 64 -32 -68 83 -57 127 -44 19 -97 -17 -38 116 57 -82 76 66 31 70 60 76 6 33 -80 -45 23 -61 60 57 34 -37 72 49 77 -42 -66 13 9 -69 7 107 -11 -41 34 -123 11 127 6 86 -20 30 31 41 -45 -127 125 -45 127 34 -11 -38 -128 -3 3 124 -125 -49 105 -26 -59 51 69 60 51 -38 0 -48 -74 69 -92 -24 30 70 -94 127 15 43 -99 50 -85 60 -61 63 -15 -22 102 67 29 96 -78 -108 51 57 -55 -55 21 -25 83 -8 -12 1 -23 120 16 -64 -20 80 -95 63 63 -26 -72 -35 58 122 32 -27 5 -28 112 81 47 -39 17 -105 27 7 -25 62 -81 7 -39 26 -84 -82 -17 6 27 -124 -60 -9 117 -50 111 -10 -77 49 33 -19 12 -70 50 -9 7 82 -54 67 30 -35 32 -97 51 62 4 1 22 36 55 -49 -40 -29 34 17 30 -128 15 -8 -62 83 59 23 -29 -34 64 57 0 2 -46 120 25 -34 15 -55 79 -66 30 -66 -67 54 19 17 -11 63 -70 -11 -95 13 -33 72 57 -63 -6 64 -65 116 -29 -37 -57 -31 -4 -47 24 50 -31 15 -80 103 -11 -17 -101 104 46 -5 -7 -80 59 114 -2 14 -19 49 123 -114 -54 -2 2 -116 -9 87 -3 52 6 108 4 -7 -5 59 -78 32 -7 -114 127 41 -122 17 49 -20 70 -27 64 -20 -25 96 -128 38 -125 86 65 -83 -31 24 78 -41 23 -77 -99 -88 96 -38 80 21 1 27 -120 -59 -7 -7 -118 -8 42 -15 -20 71 87 36 -73 72 51 -53 61 -29 53 -27 -102 16 126 -11 18 -53 126 33 -15 -17 -60 -104 -99 -58 -54 99 -67 -28 -20 125 -107 -25 71 41 -19 66 29 -27 119 44 124 -100 -96 56 -30 29 -94 39 73 81 -48 95 -63 99 -94 125 16 39 57 -32 -3 -40 -96 -28 71 -19 50 120 -96 -122 -7 107 123 75 59 127 126 -53 127 122 30 54 13 26 -127 -86 99 50 -40 41 -64 -26 118 62 -30 25 -37 41 126 -44 -1 39 -14 17 -27 -85 -77 -2 -32 20 125 55 -23 -17 -7 -66 -33 -71 -57 -21 -127 -70 -116 -35 52 -62 69 67 -19 -15 -125 69 63 -48 33 -96 92 79 -15 69 -69 39 -20 -18 100 -56 -6 -9 -101 28 35 -127 -123 89 -88 26 -84 -83 22 64 90 7 -66 -102 -46 15 -87 -52 -127 78 99 -67 -97 -79 -4 20 21 55 10 7 -83 3 -52 -72 -34 -66 50 52 -13 -29 -34 -1 -10 4 127 -47 3 38 9 118 -40 -69 -83 -127 -16 71 -31 20 24 -41 41 0 -88 -25 24 60 -86 54 123 121 127 55 4 29 42 -63 81 -44 -106 -58 -54 -81 72 -84 -104 29 13 60 13 -67 110 35 -38 87 61 -92 -16 100 23 85 65 7 32 123 37 51 -11 69 -128 127 11 87 41 -56 -35 -123 -17 -39 6 -58 60 -12 125 121 29 -70 28 -60 -59 -40 26 -28 65 16 -17 -9 105 -21 -13 0 93 -42 -54 -51 -1 -49 45 83 35 -124 54 1 -30 49 -38 -29 -1 51 -64 19 81 6 34 24 -3 80 -66 -26 -7 -66 33 -63 45 48 21 25 -63 48 -50 -16 -113 43 4 -125 2 -38 -38 -26 17 103 45 -13 -47 -108 3 -24 37 32 -22 104 -22 -22 -52 -54 29 91 11 -72 -128 -105 54 21 -21 116 85 15 -17 79 -104 -55 -16 -36 61 5 -19 112 105 80 -44 -23 -6 -62 -33 69 43 -23 -8 -58 71 26 -43 17 -21 -106 -54 -50 10 14 17 21 8 95 -9 -49 -3 72 -29 94 70 8 126 -34 12 89 -2 -1 61 72 56 -25 19 124 -49 30 -27 51 4 -45 -52 35 46 36 -22 -55 -15 125 41 -42 82 -13 23 -98 -60 -83 18 41 25 -18 -33 -126 34 -22 -19 32 -36 24 -51 108 -29 38 44 -93 -38 3 17 -25 -93 -15 8 0 29 3 -68 -24 -36 -34 -14 -19 46 -42 -15 71 -40 -42 -37 81 -32 -22 59 34 -12 -90 -53 -23 127 -26 0 -47 -109 50 -55 -72 -48 -43 125 55 -12 33 -62 -53 -40 -28 -16 5 33 10 -12 47 43 23 -46 -92 30 70 56 -60 -49 47 -27 14 -29 -102 -69 61 17 -72 -54 21 28 54 -96 -17 -97 3 -71 -61 48 -49 -23 -126 27 126 32 -97 9 -4 -57 95 64 68 -5 -27 39 9 7 -10 -46 122 61 71 60 45 -81 -128 42 -21 71 -9 82 3 79 35 48 -19 -126 -4 -33 -41 23 48 67 63 28 28 30 -21 -65 -80 117 -28 -42 21 79 45 10 51 49 58 76 20 58 53 120 64 127 33 -40 15 -7 -7 -66 -63 70 -50 69 38 54 85 122 -39 2 -25 -73 54 42 0 39 86 -108 72 53 -57 -45 57 -93 28 -24 -17 28 -8 -94 107 63 -43 -84 48 -82 124 51 58 -35 10 112 42 -28 123 17 121 18 81 -52 125 -40 -16 25 16 110 5 -3 79 35 41 -119 15 87 29 -16 73 32 -56 91 35 49 -35 -73 127 45 -118 1 -99 115 89 -127 -55 -125 50 55 -30 -10 -20 17 22 82 -24 0 31 -2 -120 91 -7 -74 7 -62 -123 -79 87 32 -24 -21 32 48 9 45 91 65 -59 36 -64 -70 26 -119 64 -127 124 127 25 -74 22 94 -102 25 -49 24 51 -41 -54 -12 -100 68 28 -76 -79 -128 -8 62 -37 47 -42 -1 -26 -88 65 7 -103 30 19 -15 29 127 -39 21 78 -52 57 -35 56 -11 -44 -28 47 75 -53 -70 42 39 -9 -64 22 127 -68 66 57 -56 124 -65 -46 87 20 -54 1 122 -23 21 -69 127 -71 81 -64 -23 -26 -109 39 -17 11 124 -69 -24 -83 105 15 15 -42 -27 -30 19 -7 105 -22 -63 15 -127 47 89 84 -37 15 51 22 -36 11 -40 -76 -70 42 -24 -53 40 89 110 127 15 38 -102 19 -9 -17 93 13 50 92 -62 -62 13 71 25 20 -122 -27 39 -62 -112 14 -60 -41 102 -24 1 18 11 32 -17 48 19 39 -76 -18 -40 40 -42 -1 36 68 30 -10 13 -55 -22 21 63 -16 61 114 59 126 2 -22 -11 -8 85 -13 22 -117 10 -12 -66 -23 1 29 -34 63 106 56 9 69 27 81 -23 24 -51 9 42 41 -28 -42 120 90 -37 113 34 -87 17 72 32 -34 62 -77 50 47 71 -16 60 -48 21 -14 -22 84 -2 105 20 -43 -17 -6 99 2 -16 91 -29 72 -45 34 69 24 24 7 -102 -11 -69 43 117 -39 14 -12 -102 -63 53 54 76 7 -2 12 61 -71 51 3 -30 -26 -31 27 -94 15 15 -4 15 -6 22 -113 -50 68 -73 31 -45 -1 52 121 -12 7 96 -61 28 24 6 102 -99 2 119 94 48 -45 -20 -67 -88 54 -104 78 -56 18 -14 97 -59 -84 10 78 -54 -17 50 55 27 -13 46 47 -76 18 -35 -123 31 -50 -127 -65 65 38 29 90 12 -61 -2 109 -83 -22 -24 41 -118 -99 116 60 45 0 -56 123 -45 71 42 -81 95 37 -32 -89 2 -72 -77 -33 -34 70 2 10 -3 119 -21 44 -10 -76 -126 9 -79 -47 -6 -5 -62 -62 -72 -15 -50 -4 -124 -76 -65 -11 -8 -81 -32 16 -49 84 6 -128 1 111 54 -63 61 104 58 -6 46 -11 -59 -65 -54 -77 18 -20 -77 57 53 -51 -20 39 71 17 103 18 10 -34 9 43 62 -55 75 74 40 70 -21 46 -13 32 19 84 30 93 -20 11 -2 -7 -4 -34 -6 56 -18 26 -10 89 -17 109 -21 83 -19 -4 52 -108 -9 -56 4 9 3 56 -83 -15 32 126 59 41 31 55 22 57 92 50 109 16 63 -18 34 -46 75 -57 -23 92 1 126 126 -35 127 -42 19 -62 46 -35 59 122 -1 50 -42 32 -44 -95 -47 58 -38 16 61 70 60 8 55 28 39 52 -7 0 -20 -23 -52 -1 13 72 -58 -48 38 -90 27 -23 6 78 122 -29 45 35 -51 71 -36 -12 -36 73 63 5 52 16 -44 5 -95 63 49 -83 40 24 42 95 3 19 27 75 19 -56 105 92 -104 -66 -13 -19 -23 24 -124 16 -13 -37 38 -15 47 24 -16 54 -27 -11 -82 35 -17 52 -12 -36 44 -37 -58 -2 -33 -89 43 -11 66 -24 45 60 -15 -31 -53 14 -121 31 -25 -14 62 35 -10 5 -19 70 16 -38 -19 -7 16 -3 5 -112 29 42 27 -57 -32 -30 63 -25 12 1 -26 -63 -19 -14 22 -31 72 -20 48 -33 81 -13 -74 -14 115 -83 48 -30 51 60 34 -24 35 -14 67 17 23 2 -92 12 31 -89 32 -86 -95 -14 47 -64 -24 64 71 -40 16 127 29 6 -41 81 65 81 27 -102 10 -89 -31 55 80 -11 -1 -10 58 39 63 12 -5 -56 -91 -38 88 -60 2 -10 95 -89 15 -1 -31 88 37 50 45 44 -85 -62 6 -70 10 -55 -50 -68 -27 -52 -64 -102 2 -16 -29 52 -4 -8 -5 -3 -13 19 -21 18 -109 -15 -127 72 51 -50 -61 40 2 126 93 -114 -47 -61 -33 50 87 14 -48 -71 27 -3 34 -63 -21 23 -101 86 -31 55 33 18 57 125 -121 -19 -15 -63 -108 3 102 21 20 -3 40 86 6 -97 61 12 6 19 72 7 76 -127 21 57 9 -57 -38 51 -1 -117 44 -76 2 91 9 -8 -33 15 -24 -53 -13 -65 39 66 4 30 25 -123 -46 39 -84 -62 57 -114 51 -73 -62 -58 -13 -67 -61 -40 -72 -71 19 -27 11 -33 -18 -16 98 -82 -21 10 79 -25 0 -14 28 -11 108 -42 -24 53 5 115 99 16 -36 126 -40 -4 48 -81 47 -19 42 -17 105 14 -23 101 -44 120 -10 -7 -29 126 100 -32 -63 -66 -5 9 14 69 15 -54 76 19 -30 -43 -29 2 87 -49 39 -16 52 12 -25 8 44 -22 -17 62 13 -40 19 -2 52 37 -12 8 -41 -55 40 59 6 82 75 30 90 46 -59 -51 -49 103 -118 -51 34 53 -55 -75 59 71 -120 -85 28 4 -22 61 5 5 -5 -18 24 -81 46 -1 122 39 40 35 -120 -41 54 -49 16 126 -10 -26 -27 38 -66 -14 -73 -39 -27 21 17 -66 -51 -128 -26 27 59 -95 -79 -127 38 -67 -49 -57 -69 -111 39 44 8 39 -41 25 67 -19 20 90 120 21 -31 -47 16 100 -29 65 85 50 62 -39 54 117 -128 57 60 31 27 -85 -8 -61 -50 95 5 -61 -59 -55 65 23 55 -10 -20 88 -67 -11 -64 47 4 -36 86 -20 -118 -38 -27 27 39 -66 69 33 -94 -47 5 78 -4 39 -29 -71 -29 79 60 43 -5 -45 1 -85 122 23 -94 23 39 -51 25 -28 64 29 -106 5 49 14 122 -66 -57 2 48 -120 0 -120 -36 -13 -11 -100 30 -61 18 -124 4 52 -58 96 0 -33 69 -54 109 -6 -116 81 -86 -78 -8 8 -94 55 -50 -89 40 -80 24 -34 -97 2 -52 2 54 -6 29 -29 -64 126 60 -82 -67 28 126 -56 123 95 59 -115 -4 26 17 60 -29 14 -61 -127 45 -43 34 -13 45 -18 66 -6 -35 -96 -94 82 51 -45 -52 -32 88 -102 -42 -24 -50 -68 55 15 -64 113 17 127 61 41 -108 -47 20 -29 92 -67 126 8 -60 -82 78 49 33 -24 22 22 45 43 -22 48 121 -33 0 37 73 -30 38 48 49 37 41 -9 51 10 -35 34 -102 -16 25 -23 5 2 -31 -48 57 30 36 6 -48 5 84 -12 -36 -45 -57 83 17 -123 -18 63 -42 12 37 -73 27 21 126 -45 16 87 -67 3 6 -63 85 25 -60 52 -15 -56 127 -1 -103 -100 93 44 -7 -55 -30 -46 49 -59 6 -46 -16 44 51 -76 67 -29 -42 -128 -77 23 -118 -32 -26 -1 85 99 37 -52 127 -75 126 -17 106 120 -19 126 -128 36 2 -51 49 106 -45 29 -65 69 -47 -39 121 -78 -35 66 62 109 123 -2 -108 15 -121 -16 -119 -62 -120 -54 -56 31 72 120 26 24 -67 6 102 86 39 -31 2 117 -68 -8 80 -87 46 37 -91 -67 -76 81 65 127 51 127 126 -128 87 -67 -75 29 -52 -114 -34 -4 44 72 -45 -105 -89 -9 -30 124 -124 17 64 17 63 -50 16 65 -127 97 -86 33 -65 104 119 -60 -53 48 0 6 35 -122 16 -100 -76 126 52 -9 74 -1 -102 106 52 -55 48 58 3 28 44 -12 -2 112 40 120 26 80 -62 -16 127 122 -125 -8 69 23 -25 2 81 51 16 6 -26 -30 62 73 1 63 -10 -30 98 26 -51 70 32 -90 69 69 49 125 -7 -53 126 71 93 -44 -59 4 -62 -114 17 5 -116 -45 27 51 -32 66 -124 97 -37 -100 102 -46 4 -40 -99 41 -13 -82 45 -35 49 -127 79 91 -41 -19 58 40 -123 -88 48 9 35 23 55 102 121 17 -30 39 44 2 87 -17 87 -68 64 -20 9 25 -24 29 -68 -118 -43 -88 41 -78 -117 -14 127 -128 95 48 -38 124 85 102 -31 6 -9 -3 52 60 -124 60 -38 23 94 -27 91 -42 -10 -30 -64 -9 -61 -26 -63 -66 -5 125 3 -55 29 -60 -75 -21 -93 20 -16 -13 35 -58 -63 -13 -100 -120 -28 -52 -10 -3 -65 -22 46 81 -14 -38 0 -119 -43 13 -24 -123 49 -67 -68 -89 -18 -121 38 120 -85 88 27 -44 15 12 -116 -71 14 -105 58 51 55 11 20 56 126 -1 42 9 -30 -27 28 -13 -31 44 114 124 -126 -56 -14 -29 49 91 -63 1 12 -58 -51 -58 11 33 33 -18 56 -82 -39 -100 -119 31 -126 -80 -23 64 -66 95 -8 -120 -43 -11 -16 23 -48 3 -3 -64 67 -1 17 -59 -83 -10 88 77 -125 -7 37 32 -50 -82 -30 21 -30 -25 -47 -87 1 56 4 119 -58 -128 17 -124 -12 90 -30 -10 21 29 -91 -75 23 -7 6 14 -74 -47 -123 -48 -75 -126 -39 -27 -33 2 27 -9 -103 -127 10 74 45 38 32 -65 86 -116 26 -18 -30 -38 53 56 -126 90 -89 34 87 71 40 4 4 -109 -53 -37 30 -93 -38 -29 -7 -70 -21 44 8 -23 -35 -17 -128 -3 42 -17 51 -72 -12 22 44 4 -123 -92 -12 -107 7 44 124 127 21 -103 31 -73 -43 -28 -4 -127 -34 33 30 -127 -3 -7 4 58 -48 36 121 -57 -128 7 -128 -12 18 54 124 36 -86 29 50 -26 31 51 -61 -34 96 -117 -4 -94 62 -66 101 -95 121 9 -101 -32 26 -22 127 32 49 -94 68 -85 8 72 -106 74 53 -28 -34 -23 14 -50 -64 -10 -92 19 1 -23 -38 -70 7 -19 -27 87 -11 20 -71 -64 -33 -3 54 -42 46 20 85 50 -52 44 -36 1 5 99 -45 -51 -73 56 -48 -26 118 30 18 -64 4 14 -114 -7 45 -4 -2 -55 -17 17 11 -12 -7 -24 -98 -14 -51 -70 83 20 56 53 53 -94 33 34 -32 -58 -2 -61 -87 6 -13 127 -90 48 -29 58 -26 -66 39 59 -11 -69 -16 54 61 124 41 127 -84 -84 36 -126 67 -11 -59 -58 46 -11 -12 12 3 61 -25 45 60 78 -4 -30 -52 -72 -76 24 49 -48 -27 45 -104 32 41 -54 9 -96 -37 55 41 38 64 -65 23 -38 -25 105 -65 36 -13 -23 -15 -52 -128 -29 92 -18 73 -6 -63 -3 -32 9 -39 -3 -81 -126 29 -48 -54 49 89 14 -120 18 3 -14 -8 -8 -67 12 -21 41 3 22 -79 20 -115 -6 127 51 53 -11 -35 17 -32 27 -93 -17 -77 -8 33 4 4 -110 29 -28 -89 88 56 -56 42 -87 -34 -8 77 -51 51 -58 13 13 64 12 -6 -86 -28 -46 32 -17 41 55 48 -28 -59 3 127 -46 -70 68 123 6 -43 54 33 89 -117 98 -80 -104 0 -30 -41 -44 -60 12 -88 -31 14 -67 -30 -41 -3 -90 49 48 -1 12 -33 70 69 -13 5 127 14 -16 -128 -126 -66 43 9 0 8 -28 105 -52 45 24 50 33 -108 11 -127 -122 68 -46 -127 115 -45 20 20 -110 -87 -5 90 54 11 6 -17 4 39 18 9 -22 -57 -71 75 127 23 65 0 -91 -126 19 -28 -36 25 108 -48 124 19 -47 78 -23 108 -40 -3 86 -56 -67 -126 2 -81 -114 40 -54 -128 -95 12 51 103 -127 122 -104 -59 -12 78 -34 -30 -67 -8 -126 -119 -40 -82 -113 122 64 -124 115 -5 -15 -49 -18 1 105 -32 39 -68 -96 8 23 6 -48 26 -38 29 -61 -125 -24 -88 -100 15 -13 80 124 -22 -19 -91 -56 -58 73 -61 -19 80 30 56 -22 -109 3 -15 40 61 41 -26 -63 -25 37 50 18 60 34 -111 76 -65 108 4 2 -6 6 1 2 30 -123 71 -73 -6 -53 39 -3 124 32 7 -9 40 -12 -68 -42 -86 -19 5 -15 -44 21 33 103 27 28 -73 58 -79 -59 43 -71 76 39 33 -19 -46 56 6 14 0 -61 23 21 44 -6 3 -96 1 -55 23 60 -50 -5 -92 -4 33 -1 75 36 -74 -69 -21 -45 -36 -1 -93 -21 -125 -19 -22 -15 2 92 14 -27 -20 29 -54 -8 33 -55 -21 74 32 -29 4 29 20 78 37 -33 4 86 16 78 67 -9 46 -45 -9 29 -55 -28 67 16 -24 80 41 17 43 -11 2 -22 -15 127 127 -75 23 102 -19 40 37 -80 -2 -79 -58 -38 24 -116 -52 -19 -19 -23 -63 78 82 68 -64 -8 -1 -48 89 43 57 11 23 36 61 28 29 1 79 72 22 -34 14 37 -36 8 -80 -58 -60 -24 -33 -49 117 -8 -56 -98 12 -23 27 -4 6 -106 -16 35 92 -57 44 28 -120 -19 27 19 15 -46 -127 -25 -37 -60 -109 -89 -73 -14 65 25 -124 -19 -37 -50 54 9 2 -8 87 -15 -32 33 -71 41 -19 -90 -83 -19 4 -6 95 39 -55 -45 -88 -69 -54 -121 -49 -16 -98 -33 25 -68 -47 -19 -13 -8 35 -38 -8 -18 -118 10 41 11 29 65 1 32 -90 -91 -38 -123 -125 11 -79 -107 0 -93 -8 40 29 -57 -67 -26 -29 -118 93 -41 -127 -127 -45 -36 0 -63 -27 -65 -8 -126 -41 -1 -31 -28 50 -6 -18 -50 33 -10 -107 -48 -34 58 -56 61 10 -16 2 -111 26 -57 25 -64 2 17 29 83 49 -11 1 -16 -8 -18 25 -40 -10 27 -45 66 -53 -6 38 18 -41 -57 -57 -22 3 -9 -5 -22 -36 -95 0 -29 36 -52 17 -17 13 -70 -34 -3 21 13 -17 -23 -66 -22 -18 -101 15 19 27 -23 77 19 -23 39 -17 -57 -26 -10 -26 5 -20 12 12 -42 7 -67 -52 -33 -22 -33 14 57 -32 -4 -31 105 31 12 -4 -7 -13 32 34 -13 -9 -12 39 -3 -34 39 12 8 22 -82 22 7 18 -35 -98 -70 35 10 -14 -4 1 -79 -32 52 -78 -4 -62 -20 -60 74 -77 -6 6 -80 11 49 -70 -67 -77 -30 34 126 -21 69 -9 63 -86 1 25 -36 72 -11 20 20 -17 -19 -98 -91 38 44 93 -4 41 -91 49 -20 -37 -54 -28 -8 -58 -7 -2 3 57 -36 36 62 20 -33 1 19 -11 -22 -20 -17 3 82 13 -93 39 -8 50 83 -20 123 53 -69 53 -22 -25 20 122 101 -1 -72 55 32 57 -49 -54 -127 -20 -83 58 -25 92 36 16 85 37 -24 -8 -64 -3 58 5 -125 -106 -30 104 74 113 23 53 32 64 -95 85 -30 39 -22 27 -14 2 -41 -3 -17 38 9 20 104 -95 35 -38 8 28 52 -115 51 54 -7 48 48 114 -38 6 -78 41 66 -38 -40 17 25 79 77 -39 85 52 55 12 -45 -54 65 -52 12 -8 11 -86 20 -2 -127 -63 -74 -37 -32 -44 127 -34 2 95 -14 47 -30 33 -53 -127 -8 -5 -5 -9 -44 -16 16 -45 -55 41 84 -49 99 10 -104 40 -24 -42 -57 -11 -26 -127 -5 -36 -80 -43 -38 110 -18 -23 -7 -16 -33 -51 -36 -29 56 -55 -6 29 -71 -63 -72 50 -61 39 -34 91 -7 -39 -11 41 -122 -4 -13 27 37 45 -47 22 -17 47 -70 34 -7 -18 -58 100 29 -102 -55 9 -18 31 -27 -16 85 -3 -1 47 46 56 -47 -29 124 -66 19 -34 44 45 40 -21 35 4 -13 -37 -12 -42 64 -71 -41 33 42 -40 -20 -60 12 63 -46 32 1 -55 -36 4 -41 -73 127 14 3 118 29 -12 27 -26 82 34 75 -95 33 -1 -18 71 -47 -74 -18 -44 24 40 -28 10 -45 44 12 40 -27 37 -30 26 -103 22 -6 -62 -68 22 -93 111 99 12 -77 -53 -4 50 5 18 24 -35 -11 122 46 -11 -52 9 -20 -116 -30 -21 18 67 36 -18 -60 -106 36 123 -84 -7 -110 -94 -90 -61 16 -34 -125 -81 -57 -83 -35 1 25 118 19 47 109 110 41 -70 -83 -127 102 -50 -54 -16 -115 117 -40 -29 -28 -25 -6 119 -6 -43 -16 21 -37 -9 81 -123 -95 80 -27 -17 35 -57 7 99 49 15 1 38 -79 2 8 -110 10 68 -33 67 -49 -108 5 -12 -121 5 9 107 -16 -33 -41 117 -36 71 -30 72 104 -99 -4 29 -19 55 -104 21 -21 24 -55 90 36 -30 19 5 107 -68 -87 57 126 44 43 -69 36 -73 74 61 8 -89 34 103 -24 -32 118 -69 -47 -39 -8 126 34 -58 -70 -76 60 -56 22 28 14 -36 -89 80 105 -28 18 31 -107 34 73 125 -93 -125 -35 26 52 -90 2 -42 -45 114 -18 81 127 39 27 -53 49 6 65 -48 12 -74 9 17 60 116 42 46 58 26 96 -33 81 64 -71 -59 71 -59 49 26 -14 -3 -44 -34 115 -5 -28 -21 64 118 -16 -48 -37 46 5 -75 36 -53 47 95 9 -29 -52 -12 -78 16 76 12 -47 -8 -24 0 -56 -53 -19 22 -42 29 -70 -55 9 -53 39 30 98 58 -14 -90 77 -41 -7 -125 42 -13 -53 -1 -53 3 29 -36 87 27 -45 -51 -13 72 18 -23 35 9 -34 -88 -19 18 -12 -125 -124 -19 -30 -17 -8 -59 11 -75 5 64 -48 36 19 -96 -127 7 -67 25 30 -25 21 -46 76 -24 31 45 98 -8 -2 26 32 26 -22 -65 74 -109 -16 34 42 -16 31 -2 -40 75 50 -24 39 27 -119 7 -27 -25 -13 46 -27 57 18 -20 20 -26 -55 19 69 -66 15 12 -9 33 9 -34 -53 -38 18 -56 107 55 22 -19 51 34 -33 -16 -55 9 -84 26 3 58 2 -7 -87 56 46 -125 15 -37 19 36 -1 -11 16 -55 -121 9 -32 58 -59 -30 -27 59 11 -33 -4 78 -24 -81 -51 48 -14 13 29 97 -14 -121 10 36 -25 41 7 -40 38 -17 -35 -71 -41 -122 33 -38 74 44 5 17 11 -46 -47 -40 -21 89 -7 -44 -1 -23 125 21 51 -30 -1 16 35 -38 -50 34 33 -117 119 -25 -126 48 -11 44 34 4 17 4 6 87 11 -7 43 53 -14 32 -29 -31 41 72 -9 41 -23 71 -4 56 -89 123 -62 20 -100 4 -21 29 -43 73 40 -23 -18 34 68 -47 -58 -78 42 -30 -22 -60 17 0 15 -48 -18 7 20 23 -4 -11 18 -85 -9 70 10 101 -5 -17 28 70 -19 1 72 95 -35 1 66 -10 44 -14 -4 44 -50 28 -35 -101 97 46 -108 -33 -84 -3 -45 34 -54 -69 49 -62 -69 102 -20 -3 33 -21 10 66 -40 79 -35 -75 22 46 -16 10 52 2 -44 1 57 -71 35 12 -37 57 55 -40 14 -50 30 -17 50 39 -34 13 33 -57 -40 14 32 -37 61 37 -97 124 8 75 125 -14 64 -16 -33 -14 9 63 4 9 2 -41 40 126 126 51 26 -32 -81 67 86 41 35 29 3 -19 15 0 13 56 -33 75 45 -23 0 36 19 57 80 -16 83 82 55 15 38 -74 46 66 -24 -18 55 -9 53 -30 8 64 -10 22 127 112 43 -39 33 -79 126 28 109 17 3 58 52 -2 78 -10 64 -14 72 62 40 111 123 -16 47 127 81 -30 -29 46 -11 -45 11 -26 -29 42 44 -56 3 25 -24 1 -43 22 -79 -49 15 -24 -65 -8 -45 1 26 -12 -43 -52 126 -19 -64 42 7 -15 59 9 -25 -25 -10 58 -27 8 22 11 -58 -81 17 64 63 -26 51 -40 31 -62 74 12 -63 3 71 -45 38 -25 -95 25 2 -23 13 0 -22 -2 -25 -20 11 1 -18 21 -49 -55 -34 7 -95 -55 -19 -55 6 42 20 -11 -3 -72 3 75 15 -74 11 -5 9 90 -125 122 62 -108 -93 -17 18 49 -2 19 -6 -128 -39 28 -93 -32 73 46 58 127 -23 92 -127 -50 -63 93 -60 -87 -128 -56 -70 -19 -21 -37 -49 -7 -21 -44 -63 125 -59 26 -12 86 -119 38 -46 -29 -11 -27 37 -2 124 -38 -25 20 122 -128 18 2 68 -66 -74 32 -127 -6 -28 -69 -128 8 -65 8 -92 -15 26 123 39 64 19 -85 -127 -126 38 -30 10 94 51 27 -21 54 40 108 53 -34 -59 -29 -12 -44 36 6 -107 -97 6 46 -10 -41 -28 -36 0 32 -86 22 -41 -33 -60 2 -31 -20 -17 -120 -42 -5 3 -22 -65 -45 -64 54 -70 -15 -48 -21 -127 -117 26 -101 -60 -31 -124 -11 -23 25 -99 -102 -98 -40 -58 29 -68 21 -59 14 -47 5 -63 -40 50 -83 -49 -125 -78 32 4 -12 -64 29 -101 -22 -73 -29 -31 -31 -88 27 -80 -59 67 -99 -29 22 -67 -70 3 -60 -82 -58 -27 -5 -114 -72 15 59 -57 -69 -19 -38 10 99 -66 127 -10 32 54 31 -29 -87 -18 -44 41 -8 21 -19 12 -66 52 -8 20 -85 -21 20 -67 3 42 10 -50 -47 -21 74 61 -100 -65 65 -14 127 -59 -26 -30 -24 31 26 31 -27 -21 14 -73 49 -52 31 52 -72 7 -24 -14 -1 -79 -30 39 5 -2 -93 -10 37 -17 -53 -106 36 -8 -46 22 -26 -1 -28 12 81 -2 -105 34 16 -19 -54 -111 -12 19 72 -30 64 7 11 -33 113 47 109 75 -94 -84 106 34 -22 -103 13 127 50 -125 -23 -74 -13 75 49 108 -85 103 5 6 53 57 28 43 -38 -8 -29 76 6 -6 11 59 29 -25 15 -76 79 -73 -1 25 -101 77 27 84 14 0 -23 2 22 107 35 30 71 24 -36 90 -75 -28 -47 -106 -127 56 44 -64 -16 31 13 -23 -81 -4 -7 7 121 -55 -58 78 45 -44 61 31 -6 -23 -38 8 -94 24 85 -39 -69 19 -82 -69 -47 97 24 -128 -26 72 62 44 -78 -108 3 12 -28 37 -127 -126 124 -57 3 -85 -58 -43 109 -76 -59 -36 -83 -6 -39 -123 -36 -41 -46 5 -42 -32 -67 10 -127 -71 16 -47 -98 -25 -87 -51 -15 92 -36 32 53 55 -18 -60 123 -35 -4 -27 -64 14 10 37 -31 52 127 -40 -17 109 21 1 -1 -2 -78 56 2 40 79 -66 -54 -121 -8 40 39 -82 -46 18 -60 -18 -11 -57 -42 -76 -58 49 -6 -62 19 21 25 49 46 103 46 16 66 -127 -100 -3 -85 12 4 61 2 25 126 17 1 8 18 -27 56 60 -115 28 -100 18 35 77 -39 22 47 8 56 15 40 11 -96 10 24 18 46 -43 -94 12 -83 9 16 -20 27 -13 -61 -71 122 45 -58 -80 27 3 -44 48 66 -29 -2 0 126 111 27 -8 -36 40 -52 61 -68 -73 54 49 36 -9 -16 20 -1 49 -55 0 -116 65 85 -76 123 20 -13 27 60 -13 62 84 -3 0 71 11 -29 -100 -124 -111 -11 30 17 -8 77 -31 -17 95 58 -19 63 66 -21 0 25 -37 -82 -39 109 26 79 -2 21 -31 26 11 63 -38 4 -30 51 64 -50 127 127 4 -111 -33 -11 26 115 -40 12 45 60 52 48 -66 85 -73 36 -28 -108 15 -57 40 -24 47 100 87 -83 10 61 2 -50 -5 4 -36 38 38 77 52 10 -20 -128 4 97 -35 -5 -29 -63 -11 11 70 -88 -9 -106 -3 -30 54 -34 -28 -51 -35 -22 38 -40 35 -13 -66 4 -24 24 -51 -52 -59 36 29 -9 -26 -77 -115 17 -5 5 -50 -44 -59 -30 22 -112 -64 -29 -31 97 49 22 -28 -20 -3 -45 4 -26 25 -6 -21 62 -35 -22 116 58 -18 -55 -4 22 -6 -125 -10 -120 -36 -73 31 31 -38 -24 -123 24 -66 39 -33 -50 -31 11 -106 -8 -5 85 -9 30 -99 -34 -26 -46 7 -38 -67 18 26 -73 15 -76 -113 -9 28 39 -15 33 -15 -33 36 3 17 24 -20 -20 -21 8 -20 15 -22 -22 127 -40 -16 9 -10 58 30 -48 10 -19 -45 -7 78 -23 13 -18 14 86 77 21 -34 15 -108 -8 -2 52 10 -1 39 47 11 16 8 24 -15 -23 20 40 -20 27 6 -12 -62 54 14 71 28 -53 -29 39 33 16 17 90 14 -40 -121 83 0 127 98 5 -10 -26 -121 -14 -18 106 92 53 -53 -31 18 5 9 22 11 -69 -8 3 -36 73 -38 8 -5 49 46 46 32 28 -60 -25 23 120 10 41 40 28 9 -66 -96 -39 -51 -34 -54 24 70 -29 -16 -43 18 -8 -107 -119 -42 -19 50 7 -32 -36 5 -37 42 17 27 -19 -47 24 -62 48 106 -37 44 -40 -8 43 -84 -43 2 -35 -19 93 11 -64 -62 27 17 66 -17 36 -56 5 -66 42 -17 -41 5 46 -29 80 33 31 12 -40 79 -8 -25 30 -17 114 -121 67 124 17 56 -44 58 -104 -54 83 70 -14 5 57 123 -102 -37 -93 2 -39 75 -73 122 77 79 102 23 -116 26 -49 25 43 49 116 -17 20 73 23 82 124 47 -70 -127 19 -39 -74 59 -38 -84 -10 68 0 -125 75 -57 -2 -8 24 -52 102 124 127 -55 -95 -42 -19 -23 11 -123 -98 53 124 -41 31 32 -123 8 8 38 13 50 -80 9 83 64 124 25 -69 -52 61 48 -84 50 -86 -104 -63 -123 5 40 50 -37 -21 -15 23 -71 -94 -46 6 -67 78 -85 -99 88 -121 -4 94 -2 6 126 -51 18 -40 61 21 -7 -35 -113 110 -63 124 -44 29 88 -102 20 102 -13 -36 -45 3 94 -61 -93 -26 12 -26 76 7 81 79 -2 10 -12 -30 6 -34 -119 35 13 -125 -36 -126 18 9 -16 7 65 -76 66 15 -2 -18 -33 1 -102 11 -30 -47 14 -67 -117 126 -39 -12 21 -40 67 23 20 81 -45 79 58 -50 41 29 52 -103 91 -29 126 -16 20 -75 58 -47 72 -126 -35 30 -34 -47 34 -66 20 -77 12 88 -92 -97 -25 -104 -125 82 -7 -125 32 97 127 52 21 -89 66 23 -125 58 24 125 -18 30 9 8 31 29 119 8 -34 -55 -46 90 -74 -88 -53 54 -124 -49 -128 30 -18 11 -9 65 -7 78 9 12 -7 -46 53 -49 127 34 -70 38 -96 -24 126 23 91 -99 46 -25 68 -14 -1 63 13 -16 25 -37 -34 21 -19 26 -27 2 55 -3 -87 -111 -125 -51 -108 14 73 -128 50 -91 58 -28 -56 30 -29 -69 -68 -18 7 -75 39 -10 -101 -127 26 -57 -60 8 -40 -50 44 -113 -41 -53 -3 9 15 -70 3 -27 1 -37 23 -114 -4 -66 -23 33 108 -127 -32 8 -62 18 19 122 44 62 -115 3 -58 -64 5 5 10 30 -33 -45 -72 -126 35 -125 -31 80 -89 -59 40 55 -34 -55 -47 -22 -20 -122 -19 -59 68 -4 36 -43 51 1 53 -37 -23 21 -78 -65 -15 -18 0 30 -41 -33 9 2 -10 17 -122 -5 -4 -65 6 47 -30 -101 65 7 40 -30 95 -127 -34 119 4 -26 43 24 -3 -39 99 36 -36 -63 4 8 -17 -76 65 -12 -82 53 40 -39 32 -57 13 6 -45 58 -7 106 -13 -56 -94 -57 1 -68 -54 -73 -44 -29 -86 -57 4 -24 -16 32 31 53 37 -60 -49 -41 -6 -47 54 -18 -25 -36 59 -70 13 -128 -27 0 35 -73 1 17 29 115 99 -47 58 34 -71 -71 -74 -60 -52 30 34 -91 98 75 -45 83 42 68 -1 30 119 3 -20 -88 -90 -12 -27 -51 -116 66 18 11 77 -28 13 -26 75 -24 72 64 48 -8 7 -26 -12 68 56 37 43 -24 127 59 -58 -1 34 -63 -64 -6 1 -29 15 39 43 -49 -15 -25 -30 41 86 -15 -54 3 -76 -32 56 -75 -77 42 89 -80 -12 127 -11 96 -31 60 -97 -119 33 -59 9 24 33 22 -61 98 -96 28 -42 127 63 -44 -4 91 63 24 -63 -18 124 -1 18 -4 -42 22 27 31 -23 53 -35 68 -80 -21 26 -100 86 44 86 51 -50 -30 -54 13 -36 -125 1 -7 56 3 -57 -33 47 -42 11 -74 -10 56 126 -112 -31 36 -36 107 -46 23 74 -52 69 12 46 49 -22 -25 88 34 38 47 53 -96 73 -36 -81 -5 -83 28 78 -90 76 127 64 -104 13 17 -57 -52 111 78 34 31 25 -19 -3 10 33 -48 19 -41 -47 -84 -24 -47 -4 37 -40 -35 76 23 73 -27 87 -2 -84 48 -54 2 -88 -9 31 62 34 -82 -36 46 -81 -9 6 -38 -33 -49 -68 -46 56 -11 0 -52 -115 35 -66 45 31 63 -38 -95 53 121 20 -65 48 -76 -8 -5 -50 3 -6 -24 -23 109 -14 1 15 -39 11 -12 34 -63 -28 -7 -24 71 -2 3 -90 14 20 0 64 -5 16 -37 14 -65 76 57 122 -24 -34 6 -8 -6 9 -74 32 -18 55 -99 -105 127 46 -19 74 -45 85 26 -111 54 -109 -25 25 -72 -12 -13 -25 -34 1 -63 23 5 -83 5 -26 -4 -50 -2 -59 23 14 -97 -118 0 42 41 119 -68 -57 32 10 -108 36 -76 7 49 -100 -71 55 -16 -2 15 6 12 -62 110 43 39 -68 78 13 -38 -8 -34 -65 -23 -31 38 -24 15 63 -37 62 -49 5 19 20 23 -17 -62 -19 14 -68 -31 -32 2 -66 18 -46 -74 -48 -39 -52 117 -117 55 -57 68 -89 -19 58 -64 -43 19 -22 -121 -12 7 122 38 -40 -110 -57 -123 -30 40 -106 116 -68 9 30 4 49 31 69 24 -47 -102 -19 -3 -1 83 5 -15 65 -52 -4 -37 -10 -76 -125 -83 58 -2 -1 45 65 44 -42 -47 -7 -32 93 -55 39 -70 -112 6 116 -39 -21 -27 -79 17 127 -84 -1 -54 17 3 41 15 -5 -44 48 11 -19 -76 -66 87 25 34 -3 -8 -10 -32 -9 -61 -19 72 119 6 -58 52 -29 22 -4 -90 9 62 14 127 -127 58 -38 58 11 -104 20 -39 54 25 18 -28 -47 -117 62 -108 27 -12 58 45 -76 -59 -47 -83 -39 12 -32 -8 25 -50 4 116 -90 -40 6 16 -11 82 27 5 72 115 4 -69 53 95 -35 -59 19 -8 9 77 24 -4 53 -39 -6 89 -32 54 36 -35 27 -101 39 45 48 2 -30 -4 63 33 -9 -22 10 -94 -3 -15 18 77 -78 -15 35 72 41 -22 -1 -26 110 -11 10 21 29 90 -116 -42 99 24 -123 -79 114 -61 -33 -54 -15 -30 0 -68 3 27 -128 -9 -55 -123 62 -24 45 74 12 -61 -34 14 37 -43 90 -25 -70 80 12 16 13 -25 23 -20 57 -1 -5 -40 28 19 -33 -14 40 33 -123 -31 23 -54 -119 79 80 59 67 -62 -14 -21 -26 44 114 41 -52 -24 99 -91 -115 -83 25 -53 48 -88 -26 -66 -84 30 -36 12 -44 31 -14 -23 -7 -2 -22 20 -28 18 -65 -24 39 -123 -106 -17 31 -45 46 92 38 -11 38 39 -89 -1 -2 26 127 62 -29 121 -23 2 11 -24 27 -98 -25 -87 -35 74 -103 74 -41 -25 67 -85 38 9 86 92 -95 -6 -94 49 -21 20 9 70 50 -3 43 -84 -16 -30 53 49 -92 -2 1 -12 -11 -18 -111 9 -30 -120 41 -96 72 -50 -127 4 -2 -16 47 0 -34 -30 16 -30 -30 91 -82 -19 56 -50 75 -53 -98 -28 73 -74 -65 63 -34 -44 77 17 -61 4 -90 -20 -79 0 9 24 -78 12 -66 9 16 -17 22 -10 -72 125 -12 -39 48 -64 -36 42 -64 -53 -5 31 -30 56 -128 85 96 -94 3 110 53 31 92 -17 8 -31 100 -24 119 -16 22 -97 39 124 -6 -21 -7 10 15 14 -99 6 -70 -115 -81 -28 59 -67 75 123 -1 16 91 -34 12 74 -35 -15 -85 0 -51 -29 7 -47 -9 -49 53 49 44 -59 -48 71 35 65 5 60 106 113 48 -76 -62 40 -62 13 -27 35 -63 -128 -13 -9 -35 -3 70 -20 93 -3 -8 -22 93 -62 -89 43 37 -86 27 4 40 81 71 -37 -33 -66 90 -97 69 -26 115 -14 -35 -55 126 -60 24 -84 -87 -107 -75 16 -68 97 73 38 -52 -25 -127 -89 -72 -128 -126 -3 -86 14 64 -79 71 -113 10 -56 17 92 15 -120 41 -15 120 44 49 -84 -65 -116 -61 -53 -73 85 -90 26 103 -119 38 -2 125 -21 17 -6 32 45 -60 -20 -37 -35 -64 -40 24 2 -1 109 79 -84 93 -48 -64 -2 -28 118 32 -12 5 -28 -95 -24 -16 -21 51 17 -33 6 115 -17 -30 -45 -31 125 17 89 54 -43 -126 43 -6 -9 55 -73 -39 93 -29 91 1 -36 -111 0 -60 40 20 30 -27 -48 123 47 -89 80 35 7 -9 -43 -54 -24 -127 -98 -100 65 89 8 -95 -26 -19 66 -47 -10 -57 10 -78 -31 -50 -7 25 -95 87 4 -69 108 94 90 -50 55 89 -90 36 28 -66 -48 -119 -60 33 85 -51 -62 -101 16 -81 -9 -4 -103 -59 11 -16 44 120 -26 8 -95 33 2 -14 -38 19 -21 74 -52 81 -50 -106 -125 7 -62 49 22 114 8 -20 -3 -6 63 69 60 58 32 33 94 65 -27 20 -18 61 -17 60 69 -8 29 58 63 8 58 46 56 4 -128 59 -12 65 45 127 -29 46 40 59 -12 32 -5 127 -114 92 31 117 -14 122 59 126 123 -87 -6 30 -122 55 -114 -110 26 69 -93 44 -27 72 61 -19 -127 -27 -107 83 78 -32 98 127 -38 -101 13 126 -50 93 -38 82 -120 16 -36 41 -95 -46 95 -127 -40 108 19 5 -55 -76 -37 33 60 25 5 -39 -119 -8 -96 -52 43 -71 -57 -28 38 -84 62 78 -36 58 -78 -83 -64 13 49 -17 65 -10 -120 -81 -105 117 35 -43 -10 -18 -37 30 -1 -11 59 -123 14 33 125 126 12 126 -19 -20 -127 58 112 102 -47 68 3 -14 -22 15 -119 16 1 -46 71 -122 31 56 -40 127 -2 -27 72 -50 72 -118 6 -27 -46 37 53 -8 80 -29 -44 57 -94 -124 -55 16 20 -5 18 47 84 -30 -74 51 -66 39 -37 -10 -20 -44 20 -59 -3 -4 -57 27 5 65 62 17 4 9 -119 -3 60 -29 113 25 27 76 -52 -30 52 -86 -3 55 -10 68 0 -29 91 0 -99 80 8 80 126 -18 -81 57 -41 -80 44 52 12 -61 -41 83 -74 8 -35 126 -12 -10 10 -14 42 98 -28 67 79 67 22 4 -14 -5 -14 15 -22 -26 100 10 -35 6 -51 112 -31 -41 -78 -17 -1 -20 89 -36 53 -17 69 92 -17 32 13 -10 -38 15 -54 -25 -32 0 -21 -60 -20 -66 9 -57 -38 -39 12 -26 -58 47 48 -24 63 -41 -86 0 -12 -60 22 -33 -9 -31 22 11 84 -29 8 20 -46 107 76 -13 29 -29 3 -60 -30 25 -40 70 127 -86 22 45 118 123 -5 -9 -21 22 80 -28 -4 49 -64 3 -4 15 24 67 -1 -41 -32 -12 11 -25 -27 -50 -27 -37 -34 18 42 6 36 48 -60 41 14 41 38 31 -7 81 42 -36 -8 -21 28 74 15 5 -37 -5 -11 101 35 6 -34 6 -29 -76 87 -21 53 16 11 14 -8 -52 4 37 -7 -1 -128 11 80 8 -120 -6 -6 42 125 -63 38 -45 -31 -104 -41 14 2 -83 103 20 -79 -30 28 9 -49 -59 -44 -48 -80 53 60 -4 -62 -42 -56 11 -68 -62 -63 -120 43 -106 -104 -23 10 -20 -44 -11 75 47 92 -31 -33 -83 -36 -80 -25 106 59 -89 -119 -124 -31 -66 -126 -38 -23 -81 -127 17 -63 43 9 -51 -43 -46 44 9 94 -30 -125 -123 53 51 21 23 -25 68 -30 -76 -16 -75 12 47 -2 22 -124 85 -60 -30 -40 -29 -28 3 23 18 14 -9 61 -64 11 29 -73 -9 0 -4 -22 35 -18 -99 14 39 -69 -17 -50 -16 -39 -51 122 119 37 19 -46 23 30 -41 -5 -124 -12 28 0 -42 -14 -22 80 13 -5 -94 -32 -39 -70 39 19 9 99 -34 -28 -41 -63 11 1 -7 -12 80 62 27 1 -30 -16 -41 -31 -3 36 10 55 30 -61 44 42 -32 -17 -42 16 47 35 -71 -6 -17 -28 60 127 39 -3 6 58 -94 -83 67 -20 -124 36 47 -33 -121 127 39 -128 8 -55 -69 20 -17 -70 34 -121 72 127 49 94 63 -90 98 53 1 -18 35 -127 51 -77 -126 62 22 -17 -62 91 10 123 15 -21 48 70 -64 127 -50 8 -50 92 -87 48 -13 -123 127 127 35 25 -16 -51 11 42 25 -106 -44 77 -72 -121 63 69 97 -69 -40 22 2 64 81 -35 12 -47 127 -47 23 114 125 8 27 -69 -22 5 11 -127 76 -115 8 -46 -124 -15 -86 91 -83 -91 -73 -34 -25 14 44 116 -10 -49 -5 -33 -35 -60 -26 -62 -26 -126 -1 -16 -68 34 116 25 -79 -29 43 -3 -77 -61 -3 -47 25 -41 -49 -67 20 -59 -36 -73 -15 68 -11 -98 98 41 13 16 21 61 -3 33 -72 -124 -84 -125 75 127 -71 50 -73 -17 -22 -52 -22 -48 -126 31 1 -12 -11 -84 -125 -29 26 -44 -92 58 28 -78 -78 -97 -81 19 -18 9 -15 -25 -33 1 52 -25 -44 -16 -6 -72 -12 12 -7 -35 -31 -25 79 34 -46 40 1 -53 31 -37 50 -79 -13 -22 20 -18 5 -14 -1 25 -22 -62 -19 -7 -34 68 -7 -11 -62 35 40 -30 13 -16 57 -51 -88 11 45 22 118 -8 22 -8 4 -3 1 -38 -27 64 25 -53 -41 -5 -89 18 -16 22 6 18 28 -64 -64 9 30 47 57 11 -38 5 37 35 -109 -29 42 15 -12 2 -10 15 -110 -5 25 29 -1 -51 -67 36 71 26 -34 -89 125 -17 28 3 -19 -29 29 54 18 -34 -24 -17 -72 -74 24 126 -35 -15 56 80 -48 -128 -4 -110 8 -66 -59 -50 69 24 38 -17 -52 -7 -25 2 -8 -32 45 77 -112 64 -28 -52 79 -50 14 2 53 34 -14 109 19 -78 -127 -64 -127 -9 39 83 25 32 -10 21 19 -48 -72 -127 -86 -127 -96 40 98 18 24 -34 107 -128 -5 24 -24 2 73 -46 -89 -61 -53 127 8 30 -93 126 63 -58 -33 -85 1 -36 -124 28 34 -84 -87 18 57 -6 -41 13 -77 96 -2 18 -72 -84 -72 -91 -55 2 -63 5 -50 3 57 -41 108 -109 103 9 -2 -17 16 -36 -8 -18 -50 -38 118 -112 44 -5 -77 40 15 -124 -105 -97 -34 123 35 -14 -7 6 -110 104 38 -37 66 -10 -44 -56 -29 59 126 -114 33 -77 -14 41 -55 -93 38 4 -47 21 9 14 119 -118 7 -14 39 -52 67 107 23 1 -58 23 33 8 79 53 5 -55 74 24 -49 74 114 -30 87 -36 -67 -82 -19 -60 52 96 -2 -13 22 1 127 -122 16 76 -76 30 53 -40 -37 -94 19 -18 110 37 67 68 -43 1 -50 9 34 -76 -7 -15 -80 0 5 -37 10 8 13 -7 -32 126 -23 4 12 -97 8 47 -41 -40 -57 -93 -17 105 3 -103 -2 -28 0 42 -37 93 -61 14 -22 -6 -113 -10 -33 -14 8 -35 -13 72 -29 29 39 64 18 39 -68 58 -55 0 -59 8 -72 -4 -8 -55 31 -62 -46 -4 49 15 -10 14 107 34 -14 29 3 -16 29 8 -24 79 45 -4 -80 25 63 127 -47 -19 84 -73 51 66 18 -5 -40 78 -35 -53 -8 26 -57 127 -9 -66 34 -110 104 68 -8 -49 123 -32 127 19 97 -75 79 -66 -3 -90 -18 28 75 -56 -54 107 -37 22 122 3 28 -75 -39 98 -67 78 65 4 -6 5 -77 73 -52 35 -31 -6 -65 38 72 -127 -34 -99 -37 1 95 -34 -93 69 -80 -110 0 12 -33 77 20 -25 -11 -46 126 88 -5 42 0 42 59 55 -48 -72 23 86 62 29 119 41 21 98 -80 -30 -71 -30 -23 -32 -80 47 17 17 -19 -29 99 16 -13 72 100 -118 13 56 -2 -4 80 -9 -17 36 37 18 -28 29 -3 38 118 79 -119 31 96 -22 8 -8 64 -40 -77 31 5 -4 6 -33 22 4 -79 -56 -54 -72 0 38 8 21 73 41 69 27 -43 -8 4 -13 -126 -16 -6 121 -73 -32 19 20 -67 83 48 -21 -127 19 62 124 69 44 2 -120 6 19 80 -122 1 -113 56 -68 125 -12 -31 80 1 63 37 -1 122 95 -16 11 -111 -77 -5 19 33 49 -103 103 -53 -128 -47 47 28 -121 -21 -101 -12 -88 -31 -10 70 -59 126 47 96 -5 12 -12 -16 -124 54 38 13 21 45 -15 -37 9 -120 12 -24 84 -127 20 -66 -34 -14 -20 38 -62 77 -98 -45 -14 3 -96 -23 -56 57 75 -34 10 -55 -7 23 10 -123 54 74 -50 21 -15 -10 -82 112 -87 20 -25 -122 -10 88 -91 -59 -84 -29 25 20 -48 85 -40 17 -77 37 -64 -30 -6 9 -105 -18 -56 -92 -65 -30 62 -39 -50 -124 -29 -126 -8 44 -14 0 79 32 3 -8 64 127 -39 127 -6 31 -21 45 72 75 -39 -22 -22 20 -23 97 5 -30 -51 -29 -79 86 67 -3 -32 -43 -45 10 -58 -23 -60 0 -53 -51 67 -123 -9 -15 1 26 -35 -40 26 74 -28 -39 12 22 75 21 68 -21 76 47 -32 -39 -127 5 73 -21 36 68 5 39 15 -47 -86 -71 6 17 -65 48 56 -25 -8 9 49 61 -14 -73 56 64 -44 56 126 -28 -18 79 110 -72 -5 -3 22 74 12 33 41 125 -26 -72 6 -20 23 -60 80 21 55 -3 -21 5 18 -2 78 69 -6 25 -124 -15 -87 -56 -108 -32 -71 15 -42 0 -36 -48 5 -15 -49 -45 -64 -59 -7 -32 -88 -50 -50 -45 43 63 120 -94 37 10 60 87 22 -11 8 -61 103 0 -61 57 -85 7 -9 127 -14 -100 -13 -95 -23 71 -8 127 48 47 -22 127 -23 15 5 77 -57 3 35 -128 -16 0 -35 -30 -128 111 12 24 -27 37 -44 -61 -79 -29 115 -32 -78 16 127 54 -1 -53 -13 -55 -122 6 -12 1 -5 -45 25 -2 -24 5 -118 71 -39 -18 -6 24 74 -51 -32 57 71 68 -15 -3 21 36 71 30 -59 115 125 32 -67 -47 7 -17 -30 -4 17 -74 -41 17 -55 80 -39 -7 -68 -10 -16 -25 -12 30 -5 14 -3 44 -112 -23 -9 125 -98 20 3 -22 -26 4 31 78 28 -2 11 -47 -56 -101 -100 -97 24 122 18 -28 -15 35 32 121 65 -79 -46 -12 -69 20 -35 36 -28 65 -4 56 49 -41 -9 -8 -22 10 -56 79 21 -121 110 12 70 -54 -56 126 -13 17 -48 60 -71 51 31 19 4 -104 2 -16 44 -75 21 -30 -52 23 -61 -55 12 -24 43 38 -108 -35 -119 -38 -26 -73 -65 15 -66 126 45 -119 -21 25 79 -82 -22 -50 -5 22 -115 -103 -2 -50 66 -7 -108 -17 -50 30 50 -51 100 124 99 -54 -68 -6 -28 83 -82 23 116 -25 -43 11 89 -47 37 -35 21 4 -49 -79 -28 52 -116 -122 -40 53 113 -32 -31 -17 -74 9 -10 -16 44 22 67 16 13 -68 43 -89 2 89 40 -19 81 18 -126 68 4 -11 59 -31 7 -50 22 83 -28 76 50 118 40 -32 -86 -13 79 -79 -72 18 -23 23 -21 99 42 20 -55 48 -28 -107 17 36 -26 -15 -32 -57 127 -40 27 19 33 -108 61 94 86 -10 -45 18 35 19 72 -72 31 -61 -34 -22 50 17 -128 0 -32 94 -32 -54 -112 74 -17 98 48 -42 -63 7 -64 20 -71 10 -48 22 -3 -58 99 93 16 -70 54 53 92 -76 8 -56 90 -8 61 -99 14 -112 -70 -100 -75 59 20 88 86 -19 51 68 -47 10 48 -86 -15 -67 21 -20 84 10 21 64 -46 34 -21 5 57 61 -32 -13 -31 -99 -31 -36 -45 -19 22 -41 45 -13 42 37 39 -42 10 12 4 51 -44 -3 13 -1 -71 13 -42 -49 89 -56 17 -33 -26 14 16 26 -86 -127 -8 6 -32 26 11 36 -128 -35 77 -98 5 -35 31 11 35 52 31 59 10 19 -12 -58 106 -19 75 -2 -124 14 -81 -31 57 43 8 -1 -71 24 38 -4 2 23 -17 17 -66 -38 51 5 -6 3 46 47 -1 21 -6 -39 62 -49 9 -18 2 48 -26 38 -10 42 -20 -64 5 95 -58 -20 47 -36 36 123 -16 92 79 -59 -49 38 -62 68 -20 -33 -11 26 -22 47 -107 107 43 32 113 -17 49 34 31 20 -82 -90 8 55 44 -19 5 -15 23 -62 -44 57 43 29 47 20 6 -101 -68 -25 23 53 52 25 71 -20 32 120 -20 -47 -6 -51 -36 -94 73 39 -78 5 -126 -1 -25 60 -44 -27 62 9 -126 29 -66 63 -76 59 45 2 -59 -13 5 -42 48 126 -55 28 -97 -67 -5 -28 -36 -1 -5 8 53 -6 -49 121 60 -41 32 74 -40 23 -126 16 -21 11 58 1 21 -2 -23 -63 -41 -39 -55 -5 -53 101 -33 42 11 29 -38 -17 -51 77 9 -18 -11 -17 102 -10 57 22 55 3 4 -37 -35 -6 33 15 -45 6 -45 -19 49 14 35 35 23 -25 -9 10 38 61 43 23 69 -32 16 -2 64 113 10 28 61 -7 47 57 4 3 60 -87 100 28 -59 -46 -27 -68 47 -6 102 -12 6 -5 -16 67 63 -18 75 78 42 127 -124 -66 -83 -50 3 -48 -34 -34 56 43 71 63 61 58 39 -99 76 -124 23 -14 45 -49 20 -8 -22 -37 -124 14 68 -57 0 -50 6 -12 43 20 23 27 -28 87 75 6 -36 113 -12 -1 -26 -92 91 91 -25 -98 42 -39 -14 -78 -32 46 -109 39 28 60 -7 -12 48 60 10 -47 -25 27 26 47 -7 -49 -12 125 -59 -23 -2 22 12 -4 21 47 -54 -65 -20 124 63 -61 6 -71 -94 -20 -124 -14 -61 -71 79 2 -44 -72 16 62 -22 15 55 -104 21 31 -39 -57 -24 -26 17 55 86 -72 0 -57 -64 -123 -59 -9 28 14 48 47 67 6 49 10 35 -66 -45 -9 48 120 41 -48 -6 55 26 35 3 -10 55 -25 -32 -15 -42 -15 52 -56 -44 -21 -87 68 -46 -23 -37 79 104 -2 31 30 -40 -64 54 73 -3 0 -104 -25 58 -66 33 41 19 -125 68 57 -55 -86 -77 -22 -10 127 -52 56 5 -11 127 -77 -14 -59 0 -90 -40 -18 -46 -4 -53 24 -58 35 18 118 54 121 -55 20 -20 10 23 38 -51 117 -14 79 4 -48 9 -56 31 50 -15 43 -16 8 -6 24 6 -52 24 -20 -67 -60 -100 -17 -81 -66 -15 -29 -47 -3 -48 15 23 -21 6 -4 119 -70 14 -8 51 54 -42 -10 -8 -91 46 -125 13 78 -29 93 -91 12 -20 43 -54 -10 8 -4 -114 5 75 -37 67 13 -51 122 38 -13 -19 26 -8 74 56 -6 -64 11 10 1 -11 51 68 18 9 -83 25 -61 97 -3 -68 13 21 -105 -51 23 17 71 21 38 72 38 -67 127 -7 26 -91 -22 -1 64 15 -8 -19 5 -125 -48 -42 16 -28 -15 40 21 -88 69 -31 22 -126 -17 -24 -67 -18 16 21 5 34 123 -114 -54 105 -76 -74 -40 12 -51 -43 39 0 -40 -53 98 11 -3 92 31 -46 20 31 51 126 91 -6 -44 15 -71 -114 -47 -80 50 -79 61 -61 -103 80 -124 -93 34 81 -114 42 67 18 89 -124 -55 80 -46 58 14 -22 14 -90 -81 -7 -100 -32 -97 -3 42 -27 23 -57 67 33 -67 -15 -76 -37 -68 78 -35 -104 28 -121 33 30 -85 122 126 -2 -74 5 60 -120 -8 -67 -120 -6 -33 -45 50 66 116 -124 -49 124 7 18 127 -36 -80 -66 -32 -12 38 -92 -70 45 -65 89 44 16 -103 -48 -27 -13 9 70 33 -120 77 3 98 36 43 29 4 54 -45 126 -99 39 3 -30 56 54 101 37 125 53 20 25 -40 -61 -81 -15 -20 -48 127 1 -59 -18 -8 46 85 57 17 -98 16 -24 -14 -64 20 -99 -56 -22 68 -128 40 46 104 22 58 74 75 -10 18 -50 -56 1 13 20 -88 127 10 -10 21 -122 19 84 0 -67 127 1 80 -52 -41 121 68 82 -78 -99 -23 97 -4 125 -17 33 24 -47 65 64 -4 -34 -5 -99 100 -91 52 95 -128 -94 -88 65 0 -33 -89 82 -69 -4 -75 18 -80 -26 6 97 20 39 72 -79 -67 -89 -12 -43 -29 -49 -16 -60 -93 -63 -117 123 -51 19 73 -57 -55 -103 5 -89 -13 -119 13 -72 -31 12 -57 22 -117 54 5 58 -77 16 13 -105 -63 44 -2 0 9 -6 91 34 34 -127 -123 -86 -112 122 27 -121 11 -51 41 31 102 -94 27 -74 -48 -123 -104 -18 -21 -66 -78 -91 13 -122 -31 -93 127 127 -109 94 3 -57 5 6 -127 -7 -72 -41 -33 47 -94 -41 -70 -80 76 123 7 -54 -32 9 -23 74 -40 -18 -36 -10 -126 -29 -55 -125 29 -5 -40 16 -5 7 -26 -3 -125 38 11 -106 0 -72 50 64 115 47 47 -70 -4 51 73 -78 82 -16 -15 12 -70 -10 95 -68 34 -10 40 24 95 46 -73 -16 -96 -128 -25 -44 -96 85 -21 -86 -74 -45 70 45 -49 -23 13 9 2 -46 6 1 -63 -40 -67 -99 -32 67 -46 -43 48 126 88 -1 80 -8 -46 40 79 66 -123 41 -7 7 -19 -85 15 63 -25 -26 30 96 -61 -12 4 -23 -8 32 23 -28 -13 31 3 -20 17 61 -116 -35 9 9 28 45 13 15 -13 -1 -44 60 45 1 68 -76 29 -46 -17 -9 6 12 13 2 31 -100 -104 3 42 29 -22 -35 -7 -70 74 -88 64 127 7 50 42 -5 43 78 -17 -19 -62 97 66 -5 -89 -8 28 45 -71 -2 -47 -63 48 90 -36 -29 63 -123 7 19 -53 7 50 54 -17 61 73 125 -11 60 -69 -85 -14 47 16 -105 49 -80 -90 -2 -49 116 89 -43 28 36 -116 -12 35 1 34 17 -41 -71 31 16 -16 -31 -23 17 -61 -112 72 -95 -10 -121 -71 -64 -40 -42 -86 -25 -13 120 14 41 12 -5 64 30 40 -33 -54 -108 4 -35 45 -121 -38 -104 -46 -41 35 125 9 8 -20 -99 -90 -49 -27 49 80 -51 -32 -99 -49 -61 -22 27 -66 33 77 -127 -56 29 -117 -27 13 56 -64 -68 -52 -80 -54 21 -52 41 -15 -33 -8 -59 -37 -70 20 124 42 51 38 -20 -21 6 11 9 57 -70 -40 -28 9 3 -124 -86 124 -2 -31 -81 -3 126 16 -9 6 34 -8 -64 -64 83 -80 -46 -14 52 -118 82 119 18 29 -30 -59 47 -40 -75 -15 -81 -9 69 51 -11 -28 61 -93 124 93 29 0 29 72 34 81 122 -96 -125 8 6 18 -62 19 81 15 -52 -26 30 -92 40 44 -61 -12 -21 -56 116 -31 14 65 24 12 -31 -56 25 -60 -107 69 -4 -3 -111 3 26 7 103 54 94 30 76 -2 23 -62 -124 5 72 84 124 -24 47 126 95 49 -3 27 -28 -26 -14 -30 -15 -26 24 20 -15 -55 -127 -22 57 69 -58 12 -1 -32 -71 20 21 -77 -13 17 21 1 -76 102 125 -3 21 99 -44 -34 0 29 -124 72 34 16 59 -48 -58 11 32 -36 38 -28 35 -5 90 -37 89 33 -13 120 -53 57 28 -22 -13 -29 -31 -43 -116 30 -42 -127 72 34 -51 23 -37 -26 64 4 8 39 -51 2 89 -5 22 13 118 -58 13 9 54 5 27 -28 82 -31 119 34 -125 4 3 15 -17 29 -37 -27 66 111 14 -40 74 26 124 38 31 28 -70 -40 77 -78 11 -72 -37 -49 8 28 71 27 24 -62 58 14 34 7 -2 50 34 -27 63 -95 -69 33 43 95 -102 114 78 -14 -30 114 38 71 -33 4 127 127 33 -6 60 127 -22 47 124 29 -95 91 -30 125 39 23 9 84 77 -24 -53 -12 27 10 44 53 126 -20 -63 8 25 -49 13 42 83 -60 -3 37 23 -10 19 15 -6 -68 124 125 66 61 -34 -39 -43 -80 -69 -8 -90 21 67 80 80 18 39 -89 42 19 -13 20 37 -121 36 -67 82 -31 -36 -8 -36 -22 25 96 -26 77 -57 58 25 64 -79 26 22 -8 -100 29 -27 19 -5 50 -13 55 -126 73 26 -76 -91 35 -42 54 -34 15 -24 96 -13 43 -9 42 52 -121 -88 -26 -19 -38 1 -7 85 29 -42 38 42 16 -36 -16 -18 -42 59 -6 56 32 -19 16 -77 47 54 -3 -31 47 9 -41 -26 0 -40 -67 -2 52 39 46 -11 68 -2 87 67 -125 114 -22 -110 4 28 40 -97 -41 -21 42 -21 50 -92 18 -64 -18 -12 -29 -46 29 -97 -54 -7 -62 48 25 41 -38 44 66 48 32 -43 120 -5 89 -127 -65 -8 44 3 -40 12 20 -117 -18 64 -126 95 -1 44 35 110 105 8 13 -12 13 -83 -29 14 123 117 -46 31 36 -16 41 -10 123 8 40 -22 123 -61 52 12 84 -34 118 63 8 -27 42 118 -27 -32 101 -111 60 125 -100 84 26 33 8 3 -100 127 -24 108 46 -80 26 28 76 24 3 113 37 102 91 64 72 -119 101 -33 -102 16 127 -97 21 91 -122 120 -70 -73 -11 -40 93 65 -21 127 -42 -51 -78 28 36 76 45 15 -19 11 -71 123 -127 61 -3 -6 17 30 -67 -9 90 -101 -36 23 43 -24 -95 41 42 -93 24 -31 -2 126 -58 124 -2 -21 9 5 19 -48 29 33 -105 -25 -5 70 -18 10 73 117 -16 65 -23 95 20 57 -10 27 -55 -69 -31 47 53 -26 60 -40 51 42 47 -72 -52 -33 -78 21 1 -80 -7 -22 57 79 111 32 -77 -7 84 -87 17 25 -114 -44 6 123 -4 26 98 17 41 -71 47 15 -5 -32 34 43 -31 -50 31 -40 24 -66 60 -62 18 -34 53 -20 69 3 79 -26 28 -1 -6 -61 76 63 -39 -39 -77 -18 86 -15 45 -92 -114 -20 90 12 -127 -37 -50 -61 -43 -36 11 39 9 -28 58 -57 26 44 70 91 -39 -26 -21 64 65 -22 101 -66 -90 -101 27 -61 30 -80 2 0 -39 16 43 19 -25 -33 2 62 42 74 55 -14 -54 97 57 -91 29 -1 -9 -35 31 2 24 -33 60 -123 -2 47 127 -56 -120 92 -41 20 20 38 6 124 -58 117 11 18 125 -71 -25 -52 -45 126 -57 111 35 -37 -22 -17 -38 -104 127 124 32 15 20 65 -7 65 -6 79 -48 55 -17 -13 10 119 72 21 107 28 91 68 -16 0 122 2 -25 52 -57 92 125 -6 1 124 -26 -68 -22 -98 45 -59 20 73 79 41 124 67 -59 122 -68 80 99 25 -23 -23 -102 119 90 -19 44 120 -72 127 88 53 70 80 124 -84 23 -39 123 -85 64 119 18 -127 19 -52 73 1 19 28 -23 0 -8 15 -21 -108 13 48 -69 37 86 -118 3 -14 -13 -86 33 -24 -29 2 69 31 15 -88 -19 125 -10 20 52 89 -68 -56 -9 -6 -70 42 2 9 0 58 -10 92 107 53 60 -45 103 -49 -93 -43 -28 56 86 59 -14 87 5 -14 -8 -26 -34 -111 14 92 38 -24 59 112 -98 82 4 -25 37 4 9 52 -14 17 -111 -65 50 2 13 42 28 -55 -44 -45 58 17 -40 -50 32 -32 27 64 47 23 19 -37 -33 55 -20 71 -77 -78 -5 85 -59 1 -8 100 9 2 29 69 -103 23 31 -56 15 18 -18 26 -37 -7 1 57 -60 -11 -34 5 55 -16 -9 49 21 71 27 -46 -48 -46 121 17 -44 13 30 56 68 -9 -4 -24 -4 55 22 -58 69 -1 45 -29 -5 4 -5 -1 91 -43 93 70 -25 17 26 -13 13 10 17 46 -20 -10 -15 70 9 -28 -89 -45 -47 61 -63 -61 -12 -27 -75 10 26 67 53 -19 41 2 24 67 -15 -67 -14 -82 -26 -45 74 -58 92 -40 -7 15 9 -14 -27 60 11 18 20 13 60 -40 -125 51 35 -106 -41 92 53 68 -72 81 -94 -30 120 55 -7 72 41 46 -94 114 -45 111 52 -4 28 -37 62 -19 -4 -31 92 -123 -53 -100 -4 21 87 23 -3 10 -95 -52 -24 71 -49 -94 40 -16 24 57 15 -48 -3 46 26 69 101 32 -84 -86 -28 2 -37 -34 -23 51 48 14 -34 65 2 -11 4 -53 -77 -39 -77 -7 13 -34 -85 22 -107 78 -11 5 -8 -27 29 60 2 99 -27 71 11 24 -33 8 -5 74 -76 28 126 51 5 97 53 -36 0 -4 63 89 -72 -10 -40 -71 29 53 51 0 -20 43 -25 -55 -65 15 17 55 85 43 29 52 -48 78 9 -55 8 26 14 -69 -90 64 1 -57 -13 81 -80 61 -70 31 -60 0 -9 -41 -19 20 -31 -30 -9 -13 74 -5 -25 -29 110 8 -24 -36 116 -48 -47 -10 -54 -66 47 -2 -41 42 40 -38 -97 8 37 -19 -14 62 -121 -61 21 0 21 -125 -20 22 -84 -67 15 -6 29 -82 44 -71 -8 -37 -25 22 41 -45 -71 -4 38 -42 0 -61 49 61 -15 78 -20 17 -30 -5 -23 -21 60 -39 -82 -16 32 19 36 -50 17 -29 -59 -3 71 -23 55 -73 -3 -22 102 -15 -46 53 -47 92 8 99 43 22 15 65 -23 -27 -23 95 64 9 37 -28 10 50 -22 67 -52 -25 46 -53 -30 -22 -5 -25 -59 -42 -23 -59 37 -34 -13 20 55 -23 15 50 27 20 72 24 28 -49 29 42 11 100 -4 14 -56 117 -38 15 10 76 1 73 -25 42 44 -15 -4 -38 -92 27 12 72 78 75 5 -125 125 -69 6 49 -3 58 16 107 15 33 -3 -75 26 36 113 8 -49 0 14 -62 96 27 122 20 76 -31 52 -56 -75 -11 37 -86 22 35 89 62 -34 8 20 -58 21 49 -17 48 -44 26 97 -94 -37 -12 22 -50 -56 101 54 -16 -16 27 27 20 1 -27 12 110 -60 -101 -47 -56 49 67 106 -15 -17 -39 -50 126 -23 82 111 -112 -17 -113 -114 -31 27 68 91 59 -8 65 -64 -49 31 -84 -33 -73 121 -15 -113 -93 17 -30 43 -112 124 38 -2 17 47 -45 32 -81 -64 30 127 -28 83 -36 -9 -1 -81 -61 127 -42 -113 -31 32 14 -76 56 -16 64 -17 -125 -87 -40 -54 87 -68 -48 65 -127 -6 -101 21 -95 -38 26 -17 -70 28 75 23 -83 -90 33 50 113 25 5 127 -18 -23 127 -123 29 126 56 -94 20 -100 -93 54 10 13 -127 45 25 -127 111 -111 19 -13 4 127 123 -122 -124 10 6 127 124 105 34 -31 10 98 -17 11 -16 127 100 88 126 36 32 13 -22 -71 38 -45 95 -77 121 90 13 -34 -114 32 -100 -47 68 -54 48 13 116 113 -86 -82 -31 64 -57 19 -30 106 19 -38 -7 17 -83 -5 92 -25 -65 21 -127 -49 80 72 42 19 -124 19 76 2 45 -127 -72 -41 -33 6 -50 -1 -22 -8 -108 27 -41 68 54 31 -117 -11 -1 -18 -78 26 -15 -94 44 -55 125 127 -49 123 116 9 -59 64 -109 -28 11 -105 119 36 -32 18 53 -112 -100 4 81 125 -90 56 -59 41 -91 -119 12 19 -57 -15 -84 -101 -104 -23 71 74 76 127 24 28 -39 -38 -11 -13 22 117 23 12 126 -25 -99 123 -49 13 33 41 -7 -106 21 69 -26 83 -27 -65 -110 27 -65 -39 -56 -19 73 47 -6 74 -23 28 24 -13 24 -33 37 -26 104 -51 37 -91 -32 -127 127 -100 -25 0 64 -8 83 127 -123 -126 -15 -26 65 -114 47 -126 93 11 -49 20 53 31 15 17 -47 14 -35 -87 -31 -52 79 68 -30 -67 25 -6 28 13 -27 127 -31 76 16 -27 123 66 5 -110 -65 47 -15 -62 -36 -3 52 -128 -83 -128 -88 -123 -89 -14 -62 57 -13 -17 54 -107 17 90 -100 -24 127 9 61 -21 82 124 -17 1 46 -96 -29 -36 -30 -18 -85 -68 -78 -41 -97 -127 -113 12 6 -86 39 54 100 -127 69 127 -37 110 77 18 -29 112 -27 -7 127 -41 -45 -10 13 -127 -22 -52 126 -8 99 114 -1 -21 -26 -112 127 -31 95 127 54 -1 48 -121 -68 -4 27 122 14 104 42 44 -15 52 68 -23 3 -104 0 -126 48 -4 -67 47 -38 9 -111 50 16 59 10 54 114 27 -38 52 -105 -5 -8 -88 67 2 -126 85 83 -48 -68 -38 31 31 79 93 34 -118 103 -19 39 -75 -23 25 -108 -35 57 -56 3 3 -29 -24 49 60 -128 7 30 -77 -8 108 -3 -23 92 55 -96 -97 126 67 -32 125 -40 63 6 -39 19 48 127 43 -23 121 10 -7 29 60 103 87 -127 -41 15 117 73 -127 53 -87 90 83 61 10 3 -35 55 -91 -30 -128 -17 117 -42 -70 -54 -5 1 -107 94 1 -74 36 -127 -67 20 -18 -14 -14 108 -122 -127 -20 -124 -105 -45 87 -59 -38 -94 33 22 -54 1 127 -92 -23 87 -23 -105 -54 -48 -10 -35 -62 -52 -118 46 37 4 29 -125 126 41 -7 -23 79 48 -126 3 -43 4 -77 -85 -1 78 -127 -14 -109 5 89 -63 100 42 -3 13 103 -80 17 126 -13 6 65 -38 -9 -66 6 108 -74 -38 49 -69 53 -79 73 12 -20 -105 27 -25 -66 21 9 -114 87 11 -42 -50 8 39 -56 -42 -27 -19 93 -82 34 116 -46 49 6 -14 121 1 -86 65 -22 -3 75 -89 -14 -35 21 49 -38 83 -90 -12 -26 -79 -22 115 -51 -20 13 -46 6 127 48 -96 -17 -98 114 -69 49 4 127 -28 76 -5 21 -75 98 24 -103 61 61 54 -34 14 19 -75 49 7 121 -13 -126 69 -79 97 91 121 71 96 14 -123 -63 28 -71 55 50 -63 -51 50 1 88 -12 20 -122 -82 97 21 -54 52 57 57 8 -125 16 34 -124 -13 -92 -89 52 49 125 -45 107 -34 121 -67 108 -64 41 -12 97 -118 3 94 -51 -42 -52 -93 -121 -36 19 126 108 58 122 95 30 20 11 -70 66 -74 11 18 56 118 79 -77 -73 -48 36 60 78 -92 42 -89 23 58 -83 35 118 -87 70 -32 95 -126 -52 78 89 11 80 69 21 12 -2 33 -86 -37 127 120 -39 123 96 78 117 -53 -120 18 46 -65 -12 51 31 -79 39 -13 106 -97 -17 -57 90 44 52 68 9 -17 31 -34 41 9 122 -20 44 -4 -72 65 23 -27 -5 -69 -107 -11 -45 -59 0 -90 42 112 44 -15 -7 48 -42 127 -27 39 82 -84 -53 -122 -48 -41 13 27 12 -59 41 42 -69 -18 0 -72 92 -41 -28 -4 -85 20 -21 -87 127 67 -99 83 -33 95 -65 21 -87 77 -44 22 5 44 -110 109 -49 -34 56 -91 0 -18 -35 17 -39 -76 46 102 -8 116 79 -74 -48 110 -71 3 9 -22 15 47 -9 87 -53 -16 66 -27 35 8 -51 -57 -63 14 -109 -52 -59 46 -125 37 36 54 7 -82 37 79 45 56 11 -58 64 66 -8 -30 -46 -67 42 32 -8 78 125 -18 21 -35 52 42 11 -30 -19 -23 -14 117 -40 39 -16 -36 36 59 68 41 15 116 -7 -18 58 47 -5 58 7 -52 94 59 -35 33 67 109 24 3 23 24 58 25 -65 52 89 21 -104 81 0 119 78 -22 108 17 2 50 -44 22 110 -27 123 -21 -72 31 -61 47 82 -11 -12 -42 87 -16 16 -23 -35 45 -41 -45 19 -6 -44 59 -11 30 100 18 71 8 76 109 69 18 9 29 64 59 69 59 117 -30 -57 125 22 -30 -20 54 60 -43 55 56 120 -46 9 7 28 -75 -12 18 94 118 2 56 39 60 -53 91 -49 -60 5 12 -58 48 -22 5 88 -22 -25 16 46 -13 -39 -31 32 30 28 10 26 33 -23 0 -16 -7 64 -9 -65 59 -3 37 -67 -15 6 -16 1 66 34 2 68 20 10 36 -26 8 4 25 62 3 -11 56 29 -9 -27 40 -60 100 -41 -16 -24 -15 -13 -103 2 12 21 -61 5 77 -31 9 80 30 31 22 -50 -44 39 -22 37 -5 -57 32 -125 85 -32 24 25 -33 71 22 -47 15 -37 -13 -15 27 -20 -7 63 74 -15 -24 20 46 -122 118 -6 -9 123 13 -99 -94 58 -10 29 42 -2 38 -62 -41 -46 11 -55 -12 100 -32 5 -100 -4 21 19 -126 -65 -51 10 126 -13 -8 -12 -5 -10 40 -8 -22 68 79 -4 -87 58 56 34 9 -126 -82 -46 -115 -63 1 7 27 -24 -119 -33 33 -21 79 27 -40 31 12 -31 64 4 -46 -3 -23 -52 89 -58 -77 3 103 105 20 31 -101 55 41 -118 16 11 36 28 38 13 -38 8 22 37 -102 11 34 8 -30 -39 -6 -63 9 -53 124 -68 103 32 -84 -2 -125 13 88 -55 4 -45 -50 -20 -81 47 -53 26 -58 11 17 50 -113 16 -4 94 127 -65 59 14 -16 117 -128 19 81 4 14 -60 -27 19 18 62 55 46 16 4 -12 -25 -50 -45 73 -80 -93 -21 20 -11 50 -93 52 -46 -44 -7 -37 53 -28 14 14 -4 -3 -21 -50 -76 -7 -46 -66 40 -21 -3 -45 -127 -24 -94 -9 -128 93 -14 14 53 34 36 -15 27 -29 -8 2 -120 17 -101 -10 -20 48 41 127 -46 -65 -11 -34 -39 -12 13 -55 -121 53 -5 39 52 -125 -34 126 16 -61 -3 50 83 -10 52 34 18 16 -55 -38 -5 -3 -29 43 -58 -15 -48 -22 26 1 2 -88 -72 -65 -102 18 26 36 62 -77 -9 9 -12 -49 -82 -80 -31 14 -69 -49 -46 -67 94 -26 79 -5 16 -3 33 21 112 -44 48 -33 63 -115 5 90 80 70 -52 5 -6 49 -16 126 -77 -98 -11 -51 57 114 -50 -82 124 -50 19 -124 -10 33 84 10 46 9 47 -94 127 -127 -34 -15 43 10 52 -103 -14 24 119 -92 83 -89 34 21 -71 94 -64 -24 -76 -49 -43 28 38 -2 28 79 -126 126 -15 -52 -30 -80 -128 -67 45 26 37 39 -39 -53 48 5 41 -33 28 55 61 8 -13 39 51 -78 16 -39 47 -6 -51 23 22 69 -46 121 -8 76 37 -47 -31 -45 -67 -103 17 63 8 15 18 8 61 77 42 16 -29 -10 83 43 -38 103 -128 51 61 -36 75 -13 -45 -20 -37 -25 20 61 -80 58 12 -70 5 -39 -95 -25 -35 -8 127 62 -50 114 -37 55 44 -41 -25 -83 124 -19 9 -1 51 17 21 -37 -8 47 82 31 38 28 -23 -85 -5 45 37 -43 73 0 71 -15 56 27 -71 -115 4 39 73 63 -71 38 98 -60 78 -58 35 52 47 52 -7 -32 41 -2 54 -124 -24 19 -15 40 38 79 17 70 -4 -29 -39 46 -110 -52 0 73 -47 7 21 -48 39 -12 -111 -10 -73 97 -83 35 -96 50 29 -21 -13 -57 -122 43 15 -22 49 27 62 50 127 -127 7 26 43 6 -59 -41 -59 -13 -68 31 -30 65 109 -52 -27 -117 -125 -92 127 -113 9 35 31 -110 68 61 22 50 118 14 48 66 -59 62 -46 64 41 -59 -6 -23 -9 -25 -73 -18 -75 -27 -64 -6 0 -128 -11 73 -54 -51 -33 -65 125 8 20 32 46 18 -30 34 -83 60 -9 12 103 -39 32 93 -123 4 127 29 -18 15 -57 -49 -44 -127 65 -98 52 20 -128 98 -55 -10 -67 8 27 97 96 22 -10 -64 87 18 77 -17 -42 -19 122 -28 23 43 114 74 64 81 86 31 -41 27 70 -88 -29 55 -78 16 47 46 63 47 -17 18 64 -56 -30 -73 -19 -79 -111 -4 -46 8 70 -101 -30 -10 -126 120 -50 5 -42 -44 -11 77 -50 -10 -57 22 -96 -28 -42 37 117 1 -15 35 81 -25 -40 -83 42 42 -66 -39 61 -64 34 37 -17 -118 101 -39 -8 -70 -74 5 -23 -6 2 61 10 82 -20 -63 -56 -53 -39 -6 34 -100 -127 55 4 -33 13 -16 -34 -100 -47 -66 42 -42 -114 -36 18 67 -63 2 70 27 16 -57 107 -52 126 -76 -62 65 4 -12 -124 -31 -2 18 -38 -76 41 -76 84 20 -62 -64 34 -48 -128 38 -95 22 38 1 -28 68 125 -36 -38 79 18 127 13 -46 -17 17 45 -111 -50 75 -127 -42 -61 8 7 -20 -60 93 30 -68 -65 -10 -49 10 -92 63 83 24 23 -47 -94 42 -45 -40 -9 9 -45 -37 -127 80 18 -4 -90 -9 -69 -71 -98 76 -27 24 8 -95 -23 43 -21 -2 -25 112 -85 79 43 -59 16 -55 -24 -10 -53 -11 47 1 4 -43 41 -9 79 -57 12 36 31 -56 54 -57 13 36 -2 88 108 -32 1 34 55 44 15 -54 -4 -98 -9 28 58 -4 -35 -64 -9 43 -70 29 -36 -30 44 -28 -44 -64 33 -11 13 82 -22 -28 59 83 29 17 48 -18 4 -47 36 13 -92 -41 11 25 -9 -1 -75 -54 7 18 57 -35 45 -29 -43 30 -36 -109 14 -127 -75 1 -1 -17 -36 -45 -24 -42 -24 -22 -7 -73 80 -15 -14 109 126 -123 36 67 15 64 15 81 -12 80 -29 4 -49 17 -15 48 119 1 119 21 87 -9 -10 34 37 50 8 26 26 -99 28 73 -82 -14 44 83 22 52 102 -65 -57 114 -25 84 -12 -33 -93 71 42 9 73 60 59 -7 37 3 -27 54 61 -38 24 -21 13 -76 6 -35 23 -75 25 70 58 58 118 -4 -32 7 92 -38 89 32 -83 -25 123 -10 -100 105 55 -48 14 68 35 -55 81 89 -17 -79 31 13 10 -91 24 55 -41 36 98 29 -65 36 27 0 -10 -96 10 -3 57 -5 -3 -48 -25 -1 -30 6 11 28 15 -7 38 -27 -33 54 21 45 -66 2 17 -45 -83 41 -17 5 26 -64 -6 -7 -10 11 67 -36 79 -9 -14 5 37 21 -60 -95 30 -106 -75 73 -1 46 6 -6 26 -59 -39 -29 39 -27 30 -35 76 -50 -38 13 26 22 -7 53 -10 -43 19 -46 12 -9 -16 56 -37 27 4 50 54 -47 54 -18 -79 29 28 -26 -21 -66 22 -54 49 -67 18 -51 -35 -106 24 22 -10 34 46 -21 126 25 -6 -62 -35 17 -37 26 -61 18 -14 27 -3 74 -29 80 -86 37 59 -24 1 19 -91 46 13 -33 14 -13 36 4 -31 84 -2 16 17 -72 42 -51 -106 -7 46 7 36 36 18 -36 -30 -75 31 16 -17 -16 76 23 -14 102 16 -9 3 -89 -28 36 -27 55 -31 52 -30 -23 7 119 11 29 8 -25 -127 -25 -10 95 27 -9 55 23 -86 101 -50 -71 -11 65 46 25 -5 71 4 -40 -85 -69 -88 -56 -115 45 -39 -34 15 -26 75 -5 -4 51 3 -66 -27 -92 47 40 -49 -47 -72 10 28 6 10 12 5 116 17 44 31 21 76 -122 -79 -32 -33 27 -90 33 116 90 17 71 125 -85 101 -88 -30 6 22 11 -94 47 2 -21 59 24 31 38 12 29 76 -2 101 6 122 69 -28 30 -19 -116 -10 -79 -2 81 -35 -21 33 65 -45 -76 -89 38 46 60 127 -43 30 67 63 32 -4 -23 -13 -100 -50 2 23 20 38 12 -38 -79 18 41 -6 -116 -30 36 -38 121 -82 -80 -70 15 3 -107 33 -48 1 5 -21 18 -9 46 79 -14 73 -92 89 29 -73 -79 59 33 -20 28 83 6 35 21 -57 35 -64 -77 -21 21 -17 -60 63 64 -105 8 -17 -18 127 -3 -5 -6 30 31 -54 11 126 2 -37 58 113 -2 49 52 27 127 -29 -72 8 -4 -54 -55 38 -15 36 35 -74 98 53 7 -124 41 -37 77 -33 -15 -42 -47 -48 -109 24 9 -27 -67 -56 84 58 -3 8 -41 51 -29 -99 -36 37 -30 -69 -11 21 23 -29 47 -98 103 88 -4 61 2 -2 46 -13 -110 76 10 25 11 42 -10 75 25 -27 -10 0 42 -4 -10 -16 -4 105 -33 -46 -10 -126 -33 66 -60 -45 -73 89 42 -5 -27 44 -36 40 4 23 -49 17 -87 -26 20 -66 -8 -21 -5 21 -1 -40 68 -24 -7 41 9 31 32 -18 26 -17 21 35 -17 19 -116 60 -101 45 79 -10 0 27 -5 71 -27 6 -15 -7 55 -52 -54 -6 34 67 -11 -47 95 -31 37 -9 -106 -38 -11 -73 47 100 -125 -116 -113 -31 -116 -99 -127 -22 -25 -127 6 -108 32 -122 5 -48 -113 45 31 27 2 -24 10 -86 -9 -12 -29 -26 -74 38 -81 -104 14 -50 0 45 74 0 -35 31 76 -23 123 -36 -3 -17 -77 47 -32 -50 82 14 33 11 -41 37 13 33 -46 8 -41 -93 -127 102 -34 -55 -43 -54 -54 -71 61 56 -80 51 40 -27 -11 -16 75 -10 -63 49 60 19 39 -31 77 -104 -9 -45 -35 -9 20 36 38 -21 38 -10 14 73 13 1 -48 93 -4 -13 99 -38 -3 -51 72 60 -7 87 -22 66 -28 23 -16 -48 72 -2 -65 -6 57 9 74 -48 -27 -12 66 -4 26 -11 8 80 1 -53 -2 24 33 15 -23 -4 3 -33 66 -24 -23 -33 -127 -70 -10 13 -35 33 -26 28 0 -55 1 27 -6 -33 -19 63 56 6 -88 11 19 44 27 9 -46 -5 15 -72 -1 23 -39 -20 79 0 -110 -37 -46 27 37 -69 45 -38 -30 -5 42 29 -11 34 -69 27 -39 83 22 14 -21 12 44 34 -34 36 21 11 20 -16 17 78 -80 19 -126 107 29 8 16 29 28 17 56 89 54 -41 127 4 103 -17 127 122 -11 -4 -77 72 -45 -104 43 35 39 62 -39 27 -11 -16 124 -83 -56 37 112 70 5 32 -5 18 -107 -53 21 -78 33 30 -126 115 -1 127 61 94 114 30 -11 92 -59 -45 -46 120 -40 11 2 27 62 14 -114 -36 -31 95 16 -1 104 121 86 54 11 1 -10 124 -27 -26 53 27 -16 19 52 -127 125 47 122 57 -36 35 -9 -13 123 -11 13 85 -33 18 -127 29 -47 -77 25 10 67 -21 8 -34 55 8 21 -29 -2 127 107 65 122 -29 3 105 -44 -24 -1 -2 1 -54 46 56 13 17 -73 66 -17 30 2 11 61 24 -21 -12 -64 4 45 54 84 52 -18 -80 22 15 60 15 -83 10 -19 -83 -46 -28 -31 37 55 -63 46 -16 51 53 14 -61 47 65 4 64 -127 47 -128 14 31 10 77 23 -56 -68 -111 -84 -43 45 -45 32 35 -33 -25 -14 14 22 -29 -34 115 -22 7 101 103 15 30 -50 -40 -110 -75 55 -3 -72 14 39 42 4 22 -27 59 13 -15 15 -97 63 97 -11 127 96 -95 63 -28 -19 40 -30 63 -4 -38 -96 34 -42 8 79 -71 30 84 -31 -89 -58 -8 47 112 -46 59 -89 127 -86 79 -3 -62 44 45 52 61 121 -25 96 -19 -19 -99 -8 -49 78 -65 38 60 45 22 122 125 8 61 32 -25 -64 21 -42 15 -24 61 -15 -17 -61 -126 -2 -27 -127 52 -29 64 52 -125 122 -128 6 -37 -50 1 0 57 -72 -52 -2 58 71 -106 -78 52 30 -89 28 6 114 53 41 -52 -5 57 69 -55 92 -61 -21 122 62 31 110 51 -34 46 60 -11 -53 126 3 -57 43 65 -31 105 45 45 -48 75 1 42 -16 -4 -127 -39 11 100 28 79 -91 -38 74 76 14 24 -126 36 23 -8 -123 36 19 -53 7 44 63 78 79 10 -76 29 49 -3 126 89 -54 112 2 -3 31 -9 -30 -30 -97 -18 84 7 63 91 -27 -2 -51 -8 38 -49 -6 -27 66 -111 127 102 -68 -9 18 -75 -46 -126 1 3 -75 -80 127 70 21 19 69 -14 120 67 -45 -30 -98 115 -6 106 78 -57 15 11 117 1 41 -31 -11 83 93 -6 73 127 -56 62 -57 84 57 -121 -102 127 67 -25 -110 120 54 -51 110 -57 68 91 119 38 21 -21 97 0 44 3 0 -87 55 -16 -95 -50 71 14 52 -35 40 -62 -14 -1 -19 -55 14 -45 -36 -34 35 -33 -39 -20 -74 -35 15 -80 -33 83 32 -15 -47 58 12 -25 -46 -27 -44 33 22 29 -31 -64 3 28 87 121 -41 36 63 11 -34 -2 -105 33 39 -73 -8 -49 -44 -14 -24 8 -53 17 45 0 13 34 35 28 -85 -56 22 96 -35 30 -98 -54 32 -75 26 -15 -128 2 -83 36 67 18 -68 -80 24 6 93 32 -2 -29 17 -5 -38 62 -14 -54 126 5 104 112 -26 38 18 66 -17 14 -8 1 2 69 72 -60 -10 10 15 1 58 50 -6 -76 7 -14 63 124 39 29 39 93 42 -52 48 50 73 89 65 111 28 73 48 2 37 57 -26 30 29 19 73 42 -103 126 -14 16 -70 -16 48 14 114 108 43 30 127 119 -37 25 106 21 78 52 99 46 47 68 21 -13 -3 -79 45 -23 57 100 65 72 85 102 11 81 73 55 -13 -59 23 -6 -57 -21 -3 -60 3 -11 31 -16 -67 -121 -50 63 -62 -29 75 54 -47 -61 65 0 -68 -32 -64 -31 -84 82 9 73 -49 81 34 4 -19 85 56 94 -41 -59 -40 69 126 0 -93 -49 17 -76 -101 12 12 -47 -73 47 30 30 -90 10 -70 31 64 -127 24 22 54 -10 -14 -22 19 -26 -118 54 -41 43 -7 -33 46 1 53 -11 -6 4 8 -24 32 -31 4 -18 89 -51 66 37 24 -8 -17 -21 40 -2 34 -56 38 65 34 25 8 28 57 -93 -122 -69 -86 -40 -21 85 5 -54 -33 -44 -78 24 27 26 5 22 -17 -11 -34 -6 -126 9 23 -35 25 43 86 94 44 -75 -22 -43 -128 -22 92 -100 75 22 -10 6 -44 -125 -3 -6 47 -99 80 21 8 63 -74 -1 74 -71 8 42 38 33 0 82 -27 1 126 110 -6 8 25 81 -21 -124 2 59 -62 -12 44 -110 42 -73 -32 52 6 29 -9 -46 -29 1 -87 79 -31 -41 36 109 -25 34 47 -125 26 57 34 9 60 36 19 10 -61 126 86 6 -66 8 -2 54 -107 -2 -3 -4 21 -28 61 -21 38 94 26 41 24 36 39 -42 23 33 -40 -18 110 -38 -10 24 -33 -27 -12 32 -72 -7 45 -3 -123 -42 -93 -45 9 -128 -16 -2 -7 42 60 -38 -15 -72 -12 -32 108 -1 -85 -29 39 45 37 -30 67 -123 -18 15 21 11 -2 37 121 -35 -63 17 -29 54 -22 79 15 127 18 126 17 111 -56 -89 -7 -47 126 66 34 32 75 41 7 3 -31 65 -7 -39 23 -110 23 74 43 -87 25 -26 -47 -15 -45 -127 -38 -61 9 58 51 -81 -55 -42 40 83 37 -18 -117 52 -119 -32 -15 113 -128 63 27 -113 -38 26 -2 -40 127 -62 -47 -31 58 122 30 22 -17 -59 -96 -66 100 12 118 -60 20 -115 65 -64 -90 -15 74 -33 13 -28 53 55 -15 22 115 6 -53 35 -8 45 25 21 -38 72 4 -107 -15 32 -7 -24 10 -30 46 -49 -49 -41 -18 63 -25 -7 -16 5 46 79 -52 10 26 -97 9 82 -4 -33 -31 40 22 -36 -16 -22 22 -19 -47 -25 -66 41 -71 55 -44 32 -43 32 28 -20 32 13 2 38 -72 -57 33 -4 81 113 26 -42 31 -13 -14 28 40 19 -68 -34 56 -64 65 31 0 17 8 -12 6 -15 13 -42 -74 4 -20 -19 104 -6 33 12 -92 39 86 -87 27 -34 16 77 28 44 39 126 -13 45 87 -47 -5 17 101 -40 35 -23 127 -101 33 5 -30 61 28 33 25 -70 -127 108 63 15 126 5 15 70 -34 14 -58 -3 28 53 -23 -3 25 20 -15 75 -6 -40 100 23 -20 18 27 79 -23 13 -30 -62 36 17 -96 -3 -51 51 60 -75 -59 118 -20 -11 -66 -10 79 -54 125 76 69 84 -19 28 33 45 26 -88 13 36 -46 25 46 -1 35 63 7 70 -78 5 -20 11 23 -42 33 29 125 -88 -9 -90 31 96 -6 20 -30 78 -16 -12 64 23 -26 -37 29 34 -20 -11 -16 -10 -39 127 43 -39 -14 3 -84 3 -10 38 -16 -9 -59 91 -4 -68 36 10 -109 -7 18 -24 126 -44 16 68 -51 59 72 -39 26 -29 -31 26 124 -47 60 62 -17 -11 -20 84 26 12 -80 -31 -38 56 -82 19 13 -26 -66 42 -25 60 8 -60 -7 23 10 56 11 74 -100 41 24 -7 -93 -50 48 -112 33 -29 -32 -67 127 -35 -13 -9 14 35 89 44 75 -62 -19 -15 -73 -46 81 11 -9 49 -44 -85 39 -87 127 24 -24 -91 127 -47 62 -8 -69 97 -16 -128 -14 93 -39 -3 -21 23 20 -53 -60 -69 82 -105 -31 34 -33 -29 56 -7 5 17 -83 37 -48 113 31 103 -55 -21 22 -33 16 35 26 -38 -68 61 -7 5 36 -47 -19 -65 -90 -42 33 37 -20 -20 30 -30 59 -12 61 -87 -2 -122 36 -78 17 -43 126 -90 -21 107 -74 10 -17 -7 -103 -127 -96 15 52 -115 73 1 22 -2 41 -50 16 46 -93 124 -22 -118 54 88 -39 -27 52 -3 13 -120 64 63 -102 13 51 30 -23 0 -73 -58 4 32 -25 -41 36 -55 32 -44 40 12 -66 -127 -24 -4 -124 77 -46 12 -20 100 -76 -53 22 10 -57 41 -112 -77 -85 -94 51 126 -111 90 -110 -126 -105 -29 -99 -24 30 -121 -39 -103 -16 -125 -88 37 -40 -81 -54 19 -47 2 -76 -70 -85 -62 -22 -62 69 -39 80 -37 1 50 -28 -51 -2 29 33 18 -58 75 -38 15 127 92 4 -72 -76 0 -61 31 55 -117 -62 55 -70 -27 51 -54 28 54 75 -15 -43 31 -5 33 -34 39 -53 -21 -45 -85 76 -40 13 32 4 25 -78 13 90 28 2 -40 84 64 -23 8 28 17 -78 -61 -42 120 -34 -26 9 -51 -49 20 -92 24 7 -26 46 -57 -30 -58 -18 -126 -12 60 57 -62 -12 53 73 -26 -71 70 71 75 -55 -9 37 33 -30 -24 -23 15 58 -17 -126 54 -63 -40 66 -15 -40 -127 -12 8 -34 -105 13 -4 -11 -43 -23 -35 77 59 -8 -20 71 -18 63 -7 46 -114 11 -60 28 31 -77 124 -62 18 -86 -67 -14 -55 50 21 -52 28 -62 10 -33 -10 14 -37 -78 -77 -23 -79 28 7 -30 -12 127 -66 -2 -50 52 -11 1 -54 -38 -3 -3 93 5 69 -11 54 96 29 -38 35 -46 23 -11 -2 107 28 -16 111 22 -57 -2 16 -4 -6 -25 18 66 16 -10 -13 69 26 -28 71 -9 56 -25 51 86 18 21 71 -10 60 -4 -20 23 30 31 3 17 27 -13 -37 -23 -41 -92 4 76 9 52 -41 -43 55 82 54 -61 54 62 -27 113 -4 35 -11 10 61 -15 -13 74 -100 36 5 34 19 36 5 97 67 15 83 38 -27 70 20 -10 3 16 -27 -20 25 2 3 13 33 -22 23 -1 -2 17 -26 46 5 23 8 43 -2 -34 75 -37 0 71 44 -29 19 13 3 41 -5 9 -14 -34 -9 10 -31 -40 23 11 -5 18 18 1 31 26 -12 7 -5 63 -20 -8 23 4 31 21 -13 -27 -48 -13 -14 29 -2 11 18 14 4 19 -41 -21 -10 6 -6 1 65 17 -63 -1 -55 -19 -7 28 2 13 40 6 -17 1 15 18 16 47 11 -87 -10 21 9 -14 12 8 14 -22 -17 10 1 -23 1 -20 -22 -6 44 -5 6 37 44 -11 62 13 0 -35 -63 20 -32 -27 -30 20 35 -25 -35 -20 40 -30 16 11 63 -25 -13 -55 -14 45 -13 -27 25 -10 -10 17 1 14 -17 -30 -68 41 -9 -5 -19 -33 -61 -34 24 59 28 -32 43 -40 11 0 -18 14 28 -3 25 6 -37 14 10 51 43 26 4 19 12 -35 70 -10 49 -33 -14 -22 -96 22 1 -18 8 16 3 3 7 30 28 20 15 0 4 -4 -6 -8 10 9 -12 -38 -34 -31 2 29 14 12 11 5 12 22 26 48 61 67 81 91 99 98 91 84 39 -3 11 16 -4 127 127 115 60 25 13 13 15 5 2 11 2 -1 -1 14 20 14 8 8 10 -10 -36 28 29 35 32 32 36 31 24 24 27 12 13 14 8 8 25 27 0 -8 -3 -6 32 -18 -13 -22 -46 -63 -70 -72 -81 -70 -41 -13 -17 -15 -7 -3 -6 -6 4 1 -9 -35 -52 -48 -25 -1 18 12 -2 -5 5 32 49 65 67 50 43 37 20 13 11 -16 -11 -11 -68 -13 24 27 28 34 35 26 15 8 8 10 2 -4 -12 -36 -68 -72 -21 28 47 54 126 -10 -30 -24 -33 -22 -20 -25 -28 -30 -34 -41 -44 -40 -37 -32 -23 -15 -12 -6 -13 -28 -1 -51 -70 -62 -27 -6 -8 -3 -26 -47 -46 -39 -18 -7 -1 -7 -7 3 -18 -37 -18 -1 2 -22 -23 -38 -37 -42 -38 -38 -32 -8 15 24 22 12 -12 -39 -53 -42 23 113 126 121 107 -12 -6 6 19 17 9 6 9 5 -9 -8 -7 -2 10 36 43 26 -2 -2 3 -12 -45 -71 -128 -128 -110 -67 -62 -44 -38 -50 -64 -60 -60 -55 -53 -38 -18 -14 -21 -33 -36 -38 11 -48 -24 22 40 56 60 77 97 108 86 46 30 23 9 -10 -27 -39 -50 -62 -60 -44 -14 21 31 40 30 35 43 37 22 12 20 28 24 19 19 18 11 8 1 2 17 29 27 14 21 9 7 15 22 28 21 7 -8 -14 1 3 -3 -9 -22 -24 -30 -29 -17 1 23 -86 -106 -101 -89 -77 -71 -58 -52 -50 -61 -67 -65 -67 -75 -71 -68 -73 -92 -96 -82 -66 -55 23 60 82 58 26 13 14 16 20 21 28 32 28 24 43 44 34 -1 -40 -16 24 40 27 21 6 -8 -5 8 19 5 -25 -47 -52 -37 -27 -20 -10 -4 7 17 21 31 64 52 -29 -34 -26 -33 -29 -30 -36 -37 -33 -27 -19 -35 -38 -27 -41 -44 -38 -44 -70 -81 -72 -90 3 -4 -13 -23 -31 -32 -32 -42 -62 -66 -53 -42 -26 -19 -9 -8 -9 -9 -21 -23 -20 -21 -17 -26 -63 -104 -127 -126 -108 -113 -111 -118 -125 -118 -116 -113 -125 -127 -128 -122 -126 -126 -127 -121 -65 -54 -59 -55 -49 -36 -25 -24 -26 -29 -28 -9 5 0 -9 -19 -29 -77 -115 -94 -79 -82 57 76 61 101 85 47 24 29 29 24 21 11 -4 -13 -20 -24 -17 -4 -23 -30 -33 -18 -37 -34 -32 -26 -27 -34 -40 -40 -44 -40 -33 -32 -37 -36 -26 -26 -31 -26 -10 -8 18 46 -4 15 19 36 55 81 84 88 70 43 27 20 18 22 22 6 -3 4 0 -8 -31 22 46 55 69 56 42 48 71 71 27 -10 -20 -34 -20 -14 -20 -8 2 2 3 -4 -17 0 -121 -96 -63 -46 -36 -27 -35 -37 -43 -53 -47 -30 -29 -30 -22 -32 -39 -44 -34 -20 -4 -4 -38 -13 25 41 55 58 59 57 51 48 46 39 40 35 25 21 19 12 16 34 59 39 33 -6 -22 8 21 20 27 37 31 17 12 24 37 39 45 30 21 28 12 11 35 36 -33 -19 -6 -12 -9 -4 -6 -10 -9 -19 -22 -8 -12 -19 -23 -20 -4 12 9 5 -2 -35 -20 -6 -10 2 8 3 -6 -5 8 15 27 24 7 6 8 5 -1 -47 -45 -54 -104 -128 13 15 9 17 36 58 83 92 76 52 34 16 9 -5 -6 23 45 10 -3 -2 15 28 -64 -53 -37 -14 0 -15 -19 -10 -10 -24 -29 -57 -59 -49 -30 -12 12 49 48 14 -32 -43 1 12 10 8 27 30 26 27 16 0 -10 -13 -11 -13 -16 -15 -18 -22 -24 -25 -27 -38 13 12 16 18 19 34 30 14 21 33 30 29 26 20 12 13 13 15 9 12 -1 -27 -44 -41 3 -11 -9 6 -14 -26 -24 -19 -20 -18 -14 -2 6 18 17 16 38 43 27 -6 22 11 23 44 40 43 44 54 61 62 55 51 51 48 43 30 25 33 36 31 19 -18 2 -22 -45 -60 -61 -56 -44 -35 -24 -10 -3 -4 -6 0 -3 -1 6 18 20 18 27 26 -52 -47 -41 -41 -46 -49 -42 -40 -40 -33 -34 -33 -29 -27 -20 -5 1 -6 -20 -22 -30 -23 21 10 16 30 40 38 44 40 33 31 35 32 38 46 48 49 56 88 101 127 127 116 38 29 36 30 25 30 29 32 38 44 40 39 45 50 44 35 34 38 27 32 38 59 -39 -21 -7 -14 -34 -38 -41 -40 -25 -19 -16 -13 -11 -8 8 27 23 -24 -43 -18 32 117 -14 -6 17 21 35 48 45 37 27 41 56 65 92 120 127 127 123 119 112 111 100 87 -1 1 2 -12 -9 -6 -3 -4 -7 -12 -14 -15 -24 -35 -51 -71 -81 -98 -116 -99 -68 -25 -23 -37 -52 -45 -49 -60 -65 -58 -38 -21 -14 -9 -1 5 -5 -14 -6 -11 -20 -13 -25 -127 54 0 -9 23 76 113 125 127 120 127 127 127 123 105 84 59 43 26 14 12 12 -14 46 -4 -23 -13 0 -2 -9 -10 -23 -27 -18 -34 -17 -15 -25 -28 -22 -2 -7 -14 -15 4 -44 -78 -88 -80 -65 -49 -33 -17 -2 -26 -42 -42 -52 -53 -47 -38 -35 -45 -32 -17 0 -20 58 101 107 107 90 69 48 38 40 43 42 36 38 34 14 7 13 15 18 17 5 0 20 -23 -38 -58 -37 -31 -47 -44 -36 -47 -48 -39 -38 -40 -28 -38 -28 22 41 33 39 85 -74 -29 -27 -27 -22 -13 -15 -17 -11 1 5 11 8 3 -2 2 -7 -50 -80 -89 -108 -65 7 -1 9 -11 -5 10 19 16 15 11 8 5 -6 -16 -16 -3 2 -10 -9 -11 -1 5 6 0 -1 -3 2 5 7 9 10 7 7 3 5 2 3 5 5 -12 -30 -21 4 -1 4 22 36 49 44 23 5 -8 -1 6 2 -1 -2 -12 -38 -68 -62 -7 33 9 -24 -44 64 88 66 29 1 1 -12 -21 -25 -23 -18 -27 -36 -53 -76 -92 -103 -83 -68 -84 -89 -50 -79 -50 -32 -23 -36 -32 -14 7 8 6 0 -17 -28 -22 -5 -2 -3 -19 -25 -28 -58 -57 -18 -20 -26 -32 -46 -57 -43 -34 -31 -19 4 -11 2 17 19 43 71 47 -35 -103 -101 -3 -104 -100 -40 4 45 33 8 -15 -50 -65 -79 -93 -109 -123 -111 -116 -115 -67 -70 -75 -82 -56 71 84 102 115 107 110 127 127 127 127 125 103 87 80 52 50 59 52 33 34 31 38 -37 -74 -49 -19 -35 -49 -56 -57 -32 -30 -36 -29 -27 -35 -50 -58 -62 -57 -45 -35 -24 -13 20 22 13 9 18 21 22 26 29 38 38 32 25 25 26 23 21 23 16 13 -4 25 28 2 -20 -30 -19 -15 -22 -23 -21 -26 -49 -54 -59 -68 -83 -82 -70 -88 -62 -40 7 44 -85 -78 -47 -51 -41 -22 -14 -12 -24 -32 -25 -23 -14 -4 -5 -9 -9 -11 -9 -8 -3 -18 59 66 67 38 31 35 31 38 45 46 62 62 65 61 73 87 88 74 68 68 63 14 33 38 33 45 48 43 43 54 62 66 51 42 38 50 70 85 86 78 86 102 112 126 -15 -7 -11 -9 -4 -10 -21 -26 -22 -28 -31 -35 -42 -47 -51 -40 -39 -59 -81 -87 -78 -59 33 47 48 29 -3 -5 13 25 35 47 43 32 21 8 -15 -31 -35 -27 7 41 39 -16 37 -5 -39 -34 -25 -18 -11 -9 -22 -40 -48 -50 -58 -57 -41 -16 10 16 62 98 110 121 -10 -20 -43 -53 -61 -66 -64 -51 -39 -57 -80 -92 -91 -84 -62 -40 -20 0 -8 -44 -65 -114 -18 -2 50 77 75 74 70 77 84 93 94 89 84 76 64 48 41 41 35 32 25 23 -7 20 45 50 44 37 33 45 67 62 64 67 73 76 78 79 88 83 70 86 106 106 5 16 29 42 52 56 58 52 49 48 39 35 39 41 45 51 60 60 64 68 71 42 -91 -97 -81 -71 -80 -73 -58 -43 -43 -33 -23 -23 -17 -6 9 4 -8 -24 -40 -44 -57 -41 -94 -47 -7 -7 -16 -26 -24 -24 -28 -31 -29 -35 -33 -31 -21 -7 10 16 16 -10 -45 -82 -50 -61 -49 -34 -18 -11 -14 -23 -32 -28 -32 -32 -35 -38 -37 -31 -17 1 1 -2 -39 -65 42 40 43 30 31 30 26 15 7 6 18 11 7 -4 -7 2 22 28 28 19 20 -35 -27 -25 -56 -83 -86 -73 -80 -76 -67 -49 -43 -42 -36 -22 -11 -7 -7 -14 -12 -6 -14 -27 12 26 14 15 23 21 10 6 6 11 17 12 18 24 24 28 27 34 55 64 66 82 8 -27 -50 -35 -29 -22 -7 4 24 36 25 2 -1 -7 -30 -36 -18 39 70 23 -43 -37 15 30 37 42 36 28 28 32 34 31 24 30 23 22 22 25 28 43 49 72 103 121 26 7 -6 -8 7 17 26 29 21 26 31 32 49 68 88 97 101 107 94 73 32 -32 26 13 -25 -35 -24 -18 -31 -35 -22 -11 -17 -3 9 16 11 17 29 77 110 120 127 110 -30 7 24 39 54 37 9 18 33 44 56 64 66 72 78 66 67 72 76 41 11 -24 22 59 92 78 72 63 69 50 21 -1 -9 -18 -21 -23 -34 -44 -54 -60 -65 -64 -59 -25 -128 -126 -23 -22 -42 -50 -42 -34 -33 -36 -18 -21 -14 -25 -31 -27 -39 -35 -34 -51 -52 0 -1 14 27 19 13 5 3 -7 -5 0 2 16 23 28 24 42 82 127 127 115 2 -112 -25 -36 -34 -42 -43 -39 -30 -21 -39 -54 -66 -76 -67 -59 -46 -23 -3 19 17 18 27 27 9 2 -10 -8 -5 -11 -16 -13 -12 -20 -18 -25 -15 -8 -1 6 21 35 52 37 16 -3 69 9 -24 -28 -18 -9 -10 -2 4 8 10 15 14 5 6 7 -6 -44 -47 -46 -28 13 -7 16 38 36 39 44 43 32 31 33 29 44 62 60 34 8 4 18 21 14 16 71 10 37 71 59 64 55 56 53 67 75 70 60 47 44 41 47 41 38 11 -1 -12 2 12 -5 -25 -23 -33 -40 -45 -33 -30 -36 -34 -43 -25 -11 13 27 19 -56 -118 -94 -55 -75 -71 -51 -25 -20 -15 -6 2 11 13 15 16 26 35 50 51 44 41 32 29 45 67 46 15 4 14 11 20 32 33 32 31 21 13 16 21 20 14 20 23 18 24 28 54 75 26 37 -7 -83 -128 -128 -119 -69 -22 14 23 3 -23 -21 -1 11 17 15 19 19 29 40 -96 -80 -53 -36 -31 -36 -34 -34 -33 -32 -21 -23 -17 -18 -19 -12 -6 -4 12 14 18 66 --14 10 25 43 1 -20 -26 -40 -33 -23 7 18 17 2 4 0 13 -11 -42 -54 -3 34 -24 1 1 --125 127 127 -128 -65 -128 74 103 -128 -128 127 108 89 -127 -128 127 127 127 -123 127 127 -128 -73 127 --127 diff --git a/labs/rnnoise-model/voice.rnnn b/labs/rnnoise-model/voice.rnnn deleted file mode 100644 index 6087b2b22..000000000 --- a/labs/rnnoise-model/voice.rnnn +++ /dev/null @@ -1,22 +0,0 @@ -rnnoise-nu model file version 1 -42 24 0 -2 -7 5 -3 -2 -18 0 6 -3 1 5 1 -18 -2 -2 8 -8 12 19 -10 -43 8 5 3 -13 9 23 -8 16 29 -9 -10 1 -13 -20 39 0 18 -22 -15 -46 -1 1 8 10 -25 18 23 -30 -1 42 -8 6 -18 -13 31 3 2 -32 9 -2 -28 -44 -29 -41 23 14 7 -37 -35 -11 11 1 -18 19 15 -7 19 3 10 -7 34 4 -20 16 53 -37 -62 27 48 2 3 29 -31 19 -26 5 -37 1 14 2 -68 -9 -63 -8 -17 24 48 22 -23 -13 -62 -9 9 -12 -22 -56 9 -53 -25 -9 -5 18 11 -9 41 -16 -48 16 -48 -2 -5 -19 73 -19 -36 -18 -25 8 -23 80 -45 38 1 -65 -40 -59 -27 -90 -122 29 -66 -2 -56 -28 -124 -10 10 -17 123 67 97 34 -86 -78 -20 -110 -110 -1 -6 -72 98 89 -21 -37 0 -6 15 127 -17 11 121 -128 127 65 30 -102 -86 50 -20 15 -69 -88 -72 -86 69 -58 -100 -43 -2 57 -99 106 -102 120 -125 -101 126 74 100 -50 -73 -61 -99 -111 -126 -53 -87 -18 71 -125 -26 31 -101 -7 4 56 -95 0 76 -55 -52 79 18 51 -99 3 -74 2 -87 -10 -26 -127 -10 33 -90 75 126 1 64 -22 -20 28 23 19 106 127 -76 70 -41 80 9 -125 89 -63 83 -48 4 -41 51 126 -30 -68 72 -126 65 30 -18 -13 126 114 -82 19 -124 107 28 32 14 -4 35 127 18 -38 55 -12 -122 119 -79 127 -53 59 31 120 -76 -117 17 105 13 -128 127 -100 80 -49 68 -12 34 59 -61 2 55 23 11 4 118 125 86 72 -127 -60 -72 33 -67 19 -63 92 114 47 12 -125 32 40 -82 -127 93 54 122 112 -24 -112 31 120 18 -57 -54 -20 -122 61 -11 -97 94 40 -126 -22 -6 40 -87 -126 28 25 127 44 -46 -17 122 -13 -33 -40 115 15 -61 127 -32 49 84 27 -68 -50 12 95 -93 -100 126 75 24 65 -55 32 -92 126 15 -122 126 -83 -67 -122 -128 -7 -12 75 95 -41 127 -55 48 -126 8 123 80 -3 -31 -126 95 -72 -123 -48 127 58 -35 91 -128 36 95 26 -79 -85 127 17 -102 -109 23 86 -19 85 -33 -112 98 114 -10 -124 -61 77 85 84 -121 -125 48 -25 -99 -126 -36 -69 -86 113 99 -7 127 -127 -12 127 -82 -70 79 -128 125 -87 -121 -125 -128 46 -94 78 -47 46 28 71 -127 54 83 127 120 -127 124 126 26 103 -106 -54 89 -38 105 -88 -75 -80 4 -71 -38 -63 25 52 104 -10 69 102 -50 126 127 -70 72 49 127 -123 34 -76 14 -93 -117 81 -67 127 5 76 100 -98 -68 -116 127 -45 -128 -77 18 12 125 -87 -20 21 102 -29 -53 10 48 -8 101 22 -4 22 -12 127 -87 -126 51 -128 -119 -122 66 78 3 32 60 -28 40 30 4 56 56 18 82 -104 58 -47 -56 -41 -47 -113 127 12 -19 -95 56 16 51 -127 -51 -118 29 9 -16 66 -33 11 121 56 21 -70 10 -20 -21 -11 76 -29 6 71 -35 -62 55 -52 -2 -108 31 -34 -33 73 121 41 -123 -67 -80 -18 -44 -2 -35 -105 -59 -69 81 -86 55 74 61 -57 -117 17 -1 37 20 -84 -7 -77 -10 35 15 3 70 -39 4 26 -12 58 23 35 -80 -14 -7 -85 32 -127 -21 -113 -98 69 96 -47 -67 124 9 -1 120 12 -71 -9 44 -31 113 6 13 9 -44 -13 31 -21 65 2 -45 15 51 15 92 26 34 10 32 92 98 7 108 -15 56 -19 51 -45 79 -8 11 -28 -31 -11 -9 40 38 -57 21 18 34 -125 -46 57 -7 -23 -50 45 70 38 12 -28 -51 -4 61 -123 49 -59 -12 -80 59 19 78 45 -31 -52 33 -38 127 -115 49 -19 -32 85 -10 77 26 -77 -69 104 -112 -91 26 -78 44 -65 -23 26 -15 -118 -127 79 -126 -4 -37 33 -11 14 52 -15 18 -69 -55 -76 93 -12 -69 -44 15 -18 -63 -15 94 -99 77 -46 111 -13 -77 14 -43 0 68 -37 93 106 -16 -91 127 -37 13 -27 -39 -50 17 27 115 125 111 -117 22 -128 16 127 127 47 -18 -54 -24 -115 -99 -47 -15 66 127 32 91 46 125 86 66 127 86 -101 -52 -127 122 126 93 100 17 -126 98 -99 -81 62 -15 69 90 -17 75 -6 127 121 -61 -41 -24 10 115 99 44 -73 -41 121 17 38 33 -40 -8 56 50 -64 -60 98 -10 -56 -62 80 123 -13 15 23 80 -127 81 127 69 -67 -16 -85 -14 -38 59 -61 -56 32 127 -40 4 40 33 33 6 117 -35 -4 71 -6 92 126 66 83 17 -87 -31 7 17 -8 -103 0 121 -34 -54 38 50 66 -98 -25 -17 49 -49 121 -58 -92 -87 -1 -29 127 63 13 91 0 111 -59 26 -28 127 -19 -118 -11 36 124 29 16 26 50 26 9 -40 82 -25 39 -78 -23 1 -25 -26 -13 -113 17 -10 -19 -18 67 -24 -28 127 4 56 17 23 13 83 -5 -27 48 -15 10 -65 -46 -22 47 28 127 25 12 18 --11 127 -60 4 127 125 20 -58 -127 22 -74 41 103 41 25 -125 93 -59 -127 -26 -1 -128 41 -1 -24 24 0 --10 -117 52 91 -127 -32 -128 -96 50 -114 24 25 54 28 -122 -127 -97 -125 -27 -20 -70 21 -10 17 123 50 126 7 -121 32 88 2 9 -116 37 -84 17 32 -26 -120 -31 21 33 -54 -50 -47 127 -36 -109 -100 -16 47 -114 -120 -65 86 26 121 -77 -22 43 14 4 40 -122 122 6 -43 -128 50 -14 -5 -126 -97 23 -121 -58 68 -10 -111 -122 -39 127 -25 -103 34 -55 -50 37 4 -126 96 -37 127 -26 127 41 -57 -25 127 14 98 5 22 6 -83 71 -77 96 -18 -126 -100 26 -11 45 12 23 127 -51 126 3 99 49 14 26 -27 16 -50 34 34 73 -82 -10 7 48 -90 41 -2 19 40 -16 13 -19 57 -65 60 -37 -126 74 -56 -25 96 -115 -39 -79 -47 73 71 125 22 41 51 -124 -123 -127 50 127 -39 23 92 -69 126 108 -125 -128 -95 -88 -86 -85 47 -72 -45 -100 -127 126 -112 127 14 127 66 -127 14 -34 32 21 -90 -56 -43 -5 123 -85 26 -13 -94 15 -23 -110 59 -12 41 16 40 -59 -20 -14 27 65 -117 -126 35 -42 -84 -23 -125 -90 -118 -128 -127 32 126 -127 -66 -126 -126 -82 -53 -110 -69 -128 -50 -44 -35 -38 -110 54 93 13 -16 -71 -128 124 -118 -13 125 -84 -56 53 -16 -93 -43 -113 10 87 68 -123 -34 43 83 35 -20 -39 63 -54 122 -45 -114 59 -120 2 -35 -78 127 97 54 -78 -48 48 50 -123 40 127 124 25 127 58 -63 94 -63 -46 -58 -37 126 96 121 -64 1 84 106 14 127 102 -57 31 27 -21 126 51 -69 -127 -31 16 20 -121 57 -32 -50 6 41 101 -125 79 -9 42 61 -60 54 33 47 -90 35 108 35 80 -49 50 11 77 28 -9 9 -34 -13 72 -98 -17 -51 -31 -15 87 -12 -71 -30 22 87 -81 -24 -68 22 -36 -69 -42 -123 -41 127 -59 -19 -24 31 -52 51 31 127 -97 88 99 -21 91 39 46 -53 60 -4 -87 -20 -27 47 4 47 -40 -41 4 127 -3 125 77 124 71 98 -12 -49 -44 -9 -46 34 -20 35 42 -36 0 -55 58 -12 33 -6 -49 37 13 2 5 20 -59 85 -81 92 47 127 30 -59 -31 -66 -3 -124 -112 -7 -23 -94 126 74 9 -120 72 47 24 67 -68 -6 19 127 -76 52 -17 -11 -116 -113 -73 -35 14 75 -32 17 20 117 -9 127 113 69 -6 -39 -16 24 91 -54 -37 100 88 25 -39 -50 73 -90 67 88 -39 -58 118 -17 45 -71 -80 -35 120 -20 -59 -45 -11 -109 74 -15 -17 99 43 123 1 13 43 19 -15 -1 -109 -46 -13 -2 -53 40 -37 -120 31 -124 121 4 96 53 -84 20 19 -127 -6 -27 58 60 9 46 127 -8 -26 56 -3 12 -39 66 99 -128 -53 -6 -20 -36 31 -106 -21 -24 -64 -1 -78 -37 -20 10 -38 22 -31 16 -43 -59 -51 -3 -20 4 123 127 -127 -127 97 -53 -6 -80 -128 73 -37 -12 -14 -126 -18 21 122 -8 8 -125 -73 -128 -101 -22 -26 61 -126 9 -21 -54 32 -120 17 -93 -76 17 -74 59 -45 -49 -40 14 -127 -59 53 -16 -79 -32 6 -22 40 -37 93 90 0 6 92 -3 -10 -25 33 52 10 45 39 -5 97 66 -43 50 108 -45 25 112 -127 11 127 4 72 -24 -21 127 -12 -82 52 -88 -2 -56 -33 -34 28 -19 113 -31 -125 3 -82 -12 -28 -98 -90 26 126 -98 -46 -74 -89 -103 73 99 41 -38 -67 53 -128 72 -60 -69 -29 -7 -72 -116 15 44 -14 27 -65 15 -63 74 41 -82 16 110 -96 95 -15 -57 51 29 -29 0 -52 103 77 -49 -74 82 -21 -47 123 -126 -57 -103 -114 124 4 -51 59 -51 108 51 55 10 36 -27 -72 -88 127 127 -51 -40 -80 -126 94 21 4 -35 104 111 -31 61 29 -4 -95 122 -125 79 -10 61 -20 -20 -65 -82 43 45 -31 -34 -48 -16 36 37 -18 -25 -15 51 -53 4 23 61 -21 -80 57 -81 -52 -34 127 35 -7 109 -66 -34 102 28 127 43 -20 110 39 -53 86 -42 111 -7 -88 -42 -125 53 91 -12 -51 -126 -40 -46 23 97 -125 -123 48 -7 50 -41 23 118 52 -1 127 102 -85 -14 125 68 -118 -72 -127 -103 46 -78 -118 48 -125 84 -120 82 -100 -128 47 36 -73 13 -125 -11 70 -18 48 -40 -32 43 4 37 125 -16 19 -43 -79 46 -39 -4 13 -46 -71 -15 -127 12 4 -21 10 125 -80 31 -67 123 -30 46 36 20 31 -49 37 29 -8 -50 -43 -104 2 -66 -33 39 32 -81 -2 27 -11 13 -82 7 39 48 -17 -23 5 24 16 26 44 -4 8 -32 58 1 -60 10 65 -4 -66 -9 -40 47 0 -28 -125 -126 11 -93 37 45 -115 34 -75 -22 14 -51 64 -4 -84 25 -116 117 -126 -124 9 127 -69 45 -67 -118 2 -21 87 -127 -6 62 -116 -54 -57 -29 100 88 -34 -27 -6 -8 -120 72 13 9 -126 34 -114 15 39 -15 -99 -80 -93 76 -62 103 -106 -111 -6 -37 -101 35 -82 67 13 71 -4 -47 -52 44 -120 85 49 38 23 105 -29 -120 7 -127 -7 125 33 -123 -52 -7 -17 -117 110 31 14 -67 -52 -100 -46 -86 -61 -17 -4 76 64 -68 96 64 78 -4 -47 -9 112 -26 -30 54 -79 22 -80 66 126 96 82 -15 -37 127 100 15 119 -30 80 -126 -40 67 -71 108 48 -27 82 -36 22 -5 55 -25 29 -23 127 -11 -33 127 48 90 127 67 127 86 -64 123 23 -120 97 2 127 -23 27 -90 10 -34 70 -31 87 11 -15 -20 12 -125 -124 123 -78 -76 -126 121 7 -50 95 35 -127 124 2 30 -4 -127 -13 87 -107 -6 -34 -78 62 -92 31 77 -44 19 -20 -122 -27 -6 -87 61 -9 -7 22 9 43 -18 -73 67 -124 -68 -12 67 46 117 -127 -14 -16 -127 0 -107 -8 36 -57 -9 -107 -93 -92 53 -25 127 35 127 -14 52 77 -55 58 -108 -51 45 -17 37 2 -65 121 21 14 5 4 -115 120 125 -58 68 7 127 62 47 18 43 17 -42 18 0 -5 7 17 0 -75 55 42 -42 23 28 -6 49 12 47 64 5 43 82 64 -79 36 10 -30 127 -99 55 74 91 -83 -57 70 20 -51 108 -7 -32 29 -81 82 -128 83 73 65 -46 -40 -29 17 5 -30 42 -121 33 -44 11 116 -55 50 64 16 -2 51 -70 33 -126 -85 -55 4 -17 12 -1 -55 -26 -63 14 23 48 -6 -64 -11 27 -16 -2 -37 -7 -86 -46 -49 37 28 59 -62 22 19 17 121 -105 -17 -30 -79 -105 93 33 126 -43 -36 -27 -37 -92 48 -128 -90 -127 -115 -74 -69 -34 8 64 -70 -63 -28 -11 6 99 -98 5 46 49 9 3 1 -82 -13 -127 37 14 -30 -21 -12 -51 -49 32 -41 75 40 80 -46 -73 26 -6 -2 49 -25 39 69 -55 -9 39 49 -58 -16 127 -66 -1 -87 46 -29 -26 -63 24 13 -64 -66 -111 -70 -15 10 79 -43 -101 -2 -62 -119 72 -128 -128 20 -29 62 57 -122 -126 86 -28 -127 -114 3 -94 -128 2 93 -110 48 12 10 82 -103 25 -51 -44 82 -7 -40 22 73 75 3 -20 58 -127 -55 -11 -128 -82 -27 -57 -5 7 10 -43 120 -19 -22 13 70 -35 -103 -2 -35 15 -74 -65 -37 5 -62 60 -128 -24 -27 -29 -65 83 -83 127 -125 115 18 84 122 -44 60 -15 -1 4 -123 -123 -26 1 -89 -5 -80 20 44 8 -20 31 -78 103 -55 -39 -37 -26 45 -13 43 0 34 42 -32 -10 -34 10 54 6 -100 -18 -47 -33 46 -25 -27 -12 -27 15 109 -43 -36 13 -76 -63 -59 -122 127 127 -61 -14 49 67 -16 -125 5 -17 -65 84 81 -128 -127 -63 -25 11 -27 -94 -13 -124 -5 75 -29 -84 -29 -104 44 33 -62 40 -106 7 -100 30 -71 -128 80 63 -44 -64 47 -78 -12 38 -55 110 9 61 30 -76 16 15 -26 -26 -124 88 61 0 -58 33 -8 65 -126 39 -55 43 114 -15 45 43 -113 -128 -109 60 76 81 99 93 112 29 3 -63 71 -22 -32 -83 -125 -78 18 46 103 56 -100 -49 -37 -20 33 65 -128 5 56 49 52 127 -8 -50 71 -62 -8 -52 -114 -60 9 -102 -105 -2 -32 37 -69 79 32 -95 42 100 -30 -1 -91 31 70 -24 -33 -53 -61 45 -74 -122 -124 -81 12 13 -51 -118 10 -125 92 76 63 57 -37 -124 89 -114 -127 -40 -98 -91 -108 56 69 -127 -122 54 -56 47 -61 117 -1 -38 -47 38 -3 127 -11 -43 -31 16 -16 -13 30 2 53 66 -64 -6 64 -49 -22 4 0 40 -45 69 -89 -63 60 88 -101 53 -54 87 110 71 -72 10 -29 6 --111 64 -6 5 37 9 -89 -68 22 -3 -40 -112 -95 7 -26 -53 -22 23 -60 -9 -46 -10 32 37 -50 35 9 -53 15 -6 -22 -20 9 27 -9 19 -32 -14 -13 9 -50 -9 19 73 -59 -38 -9 34 127 -81 -24 -23 84 -50 16 -74 80 -128 48 72 29 -128 107 -7 127 -91 -20 8 21 32 -14 -16 -126 -128 -34 -18 91 46 -128 -127 -105 -128 -48 -127 -20 112 -98 -31 -79 -127 -64 -12 -114 13 70 97 1 -45 14 -61 26 6 -19 61 25 6 28 -62 -7 14 -5 -11 -8 -110 81 -59 100 56 -12 -45 127 127 -49 46 98 -5 127 -127 98 -128 -22 127 -103 -50 126 -73 127 -88 -33 -34 -79 74 122 -44 48 -79 35 -126 -116 -119 -83 -126 -74 20 23 127 78 -103 -57 93 -37 60 96 127 125 9 -85 114 16 -50 -36 85 69 2 20 -102 66 -103 -34 68 -39 57 123 0 20 -41 -28 -67 -47 -29 83 -34 -127 -128 60 -9 -48 -47 -97 95 -60 126 -61 23 89 21 117 -124 -112 82 121 124 -77 91 -87 -29 -128 -69 -20 -41 -19 -18 -127 -117 -26 -127 1 -69 11 17 80 127 -124 -119 -122 -92 -41 111 -2 1 6 -83 -53 -16 -11 103 33 -74 -76 -48 58 -31 -58 0 -37 -21 76 -127 -64 -3 -71 61 17 108 127 127 -14 83 121 -3 127 -76 125 -127 18 119 -90 -120 0 -67 126 -110 7 55 -26 85 126 -55 66 -59 19 6 26 -14 29 -116 36 66 -11 -48 -110 -68 -89 -62 -39 -80 -39 -74 -74 -5 16 -65 114 37 -51 53 59 -87 -66 6 -24 -15 -58 -27 -48 67 -48 -50 22 -75 4 -108 -14 -25 -45 -14 -18 52 25 -34 37 -18 -41 15 13 -21 -120 92 15 15 21 41 52 -72 83 81 -3 -69 -2 -29 127 127 27 -88 123 -73 78 76 76 127 127 16 109 -102 -122 -77 126 43 24 32 41 -70 -127 -55 122 81 30 111 2 -67 127 105 -116 -25 60 -25 -65 -36 -56 39 41 92 -32 98 -87 48 69 107 111 16 -64 48 64 126 53 -123 53 -111 117 26 -76 -128 19 67 119 -110 -107 -41 79 -50 -19 -14 -47 57 -21 54 109 35 28 -33 12 20 49 -14 -11 -77 -23 -73 -11 -32 17 -79 -49 -17 124 43 117 17 -14 63 37 22 -41 21 -42 -7 -1 -54 -44 -13 -89 -26 -26 -76 -22 33 -98 6 84 -6 127 82 -29 21 120 61 72 -91 56 -128 95 127 -88 16 60 -29 127 -80 26 34 -68 23 -10 58 36 -80 -126 -83 -125 -57 54 124 4 -58 -31 124 -34 53 -17 16 -19 -47 32 -21 41 3 -47 41 -47 -89 -13 -38 -88 7 -19 -9 18 -92 -26 36 18 38 -34 29 -88 -13 50 103 38 -18 -44 61 -128 12 125 -79 -105 -49 -125 125 -124 127 9 -104 76 29 -99 -24 -127 43 51 11 -28 -36 -45 -57 -24 87 7 -119 100 -13 -90 -123 3 11 -42 -124 -15 6 -24 -98 -121 -20 -46 -108 21 -36 22 57 9 11 -45 -71 13 -24 -16 13 -26 -9 -79 25 -50 -18 -46 -65 59 -102 -25 5 -88 -30 48 74 116 126 -62 34 6 32 73 -63 67 -12 34 78 -37 32 -13 65 97 -40 -19 -8 -12 -3 127 67 102 24 60 -32 -72 62 118 -21 92 120 50 96 95 43 39 9 -74 83 50 68 52 3 8 -23 98 2 -11 30 -49 4 4 2 72 -27 -33 43 4 -23 -17 -15 -13 -77 -69 -54 -75 -6 -3 87 -53 -17 127 -50 47 -11 41 52 -48 79 9 12 -12 2 -16 59 -36 10 21 25 36 87 21 39 6 73 63 -114 87 60 -127 -126 -124 -16 55 -114 9 50 64 -9 -79 -128 63 -61 -8 45 -4 12 54 122 40 100 56 43 42 95 -60 35 -12 -5 9 -108 -67 66 127 -127 113 37 -64 -12 3 -2 127 95 -36 127 126 52 82 -96 126 -125 96 106 -128 -38 123 -67 125 -115 -78 -35 6 -28 30 -6 -126 11 116 -8 103 -1 -24 -125 13 -34 -48 -91 -128 -34 -3 5 -125 30 -127 -8 -5 124 30 29 -42 4 4 -43 20 -78 -2 -3 -10 -17 -15 -76 -31 -19 86 7 -3 -110 -59 -118 -114 -115 5 -40 81 -8 53 63 127 -63 127 -127 16 52 -35 17 6 1 -38 -10 127 10 82 78 -10 56 111 -64 117 26 -62 42 -85 -5 58 118 55 -47 47 112 -10 76 -77 82 102 38 127 18 67 -57 69 70 -27 40 -6 -14 9 -46 16 28 50 24 1 27 -16 6 -44 27 -9 -41 -21 45 3 45 -41 -67 -126 -20 47 -12 -31 -63 -9 -48 -61 70 -56 -71 27 -64 2 27 -127 124 -53 29 -8 123 -43 -47 125 126 -28 -11 64 -9 126 -25 127 127 127 89 88 -109 11 -3 127 110 -54 36 -128 -48 23 25 108 15 -122 -51 -76 -50 -50 -8 -32 -37 -20 -15 0 -42 -26 -16 -65 16 24 -63 -54 -43 -107 -14 13 120 -32 96 84 127 60 -61 19 28 61 44 -90 49 11 37 35 -35 -87 -34 65 127 95 -32 -118 -107 125 -123 -93 -2 -122 -125 -6 -121 -40 -82 -28 124 118 127 -128 -104 -125 95 127 127 115 88 -70 98 5 88 -2 127 53 -56 -40 -10 56 23 68 26 41 -11 3 21 79 10 -4 70 61 126 -127 -25 16 68 -80 -94 -17 127 -42 111 -60 112 70 -17 126 5 -128 36 115 -3 -99 -34 -94 14 90 37 -126 49 103 -70 3 16 -106 44 -28 -69 -82 9 127 27 73 -96 -68 -127 -58 -128 -41 -90 -30 78 -80 -78 -13 -81 -77 -35 -35 -31 1 67 -85 38 75 -47 90 -96 -46 -16 -53 0 -34 -13 127 46 -56 90 -19 -2 80 51 28 -61 69 -30 17 95 -27 10 31 -57 -94 36 10 -51 111 75 -23 33 75 67 119 15 51 2 -20 -16 8 28 -46 -20 -50 -51 -15 34 3 48 2 -1 30 -67 4 -78 15 -50 68 -79 -23 28 -20 32 4 -49 6 46 52 -21 9 -8 56 -14 28 11 35 -14 -49 -66 50 -72 -30 -19 -87 -4 7 50 -33 -53 -111 14 33 58 7 -47 -10 -36 -69 -42 5 -59 126 114 46 126 -41 -61 88 122 71 126 -6 123 37 9 20 10 13 117 63 126 44 -74 -40 10 84 59 -26 69 -18 -27 36 0 18 -13 4 60 -25 17 -20 29 -41 34 -11 49 -100 -39 -1 61 -127 -68 7 -127 -127 20 -21 126 -57 127 -99 -82 33 47 54 -38 -128 24 -17 -81 -39 -87 -120 -4 35 -32 -123 -63 -126 -31 111 -74 90 78 28 46 127 -53 -104 -7 -18 -20 10 19 119 -3 -54 13 -36 -116 -108 48 -41 75 46 13 127 -60 -93 32 23 103 -5 23 -39 25 -20 -9 -39 52 -7 115 -128 -79 123 -51 -53 30 -40 45 -116 127 -34 -127 126 51 48 -12 -128 127 86 59 -59 41 -35 11 117 16 -96 87 -126 -17 124 33 85 106 -49 80 34 98 -78 -33 50 66 108 -99 -3 -125 -42 56 -56 -125 -44 -21 69 -23 57 126 113 -13 -23 -35 23 102 70 0 3 -72 37 -61 32 -57 -124 76 -128 -128 124 -127 -90 -103 -127 55 -125 124 -7 -79 119 24 -72 29 -96 127 87 41 -26 65 -43 7 127 -12 15 117 102 -3 64 111 22 47 -11 114 -100 -112 43 -127 127 112 25 -30 -116 -97 -14 -122 89 12 -41 -64 99 -67 -122 -69 -20 53 -58 72 -82 -90 7 -23 108 21 49 -126 -49 -119 -98 49 38 127 -121 71 66 75 84 -57 127 -126 26 29 -50 -57 -2 21 -5 -86 -83 19 127 38 15 -75 127 76 -111 52 -8 -124 119 84 13 -39 -122 40 -117 -117 -120 -127 127 124 10 -128 -78 28 -113 -77 -45 -126 -100 -101 55 -86 -13 -106 18 -60 -127 -3 -126 112 -9 18 -50 -92 -126 -36 42 -11 -124 33 -126 -114 3 -118 -114 -79 -127 122 -120 101 -108 -105 68 112 -126 20 -127 75 70 127 -6 39 -83 -59 -73 85 -107 -30 117 35 -6 66 -60 85 30 -104 -70 -79 38 -126 -59 -100 12 -94 -113 -97 -97 -15 74 -55 3 65 94 -35 37 26 -8 -34 -14 -20 10 -21 -93 -35 12 -123 6 -29 -63 12 -35 47 127 16 14 24 117 127 122 -126 50 -128 70 72 -67 -17 3 43 127 -85 -126 47 53 34 84 -77 -41 6 6 32 21 -23 -16 -93 -13 -102 114 -12 114 -37 21 21 -126 -74 5 127 38 127 -127 126 107 127 6 118 46 19 55 -84 33 -33 15 -63 61 -121 31 -54 81 -81 -101 -4 -63 -47 82 70 123 125 -14 123 36 60 127 -128 94 -45 127 94 -128 47 126 -97 97 -28 -97 -127 112 -75 72 51 --128 -128 106 -108 -128 -56 -127 -124 -123 -127 -78 -116 -17 118 71 127 -128 -128 -101 127 54 127 -33 116 -85 -30 123 85 -39 69 19 -25 -28 18 32 -4 41 20 36 49 -20 109 95 124 56 80 90 5 -109 -28 5 -35 -75 -41 -44 58 -24 14 -21 -20 -1 -28 36 2 -59 22 4 -17 -23 -51 -64 68 -90 48 2 --94 20 -36 46 32 38 10 -14 -6 56 -60 12 -64 15 33 -59 -56 -25 -29 42 -41 35 -37 29 -10 121 -44 15 0 19 -6 83 30 -28 49 19 21 36 -49 19 -41 -53 -21 -113 -128 -53 -11 -17 33 -35 -2 -39 -22 65 0 55 -1 -40 -75 38 23 40 -49 -26 25 -49 -56 13 35 34 1 -82 -32 21 35 -19 -12 14 1 58 -11 -82 -76 77 -23 36 -28 -17 90 -13 -36 -35 -48 -96 42 -4 85 82 13 -17 -35 -58 -38 92 -44 73 33 -9 24 -20 72 -27 -48 -6 -24 -7 -54 39 -10 -33 -3 -44 -6 -6 96 29 65 -31 -89 11 -30 -10 13 -17 55 51 -78 46 -12 -79 126 15 7 -31 -22 46 22 -20 1 0 25 52 -10 -73 -2 60 77 -5 -17 -44 -10 34 -70 -6 19 28 -16 56 -29 -1 13 -59 -22 -18 2 5 -14 -27 14 40 -6 -15 46 40 -21 25 12 -35 -39 0 10 5 35 24 14 -8 -3 47 47 -11 -40 -52 124 -48 38 16 10 25 39 2 12 10 -17 55 9 13 -20 -28 8 -27 22 13 44 49 -53 2 -76 42 -33 -13 -45 -34 40 20 -71 66 21 -9 16 -21 18 -23 -17 -26 -22 -46 3 12 51 -49 17 -37 42 12 41 -19 -16 11 -25 -3 -34 -23 -2 29 -27 -45 55 -9 -24 -31 -31 73 25 3 1 -62 -15 36 -34 30 27 -59 -38 0 65 0 111 -32 46 8 18 27 78 47 -5 20 12 -58 -27 54 18 -20 49 16 -49 -47 -95 10 26 -42 -20 -16 31 -47 24 -123 4 -28 21 33 67 10 -19 -45 -75 -32 -7 -53 -14 -2 -25 -16 6 18 21 -58 33 -9 46 39 6 -23 -6 91 -5 7 17 -31 67 -46 -33 32 22 -69 -82 1 8 6 -20 -13 -55 -54 8 -71 -23 -45 40 -23 -12 -9 64 -8 -25 35 -43 8 19 -19 -51 -30 -17 40 -7 57 -30 -30 -20 -20 18 14 -47 -29 -32 -28 26 -37 -48 -20 -35 7 7 -6 -44 8 -23 -4 -46 21 -86 -36 -31 -36 68 -49 -24 6 -3 -65 24 52 -20 -6 -30 32 -3 -63 -41 -27 66 -33 -21 19 -93 -1 -56 -37 -59 33 -25 -34 -4 37 -114 14 -4 53 -31 66 83 5 -87 -12 -65 -48 35 -30 -11 37 -53 44 14 -46 63 58 32 20 -43 -16 117 -5 -123 11 -47 119 31 -90 -51 -30 14 -43 39 -30 48 -47 -9 22 -40 7 71 -22 -36 95 -120 27 -7 -88 16 -47 -26 47 11 124 -63 -31 -47 10 -110 -4 -36 26 77 -17 -34 -114 20 35 -91 -54 26 -13 -12 35 -2 -25 -38 -51 0 -35 68 -38 7 -26 13 -65 46 79 14 -5 -127 32 25 18 115 1 -62 69 27 47 13 79 -52 34 97 -1 46 8 62 -5 -9 -3 -42 40 29 14 -77 57 -3 25 25 -42 -13 -59 78 -25 -54 -74 44 58 48 -77 -4 6 72 41 49 17 85 -43 44 18 80 85 -28 51 114 -29 41 87 43 124 45 -54 59 20 59 -23 -12 -22 10 3 -44 39 48 82 11 30 65 -16 -6 71 9 2 0 -29 -1 -17 -48 -63 -49 -48 49 52 67 -77 -37 -53 44 7 17 -38 28 -99 82 27 66 -29 43 60 13 -14 125 30 5 -17 -115 24 -8 -11 -77 -27 11 -89 80 32 -124 -3 63 -3 -73 32 19 -57 -64 52 -10 -14 -18 2 15 -75 -33 10 -2 52 -10 -18 -20 -13 52 51 9 20 16 20 7 -74 36 9 -109 -9 -42 -18 -30 50 6 -8 -78 -5 -21 -72 20 -18 -21 -46 68 112 -17 18 -58 26 57 28 51 -43 2 0 -5 -3 18 -21 34 -45 40 41 -46 -7 42 4 31 12 -21 -24 33 -49 -50 -23 20 -34 -55 13 -20 -34 -27 33 37 49 46 -7 75 14 2 8 -25 2 48 27 29 28 48 -71 -3 -61 -1 43 32 11 -32 -24 18 -54 -12 -31 19 -43 -9 4 -30 12 11 -40 -15 12 -100 24 -73 -95 -73 38 -16 1 40 -18 -3 -31 -47 49 29 -69 4 -20 -29 -26 27 18 -60 -15 34 36 15 -13 -22 18 -4 67 15 -40 -6 -8 -2 8 8 -11 20 55 -5 1 -49 -46 23 5 -44 -6 -28 -46 -29 -20 34 13 -27 0 31 -21 -16 -8 -24 -16 -13 6 -37 0 22 -5 3 9 23 -11 -16 56 -39 65 -14 0 -79 -71 14 14 0 -1 -32 40 28 30 10 -39 84 15 -35 82 -33 17 43 122 -11 116 -62 -7 61 10 54 34 5 59 78 -80 35 28 -11 62 -97 71 34 72 31 13 41 -30 -29 62 -25 15 13 102 -84 -56 38 2 33 31 -10 62 23 -12 -76 41 18 -53 67 34 -15 -54 24 14 -34 112 16 -61 10 -37 -37 3 -30 -4 13 47 81 78 61 -20 33 -17 -11 -30 27 32 51 5 -27 -10 12 23 -23 -19 41 1 -11 -46 117 -4 -53 -24 4 41 -75 -7 6 12 -3 6 15 -71 -24 -4 -41 25 -85 -36 17 -95 104 -56 16 -11 28 -14 22 -39 33 -9 58 -37 27 -52 -98 59 65 -48 56 26 12 52 -33 -27 43 -24 -18 25 -19 -48 -32 44 -1 36 -37 -67 -45 -17 51 9 12 11 109 0 16 -22 -101 -27 -41 54 -26 -37 50 -74 45 -88 57 -38 41 63 -13 -11 11 18 -5 30 12 59 4 50 -31 21 6 -70 -52 -44 -125 -14 -54 -3 -38 -66 -27 16 27 11 29 26 52 -121 -36 5 41 27 -7 -35 -40 -41 14 63 -14 -2 -27 38 -55 5 9 -48 -19 -13 63 9 -50 -22 -25 37 -5 -37 10 21 -23 -55 77 23 -23 16 -24 -8 2 22 -72 25 15 33 -34 -37 -26 -3 46 18 9 25 34 37 19 -12 -44 35 -20 17 -2 -35 48 34 14 -11 -1 13 -41 -26 -28 71 38 -16 45 -106 -38 17 -13 4 -38 11 37 -47 -18 -16 12 -30 26 -10 -41 -76 -4 -55 -25 -41 15 -24 10 -46 8 1 -78 -79 39 23 -73 12 -53 46 20 -38 -78 16 -31 19 -21 -32 46 -44 -40 79 65 22 -48 -8 -47 -34 8 28 -49 -8 -61 -21 8 23 -42 -12 -36 -48 28 -32 33 -39 -3 20 33 -1 -35 57 -67 5 0 17 28 2 15 45 41 28 -7 33 14 -15 54 -24 48 -23 -46 36 -18 55 -2 13 26 26 -3 12 -1 51 -44 -23 38 -14 16 17 40 9 33 7 10 -47 2 -19 117 47 72 10 -30 -9 21 33 13 -31 -3 23 -13 14 -25 -58 -62 10 -24 10 -42 -12 22 7 11 20 -12 -15 5 35 -66 -7 45 49 -5 -11 -60 21 -90 36 -58 -5 -1 -30 -54 -47 -90 -27 -59 -9 -5 -39 37 -60 53 43 33 37 -13 -65 -80 -45 0 -3 30 -16 -56 -4 0 -13 32 -24 6 29 2 36 -53 -63 -14 34 -78 -9 -61 2 -34 -77 -28 -12 -72 -55 114 30 10 -15 -12 30 31 7 46 -50 -1 16 81 40 -39 67 21 118 39 -53 -47 -23 -28 -51 12 -58 -35 -92 24 57 29 16 -2 -61 17 7 19 52 -31 18 -27 54 43 7 6 52 -16 30 -26 65 -90 67 21 28 85 12 27 12 12 -41 17 54 -14 -1 -13 -20 55 30 -38 -12 -71 93 -31 -43 -20 70 30 42 -14 -15 -65 -12 9 11 34 54 102 12 22 -58 -54 18 -96 72 -27 -51 38 -29 -9 -32 -22 -10 -39 -18 -36 -44 -40 -107 -18 7 -26 -59 -31 85 -10 -54 -2 -53 -2 67 -40 40 54 -113 27 124 -74 -48 -32 4 -68 73 13 -37 -4 10 6 60 -100 -74 22 -5 -62 4 46 13 54 24 17 -2 33 -16 -22 50 -48 46 12 9 -66 -14 -2 23 24 106 -16 50 4 -14 0 35 -30 -73 20 37 90 5 1 32 -19 -33 1 22 -31 28 13 69 -48 20 56 66 21 -33 2 46 -1 -72 1 9 94 -11 -22 6 4 -39 -4 -3 -45 19 -54 -47 -7 37 69 3 43 -58 -14 47 -34 86 34 -48 23 -53 36 6 0 32 -63 -13 43 -23 -46 48 -66 -15 8 -88 -33 -81 2 -38 75 61 -2 20 -33 49 -75 9 -17 95 -83 -31 -25 62 -38 -53 37 -19 100 9 -78 -91 -15 -86 -3 62 -33 22 127 11 -27 3 -7 -96 -1 -43 -50 28 51 -32 -26 124 -38 53 18 1 -2 -62 9 5 -6 43 -1 40 54 -38 -14 16 -47 -35 5 -63 -41 -10 -23 -37 4 -67 -17 42 18 -38 8 72 27 -27 -16 10 -66 -39 3 24 -36 -87 11 12 4 3 -52 36 -90 -25 -51 20 -17 16 -16 44 12 -12 14 31 -59 31 30 24 2 72 -53 -38 -25 25 30 12 4 13 -1 -22 -34 -48 -62 -54 -64 -17 8 85 54 58 45 30 80 88 6 -31 -4 -25 50 -10 -11 -22 55 72 -18 28 -10 15 63 10 65 23 44 48 -13 91 41 6 -23 -17 33 -38 18 17 19 20 -37 -5 24 36 -21 29 32 -47 -12 -11 -47 23 -42 -11 -7 -33 -16 22 11 -56 -29 44 10 34 17 64 -98 -15 19 -17 28 -30 -37 22 -48 -38 0 -11 -45 -80 10 9 1 -9 39 -44 24 22 -25 24 -50 -17 -1 12 52 4 -10 25 31 -48 -13 25 26 -30 -34 2 33 -21 33 26 -40 18 -15 -23 0 7 29 8 54 6 -48 -24 -4 31 -13 -15 -9 -15 20 -16 -7 -61 -41 -6 45 82 -107 -2 -22 -29 52 -55 36 -9 15 98 18 -45 42 -34 14 -73 -25 -12 70 91 -22 -37 -87 -32 67 16 19 24 31 -54 6 -16 -20 -45 -12 2 -10 78 -48 31 -29 -9 -104 -61 60 -27 -7 -53 35 -2 32 122 44 27 113 -19 83 -10 39 -4 -33 -47 -18 -27 -42 -1 51 25 -4 -32 23 -13 32 -14 -62 37 -7 38 2 -4 -2 37 53 41 9 -13 69 -62 57 -45 46 -65 17 0 59 -17 -48 -29 46 -21 -43 -34 10 -54 56 1 14 -55 23 -38 27 41 -44 -7 66 21 -13 45 -10 3 30 -5 41 -43 -5 -30 -25 -86 -26 19 -16 23 50 -28 -53 -22 -33 -14 40 33 -21 -51 -27 -20 40 121 34 -61 31 -1 -22 127 3 -85 -56 33 -62 -21 6 12 74 65 75 -12 8 11 -35 48 33 62 -2 48 -19 -61 -3 -28 55 86 103 -7 122 -68 -23 -48 -43 46 97 29 -7 -25 -10 -32 -61 -74 7 26 -38 55 -4 5 43 -24 34 16 44 42 44 120 74 0 -25 10 10 -60 23 -30 41 -22 -44 24 -35 102 41 -32 5 -81 -25 5 103 -69 -39 -38 23 15 35 21 74 -78 -24 12 24 23 9 59 35 52 23 28 0 1 12 -6 -22 -56 38 41 -1 -73 -91 44 61 -4 -16 45 -16 21 19 -28 -27 -48 46 92 -94 -58 11 -71 -11 11 -9 118 -25 20 31 71 27 -126 -4 58 -52 28 -61 -3 -6 -4 26 -5 -41 7 -35 -52 -25 115 19 -66 -41 -40 -5 -75 -2 45 43 -90 0 -2 58 -12 8 -46 -30 -34 47 -42 -57 71 15 -17 -14 37 60 21 -49 9 -16 -84 -33 -3 26 3 -57 79 -25 -28 -48 -5 -3 -56 -52 37 40 -60 7 -17 10 39 47 31 -42 44 25 22 42 -27 15 11 -52 50 7 -75 -125 -44 -38 22 -23 40 -19 79 42 -28 -21 1 11 72 77 -15 -63 23 18 26 34 -41 -7 20 17 20 -34 53 -2 7 20 -44 39 25 61 23 22 79 71 -4 17 9 27 27 -23 42 -23 3 -3 47 7 6 -37 49 -33 37 1 -18 -22 -49 19 38 97 54 85 -1 51 63 1 0 53 3 11 10 112 -44 13 -11 -44 -1 3 -33 65 103 -32 22 3 70 -1 46 -55 -3 -37 106 -4 -9 -9 30 -32 -108 27 -25 112 -48 55 -2 26 -10 71 56 -28 -55 47 -21 42 -10 -42 -57 -13 -21 -5 44 12 -35 -3 -4 -63 11 -18 -62 68 1 -27 34 68 -16 -57 13 45 61 -30 -45 41 -21 -39 95 12 -10 11 -47 -21 64 9 -41 73 -10 -21 -7 112 28 34 13 -4 -1 15 -26 -33 20 6 -37 21 -4 -44 34 5 5 -20 27 -33 21 49 79 24 5 -4 53 -7 -43 -30 13 5 38 -60 -64 5 54 4 -58 20 6 40 17 -42 65 9 6 -5 -38 2 27 30 -3 25 42 -52 -28 11 62 -61 -16 -44 14 38 -63 -5 -32 39 -57 19 8 -37 -72 -10 55 42 59 -3 66 43 65 -4 -3 -47 -56 -127 44 -28 -14 -82 -18 1 -96 -25 6 -6 -39 -43 12 66 25 78 -42 22 22 -68 15 -29 -50 -6 29 18 12 -105 16 -7 -28 21 -80 -71 -8 43 35 -7 3 -32 -23 10 57 -16 -51 31 5 -24 60 -8 10 10 25 1 -39 12 34 28 -7 -39 -20 16 43 -69 -15 -9 5 -31 31 -64 11 -12 -17 -14 -17 -21 42 10 -5 -24 21 -8 -20 -2 -25 40 63 -49 -9 -50 -53 9 61 2 -24 -30 -11 12 -31 -21 -4 32 -7 -24 6 38 -25 -62 -15 18 31 64 -64 -17 -25 5 -12 -38 -78 57 -52 -18 -69 28 22 13 48 -36 40 32 -49 -38 58 34 -4 -44 -81 -77 -34 6 -101 -9 -68 -49 -47 -98 -8 -28 -58 27 -50 -5 18 38 -3 -22 -50 -19 20 -4 -65 106 15 -25 1 -5 14 -66 -11 -4 -27 22 -26 -21 46 -1 29 18 -30 34 -4 15 -53 -3 -14 20 12 -55 -62 58 4 -31 46 32 -15 28 23 18 34 -15 29 26 34 -23 -41 20 18 -59 -21 -28 29 -3 -6 -26 16 22 -24 -12 -21 18 28 -5 27 15 27 26 -35 -1 -49 57 2 -35 -2 -3 -1 57 15 63 11 -27 11 -51 20 -7 -21 -21 -24 -14 -5 18 -8 23 -31 24 85 -61 98 -60 -44 12 35 78 38 -14 27 -82 64 50 -43 -44 8 -44 -114 -11 -51 67 -51 -74 -11 -2 -28 50 3 -37 47 38 -20 95 44 -48 15 7 -26 0 -11 69 -33 -28 -8 -9 38 9 -2 -5 117 30 7 8 60 45 -65 65 4 10 22 14 12 -8 44 -18 64 35 31 -87 -14 54 -53 67 -43 -25 -43 31 -59 75 -44 127 -6 -48 87 78 25 75 94 -62 -4 -5 -20 5 31 55 -29 123 -29 31 -23 32 -55 -32 16 -25 12 18 26 12 8 -32 -35 -23 23 -36 59 -49 15 12 2 23 8 76 -41 21 -18 -4 25 55 50 10 5 -23 0 24 35 -4 -3 -68 5 9 32 10 -5 -73 -86 -95 24 -15 117 16 102 46 82 74 -6 1 22 -36 -17 -34 6 -76 -58 18 -22 5 -17 -57 61 35 55 60 74 25 -18 46 25 -9 -29 4 16 62 -31 -9 -55 36 -66 -54 -55 47 62 -3 -4 -101 -27 29 -69 -46 29 12 -101 23 5 -92 -8 32 -7 0 51 -21 25 -91 11 16 -5 -14 2 19 -24 30 64 -45 39 42 -66 -23 -48 17 23 -58 58 1 17 -35 -20 -14 -43 12 31 -11 28 -16 -9 -28 10 6 -24 20 -17 -57 -65 48 21 -12 16 39 41 -87 -2 1 15 -13 -27 2 53 1 6 -17 -12 -43 -17 4 4 12 -23 37 27 -4 -14 30 -12 64 120 -83 -7 -30 45 20 40 73 29 -76 8 23 38 19 43 3 -50 -64 -19 -24 -1 -55 -62 20 -66 -26 -120 1 -21 49 3 20 36 -2 -11 -54 -57 34 -86 4 13 27 4 -50 -55 57 36 -13 -66 10 -6 29 19 -90 -79 -69 -30 36 -46 -73 18 28 -85 54 2 -26 43 -29 -9 2 18 62 54 12 -85 14 30 6 -36 -56 -87 -14 19 32 50 -67 6 45 28 -10 -74 33 -28 -76 53 -40 -24 -54 46 18 38 -34 -48 -8 22 -46 22 2 53 34 31 -34 1 -33 -11 -21 17 18 10 14 16 35 -50 49 -6 -14 -61 34 14 71 49 19 -1 -24 0 -29 -8 68 -29 -78 -55 6 -18 73 -40 -3 7 -23 -93 -8 7 27 74 73 -14 -26 -58 33 -39 -58 -61 0 -38 16 -59 -101 -85 -70 -11 15 -14 7 -5 26 -65 -5 9 -59 -33 -5 22 9 36 -44 76 26 45 23 -61 28 -76 40 -34 -20 -5 22 24 74 -1 25 16 29 -57 34 -10 -12 -30 15 -63 6 8 -3 18 14 81 25 -4 -66 0 50 5 37 4 -9 13 8 10 56 16 -3 65 4 30 4 -14 45 36 -35 97 -31 -62 -2 48 -26 10 -12 -79 -13 3 2 42 -4 18 35 -17 -12 71 -40 -36 14 39 48 39 -10 -29 -47 -25 1 -19 -3 -38 -40 -40 44 42 43 10 19 2 -23 10 10 8 36 17 -51 -11 -51 -19 -21 -63 44 -8 4 42 90 -73 -70 56 -7 -38 -2 4 -55 -44 -44 9 -56 2 -54 36 -10 -115 -48 -72 -20 4 17 34 -26 -75 37 -36 -101 -18 -88 54 44 -110 -8 -73 -22 37 -50 -37 24 -16 -9 -36 16 -41 -90 41 -18 -99 56 -26 53 50 -37 -31 -38 24 -125 -54 33 22 -67 46 -37 -44 -16 -7 4 1 114 -45 -65 29 29 -25 -13 13 -60 -28 20 57 -23 -7 -110 17 -4 3 42 -64 4 46 46 -17 -24 -27 -45 -22 -37 -14 -51 17 56 -20 15 -58 41 46 10 9 23 59 7 3 -11 -44 77 22 38 -19 -59 24 26 30 -32 8 -53 15 -12 31 -37 -56 -34 12 -79 33 18 20 33 22 -18 12 -20 32 18 10 19 24 20 5 -27 6 -21 -28 -48 52 14 35 -7 -24 -46 16 16 -52 -51 21 -8 9 -27 23 30 17 0 -34 46 1 -47 25 -47 -32 4 12 4 -1 32 -1 -43 9 4 50 -21 -29 -5 -34 23 -8 22 -41 35 48 -53 28 18 -35 16 38 25 25 1 27 -7 9 -12 15 -11 37 -46 31 -38 -12 -2 -10 5 -30 5 -44 -22 -19 25 30 59 34 30 4 19 -18 -3 21 -35 28 -4 18 9 18 -38 -23 18 -32 19 31 11 23 -7 3 -46 -1 -31 18 24 11 8 42 31 8 -42 32 -29 11 -32 -28 -19 -31 31 -22 -22 2 40 9 28 -47 4 47 15 0 61 28 -23 -43 -47 47 -16 78 12 46 -21 8 5 -10 20 -5 73 14 46 -40 -24 32 -35 66 -27 -51 -37 24 -30 -4 11 -1 -38 -63 2 45 10 -83 -53 -63 20 -47 32 -57 59 4 33 22 -39 11 49 13 1 -43 -37 77 30 -11 -17 47 35 -30 -12 -39 7 20 -11 23 39 32 -25 12 -66 -15 -20 -35 -19 42 -17 -30 31 27 -55 -10 60 14 -46 -44 27 -6 -45 -7 24 12 -8 -33 -17 -46 15 2 -32 -8 -7 -26 17 21 16 27 18 -25 -40 -34 -14 26 -42 -22 -17 -22 24 -26 29 -8 6 -29 -10 -10 11 40 -12 -5 -18 -20 -16 6 23 -3 22 -48 -56 -9 -28 7 -40 83 9 111 44 82 -33 21 -36 -15 37 64 -1 -10 118 24 -109 22 22 -4 6 4 24 64 16 10 64 42 -53 80 -9 -20 33 14 -29 29 9 35 -20 7 75 91 -24 -48 11 45 -57 -45 31 -3 23 40 -21 -1 -58 -45 14 -6 -30 6 22 -95 31 -4 -19 -65 21 -21 -2 50 29 -25 -22 -16 31 -26 51 14 -64 -41 15 16 -2 28 -56 5 -29 42 -6 -54 -57 15 52 -5 -3 -34 2 13 -10 14 0 18 5 -50 -10 22 -8 -38 -13 37 3 17 29 23 9 -17 18 26 29 17 -10 30 4 -14 6 15 37 3 3 32 14 -34 25 -35 28 22 32 -6 40 9 -9 42 -35 -20 -3 8 61 -34 -3 -1 5 -33 -59 0 14 -19 -6 4 1 -4 20 5 5 17 -29 21 25 67 -28 -5 -17 33 -24 2 46 5 32 9 -66 -66 -8 26 58 -56 -12 47 3 28 15 -40 -31 -20 -10 16 -16 65 45 -12 33 45 -19 5 4 5 -45 -9 18 52 15 -39 9 22 6 -67 4 -13 10 19 -8 16 6 -54 37 27 -38 19 9 -15 30 -24 10 -60 -26 -51 -36 39 36 -43 33 -15 -16 19 30 -28 -31 -11 8 -20 -9 36 -14 9 -6 -30 -22 43 -15 -14 23 -3 49 -6 -7 39 7 -18 -26 -10 -16 -32 46 -30 -34 -5 -26 -9 -15 -49 39 26 10 -11 18 33 -37 19 -29 -51 12 -53 -21 26 -10 -15 -28 4 -43 27 -22 -47 2 66 76 -3 -14 -19 -4 -57 57 25 27 19 24 16 0 -59 -10 -9 21 -23 0 -1 -19 -24 14 -68 9 -23 -44 25 -11 -25 -55 -42 -21 -22 32 24 31 13 76 20 -42 7 -40 -26 1 1 21 18 -29 33 16 -26 -4 21 16 -49 -22 -36 6 -6 -16 -10 5 -57 3 36 10 43 6 27 -9 -4 34 -13 -39 19 42 21 -9 -7 24 -9 13 31 -8 -15 38 -11 28 -36 -14 -44 -19 69 -29 12 30 -37 6 -5 -21 38 20 30 -15 41 16 32 20 -14 34 -10 -40 18 36 54 -31 -11 -37 17 -21 -15 40 -7 58 -22 19 1 -22 -22 66 -43 -20 -87 -9 -11 16 1 22 -70 47 -23 -56 123 28 56 40 -34 -42 -61 3 18 79 -52 -17 -127 20 50 29 -110 15 -43 -42 14 -22 -31 -55 -120 53 112 -6 125 -10 -14 4 28 29 -70 -9 -83 14 -71 -43 52 27 99 -13 13 24 -15 22 -10 13 73 -22 37 -20 51 70 7 -27 -16 -34 -18 -12 32 3 -30 -26 11 22 11 -7 -24 -28 -20 51 15 19 -84 -45 -1 10 -93 -22 -3 -5 33 46 32 -6 47 -43 -67 -49 5 2 28 32 37 -41 -10 14 -38 39 20 -33 24 -54 -16 -65 -64 -14 -20 -34 -39 -30 -9 -30 22 41 17 -3 3 -22 0 49 -47 -51 0 13 30 31 -27 -13 -24 43 7 -27 -34 3 10 43 36 -27 31 13 -46 0 36 5 8 3 -50 18 26 30 -19 -54 -6 -70 -44 1 -54 -41 -24 21 5 49 -7 83 8 -64 24 29 32 13 55 -3 20 -11 -9 -18 23 5 28 32 40 -23 -50 16 -40 33 36 48 44 -6 41 50 4 -22 -11 -22 -22 -22 -15 31 -11 -50 18 2 40 -14 16 -2 19 -5 -7 0 14 -25 17 -48 -16 29 61 -24 -10 -11 36 -21 -45 4 -15 -24 -23 34 36 -22 21 -40 -30 36 -27 -9 -5 4 -32 26 -3 25 31 -10 -26 33 15 -27 3 -1 -28 40 -15 -15 -18 17 9 -28 35 -23 47 48 -1 8 14 -12 23 -61 34 -41 20 41 25 -9 -1 6 -37 18 -60 11 22 56 13 -87 -7 -37 -26 -36 -26 -11 -62 12 -27 47 -50 16 53 24 6 21 26 -40 14 28 4 -70 46 43 -52 16 -37 -59 20 88 11 -6 20 39 -40 -11 4 -8 -48 5 92 6 -21 -7 -35 -15 17 -17 -26 1 17 -5 18 4 -21 -22 -2 -31 -40 -53 8 -12 20 48 -35 5 -26 -47 22 -8 18 -66 -23 28 -31 -7 12 -56 6 -20 -57 24 28 -1 -17 -34 -15 -26 -46 33 -13 -14 -25 7 -5 15 -18 15 22 -47 -42 -29 0 7 21 -29 -7 31 -8 -45 9 -27 35 0 -50 10 10 -34 -41 25 43 -19 -3 42 6 -14 0 -5 -12 42 11 -18 -73 -3 5 10 -55 -40 -11 52 -14 7 15 57 2 -11 -7 -8 -17 -18 32 -13 8 7 -64 -66 42 15 -45 -24 -2 -25 12 6 -1 -26 -30 -39 15 -78 -32 -12 10 -76 29 26 0 -23 17 57 70 32 -45 -15 6 -5 -44 7 2 37 -6 -51 -9 52 -10 20 27 28 27 -3 -25 37 22 -23 -23 59 -14 -53 10 -49 16 7 22 -23 -34 -42 -23 34 -18 37 27 38 13 40 -46 17 -45 1 23 -8 7 6 -1 -59 -19 -1 18 29 29 17 -18 -31 -11 -18 -2 -2 -16 18 5 32 4 20 25 -33 24 -18 8 6 0 15 27 37 41 -9 28 13 17 -31 -18 -23 -28 42 27 -10 -3 11 -10 21 44 24 33 -6 -43 -52 -53 -13 -7 -52 -11 16 -19 33 57 3 1 48 -14 -1 44 -7 1 -38 59 -8 -21 -10 -38 14 -2 -5 34 -10 -28 -21 -31 -14 -42 20 31 16 -4 10 -9 -37 -36 2 7 -3 20 43 -5 -44 40 5 -15 52 -12 -25 13 39 21 4 -47 -17 12 -8 26 -12 -17 -26 29 11 12 -3 26 -31 -16 16 -22 14 -33 29 1 -12 -28 -2 -6 7 -7 -33 -56 -1 -11 -6 1 0 29 -15 0 -28 36 -11 40 5 9 -28 20 -6 -21 31 -31 -29 14 53 16 -7 14 28 -1 -6 -35 1 -15 30 -38 -26 13 17 24 15 18 -25 14 -12 42 62 15 89 -71 44 -32 -6 -13 -18 14 40 -32 73 4 -103 9 -57 76 -39 -5 47 -50 24 52 49 -8 -33 2 -37 2 31 15 62 -12 -25 14 -15 7 -20 -126 -2 -5 -9 15 -1 -8 4 -17 49 -86 -37 17 -17 -31 55 48 72 -27 -55 17 63 6 9 -28 -7 36 -12 18 -8 56 4 -6 1 -22 -87 4 -45 44 20 30 -26 -28 -4 0 29 -43 -4 -40 -3 89 17 -17 -24 2 -38 -78 -13 16 17 14 -28 9 43 -24 61 18 -46 4 23 -29 19 -6 40 -13 -52 -15 26 -15 8 9 -25 30 -45 -46 34 57 -22 50 8 30 -13 40 32 12 15 19 11 55 74 34 -21 12 51 -23 -4 -43 -27 -2 47 16 -7 9 -28 48 -14 -24 20 4 -29 -13 13 8 1 38 55 -26 -27 -4 10 72 57 -1 -20 -31 3 65 10 -31 64 9 13 -10 70 -51 21 -1 16 -28 -13 -38 -71 26 -22 -8 -20 15 75 35 20 -39 -26 16 -74 -18 -1 38 21 -18 21 -33 47 25 13 -25 9 14 -7 13 49 32 40 28 48 -9 -29 11 -36 -24 3 41 -6 -41 14 -53 -28 16 -9 -4 9 -7 6 -10 19 4 -46 6 -14 -4 -5 -8 8 25 12 -23 -11 4 -16 -48 20 -6 31 -33 14 4 12 28 -32 13 -3 -2 -15 29 8 22 6 -43 15 -41 -25 11 -37 -11 -39 12 -28 10 41 -46 -18 7 -35 -5 -5 -9 39 -24 -52 -28 -50 -36 18 43 -12 -27 -6 6 47 26 -36 14 -25 -2 -33 22 -22 21 -71 31 27 3 -34 -28 10 -2 2 -20 -52 24 86 -23 57 51 10 -29 76 -26 19 93 -7 -53 -31 -19 -68 27 -47 -45 5 -18 0 18 16 -5 -3 -18 -12 37 -36 -60 18 34 8 9 41 67 -3 -37 43 -68 12 -17 40 -39 -59 -16 15 15 -7 58 14 28 -43 48 1 10 4 20 55 22 -1 1 42 13 34 35 -44 0 60 16 42 -2 2 -21 49 -28 -10 -7 39 -18 47 19 18 -8 21 45 41 -24 -1 -34 4 5 -11 3 33 21 -35 24 -13 1 38 -33 9 17 -4 -94 7 -48 -26 -74 -47 10 7 -4 6 -91 23 -61 -11 12 -78 -94 32 -59 53 -8 -62 6 37 -31 -60 118 29 -36 47 9 -1 42 93 -50 65 21 -7 -31 5 57 39 62 0 -40 -6 -53 -19 -36 3 -25 57 40 -25 69 -28 44 94 33 26 22 -65 -77 70 -23 9 31 -4 4 -16 37 -45 46 -50 59 35 -29 -29 -66 -90 39 76 -35 28 15 -14 -23 -69 54 -13 45 31 -25 8 -9 -54 47 83 6 3 52 -23 25 27 -8 -59 8 27 17 -41 -21 -23 -5 -46 19 27 33 60 31 -3 -2 -25 -42 8 37 2 -43 -102 17 -28 7 16 -40 49 -14 -18 1 -48 -36 -11 -37 29 38 49 32 -19 -8 -68 -39 22 -102 38 23 16 71 77 -44 -46 5 49 31 57 19 63 -2 62 7 0 86 28 28 -26 50 -29 8 55 65 -8 36 77 35 64 -30 -25 38 3 30 15 -55 4 124 -7 42 16 -26 -18 50 -20 -61 26 -37 -46 6 -55 -24 -78 -3 -4 5 77 25 29 -26 107 -40 14 -83 -32 -30 -33 47 25 -39 47 9 9 -23 60 -11 6 -68 28 -2 25 23 23 -23 37 37 40 -74 -50 -35 -24 29 -39 39 48 46 27 -16 27 -39 -4 35 -26 -8 -36 -14 -21 43 41 -1 25 -43 -33 -23 -61 -11 2 -4 1 -20 12 23 8 -43 39 -6 5 24 12 0 -20 29 38 -4 -4 -107 -41 -14 63 -32 -63 58 47 -49 47 -66 8 22 -51 1 4 -9 65 -34 16 -45 -4 17 -6 -10 26 27 35 -44 72 -50 -6 -1 14 -9 -84 -7 -51 -25 -41 -32 -41 -32 -37 -99 -1 26 -39 68 -19 12 -28 -18 11 30 85 85 25 36 43 -8 15 41 -41 18 -14 1 -53 -54 61 -23 -11 22 -16 -20 47 -26 -31 90 88 66 -54 -69 10 -34 -18 8 -28 -83 38 25 -8 -15 -6 -9 -11 21 -12 -17 29 34 -67 -56 -64 4 37 16 -23 10 -50 -8 16 60 -50 3 -9 21 66 -18 42 -7 -41 -22 32 20 27 -33 36 15 48 -6 13 44 -35 14 -14 79 -14 0 -12 -26 -1 23 14 -2 37 10 32 7 10 21 18 37 14 1 -33 -23 -17 15 -21 -22 -15 4 29 -21 -34 -4 -16 -9 41 32 25 -6 15 -14 11 -40 -8 21 -52 15 8 -27 12 -3 -27 -11 19 -49 -27 -17 -12 -19 -35 51 22 49 -8 14 20 4 5 2 57 15 21 -4 11 31 -6 -14 7 9 -13 52 37 -10 37 40 39 -19 18 -9 3 -24 -14 35 -1 -14 -18 -15 2 -31 23 19 -7 5 -18 -17 -21 -1 6 -33 6 -3 15 18 7 -14 -2 -12 18 29 11 12 6 -10 -29 -13 -31 27 -25 -8 32 -7 -39 -43 -43 11 -15 -46 -10 -20 20 14 27 -7 -7 44 23 -14 -30 2 14 0 -20 -1 -42 36 14 60 -27 28 -18 -51 6 -13 15 4 46 7 7 -5 -41 -39 -31 -27 7 46 -27 -6 0 -39 75 -53 -9 -12 20 -36 20 12 58 -5 45 48 -20 -5 15 -28 35 -73 5 -31 -2 -2 -71 -1 2 -20 36 -43 8 -72 -10 48 23 -29 -6 26 -46 -50 6 0 -39 -19 -24 -21 -31 16 -33 26 19 14 -24 -3 -55 -11 -37 33 -14 -12 16 -12 3 52 11 -11 -9 31 -5 1 -11 -9 -35 27 -9 53 -30 13 -6 -10 13 10 -2 0 42 -5 -14 -24 -11 14 -9 -23 -17 -36 -18 15 -26 -17 0 18 -8 39 -49 6 -10 -38 -17 34 -6 -26 17 30 40 -4 -9 22 -28 28 20 -18 24 -8 -51 -35 -82 57 -29 61 39 17 -20 -14 -45 -8 53 -3 -40 19 -46 -23 -4 14 -46 53 18 -64 30 -12 14 -22 3 -36 -78 6 -37 15 17 -65 -42 57 30 -5 50 12 60 -58 -45 40 6 -10 32 15 19 26 15 -25 -36 -32 39 -42 -5 24 29 -69 -21 -12 -21 -25 -14 -19 26 -4 16 -66 -6 -2 30 -25 2 5 21 12 41 -52 10 16 9 -12 -10 58 2 -16 -41 16 -21 23 10 -25 -3 24 -13 -10 30 30 -7 21 -32 16 -22 52 6 27 -14 -6 8 -23 -4 -41 25 10 0 29 20 -38 -9 -37 15 -10 6 -52 70 -32 17 23 5 -11 -42 7 -27 10 -11 18 36 11 -51 -53 -90 23 -8 48 -13 55 24 -72 4 9 17 -32 -33 -99 7 -75 -19 -8 -1 43 -24 -11 -2 62 127 -16 63 -19 -60 40 -56 -17 -40 1 2 6 -43 52 39 36 1 20 -56 28 19 6 6 -22 -1 27 77 68 -70 -118 -42 -118 34 37 60 -88 1 -72 25 67 -33 -67 15 -46 -40 57 -43 -20 -3 20 54 -53 -69 4 49 -61 -7 -11 17 -15 -30 -71 0 60 15 19 -6 71 4 47 8 -53 -19 38 -37 -27 37 27 14 57 -61 18 9 24 -80 5 -27 0 50 -16 -28 32 31 17 46 50 35 13 8 -40 -5 -73 46 -7 -6 -16 -62 -8 19 -84 -14 -90 8 -35 -38 88 -35 -69 22 -35 -34 -2 44 -11 -14 93 9 14 56 -56 25 -60 0 1 4 81 53 -38 125 -27 -16 20 33 29 -43 46 -19 -46 -71 33 -35 -68 -9 -12 -8 22 127 0 13 19 -70 35 30 104 44 -30 23 7 13 15 -11 28 -6 2 -33 113 68 9 -11 -29 -17 31 16 18 35 39 1 -15 28 44 33 31 37 11 12 -28 15 12 19 19 -52 -51 38 8 16 -15 12 -35 117 5 18 -7 119 -7 6 -11 7 16 29 -7 9 -25 39 -71 41 -35 -36 -1 -43 15 47 -3 -56 38 37 39 16 23 54 32 2 -38 40 11 -8 14 -35 -24 -19 18 43 51 42 -43 36 -19 7 13 -8 17 7 42 -5 -13 -126 0 -6 96 11 77 -35 5 -74 -33 -59 -3 24 48 -26 -93 -50 -40 -48 36 -61 -51 54 42 -53 -32 27 0 -36 86 10 -21 71 12 -23 -87 46 -4 31 12 57 25 -101 8 100 -61 -27 -11 -13 -40 46 84 -25 -55 -18 -51 27 5 26 -85 -34 22 8 -4 5 10 22 -13 11 58 23 14 89 -19 69 -73 -32 -49 -23 -65 15 11 -2 24 -38 -23 -20 9 62 93 23 61 -25 2 16 22 16 16 -10 1 18 58 33 -2 -13 -6 -34 40 40 75 -12 15 47 5 32 68 30 20 15 10 53 39 46 -58 -10 -24 6 38 -21 -56 -15 5 16 40 -47 -30 17 3 37 -23 7 1 8 -35 -44 0 45 -21 -88 -25 27 38 -19 -24 2 26 14 32 62 -11 30 -3 34 1 -65 -11 45 51 16 -26 -13 -22 -11 -6 -17 -1 -23 -42 3 -19 -51 -27 -22 -56 -16 30 -50 -41 23 -67 -40 -67 -2 27 9 30 31 45 52 11 17 -39 0 -54 -26 49 -27 -3 34 -15 -18 51 24 55 -26 -35 4 33 -16 10 -14 -24 19 -29 -38 17 4 7 25 -66 40 -21 -19 -12 78 -23 75 -14 2 -17 -23 10 50 50 0 19 -20 -14 -4 -57 -46 50 -29 36 5 38 34 35 4 19 -6 -32 -27 13 13 -23 -23 13 9 -33 -57 -12 -8 28 43 -40 36 0 21 47 65 40 26 3 -34 -1 5 8 13 -88 93 -91 -23 48 -59 60 54 -26 -2 77 -15 -91 80 74 -62 7 -77 -6 -18 116 -31 -24 -60 74 17 99 55 24 70 45 29 -4 90 -20 51 15 -14 15 25 120 31 -106 20 30 -35 -66 19 14 -1 58 30 29 4 -83 33 -90 -20 24 1 -101 12 -1 29 38 67 78 -40 -28 -53 32 -127 3 -86 19 3 60 1 -28 64 -11 84 -8 -41 -19 -102 -53 -8 -102 -16 72 5 31 14 -21 -41 1 -27 -19 -13 0 9 -56 -73 -16 2 -4 65 -36 26 63 -28 30 5 17 -44 -15 -105 21 -8 -43 28 -16 -58 8 1 -1 7 40 -19 -8 89 26 -7 51 19 1 -19 -6 -85 52 3 -52 -15 -1 -4 34 49 5 7 -23 6 11 13 2 19 13 -7 -61 -12 -11 -12 4 -11 -2 -35 15 14 -1 24 14 -34 11 22 -15 14 13 6 14 6 18 24 -13 14 5 -5 28 15 15 10 -53 -21 0 -58 20 8 -30 -35 -29 22 -6 -19 -17 4 -2 2 -19 14 40 -17 21 -5 -20 14 -19 -8 -26 14 17 7 -26 15 -19 -26 25 -10 7 -14 -19 25 31 -33 9 11 1 -12 -7 8 20 5 10 -6 -8 31 11 45 -19 -4 13 1 -9 1 1 -5 -11 14 14 -21 -19 14 -6 0 12 2 8 -7 -26 19 7 20 -14 -13 -20 -23 0 -22 -16 6 -14 7 9 -9 6 14 -12 10 33 -18 -30 3 3 -4 -9 32 -28 -18 43 16 -3 65 -26 0 -47 26 -7 31 -24 22 43 -74 6 -1 -9 -20 -16 32 -11 23 -7 -16 15 13 27 2 3 32 -40 -6 -45 1 -9 -41 -7 94 54 9 61 46 -28 22 6 7 -1 36 -17 26 -14 62 66 25 -69 5 -1 -28 2 18 8 19 -26 -8 1 9 -18 2 -47 -31 -12 15 -59 -10 36 45 28 -28 10 9 29 -13 36 38 -52 -19 26 -18 39 -16 -8 -6 -2 24 32 -22 -9 -3 5 -17 7 8 -36 -10 15 9 20 24 17 6 -19 -5 33 -15 5 -28 -10 -5 12 16 -12 25 29 18 -20 -39 -7 10 -6 -31 -6 -63 -34 4 -50 51 -41 16 4 -21 -41 -5 30 -25 7 -5 -5 4 -43 -29 34 5 -14 -46 26 47 56 33 1 -15 29 1 -11 5 72 -23 -68 -15 -19 -13 19 -63 1 7 -33 -20 23 104 -26 -19 -18 -12 43 -57 4 33 -74 12 60 13 39 -43 60 -94 -8 -37 -34 -43 -2 -55 92 -19 -1 -27 25 -9 19 0 12 2 -9 40 -70 -36 8 59 12 44 26 -63 -42 -37 35 -34 15 -32 30 -51 29 12 31 -21 26 -23 -14 -34 -11 -3 6 -36 39 -17 16 -12 -16 23 -21 -15 -10 11 -17 -7 -9 -36 -37 -29 4 29 -18 -31 22 4 -28 25 -12 -8 46 -28 27 -36 -26 14 -6 -13 -33 -23 33 -39 70 81 -18 -26 -30 -22 30 0 -46 19 74 -65 2 44 11 -90 80 -16 35 -54 59 -15 -68 16 36 35 33 50 -50 -16 -41 -9 -1 -45 48 10 -27 -86 -67 -45 -53 -40 0 12 -16 -12 22 -23 -27 3 45 -8 25 29 -55 12 -53 18 -7 9 -38 -49 8 -33 -40 -59 22 38 27 0 -15 -68 33 19 25 23 -21 -56 -51 62 75 44 -8 14 40 -99 41 -12 -52 -3 -22 61 8 46 -4 17 7 3 -29 -26 -57 21 30 -29 12 47 20 -35 20 -33 13 19 -4 -11 -1 8 21 -29 -36 -22 25 -57 -31 19 -13 24 -41 35 20 -13 18 -28 26 -33 27 24 15 -26 -18 -22 -53 -21 -40 33 17 -24 45 39 23 51 -23 34 31 25 45 -48 -36 18 13 38 19 -4 33 18 -77 2 -53 18 26 42 -97 -6 32 -43 12 -21 4 -31 -22 100 -11 -60 -7 -74 42 -24 36 -12 10 -52 16 -4 34 31 24 -42 -44 -13 4 -19 64 -34 35 -5 5 47 55 104 -9 0 66 0 32 -4 -34 -56 74 17 -12 -40 -65 7 19 60 89 70 115 -122 -33 -63 2 21 -82 -50 -44 41 -60 102 -2 14 4 15 -52 -22 -55 38 70 21 -3 34 51 -24 -12 -8 -18 -20 10 18 -30 -25 30 8 -46 41 16 -24 42 -71 -10 5 -46 0 28 1 12 15 23 -14 0 -3 35 14 -7 -2 -17 -28 24 94 17 -4 -20 -41 -33 -11 -29 71 -30 -11 -26 -32 10 -8 -23 93 81 -1 9 17 69 -18 -1 76 36 35 -68 14 -2 51 8 44 38 45 -13 63 -17 -6 39 -56 5 -69 -45 26 70 -8 -7 8 -42 19 80 53 38 88 -23 23 11 0 17 84 -39 -36 -52 -16 -63 32 69 -19 53 51 -3 -5 -14 38 -39 -90 -45 27 -3 37 111 25 -54 -16 42 34 -62 1 5 12 -42 -18 -59 1 -49 -34 -7 20 3 79 42 14 20 33 19 -11 -33 1 -46 -28 -73 -9 11 6 -19 -6 12 -7 3 68 -88 -42 -32 -1 -23 -27 -6 -35 23 -19 27 -1 -15 -1 -40 -29 -36 -4 -21 12 -19 32 -29 -80 -39 48 -84 -91 -125 33 37 -97 -105 -24 123 -57 -21 -19 -36 70 5 -3 20 57 -37 -78 127 49 -14 -122 -24 1 56 -35 -25 33 -71 -23 -89 -124 93 -118 35 -117 -55 -43 66 -121 30 -75 -59 -49 -14 63 9 53 52 127 -14 -6 -14 -22 14 -22 -128 97 -10 -123 -35 99 6 3 -21 -34 39 127 12 -96 -110 59 -111 -50 -22 -2 -5 -1 -122 75 127 -26 -31 0 -128 68 88 91 -69 -36 -98 17 -61 17 -14 97 127 -95 -126 1 0 -83 11 -64 -58 -20 -35 -64 -8 -18 -24 -21 49 -47 40 115 51 64 54 82 -16 -24 45 -11 -6 -23 41 -5 26 41 -46 122 33 -87 49 76 -120 -46 126 -31 -32 24 -92 -49 100 36 -74 23 56 82 45 24 -50 26 111 121 -49 87 -62 97 24 -44 44 -54 -78 -64 90 68 6 8 -12 -44 -71 -26 39 -127 -77 -45 -115 -12 65 2 96 -128 24 127 -18 -25 12 -23 -1 -64 127 92 -21 28 27 -117 127 -121 89 -54 -30 -15 -125 76 44 -25 126 -128 -85 14 -78 6 -22 124 77 -78 59 -102 -53 -82 27 -27 44 -10 -111 42 42 -75 67 124 -32 -127 98 12 29 -55 -35 -25 -119 -106 -55 -57 6 -7 -39 90 4 -46 -29 -75 74 -21 -14 106 95 20 -5 34 74 31 -26 79 30 -79 38 68 -28 32 -69 -29 52 16 -32 119 -111 13 14 42 -78 -114 122 25 31 116 6 -79 -63 -94 41 -88 41 -1 -6 -80 -91 -34 122 30 -68 -128 -49 -95 14 -11 69 -127 -123 -64 -14 -85 70 -2 45 -13 29 -85 -89 -10 -126 -128 69 -16 22 -126 -121 127 113 -10 -16 -66 9 14 126 4 -68 14 -81 5 80 -25 114 -101 9 -40 26 -34 3 33 -73 -45 -35 83 -30 -117 63 -59 127 -104 3 -4 -102 5 97 -101 -18 9 16 -101 -48 -51 73 -89 126 -59 -62 104 62 -37 -51 -4 -1 44 -70 -32 -60 1 13 -50 -62 64 -26 -60 19 5 -13 25 18 67 -23 23 -46 66 55 57 37 -12 38 -47 -11 -82 -1 31 16 18 31 -75 28 96 72 -87 57 -20 26 -15 36 -1 -123 16 -62 -32 -84 -25 8 -67 35 -4 -127 59 9 -82 3 44 13 -78 89 14 -127 1 -80 -65 117 -89 -75 -18 -41 -75 37 -35 13 -75 -77 -17 44 33 -12 26 124 100 -15 104 127 -101 115 -83 46 124 -41 -23 -36 -82 -59 66 46 52 -40 41 33 -23 18 98 -18 -35 -29 -67 -7 97 34 127 88 46 108 77 32 70 -125 29 -52 -20 29 48 -3 -64 16 51 -14 2 -58 56 -79 -124 23 -63 78 24 30 10 -32 -8 -44 37 -8 40 102 -12 -106 -41 -13 51 33 -8 -52 69 32 15 -21 121 -115 1 22 -128 95 8 -128 14 -18 -41 55 50 8 -46 -123 84 11 -21 6 -127 -124 112 15 3 23 95 -126 -51 120 25 -120 -11 70 83 -7 37 94 100 127 -125 -60 40 48 40 -82 17 127 19 78 25 66 94 -122 -13 -89 14 -89 118 -11 -126 1 -36 -92 127 55 93 112 39 -39 21 54 -18 47 -84 3 -50 -125 -122 -89 127 -53 -17 -29 14 64 -71 -126 19 0 -121 3 -15 -121 107 28 -59 -36 11 -31 -120 -56 17 -123 83 -47 -74 -128 -93 -122 -123 -127 -31 19 125 2 -121 122 -123 -25 42 -49 0 5 67 -121 9 121 52 19 26 49 11 52 -124 -31 101 -2 -33 12 5 -124 -24 -90 95 50 -34 -8 -128 43 93 55 7 64 -92 -29 -34 -66 24 -127 80 43 127 -38 -125 11 -34 49 23 100 76 -89 -96 1 95 -45 15 -44 -88 -121 82 36 93 -35 -16 -123 18 -124 40 -117 -36 108 24 -38 88 102 36 -40 10 -97 -27 -49 35 63 -62 123 -91 34 50 127 104 -70 -40 -92 -33 -72 7 -122 -11 100 -127 -44 -21 86 30 -30 104 -75 -76 56 -127 -90 -27 -40 -92 -76 88 -82 -68 59 -106 -40 35 95 -39 22 102 43 -94 -48 -29 -32 -13 -18 47 -79 127 -19 -126 81 62 -18 65 -124 101 25 -98 5 98 127 -124 -68 47 92 -35 -93 -28 49 -65 127 100 -24 -116 -36 70 86 -128 125 103 -34 -104 -4 85 0 28 -78 -124 108 -106 -117 83 -43 -8 -87 43 57 -46 -37 119 -16 8 75 -100 -101 106 123 23 -36 127 -91 62 0 32 -125 24 21 -15 -17 50 -30 -65 -48 121 -1 -4 70 28 21 -15 100 -61 -53 -104 -4 2 74 -5 -13 -95 123 -92 -122 127 127 -127 66 63 79 -36 -104 -103 -75 -49 10 -7 120 26 -76 -29 110 -4 38 -51 -56 -48 11 -100 26 -76 -40 -10 -117 -60 0 -120 4 126 -97 -75 83 49 93 -1 92 50 -119 -107 -106 -114 -117 86 -64 -127 102 32 83 -13 58 0 -29 37 -72 51 127 -49 107 -57 21 98 -44 -23 -85 -43 -30 4 -59 -60 99 -111 83 21 48 100 9 -37 1 56 -22 10 -127 -12 75 -97 -14 54 -42 19 -57 -6 -125 -126 -37 65 -7 -35 -122 108 1 -36 122 -71 -126 43 -76 -43 -8 104 -39 71 -29 -105 0 123 61 65 -16 25 113 61 -30 -26 110 -92 58 126 -31 123 -4 -57 127 -56 -32 -118 52 -40 -127 -40 18 -103 -29 32 -82 -94 84 -122 -24 89 20 126 40 101 -63 91 -37 48 -77 50 -39 49 8 112 -3 114 49 76 -68 29 95 0 93 -2 30 28 -128 0 -34 -108 127 119 -127 -14 46 -127 -90 28 -16 80 37 103 66 -30 -80 -3 16 127 -69 47 120 76 24 110 -29 -74 67 -18 35 4 -24 -34 -1 116 4 127 -5 -91 27 10 84 37 58 67 -20 127 -60 -12 10 -40 -8 33 83 -30 -77 127 62 113 -16 54 79 48 26 -97 127 70 34 -77 -116 31 -30 127 107 -92 125 -1 12 -62 26 -32 122 5 -77 -126 55 50 -41 -11 60 -69 73 122 -127 -22 -110 -39 -61 113 -2 -67 -128 -120 -16 55 -63 127 -33 -54 -95 -14 127 -58 -32 -70 -27 26 -78 126 82 -67 -126 111 124 -18 126 9 50 89 -1 70 15 125 127 127 -124 12 -82 92 90 119 -55 42 114 24 22 -77 -36 -32 123 -128 -42 -10 -4 -29 -66 -62 -97 127 104 -45 -10 -64 -124 2 123 -49 11 41 -20 -52 18 -110 -82 19 13 20 127 -85 110 123 -25 -1 -94 -67 35 -6 -96 -102 110 93 127 2 -49 -78 74 57 55 -57 -24 125 126 127 -106 3 61 -12 68 14 -106 -10 53 -83 -91 -65 -120 4 59 -59 57 72 81 10 127 -38 -10 -53 -32 -127 37 9 127 109 97 68 -17 -83 -127 39 -44 112 84 53 -97 -81 -127 -128 -27 127 -109 108 87 127 -5 77 -69 -50 -65 -126 -124 119 -110 -47 -51 -15 24 42 -96 -119 127 9 -56 127 -35 -79 48 23 -56 -9 -58 24 -127 80 57 -38 -128 -7 10 72 -79 40 -41 -98 -105 -57 121 -46 26 -26 -128 -126 -125 93 124 -86 -52 -28 41 122 69 34 124 -32 112 -67 53 -121 127 -128 117 -2 -13 -83 46 83 15 66 -16 46 -25 -13 -104 -125 67 -25 127 24 -117 49 28 -24 -57 -75 -34 59 123 127 -92 -119 18 -126 9 90 -120 -115 -125 -125 115 -123 -75 -35 41 119 -68 7 82 -126 25 -126 27 105 95 -66 -122 -119 125 54 78 119 98 77 -127 -68 -122 -120 117 -29 97 100 69 43 26 -20 -118 -52 89 -37 -34 -120 63 -17 29 15 78 119 27 11 72 30 91 -57 58 127 105 -29 -15 108 -2 2 24 79 -54 83 -126 -126 28 123 1 -116 -47 -113 115 76 28 -22 -36 -38 18 111 44 27 -26 -18 21 -124 64 119 -60 -61 65 113 6 90 -58 -90 31 0 54 -55 -4 19 43 61 -41 -53 49 -46 -98 65 127 -7 -64 18 59 -37 -77 -122 -107 62 23 -17 -24 16 -93 -17 37 -37 12 127 102 30 -57 -80 126 73 -125 70 -116 66 -36 -36 -25 63 73 106 -76 113 -30 -20 -4 -127 -62 50 -53 -51 46 -35 127 -84 127 -51 122 116 54 27 -58 -127 -120 -14 104 125 -91 127 100 -21 -74 106 7 -88 44 -21 -124 84 -72 92 -16 21 -87 16 7 35 -61 -27 -25 31 -63 42 -26 72 44 -100 126 -77 -66 126 -47 -14 -49 -126 -113 124 17 115 -127 -40 20 43 124 -14 96 -100 84 110 50 65 -61 -86 -114 91 126 127 3 -125 -27 67 -106 20 127 -55 55 -126 21 17 94 116 -50 -1 17 -5 0 37 -124 66 115 -7 -72 -111 0 79 -8 94 -5 -11 -118 47 23 -17 85 2 49 38 -105 74 6 6 115 127 127 90 -122 37 114 67 8 -45 81 46 12 -6 -90 122 116 -39 -45 -96 -118 122 52 -76 -23 42 -116 67 -51 -128 -122 2 -70 -96 26 -39 -127 22 -39 89 -41 54 -86 5 -68 -7 -32 122 -36 127 77 -52 -112 -24 127 -60 -4 36 -49 26 -102 11 50 -18 36 -85 44 52 -54 -54 109 -79 -70 6 45 71 7 -17 -31 127 -84 111 4 -2 -113 -31 125 65 -4 -88 -86 -26 -29 127 -4 4 -49 -54 126 69 16 -17 -51 -5 -124 6 -21 98 -5 -50 -24 57 -52 82 84 -105 -115 1 1 -6 123 114 100 -58 -35 18 72 5 -29 52 -116 44 -101 -40 -78 7 -51 -23 2 -21 67 110 71 123 57 -29 -76 -43 32 -56 -125 61 -90 -126 119 -65 -70 -125 117 123 -18 53 -4 -101 -128 16 121 -102 45 -125 11 127 15 -41 43 -12 -122 -3 -115 122 74 2 8 124 -72 -74 -121 -128 110 19 -39 35 47 -125 33 -34 -113 -17 40 19 95 -17 -4 -20 42 -91 -6 80 62 48 68 85 8 -31 35 -1 -73 66 91 -87 -98 25 39 -22 -76 -123 52 -120 -26 4 -33 97 55 -60 -128 -110 107 44 -60 28 -123 -127 106 -4 27 16 41 -11 55 126 -108 124 -128 127 -39 -122 -7 59 -128 -97 42 127 -125 -16 115 120 35 17 -126 -14 43 125 71 -32 -15 -125 127 -127 -128 -58 110 83 -78 18 45 125 56 105 -99 -126 -29 23 -16 127 -20 25 23 -128 -39 -105 91 -124 -8 23 -123 0 -122 81 -52 -47 23 -120 -126 63 57 50 -94 50 56 125 -56 -42 -111 49 43 68 93 -47 -17 -73 -41 11 -49 44 17 82 -126 -94 127 25 35 -48 63 -63 -93 28 -58 8 74 56 -10 42 -128 -78 48 -87 12 -26 0 29 23 111 -7 -70 -127 -9 -118 -38 -53 51 -126 -57 1 105 -105 -29 20 89 9 121 82 -57 -92 126 -71 -128 -7 -29 6 95 96 -63 -125 127 -127 82 -62 68 -13 -100 -26 124 124 23 12 12 119 -102 91 62 124 -83 -7 21 -102 -118 5 -124 96 56 50 117 -104 92 -54 -105 -73 -17 -39 42 44 126 -23 -107 -29 -118 82 -30 79 81 -128 -128 -126 124 114 24 -12 -128 -29 -125 -127 -124 54 89 42 5 42 -94 -52 41 -41 76 -128 -41 12 -50 -109 -104 -21 37 25 -119 124 -79 -24 89 106 -127 18 -117 -65 -128 118 -128 127 126 94 -111 -83 -14 19 127 -122 12 127 -69 -23 -29 -128 111 21 -126 0 45 -92 -24 47 -27 24 -79 45 32 -46 105 -18 -21 -105 126 -13 -84 8 -1 -75 127 26 112 66 107 0 127 9 -9 -108 -15 -50 -34 -103 -42 -41 -125 123 9 -124 115 -81 -48 -47 77 -119 -35 41 7 -6 -101 34 2 117 -123 86 -27 -24 127 -90 58 -67 -116 101 -121 22 -104 -44 35 -4 -80 -5 -70 0 115 67 31 -126 -37 44 -9 16 50 7 13 26 7 -73 -68 45 20 -75 19 -44 8 21 -22 1 93 86 6 -11 -16 -18 20 75 -29 -12 -16 40 67 7 11 74 58 -50 -46 37 -8 -45 -5 -3 -50 -36 -12 36 65 29 -29 -92 12 10 -91 1 8 -2 96 -61 -44 -28 -24 -2 14 37 -19 25 76 47 9 -29 42 -21 -10 17 31 25 23 22 -52 20 -14 50 17 13 -91 -41 -4 12 -69 -91 -8 -125 14 -30 82 0 -26 -3 46 32 -28 24 -3 -90 -101 -79 -61 64 -45 31 6 5 67 7 49 34 -4 -19 -4 -13 12 5 28 -76 12 -46 -5 -5 3 -28 -25 -5 -19 -17 -85 -58 30 -44 56 -73 -29 -74 58 45 -24 -42 57 -57 -15 -50 -2 -1 68 -20 -5 -32 14 62 79 23 90 -44 -47 85 41 72 121 -28 -47 -17 33 -3 64 -57 -51 -21 2 42 -126 17 10 61 24 -128 -93 -32 73 -38 -25 78 -31 -39 -34 -97 34 -118 -125 6 -7 -43 11 7 48 1 96 -12 -48 -12 79 29 117 -57 57 116 -16 116 -81 -38 7 -35 -111 -125 -51 -67 -13 -21 14 -21 48 -12 -127 -45 55 -127 -121 42 -11 7 22 3 -61 12 -10 60 -25 20 0 18 9 -24 -79 -66 -11 22 -44 -52 7 -10 -42 32 -38 18 43 -44 7 35 19 105 86 -95 26 29 -23 18 1 116 -14 66 -128 -83 50 122 48 -55 -125 -84 78 74 -76 -61 -70 18 48 21 -6 -91 88 33 -115 42 -1 -73 -78 -10 -35 -21 -16 -70 31 79 -41 -8 -55 93 -38 -36 -63 -36 -69 -23 -68 -126 -78 19 -92 114 -79 97 127 25 127 -32 122 -44 125 106 -10 34 -17 -5 102 -55 62 -31 117 -7 -34 8 -118 74 -124 -3 -34 -47 -125 -112 -81 -66 -88 10 -52 93 4 -17 110 91 1 61 -65 4 -18 -78 -11 -5 -72 -27 -57 113 45 -45 -125 14 -56 3 -14 56 -58 -82 77 80 41 8 109 -22 -65 -82 -48 22 87 -32 -37 -4 45 -18 17 -23 -40 -108 57 -53 -4 21 -87 -17 56 -118 -4 -78 26 61 -50 118 0 -54 -13 87 -59 68 45 92 127 48 16 -56 -37 -63 32 74 -3 55 115 21 7 126 -17 3 -38 43 31 -4 46 58 -52 -91 -25 28 -126 89 -8 -98 124 67 -71 20 -52 -42 -68 -20 -51 33 -31 17 -21 -15 60 -60 -128 -56 127 -10 -21 -23 62 -23 95 -121 16 126 -60 117 20 -13 -72 -69 65 -61 -127 41 15 29 48 -123 -32 35 23 74 44 112 53 -118 -117 45 -68 127 -44 126 -66 3 22 -17 19 51 -93 83 -111 -21 -13 -13 -66 9 51 -79 -76 -2 64 -70 81 -68 -19 82 -26 95 101 76 -65 -53 32 127 75 -32 -98 123 51 -61 45 -61 37 19 -80 -103 -12 71 1 -8 -59 -15 106 -17 6 6 -46 -14 -1 -51 -19 -63 -45 -32 -15 47 -122 99 -2 43 68 -29 15 32 -26 120 51 -44 127 24 107 15 -76 44 73 -10 -31 -17 -68 -79 -53 28 -123 2 -122 122 44 58 -16 127 -76 -84 71 45 3 -63 -102 -59 -18 38 -84 18 11 -102 76 -52 -124 -15 -84 113 -114 56 63 2 81 0 31 -117 114 38 23 -40 34 -3 127 43 -42 -95 54 -68 -13 -91 41 127 16 -64 -37 5 -72 -20 77 75 -1 -26 53 86 10 30 -19 43 -27 -105 62 -29 18 -13 3 16 -42 69 22 47 26 2 12 58 31 71 -85 12 17 -82 -44 30 -68 123 97 -37 26 -64 -40 127 -76 -47 -65 -7 5 7 -71 95 -24 4 -124 -2 45 -19 74 -11 -46 119 -78 -37 -9 -33 -102 11 44 -52 49 -109 -103 -28 -20 104 90 -80 119 18 69 125 3 38 -27 111 -15 87 -82 -2 34 -24 60 39 19 105 17 18 -61 18 -42 123 -10 11 -44 12 51 38 -35 70 97 -127 -123 -29 126 -63 126 -79 -96 56 109 -14 68 56 -111 -13 46 -16 63 -128 125 -93 60 -86 71 124 49 -11 -6 44 -25 -72 -29 49 9 -90 68 58 -37 -112 117 10 -7 127 32 -31 103 30 111 32 54 -58 68 -3 9 -73 -47 4 120 83 1 35 -7 -17 -18 58 74 -127 -50 -68 -25 56 32 -21 -108 -45 -15 14 89 0 -104 7 36 -80 -66 60 -115 34 127 61 -19 98 -28 -19 -18 -7 46 1 2 16 -61 -33 -43 -39 -4 8 4 -63 57 15 69 -35 -76 28 -55 -45 -34 -37 72 57 -108 18 10 -85 17 61 67 -31 -28 -30 -8 -33 4 -13 1 -36 -29 14 69 49 -29 23 13 -29 -4 -32 -101 -17 -116 7 24 -2 -48 -68 -91 52 -66 32 78 -76 -58 47 -33 -66 6 53 -29 93 55 14 -21 30 -44 33 -31 -6 14 -68 65 82 -58 3 -21 -102 102 -37 -6 67 28 6 86 -19 -10 99 -31 68 31 -65 34 20 2 -119 71 -83 -66 95 21 -37 -98 -97 -15 -68 71 50 57 -9 -125 -88 1 53 -49 30 -22 -5 20 -16 -83 -20 -24 -85 6 -127 -7 93 -55 12 55 17 33 31 19 64 -25 16 -42 35 -108 -68 -1 92 122 58 37 -125 -78 22 53 109 -17 25 -31 57 -18 -2 53 103 13 -53 35 -25 -68 -15 6 -65 111 34 34 -47 -17 95 25 -15 37 -17 15 92 -125 -15 -27 -33 63 12 29 94 -53 -44 45 -90 -128 16 53 29 9 -28 125 60 45 89 87 -42 -9 65 60 20 -10 33 78 105 -2 2 -115 18 21 -118 45 76 -124 -68 -42 73 69 -15 7 -28 -76 39 32 10 36 -8 -33 -38 10 -24 2 -69 -28 34 8 54 -83 107 -47 -65 -6 6 33 78 76 -14 99 -40 12 85 -23 7 5 -16 20 30 12 -78 -97 51 13 61 41 68 38 27 -3 -40 18 -7 -62 44 71 13 56 -30 -18 -5 -6 5 20 -22 -21 37 122 -38 87 42 -15 -10 -56 -29 11 23 -36 -40 -39 -27 40 -42 -42 -10 -55 22 -13 -78 7 0 -66 65 -5 21 0 -69 -125 -58 33 45 -9 -126 75 19 -93 -43 -95 33 -62 -41 -38 58 0 35 -68 68 37 126 -3 -35 -56 90 -8 -102 110 -49 41 -38 -53 -111 -15 -12 -88 29 -113 23 28 5 -86 31 -1 112 27 23 8 64 -76 36 56 52 -44 -34 89 27 33 -5 -37 -21 2 28 72 32 -88 47 17 85 96 -21 -48 5 -60 110 60 -51 -32 -54 54 9 38 -26 -49 -21 10 50 22 67 -48 40 -20 -102 69 -52 -80 -125 -18 -88 -26 -95 -42 -87 -21 -5 115 -32 11 -68 -41 69 38 -35 35 -38 102 117 41 44 -42 114 22 -27 123 4 101 -116 71 -52 24 47 -23 -94 114 48 -119 -43 6 88 121 13 -51 -44 124 -12 -34 -32 -37 17 75 -66 5 48 12 4 49 10 32 -37 -110 -90 103 67 -8 -99 30 21 48 57 52 -17 -37 -82 -68 -10 -64 98 -2 -110 99 -123 121 -61 -68 -101 124 12 -37 18 -62 -69 32 11 101 39 7 -72 47 -77 18 -43 59 -30 22 8 -75 -62 -4 -106 -23 -87 -35 22 -57 -28 -7 -58 -87 100 -2 50 32 3 103 -46 1 -33 41 -39 -68 -61 82 17 -74 -80 -26 -27 -52 -14 23 -51 -36 -12 -40 -65 17 46 -5 76 55 123 53 26 -88 9 34 -32 -3 -9 -48 19 57 85 -17 53 29 -27 16 13 -124 -112 -86 -19 39 9 44 -125 74 -56 8 60 -23 34 -127 -5 -91 -89 -55 -117 -32 102 -8 2 93 -17 104 -90 -71 43 -39 -19 98 -52 -5 63 37 -62 21 -21 63 8 68 0 46 -65 -56 65 -53 -35 -23 -46 -52 45 -62 -26 -24 17 -51 6 -8 -92 -67 118 -8 -1 -60 27 11 46 -95 -26 -126 -89 -85 82 18 12 57 71 -26 42 -4 48 88 122 120 39 9 55 41 -6 21 -40 -21 87 -44 14 -29 11 -85 -46 -93 -54 11 62 -40 40 -128 -74 -12 115 62 -25 105 -128 -17 25 99 -18 117 4 31 -59 127 56 -98 -38 127 61 -23 11 49 -21 -68 -30 81 -65 -8 -126 42 -80 64 -38 -115 -37 59 -70 -125 67 -44 -40 66 -17 -16 -33 112 -18 54 -57 -3 -71 124 -88 64 38 -14 -124 42 -77 74 71 -105 -3 31 44 26 20 -18 -33 108 78 53 -116 -115 -106 41 127 0 30 -128 -78 -39 -81 -68 119 -80 -36 -55 -17 31 67 -35 42 33 34 38 4 -2 -19 -114 12 -1 -29 -15 -37 -124 -58 -37 8 31 -14 -78 97 80 -4 33 -123 47 113 91 -20 66 41 28 -70 -38 -25 -99 -61 -45 66 26 75 34 -38 21 71 18 -123 -9 -17 -20 -73 -7 -70 47 42 -126 -120 41 18 -49 118 27 -87 52 -7 127 -13 34 -52 -67 41 -43 -30 -75 -28 -65 -124 -15 -126 -43 -125 34 -124 13 -28 -116 -27 -122 10 -128 -126 91 -120 -20 -66 -48 -126 32 81 -80 -13 -40 17 -48 -33 17 8 -48 -99 79 40 52 18 -57 78 -126 -63 -13 -2 17 49 -61 82 -121 70 50 -46 -123 -126 -1 84 127 -122 -20 20 -38 53 -10 77 -20 23 64 -69 38 -27 19 103 53 126 101 -14 -82 -122 48 -37 17 -66 30 93 14 33 7 20 75 50 -105 14 -57 87 48 36 -29 124 -15 -38 15 -126 -53 100 42 -11 -35 -20 127 58 32 127 -77 -76 -34 -93 -29 -125 -56 62 -21 35 127 97 -108 12 39 116 -1 81 -28 -128 -91 35 127 110 123 15 -80 0 14 -110 -6 -26 -44 -120 31 -47 38 -125 -3 -125 -27 106 -115 -26 -57 1 -43 -76 37 -68 -79 8 17 -113 6 119 11 60 106 -15 -50 70 -28 -16 28 -58 36 63 10 -56 -59 87 -75 -11 -89 9 -99 5 7 16 -26 24 65 1 -121 -126 -63 94 116 -10 -14 -18 10 97 -15 127 19 13 5 -30 -29 23 70 -2 -16 118 88 81 -99 16 -61 -5 -119 67 65 122 126 29 64 -26 41 -128 -127 -40 -64 84 31 18 -40 126 -46 -46 53 -127 0 -11 14 -5 81 -22 127 15 -53 126 10 -14 -127 -93 -93 -68 18 35 33 -19 115 50 3 127 22 120 -98 4 11 -80 -127 -22 -89 30 78 97 123 -106 31 -82 126 -17 40 127 -6 -18 -42 120 100 69 -46 -36 33 58 -79 20 86 127 65 58 -126 -15 101 -16 -56 -43 24 -8 99 40 -7 117 13 19 120 6 -55 92 -105 -93 60 117 -62 109 -24 44 -128 -43 -66 -106 -4 -74 -35 11 -101 5 6 127 -35 104 -27 43 63 70 -34 127 -91 -42 126 -27 -6 78 -101 -19 -65 127 117 124 -8 97 -117 -9 -127 127 11 81 126 -127 -51 37 -39 -73 2 -115 4 120 -78 -8 -66 -33 -38 7 94 -4 74 -41 60 -38 94 -43 81 -87 123 -54 48 -101 -37 -18 -67 16 0 -106 -90 63 -52 -8 90 115 -126 -7 -128 -48 1 -127 122 -21 -72 27 29 95 -62 -61 59 -34 49 -13 26 29 -41 -117 44 82 36 -111 -50 -124 0 -35 -87 0 62 114 85 66 -101 -50 -43 63 53 -73 -125 64 -73 6 33 52 -49 -26 0 38 41 -24 -11 13 45 7 -120 58 109 -55 26 29 -9 -30 67 12 -27 -3 -128 125 83 -6 82 -43 -115 82 30 51 102 -47 -36 -41 126 -37 -57 2 -39 4 -74 40 63 31 74 -53 35 -104 6 -63 33 127 -85 -51 -97 -21 2 18 40 -86 127 120 -6 13 -114 -32 -15 46 -94 47 -51 41 8 -17 -3 -122 31 -92 126 25 30 121 49 70 87 -6 3 -28 50 -21 44 107 110 -41 -42 47 77 -13 69 -23 -4 -76 0 24 100 36 -50 42 -56 -8 120 18 -37 -118 96 48 -14 27 -109 -110 -86 -85 -103 -89 65 -41 4 104 -46 52 -122 -56 -6 23 35 49 31 100 1 -43 16 125 89 21 43 74 99 75 -46 69 14 -20 -96 9 73 -36 -10 -2 10 -48 16 69 39 24 -128 80 21 -11 4 -53 -90 51 -14 29 -15 -50 -15 11 34 -17 -127 -34 19 -123 117 -26 -26 27 3 52 72 38 14 -28 -74 63 -36 -91 -25 -51 -74 84 -96 11 -58 0 54 29 -81 8 7 -35 -109 -19 67 -58 -52 -40 -122 -111 -14 -44 127 -127 32 -24 -26 50 -5 74 30 53 11 51 -18 126 121 127 -22 86 -46 9 -23 18 127 13 -107 -108 52 23 -24 -50 -1 35 127 -18 15 -33 115 67 7 89 -15 58 -78 81 51 -9 -2 -31 82 85 -127 -24 -118 3 -29 37 119 -39 97 106 20 27 86 88 108 121 127 -13 -6 34 -49 50 125 -74 -36 -74 121 33 21 122 -54 67 38 -35 7 12 -96 -69 -2 36 24 -36 -21 -4 52 -18 35 123 -42 2 -122 -128 120 42 -44 -46 -70 87 119 -35 21 -81 35 -26 68 2 -63 15 -127 105 40 -40 -1 18 57 6 51 78 -93 29 -122 -3 -83 -119 -21 -52 58 -118 121 -9 -128 -17 32 -6 118 6 -21 48 32 -126 -28 -11 -24 -75 31 -10 -8 -52 53 -82 37 4 49 -13 -49 -19 49 76 27 -3 -38 -6 26 40 46 47 -25 13 9 -60 44 68 -41 20 -75 48 36 -90 31 32 -40 -18 21 -12 -8 -58 -24 -33 -82 74 11 56 93 54 35 75 40 -122 -58 -34 -3 25 -98 -67 -25 -36 77 -34 -17 69 49 -34 32 -14 14 8 -14 -118 8 29 -3 -46 -17 -38 -46 2 -38 -48 0 -17 -54 24 -81 -35 -48 32 2 67 15 -9 -11 -31 -18 25 43 -31 -107 -38 28 9 -86 -67 27 29 26 -17 -68 5 -13 -31 51 37 10 -22 -128 3 29 28 -24 30 38 -69 -12 -34 -68 38 43 1 -22 -99 19 -30 -54 -40 38 75 46 -61 1 -46 7 -34 -61 3 -33 -42 32 54 43 30 -128 9 -23 12 29 39 11 44 -4 21 -96 22 44 -17 -10 -43 -39 -35 58 -21 -23 39 6 56 81 -62 21 -90 90 39 33 -18 5 3 42 -6 -14 28 67 28 -47 14 34 -10 -36 -6 28 3 -117 -6 -33 -36 -26 -16 27 109 2 15 21 -100 -51 5 -6 36 -4 41 65 -53 -27 -27 -97 40 29 -27 97 -6 29 -25 65 58 62 25 6 65 6 -35 -17 -67 -23 31 0 -10 51 24 -24 47 -125 4 -71 -20 31 -8 19 24 69 27 -41 40 12 13 -64 36 12 -34 53 -10 -20 -20 -20 60 -47 -31 17 4 -33 0 15 39 -6 -5 2 -77 -15 -72 -12 15 -79 27 0 -24 -53 4 65 -30 44 -28 113 53 7 -2 12 -22 15 -35 -66 91 14 -14 22 -13 95 -4 45 -3 16 -47 61 17 -38 124 11 -38 -78 -59 -26 -29 -38 -25 2 16 49 123 -23 -77 53 -15 0 -35 -15 48 126 -7 -2 -23 -25 -31 -2 53 -43 -37 12 -5 39 -28 -6 -8 97 36 -9 30 -52 -11 -18 58 55 44 -27 10 110 -51 -64 -7 30 -53 12 -23 25 -35 31 22 -12 -19 -43 19 -16 -1 14 34 16 26 -19 -29 6 -6 -50 18 -57 54 13 35 -21 -27 -4 45 70 30 15 31 65 -10 39 55 11 51 56 42 -97 60 19 -2 -5 -23 -29 10 77 -8 -76 -113 -14 40 -41 15 16 -37 24 -35 45 -26 -106 -39 34 51 48 103 -27 -30 80 117 -117 -17 -19 84 -18 -46 63 -40 -40 -24 54 -3 -17 -46 -51 -25 -27 33 -41 -125 -14 -37 19 -12 -122 -78 -51 -25 -22 0 44 19 85 47 -1 34 16 127 -19 61 -47 66 29 56 15 -1 5 63 -83 41 -63 21 20 42 108 12 -23 -7 -68 32 22 21 -4 -110 39 -112 -30 125 21 0 20 -14 16 -8 0 -87 -47 28 -31 -45 102 71 -49 -15 -111 38 12 -45 -19 58 83 -45 -21 100 -56 -44 8 52 9 -57 -38 -78 11 47 62 0 48 64 -33 -52 14 29 24 17 -111 -14 121 34 49 42 -26 -11 29 41 31 33 -49 -45 50 -72 -115 -12 52 9 -59 74 -70 -52 -40 -40 -7 62 53 17 -62 -7 77 68 -4 -79 16 -64 -27 105 43 110 -15 7 -89 -5 54 83 -49 48 -51 -48 36 -121 39 -5 -77 109 -37 -28 7 38 -37 -24 8 -7 -13 -60 64 -69 -25 -55 -34 38 59 41 -4 -24 27 -17 61 3 -57 82 26 -59 -77 -12 14 12 50 50 -50 -1 -13 12 -56 -14 -9 22 21 20 -48 -25 7 -34 43 27 12 -45 -8 20 16 -51 12 -48 -7 -22 -19 42 15 6 5 -58 -63 -116 8 -17 -18 -45 31 -20 12 44 1 40 -10 -18 -17 79 0 -4 11 29 -7 52 40 -30 -11 -16 -12 -13 37 -25 -11 78 68 -55 -38 52 32 2 36 21 -49 47 5 17 11 -17 48 -8 7 38 -33 5 -55 -31 18 0 -28 -79 28 31 59 34 2 -6 -14 34 -18 -27 11 15 63 -84 -59 -21 42 -43 7 48 -68 0 23 24 -85 -86 58 16 -1 11 -51 -5 -18 -1 -41 -54 6 -15 15 55 21 43 -127 15 -70 -34 -44 -13 -19 38 5 3 40 -5 -23 49 66 56 0 -33 36 18 23 0 -121 7 66 87 -15 44 2 28 -24 -85 54 -25 70 29 -50 12 90 24 -61 -14 -13 -33 10 22 7 37 -42 -38 -33 -21 22 -11 59 85 -59 34 -3 -21 33 48 -45 -60 34 -48 2 -16 0 -20 15 -58 -78 4 -30 2 8 30 -4 1 -13 -71 41 -4 -28 7 -40 -34 46 12 36 26 -10 -22 -27 -14 36 -31 5 -19 -16 -31 -28 -40 51 -9 15 -3 -29 51 -10 -32 2 -14 54 -3 -38 -35 -1 48 -16 15 69 21 -33 -17 13 14 -95 34 65 -11 15 16 33 19 -16 36 -20 -2 -56 33 -44 65 -12 -62 -13 18 13 -59 -8 -19 56 69 -50 -7 14 36 29 -95 -93 -40 13 -18 24 -43 -82 -7 16 -32 44 -39 32 -1 23 18 -24 26 119 39 0 -47 10 36 48 31 -11 15 36 23 4 -12 38 5 -5 -31 -10 -3 15 -8 -29 9 -128 -53 -51 67 -18 5 24 -31 -37 -102 33 -59 -81 34 12 -1 -31 34 -54 58 -8 17 -43 -87 75 125 -35 39 -31 21 30 20 65 19 -11 -31 27 4 25 78 62 55 -4 -31 -6 93 -39 -3 18 112 9 -20 -18 50 11 69 37 -50 35 -79 47 0 -54 41 -4 79 -47 35 47 5 1 -109 -87 -100 52 82 28 -40 19 -29 -1 71 25 13 96 -19 -16 21 5 39 1 -68 -24 9 17 90 6 57 21 -80 20 -16 21 27 -82 20 35 -63 -42 -33 -6 -36 22 40 24 44 -40 32 -29 -86 75 29 22 -33 1 -7 17 34 -28 29 -20 27 -46 -7 43 66 2 -30 35 2 31 35 55 31 -29 -34 31 -7 -7 -37 -70 -63 -14 -73 -68 -28 -21 10 -21 5 68 56 34 20 -33 -3 -9 -18 -33 42 -9 -23 -24 8 -24 -6 23 85 -4 14 125 -47 22 -6 -58 -115 -29 -64 -6 -32 -58 11 35 15 4 -31 -16 -112 -37 11 -75 7 42 110 -28 -23 -28 -34 -96 -40 -31 -1 -11 30 27 4 -26 36 -83 70 -15 -16 -76 27 -17 -67 -19 14 56 -4 8 28 13 14 -19 85 -71 11 29 -42 -13 -2 43 -4 18 -25 10 -76 -70 -22 -14 29 -117 -3 1 15 35 1 55 -12 17 7 -51 -48 7 -41 -49 46 -28 -10 -3 -28 19 -2 8 52 24 -19 -77 19 -35 30 -9 2 6 -52 -27 54 -28 -31 35 19 20 -13 -69 36 -6 -41 -10 12 -82 -106 -125 108 -28 -44 43 -20 -18 47 4 21 -17 46 -20 22 36 42 37 -60 -45 63 -54 91 48 15 36 -77 5 -35 68 -22 113 2 -21 9 -80 87 27 33 24 16 -7 -24 -18 -13 10 13 54 11 4 21 7 16 61 88 32 13 -14 -25 16 -1 56 -8 13 -32 -45 -23 -17 -45 -64 5 -56 1 -34 -58 -50 32 57 -27 -59 9 26 118 42 37 73 14 -4 -3 21 -51 28 -13 -107 -33 -23 32 -68 -35 -7 103 -39 38 -74 -49 -32 -23 1 -26 11 67 14 -73 50 -13 -20 115 -103 6 18 -33 33 64 -74 -19 15 19 15 -62 47 17 65 8 18 -15 -55 -31 2 -39 -52 50 -39 31 66 -58 45 -14 3 -35 -2 27 24 -15 -25 -6 -9 -3 34 -12 27 14 -33 6 -42 33 97 84 3 -63 34 -89 -23 -12 13 -33 127 -85 40 -24 -6 46 25 11 -108 29 42 27 -76 -30 -34 -43 18 -10 -34 6 -45 -26 -27 27 -43 -76 10 -104 -43 15 -33 43 -20 65 -9 -5 125 -10 -24 76 -60 72 59 6 -14 -9 46 30 41 -10 -9 9 -31 75 -24 -26 9 -69 65 92 35 -91 80 40 45 -59 55 -9 79 56 -79 -32 91 -30 -32 -33 71 20 120 -16 -35 -120 79 77 1 37 -43 -111 50 48 21 79 69 -67 99 -39 -126 123 -12 14 -66 -92 127 37 118 -53 -5 61 26 -3 -14 57 125 -19 59 34 42 37 16 -11 30 5 42 33 -15 -62 -33 -75 -34 73 49 59 -27 5 -26 -35 5 26 31 15 47 112 8 15 68 52 -34 106 31 73 -15 67 -32 -16 -19 -59 37 -84 63 9 62 -40 30 118 40 -25 -47 76 29 120 15 -80 109 -27 -7 92 -73 37 27 -51 8 -23 -30 -4 -45 -27 -102 -68 -1 40 -3 2 6 -43 -23 28 76 -13 6 -21 -5 -4 35 17 -34 -6 -21 40 -38 -8 -110 -33 89 -54 27 -33 28 -61 -26 33 -14 -68 8 -31 -11 53 -5 -14 46 18 -59 -31 -16 29 50 -26 33 3 -32 39 -33 18 -48 -39 11 -46 5 -23 32 12 -8 27 -6 28 -41 16 26 -16 -62 22 -10 6 86 53 -45 -18 -9 -34 43 -28 -128 47 -35 8 -52 -54 72 119 67 -44 50 -25 52 -9 -61 -51 39 -40 93 67 -18 -25 -60 37 -49 -55 53 57 53 53 -6 -72 -78 -6 56 -8 -40 -39 50 19 98 -7 -43 66 45 -35 -13 -18 3 5 33 25 3 -54 -36 56 -44 4 -45 18 54 4 23 53 8 22 14 21 37 -18 88 65 -43 -11 -96 -21 0 47 88 -25 -61 -77 -60 -24 34 10 -4 42 -42 30 -15 38 -39 6 15 32 2 39 -9 -64 -45 -46 57 39 -5 -60 10 -91 -6 14 -14 -67 0 11 -106 7 20 54 54 -28 49 -54 -17 -32 3 62 -32 -35 -11 -32 9 6 -39 0 -25 -31 65 -71 49 -10 28 2 80 63 -42 -24 36 29 -35 83 107 80 -89 61 124 -10 34 -39 -109 -28 -6 29 50 94 15 25 -103 -5 -95 34 17 -52 55 -31 -32 -24 63 -48 22 -120 -1 56 -18 -28 18 77 50 -92 -46 60 1 -13 -31 65 -65 64 -33 -59 52 -84 -46 -30 -27 -48 86 50 34 31 55 8 -30 14 56 -4 -71 -2 4 -27 74 4 90 -32 -40 26 -25 -63 -25 -119 24 52 -34 -10 75 -33 -36 -26 40 -28 -45 -28 -2 -19 43 -50 -27 50 -39 -2 -25 47 -48 -12 -15 -41 20 -33 14 -45 -40 -40 -22 3 -25 26 -58 11 -14 18 -43 -41 23 -1 -105 -99 56 -25 17 0 39 127 34 -69 5 5 -79 48 -26 -5 -51 11 -4 -32 10 57 97 78 -65 36 65 126 55 -20 4 68 1 -40 17 77 70 16 -39 62 77 33 -25 19 88 119 -21 42 76 64 -25 -55 56 -23 28 0 -23 51 -22 76 -3 -24 -10 30 -27 -56 28 33 46 -64 7 -13 58 38 -11 -17 -48 -99 27 19 30 -10 2 -23 29 29 -30 -14 8 -9 9 -10 -5 -22 -10 -62 -47 32 -24 -3 -7 -58 1 57 41 -13 9 -18 12 -62 15 49 -44 -2 6 -41 -17 -105 43 -2 -37 -3 -28 -1 -16 -35 9 52 24 10 -16 10 14 26 -41 50 -52 -23 -17 -12 -85 25 29 -82 -38 12 -33 49 18 -22 -54 -3 7 -24 -2 -40 125 33 -66 46 119 34 49 -30 -18 60 -30 -5 -8 10 -12 -9 49 -1 102 -36 12 -47 2 54 -12 -19 25 -10 14 107 32 -28 -35 23 46 -43 20 -32 -21 62 25 67 53 -32 -30 -13 -10 -9 -83 10 87 1 26 0 -8 22 13 52 -12 32 28 -8 61 5 -6 -12 38 -8 37 -30 30 42 -56 3 -37 -13 45 45 4 24 53 90 15 -66 -35 38 11 15 -20 21 32 -28 -3 -8 -41 4 -82 14 -15 -1 -23 -88 -7 8 -15 20 -37 -23 27 55 -18 -37 39 -16 -19 39 -37 -35 -30 -14 14 60 42 -59 42 -44 -10 41 -10 -45 -4 -25 -6 8 -3 0 -14 3 18 68 -58 -3 66 41 -49 40 8 -4 46 -14 27 13 -14 -32 40 41 -13 33 -20 27 -27 25 67 -62 -13 0 1 56 2 -32 1 40 24 -12 51 80 2 18 -13 -21 38 64 -43 -31 31 45 38 -4 -54 -30 -48 30 -9 9 37 -41 -24 30 -5 -22 22 -30 28 -5 79 42 33 -25 -51 -24 -82 -37 40 59 -36 30 -11 -23 -53 -20 73 43 37 1 0 30 -47 -51 -45 -20 -31 -21 3 -28 17 71 49 50 -23 53 41 -64 -47 23 -43 -13 35 -80 10 23 14 -57 39 11 16 36 3 -3 63 45 -5 44 24 -41 -2 -21 3 -58 -13 30 -36 -10 32 -49 52 16 -27 63 -89 -40 -54 -40 -22 68 -38 28 -51 -18 -37 60 -14 0 54 35 47 -3 90 -15 -123 -26 -28 -19 -71 14 81 3 71 1 -3 -10 -36 -3 56 51 69 -45 6 43 -63 -73 -40 9 8 51 -44 65 80 -10 24 1 -20 -128 -27 -18 -59 24 48 51 105 -106 80 -44 -6 -17 8 4 89 23 1 17 49 -63 62 65 40 -16 6 53 58 -19 -26 56 26 14 46 -12 13 -8 -43 18 -27 -15 -7 29 4 42 -98 70 -32 6 13 29 -23 -30 47 -5 -10 31 56 -9 6 -28 -16 12 8 51 45 18 -64 -10 -17 -13 -5 -10 -7 50 11 -12 -44 5 -58 -53 -32 -44 -39 6 -81 -20 -43 8 38 13 -95 14 17 33 27 -35 93 -49 6 -44 -12 -68 27 5 -63 19 -76 -6 -17 -20 -89 74 11 93 9 72 19 52 -31 -46 13 -13 60 98 -4 -21 85 12 -20 28 -15 -28 -17 -24 -40 -32 -52 -41 65 -39 48 -10 -28 -26 43 96 -55 -48 20 -1 97 2 -14 19 -34 -11 28 20 -10 76 -47 50 -53 69 9 19 -9 -12 -14 14 -15 -12 10 15 -39 31 116 32 24 49 3 49 54 -5 52 -50 -18 14 -77 13 34 20 79 -41 4 -9 -3 13 -69 11 -11 -41 -36 30 -61 40 -22 24 2 -16 -1 -47 -39 -57 -84 19 -73 -32 -65 8 -51 8 -55 -23 2 -9 20 38 -55 -27 -2 15 29 6 -70 66 -17 -38 -52 -29 -52 27 32 32 40 62 19 48 -1 2 -23 -78 -76 -28 7 64 -76 99 53 -70 101 71 -10 -70 48 -10 -43 36 4 41 -3 2 12 -75 77 18 44 -17 -38 20 21 -4 -11 -72 -89 110 9 -68 70 -91 -10 -114 -55 -5 -82 52 13 -7 -5 27 -30 81 -6 -53 -11 -2 69 112 -36 117 -94 -65 9 -11 -50 -78 57 106 16 43 -5 -7 29 22 56 -14 -88 17 -17 1 9 -27 43 -55 -19 5 5 20 -33 19 30 -55 24 -64 -70 34 39 -9 -6 -25 -3 -61 21 98 -36 -19 21 -8 -42 -65 12 0 -10 3 19 -26 52 -25 56 18 5 25 18 18 -36 2 -10 -36 -23 -21 -37 -49 -69 11 22 16 -50 8 24 80 58 49 56 50 -79 37 -21 -30 -122 -5 -52 -43 29 19 0 -16 68 -9 29 -30 -18 -6 -8 -32 20 -98 -61 37 19 -74 12 17 -58 16 44 5 31 13 8 75 -40 -20 61 26 -46 -19 -67 33 122 14 63 12 15 -17 11 0 106 38 -39 7 3 -77 -1 5 -32 60 23 -51 19 47 7 -20 8 3 37 -1 39 -26 7 3 -70 28 -23 -5 -6 3 -7 3 28 16 20 25 40 24 16 -2 -41 -24 -115 -73 45 20 21 5 -49 32 55 14 59 -8 13 -69 -19 -13 -37 32 35 4 22 -28 0 43 -40 37 -48 -41 -12 -27 20 -80 -16 74 -12 35 11 -2 -2 50 124 29 105 -63 29 -72 13 6 5 20 42 61 -41 -6 83 34 -60 77 0 20 26 48 -23 -68 33 76 -29 53 27 -51 40 12 11 -25 12 40 51 -26 -11 -80 2 27 -6 -53 -46 -24 4 -50 65 -35 87 18 59 36 4 60 61 -49 -21 82 28 -9 -25 59 -29 -33 84 -24 -7 66 -106 44 4 -54 -6 44 -7 66 -58 38 48 0 -9 34 -15 76 -60 15 68 -115 5 -38 22 -54 22 28 32 -45 -41 7 -77 4 20 0 27 14 -9 42 5 61 40 71 -3 -2 25 65 -9 56 -60 -9 -18 49 28 -14 -57 -3 44 6 47 42 -8 31 77 62 -18 -79 3 -33 -9 -38 -46 17 -44 10 37 7 -1 -13 -32 -27 -2 -20 -2 86 123 120 23 31 -4 95 -37 -1 -8 30 -7 50 9 8 62 42 60 64 19 64 77 -8 13 60 25 -2 -66 -11 57 -71 -4 -90 -29 54 61 62 13 -28 -33 -44 -30 -24 -4 -55 -29 -42 -8 -61 -36 35 21 106 20 -32 -1 -3 3 19 27 -37 35 -57 43 -30 -21 -13 -20 55 -118 -43 -32 -12 -16 34 -28 26 21 66 6 -17 4 -9 -109 -49 34 -123 -11 1 -25 17 33 29 -81 -2 47 27 3 15 10 41 -32 -12 10 -11 -40 9 71 -16 52 -1 29 -1 22 -85 0 43 57 -58 -41 -10 -68 10 15 -24 30 -33 37 35 -14 45 58 3 -39 -17 62 50 43 -90 17 -63 5 0 21 37 30 54 32 5 -3 60 -24 44 -100 -16 54 27 5 -20 -5 -89 69 78 -18 1 55 14 -46 26 -28 86 -68 -30 12 -3 22 -8 31 -8 -77 -12 6 -74 -34 76 -18 60 -22 -7 39 -7 -18 22 94 45 48 85 -11 -21 -33 -18 39 -83 -10 -10 -36 -16 44 -25 37 -4 37 1 27 -50 -25 23 7 3 28 98 8 22 29 22 -32 -54 -67 -15 -64 10 19 -12 16 54 21 -65 -34 -98 -14 -20 29 -21 63 -47 -29 51 72 -89 26 61 -113 13 -4 64 20 -30 7 -43 -3 -22 -104 5 94 51 -34 55 21 61 36 22 45 -15 -33 98 -6 -77 -18 -26 57 36 81 32 69 -45 23 65 -42 18 -8 -17 9 -41 -38 -14 -42 36 103 -37 64 -20 -31 -66 41 -14 15 17 71 -73 -59 48 -88 7 50 -37 12 -16 -64 -49 -91 58 113 -16 -55 -5 8 16 17 49 -15 -5 -12 -10 -4 22 61 -15 2 18 -69 19 85 13 39 -91 -34 17 -46 32 -103 12 25 -12 5 16 62 9 17 14 -12 -39 10 5 54 18 -6 -73 -3 7 19 5 57 48 24 -10 107 -6 51 17 20 -103 7 -34 68 6 22 21 53 -46 32 61 13 17 -44 -11 34 -46 122 -64 -48 4 -14 68 41 -25 -7 -39 -75 -9 40 -61 -2 3 23 9 7 -51 104 9 16 7 54 22 -29 14 60 -28 -103 3 -17 45 75 24 29 86 71 -55 -58 18 16 44 4 -43 -39 1 -49 -31 -10 45 5 120 -15 -85 8 27 -1 31 14 38 36 -32 10 14 -33 67 29 29 -32 91 20 71 -10 28 -17 -59 -54 14 -13 -72 14 14 18 -45 -6 45 -2 -31 -2 -63 -78 -6 -93 1 23 13 -4 -62 -19 66 50 35 -83 11 1 0 96 32 45 -73 80 -43 14 67 34 74 -11 -40 -48 -30 29 31 43 58 -59 56 65 -19 49 45 28 -18 12 -28 0 -18 -29 3 -73 -70 -11 26 20 -12 37 -23 37 -38 73 -37 6 -64 -2 -21 -53 40 -45 -3 12 -67 -44 12 -70 53 -21 -21 97 60 -113 104 37 126 -21 -3 -44 -46 55 -7 75 -58 13 35 18 93 47 -24 9 -122 17 50 -4 2 -22 67 70 68 -19 -65 5 45 -34 57 -43 39 -51 -79 -26 26 88 45 -24 60 32 33 28 57 6 25 70 -6 -67 -127 -12 -119 -11 63 2 14 -26 20 -59 52 -6 -56 -16 -30 36 12 16 -24 -18 41 44 72 -57 21 21 -41 -115 -43 -34 127 -40 1 51 -94 -7 -37 -21 -38 -1 -52 -29 -76 -30 35 77 -31 3 -34 11 -84 -27 17 6 66 16 -97 -70 28 -9 -18 -63 -102 10 58 88 -9 8 -49 -6 113 -31 -39 -7 92 99 37 -12 -2 -59 99 -21 -23 87 13 5 47 72 -18 -24 43 -45 23 -34 39 58 33 -19 62 46 -36 -34 58 -28 -29 -99 -20 -41 56 50 -50 66 26 24 -26 -6 34 53 14 49 -122 7 62 10 102 -22 31 77 -71 -26 -66 -32 26 72 14 62 116 -40 -55 17 54 28 20 -31 44 -92 13 -27 -6 58 38 45 -32 -11 24 12 -33 -72 -103 -13 10 52 59 0 26 51 60 -41 74 -29 18 39 31 -62 -1 -27 8 -25 48 19 17 -20 23 -41 32 -43 4 37 -45 11 -43 -2 19 -24 -40 8 -63 20 -105 23 -20 -13 43 27 -57 3 4 -15 -31 -127 -23 18 -55 -46 -72 18 -10 51 1 19 -61 -52 -19 -11 2 34 20 -45 -17 4 8 -4 -17 -43 30 16 -5 28 -1 -39 -77 83 37 43 -53 -32 1 -86 -3 -34 -43 -63 -22 21 -29 29 -24 -70 17 5 -53 -49 -53 -36 38 -26 29 13 -19 -50 -11 -109 13 16 3 5 13 -58 -41 -72 -63 29 10 -59 41 2 51 68 -11 -119 112 54 -34 -76 -50 -70 24 -15 9 -54 26 -28 -111 -24 -56 67 34 -12 40 -54 54 -36 -18 -41 59 -30 -7 0 30 -52 -17 -50 -6 17 -13 20 -25 -30 7 -78 10 6 35 -85 -12 16 -32 6 -58 -21 -43 -45 -23 -23 -21 -13 -14 -42 -42 -38 11 -60 -38 22 -49 20 32 -45 -10 -75 -22 -88 35 -13 33 11 -106 -40 -13 -29 -23 -44 9 -49 -26 6 -61 -44 -27 75 19 19 -56 29 -19 23 -19 -23 44 -22 42 -4 38 11 8 -61 39 -28 -19 14 20 22 53 42 -63 -12 39 2 75 42 32 -39 -26 40 -66 -47 -88 -61 42 -3 -60 -2 20 46 40 -61 78 7 -37 91 112 18 14 20 23 -15 -77 17 38 -11 42 127 74 27 36 -28 19 -55 17 5 17 27 40 -11 62 -35 18 -9 -13 -21 4 7 -15 -11 -48 -39 -4 -38 -1 26 9 -61 -9 16 1 -11 -36 63 -3 -35 -81 -54 21 -6 97 -36 -20 -14 -12 0 0 -7 14 -14 17 -12 -20 -26 -51 -37 -13 5 -10 -75 -1 41 52 -84 -20 42 -64 -58 -35 67 21 -17 28 -51 -45 -61 -47 101 63 -19 39 -64 -8 -70 -79 -5 50 20 -57 37 76 27 -51 35 -38 -15 54 -78 47 0 -25 93 9 13 -12 -34 100 -45 -87 84 42 -69 22 66 -22 7 41 -60 51 33 -10 -60 74 -5 81 40 -30 76 5 79 53 -37 -16 74 -5 -28 -55 21 -56 27 11 -93 38 2 59 3 -33 -8 55 111 -24 -23 6 8 28 4 -31 -127 -25 -7 23 3 25 46 48 -93 -93 -42 21 22 -27 4 -12 -51 42 -25 32 -39 70 1 -10 10 -8 77 -58 29 -44 27 -5 7 53 73 11 -46 -55 11 -34 19 44 -70 -45 40 82 47 17 -39 -79 -19 -29 7 44 26 -41 73 9 -104 7 -68 9 78 -52 -29 67 -36 45 3 43 32 37 66 4 26 -8 -10 -54 89 59 -4 54 75 22 -53 32 52 -59 -49 -47 14 67 71 15 32 4 124 -48 -4 59 40 53 20 64 -9 25 2 -4 16 22 -53 40 29 14 -44 25 -17 10 49 9 14 -43 -11 75 10 49 37 67 62 -6 8 -76 6 -18 -70 29 -4 -11 12 96 37 8 -27 -20 11 1 -15 -13 -44 35 12 -9 -20 63 32 54 -6 -2 22 -7 51 -69 6 62 3 -60 -25 40 -37 48 -6 -31 87 -6 15 -35 64 -5 21 5 1 -31 -18 48 22 12 53 -77 6 -24 21 -34 -119 31 60 -43 -44 16 47 -58 -35 -82 -68 -90 -44 6 70 -43 -9 5 16 27 -6 34 -10 24 -75 -25 -30 67 19 -10 0 -40 23 71 22 -6 47 22 76 3 40 -68 0 -30 102 12 17 114 -56 70 -18 49 30 3 62 -42 -21 -58 14 5 -102 3 -58 94 8 6 9 23 -41 -34 -10 -35 -57 -10 23 -23 11 23 1 8 -3 62 38 27 26 20 -4 7 -55 18 -20 -30 -69 3 -15 -14 -49 7 34 18 18 -29 -65 58 -49 11 75 -30 -16 25 -1 10 25 -44 -45 37 3 -12 16 22 57 54 46 -14 19 0 13 -62 -80 37 -24 -1 -17 22 -14 105 -21 -49 -46 7 -7 -1 -40 -33 -1 -14 1 73 7 19 -70 -71 -7 -9 57 -95 76 -8 -89 66 10 -15 33 -36 9 3 18 95 -22 19 35 38 38 21 -3 18 34 -6 87 11 -45 1 11 62 96 -80 -18 -11 49 4 -9 -51 -10 35 18 72 53 -68 35 90 28 32 -28 -71 -34 -10 -55 -35 2 -60 38 40 -42 -39 105 106 -114 -60 -19 50 6 45 11 -108 -13 13 -22 44 -28 -33 -128 -93 -42 -123 29 92 -99 81 31 68 -18 -7 2 86 15 15 8 3 62 91 14 42 -32 7 -58 50 -65 -64 71 69 -33 12 33 -11 37 122 28 -16 48 -23 33 -47 18 -20 -79 -55 -34 32 19 16 -23 -6 -9 15 -7 97 -22 47 -24 -15 11 -10 -50 -8 -4 12 23 62 20 -17 -50 35 27 -6 38 24 91 -32 77 -30 -27 -16 19 93 -8 7 38 35 39 7 17 48 109 73 53 -63 -42 -43 -121 -34 104 -19 13 39 -68 8 8 120 60 4 91 -48 34 -4 -21 -55 20 -14 60 -17 18 -4 -38 -56 -18 12 -6 60 -8 69 5 68 36 -4 -11 71 -44 -27 -18 47 37 -7 86 32 -59 -70 0 61 6 -33 8 -54 -29 6 -31 107 57 -65 -8 -75 -6 -53 -3 36 -26 -52 -53 -32 -15 51 -41 -6 -20 -25 5 -30 -8 26 -48 0 -24 32 77 53 42 -64 51 -51 -94 -5 -19 -35 -1 34 -57 -22 51 -4 -27 82 -63 28 17 18 70 16 -31 -1 -26 109 -19 2 4 -54 -29 -1 -18 -2 -18 90 29 -16 -103 52 -5 -27 91 104 -5 126 57 -16 64 -19 -16 85 42 4 69 16 -6 -46 -7 36 -4 -31 -4 36 33 -35 22 33 46 42 -17 25 -20 -38 18 -2 32 -14 -44 104 62 92 -27 -96 -28 -2 31 33 -2 -32 61 22 17 -2 -54 28 20 -14 -10 47 0 -12 -42 54 36 4 61 51 -31 6 -39 51 11 47 25 2 -115 -11 38 -44 -2 -20 34 0 25 14 40 -63 10 -13 -10 -85 73 -16 -19 -9 -12 0 11 -51 25 -71 33 -25 29 -83 4 -49 64 -66 -2 -44 6 -8 -27 37 19 32 -3 8 24 -16 -11 0 -9 11 -8 -18 0 -34 -1 -61 -31 -10 6 -64 58 -14 -28 13 -25 -5 -16 -22 40 -19 -32 10 11 21 38 -20 73 -7 22 25 -56 -15 -112 18 -24 14 8 27 -96 13 -22 53 -29 75 30 57 -5 -32 -11 -42 -32 16 10 36 71 80 85 -64 46 12 -26 79 31 -62 29 -55 14 90 0 37 14 92 8 8 -52 -13 26 17 -39 -23 1 -3 -123 -4 -65 68 -30 -18 -54 17 -16 -26 -19 41 -12 61 14 5 39 87 -36 -73 -44 50 -29 87 -48 15 37 -25 36 69 -27 -57 -23 28 -46 -9 -46 68 28 31 49 36 -58 -10 39 12 -14 -81 21 -4 -31 6 62 41 24 -6 49 -70 28 -69 4 -23 27 17 51 -12 20 -47 -1 13 -37 -60 -69 -15 14 19 3 12 -13 26 56 22 9 -44 29 62 79 10 38 -75 40 54 -40 38 9 6 38 57 34 -31 36 -88 53 17 -3 -108 -16 -14 16 6 -10 39 -27 0 76 -90 10 -8 -27 33 28 5 30 56 -7 -42 -89 24 -50 39 -61 -22 3 -51 19 -39 78 22 -12 -20 32 39 24 10 9 99 12 -68 8 23 -19 -14 -19 -30 -88 -25 48 28 -34 3 46 21 66 9 -39 -21 7 31 -98 28 35 -64 -69 26 -4 -51 8 48 58 8 -41 3 42 -15 54 67 16 -70 0 -5 20 8 76 7 -92 -32 -13 -5 81 -17 22 59 -12 -28 59 12 -14 57 18 -23 3 19 -13 -10 14 5 24 -52 -60 19 -35 31 -28 -87 -31 39 -2 41 -34 45 7 44 24 16 -41 124 -34 -24 -6 9 -43 -4 16 36 23 -16 50 -61 54 -38 84 15 -35 33 25 -30 37 1 -61 -82 -15 -24 46 70 -32 43 85 53 -11 -9 9 -23 7 28 65 21 -6 113 6 -55 11 60 21 -65 -21 -20 -35 -60 52 -40 28 -19 26 16 6 -4 -7 -47 13 -2 -7 9 -41 -21 7 36 49 23 -7 79 56 -59 -28 16 7 12 17 -5 18 -40 -51 8 97 -16 -58 -7 -58 20 8 4 -50 -32 39 -14 -25 -70 -16 -7 -24 -18 41 46 10 -1 -71 -60 -115 -67 5 -13 -29 -1 -60 -45 9 -24 16 32 -21 34 24 25 -7 60 13 41 -18 56 29 -54 -2 -28 -19 89 8 11 9 26 102 0 -50 78 -41 22 -4 -9 -38 -127 -14 -3 60 86 -20 -7 -53 -22 -126 -1 26 47 -1 8 67 8 -35 -37 -25 -28 -96 127 40 -22 3 -68 -6 -78 9 78 -31 -2 15 78 30 23 -32 -4 -30 -49 35 2 78 -25 -19 7 60 73 21 1 26 -47 6 41 -44 64 -17 -9 46 2 107 -36 36 -83 9 107 -63 37 37 -15 63 -11 -67 10 -65 101 -87 31 13 28 -8 10 61 -19 104 -37 -7 2 37 -22 -8 7 -23 22 -29 -50 35 -2 50 34 42 27 30 27 -1 -12 -55 24 8 -56 43 -73 -29 8 46 14 80 -36 -49 91 10 10 0 23 103 95 7 -13 23 4 73 11 -23 31 58 -3 -94 26 -17 76 38 -13 5 5 18 12 55 55 -22 -16 84 -30 17 46 20 55 -71 -18 60 12 43 -83 -39 65 77 56 27 76 77 -49 14 5 16 -113 -36 4 -31 24 8 14 -7 1 10 99 21 -50 29 -17 35 14 -76 80 15 -110 -47 -16 -7 -21 -11 50 -50 27 -11 -43 -8 36 83 -102 34 42 53 21 -26 23 -9 6 7 -28 -6 40 -66 16 -72 -25 38 -57 37 59 0 -4 7 -45 41 32 -49 -56 -75 73 -9 12 -3 30 4 -45 66 43 35 -51 -27 -32 11 11 -47 -40 33 -24 20 68 6 32 11 -32 -29 35 21 -35 20 -88 -64 3 -49 -2 -91 22 17 2 13 -37 -78 127 -12 11 -57 -2 73 -26 -17 -88 34 -24 24 -2 -31 -77 52 2 -14 -30 22 -25 2 -18 -3 -111 -45 -70 63 -5 -64 -16 -38 71 11 -17 8 -40 -128 18 -46 -7 21 50 39 -52 20 31 51 65 -7 54 16 27 -4 1 -35 72 0 44 -11 15 -3 16 97 29 28 22 17 -6 15 21 21 13 11 -8 -17 33 -12 -13 24 46 28 54 -37 -11 58 -13 -21 -26 -40 -54 -70 46 67 -3 -9 -78 58 26 8 44 -9 2 -24 -5 5 40 -39 -43 -96 -6 -70 -59 -43 24 36 4 -56 11 21 -46 6 19 -21 68 24 10 -31 -10 -1 -18 -30 9 1 -25 -76 81 -33 -3 -128 27 14 16 100 49 9 124 34 8 67 -27 14 25 7 -61 38 -6 6 -28 -16 -46 -2 40 -12 0 15 31 -108 48 -12 12 83 -29 45 35 -76 0 18 69 -28 -35 -6 42 0 17 -15 63 -18 55 -39 -45 -3 31 -14 -16 -61 -67 -49 -85 32 104 -6 43 60 4 -11 61 84 -6 -43 21 -23 -91 -25 -22 1 -56 28 -21 9 5 -10 -31 14 1 81 -23 50 47 41 27 -21 -25 -15 -45 52 -46 -22 -5 -25 -67 55 14 -39 -31 -27 -56 25 35 86 18 6 -26 9 -107 -27 -13 11 -56 42 -31 -67 16 28 31 13 8 -25 23 -22 24 -35 75 70 -8 9 -59 70 -28 84 -37 -83 81 13 -1 -71 33 8 -74 -7 64 39 -14 63 8 -17 -14 35 -95 21 70 -22 -52 49 83 94 10 9 25 65 -7 5 -90 15 50 30 15 26 1 -64 6 -75 14 -4 -13 -26 48 69 -24 54 -118 -33 -1 -20 -7 27 -96 -56 -7 -44 -43 56 17 44 -29 -39 20 24 -26 -67 33 124 -14 -35 31 -78 -96 -9 24 18 -2 6 -15 2 -17 52 -72 9 100 -16 46 48 85 91 -61 -21 27 -11 25 -75 34 -70 35 -7 -51 -48 18 70 -38 -45 16 23 -62 66 95 11 2 -36 -68 58 -61 -3 -106 -126 -49 -32 49 -11 71 -49 87 -36 -8 14 18 65 -17 79 24 -61 -20 42 11 35 42 4 116 10 54 68 -28 -31 77 -51 -14 11 -12 -20 -37 10 18 -14 -1 67 -1 -5 -63 20 23 75 59 -8 -40 6 -13 -10 42 25 31 -69 -123 0 66 42 -17 -69 -16 -35 -54 -5 20 12 8 14 -70 20 30 60 59 22 -96 -4 8 -82 -32 -43 13 -5 -7 31 -4 50 6 -63 103 -16 -15 -39 67 -25 -84 -76 -40 -14 27 12 25 -10 16 -33 11 31 53 -85 -19 79 -74 22 -3 43 -2 44 -4 47 45 30 12 118 127 45 -36 0 -12 1 -22 -48 -13 -11 -44 -73 26 14 79 30 21 -25 -10 -8 4 33 -35 -29 33 46 -8 -26 -19 25 -23 27 2 -56 -35 -50 -9 -67 -61 -40 5 48 81 -60 -35 5 19 -4 -8 38 67 73 15 -8 36 42 -24 -42 -32 -19 -28 15 77 -4 13 -43 46 -83 -3 -38 -2 -92 -73 -13 -68 1 -73 -37 11 -6 53 1 57 -30 -37 14 -40 5 -4 -83 23 -66 -63 18 -38 15 3 12 48 -5 -68 -3 33 36 38 -9 -9 5 1 24 11 -14 -31 -84 -18 21 -1 -56 -15 14 34 -29 -26 39 54 -44 26 -65 -22 39 -31 -38 67 10 -109 13 39 35 22 -54 -72 -1 -3 -11 -61 32 -32 -11 7 -12 -36 2 -27 -18 60 41 7 80 -5 -58 -21 12 -93 -6 -21 42 -31 6 12 -79 13 40 -41 5 -20 -53 11 27 -11 29 -71 -38 -70 84 -8 19 127 30 56 21 8 51 -23 17 2 -50 -2 51 -7 52 -24 -11 54 4 38 -29 -48 102 54 -43 -21 22 26 46 10 1 -99 -3 -88 -34 -66 -71 115 5 -54 43 50 38 13 -70 -65 123 -78 -1 -1 -8 -41 17 -22 -68 -12 -38 -46 27 -6 58 -24 5 19 9 7 -11 -9 48 90 -128 -19 -9 20 7 3 -20 7 -8 33 -77 -65 17 10 -3 -45 -74 1 61 -39 -14 23 -25 -60 -49 -45 113 10 -49 -46 -10 33 -2 24 77 -20 26 16 -67 75 -17 -41 15 56 93 34 45 -36 -39 -15 -16 78 8 1 88 -32 17 17 37 22 -20 22 78 -34 -30 38 53 66 -3 67 -19 14 23 3 0 49 -7 -15 -7 2 32 -53 4 -28 57 -27 4 -35 -20 -97 68 24 -31 -19 51 -29 27 65 67 9 -23 40 48 22 9 9 31 0 -70 -65 18 36 99 19 -56 22 42 -17 -27 39 -27 -4 59 65 47 -2 -118 18 76 67 2 57 -17 -16 45 -8 12 29 8 2 -60 3 -9 42 -106 1 -28 -21 45 5 -15 -26 -15 -10 6 -31 -54 8 -27 46 -45 -61 -36 31 -4 -24 -9 -15 -112 12 51 36 44 -61 37 -59 20 -61 38 -59 15 42 14 -11 -45 61 19 24 -63 -16 44 -63 59 -56 -13 -36 -43 30 -26 -29 97 1 -47 7 -30 29 -37 -12 35 89 55 28 -49 36 -24 53 -8 7 3 -45 -57 -1 47 -32 83 -2 71 90 -46 2 71 18 -4 -3 -59 22 121 1 10 -39 6 45 -20 29 -25 90 -41 -3 -18 34 7 -55 45 48 -68 -16 -73 -21 -21 66 -36 45 71 -11 64 59 -2 -73 44 -16 20 -88 -71 29 -29 75 -77 -2 -8 -78 -6 62 24 -48 -37 110 20 -36 68 -29 -36 -28 -53 21 25 -32 -31 13 -53 -5 -123 -39 17 -14 -101 -80 -31 -7 -24 40 9 46 0 65 46 -65 -7 -16 29 47 -17 -5 -56 13 -12 -12 6 44 1 -39 17 -85 59 -54 -26 4 4 -54 39 -52 -28 92 10 -32 -48 115 1 -113 68 127 -13 46 49 9 -39 0 30 126 49 -88 60 -36 1 20 32 -3 11 -10 -11 38 3 7 -11 -6 -9 -2 -6 32 93 4 27 -45 -7 25 21 -28 2 13 34 -31 -36 40 -7 47 -18 -78 -60 63 -100 -13 22 -24 -29 24 -39 17 -18 -6 11 24 -53 11 -53 -1 -3 -48 29 -11 -48 43 43 -126 69 16 43 16 27 14 44 5 66 -104 -120 0 -51 28 14 48 26 7 -78 -31 51 54 16 -16 -25 12 39 14 -15 8 -15 30 38 99 82 -6 23 -6 -29 -22 -1 -88 -58 31 -7 66 15 -1 90 39 -57 16 21 -53 -15 8 54 -18 47 -18 85 17 22 95 16 -9 84 -76 14 30 -74 -13 -80 -11 -22 57 36 -20 0 -19 40 -68 49 12 8 36 47 36 18 -13 -27 44 13 77 9 35 33 -10 19 29 45 23 44 32 12 32 42 66 -44 68 63 5 42 28 10 -2 9 -26 25 -35 -73 56 13 6 -7 20 -5 0 4 13 49 -31 -4 18 -7 7 -13 -9 -10 9 -10 -2 9 -18 -12 25 14 5 14 10 -8 27 14 31 -3 0 -15 15 -23 -12 6 -37 20 0 -13 -13 -8 7 10 4 -18 23 2 -13 1 -5 4 10 4 -22 47 20 15 -39 -9 -14 -28 -6 -35 -19 4 -13 -2 13 -18 -35 -20 -16 -20 -13 -13 39 26 0 4 -46 -47 3 0 -26 12 -13 -1 -8 2 23 11 -23 -114 96 0 --38 5 22 0 -22 54 -17 20 20 56 -13 41 30 -37 21 2 -20 -27 -31 17 3 -12 -23 25 -17 -31 55 4 -31 18 -64 -4 -11 -11 20 -32 -8 -1 22 -55 66 -3 -9 19 46 9 29 30 -13 15 -30 -33 7 22 -42 -12 29 -23 -30 27 -1 39 8 -26 -1 -8 -12 24 -39 32 -26 54 0 14 -20 37 -17 -24 1 -12 3 -30 -11 -10 25 -29 4 8 13 -6 -53 14 45 20 -29 -10 10 -17 -14 9 16 -16 46 -8 31 24 12 -5 6 13 -7 8 0 10 -18 -23 26 1 -18 -1 20 -14 32 8 -12 -5 -4 25 -12 -6 -46 -8 33 27 -16 -3 18 -26 22 -26 -6 5 25 -11 23 -14 20 -16 18 -18 -18 -26 -3 32 26 11 4 9 -25 27 -23 -29 -10 16 22 21 -13 -41 28 -24 -9 -6 -6 7 -14 4 -12 55 -9 28 4 -20 -6 1 -10 23 -18 26 -1 -16 17 -6 -13 -13 -47 -13 -11 30 -14 -28 26 16 -24 -8 6 13 -10 7 12 14 10 11 5 -26 -17 1 -6 -14 2 5 -14 -15 -25 -14 -7 1 39 18 14 0 -7 -19 21 13 12 0 -2 20 0 -4 7 -8 24 -5 40 -23 10 -4 24 -20 -8 1 13 -28 8 -29 4 -2 -15 -19 -17 -21 -16 19 11 -26 -22 1 24 15 29 24 14 23 -13 0 35 -8 24 8 18 3 -26 -5 7 -31 6 19 -13 -45 -7 6 20 32 7 74 59 -77 -5 51 11 -17 -2 -33 14 40 4 -24 -1 41 46 2 -13 -12 -35 42 19 -11 19 -47 -38 -13 20 -2 -1 -7 23 105 34 19 -11 -10 -33 -18 10 51 -9 42 -26 31 33 12 52 -18 0 4 -15 -47 -19 -35 5 -10 -19 -106 43 -21 39 -36 50 14 60 13 25 19 -15 -3 -26 11 25 -24 -29 -50 -28 3 -29 33 83 -25 50 41 -12 -14 33 -22 -21 16 3 -18 15 57 7 23 -5 53 -53 5 23 11 -7 -12 11 6 -23 -31 39 -15 24 -4 -29 -16 -56 18 -14 -5 22 14 7 -33 12 -23 21 -19 -8 0 32 32 7 -32 -13 46 -13 -8 51 19 50 -13 0 12 5 -13 0 33 30 2 33 3 -64 -17 -28 31 9 9 9 17 15 33 17 5 -5 8 -12 35 -7 27 35 -32 21 -60 26 -55 29 -16 51 -36 -23 13 -10 23 3 -20 -15 -14 -7 -3 0 -39 31 -21 -22 -32 -9 11 -30 4 -33 22 -9 -4 38 18 -11 34 -38 27 4 18 -2 17 -26 28 33 -35 30 -9 -33 11 -10 -1 14 1 -38 6 -7 26 4 -11 1 -12 -30 7 61 -11 -19 -12 14 7 44 25 46 14 40 31 -8 -10 -26 10 25 19 -51 11 15 9 -10 3 24 7 -23 -66 9 -9 -20 16 -14 6 -17 2 -4 -6 62 0 15 3 -16 7 25 38 -20 -41 19 -13 40 16 4 2 73 93 -24 -91 16 40 -30 54 -60 -48 3 -17 -59 -8 12 30 7 6 13 65 -5 25 4 18 37 4 -6 -27 32 -3 -24 -51 -38 30 -1 105 -40 -38 40 -19 41 40 -50 33 47 11 -32 53 -29 50 -20 -40 11 3 35 -11 4 -70 -32 -31 45 47 18 -6 7 -36 -71 10 68 -30 2 8 19 -33 -4 -45 14 2 -50 -15 -33 -23 -24 43 20 33 -29 -15 -8 4 21 -91 55 28 -1 -4 -5 -6 -36 60 6 45 19 -12 18 -38 1 -38 85 11 -35 43 59 -52 9 -62 69 28 58 97 -37 9 3 -61 69 -13 28 1 13 -18 -4 5 22 -4 -12 58 -18 16 16 38 -14 -60 -96 6 -28 -16 -32 -41 23 14 -15 44 -2 6 -16 6 22 64 -34 -11 57 -61 23 29 -51 -21 29 -60 -24 18 29 -26 41 43 -20 -45 -31 47 51 3 1 -3 28 6 5 24 14 4 -6 -15 -23 22 -30 -1 24 26 4 2 -47 54 34 -16 -11 12 20 25 -16 5 -9 -30 -17 43 6 11 7 -39 27 1 27 -12 -19 -28 16 18 -24 34 53 42 5 26 -19 25 -33 -20 4 -3 30 -49 -5 43 -41 43 84 22 -32 -17 10 29 23 -8 -33 -93 -25 12 -24 43 -29 17 10 27 16 -49 -10 -3 45 -29 57 31 -65 7 15 -21 -4 -27 25 17 1 -17 -20 28 -31 -22 -9 -27 -54 37 77 119 -2 -43 -2 28 -14 9 -8 -78 -20 -10 -66 1 29 -50 13 -17 -45 -7 17 64 23 37 21 -32 -16 45 12 -24 -9 -49 46 76 -23 0 -48 36 10 20 8 -44 -12 10 55 25 -29 -27 29 -22 16 18 -17 -49 22 -31 18 -6 -35 81 35 -53 55 -18 49 22 -3 67 2 -84 -6 -25 -4 6 30 -65 42 -83 -76 18 81 27 -13 12 48 43 -24 -21 21 2 52 78 -19 19 -42 -8 37 31 -6 -14 -46 10 49 -24 27 26 -1 -34 -17 50 -26 70 -68 18 -20 31 46 16 -2 42 10 -47 29 -29 25 46 31 -26 5 57 34 -1 -8 -11 -44 32 -7 -32 -56 -11 12 -12 4 4 43 24 53 -10 30 0 12 -1 -38 -8 -20 45 36 6 45 -25 -30 38 14 33 -27 14 9 29 -51 -39 56 -9 -35 32 13 38 -14 52 -7 -15 19 -60 -4 35 -39 46 32 12 11 18 -13 9 13 16 -26 35 29 -39 19 -25 -35 -42 -50 -57 -14 24 8 -2 21 -20 -14 -38 20 13 17 2 21 -8 -18 -26 2 -4 32 61 -23 26 -32 -20 11 -8 5 -18 42 -23 -24 12 1 -14 2 -6 17 -10 -26 13 -15 -10 20 0 8 -29 -6 -27 33 26 35 -21 27 -4 -18 -77 23 8 4 4 -15 -30 -6 24 1 34 8 -25 4 -10 -7 20 36 27 11 3 13 -12 -22 -28 -3 2 43 37 3 -32 14 -31 -7 -9 -40 9 27 -49 12 -7 -10 -47 43 -3 -55 -39 -40 54 -22 -25 54 -33 84 37 -42 3 1 17 -7 -45 -22 -17 -61 -25 10 -75 -66 16 -27 25 34 12 -12 -16 53 -15 -77 -62 -31 -28 -43 -41 -2 -81 -32 24 -13 -36 16 7 -12 44 19 16 -14 -20 3 -21 -12 -51 -4 -14 17 -47 -16 -29 8 13 -5 -4 -7 -49 23 28 2 -45 17 -57 35 -72 10 32 46 -12 32 18 -13 -1 22 -19 -3 -21 14 -2 39 30 -37 32 2 24 -31 31 3 -13 5 7 11 29 56 1 -44 -14 20 13 17 -22 25 56 -55 -31 44 -4 -24 -3 -31 25 -20 -11 -1 -22 -40 -19 -62 0 -30 40 -25 -31 6 -29 6 -3 8 3 15 -24 1 7 0 -82 40 -49 25 19 -2 32 -14 -47 0 -23 3 -31 35 -9 -17 -10 17 -18 2 36 2 1 14 1 15 -1 32 -4 -4 17 26 17 4 -21 18 -13 22 -15 28 44 4 3 25 -9 19 -19 -10 -17 7 -32 30 -18 6 -21 -49 -45 -3 28 -33 -7 4 -32 16 26 4 15 -16 1 -5 18 2 -15 -18 -7 -7 15 9 0 -28 -14 -7 -10 -13 -30 -17 -14 -3 17 -26 1 -29 7 -27 -34 -47 25 16 18 -42 6 -6 25 -13 -6 11 13 22 -18 10 21 -10 -17 -20 22 3 37 1 -23 14 21 11 -72 -1 48 30 -54 12 -83 -7 -31 -15 46 23 -26 -46 -52 29 -35 19 31 -6 23 2 -11 -47 37 60 -30 -36 -34 -36 30 16 42 -34 -24 -29 91 -22 35 13 -55 8 -12 21 -21 -12 -27 -37 -19 -77 -27 -23 28 -6 -10 42 -20 -25 41 45 -49 -38 32 -26 84 -49 1 -42 28 -7 -25 19 -36 3 -4 7 31 -12 -2 23 -21 -57 -39 43 -49 -16 61 -23 -34 15 -46 8 11 -27 54 36 24 26 77 -30 -66 -81 -9 53 18 23 33 -25 -93 -1 -22 39 -1 33 62 -4 68 -58 -19 4 56 15 33 -8 19 -13 -23 12 28 7 0 -81 17 29 7 77 -41 -17 19 -31 11 8 1 -6 -25 -51 -9 28 -4 -19 20 116 23 -25 9 3 -59 -51 -2 27 -2 72 50 -87 -2 18 -42 -7 -4 -6 -55 63 -44 24 12 32 -15 -101 28 -5 33 35 40 -14 -22 -2 -15 18 -39 -35 -63 -17 -15 23 -5 -47 44 25 17 -33 22 -1 -8 50 43 53 -9 -25 -3 -5 9 12 47 31 -12 -9 -19 15 19 -49 8 9 17 30 -2 38 32 25 15 -23 37 -31 12 20 -3 -9 -26 -51 20 5 34 -5 10 -44 -4 -13 -5 39 4 13 33 19 -5 -54 -20 -17 42 19 -48 -11 -12 17 -23 -37 37 43 -2 7 23 -7 16 6 -3 -7 -42 -8 -11 17 5 -8 -25 -14 -28 32 -5 -68 -21 -29 15 -8 -22 2 26 21 -17 29 15 34 44 10 -26 -29 18 -10 -25 -12 41 47 16 35 3 30 -12 -12 -4 50 0 -78 -11 -9 -21 3 34 7 56 13 -22 46 -3 -11 -11 -4 34 57 10 -34 3 -5 29 -27 -21 32 -13 0 -43 -20 -15 3 -10 22 21 -47 16 3 -27 -2 19 -32 40 -7 -29 -12 -41 -29 -23 24 6 -21 11 -44 0 -32 -29 -26 -30 49 3 -10 6 -31 33 -43 -27 26 -14 7 24 28 8 -1 -23 11 -7 -33 -28 -26 4 -37 -23 12 -15 -20 47 29 25 -31 22 -38 -27 -14 33 -10 -3 -4 15 -15 -23 -3 -2 7 -10 24 10 -13 -18 13 7 2 40 -37 -15 -22 -30 -15 48 9 12 26 -13 12 18 -29 2 21 -15 -68 12 26 -52 -3 4 21 58 -33 -21 -7 -13 -9 -10 -19 -17 -15 11 -34 -77 -50 -22 -18 -13 -8 30 38 -32 13 -51 -6 -4 29 32 -6 -28 -4 -13 -24 -30 17 29 44 16 -12 -17 -17 -3 16 -27 -46 -25 -6 0 -6 37 -44 -26 30 28 3 -3 -46 20 17 -37 20 -49 18 12 1 8 -32 -45 13 18 -29 20 -27 13 26 -14 20 19 24 27 -11 -25 2 -1 28 0 -7 -13 -12 26 25 -1 -29 13 37 -15 16 -1 -33 29 -6 13 10 -15 -29 -3 27 -8 22 -5 -5 1 24 4 34 25 -35 -24 -8 -30 -24 34 -24 -16 4 -31 36 -15 -32 -13 -22 8 -12 -81 23 21 -11 -13 -37 23 -2 -6 -8 -5 -13 45 -12 -30 1 9 -1 -12 36 5 -47 -20 28 -39 -7 52 7 -48 -11 -2 3 2 26 4 8 -38 20 64 -36 -14 -45 -45 16 36 20 -70 -18 -27 3 11 -9 -19 -14 -16 7 -27 6 -13 -29 -2 37 33 -23 -22 8 -28 -49 25 -21 10 48 5 26 -3 -38 26 11 4 0 -34 42 5 -6 -33 22 5 15 -10 -6 6 -8 13 -2 14 -35 15 -9 26 -43 -61 -32 -20 18 8 -12 -13 -62 15 15 -23 -30 -7 -5 -33 15 -3 -16 -36 22 51 5 -20 -41 -6 -10 2 -8 -3 -47 -36 -11 -1 -34 -16 2 -43 43 6 -1 -13 8 4 17 -32 8 17 14 -13 16 9 37 14 2 32 7 11 13 -2 -27 22 -39 -38 23 -5 -49 36 19 32 -34 8 -15 7 -20 -5 31 50 7 -10 -51 4 9 19 14 16 -3 -17 -23 -1 -11 -9 -24 2 -4 -34 36 -2 32 4 -2 -5 -17 -9 8 17 -41 -27 -9 -16 8 -7 -26 -17 13 -30 -20 -13 16 0 -14 3 -10 -12 -37 19 -6 -9 -23 10 -8 12 15 -18 8 1 -2 3 -10 -5 25 -9 2 24 -32 -27 24 -8 -14 -18 -40 2 -8 -24 -5 4 -13 3 -3 -3 -1 -13 34 -9 -13 12 -15 -10 1 -11 -3 34 26 14 -14 20 5 -8 16 28 6 -8 -21 12 -14 -22 0 29 57 8 15 -7 -12 18 1 -24 -35 -51 10 -11 -2 -47 16 38 18 47 -34 -45 4 16 -5 -14 12 30 16 -25 10 -15 -32 -35 69 25 -23 -1 -8 35 -27 -28 -5 44 30 -17 20 0 27 -3 -28 35 -69 4 32 2 -24 -5 -16 25 2 -41 -50 9 -18 57 -5 3 -52 -31 -22 17 17 4 13 11 68 2 -70 -4 24 -1 6 40 -7 -9 -12 56 -23 -40 -23 -18 -12 -6 47 9 22 36 12 12 23 8 -6 -23 -27 -13 -20 -38 3 17 20 17 -55 21 -32 -20 20 -13 11 35 -21 6 -3 18 -13 -17 8 17 8 -6 -1 -6 -10 32 11 -5 10 -31 2 -23 23 26 -45 2 -8 54 14 -12 -12 -6 26 -37 -17 30 2 -2 -19 3 28 -1 9 -37 70 -3 -6 12 -18 49 -19 -31 30 -6 -9 -14 -26 27 -47 21 -37 -30 4 -15 2 26 30 20 -13 32 0 -9 13 15 -20 -10 -37 -6 27 -22 -12 4 16 3 -11 -13 23 -17 17 -15 -43 -14 7 4 24 22 -2 10 -42 29 -18 7 38 28 6 -39 -13 -12 5 23 26 -13 -8 44 2 22 -32 -6 6 -27 24 -17 18 26 -34 20 -14 25 -12 0 -9 28 -28 16 -33 3 -8 23 -13 -16 -3 16 -19 12 28 7 8 -45 -19 -1 11 0 10 -16 -11 -17 2 36 3 -34 12 -3 -40 -22 21 7 26 -18 -15 27 -3 35 27 8 42 -29 18 27 -23 -37 -1 13 8 -22 -14 63 29 -2 18 2 1 -5 36 -14 43 -1 32 1 1 -7 -19 -40 8 -21 -17 -1 8 -15 -37 5 24 -35 27 9 45 -13 -33 -65 17 18 -14 21 -17 -14 -16 -30 51 1 -21 26 48 -26 -11 14 15 -68 26 25 -3 -9 14 8 -2 11 29 12 -16 17 27 25 35 10 22 -17 6 -13 -24 -5 19 20 -3 29 21 -6 16 -7 8 2 19 -20 9 -12 28 38 0 -6 -7 5 0 2 11 10 -15 -25 -28 2 -8 -13 4 5 -5 -37 -11 20 -26 3 -23 -34 -16 9 8 -4 -45 -1 -26 -18 16 -17 -22 8 -11 -17 29 11 -16 -5 34 8 -6 -30 -7 19 1 -17 -2 4 23 -16 9 0 -31 3 -1 -6 24 -34 -15 8 11 -9 13 -22 1 -7 19 -11 10 -18 5 8 20 22 -15 7 -4 19 -12 21 -5 14 23 29 -4 1 -2 -21 2 7 -1 -11 -2 22 -5 28 -6 -33 30 -40 6 -19 7 -8 -41 -15 2 -13 -24 12 -11 7 1 5 -16 3 -18 -8 27 31 23 39 11 -16 -1 -10 2 -30 -19 -22 7 -24 1 14 -5 -22 -7 18 21 27 8 2 -9 1 -2 5 8 -14 -18 5 -13 13 -11 3 -13 31 5 -12 31 -14 28 45 -14 23 -6 -22 9 9 38 -11 -3 -27 8 3 13 -9 -39 -4 -5 -14 6 -66 14 -17 8 26 19 -16 -18 -16 62 -12 15 39 26 7 -4 55 6 16 76 35 12 -24 81 0 59 30 -32 -17 14 55 -51 45 59 -20 -41 -28 0 2 -28 8 -36 19 -6 17 -25 -52 16 21 34 30 -7 -6 -2 0 -49 15 -40 76 -9 -89 18 -13 7 34 67 -19 22 -32 49 7 24 -2 -49 15 -39 -40 17 7 -9 34 -91 -37 -8 -51 -47 -62 -8 74 -41 -10 -8 9 -40 -19 -56 -52 22 11 -10 30 10 -4 37 -33 25 -23 22 67 63 -8 -11 31 17 -2 -42 34 -4 9 46 19 47 12 -12 68 -68 16 40 -35 11 -4 37 -53 32 20 -19 -33 39 23 -47 17 -35 14 4 -28 18 -27 32 -1 -27 -4 -55 -10 5 15 26 62 -81 1 -12 48 -22 14 -24 30 10 -8 18 1 -6 -122 5 -61 -26 -34 38 20 -36 -9 50 -33 -44 -30 -58 10 48 54 82 -14 31 -3 14 12 16 9 -26 -95 35 9 -7 -19 3 -24 18 11 22 36 3 -27 -47 33 36 -4 -14 27 -10 52 9 18 -43 1 35 -12 14 -9 -18 5 -26 -19 -23 12 -59 -12 -6 1 23 4 8 -21 -11 26 -24 -29 21 30 5 -9 -15 6 34 44 32 52 -4 54 -19 8 22 17 27 0 14 33 -31 -4 -2 -34 11 59 6 15 -37 24 -54 0 26 -31 -26 -13 9 -9 -6 34 4 -25 53 22 5 27 -2 10 -7 -4 41 -4 44 46 -15 -55 -32 -8 51 -17 -9 4 -21 29 6 17 26 -27 28 -23 -12 -28 -12 17 -6 40 -9 23 -44 36 21 21 22 24 12 25 -34 16 -4 4 33 60 -29 43 -11 3 -40 4 2 3 -38 -10 -38 19 3 59 12 18 2 56 23 61 -30 25 25 1 9 0 2 15 -26 60 25 17 -7 16 10 -9 -11 -22 -9 -10 -12 -11 -19 29 3 2 5 21 19 16 -31 -49 -24 7 24 73 -25 -40 2 -7 2 -29 -4 -49 -30 -14 -23 -2 -15 -12 22 -22 -6 3 -28 -34 -20 -33 -5 -40 -16 41 -23 -13 56 11 6 -22 -5 -6 -5 15 -3 -8 28 13 -16 32 -38 31 25 17 1 23 14 18 -12 30 28 -59 -52 28 -4 0 39 -17 45 -3 -16 1 29 -57 35 0 1 33 -17 -25 5 42 -7 -36 -8 13 -15 -28 -31 -43 34 -6 -21 -15 -11 -18 -6 9 10 -5 6 15 -16 -21 -12 22 -23 11 7 0 16 -25 -13 -5 -8 -7 -2 -23 29 45 13 -14 -20 21 -10 -18 19 5 -25 -35 -3 33 19 -3 21 -3 -6 4 -18 28 -12 -10 -14 -16 -18 -26 12 7 -7 4 -3 -5 47 -19 30 12 4 -14 -6 -2 9 -5 -17 -3 12 -23 -6 -1 -32 11 -15 2 19 21 -7 3 -15 -14 28 6 -21 22 16 -22 -15 25 -33 -37 -16 -9 -3 33 -24 66 -53 -9 -14 24 -11 -26 18 -34 -41 33 8 25 4 -20 -42 9 -9 -71 -7 -25 2 29 -28 -5 -28 -4 18 -46 -12 13 -41 32 -29 -43 -13 -75 -14 -29 79 -59 -30 11 -58 -30 17 3 14 25 42 44 13 -43 3 -21 -1 -17 -16 14 23 -31 -33 -32 -76 2 15 -45 -1 12 5 28 -46 -3 -19 -17 -23 3 39 0 34 20 -33 17 29 -3 55 -5 55 50 14 51 -21 -31 32 24 -40 -31 4 6 13 42 -6 14 32 15 12 -25 -18 -45 31 6 51 28 8 22 -6 -16 -13 7 33 -32 30 -31 -30 4 21 -17 43 2 0 -22 -45 -19 -3 0 -1 -42 3 -17 -13 26 -58 32 3 -18 3 4 21 0 27 -10 19 -11 -12 2 18 -6 -5 3 -26 8 19 9 -6 13 -7 -26 -17 -10 2 -37 10 -37 -10 13 -16 -12 -18 -15 -25 -2 0 8 -31 -9 10 19 -19 -2 -9 12 -23 8 3 14 15 16 18 -34 20 3 -27 2 36 16 14 23 2 5 15 21 21 -23 11 -30 -16 3 14 -8 14 -20 -25 5 3 -36 -25 12 16 27 -2 -38 -15 3 -17 14 -3 29 14 -22 11 -2 1 -40 7 6 12 9 -1 -2 -23 22 25 -1 -18 18 -14 -54 13 26 -13 17 -12 6 -32 9 21 0 3 -23 -1 19 2 -18 8 -27 5 15 -26 3 16 19 -49 -35 -67 -7 -75 6 13 -27 18 7 -24 14 41 -7 -98 41 -5 51 -7 -44 22 -35 -38 -43 65 21 -14 5 -89 9 -67 4 34 -10 42 -6 -45 12 -19 -60 6 -46 3 -13 -23 -92 10 -22 21 2 -55 19 -24 54 -51 -26 -57 38 -44 19 0 -55 -5 -48 -19 37 -89 7 -102 -36 -3 -7 -22 40 -29 47 56 -54 -12 9 -42 72 44 -57 14 -9 29 64 -45 98 -36 -9 59 12 19 0 -20 -10 7 37 -19 -32 -30 -41 90 27 23 -19 24 -6 20 -12 4 63 4 -26 21 -2 -47 42 -109 -12 -28 -8 -60 16 22 -48 21 11 -70 -43 -62 -28 35 40 -9 21 -4 -20 27 -20 -66 -51 -62 4 -2 13 11 -53 10 42 -62 20 -1 -51 -33 -11 41 -16 4 20 31 12 -22 23 20 14 -7 2 37 3 2 23 -33 -9 27 -3 -90 9 -15 29 15 -23 -2 -42 -26 -31 52 -74 -6 19 -33 10 45 24 -14 -6 -3 -27 8 77 6 -40 21 -33 1 -21 -26 3 2 18 13 -2 -31 -9 -5 9 8 2 16 33 9 -34 -14 -12 47 10 18 1 18 -2 -4 9 20 -12 15 -23 14 -4 -5 7 21 38 35 -2 7 8 3 -71 -27 13 10 -5 11 21 22 49 35 18 38 -25 14 20 -17 78 -14 -7 -8 6 -49 1 27 16 -37 -25 40 -13 21 -9 -16 7 10 -19 -9 17 -16 -2 28 -21 20 0 38 4 -6 36 73 100 1 -24 -2 -54 65 35 -2 -89 -3 19 66 13 30 37 22 23 12 42 13 60 -23 36 96 22 -17 -20 21 17 38 29 2 11 3 -26 -44 10 78 -77 23 -6 24 48 -1 -32 -104 51 -12 37 46 14 61 -13 14 56 23 -62 30 16 9 52 96 99 21 7 43 28 33 19 0 34 54 -25 -13 69 27 50 45 48 16 92 -17 124 53 10 -50 -30 4 42 34 29 -28 -9 -72 -49 24 1 12 19 3 -46 104 17 5 -16 -7 11 -9 21 -70 -15 -8 61 27 -27 36 -5 -17 -43 -51 -6 -5 33 42 18 -34 50 -4 -2 -5 -32 53 40 -12 51 29 48 -37 -17 9 -9 31 20 -24 33 -22 -19 9 11 -14 21 -8 94 -1 11 -39 29 14 -14 2 -18 3 42 -7 -61 72 13 37 -12 -38 28 5 -14 -45 19 84 -44 56 25 32 -41 -31 -18 27 7 -11 -22 8 5 34 1 -25 33 8 19 -5 4 48 -26 23 -12 47 15 -21 30 -4 -4 19 -38 40 -1 -32 22 -11 -22 -59 -30 4 30 9 28 29 6 40 -8 19 -14 -9 25 -2 38 4 4 0 7 34 -1 12 9 -4 -46 10 -17 14 -16 -21 1 3 12 8 27 -15 -1 25 -27 -4 31 24 5 -40 -14 27 -12 56 30 34 30 -2 11 -23 -21 -11 58 -32 51 1 -27 -6 -5 33 1 -48 2 -24 52 2 90 -65 -49 7 -18 -125 -59 38 -55 74 36 -3 -27 80 -6 -36 29 -38 -36 -51 26 7 21 0 65 -51 -2 -19 -36 7 1 3 -68 -1 -20 -7 120 -32 49 -128 -87 -60 -8 -34 -11 -13 -23 -9 31 31 3 -46 50 16 18 -48 4 36 -17 -15 -114 29 -24 106 -6 -65 -6 63 26 9 103 35 4 47 -8 17 -16 -123 -12 18 31 83 49 31 -48 17 -5 -69 13 49 20 -21 -67 -50 13 -32 13 15 11 -23 -41 52 7 -28 -3 10 44 38 48 -36 -72 -16 -1 28 10 -6 -3 -92 -25 -16 8 -70 -77 18 -3 -29 12 -47 -40 -28 -32 -7 24 -32 -20 6 53 16 22 -27 19 -24 28 38 -37 -6 -54 64 -25 -1 -50 -7 -20 -96 -21 48 30 34 -9 25 48 -6 33 0 -44 25 31 47 65 -50 -44 -17 -26 -26 31 44 -19 13 -4 -49 -23 -1 -33 -53 8 -4 -9 -4 21 -26 13 17 27 13 34 -38 -30 -27 32 -13 -7 46 2 20 -12 30 12 57 -40 23 53 -3 22 -39 23 15 -6 -9 37 -12 -21 2 34 14 -29 4 -1 -27 -42 56 5 15 -5 24 -15 31 31 -47 -10 -32 -10 10 2 -12 10 -8 33 -9 14 10 36 21 3 -20 15 -33 -17 -19 2 42 -7 11 16 6 42 -18 -34 -32 4 15 -11 12 7 43 5 23 11 -25 33 -13 -25 8 -15 -24 -3 17 -24 37 13 16 12 -4 -13 5 -35 -24 11 -29 1 7 32 1 20 20 26 6 -52 -5 -11 8 13 1 16 -18 27 -12 -23 -10 3 0 28 -2 16 -11 15 -26 23 9 -4 -19 -14 -5 11 42 34 -20 -19 -3 -26 -12 -10 -15 5 3 20 -15 -54 26 27 34 -44 7 37 8 -21 -7 8 -1 -3 -27 -23 29 16 -53 2 38 -23 -15 0 -15 -17 25 41 -21 -13 4 -12 -18 -14 21 20 15 -20 6 -21 19 40 23 18 16 -23 16 -33 6 -5 15 41 39 -41 -11 -12 -9 9 5 -10 -17 -10 -13 13 -26 -27 25 -18 17 -7 13 -8 17 5 25 -4 -35 -21 -11 14 10 18 -5 11 -44 6 -9 6 -35 38 -1 -2 42 -17 -17 4 -36 6 9 -33 4 15 33 -9 -30 4 13 17 -31 -7 16 12 13 -18 31 27 -28 -16 -17 27 -2 -5 -6 -16 -17 -1 6 -18 -3 -9 5 22 -32 -34 -31 16 0 -6 7 3 4 4 20 15 2 23 -7 12 -9 3 11 -7 29 -8 -28 2 34 -20 -6 -14 0 30 -24 -17 -26 -2 -11 12 -8 8 6 8 36 12 19 -10 7 -11 20 -23 0 15 1 20 -28 20 25 23 -42 26 16 -1 -19 -3 0 -16 9 -38 18 31 -9 26 -25 -7 3 0 37 26 21 -11 -11 18 -23 -11 -17 -12 -20 -31 13 -18 8 -38 2 3 -14 -26 -2 -8 52 41 -1 39 11 24 22 3 -23 -36 -4 4 23 26 -16 22 3 16 -17 -3 5 30 19 11 -6 10 76 -34 6 -17 13 -17 44 21 -17 -22 -19 9 27 -10 11 -36 32 -36 -11 -22 2 15 -21 35 -42 -3 -19 9 -54 -54 21 1 -40 19 -30 -47 28 45 -5 15 26 -1 22 -28 48 70 -34 29 -28 27 -1 4 -38 -33 -2 3 25 4 66 35 28 27 8 7 7 -3 19 3 -23 -21 -8 31 -13 -1 3 10 -7 -28 -2 -23 0 13 -25 10 13 -9 -25 -42 -21 -26 -19 5 6 6 16 9 5 -53 37 8 16 -50 35 -14 -25 38 -24 -12 -41 -16 8 21 -4 19 -9 -6 -7 17 31 57 -60 25 -32 -11 19 4 2 41 -6 20 -8 -27 29 5 -10 -9 -42 -5 15 -5 24 -13 -11 32 26 21 4 31 -53 -16 -8 -10 -14 26 24 15 -34 29 -8 13 -3 8 -9 -3 -17 -23 -8 27 11 -3 23 7 10 8 4 -4 -14 -11 10 -5 10 -2 -27 -23 -23 -34 -4 1 14 27 -32 -15 8 -34 -33 18 18 16 14 -7 -5 -6 16 14 30 5 -27 17 -8 7 -25 10 23 -39 -5 -3 -19 16 2 -5 20 22 -4 22 -17 31 28 -4 9 -10 11 -13 -31 42 -15 -10 19 -2 26 28 36 9 27 20 4 -14 13 -5 -20 -11 -29 25 -14 21 16 -26 -4 20 19 12 -67 -9 -7 -46 -10 -9 -47 -33 -1 -88 -45 10 -9 -75 -24 15 -11 -22 29 26 40 -32 62 -13 -11 -46 -15 -3 -40 18 -48 29 3 4 -59 -25 -29 -56 -104 -69 -24 -35 -41 37 -75 -28 -71 50 -43 5 -6 47 -25 24 -33 -3 -26 -11 -15 -76 8 -70 34 -34 -72 27 38 -61 -5 -42 -33 -51 -1 -47 -47 5 -32 -39 -41 -54 -58 -76 -48 -36 48 -44 30 15 38 -41 41 3 -42 42 44 -66 23 -51 -15 29 -5 23 5 9 -14 -25 -54 -45 -23 -17 20 45 -25 -46 6 12 64 10 17 96 -33 -31 20 -36 -9 -26 18 -5 41 -45 -23 -83 20 -2 32 -12 -98 7 20 -4 -28 78 -17 -72 4 -6 47 4 -19 -13 13 -8 -42 -13 47 5 -29 35 -38 -26 -56 -29 12 -8 -18 30 13 2 -28 -5 -35 -45 -9 -1 23 -54 4 10 23 22 53 -3 -28 -16 -29 17 -26 7 18 -22 -51 -44 0 -11 -25 -17 -13 11 -5 -20 -37 1 -13 73 27 -27 3 7 4 2 15 5 27 18 11 28 -32 24 4 -38 17 8 48 23 54 11 8 -33 9 -3 -3 33 17 21 41 -41 -15 -39 -29 8 17 24 -17 43 -64 0 -5 2 11 -23 -2 -8 -13 21 5 -29 -19 2 -21 21 9 75 -26 13 32 -10 -34 33 -33 32 -21 23 -23 -31 -18 15 30 -20 -10 13 -2 33 2 40 -41 32 1 29 -89 -37 114 59 -5 18 42 117 74 -81 -2 -40 -32 24 -51 -20 -31 -59 -14 -60 -93 -29 -93 -63 -33 -26 -62 62 62 3 63 -7 -70 32 13 -49 -1 -59 -90 35 -6 63 2 -7 -8 9 -37 -24 -60 -71 -4 -38 97 3 78 -13 45 -3 -92 -35 -49 -29 -7 -9 -124 -1 -9 -14 33 -65 29 -61 -59 -51 47 -114 -40 -7 -125 -10 -8 -81 -36 -29 -63 -2 -18 -32 29 67 23 16 33 55 -32 -78 47 -44 66 84 35 13 -48 47 37 46 -29 62 66 -20 -26 -20 -76 -34 41 43 -16 0 70 1 -4 -62 93 -13 44 -1 16 -17 -31 -60 113 6 49 -50 65 -66 -87 -34 -22 9 33 12 -10 -2 59 51 25 28 56 -16 -17 64 -47 -10 16 0 59 -13 -39 6 -8 -45 26 26 -24 60 2 -24 30 14 -92 -86 13 -1 20 91 62 -18 51 27 82 -46 33 -38 90 -35 34 3 -8 62 6 -6 11 3 -33 -19 -32 1 40 25 41 -5 27 -48 -23 -1 -24 0 24 3 -23 31 -11 39 24 -36 25 -41 57 27 -18 -24 9 10 36 -34 -36 -76 32 -19 27 30 22 23 -36 24 -6 2 -12 2 -30 25 13 -20 -13 12 -14 46 36 22 -26 26 22 34 -1 12 -2 -46 -8 27 -49 30 33 -7 -29 -10 -27 -36 -21 23 15 14 57 -21 23 13 14 -29 -16 29 -4 47 7 -17 29 19 3 -35 -31 3 40 12 8 1 75 -2 -68 61 9 59 17 93 18 8 -7 6 21 103 -37 32 20 73 23 79 -39 -10 -2 31 56 -29 -28 19 26 26 -50 0 85 26 46 -2 -7 -66 25 111 -1 -14 -8 35 43 8 -54 -29 -53 -25 8 12 65 31 30 26 -4 113 48 -27 -39 92 8 -7 10 -19 -43 -37 -29 76 28 -16 -9 66 42 45 50 36 -56 5 -10 -45 51 57 -43 13 35 37 -36 -3 2 71 17 -88 19 -65 -71 -59 47 -75 54 42 36 -17 5 -19 108 43 -35 -27 -73 47 74 -125 6 -30 97 -40 -37 13 19 28 22 10 -41 2 76 72 42 101 14 51 29 -20 -30 18 -22 20 -43 -2 -37 7 -107 111 -40 40 45 22 48 45 -70 -35 64 52 30 6 32 -91 35 -46 45 -59 -37 -32 4 83 71 24 -25 -82 -81 48 45 13 10 44 -86 69 54 -47 -9 -54 21 -97 -6 -17 -33 58 10 36 21 -7 -6 20 19 -29 -37 -26 80 33 -23 -6 27 -22 13 27 -25 -27 -26 62 -4 26 -16 0 -18 -2 26 -11 43 44 -40 -22 -53 -1 17 -5 22 2 7 73 5 1 -55 -15 -23 -3 -18 7 2 -20 -79 -105 19 -45 44 3 -20 -5 24 -1 34 -88 -57 -7 -49 -32 -21 -31 -34 29 33 6 -47 -27 20 -99 -28 -28 9 -34 -34 48 -46 29 2 -23 -19 -55 -10 13 1 -9 -37 18 -2 8 -8 3 -30 17 -22 -75 -2 -19 -54 -10 -5 5 7 -18 -75 -37 -62 38 8 1 -8 46 0 12 -15 -17 8 21 -37 -4 -31 41 -2 -49 -47 -5 -31 -15 -4 -7 16 125 -43 -104 -20 -47 17 -72 79 19 -99 -51 32 50 -105 -28 -78 -19 29 65 -20 21 -30 -3 15 -62 34 5 12 54 5 -91 2 12 0 -47 -83 -1 24 0 -97 85 1 -6 43 -33 -3 32 39 -4 41 -51 55 30 96 8 57 -40 -46 0 -45 39 -40 45 36 41 37 43 15 -88 -28 76 31 -48 91 -100 8 -45 28 6 32 40 -16 0 -27 -30 -42 75 -23 -43 22 -39 -14 27 -15 -8 35 -10 6 -28 47 33 42 22 -2 27 -3 102 22 -34 32 -1 77 23 43 22 49 -34 41 1 86 53 113 5 88 23 -59 29 3 18 15 39 3 10 4 -11 23 35 17 1 1 -24 11 -43 80 -46 -48 -52 -34 5 -24 -29 -35 10 34 -57 27 7 -18 -35 -8 18 -36 -20 15 -19 -4 24 25 72 -33 -77 50 -39 -8 -27 -26 -7 36 18 28 -42 -17 -34 44 25 -28 44 12 30 -39 -1 -48 -25 -18 7 -49 -23 45 -6 22 -19 -22 -11 60 -22 24 15 41 -31 25 38 22 -55 -15 51 -41 33 30 -9 -29 -16 -19 -12 -24 8 40 50 33 -27 -39 14 -64 -37 0 -23 -18 27 23 -3 -8 0 -14 -37 28 16 -3 -93 -15 -53 -58 13 1 -1 2 22 -29 3 36 23 22 16 30 26 -15 -71 -43 -20 32 -7 -15 28 -26 12 22 28 12 45 -38 5 39 -47 -52 -43 16 25 -57 36 -43 -23 63 -9 -59 21 31 41 62 -24 -8 -16 8 29 1 -23 8 30 19 -1 30 -15 46 -4 -65 88 -31 -17 -30 10 -13 17 -36 -12 -16 -58 26 -24 -2 19 -48 -31 -12 -6 -58 -86 -81 33 -49 47 -19 14 23 55 10 10 -3 -31 30 -20 -13 23 32 43 -32 -24 57 59 17 21 -24 37 -1 -54 44 -9 -20 -89 0 3 22 2 -9 33 -61 -1 -10 -29 -16 14 18 9 94 -21 -39 47 -7 17 -17 -11 11 -56 19 -24 6 23 -23 10 -1 -9 0 -87 -19 -3 16 -13 -9 -63 -48 40 23 -10 7 79 16 -35 46 -1 45 36 -7 -21 -14 57 -2 15 -4 4 32 -31 26 49 32 -22 26 -26 -32 0 -2 -19 -3 21 5 -13 -8 -23 -5 -32 13 21 27 1 5 30 -8 -2 4 -22 26 59 7 9 -9 -1 3 26 43 -33 -36 21 -36 -5 8 -49 -39 -44 17 6 -56 -23 0 16 -21 9 12 3 -30 -34 -6 21 -5 6 36 17 19 10 -18 -35 -34 -10 17 -5 -6 -13 -1 14 -32 8 -26 7 -33 9 -36 16 32 0 -23 23 -9 -14 -24 30 -2 -15 -17 19 -8 -30 -8 8 -14 36 3 19 -9 15 -85 -8 99 -42 36 7 -42 -1 -26 30 58 71 -2 -52 2 13 1 -38 97 -20 -33 -12 86 14 24 -52 52 5 -47 23 -37 17 -16 -35 -56 -98 -2 21 34 107 -63 37 5 -94 -12 110 -16 -24 -53 47 -16 4 20 34 -55 -31 82 16 -36 -14 21 79 30 17 8 19 -68 48 1 -1 -25 -7 -33 -16 44 43 -12 60 91 -34 -62 -33 16 -1 27 28 -38 39 -36 38 -26 -32 -21 -4 -23 53 -73 -19 20 -15 107 2 4 -19 3 39 -27 -52 -24 13 -37 -18 -25 17 26 -7 3 19 29 -76 -2 -50 -18 -10 48 98 29 27 62 13 -49 39 5 -2 46 -12 43 -28 28 34 50 55 -7 -17 32 -42 -38 -31 -15 -14 -7 28 78 57 -26 1 46 -26 -6 12 51 45 -35 44 26 55 20 13 13 2 -52 3 20 14 -2 127 -31 -82 14 -38 68 9 -22 23 -26 25 -43 -47 -15 -13 -1 -61 3 -31 40 15 -16 69 14 25 29 -13 19 -10 34 -8 -17 34 -9 31 -31 -38 4 56 -26 3 -24 -6 -43 -15 17 -2 -2 -12 41 -13 -30 -12 -29 20 0 38 0 38 18 -6 -52 19 29 -13 35 -12 5 17 14 32 76 1 20 -36 -21 -42 -35 -14 -9 26 6 -19 -28 -6 37 10 -47 39 -59 -27 6 24 -17 -32 7 44 -27 15 28 4 1 5 20 -1 -4 24 -72 41 30 25 54 -22 -52 42 10 -61 25 9 -7 49 -34 40 -4 -63 -11 17 0 -23 -41 -22 79 -5 -96 19 -34 -124 6 52 -21 45 6 -4 43 10 35 -34 -6 36 -57 -18 -9 -27 14 68 6 -46 10 6 -3 10 5 -34 -18 -31 33 17 31 22 115 -71 -54 20 54 -42 8 -53 -23 -7 -6 -21 35 -8 20 45 20 30 -24 75 -35 -45 -91 -59 -46 38 26 45 27 86 -74 59 46 -35 29 -18 -20 16 -40 -11 25 40 40 -78 16 9 -32 -14 34 -41 -26 -31 32 -10 -14 -52 14 -40 -27 -78 -49 28 -24 -8 -39 53 15 -21 -44 9 12 -30 3 43 -47 13 4 38 48 -42 -31 35 41 10 -34 17 36 7 29 9 68 -4 1 8 -37 89 7 7 -55 -24 -43 -29 -27 -23 -39 30 42 -59 -58 95 -2 -32 32 -23 -46 28 88 76 -41 7 -3 -7 60 42 11 -36 -34 34 -44 -38 -71 -6 -3 0 -31 29 -6 -29 -2 27 -2 10 10 7 23 21 10 -2 28 -21 7 8 18 9 46 23 -11 -21 -12 -6 -35 -15 -18 32 22 14 73 28 12 51 22 36 -44 14 15 -5 25 2 -12 28 30 2 -24 -13 42 -9 -14 41 -5 17 -22 40 38 17 -20 15 7 15 5 10 -20 8 -41 11 -45 -7 27 18 -17 52 12 -45 -9 16 21 -34 -23 11 0 -16 -5 -52 -6 3 19 77 -21 35 40 57 29 28 7 61 70 -12 -53 -20 -38 46 13 -36 -22 -4 20 -28 49 63 -14 5 15 -43 -22 35 -12 -58 -39 25 36 31 22 2 27 -11 17 -5 85 -15 -55 19 16 -27 21 62 -18 -25 26 -5 13 21 77 59 -37 -10 9 35 38 47 -7 2 -45 0 9 17 30 19 -12 21 -49 74 60 120 9 -16 112 60 64 16 92 19 -5 42 -2 26 22 -70 -45 0 -1 51 -24 -2 27 -4 -69 56 55 -26 33 -28 -38 13 -34 -12 92 -103 52 -16 -31 -32 22 -12 37 43 -49 -23 -16 20 -30 21 -11 -27 -29 -30 -34 -31 -20 -18 -18 -8 14 4 -25 -34 45 9 -22 29 -16 18 15 -34 37 -2 38 -1 -25 -5 0 30 22 -19 1 38 1 33 -25 -3 13 4 20 -41 -10 8 -2 -14 18 -33 -35 24 33 -4 2 29 54 4 13 4 7 -15 -8 -39 21 37 -31 -17 -19 -18 -27 53 38 20 13 3 3 9 12 7 32 26 -26 -15 30 15 43 -13 -47 5 25 37 -17 -17 -1 20 -12 -11 -9 -9 -20 0 -4 8 44 10 1 36 16 -4 -5 -13 29 24 -24 -18 -45 38 24 13 -33 -28 -4 46 -38 12 9 15 -6 7 10 -5 21 -9 2 10 12 2 26 33 -9 -17 6 16 6 18 33 14 -42 9 41 -48 -19 -36 -56 -8 2 -22 28 26 -31 30 -19 26 10 -39 -6 25 18 81 63 20 -23 35 36 38 53 -20 -6 64 19 16 22 39 82 -122 -30 57 24 -20 8 74 -9 16 -1 24 -11 37 -10 10 33 -4 15 98 -12 -17 28 16 16 81 -8 -1 50 4 13 -21 -12 90 7 7 64 -38 3 32 125 -4 -65 -19 -27 68 -34 -10 102 -30 46 47 10 10 -30 -10 64 48 -38 6 -12 -41 33 38 -62 22 -49 48 15 34 111 -27 27 37 -10 34 -2 -9 -53 0 -13 89 49 3 -83 -10 -4 -47 1 40 25 -79 84 -39 42 40 31 32 -57 50 -7 -30 -36 -15 -6 52 -44 -35 17 -2 -19 59 -68 -17 -52 11 24 4 -14 -22 22 10 11 -37 24 -43 35 114 -38 63 -5 47 -3 -37 -4 -32 63 -7 8 28 32 45 -37 31 -3 48 23 -25 30 -1 69 -40 -52 -40 9 -4 19 0 41 -73 37 -10 -34 13 29 2 33 -34 20 9 11 -2 -6 4 18 -14 3 26 5 -29 40 3 10 4 0 32 -24 2 22 -12 -5 49 -2 -4 4 -11 -3 5 12 16 23 5 -14 10 3 13 13 4 -24 -41 -3 17 -3 -6 29 31 -6 -16 0 -1 0 -43 -11 4 -45 24 -32 22 25 -4 3 -19 -3 -73 15 -19 -1 17 4 35 36 8 31 19 -7 7 -30 -9 -3 23 27 28 -32 -49 23 -13 -34 -22 -46 -5 3 -52 -21 4 7 3 -34 40 -2 -4 7 -59 11 34 1 -7 -73 -20 19 75 45 -27 -27 0 66 -7 20 0 47 -33 38 -50 57 -4 -34 -26 5 44 -38 80 69 12 -6 -6 47 91 58 69 -62 24 23 -26 -16 64 -27 59 62 86 75 -10 -23 12 -19 100 26 67 -14 -22 40 -12 58 127 12 30 -3 -1 5 17 91 -27 -17 46 39 -34 -8 59 33 -9 96 53 60 31 108 22 9 -6 19 74 75 -7 9 38 10 -30 -4 -49 -18 -78 49 15 40 -52 -66 -87 -10 -61 69 -5 51 -20 -28 61 -27 -23 41 -42 -14 4 13 -32 19 -40 -5 -91 -100 41 26 -54 19 -48 -9 34 -2 -7 -10 -3 50 -32 -15 -26 38 15 37 12 -16 -44 19 5 -5 -4 -5 62 -51 37 -8 104 13 42 21 56 28 -111 -6 -5 18 -12 32 32 -12 -41 18 -22 5 2 15 27 -27 -1 63 46 7 -17 -64 9 -7 21 4 -58 -18 2 -48 62 -2 0 -24 -11 -31 18 -5 48 43 3 4 31 -18 -33 14 -10 -19 49 -40 -25 22 -27 -47 -19 2 20 59 -17 -28 -14 -14 33 -29 39 16 -59 -47 21 34 28 -16 -53 -19 -24 13 -34 -79 -10 12 1 -1 5 28 -39 -20 0 -7 -16 12 -10 23 1 14 -45 -18 -31 -5 -2 16 8 -53 -38 15 29 -16 7 38 1 17 -17 20 -4 25 13 45 -6 20 -12 32 6 -13 -15 15 -23 11 24 3 -36 -16 -9 -8 -4 104 61 3 -8 -77 12 16 -29 61 -16 32 -55 -11 -25 -56 -30 -60 6 -44 -48 -53 -17 -9 -6 -11 4 4 -39 29 14 2 4 38 18 33 79 26 -11 -31 6 36 23 33 -76 -78 -24 -21 67 12 19 -74 39 71 -7 -35 -4 13 42 45 -6 6 -39 -29 -43 25 -66 16 -13 55 11 18 22 -8 13 -41 -28 6 23 18 -61 41 -67 -45 -53 -13 -56 -77 27 -37 -7 -27 22 -60 -14 42 -2 -7 -2 -102 -3 -91 -8 27 10 41 12 -35 20 24 0 68 -92 -43 5 -1 -36 -97 -40 -27 -50 -28 1 1 -53 -27 12 87 26 37 -12 81 -34 9 -32 -8 38 -36 7 15 47 -15 -15 -24 2 -7 11 -18 13 69 16 30 77 -43 -49 -29 9 2 -70 -50 4 1 -32 -29 -17 39 28 -74 -12 28 25 -56 -42 57 81 13 15 32 4 -19 14 -37 -68 -56 44 -49 53 -10 -8 2 21 -74 4 62 18 -23 14 19 -19 -13 -6 -38 18 -4 0 9 9 20 -19 3 10 -35 3 -9 12 -10 31 -3 -23 1 -16 14 -30 33 20 -28 2 -9 23 27 27 37 -18 1 -18 22 -8 33 48 32 8 40 31 28 10 -44 56 15 -15 2 -23 -10 21 24 -7 57 54 -9 -39 -8 28 -26 27 -12 -35 9 -17 -11 15 -14 22 29 -6 -49 -31 -12 19 -21 76 17 -15 -13 69 15 -29 12 -7 61 -6 23 25 14 -81 -15 -61 63 -68 10 -25 -2 -63 31 19 -16 68 37 -52 79 -22 -49 28 -44 -18 37 28 86 76 88 89 85 31 42 71 -16 117 -99 9 -65 -21 40 22 21 94 -126 124 -8 28 -51 50 29 -57 13 13 -67 -13 -11 24 -40 10 15 -44 -48 -18 24 37 -37 108 -36 -78 63 25 11 50 62 123 6 62 57 48 20 35 11 38 59 -36 -3 -95 -24 22 35 -81 74 -44 19 -5 -30 -30 -22 -63 -25 -11 -17 -57 96 5 -52 -13 -5 39 -20 104 -48 -72 3 27 12 -95 -2 -35 6 30 -80 -18 -15 -3 8 -33 -54 -53 -6 49 -17 31 31 89 -18 -7 -3 37 -37 15 -8 -61 85 -34 -23 40 -25 3 34 0 -28 -12 -14 10 -4 0 -16 -15 26 29 1 63 4 -44 -40 -25 63 -1 -7 19 -8 35 -67 -13 -13 39 76 -22 -82 20 10 -11 54 -45 119 26 -28 10 -10 -4 12 -22 -37 -8 57 9 2 -49 -31 -7 71 35 22 6 14 -3 11 -2 42 47 6 96 -33 66 -28 20 22 32 9 2 77 -26 -8 31 -25 13 -9 1 10 -5 -8 31 -17 -19 -71 22 -3 38 11 24 -4 -7 46 -36 -17 5 -19 9 15 -47 -18 -15 20 -23 -42 -6 16 -74 33 -18 29 -28 8 82 -10 0 31 5 -33 57 2 -35 -14 21 5 40 14 -28 -72 -21 6 -14 38 6 84 15 63 3 46 -33 39 -50 -44 -29 127 58 -14 -4 20 -9 -24 10 18 14 16 47 -29 36 8 38 -8 3 -9 44 -4 -91 -9 -34 -8 -28 -44 -9 75 10 -47 9 39 104 10 -33 -117 -17 31 81 127 13 -27 -19 62 27 54 33 -85 17 22 23 40 -5 5 -29 -20 -39 -10 -42 -24 -45 55 36 14 -25 47 51 26 -10 11 -33 24 19 55 31 29 25 -9 -50 -49 18 -14 41 19 -11 -36 -47 -46 -8 -15 41 47 -4 12 20 -38 23 6 -18 23 1 14 22 -33 40 -19 62 -35 -32 59 60 21 -24 25 72 -8 -25 -32 -9 -36 -96 -40 -41 35 77 35 65 -5 -19 -50 -7 -1 -31 9 -13 19 22 -30 -51 29 34 -65 21 -23 -38 10 38 -51 -3 -7 -29 -89 -36 33 8 -22 -35 21 -3 37 -1 -47 12 -32 -53 13 -63 -43 -43 36 13 6 32 -22 -97 45 -20 -19 -64 34 -25 -45 23 12 -12 32 -13 4 14 8 27 40 20 7 25 4 21 3 18 12 14 2 2 20 -5 4 4 -21 5 25 -14 -26 -21 19 23 30 3 -5 -9 -26 7 -12 -7 -21 41 0 -5 -51 -14 0 17 18 -13 5 -12 18 -25 -41 48 3 2 -22 1 15 0 46 32 -40 17 11 32 18 -3 -60 55 -52 -1 -7 -9 -4 -5 -55 23 13 22 11 32 10 36 23 10 -16 -36 -16 -17 49 44 65 -41 27 34 63 1 -48 15 8 -11 7 5 56 -30 -50 65 31 32 35 -24 -14 56 19 30 5 60 -55 67 93 2 -76 8 60 -34 -9 -61 31 66 -65 60 -1 10 -23 30 -50 -27 -18 -76 57 -29 -29 -23 -28 51 -59 -21 -21 54 48 30 69 -20 63 -28 6 -30 -13 -13 14 64 22 21 14 -37 55 -14 -38 -18 -41 2 -30 13 -42 53 -36 -41 -23 15 -15 31 15 33 21 23 13 14 60 -26 -28 30 54 8 -9 -27 -9 64 32 13 -20 -27 -7 83 -48 -12 0 -18 25 34 -15 -21 15 -20 -31 58 -41 56 17 13 -27 19 -8 -51 2 25 -12 -57 -18 -1 -14 21 66 -39 33 -6 5 59 39 17 41 0 -12 22 24 18 32 45 67 6 23 -13 -43 -46 -14 -29 69 32 27 -67 5 -24 3 37 -23 31 -15 127 -2 3 -55 -41 13 2 65 5 -47 -14 44 -1 -44 15 -30 -37 -105 -1 -25 -21 5 1 40 -10 28 53 -9 10 -24 -17 -3 -37 -30 28 9 -25 0 12 -14 39 -20 -12 24 -21 16 3 -31 -41 17 14 -16 -17 4 8 11 31 51 52 16 -1 6 -6 -14 -39 -17 45 -22 36 -34 8 54 14 -13 14 34 34 -9 33 -17 10 24 10 30 -23 -20 -12 -30 37 32 15 -57 8 15 -48 9 15 14 -16 -19 17 25 19 -7 14 59 15 -24 30 25 -59 15 23 67 -35 26 31 -46 41 33 4 -48 35 42 12 29 37 -56 -21 -31 -74 -76 37 -64 68 7 41 -45 60 21 43 -36 24 8 16 -15 -7 28 26 21 -36 127 12 49 -16 13 28 -2 -6 -4 -88 62 -26 72 -23 -5 48 41 2 -38 116 76 29 40 -34 42 -49 29 -9 -56 49 24 59 5 74 57 -19 21 48 41 -4 -45 54 33 -4 13 -9 -10 -77 8 50 -2 -17 -28 43 16 -14 -13 -9 -7 0 -14 0 -15 9 53 8 -33 6 41 -97 -10 -19 -68 2 -32 71 40 5 15 45 44 63 -41 -75 43 26 51 -26 28 32 -29 6 32 2 20 -28 81 8 -40 2 30 -13 -24 14 51 -4 -49 -44 9 15 -16 -95 -6 29 -23 38 -6 -64 7 -25 9 -3 32 76 37 -4 -41 43 0 -1 25 -22 33 -9 35 -36 59 9 69 15 -3 42 24 1 0 -3 111 -33 6 -36 -42 -41 0 34 -10 -11 4 30 38 -7 30 -5 9 -39 25 -10 30 -16 -15 20 16 5 -9 11 -29 -26 21 32 -28 42 -22 -39 -41 3 1 68 -3 21 0 24 14 5 39 3 -50 -11 -59 -19 6 34 -8 -15 -7 -2 -54 11 -11 2 -37 -6 -20 7 18 38 -25 -13 -31 -7 -14 20 -33 -7 -17 -11 3 -19 14 -10 -32 -2 -2 -103 -24 -22 -31 15 19 -38 16 -8 -8 12 18 -43 -13 -28 -14 17 1 -14 72 61 -98 -4 -2 50 36 -49 9 -48 17 20 -21 38 10 -46 5 11 -48 -18 13 -20 -52 -13 -49 21 -27 39 36 68 35 -22 -14 21 -38 -2 18 -17 19 -13 -22 29 25 15 -13 4 11 -11 -31 41 60 2 36 -60 13 -28 7 5 -7 -36 10 -58 1 14 -45 59 120 62 39 40 29 77 -32 -42 26 47 32 51 21 -34 -20 56 35 19 -14 14 21 31 2 45 115 18 2 13 16 -72 -15 34 -1 9 -1 -29 -59 -46 45 65 -23 39 -59 -25 -47 -5 -4 -23 60 -14 -4 32 31 -2 -14 -18 -3 12 -18 -15 -17 -1 15 8 51 19 -4 -28 18 -34 18 -60 17 48 63 3 -23 -32 -56 -6 -24 14 -2 -5 -62 7 70 23 -14 -38 52 -56 37 63 -11 18 56 0 10 28 35 54 -20 7 -35 -26 12 -14 78 -41 -1 -15 40 -75 -15 26 15 37 10 20 101 -5 -45 -11 13 -17 -44 13 2 9 -20 17 -11 -4 15 -3 12 -35 -12 -16 -17 7 19 -22 -5 -18 9 2 -32 -4 -24 48 25 -16 11 33 -12 -32 -20 -24 0 -15 44 -22 -14 -10 38 56 -8 -28 -30 8 1 -18 -14 16 30 25 -52 -30 13 16 22 31 -38 12 18 -41 -15 25 -3 25 5 11 -36 63 9 15 19 6 15 3 -16 -18 -24 3 19 -13 -4 -19 -6 -15 19 21 24 -28 12 -6 -9 7 36 -3 43 50 3 55 67 11 94 8 23 -10 -6 82 105 27 -4 57 112 1 20 82 127 103 25 70 124 65 1 94 -51 46 -14 21 31 71 5 48 40 -13 62 21 45 102 4 -25 25 15 -67 56 17 124 35 93 -9 89 64 50 24 18 -19 79 15 117 50 20 61 -24 106 24 47 -6 -15 70 37 36 -6 5 35 6 85 1 -26 12 23 -64 38 102 78 8 -25 -48 92 92 66 -84 0 -65 0 -9 -16 7 -3 9 -15 -53 12 -77 23 -10 26 -17 -3 37 32 21 -43 26 37 20 23 -39 7 16 5 49 -16 34 49 48 20 35 22 1 7 -6 7 34 41 -57 -1 -18 7 16 24 8 -2 34 -7 -11 17 -33 2 13 59 17 -6 83 13 10 6 2 -3 9 48 -20 49 -9 19 -1 56 97 46 3 4 26 -25 -84 11 -25 8 -12 -44 34 -8 29 -12 -42 35 -11 74 42 1 -41 8 -55 -18 -12 15 10 -13 9 27 -22 -15 -15 26 -1 13 9 -15 5 36 5 -51 -20 -11 26 31 22 10 -31 36 22 5 9 -24 9 -21 -19 -19 17 16 -2 43 -14 32 9 -6 -5 40 22 -34 -9 36 -17 13 6 -23 -21 -24 -30 -19 -2 -29 -43 -58 -15 -18 -22 10 -10 16 20 11 45 3 -12 -13 9 20 -11 4 -5 15 42 -20 -10 -41 44 -38 -8 15 11 -10 -20 -9 -14 -3 -5 25 -104 -54 -15 104 -14 49 5 -3 4 56 -33 -53 -41 64 2 4 -50 26 -5 71 -26 11 27 -28 -43 10 13 -79 -41 -32 117 48 10 -25 -35 77 -2 13 -14 72 4 4 8 2 -25 20 18 2 63 80 92 -39 1 -41 33 57 -23 -74 31 32 54 3 2 36 -51 31 -21 32 42 -2 79 94 37 -72 -8 66 -18 14 -10 -8 35 -56 45 1 -18 91 -9 15 40 8 12 43 41 -30 30 -10 -61 16 -24 43 5 31 -37 46 -19 23 -31 42 -58 13 33 31 19 60 50 -31 -42 21 17 -39 -11 -8 -28 -13 36 -30 7 5 -15 20 -40 -4 -39 80 -33 25 0 -18 -23 35 -9 4 15 15 28 3 -16 9 -53 -57 -54 -56 -4 -14 31 56 35 14 6 19 45 78 18 60 4 -11 47 -25 55 36 8 35 41 10 -36 -35 18 4 -7 62 -5 62 -56 -73 32 -40 -34 -30 11 -2 5 14 13 23 -15 14 -32 -39 0 28 2 -22 11 -20 -11 -17 8 12 9 -18 38 -14 12 -9 24 -28 17 -57 37 -7 16 60 24 -5 35 -5 0 -40 -47 0 -23 -29 -14 52 -36 1 22 -70 -10 18 -9 4 -33 10 20 24 16 5 52 32 -35 -40 -16 4 13 29 26 8 -9 29 -60 20 -39 57 17 13 -30 32 45 -50 4 31 -26 33 3 19 6 8 -26 -30 -22 -26 -21 -38 17 -13 9 31 4 47 -11 55 77 22 6 27 19 35 41 -26 -14 19 -27 27 -103 -29 -52 39 -28 -12 4 -39 62 7 28 38 37 56 41 65 40 4 107 15 1 -24 33 -52 -14 43 31 -7 11 -108 53 -28 -39 14 -25 -38 3 45 35 -4 -24 82 3 -76 74 0 55 22 12 -7 76 44 6 43 32 3 -63 -23 19 47 46 -27 2 -23 45 81 79 53 24 -36 -51 -91 -3 22 73 23 -19 4 -46 13 39 21 -16 -32 20 -25 -51 72 32 20 15 -20 20 -19 -44 -60 -19 3 -11 37 18 35 44 -41 -10 -19 2 44 60 -39 15 -72 36 -5 18 -24 13 -29 -4 22 -22 4 -11 17 -81 57 37 -40 9 -10 -32 -43 37 -51 -6 21 61 -13 -4 33 -2 39 -40 -26 -25 -35 -23 -46 -45 12 26 11 36 20 18 47 -25 45 -15 3 -7 9 -41 19 34 20 36 2 52 2 7 38 72 8 -21 17 -63 46 10 -27 20 2 25 23 29 8 -37 -19 -39 11 -2 -21 19 -37 1 1 -25 52 -4 41 -20 -14 -31 -1 7 -23 7 -37 -19 31 -24 7 5 0 14 -1 -6 -17 34 13 11 15 43 32 -12 27 -7 -2 -8 -6 -25 30 23 -13 -3 -5 -28 -49 5 -39 18 -7 -23 18 -45 29 -12 23 -26 -28 16 20 39 -2 34 -13 38 36 0 -44 9 -33 -37 5 9 -16 -24 0 30 49 47 -54 41 3 16 -2 52 -46 5 17 40 -43 80 93 -19 72 -34 -38 17 -25 -61 -13 17 34 -87 28 108 68 23 -24 97 -11 23 -14 -27 28 12 5 55 -20 7 19 2 49 20 4 71 -19 -49 39 47 -42 11 5 -1 -8 -21 35 33 15 42 40 2 12 47 0 35 33 -27 -28 29 15 -80 7 -37 51 41 -32 -15 61 -13 9 26 -89 12 -5 -34 -26 -54 59 -57 67 -25 48 74 -29 82 -1 -4 47 -35 46 -18 -79 -55 -30 31 30 5 47 -59 -10 -7 -56 58 -12 -13 -19 -68 8 -36 7 -59 12 9 -57 10 9 -13 11 53 -39 51 4 34 -119 -16 -26 -41 6 -36 52 1 2 -4 -60 10 -55 28 -17 -14 26 7 -43 4 -35 -41 -18 59 59 -2 -46 -57 -33 34 11 -12 26 -3 -3 -14 -59 -43 38 107 39 22 -45 1 42 -74 -1 15 30 -25 -38 48 50 42 22 28 -31 3 -32 -4 21 -45 -6 14 3 -52 41 42 8 -38 -1 -36 -10 23 -3 3 -2 3 9 -33 -5 -10 3 -7 18 -13 2 28 -14 11 -15 -38 14 -4 -3 20 -7 4 7 -28 40 0 -9 1 -6 -4 -6 -24 -32 -5 35 -21 45 -26 1 28 15 56 -36 -17 12 -18 -30 -71 5 25 -22 -26 27 -3 4 -10 19 26 -5 -24 9 53 20 5 -17 0 -7 -29 2 42 9 8 56 24 17 -23 25 3 -1 -28 -22 -87 25 -10 55 33 -48 50 -32 -59 -125 42 -71 7 77 -23 -54 7 -51 -3 -31 -50 -5 -16 49 -27 40 22 -2 -56 33 4 9 47 4 47 -73 54 89 -17 65 -38 57 -11 -20 -4 27 -52 -72 0 4 -1 -38 26 0 -56 -13 -8 -65 -4 28 -24 12 13 -47 4 21 -36 46 -18 31 21 -1 -7 15 32 -9 20 8 -11 102 12 52 -24 34 -74 13 -37 51 18 20 -24 -51 -25 3 -67 -4 -55 -8 10 -14 7 -21 23 85 -50 -31 -16 7 -33 20 -22 -1 47 13 -71 -15 -33 -29 42 36 50 28 47 23 37 -30 -19 -29 -59 -103 27 -7 26 -8 32 12 13 -32 -25 28 -22 25 29 40 89 47 -27 -41 -19 -28 48 23 -79 7 62 39 -120 -21 -49 -31 57 63 -21 -17 11 -8 -19 36 2 -41 39 76 33 -53 3 -6 -7 -19 17 27 43 -31 17 -74 -22 32 106 -30 -22 34 -30 62 31 49 6 31 30 -5 52 -28 -7 21 17 -26 13 21 -32 -7 11 -22 20 1 -15 6 -14 15 -65 -13 -61 -17 -25 9 -20 45 -1 -15 -33 -13 -2 -9 14 25 20 -7 11 -26 -35 1 -16 12 -5 39 -28 72 -6 -16 4 -1 -2 -10 4 37 20 -8 6 -24 8 14 23 24 -9 43 -15 -12 9 -28 36 -8 20 21 45 -16 2 12 39 -13 33 16 -42 -3 -40 -34 -32 -5 -56 -52 12 -8 42 -80 3 -15 -11 4 -14 -41 -3 -16 -86 -46 25 -66 -72 56 18 34 -11 -23 12 -78 21 27 34 24 -43 -21 60 -10 -48 -2 -31 27 -6 28 24 39 18 0 -12 38 -28 -30 -24 -27 -12 69 35 -5 36 14 9 80 12 -91 -16 72 23 54 -31 -55 -30 -44 -7 -73 0 25 -29 -10 39 -2 68 -13 2 24 -8 40 -14 4 -10 -48 -1 18 17 -11 -10 -32 35 -42 -6 -31 8 -9 47 -15 19 5 23 6 18 -4 -6 39 27 9 -19 8 44 -12 -2 -36 -50 61 15 36 65 -65 -21 34 -50 -19 -58 -73 29 -34 55 17 8 73 -11 -39 14 20 13 -1 22 42 -34 11 -25 -1 14 34 32 -34 -24 72 9 -3 20 -3 -43 -64 39 -21 -13 27 86 -22 6 -29 -43 33 -8 -2 92 -11 -42 32 -24 122 51 -21 -58 12 21 24 16 21 -20 58 46 -1 -16 -35 -15 23 3 -42 18 -20 -34 2 21 62 -18 29 70 39 6 21 0 47 -8 -40 25 -41 -20 23 -49 -25 -12 3 29 29 -26 -37 -23 -17 -70 64 -39 -15 20 7 21 -16 55 -11 18 -15 7 13 -17 24 40 23 1 17 8 -3 38 20 42 17 57 -39 -4 18 -6 15 -12 22 12 -19 20 48 4 -32 23 53 19 24 7 -36 -6 53 2 39 14 24 35 -24 -17 36 -47 46 -39 -19 48 -64 18 0 47 37 43 32 -57 -9 -27 -61 -32 2 52 38 9 65 6 23 -59 -23 64 10 -20 13 -42 -32 31 -6 -45 30 15 18 -12 31 7 -17 26 32 56 -18 43 51 72 20 4 35 56 37 1 -36 8 13 16 -10 -5 -73 -51 9 -60 -74 17 29 -3 -26 5 -6 6 -22 44 14 79 -33 31 36 49 79 67 36 -19 70 -5 27 -14 -41 -11 43 54 48 64 26 2 42 -43 37 -6 42 7 -14 -28 -2 -6 -16 47 60 55 -25 -11 12 33 12 -31 15 -22 -3 -35 -64 60 52 -36 -17 -46 15 61 -18 11 1 17 46 -25 -71 1 -44 0 11 -27 80 15 3 10 -34 3 -19 -34 4 -35 10 -41 66 -41 4 13 -94 39 33 -4 -19 -2 -7 1 -40 -10 25 -41 43 -16 -60 17 12 -20 -36 52 -1 -22 38 -11 36 4 39 17 -16 8 -29 26 -34 -28 -22 -22 -7 33 22 28 46 21 7 39 30 20 37 3 -3 3 -13 19 -12 -23 62 14 -23 33 -25 18 8 46 -28 -2 -11 23 -1 -33 24 -13 -14 -8 -11 -19 4 0 -62 22 -12 41 10 -6 23 -35 -6 -4 -25 2 22 -3 -33 5 -6 3 4 -6 11 -9 -18 33 -9 6 22 -47 -9 0 7 26 6 12 -34 -19 23 -15 -5 17 -33 3 -33 3 24 -2 -34 -10 4 -5 41 10 19 -24 -19 10 20 14 30 17 1 4 -34 -24 40 36 -6 -29 -33 1 18 30 40 -3 -1 -13 -19 5 -26 45 -30 -1 -82 34 -19 83 -48 74 33 -16 -27 49 29 20 -42 56 -37 -27 65 18 -29 23 24 47 -43 2 10 26 -4 52 -76 73 -2 -52 42 28 37 58 22 2 -11 42 36 -13 38 -27 72 -19 -12 -42 45 -22 64 20 -68 61 21 -30 76 -32 6 90 -15 12 -23 -40 41 35 -25 42 27 112 -28 -5 -124 -31 60 -23 79 -48 42 -39 -49 110 18 50 -1 -13 -31 -3 35 -36 -55 -22 -14 -56 -99 39 -55 65 -63 -32 -9 66 -57 -6 62 62 18 97 -22 22 109 -17 13 -3 28 39 -12 37 43 -43 -62 -11 19 30 -23 -24 -3 46 87 -19 7 1 33 32 -41 9 -49 80 -44 -27 -46 25 -41 2 -47 24 5 48 5 -36 -10 -77 80 15 79 -69 -8 11 -7 59 33 12 -61 15 -31 97 82 34 -18 -23 11 -37 -34 -13 11 -73 -7 10 -22 -14 -2 2 -11 -12 -1 21 15 4 51 -17 -47 35 4 10 31 7 -8 -14 -9 18 -14 4 -21 -28 -12 -15 0 31 -5 12 -11 -6 18 9 -25 -38 -48 -10 15 9 -57 1 16 -9 -40 7 7 3 -30 -14 -7 31 59 -16 9 27 -1 0 23 11 13 -40 -19 -20 27 -61 3 -20 8 9 3 -11 18 -15 -26 -57 38 24 31 1 10 11 7 -17 2 -16 10 3 6 -23 29 39 16 8 30 -21 49 -67 -6 31 -9 -22 3 34 -30 -15 57 3 -40 19 2 11 -39 -3 -13 3 58 37 -18 -7 -16 93 48 34 9 23 40 20 20 27 38 -27 -57 21 11 -44 -22 -61 22 4 -3 -12 -10 -33 28 -32 77 75 68 17 3 -22 41 -23 5 29 39 19 24 28 21 67 27 2 46 57 64 -48 19 17 9 -16 29 -4 -18 -40 -4 38 -94 44 -27 -29 29 4 -21 -22 11 -14 -30 -14 -46 -2 0 -71 -26 40 15 53 -8 -87 33 -45 37 57 -27 0 13 -18 -23 -56 -50 -55 60 -33 2 54 22 -11 -31 -72 -47 34 26 -9 17 42 30 -48 -1 -2 40 54 -27 15 -44 41 23 10 -1 -50 15 58 59 56 14 39 19 41 123 14 -40 13 -36 34 29 -32 -11 -51 45 -14 -78 -45 22 2 29 -96 -14 15 89 16 11 9 -13 -45 65 12 5 -49 11 -23 -8 -28 -70 20 -21 -39 62 2 -26 27 -19 52 -8 -13 -7 -3 4 -23 23 6 10 15 -24 -43 -6 -49 -7 17 -28 21 -15 48 1 -29 -32 1 2 18 -2 -18 18 -8 -21 62 -19 27 -39 6 -38 26 14 16 19 11 7 5 14 -11 110 -6 -34 16 -16 -25 56 10 6 -4 30 -5 -3 -10 29 45 39 -7 30 -33 -36 39 -1 43 -24 34 42 -8 3 19 -14 16 17 3 -8 5 -34 18 -17 19 65 -15 -71 7 14 -36 -61 -2 -45 39 33 -49 8 -13 35 -36 0 2 60 -30 114 19 -28 39 -73 18 32 -21 -22 33 -37 58 72 21 -9 -25 -16 8 1 -11 13 19 58 -5 17 -61 -9 6 -31 10 -4 46 -54 -21 37 35 -57 62 44 -20 65 23 -31 31 37 -27 -18 64 -47 104 41 22 -6 -10 1 -18 71 -48 3 -10 -57 40 -4 -17 -11 40 -32 32 -26 40 -5 -9 -54 -63 29 14 -71 41 -24 -62 66 1 -50 -5 -7 -12 22 -42 31 3 -26 51 -83 66 15 7 27 24 -14 9 -18 -5 -17 4 5 31 -38 37 32 -3 -2 12 62 -17 17 -11 -20 14 67 75 3 -11 36 58 13 -78 20 8 -30 -25 -79 -11 18 29 20 126 -7 -10 3 53 -4 4 21 5 35 -102 0 41 -39 8 23 12 -63 30 -35 -29 -78 28 9 -23 -45 33 32 16 -46 12 7 -50 -9 -44 19 73 24 31 -15 38 6 -9 -31 3 -9 -39 26 23 41 8 27 -1 -19 33 2 -31 15 -20 -7 45 10 52 -59 23 7 10 -10 45 -34 24 47 16 -38 10 34 -10 -9 -30 33 -8 23 1 37 -22 -11 -1 -30 37 -47 27 -6 -6 -22 42 1 -21 -46 47 3 -17 28 59 1 3 32 -39 -31 -64 -12 39 23 4 -21 -13 7 13 25 -18 0 -18 20 14 -8 40 31 -111 -57 6 25 -14 21 -22 45 11 84 7 3 -61 -21 8 32 -20 28 -35 10 -21 62 -35 22 21 -6 -22 12 -35 61 16 30 48 17 75 15 22 3 55 30 -12 -60 -15 -16 -26 -10 -3 -2 -25 17 56 7 40 -65 -45 20 76 -26 35 -1 -20 6 15 76 -13 9 8 28 62 -8 17 24 46 17 -3 -8 -44 0 52 1 24 -11 5 -12 8 80 27 25 37 32 55 -12 49 63 37 -7 -41 27 -4 71 -50 -6 -13 7 41 67 12 55 6 -19 14 -25 -2 25 10 -21 -25 -1 0 -65 20 -15 -10 38 -57 -4 34 10 -2 31 -13 48 -3 -26 105 9 16 -18 -22 -31 -35 -12 -14 -43 -3 25 52 -7 23 39 -9 89 -47 43 -3 -44 -9 39 2 -26 70 18 30 48 8 17 4 -31 -20 20 18 -14 19 27 40 16 46 19 1 -30 -68 84 57 -66 35 -14 31 -50 9 -43 -71 -31 54 20 6 27 10 -29 -17 -11 18 -33 10 9 -3 31 -10 24 4 6 16 36 9 16 -28 1 -41 8 -17 -7 42 -17 -2 -14 -12 8 -4 47 -35 21 -16 -28 16 10 -30 20 8 6 32 6 -9 -9 -17 -4 11 -24 14 7 5 30 16 -3 37 23 57 33 23 -5 5 -15 35 23 -8 1 7 -16 -6 20 -85 -21 -44 5 -41 39 13 -7 -29 -36 24 -2 -29 1 28 -45 6 -12 36 -7 33 -30 -1 -22 -5 17 -2 56 39 23 18 15 -37 -5 -35 25 -5 5 -45 54 44 -17 -7 54 -17 -13 1 -75 -21 38 22 -30 -10 57 -45 -7 -9 -7 -33 -85 22 -3 -20 -23 45 9 8 -9 68 8 33 -29 -11 17 -24 42 -9 36 -42 22 4 8 51 57 31 -2 13 -12 14 25 1 47 -4 29 39 -17 7 11 -6 -29 -39 0 -5 5 11 -11 -7 -29 18 16 -27 -14 31 -9 -12 -31 36 -27 9 -6 -10 -18 20 8 57 21 11 -6 -2 -19 0 -11 -46 61 31 9 1 7 -12 -10 4 -46 -10 -10 13 27 -2 -7 17 29 -45 -9 -26 -16 45 -18 -33 -16 39 -25 -26 50 19 25 33 23 47 27 61 6 10 31 2 -11 -37 -4 -12 47 -5 -39 -9 -58 -4 38 -4 -46 10 -74 13 14 1 -17 32 8 24 6 -9 -36 37 45 -9 -32 0 45 55 1 -10 17 43 42 18 50 89 5 36 67 2 -26 -6 -47 -21 0 44 -6 26 -7 24 -9 -4 1 8 0 -11 68 -3 0 6 13 7 21 -15 -25 10 -27 14 15 0 -30 2 -30 -1 55 -18 7 2 48 52 2 -29 2 6 3 -16 -10 -26 14 19 24 14 -28 -15 -15 -7 6 -36 7 11 -2 -5 37 -4 20 1 -63 -9 -30 54 -3 27 32 29 32 -5 -23 -22 -23 -5 -52 -42 16 -5 -4 19 34 7 -3 8 17 -12 37 16 -6 31 -42 -14 -52 -10 16 -49 32 -24 2 4 36 37 -50 32 -13 -35 11 37 -51 -23 22 -63 -25 23 19 32 0 10 -10 -11 -4 -28 22 69 38 -6 57 -16 7 91 98 -6 29 40 56 30 20 -20 -67 8 -5 -26 22 59 -71 21 16 91 17 88 -24 69 -43 -21 -64 69 -78 31 -32 38 -61 -30 24 75 61 -20 -5 -5 -1 -28 56 20 -31 11 -41 20 4 1 51 50 -20 -29 49 10 4 28 9 17 55 -45 19 8 -24 27 68 -10 -20 -58 -41 34 -14 20 -62 16 -35 13 -17 11 -42 34 -47 11 -6 21 -38 27 -24 -31 41 48 -75 41 0 -82 -3 -73 50 25 -51 47 -27 -21 -17 52 -8 -20 13 47 43 -2 58 -32 83 -13 2 -42 -65 119 9 -59 -78 28 -28 -20 28 18 -126 -58 10 46 52 -7 40 -29 63 -44 -6 -13 -28 52 25 -8 25 -19 -56 -6 -34 75 42 27 -14 -48 -43 -19 47 0 15 20 -25 11 37 -1 -32 -22 30 47 -26 11 21 -3 -6 22 14 1 0 -12 -9 22 -14 -15 -6 3 5 17 -2 13 -29 -9 20 23 -5 -36 13 -19 39 11 16 -20 12 4 6 5 -4 13 -31 4 9 25 2 -4 21 -7 -19 -26 30 3 -27 -1 5 6 18 41 59 -13 4 -34 32 21 -4 -6 32 2 -44 -38 -37 -2 -15 22 29 8 -17 4 -6 1 -10 5 17 -37 22 -23 70 25 -30 -15 -40 26 23 -8 54 30 31 -90 73 3 -26 16 5 -76 -21 -7 45 23 20 -11 -69 38 -85 84 -87 10 -23 80 5 9 -45 -64 -24 -104 -28 -22 -83 -12 27 96 -46 -48 -55 -51 60 9 1 -15 -8 16 -66 -20 99 68 4 -12 78 4 65 -27 -24 -40 50 -123 42 -6 -46 -29 59 -49 58 -34 44 -3 120 -14 -59 -92 -123 -11 10 47 47 -20 64 -13 -8 102 27 -13 53 -8 3 -7 -27 25 -4 30 30 -5 -41 24 45 -21 -53 -123 2 32 29 16 41 40 61 9 -7 10 51 -45 -29 10 50 26 28 39 33 -33 33 -27 45 10 -37 24 -3 -89 0 33 19 -17 -41 14 -3 -16 96 60 43 9 -41 39 90 -16 51 44 3 4 22 -31 1 8 18 6 18 58 26 -42 14 36 13 -2 40 77 107 -13 52 -16 21 9 74 30 6 38 -8 -5 6 -54 1 23 0 -19 -33 26 -31 -38 -25 48 45 -22 22 7 9 21 6 -34 3 -10 5 2 55 -17 -24 34 -20 2 -14 18 9 3 -31 3 26 0 44 -45 -15 -20 -26 0 -3 48 36 18 -46 -22 18 -15 23 -31 21 4 36 26 -8 26 -5 70 -12 -42 10 60 0 14 -7 -13 -3 -8 54 19 -33 -37 -20 -34 80 3 -17 40 -35 -76 -2 21 -18 -2 -54 33 -16 17 13 21 -7 22 8 37 0 59 41 31 -73 28 75 8 7 27 80 -15 57 0 14 -78 17 12 -78 50 56 17 7 21 119 12 -44 60 49 17 20 31 15 -10 4 -26 -29 7 76 94 -49 50 85 -8 34 66 63 90 31 -10 -4 -10 18 56 62 21 -22 14 75 -38 38 -7 22 -10 -7 43 -18 -44 -14 -13 21 87 16 -57 26 -36 72 -58 37 2 -32 29 -1 -43 106 73 -3 -8 -48 -39 40 10 0 -3 24 33 72 -1 28 5 7 9 -7 127 -92 -21 34 -54 35 -5 76 -38 13 -75 54 99 98 -107 -3 -19 87 -60 35 10 8 -45 95 -33 31 36 72 -9 13 111 34 39 10 11 -35 6 69 42 -51 23 12 96 -122 -82 -43 4 -124 50 -44 11 1 45 -41 21 -18 67 -46 79 -6 127 18 40 74 -8 50 -50 -25 17 -64 -15 3 13 54 -41 -34 -4 44 124 31 49 -19 127 -10 -56 -22 -48 33 -65 10 88 27 9 -85 62 30 53 9 16 43 13 6 9 22 14 -23 -45 27 -2 16 14 44 -26 33 57 16 5 18 17 -9 -41 40 33 -27 34 0 9 5 32 38 23 28 12 10 -55 -61 -102 -12 -7 -64 39 5 -40 -18 21 -30 -50 -9 15 -77 -26 -14 38 -18 -2 58 -15 -20 -5 16 -2 -38 -2 4 -2 -14 -15 -31 -46 -5 -49 20 -41 -2 76 11 -66 54 -20 -11 -8 12 26 41 43 10 -20 -43 -33 -3 2 41 -7 29 9 -13 -52 19 38 39 -29 27 67 52 -47 72 42 21 40 -13 16 57 67 49 -1 42 -29 -24 -18 45 5 -8 20 40 16 26 12 -33 52 121 6 -17 22 54 30 -35 20 47 -19 62 22 37 -36 23 -28 44 40 96 21 7 12 95 68 -28 11 9 54 29 -99 86 -79 -59 20 -34 -24 23 89 -28 60 97 82 28 118 67 42 49 4 -4 22 28 57 -18 29 -4 13 12 -59 8 26 40 66 -26 65 15 41 13 1 58 19 6 71 29 13 -16 27 19 -74 35 -49 18 -37 -45 65 -3 41 67 65 -16 -10 -63 -5 -64 4 22 -44 -27 -32 -26 33 17 46 1 -20 -30 17 -13 -72 16 -49 6 25 -36 -52 33 22 -26 66 62 -14 27 9 -51 0 -46 -40 28 3 -11 -9 65 -22 0 45 -60 -71 -60 22 -32 38 21 -8 23 -70 -31 -33 51 21 10 8 -3 13 -35 23 40 -49 15 7 -16 18 -51 -11 50 -23 9 41 -53 -24 24 7 -10 61 -7 16 8 17 3 16 -46 -20 -22 24 -15 4 -56 25 -26 19 31 -18 -40 8 -39 -17 -9 16 25 23 18 54 -18 -18 46 -12 20 -31 41 12 -60 11 33 9 -22 21 24 34 4 31 -11 0 20 13 -29 27 6 17 -16 -2 8 11 8 6 30 -18 18 0 -20 -13 -34 15 17 15 -7 11 -19 34 17 14 -36 10 101 19 21 21 0 -46 2 -15 65 3 10 7 -36 -4 -101 -64 -47 19 2 5 -4 34 -52 -7 70 -30 20 -37 37 -54 -49 44 52 37 -35 -39 -2 17 25 38 18 6 -9 22 -33 0 9 11 70 19 -86 14 62 9 -56 9 34 -25 -14 58 -11 -32 8 -19 -5 -22 21 11 34 38 -67 95 2 -44 49 -32 -57 40 -34 15 -13 -20 58 -65 21 -37 -87 -74 39 19 -5 9 -22 -56 10 -40 -42 29 -34 -35 49 18 -15 -22 5 -41 -82 21 -82 -50 -23 17 71 22 -18 36 36 -1 -71 -73 94 -65 28 12 -11 -42 -23 35 -33 -61 28 -18 65 -15 -37 83 -50 -36 7 -79 61 -6 -5 -14 1 13 2 20 -26 -110 -12 15 19 -78 -32 16 -70 10 -23 -9 -73 -19 49 24 25 18 -16 47 -35 -51 20 -28 -74 -15 -56 11 -60 -34 -73 4 25 -101 -29 -73 -15 32 3 -17 -10 -14 0 4 -28 32 -9 -5 -12 37 30 12 13 -31 -1 19 -19 -7 21 34 -25 21 -53 -6 -8 13 23 -34 -35 -35 5 3 15 1 38 25 20 4 -9 -9 -34 -6 37 -21 19 -5 1 16 19 30 10 26 -20 32 24 25 20 -25 3 8 22 -48 -5 13 -19 -4 -11 26 -18 -1 -9 -2 -2 -18 -51 57 -60 30 41 50 -3 0 -5 -11 26 -35 23 26 -19 26 -10 15 53 -33 16 -7 -26 37 34 36 -4 -11 -72 35 20 19 -18 -32 -1 6 45 -5 61 -26 41 33 102 21 -78 -15 -27 82 -2 11 69 -34 -7 -39 -5 41 38 -25 34 36 42 79 -21 45 -12 4 0 39 66 73 28 89 -5 45 -12 120 -30 -65 101 -6 25 36 -62 18 74 16 -11 -12 80 -42 -54 73 -3 29 7 24 17 -32 -43 45 47 -21 30 10 -10 32 11 -25 108 -16 -9 -24 21 -38 0 18 21 -7 35 -2 0 -6 7 -9 18 52 -10 -7 45 29 33 10 -43 -18 1 -22 -21 -26 -48 26 -1 -28 -41 -31 -44 -3 -5 8 -77 -57 26 -13 28 -14 11 -39 8 20 -66 -7 2 77 -1 -11 7 24 -45 -22 13 7 -13 -63 -31 -17 -6 73 37 38 35 -68 -15 -6 22 -18 6 -21 49 16 12 -40 27 9 -31 -22 -17 -2 37 -38 -22 38 18 9 26 31 15 -8 -40 -54 109 32 -11 -57 -15 6 16 34 -5 20 26 0 16 35 -41 43 -26 7 1 2 17 0 18 15 -1 55 -50 44 -5 12 4 -49 11 -9 9 -2 -44 3 -43 26 4 4 31 -1 21 -35 -32 -39 -10 -1 -15 -31 22 26 -15 25 5 21 -28 -36 11 23 8 -17 13 9 17 -55 22 -43 14 3 78 6 7 -51 -1 33 -18 -28 -32 -41 -22 -29 17 1 -1 5 52 33 22 -2 18 6 -18 -13 -17 -3 24 13 39 -47 -34 20 3 -42 -2 6 25 -22 -8 -17 -39 -10 8 35 -17 -77 34 -34 68 46 22 -3 -6 -70 21 -55 -16 -95 -38 27 -25 -92 -65 -45 -1 5 25 -9 -24 58 31 19 17 2 22 84 -4 4 2 -17 -22 -12 -21 2 -6 7 -73 52 0 -27 98 -27 -24 2 -7 -6 -3 127 -41 45 27 -97 -18 -4 3 -13 -31 -23 -10 25 -15 -26 32 17 12 63 28 5 -27 40 59 55 -34 -40 27 -13 -35 22 -27 19 95 47 63 -10 -16 -68 -101 8 -21 81 -14 -62 49 45 52 -59 -36 -18 24 -77 106 -46 31 21 68 21 -28 -76 22 100 36 -78 -11 -72 -33 25 -75 29 13 34 -61 43 50 -23 91 33 29 30 25 -15 21 46 44 -12 -12 55 76 -3 86 39 12 -47 -4 -52 41 41 -45 54 21 45 14 7 15 73 -3 39 -44 2 83 52 10 36 19 15 10 -37 -2 -41 113 -81 11 8 -7 16 -25 -1 3 1 20 -10 10 -5 3 29 17 -23 21 -19 -43 10 -26 -20 -19 -17 -5 28 -6 24 15 12 14 -10 -59 -44 6 -42 -14 0 18 -27 102 17 -32 45 25 16 -13 -9 -15 -20 -10 20 19 -8 -28 -11 10 15 13 27 38 26 20 4 76 24 -42 -1 12 -4 26 22 -42 -11 -2 14 7 -45 -14 22 -4 -40 -32 56 -3 2 -44 31 -34 -25 -20 39 -17 37 64 43 45 39 14 -17 -6 11 15 50 -14 -16 -7 44 28 36 45 38 -35 15 -52 -18 0 34 -41 -14 17 -16 16 -31 58 -10 -26 25 25 16 5 -24 19 18 50 -20 49 44 -13 23 -26 -23 33 -10 -38 9 -3 39 11 12 13 -35 16 -33 -10 -17 7 -9 72 33 2 14 -4 -76 -43 1 43 53 24 -9 26 -26 -53 20 3 -48 -7 -12 -39 16 -37 22 9 30 0 22 44 -99 -3 37 69 6 78 0 7 -41 -33 0 19 44 13 -18 -57 -4 11 17 52 3 8 4 39 -25 -9 21 19 10 19 -26 24 -5 -18 -53 -10 -17 14 26 5 -55 -48 8 -17 14 39 14 -61 -11 -15 -34 15 26 -17 5 -10 11 17 37 42 16 7 -2 32 15 0 72 2 -19 -29 1 -52 13 -47 -6 15 11 -7 -106 -15 -13 9 1 -44 25 6 -51 -42 57 49 27 27 -53 2 45 -50 18 48 29 36 15 -31 -11 38 -13 -29 -27 1 -25 -3 4 -40 -43 -26 48 7 -2 -21 -8 17 -22 -36 -26 -24 -9 -38 37 1 -25 -18 -8 8 -2 32 38 -21 -43 1 -42 10 2 5 -16 30 9 36 3 -19 -16 -22 13 4 32 -5 -21 25 -26 28 -3 27 -4 2 -3 -57 -14 24 18 -7 -12 27 2 -9 -8 33 -18 15 31 -30 -8 9 2 -19 5 9 40 -13 -13 36 11 -14 -10 19 64 33 -6 54 34 23 5 -24 -21 75 8 9 1 -54 -92 -88 -1 4 19 41 -34 -78 22 -26 -43 -13 82 48 15 -36 -2 -49 -65 -18 -90 34 12 0 -37 -31 5 57 0 33 -24 22 18 34 5 82 19 68 35 -44 -55 15 16 47 13 23 -26 -63 -42 41 7 58 34 54 -18 -9 -12 -5 -40 -38 -12 -21 87 -68 4 49 16 51 12 36 9 34 -27 98 3 -11 8 -41 0 -34 8 8 -17 -48 -59 8 24 -21 35 42 -17 18 24 -11 70 36 11 -44 -27 -24 -14 -16 65 84 46 3 11 25 12 -48 -35 22 -15 -35 -5 -12 15 -14 1 -31 21 41 50 10 -20 -24 -7 -45 50 11 -27 9 -32 4 17 -23 41 -46 29 15 -89 37 -72 -18 10 -5 -4 31 5 -16 55 -10 -11 38 -26 -17 8 40 -9 91 -31 56 -55 -20 1 30 -47 -1 17 -23 -6 -47 66 49 -36 37 28 7 32 83 23 111 -36 -29 -77 6 -4 -36 35 23 32 23 -2 28 15 -27 24 8 -14 35 -18 7 8 6 -14 -12 -2 24 -5 21 47 15 26 -18 -11 -29 -13 2 28 3 1 -23 11 70 1 7 8 41 -33 -67 45 24 -1 -76 -39 -8 17 -13 24 -12 -19 -22 -7 -17 -35 18 10 25 -29 49 8 48 21 -18 -24 -8 -13 -10 -21 11 20 6 33 -3 4 21 12 24 4 13 3 29 -7 3 53 0 15 28 33 -8 45 46 -28 31 55 -2 8 46 -86 59 36 4 -30 38 50 -16 -33 37 -6 46 40 38 -44 11 115 54 48 21 -71 38 55 52 101 29 96 70 34 50 38 -30 -30 15 -38 116 8 46 123 -23 4 -56 24 88 9 8 46 -67 24 48 35 10 50 60 -17 -9 60 76 -15 11 32 10 19 96 -30 -27 -15 45 53 127 75 98 64 -23 -8 -26 97 -3 -4 -25 -10 61 5 3 -23 -6 81 -41 14 1 -1 2 4 -30 -40 16 49 -16 -59 32 8 -53 -84 -42 -28 -34 65 21 -81 20 -6 4 18 -10 11 -1 54 4 -1 -14 110 25 40 -43 65 29 19 -38 53 16 -47 17 -30 -38 49 -16 11 75 27 70 -21 -38 3 -8 -15 39 15 41 31 24 34 4 -40 32 -10 -43 -24 18 -47 7 43 -17 -31 -35 27 42 16 12 -54 -25 -29 63 2 -15 -13 -12 55 -77 -12 -6 20 39 -81 75 -64 18 -25 -16 -9 -34 33 14 13 22 -1 25 -59 -4 18 16 8 54 39 -15 46 20 -4 25 -36 -61 9 16 9 12 32 31 5 -23 3 30 -6 -44 4 20 4 41 28 3 33 -15 -34 -11 -1 14 -44 -30 37 5 30 -49 27 -15 -7 -14 3 -28 4 41 -8 5 -3 -10 1 12 14 22 -9 4 -18 42 -14 -28 35 7 -10 -82 10 -15 -16 -3 32 -33 35 -9 44 -3 -29 23 -11 42 -8 61 -12 85 10 -42 34 98 -12 61 -9 2 51 32 -23 10 38 -54 -24 -19 -93 77 -3 6 41 6 22 -42 2 10 27 26 25 -9 14 81 3 49 4 20 6 56 1 20 16 -41 74 25 -5 25 -23 -27 27 51 11 33 38 -12 32 -5 54 125 20 1 -57 28 -18 -31 -13 17 -1 19 4 34 42 -39 -3 104 113 14 -37 127 3 93 55 -36 36 70 -36 19 31 29 11 -22 41 -20 34 -41 7 6 -34 -37 -5 1 12 61 33 6 32 21 -31 -20 -57 -6 62 42 18 -39 -1 -35 3 -28 -2 -3 -41 -19 58 -33 29 17 36 -54 28 63 -16 -87 19 -27 6 -53 29 -13 2 -31 12 13 -20 -19 38 -20 -20 28 63 4 40 13 -1 25 78 60 7 55 -15 -20 3 -23 -26 30 -2 -44 81 4 -16 -12 -18 15 7 31 -34 -83 -29 14 0 15 26 -44 12 -6 3 12 -8 -31 -31 -31 10 52 28 10 38 17 -17 -17 9 -20 -15 -1 4 37 21 -23 2 2 -10 16 8 29 -22 8 18 3 5 -9 14 12 1 23 62 8 4 4 24 -31 -1 -20 -7 33 -20 35 -23 27 -15 20 -27 35 0 -30 -24 9 -5 -35 -23 -13 24 47 -9 33 -31 7 -19 14 40 -7 -7 49 -15 15 -28 -7 3 -60 -53 -1 -28 38 -16 3 -14 15 -15 -6 12 10 14 -19 -14 -50 -45 29 -9 19 2 114 24 17 3 49 -5 68 -6 -9 2 -24 40 -4 -48 56 -17 60 -22 -4 2 8 -13 -4 -16 54 -12 -83 32 -7 24 34 52 -38 -9 5 11 62 -12 14 11 13 43 -2 89 -34 -3 -86 -4 -26 -10 52 12 -23 -7 5 27 92 47 -33 -73 4 17 79 -72 9 -48 9 10 32 95 23 37 63 30 24 58 22 61 -53 44 -46 -34 45 32 23 -8 10 47 -5 11 -7 65 -2 55 7 42 2 -34 -13 15 39 -7 -44 5 3 18 51 53 -52 22 4 -39 4 37 57 -5 -7 -40 -29 -6 -26 9 8 28 73 75 -7 -2 -16 24 26 16 57 -34 -21 18 -33 30 -1 8 12 48 -5 50 52 3 30 27 18 -9 37 1 -65 -4 25 34 17 -39 42 -19 -9 -34 68 34 32 -21 -57 46 -31 9 1 -46 -21 -1 -44 27 -20 -22 -3 4 -7 11 -22 2 56 44 40 35 -18 13 29 -34 -8 -33 -12 16 -10 -15 6 8 -2 30 25 27 -52 5 27 -4 -1 24 8 17 -17 26 -29 -17 11 13 34 -32 21 -3 -21 6 27 21 8 6 -1 20 -62 20 -4 26 -33 -10 -7 22 -42 44 -23 8 -17 -9 11 37 -20 -26 20 75 -7 17 71 43 -53 -4 6 -2 41 29 31 -45 38 21 -2 10 17 -39 -9 24 15 -7 26 37 0 18 -14 50 -37 -32 -5 71 14 8 0 -22 35 -8 -22 -17 -42 68 51 15 25 -70 52 -31 51 36 28 -103 -123 45 -37 -15 -88 -48 42 61 5 -51 6 -49 -28 89 -34 62 61 106 6 -12 -30 -15 -18 -58 -14 -45 -58 -3 44 28 -89 64 28 -36 -6 107 -40 30 -62 35 -6 -24 -11 33 -41 -47 -45 45 87 2 -8 -114 -4 -21 48 -125 -99 2 43 30 96 28 -26 26 -58 58 -28 4 -89 -16 6 22 55 -55 20 -33 68 86 58 22 81 -20 -56 13 -37 30 -41 -18 -17 37 4 -13 38 2 -52 54 49 -32 -9 14 25 -70 42 -13 39 -5 -22 -44 2 15 -14 20 17 62 25 -5 -51 -58 -73 -2 52 4 2 56 -22 27 43 10 29 23 29 -23 17 54 -41 5 -14 63 10 29 45 24 8 -33 14 -88 -44 29 -29 0 44 72 4 7 -10 18 -2 -6 69 1 59 -52 3 -5 33 -35 -9 38 40 -1 -24 24 64 -27 15 43 -59 -72 -25 -27 26 -15 18 6 63 -26 -25 18 -43 -28 -8 -43 -13 14 -39 -25 30 11 -3 31 -7 10 -23 22 -41 -78 60 1 4 -52 24 12 -26 -46 -28 10 55 1 29 19 17 -25 -42 -23 10 7 19 29 33 25 -4 19 -19 71 9 34 35 -17 18 -17 4 -6 -19 25 3 14 -17 -20 -47 -62 -24 14 9 2 -2 -20 -42 -28 -10 -10 4 28 -41 8 -46 -7 29 -10 -7 -11 -27 3 -4 25 -13 -25 -8 8 -6 -32 -45 81 11 2 25 10 -38 16 17 -43 -22 50 -24 -4 -62 -3 -57 -22 -21 -44 7 22 4 25 34 54 5 -32 58 -4 1 46 2 66 -34 -14 78 55 12 -2 -52 -1 30 -16 -3 -11 -39 29 52 43 12 23 9 -12 43 3 57 28 -4 67 -24 50 -19 -77 6 8 -42 23 -3 -42 -8 3 -34 -3 4 25 14 64 -20 8 0 42 20 53 39 -22 38 32 42 39 28 13 18 1 8 -28 -56 -14 -37 10 -24 8 7 -17 -12 20 26 37 -2 -15 12 -24 34 -21 -37 -12 12 35 -2 -47 22 39 16 18 -7 -4 14 -10 -52 -19 -50 -11 -29 -11 -4 7 -9 -3 29 -13 21 28 -58 -50 5 -18 -28 27 -14 35 -17 68 15 -23 -52 -14 -21 60 -21 1 38 16 -64 16 -15 -31 42 25 -13 41 23 -1 -33 12 -10 5 2 -34 29 56 41 -20 33 45 -12 4 34 10 9 -5 -25 -4 24 -37 12 32 15 -38 -7 -15 42 11 -30 10 -6 -16 12 43 -1 2 4 -6 -9 7 31 31 -27 -7 18 -1 6 -1 -6 -39 -9 -8 20 -21 11 9 -7 -7 -7 9 -14 -14 4 21 -13 -24 4 -19 2 51 0 -4 -29 -1 6 -9 -7 7 30 20 -13 -63 -7 -8 23 -4 7 5 -9 -14 -21 45 26 -63 -4 -12 -4 27 23 42 0 12 35 48 -9 25 37 -19 -14 2 22 17 0 83 -22 -8 -31 22 23 14 28 5 -35 -10 -21 24 -12 -10 10 -3 -2 -94 -31 -55 11 40 -2 55 10 12 6 25 -11 5 35 49 34 -11 -14 59 -4 38 23 -14 5 1 0 0 51 -21 -3 11 -16 31 -26 -4 33 18 18 -16 19 -56 -35 1 11 26 61 72 61 -19 19 28 28 -24 -34 -22 -14 -15 -21 -5 97 -48 -42 -60 -7 81 36 10 34 -11 56 -15 -6 -18 3 5 25 32 -14 -9 -69 -13 20 -34 37 70 -13 -6 12 -14 -21 19 -35 51 18 6 8 -7 -74 -79 33 6 34 -17 -4 -19 -11 -22 9 -22 -2 -12 -18 19 12 -13 -27 -23 28 -11 -57 -3 -18 -23 3 -30 -7 -41 -21 49 -8 37 -16 -55 -20 -23 -66 -3 17 -36 3 -20 -47 -3 -11 -18 38 -11 11 -7 69 -4 -122 7 -54 -19 -6 -8 -14 -23 11 -60 -3 67 0 24 37 32 9 -6 -55 -14 -20 -28 -27 28 -43 -2 -13 50 -6 4 -10 -14 4 -1 -1 -19 -17 0 -6 14 -44 -62 -16 -5 43 -8 -6 2 33 20 61 -24 23 -2 13 -3 -20 16 -18 8 -30 4 -16 5 21 29 -42 -19 31 -3 -1 22 41 4 -3 -39 -4 4 31 0 16 -11 -20 -10 1 19 5 58 15 15 40 -42 4 7 -20 -3 6 7 14 25 -7 15 31 -18 -30 -18 16 24 44 25 9 -9 39 1 10 51 -98 19 49 21 15 -43 -26 21 34 12 69 -18 15 25 75 -114 4 -49 4 90 -29 10 -107 28 18 -20 62 8 -38 95 -22 -21 -15 11 -53 -50 -33 -44 -36 26 -30 57 -35 22 13 -23 12 45 -4 -33 -28 -97 -37 18 -3 64 22 -21 2 29 48 -46 -21 -68 43 -58 93 -89 58 4 56 -65 11 3 8 16 28 37 51 -34 10 -24 30 20 -3 14 -31 -16 -40 56 92 -55 60 8 25 21 -77 68 -7 -8 58 -72 -84 -27 30 -27 -38 -96 66 36 5 45 -40 -54 72 25 36 -31 -20 -30 -55 81 -3 -9 49 55 43 29 -21 34 26 -25 3 -47 14 13 -50 39 51 14 18 -13 8 8 51 -29 -31 -123 -71 -82 78 2 51 -9 30 59 56 -42 -27 -2 114 -52 31 -6 23 22 23 75 32 13 -9 -1 -4 -78 -6 21 108 2 -21 6 -19 22 -27 23 53 13 53 -48 -10 -27 40 -3 1 -30 -56 -19 18 -50 23 14 -75 3 43 -50 18 0 -39 -6 43 -33 7 -12 2 0 -35 9 14 -37 -32 8 -13 12 15 -11 18 15 48 31 47 -22 16 19 31 -25 -7 -14 9 39 25 3 68 32 -25 41 32 27 -33 26 -29 2 8 -21 -56 -18 -37 -26 -7 40 18 -56 42 -33 38 -9 46 8 -23 -32 -42 16 6 -12 -60 -31 -18 0 19 -60 4 7 -50 7 -9 12 83 21 40 -4 -6 -11 8 47 33 -29 -29 22 -1 29 1 14 46 -94 46 12 -18 -38 0 -26 23 14 -3 30 11 53 77 108 -15 20 3 40 -8 21 37 27 5 54 18 15 -21 -21 0 57 19 21 -32 39 3 32 -39 7 39 11 47 54 103 5 60 -27 44 -13 -1 21 29 42 45 13 46 46 9 34 -14 -6 -28 19 -25 -23 -7 -1 -4 -20 -31 108 -48 121 2 54 -5 20 -8 33 -17 -51 22 33 67 -24 85 -41 -31 -15 -17 38 35 28 -16 42 -24 -24 16 -29 -41 43 2 0 24 -33 7 -61 33 -7 18 17 -1 29 -39 27 26 -23 -23 -65 -6 -5 -37 -22 23 29 22 -15 -22 12 30 -5 -15 -54 6 24 26 -9 -48 -13 6 53 43 -11 -23 32 -2 -17 14 10 -39 43 -15 18 5 -11 9 29 -8 -22 -20 19 -54 41 3 7 -51 -18 -32 -29 2 30 13 15 6 12 -19 -23 -5 1 -11 5 -37 -5 -4 -3 -11 7 24 -5 20 7 -2 -15 18 -32 -9 3 -7 20 17 1 -19 22 13 6 -10 12 8 -29 -17 -18 -6 20 29 -20 -22 -8 -8 -6 -7 22 -29 9 -33 -37 -3 -17 2 -8 18 13 16 10 31 47 -24 14 13 22 15 12 -7 -2 -13 52 -5 -20 10 -7 -26 2 -6 -25 2 -28 -5 32 27 15 9 7 -19 -22 -20 39 -26 -34 13 40 -29 -10 5 -4 24 12 7 -3 35 -20 -36 -1 20 -59 -1 -70 11 -21 -12 19 -5 -9 9 43 -9 18 13 48 -13 -57 -6 2 5 -28 -115 19 22 10 -1 43 49 35 -81 3 -32 3 -22 16 -37 -21 -63 -24 1 -4 -5 -6 -8 44 -33 -11 -16 13 13 9 -29 -16 35 -25 34 46 10 81 -39 -15 40 17 7 -3 -5 -57 28 8 -76 -23 11 61 -34 27 -17 -21 59 80 5 -22 28 -20 29 0 46 26 48 -16 -46 6 -50 -23 -23 -4 -12 -5 -10 0 -61 -14 12 -32 28 -47 -4 -9 12 -18 -19 -19 -8 -7 -6 -34 26 4 -62 20 19 -69 10 -13 13 -60 0 -13 17 -33 -7 -12 17 -46 -64 2 19 -16 -27 -9 -35 -53 -15 9 31 7 -18 21 -54 57 55 31 -24 -15 -12 55 0 43 18 4 18 -27 23 -25 -8 7 -6 5 26 -24 -47 -5 22 -4 -10 -29 -37 40 -15 -1 20 -18 1 -34 -14 -11 27 -5 33 -1 36 18 -15 17 32 30 -19 2 -12 12 6 -4 -13 -1 -23 -25 -5 16 24 44 11 -9 25 42 22 -23 -30 44 -6 -20 -2 -42 -34 14 -16 19 10 19 -13 27 -50 -42 -2 29 10 -1 -10 26 21 54 13 -27 -14 -21 19 19 -10 7 41 -4 22 25 -19 30 13 -22 4 -3 8 18 18 -59 -56 -48 22 -9 -21 7 30 30 -7 10 -11 -22 27 33 -12 6 37 32 -56 33 57 7 17 24 16 0 -8 -30 -17 -68 64 -56 -34 -128 16 32 74 -26 -3 -28 -1 83 -31 33 -24 31 47 38 -30 -1 124 36 -53 56 -42 -6 20 -8 53 -59 -8 22 16 -104 27 35 -25 -19 58 -11 -51 4 83 -15 -4 -3 23 21 -73 5 39 -65 -8 -29 -74 74 -57 -38 10 11 45 -38 17 51 110 -2 44 -31 0 -7 10 7 100 7 -7 21 43 2 27 92 68 -20 -12 -14 -19 5 0 5 -42 21 53 7 5 8 67 30 21 18 57 -32 55 5 34 -25 -35 -32 -73 28 -28 -20 -69 30 42 -110 -12 21 59 59 11 82 -39 34 36 7 -2 28 -47 -8 -18 11 -3 23 27 -37 3 35 -96 43 23 -9 -8 32 -19 -57 -105 -30 44 31 23 70 28 0 20 -33 60 40 49 48 30 23 57 18 -41 -19 67 -25 -7 -38 25 36 -125 18 33 55 67 36 0 -37 -8 -44 30 -17 3 7 -2 6 -100 -3 -14 -39 26 -7 33 -37 14 -17 14 -26 -46 14 -32 -15 35 23 1 -11 -14 1 12 50 -23 18 -66 -13 18 11 14 -8 -41 -49 37 15 7 4 21 -37 36 35 21 -1 -38 18 -19 6 4 -13 -26 -36 17 19 49 -51 -26 -2 -13 37 38 -31 31 -13 24 -34 0 43 -24 30 68 3 -45 -4 15 -20 83 -6 13 -36 -36 -14 -1 21 52 10 26 12 41 14 24 31 -5 0 19 12 31 -40 -3 18 -23 -63 40 -51 -6 -42 21 -18 41 20 3 -41 13 77 7 55 -9 31 8 70 37 -38 25 -30 -31 71 -1 3 -17 -20 47 36 -106 9 -22 -16 5 116 19 29 5 12 22 -3 31 74 -30 -20 -55 20 -11 80 26 8 37 16 -59 72 -23 5 15 64 -46 11 -15 -23 -6 77 -54 -30 -15 22 -12 -27 26 85 1 -5 -67 -22 -35 36 -25 6 -25 -47 -12 0 19 -34 59 29 12 -16 -11 29 -22 26 31 24 9 1 125 11 -20 14 28 -50 30 -36 -9 84 14 3 -14 -14 -22 -14 7 28 -52 15 -27 -19 1 6 -9 47 9 35 50 -38 11 -12 22 -46 -49 -33 8 46 5 7 36 -13 -47 -39 -36 24 55 -14 68 36 30 12 14 -7 -7 9 -72 42 30 21 38 25 -22 -20 51 -46 -43 -18 39 64 21 -46 -21 -20 23 32 14 -2 -2 0 -34 -39 32 25 -44 19 21 15 -25 -6 -13 -2 36 21 -50 -4 -14 43 -32 -11 30 15 -12 -10 5 -32 14 -52 64 -11 20 21 -29 -3 10 27 23 -26 19 -11 13 -1 -5 9 16 -10 1 59 12 -20 15 -35 0 2 -4 -34 -4 -57 -44 33 24 28 -7 16 18 17 5 19 2 2 34 -2 27 -23 -4 -37 -10 10 -54 17 9 31 52 -7 -15 -18 -68 -32 15 -29 25 28 -15 34 29 49 -4 30 2 72 50 -24 67 -21 -56 -7 18 -3 50 -60 -15 -60 -22 -50 -7 11 12 62 10 43 -78 39 -58 21 -15 -3 -41 121 0 -32 -36 -30 8 6 58 11 -66 31 -13 57 -32 4 38 -64 35 -67 68 -73 21 86 2 19 80 72 14 19 12 -1 -7 -4 -51 -36 0 58 -27 -20 -68 -123 -2 -20 -16 -4 26 -31 127 3 69 -66 -102 67 11 -1 -38 57 0 15 -29 98 37 31 59 2 -42 53 -5 37 5 17 -29 -71 7 13 -29 -41 12 1 -5 41 47 -13 40 -19 -4 -62 42 13 66 1 46 34 -41 62 -28 25 31 47 -9 25 55 53 18 -29 29 16 -12 82 -12 -27 72 30 46 19 -88 1 -112 38 -49 -8 17 62 31 33 7 33 17 -71 -32 -29 20 -25 89 26 44 43 -5 86 26 -14 -17 -41 19 35 -23 -12 -40 -82 13 58 40 -17 48 -26 47 -48 -23 -51 21 16 51 -56 -21 -34 23 10 -57 -3 2 48 -20 40 0 18 24 15 -2 11 56 -16 24 -44 -32 3 -30 -4 -1 33 -7 -52 11 -31 32 -38 -48 5 -14 47 -18 -4 -11 7 -6 -15 11 -32 19 -21 -5 35 -70 28 5 40 -38 -3 -1 92 47 4 -3 -16 29 -1 -13 -11 -9 15 -45 1 -29 -44 -49 24 -13 -19 15 -34 7 8 -13 16 -29 31 -5 -17 3 -8 2 9 63 23 -30 16 9 94 49 24 0 43 71 -109 15 88 99 50 82 39 -2 85 111 -47 60 -24 62 22 78 -36 22 52 31 16 48 -51 20 52 17 -17 59 53 127 30 110 65 -5 71 59 -37 -23 -25 54 26 -15 38 49 -4 74 -18 24 -40 20 46 15 44 23 74 -42 -35 -56 -56 22 90 -47 39 7 -43 103 -49 43 79 95 48 125 -21 42 51 -49 53 -9 70 50 17 -84 7 112 -42 -80 68 31 29 -16 29 -9 -55 9 32 -56 -53 -51 32 6 80 4 62 49 -47 -45 -69 72 12 -35 -24 -25 31 -9 -55 -22 6 -31 -2 -10 -32 -54 -29 -27 4 9 -45 -48 15 32 15 61 51 -24 -38 -2 -9 -30 2 -48 -43 -39 -46 -34 26 -38 25 -20 31 9 -18 20 23 -38 33 -16 -77 -34 4 46 29 19 14 18 -29 -45 -64 11 30 51 5 -23 -22 -1 24 -34 47 -41 -29 -51 30 15 7 -43 30 19 34 8 -40 -9 4 -2 -22 -19 26 10 -22 17 -43 6 27 6 20 14 -47 -51 22 -11 -6 12 -45 6 -26 -24 -32 -9 -10 -29 -4 -34 8 33 20 -21 8 -57 12 -11 18 -38 13 65 21 -15 -2 50 -50 -30 -47 -14 -9 21 -22 19 63 -24 -55 -6 -22 30 3 5 6 32 -35 -31 54 17 -23 -11 5 51 21 18 25 17 21 -10 -9 17 -39 -11 36 -15 27 -35 -33 34 3 41 53 -54 43 54 68 28 16 -12 2 1 -17 -42 -62 -43 -38 -22 -21 44 0 53 54 -5 30 33 7 -37 50 13 -42 37 63 -77 -20 -17 25 -45 60 31 -7 127 47 55 -6 -67 44 79 -27 57 33 56 53 -20 0 54 11 15 2 -12 65 -2 -8 19 29 21 64 62 -33 46 21 59 12 35 18 -12 -56 38 63 47 -34 28 -49 -16 -27 -12 -15 57 -31 30 89 19 34 35 14 -32 111 -37 -5 -21 -23 22 2 8 1 70 -54 -71 44 -111 25 -72 -15 -4 -68 11 23 -35 -1 13 26 -29 -70 18 28 19 19 30 18 27 -96 -5 100 -30 -23 0 -40 36 -8 -10 36 10 -36 67 -7 -18 36 7 8 -23 0 10 -12 9 -13 11 27 -5 9 29 24 -70 31 -7 -6 26 -17 -10 66 -4 -39 4 18 -11 16 -60 -1 12 51 87 -26 -64 18 50 18 -54 8 6 -7 -49 52 -27 -4 -6 8 -24 1 35 2 28 -21 -37 -18 -16 13 -14 -41 -18 27 -6 24 50 13 61 -4 -25 -3 10 -9 9 -29 -13 -26 0 -45 9 15 16 -36 6 8 18 -2 38 -45 30 31 21 52 -11 -4 -13 -10 11 -9 -18 20 44 -13 -33 16 23 22 6 -31 -33 -10 -15 -1 -24 -3 -23 25 9 3 -11 -49 -48 21 22 -40 8 -14 -21 -21 26 24 -3 -2 -33 13 1 -13 32 68 -19 -33 0 -22 -5 -17 98 -56 -64 19 -28 58 85 8 66 4 76 -36 -5 71 -20 17 59 61 74 13 6 -7 10 27 4 -50 99 49 9 56 85 19 51 22 -16 73 3 34 18 -28 7 19 -44 59 23 1 69 30 -48 95 9 39 -46 126 28 45 115 88 16 24 16 21 29 -23 62 -60 30 -25 83 -32 -53 -58 65 14 18 74 24 24 85 -14 70 -8 -24 62 105 13 -10 5 46 68 -123 -38 -21 68 124 -28 29 9 -31 13 -29 -2 -7 -127 41 -6 -10 21 53 60 -40 -33 50 44 67 17 -66 -49 3 6 84 18 -20 -50 -17 23 -4 -9 40 30 -34 -29 30 -85 -55 41 -2 50 60 -23 -16 -31 1 17 -35 -35 16 -10 -19 -23 82 -97 2 -41 24 38 40 -5 13 14 96 54 -19 -15 73 -21 25 -83 -5 -31 -2 40 3 31 60 15 31 -40 -14 -13 -9 19 -21 19 -60 -5 -3 -5 -55 -33 -45 82 24 -5 -7 -6 -1 21 -22 5 21 -6 29 24 -9 -39 14 -13 -1 -9 12 -24 -2 -9 0 0 -1 20 11 9 -35 -54 24 17 -2 6 -35 11 12 37 -22 -33 -7 -26 -11 -51 -28 -8 14 11 -18 62 13 15 12 -3 -16 -24 -7 26 34 -31 -27 -39 -24 7 -11 6 -26 -41 -25 47 9 12 -1 12 127 -4 9 30 -47 -8 -9 1 3 14 -4 1 -11 73 -34 -20 22 48 6 28 -11 -7 67 46 -3 -31 -15 -21 -8 -18 -25 34 4 10 35 -93 -35 49 45 44 94 40 -48 6 100 17 -14 -16 -3 -87 55 -4 108 26 50 -71 96 -7 -76 24 9 12 -37 -26 32 -14 12 117 -44 31 -2 81 63 33 7 4 -34 71 -6 50 57 28 91 4 8 44 15 0 49 -26 14 23 111 52 0 127 59 22 3 -24 4 1 -34 25 32 77 7 -4 19 -38 -8 78 -1 36 30 -3 19 99 -14 26 -12 -27 9 -57 -32 58 28 -6 52 -52 -25 0 -63 11 49 -30 -31 -21 -13 -28 10 -5 60 -52 -54 0 -92 -32 -1 3 19 7 25 28 -9 -4 45 46 0 5 -14 -28 45 -41 42 4 -1 88 32 -6 -4 58 -28 -63 -51 -28 -31 -9 -16 7 27 6 -9 -17 -35 44 17 -4 -8 -62 -36 5 90 8 -58 64 57 -23 -34 -6 10 1 34 -21 18 27 35 57 30 -42 -27 -10 -31 -19 44 -1 4 -85 33 8 -16 -7 -39 11 14 -18 -28 7 24 -36 20 30 -29 -5 28 18 11 28 20 -4 3 -3 -5 -14 -47 9 33 -34 39 15 0 -7 -45 41 -1 -2 5 32 -9 -43 25 22 28 42 -13 -11 26 -8 -10 23 17 -29 22 6 -8 -16 -13 -15 -77 8 26 34 35 -24 -64 12 -24 -2 -5 26 -16 13 14 25 -3 2 -19 26 -3 3 -33 15 -44 -38 -6 -10 7 -35 3 18 27 54 25 55 -1 -80 22 21 9 -61 3 35 -15 40 -36 6 0 -23 -28 9 -47 9 15 -63 16 -26 -19 30 77 -17 39 -78 29 44 -2 -22 -5 27 50 -22 46 39 -38 76 95 34 -9 -33 33 3 26 71 36 -63 -46 -1 42 -21 -38 41 9 -9 23 -32 65 -26 45 8 35 -21 27 -67 65 32 41 3 20 -41 1 14 -19 2 -3 22 9 50 -11 5 -13 -113 36 58 44 -54 49 -16 53 37 22 -3 10 -9 35 -67 -79 -40 -3 -1 6 57 43 38 -33 -57 -16 -53 -30 3 50 -31 -9 11 -127 -76 65 42 -51 28 -37 3 -32 20 42 0 -66 -9 52 -16 -1 40 -15 -48 21 -49 99 13 82 29 47 -55 -43 -65 -75 -13 5 127 27 8 21 -10 11 -25 -10 -32 6 47 18 23 4 42 -10 -68 35 1 17 -31 -86 -1 -34 4 12 8 -16 58 2 -36 34 39 124 -62 56 38 15 -22 -9 27 -7 -39 9 -19 27 -45 21 73 -73 -16 -21 32 21 -1 -11 18 2 -39 -2 -11 24 13 28 -33 18 21 9 -20 14 -26 -9 11 -1 3 16 3 53 16 27 11 -45 -12 0 -4 -14 -30 21 12 28 9 -13 10 61 -2 -10 52 31 26 17 -11 12 -5 20 12 -2 -3 2 41 18 4 -13 3 9 0 -19 -6 -12 62 -2 45 -10 -9 -38 -53 23 -49 -1 -10 13 3 -1 16 -1 -11 -4 1 6 8 -6 5 4 8 16 -12 -11 21 5 2 -2 -7 0 1 -21 -2 -11 -20 8 -23 11 0 -6 11 14 1 9 -2 -16 13 -7 9 1 -11 -24 10 -18 0 4 -5 3 16 2 -2 0 0 -12 -14 0 -4 2 -2 16 -20 -9 -10 -4 -1 4 -2 -3 22 14 -6 6 -1 9 -19 -16 1 -11 -21 -20 -27 -5 -3 -6 -3 9 4 -22 13 -1 -3 8 1 19 5 11 -6 8 -17 21 2 25 18 -4 -17 -21 -2 -14 24 -26 24 -4 10 -5 -9 -46 -9 -12 8 9 -12 21 -15 -1 2 9 10 15 6 9 -30 12 -6 4 7 10 -6 -18 -10 -12 -1 5 20 6 -10 -6 -7 23 0 -19 11 0 4 -18 16 -9 -33 8 -16 11 2 -18 -4 -1 -14 20 7 -18 15 2 -13 7 -3 -32 1 0 -28 -34 18 -13 9 0 5 -25 4 -8 -30 18 10 -3 17 6 18 -4 -16 -17 4 -7 -7 -14 4 4 -7 10 10 -6 -10 -4 0 -8 -3 -9 -12 1 -1 -5 12 -6 -12 -2 -9 14 -11 9 -17 -2 -17 7 -12 -6 -15 13 0 -6 10 8 15 -14 0 -8 -4 -11 3 -5 -5 18 -3 4 -3 6 12 21 -2 -15 6 12 6 -5 -2 -8 -14 -6 8 -11 17 7 16 -5 -12 -1 -5 -10 -18 4 14 17 -2 -7 3 -20 1 0 -26 4 10 20 5 -3 0 -11 -3 37 15 -11 10 15 -35 -13 6 4 2 2 38 -22 -2 -3 31 14 -13 -22 22 6 11 15 -7 -17 -9 13 8 1 -10 20 1 19 6 15 10 11 -23 2 -3 8 -1 37 12 -7 10 9 -14 30 -1 -13 2 -6 21 -10 15 13 -17 -12 -32 -27 -8 8 9 15 9 23 19 -1 -5 -23 13 23 16 10 -44 -2 -12 12 -12 10 -14 -6 28 -13 10 26 5 34 -1 -44 0 15 32 35 -2 23 40 -5 33 0 -32 -6 -9 -2 -18 -24 18 50 -55 -12 23 -36 -11 32 26 -7 30 1 6 -12 -22 25 -33 -28 47 -1 -15 22 -28 30 -13 11 -27 9 -11 31 27 9 8 -5 -3 -26 -9 -1 27 3 -53 -19 -38 17 25 8 13 -46 -31 9 11 8 -3 1 12 20 22 90 17 38 22 -14 -5 -9 -16 11 29 35 -8 -20 -32 7 4 4 26 -1 34 38 10 8 -41 20 -33 -19 0 15 0 3 -37 -1 -14 19 1 0 7 5 -17 -18 9 -3 -4 15 22 8 5 -18 -1 13 0 24 13 -11 29 -8 -20 1 3 11 18 -11 -21 -7 17 -13 14 -5 -14 -27 -20 3 -2 15 -6 -2 -16 -28 12 5 17 -3 -22 2 -8 16 15 -4 19 31 2 24 23 -11 5 -17 -13 -15 -1 0 11 -36 7 -3 -3 7 13 -14 -16 -8 -18 -17 4 3 5 -15 31 -24 -20 3 12 -20 0 -27 -13 -28 12 10 -19 4 -8 14 12 23 35 9 19 35 15 18 -60 6 40 -4 1 36 19 -5 23 17 -28 24 -8 -24 -28 5 22 18 28 -11 -6 -1 28 40 -3 -2 -10 29 37 119 -20 27 4 4 27 -16 5 15 26 -29 5 6 -30 -24 -36 -10 8 -31 -3 16 12 -13 -44 -9 38 -19 -7 5 -28 9 -23 25 -4 -3 -13 -5 5 0 25 12 -5 57 -40 -12 11 -21 -27 31 -16 12 -63 -47 34 -39 -17 2 54 -6 30 -3 11 -65 -4 -16 8 -45 2 23 38 -10 72 -38 32 -5 86 -25 -48 42 25 -26 1 -8 -59 58 -37 42 24 -3 -15 19 5 35 16 14 -5 54 -9 25 -31 4 -17 -4 -26 42 -27 15 -1 35 -8 -15 7 -10 -10 -32 24 31 -29 11 14 13 28 32 -10 15 -20 24 -8 -1 -26 -11 -15 -35 -16 -24 -6 30 -2 11 -19 -26 10 -29 -72 -44 3 -6 15 6 5 3 6 27 19 -28 10 14 -17 14 13 7 -8 -24 45 -5 11 -15 -19 -15 -6 18 16 3 28 38 22 -17 2 -19 35 -7 -21 -6 8 -17 3 -14 2 -17 -17 8 -6 37 7 -24 2 -39 4 11 38 -22 21 -37 -10 -7 7 -5 38 34 -5 8 19 -30 -11 -16 -1 10 -11 -28 26 -54 9 19 21 -4 -25 -38 -13 17 7 9 22 -15 31 -19 49 0 -7 -1 -9 -7 21 -15 31 -39 -12 -33 20 22 -13 15 10 8 1 2 21 14 21 4 -22 15 14 -24 -40 4 -30 -18 21 -22 9 0 -37 -19 -5 57 7 -14 27 35 33 39 8 18 16 18 0 22 42 12 -43 -12 35 17 2 -18 42 10 42 33 26 -16 2 -14 -6 33 -5 31 4 30 -10 -5 -7 28 29 23 15 8 -21 17 -52 -27 20 -1 17 -16 -17 11 43 17 29 0 -24 49 41 -39 -32 -1 -37 20 62 -3 28 38 7 -25 8 19 1 -14 23 23 10 -3 -56 -1 -8 23 28 -15 -15 -37 -10 8 -55 0 20 -47 -44 -27 -8 25 -25 -7 -3 17 27 31 -42 2 24 -9 -7 30 16 33 -30 29 62 -6 39 -33 -49 37 -11 11 -27 -67 -20 35 -54 -10 27 -17 62 17 -18 -33 -22 -1 -15 49 -8 -17 -1 23 14 34 9 67 -40 -41 -13 -11 -24 0 -20 0 18 106 81 7 22 3 -4 11 -20 -5 -6 -3 10 -8 5 6 -4 -25 10 -63 6 24 7 -31 3 0 -26 -20 0 -35 -4 -8 -27 -1 -8 -22 40 20 -22 3 10 0 -18 13 -12 -30 -13 3 3 -15 -17 -8 -6 -4 -14 -5 -28 12 -27 0 22 6 23 -9 5 17 -23 -22 13 -21 -4 0 -21 -39 -25 5 -2 -2 -15 -31 -7 -29 -6 19 4 15 -36 -8 4 27 -21 -6 11 0 -10 -16 13 40 7 -16 -5 1 -13 69 31 31 -45 -40 -56 -23 -11 31 -30 20 -3 32 5 -6 -44 -19 0 -13 -15 -19 2 -14 -40 46 -22 -9 13 -13 -34 -43 -12 -13 -1 -25 14 -16 -1 9 -5 -27 -35 -59 42 8 -33 39 -15 -48 -6 -21 -5 -17 -12 4 -50 -19 14 -19 21 -17 -23 18 25 -12 21 18 1 6 -2 -35 -36 17 11 21 -9 41 9 -2 17 -24 -23 -4 11 -10 36 4 22 -95 -32 -60 -4 -15 71 28 3 -16 -74 -56 26 12 33 50 18 -79 25 -18 -26 9 9 -30 7 -3 4 -10 -17 -15 -50 -1 32 38 16 -25 51 -16 34 -70 23 24 10 -85 14 24 -73 44 -29 24 -7 26 48 -2 -36 21 33 20 -112 -29 32 -27 91 37 100 39 58 30 37 36 -57 -17 -20 -33 -49 0 -33 72 34 79 -39 38 -8 12 -9 -8 -26 -36 10 20 -9 -36 11 -47 10 10 59 6 10 -26 -11 42 49 2 -9 -1 50 -12 -22 14 -9 15 16 12 -18 20 -5 1 8 -13 4 -16 -17 1 -13 3 -7 13 15 -23 -6 -20 -18 -4 -12 15 -14 22 20 4 -20 11 -29 -8 -13 -16 13 19 -18 -6 -6 19 16 4 66 -30 23 15 -50 15 -57 0 12 -29 -5 -49 2 -2 8 9 -15 24 13 4 5 -30 9 -70 8 -8 16 -26 -33 -18 -25 29 -3 4 8 -27 1 -6 -13 33 8 -20 14 -3 18 25 12 -26 69 28 9 -26 24 6 -35 -12 70 59 -26 10 -38 -4 -34 15 -10 44 -3 -21 0 8 -5 49 -15 1 -28 -5 -9 14 15 -34 28 -13 25 37 19 23 -9 -10 -16 45 23 21 -13 -21 59 14 -15 37 -13 -53 -46 -1 11 1 -66 30 44 28 0 22 19 -14 5 -30 8 38 57 16 3 -1 46 29 3 31 35 3 13 32 -16 20 7 7 37 -12 -15 -17 -23 -2 46 18 -76 22 3 107 30 -21 10 19 53 26 47 0 -24 -26 -51 5 -20 30 -38 -4 -18 -5 48 -11 -8 11 -9 -24 -36 41 19 37 4 32 8 -14 60 -49 19 -4 25 -14 -27 -12 -62 -54 -35 -10 26 83 -13 49 98 3 -3 -38 64 8 28 75 60 27 0 78 -10 -34 35 1 19 -18 9 -44 21 -67 -57 42 5 -21 -16 20 -34 -8 -21 37 34 72 -4 -37 39 -16 -52 -44 91 -3 -29 2 13 18 -22 -38 2 -18 1 -38 14 -26 1 -30 -26 -9 -6 -11 14 21 34 41 -24 -5 6 -3 -16 31 -16 9 45 -13 21 23 36 6 9 19 -13 9 23 -1 -12 -14 -32 -18 30 18 -37 -10 -8 3 20 32 -23 -20 14 6 -30 -15 -14 13 -29 8 24 -22 7 -17 12 -6 3 49 2 10 -8 26 50 -39 -33 0 -4 -16 5 -8 3 -17 22 -4 -1 43 -6 -30 25 56 40 7 15 13 25 -42 -48 -40 -69 57 -96 -66 -34 -73 -36 33 -59 14 -58 -58 12 45 -60 12 -32 39 -62 -26 -119 -62 -5 121 -58 110 -36 32 26 -13 -38 126 -5 18 113 -30 -123 21 1 -32 -68 -56 -23 103 -114 -59 76 19 4 9 -27 -76 -40 -52 -65 -126 -85 -125 68 48 65 -57 51 40 -82 -11 4 43 54 127 -48 -14 25 93 63 44 36 -42 23 -55 39 123 94 59 88 27 -57 -17 -126 86 46 7 31 -4 -87 8 95 112 22 -14 -128 60 -63 117 53 8 29 0 5 -90 -92 24 -84 87 -86 -85 11 -85 87 -60 -15 38 21 -102 -127 -61 -29 123 53 -46 -8 39 -19 4 -109 -30 105 57 -13 -20 43 -66 41 -32 -128 -33 -18 -125 93 77 68 -45 -91 -122 57 -72 -14 -128 41 127 23 29 67 -100 -59 98 -82 8 -43 -63 -101 16 -60 -26 -49 36 -70 92 127 -68 -13 -38 -65 -26 21 70 -64 11 53 120 97 70 -13 68 -4 40 -43 -22 47 -22 -125 39 6 22 -2 -24 63 94 32 -43 60 -50 8 19 -112 -127 -22 -4 85 -48 -15 99 71 -54 -29 12 82 -24 -15 74 -54 -22 -127 74 -30 -9 13 -75 126 -4 49 -64 -62 80 2 -30 -68 -47 -10 8 -22 54 -3 58 127 58 -6 84 -70 67 32 8 21 -96 -73 -12 19 49 -49 -2 36 -7 89 1 -8 -33 27 -61 39 73 30 89 -15 65 102 72 94 -22 -38 73 25 34 127 35 75 33 -86 7 -71 42 112 25 -28 -126 12 78 -7 -72 125 -35 -109 69 -78 39 19 56 -23 42 25 -128 8 -18 -20 115 89 -36 -77 -30 125 -71 87 123 -128 36 56 113 68 -81 29 34 73 -38 -14 -81 -39 45 -90 4 107 3 -82 3 30 77 -14 126 35 -79 62 -127 28 121 56 38 -3 -102 59 29 84 127 -118 55 -48 -49 41 93 54 14 -73 82 -40 -94 -45 96 -49 41 84 93 -127 127 127 36 -2 -30 -79 72 -101 -13 -111 116 -108 118 124 -33 -122 24 92 119 -56 94 30 127 26 -46 39 -124 -52 -15 98 8 -75 -37 -14 94 -53 -50 -57 -114 35 103 96 -2 125 -128 10 -37 33 -78 68 85 -4 124 16 83 -75 127 93 -127 60 -66 -123 -102 34 -119 107 125 -60 -11 38 6 1 -4 -72 69 114 -13 -126 -20 -36 -70 -54 -93 39 -124 5 -15 61 105 83 -17 5 40 65 -6 -126 -34 -64 40 35 64 -8 -7 -40 21 71 -5 -75 9 -12 -62 -30 40 -30 -84 -6 91 -74 17 17 -31 25 -53 -50 32 127 83 -6 7 -56 39 126 74 -91 -51 -33 95 118 -43 -81 60 18 -24 1 31 55 3 88 -41 -44 -21 -5 -40 47 -121 20 -4 -44 121 85 -19 11 -16 -48 66 95 42 100 113 8 9 -8 85 9 85 -99 -30 -29 -11 32 4 64 64 80 -14 -18 49 -72 125 -56 -72 -121 -79 61 -71 -61 9 -4 22 -3 -51 35 -113 48 -38 8 71 10 44 52 -8 -27 94 84 -54 23 57 8 59 23 11 -40 26 4 -104 -75 -68 -127 -85 11 121 -127 -35 3 -88 25 -64 21 -39 49 -26 -2 -128 -26 -36 -19 -78 47 22 -1 -88 -88 28 3 4 -117 7 79 -41 3 15 1 28 113 -44 17 16 45 126 34 94 -97 94 52 -55 -62 -61 -85 27 -58 -15 59 -28 -74 -37 63 -90 124 89 -118 25 -15 30 -40 -119 44 -63 -71 49 -105 67 2 34 33 -96 47 40 -57 44 35 -108 -38 -124 13 102 -96 -36 -27 -55 -111 84 95 53 65 -124 30 -10 127 -24 -36 -105 32 63 -76 -9 -50 78 4 -101 -23 -127 -32 56 0 -53 -81 79 126 -59 13 -123 -70 119 -72 -1 -122 -60 -3 -38 7 -125 59 108 -18 19 72 -83 -37 -127 -44 -121 16 127 -79 -12 107 58 -35 -52 -38 -42 7 -29 -9 -122 78 -49 -11 -82 -89 -64 -35 -5 -1 83 -19 -1 42 34 3 40 -18 -2 -22 12 -84 -42 -38 -1 24 14 6 16 108 56 -123 -33 -33 17 -106 -89 8 -37 -38 -18 7 -46 -40 -85 -15 -36 19 -37 26 3 6 50 -49 -65 -29 -21 109 35 10 61 10 127 -45 12 -10 16 -53 58 11 6 6 -124 -26 -73 -5 28 -11 24 -23 17 18 21 45 -26 -115 12 -38 -74 41 64 86 -30 49 -30 41 -32 105 -31 43 30 -95 32 -79 -73 -62 -99 -8 77 -56 -3 -26 -26 -34 -50 64 44 72 116 -1 126 99 -68 -53 -65 35 -14 -83 -20 -118 77 75 37 35 79 -128 -1 114 -99 127 39 5 -98 42 -22 -45 -53 -40 59 -82 51 121 16 -87 7 -84 33 93 127 -25 -15 -13 -67 98 -51 41 69 -1 6 -108 66 -126 127 21 30 -39 121 13 -128 21 -41 38 -27 124 -124 60 -28 -17 -35 83 -36 44 8 126 -25 -23 124 -119 101 -26 -1 -109 25 -9 -103 -125 -120 95 56 -125 126 127 43 -86 127 -127 -128 -84 -99 -127 127 41 -27 -122 127 -6 54 54 -128 -44 126 119 32 68 125 -62 -64 92 10 -94 38 -123 -56 -21 127 88 127 -117 31 41 126 46 122 -127 83 -53 2 96 110 127 30 -12 -111 -106 18 116 -91 -104 127 20 10 -23 -126 -40 -4 127 -42 97 -72 -126 48 0 11 72 -29 -9 -128 -4 -5 -76 -22 -19 -18 -123 113 43 29 -43 -42 23 17 6 59 1 87 68 23 -11 -126 48 55 105 127 58 -10 -19 43 102 3 -68 -28 -47 42 28 -106 -107 4 -126 -65 48 62 5 23 -5 -41 -62 87 -66 -90 -124 -124 15 -16 30 35 44 31 -14 24 -94 62 -76 6 54 9 99 -35 -71 83 15 3 -10 -123 127 2 -16 70 49 51 -79 -57 60 45 -100 126 -127 -113 -31 -75 -26 33 -15 -87 112 -124 -30 81 -63 -48 44 35 -125 4 -84 108 -57 20 49 45 -8 79 -84 -113 -56 107 -78 -60 81 -124 71 -116 -57 -87 -71 97 -105 -32 -75 64 116 -73 -108 124 -127 63 103 -64 -14 45 -4 -34 109 51 111 -21 2 -22 29 -36 88 20 -29 -11 -23 -93 35 -24 -17 40 5 -79 -26 -117 48 -33 -101 -115 -13 -33 43 126 0 77 -93 29 -103 -119 -67 54 -10 47 -119 -36 -108 97 -31 -45 -1 90 123 29 -126 -79 -33 -53 -122 -73 127 -27 -100 -73 -33 -92 -28 124 38 -120 -38 -125 37 -35 125 -125 53 -79 -11 -82 17 127 48 -126 -104 116 -45 -126 -99 13 -59 -110 113 89 -108 51 125 -75 25 -125 120 60 71 -24 -65 47 58 23 -37 -4 -4 27 110 118 -127 -106 -40 -21 15 -65 -125 25 99 -125 58 -126 -126 21 -52 -124 -125 124 127 -93 -90 -100 -28 107 -21 98 -122 49 -43 21 83 -33 125 -58 -6 69 118 1 -23 -62 -104 -2 8 32 -75 -102 42 -32 -111 73 -13 -58 75 -88 47 74 -47 -16 4 41 -71 -45 -126 17 111 25 -98 -2 25 -29 126 55 -91 -8 -127 -127 6 74 -101 -42 88 -37 -4 -38 62 -58 24 94 20 -10 -8 -82 -39 -48 -90 -11 -45 41 74 -9 -31 16 -79 -7 -51 19 87 11 85 -23 -2 -96 113 -13 -127 48 -4 -50 -61 16 3 3 65 -127 -70 63 -92 104 -77 -125 -38 -124 -14 79 24 69 -23 -43 -99 -67 -127 107 -92 29 -44 -113 66 71 45 -53 -17 125 12 -43 62 82 -111 92 -123 -122 1 -30 65 -5 78 -25 -77 -120 -75 71 -126 1 97 -32 -105 -124 116 -31 54 83 27 122 48 -55 -118 -58 4 102 -23 51 34 -45 68 -128 127 106 -55 -81 -126 -126 -13 -24 5 30 -58 -116 113 77 85 -6 -54 44 -49 -128 126 -112 -121 -60 -32 19 21 -32 -61 -16 -13 101 -128 -16 -62 -76 33 -23 -28 127 -100 47 125 -119 38 -11 -11 21 43 -78 111 28 114 125 18 122 -123 -27 113 42 127 -43 105 -59 73 -56 113 60 19 118 62 -103 85 47 -3 -54 -128 96 -104 27 103 -6 -25 -122 9 -2 -89 7 12 126 -118 119 -25 126 -16 127 50 116 39 79 25 -11 -73 118 -104 106 -111 56 -74 -60 118 5 72 100 105 126 102 -77 -121 -83 -120 23 36 123 44 114 -23 -29 -22 -33 -32 12 -60 49 -45 19 -58 31 -127 103 95 67 5 -47 22 -29 99 -13 -55 -6 -26 -63 20 127 58 85 -12 -4 127 15 87 -91 81 -27 -56 36 -14 -3 -126 0 29 -24 101 -75 -24 47 -49 100 -4 -118 82 -86 -30 127 -5 10 -48 111 -4 122 12 -60 51 -19 -21 56 68 60 -52 -26 -6 -7 4 -8 -58 -88 -39 30 -29 -20 -71 -34 82 -8 -61 45 27 -123 55 -43 32 -6 -34 -62 69 -126 53 -40 11 -125 -99 66 111 3 -66 -11 -27 95 -31 -85 10 -19 124 -128 -47 89 -2 -4 -91 89 -66 -126 -30 7 58 127 55 -41 89 45 1 -95 -29 -4 -127 -38 54 57 121 -105 13 24 -73 -86 51 -47 -91 42 6 15 4 -30 80 -89 113 42 -3 17 50 -4 78 -126 -16 -121 66 42 28 -7 -40 -31 67 43 -94 -11 -32 18 -33 127 -40 -68 37 -102 -95 59 59 28 -35 -27 17 -22 2 -78 127 101 -81 32 72 36 -30 -102 98 -8 7 -123 124 98 54 -118 -59 118 4 -100 -5 -24 -127 90 -44 -128 -87 110 -15 40 24 -59 62 -1 -127 -63 34 -128 127 49 27 -95 95 52 47 -7 124 29 -10 -127 -126 -15 -23 -72 -125 10 113 -82 70 34 -8 -20 73 -46 -97 125 -128 20 80 -22 8 75 12 -92 -58 126 -31 48 -49 7 37 -81 18 -49 119 -42 -122 125 57 -62 74 -20 87 -44 -27 40 3 3 1 -91 -78 8 -39 -9 -127 62 -71 7 10 29 -54 -122 61 7 103 53 56 91 -19 -37 37 102 -3 56 127 -45 2 -26 77 -14 109 47 -7 87 -128 97 59 -13 -50 31 56 -55 -24 50 -8 -124 20 84 -77 -26 46 -12 -92 -61 -12 67 -36 35 -14 24 127 38 -37 16 -10 12 -26 -67 -65 17 12 -84 50 64 32 43 20 17 -29 -13 3 4 -119 -126 36 42 -38 -128 -84 50 -114 -126 17 -59 56 -29 49 29 -25 -10 51 116 32 32 92 38 94 79 119 -106 78 93 127 24 -126 69 9 23 -100 94 -7 31 77 -6 -47 126 32 1 125 -30 -128 -77 123 101 3 125 -17 -55 -20 -122 2 28 -11 -74 -116 -104 45 -72 119 126 -35 2 -64 4 -115 4 125 -11 125 7 -20 93 -51 127 14 7 -89 -84 54 -28 -97 127 36 119 23 -65 71 0 36 -94 -6 115 4 -59 -41 -88 122 11 126 -49 2 -6 52 127 -47 125 123 123 -44 -121 109 -58 -109 106 43 -67 -127 46 64 -67 -123 28 67 125 -125 115 -127 -127 75 70 -114 -8 127 70 14 84 70 126 119 21 -45 -15 -115 -125 -38 119 -80 -75 26 87 -26 -128 54 125 -64 -128 28 -40 -14 119 10 97 -41 -84 45 -68 -5 -62 52 71 -115 34 -29 127 -34 -84 43 -61 -57 -55 86 5 -35 9 -68 29 103 37 -36 -44 -17 -67 -13 44 -36 -9 60 -1 52 -14 -72 -84 -126 126 15 40 110 2 6 36 26 -81 -50 65 98 52 12 65 -48 -109 86 -59 124 -33 116 -60 -41 17 -30 -122 -106 67 -127 15 71 -45 38 48 -73 -20 -41 -36 -44 -87 -72 56 23 15 111 4 9 -14 99 103 44 -18 126 -15 1 48 53 112 -24 24 -32 -67 -104 -17 9 -22 5 83 -104 50 79 -65 11 104 25 24 69 -128 -28 66 126 -91 0 127 127 -55 -23 -79 -14 -44 -128 -123 110 -72 64 -127 90 127 -8 -125 32 -19 123 -120 111 -1 127 124 19 -118 -46 -17 -123 -15 -71 -114 -25 -127 -29 16 98 -110 -1 -3 -128 -41 23 18 -32 10 121 -42 -38 -25 -32 76 -127 11 -99 -125 -25 -58 -77 -20 18 27 35 72 -37 52 51 26 -128 -46 -76 89 -24 121 28 25 -14 80 -98 -36 45 -88 -16 -54 -91 -78 -46 -91 -49 63 86 -46 53 57 51 64 -125 40 67 -99 -16 -123 126 50 84 5 105 46 -66 95 -74 119 -127 29 127 -22 9 90 121 119 -73 95 -119 2 -76 74 -48 16 126 49 -127 -128 109 50 120 -103 -81 -102 -7 44 -87 33 -82 -71 9 -30 83 127 41 -54 48 8 127 -23 106 -126 115 121 -28 43 10 126 120 -36 119 9 -7 -3 -127 -32 -128 -127 -100 -123 34 127 -45 107 -10 -17 19 64 -29 -11 31 69 -5 -73 -32 10 101 -80 42 56 -95 49 -113 -6 -36 -10 47 -2 -101 -127 -39 49 -67 85 -70 -120 -53 -65 28 75 44 -5 -17 -39 -79 90 -29 -94 96 -28 66 117 -11 56 42 2 -47 67 -128 -59 80 -15 127 50 -58 -127 -42 -83 37 37 -78 -68 6 -69 33 50 -27 -30 -41 41 98 -37 79 -27 -20 89 -103 -12 -63 -127 -94 -45 58 -32 1 2 87 77 -127 6 43 48 72 -9 -44 -14 42 -126 42 6 32 62 14 -53 69 -128 55 -58 44 43 66 -38 -128 26 -72 -103 62 1 34 21 -3 -42 -115 63 -105 42 -38 64 77 -28 -71 -108 -125 122 127 -127 -1 40 9 29 -28 -15 -43 24 -115 37 -13 127 115 -51 -47 111 67 7 84 -122 30 -94 114 -49 -32 23 62 43 -92 -6 11 100 77 -22 -41 108 -86 -16 49 126 99 -80 -23 -128 110 127 14 -27 -82 18 60 -19 -36 -122 -19 -83 -25 15 23 98 48 -108 87 -33 -102 64 23 44 -1 102 34 -7 13 -122 106 -44 -127 103 -117 72 115 45 -38 121 0 15 -17 -95 -112 112 60 -20 127 -78 22 7 -127 39 -128 51 -33 -128 99 -125 97 -126 -9 -69 99 -103 95 123 71 -36 5 127 -10 127 -92 -58 101 86 -78 -75 -62 126 -36 -21 6 126 49 98 121 23 12 -26 -15 -128 -5 -104 19 -123 -127 117 126 -124 -42 -73 -35 26 -122 -32 88 109 -71 65 52 -111 -65 -92 -31 -45 -104 -27 58 64 57 37 -53 63 -53 -20 41 60 -45 45 -23 -128 32 -3 -8 40 42 113 -24 -67 27 102 -111 -74 88 63 -18 38 15 17 -46 -37 44 41 -128 -36 -68 50 -128 -34 125 -121 -18 -35 127 88 125 125 51 45 40 32 31 75 41 127 39 8 12 -96 76 82 -17 127 -44 1 49 -5 14 -86 -56 -37 93 -120 -128 -25 -8 127 97 97 83 -39 35 -46 -125 -97 -128 117 72 127 -127 -127 10 115 64 -3 -14 -119 5 -65 124 -114 -81 87 -80 -96 -61 30 -128 -67 31 52 37 -53 -56 55 -8 -89 -117 68 127 -96 126 -126 37 127 -28 -123 122 25 -127 43 125 -34 1 88 40 127 6 -85 29 -59 -116 127 -78 -128 -1 -116 78 -4 -88 64 36 36 56 -33 20 -123 -9 19 -40 12 125 -127 93 -49 -128 122 -30 42 -127 -57 -89 -21 -19 41 -47 -5 63 125 -119 -127 -125 -37 25 -47 -76 -57 127 127 23 -24 -10 77 37 26 116 49 -127 65 119 5 -36 28 124 46 -5 62 48 46 66 19 -48 122 -88 -128 -80 -115 -58 -116 -126 82 107 21 14 -4 25 -85 5 -128 -1 -46 -128 75 -128 -17 -123 -43 44 23 -105 28 111 -81 115 127 127 127 43 -35 -9 117 2 121 -101 -96 27 72 -55 19 -103 -121 -45 -23 125 -30 56 -3 88 109 -18 16 -50 -42 43 82 -104 96 -6 -22 29 103 61 2 -6 -4 -24 114 121 -21 -6 80 -23 -41 -13 -48 79 -79 29 -35 -111 24 7 83 89 104 16 104 -67 12 35 -110 -14 127 -66 78 7 -79 25 -38 -63 52 -127 -121 -3 15 93 104 -52 -125 58 -50 99 -61 -78 -24 -4 97 -22 -48 -22 41 12 81 -58 106 13 -30 1 32 -30 23 -98 -47 -38 -16 57 20 59 -82 -120 54 -39 75 14 1 -81 0 48 35 19 -57 83 4 9 -80 126 -104 -27 -127 74 -98 86 98 -17 25 99 -32 43 42 102 -10 -17 -128 -80 -89 -41 50 90 -114 -17 120 3 125 44 -21 -82 126 112 -113 -27 64 -125 127 15 -60 114 -11 -127 33 82 35 127 -55 79 102 59 -41 65 -25 -107 -110 -46 -123 -56 122 -54 -92 -37 27 61 36 -128 -21 -122 123 124 -109 -9 -19 -92 56 113 -116 107 125 -79 -50 -120 -101 127 32 57 -128 13 34 127 -37 -29 86 -96 -88 127 -90 -62 -63 127 22 69 41 50 126 78 37 -123 51 -127 -99 -85 -127 -86 127 -29 -118 41 -122 62 73 22 -87 -18 -85 -127 -127 -124 -18 119 3 -127 41 -88 -32 -53 -128 88 -121 -2 -65 -125 -52 -66 -121 21 102 -125 121 -47 52 -15 113 127 76 125 -127 127 125 -128 69 -13 87 -127 94 127 -79 92 127 91 48 127 0 -17 -128 92 -67 54 -86 -24 -31 10 6 126 64 -9 127 64 70 -125 23 -10 -56 -82 -36 119 -73 -1 -38 -26 -75 28 -45 -9 -26 2 -68 77 118 -8 -79 107 -22 1 48 -15 3 18 -32 28 -128 60 -59 38 -68 116 -43 -22 48 12 -3 -30 -62 -128 -86 -127 -70 -91 -1 56 -128 -25 -54 27 72 -19 14 5 -8 38 -85 -68 -121 61 -90 34 73 -95 -7 104 -9 -89 87 33 -87 -11 100 -25 -3 87 -68 -45 67 -127 105 29 -15 -71 116 96 56 -128 45 -40 18 -100 -23 121 115 106 108 -75 29 -41 -71 19 21 -127 69 127 122 67 -55 -4 -16 -32 121 -24 -121 -49 127 -92 -50 -128 59 -97 -55 -33 33 127 76 71 -30 -124 44 -34 -96 66 84 -127 5 -61 90 -56 -75 -54 9 -42 -126 -127 -74 -105 71 0 1 -15 -128 122 -33 -128 -125 91 -59 111 -31 -127 -72 33 -97 42 67 -1 -125 56 -60 47 -44 127 76 123 -116 57 107 -125 -89 56 -106 127 35 116 -90 127 -120 0 -98 -128 -38 -21 -78 50 -61 -30 -117 -115 -68 -104 21 -68 125 27 -59 91 -107 -74 8 -63 -5 -6 3 -90 -95 -124 -38 22 -31 -118 -20 -36 24 71 -52 -99 -116 -30 -100 127 -125 -33 14 -23 -111 -108 77 32 2 -119 8 -105 -43 -121 -123 33 -14 -118 -63 11 82 127 113 0 78 127 116 -125 -77 -48 -125 -123 31 95 82 -70 -63 58 -113 -21 -127 -100 121 -56 67 -122 -109 -79 86 21 -51 -79 -128 -4 35 59 -23 86 1 -30 65 97 -126 -2 8 21 2 5 31 61 -7 -51 46 -62 -42 -62 52 31 -7 15 -31 -14 -89 18 -115 -25 116 3 -78 -37 56 3 -18 33 74 -125 -18 -36 -58 -51 -82 96 -126 -26 -35 24 -126 127 115 -63 -27 54 7 27 -63 42 -128 63 42 6 -13 111 -35 2 59 -74 39 -4 14 -33 -109 -45 55 -19 -109 -60 23 56 -8 -30 -33 -50 8 -43 -116 -77 -126 106 -75 -6 -3 -104 -72 65 -117 18 -38 -9 -80 -126 123 72 126 -115 -116 -103 -87 -93 -61 3 11 -39 -96 -25 -20 -128 124 -55 -125 -71 0 127 41 119 -128 60 -6 -59 -44 93 63 -93 -44 -125 -67 33 -72 -8 64 34 -126 -128 -20 48 90 -2 -93 -25 28 126 7 -75 -126 100 -122 119 95 60 107 -98 -111 -47 78 123 -66 -93 -123 -117 110 98 -42 126 112 -128 -94 -121 -22 -50 -128 -17 127 97 -115 54 70 38 -42 -128 127 -128 20 127 103 61 -113 57 49 126 48 -95 122 -122 6 44 -55 116 62 -111 25 -109 15 -128 -102 16 -121 117 -127 -66 -43 -124 -59 -79 20 127 -6 125 7 114 108 -127 81 -79 -33 122 -13 -66 -123 123 2 60 116 -25 -11 -104 22 -59 119 107 28 96 69 63 45 126 6 -60 -81 -28 -63 -28 -119 16 -40 4 -128 127 120 92 -25 -100 124 -75 -81 12 -36 74 102 -25 72 -15 -71 29 9 -30 7 49 -36 -1 48 37 -62 55 37 -32 -127 83 63 2 -86 98 54 2 -39 -102 -128 77 124 80 127 13 -50 -28 3 84 49 -125 -87 -125 59 -67 28 -30 -8 -102 127 126 41 29 49 -38 -34 -10 -119 5 -59 -126 -73 17 126 -63 127 -28 19 -7 -10 -57 -105 80 11 -72 -96 -21 52 7 111 57 -88 1 -111 -15 63 95 -124 -111 98 63 127 -44 125 98 -127 -60 -101 -58 124 -54 -93 122 127 22 47 14 -11 44 127 -61 -33 -57 -67 28 79 -8 -20 -7 8 -3 38 125 -51 127 -125 -88 -17 -109 33 -17 -117 118 23 21 99 127 -46 -48 -4 124 120 -42 -99 -127 127 -6 110 -128 12 6 76 9 -125 -115 -51 127 97 127 37 -66 -67 -19 32 -114 -125 -11 -125 123 60 118 127 -128 -13 127 39 -89 101 21 21 -97 3 -106 74 -125 77 18 124 127 -128 -127 -128 -127 -101 127 35 46 68 38 34 127 -18 -126 -7 46 27 -128 -49 -11 -98 109 -111 -127 108 127 -88 -49 -89 -102 5 26 124 -117 -60 -128 -91 66 75 22 -46 -84 -55 43 -117 -57 -118 13 28 99 -30 -123 26 6 127 29 62 37 37 126 -109 -2 56 48 13 -112 -73 93 127 -43 -83 85 -58 27 -18 127 -80 127 51 -128 7 -86 34 110 81 94 21 -46 -123 -127 6 -33 -3 -18 -118 75 -109 31 124 -127 15 34 -18 0 -29 -10 -124 -31 46 91 -41 -20 -31 68 39 -58 60 16 -75 -12 -55 -45 -60 -58 79 36 18 -27 61 -128 -120 -8 -39 87 -46 -105 125 -9 14 76 126 23 -39 -48 -38 13 122 -69 27 -98 103 113 -49 -12 9 -23 -127 85 -12 -39 39 -17 8 -76 -66 -51 -26 47 -32 13 -95 -12 -33 -128 -116 43 100 81 -124 -104 -117 -59 -83 -107 127 127 53 -113 49 -73 12 -120 66 105 -39 -4 -127 35 -26 -62 -25 -15 75 -113 -114 127 -70 114 40 -128 2 127 12 11 64 126 -107 86 28 80 -62 -57 -100 -120 110 127 -127 -128 54 21 -113 55 30 36 15 61 -84 96 -125 77 -60 -127 -56 25 -44 127 74 42 -74 100 -38 -53 -15 -38 -15 16 91 12 -126 5 106 -102 -122 -15 62 -128 28 38 -30 123 92 -99 127 93 -127 98 15 74 -89 -89 123 121 -83 9 -120 22 61 32 21 -124 33 -89 -32 -128 -1 -127 127 -40 7 84 64 126 93 -8 -128 -127 13 -123 -127 -40 -127 80 -22 127 -125 38 122 124 62 118 -121 54 126 121 86 -92 127 -128 127 -27 95 123 127 18 -59 -65 81 -92 -128 -31 74 -78 29 -49 -5 -122 -119 -76 96 -74 -111 -80 -4 -17 -45 125 -125 -61 -118 123 74 57 -128 22 126 -123 127 -14 -16 -127 -29 -49 -33 78 -39 3 126 127 -124 44 -128 -128 -117 -127 120 22 21 126 3 124 -125 41 -17 -40 44 -53 30 127 -50 33 -4 36 -120 -91 36 -16 99 -6 -23 107 93 -84 -27 -123 44 -42 127 -30 28 127 19 62 103 118 -114 -18 -113 126 20 60 38 -128 -23 -59 10 -63 35 -89 -122 78 -123 -113 -70 -3 38 -95 72 -18 -75 102 1 26 -123 2 -126 109 15 -64 -69 116 -114 124 -85 63 72 127 -14 31 -86 48 51 25 -128 -18 49 124 58 22 101 -37 48 -13 -68 -59 14 40 -5 -32 -27 25 28 21 15 -2 -79 35 30 -34 38 42 -15 71 9 2 -64 1 52 -122 -47 -14 -1 -54 64 -2 -16 1 -54 12 -7 11 -12 -38 81 99 12 12 1 27 -13 -9 11 -33 -58 8 -25 -18 37 -27 -13 -19 15 33 23 31 15 -9 37 -73 21 9 -34 35 -24 -4 26 12 11 -23 3 6 12 2 6 -3 -41 -9 13 -74 1 -30 -2 -8 -14 29 51 -20 11 -36 -72 -28 17 -41 25 19 -42 51 -79 -29 -59 23 27 97 -11 84 -24 61 19 13 -106 -116 -59 -15 47 -76 40 -38 -34 -56 3 79 42 -2 77 22 8 78 -40 4 -54 -21 -77 -24 23 1 -31 10 15 -32 -39 0 8 32 84 -46 -52 21 -7 -46 -1 -43 32 2 43 5 -125 1 -30 -112 79 -47 -42 -20 7 -82 48 5 -78 -65 63 -12 94 122 -70 17 19 -13 -12 -116 -5 -38 50 27 -5 82 -62 7 5 -81 90 23 6 19 55 -16 5 7 -18 -25 -38 32 -73 2 -50 20 66 -10 -30 0 16 -20 29 -16 13 -21 -29 122 28 5 -10 -58 -14 27 29 6 3 -33 -25 -9 -90 39 -81 45 28 -8 53 -78 -7 90 12 30 35 13 127 91 89 56 -43 -3 108 59 -49 17 16 -1 0 -8 -73 -3 0 10 -4 -91 -90 -79 53 -33 109 127 127 -15 -46 -52 -21 -75 124 -102 -39 53 70 52 5 -35 -41 -124 -12 -20 -26 -20 57 59 -107 -56 23 -17 71 -23 -1 -23 38 -54 91 9 -49 20 30 19 -54 -28 -87 8 120 -34 6 88 58 -82 29 125 66 -79 1 7 2 -20 64 -43 19 -115 30 -73 -112 44 -17 42 56 42 4 0 19 -72 -23 50 9 -80 -43 -81 -67 10 60 68 39 47 16 -31 -27 6 -11 25 19 100 111 55 103 -63 -60 -54 -11 26 -15 -19 -67 23 37 -119 -63 -69 8 -2 122 -54 12 28 -116 123 8 -104 -43 13 -120 92 82 110 52 -127 -32 2 32 -94 65 61 51 58 16 -120 -114 85 57 -113 -112 -45 62 76 33 -127 77 -85 30 -61 -101 15 121 103 107 9 -23 125 -82 -50 17 15 57 -13 -72 -78 -23 99 66 -34 -116 -49 3 13 127 32 65 75 50 6 59 37 125 -3 -68 17 -8 -127 -85 -39 14 -87 -69 -112 -51 24 27 65 53 63 -115 76 115 -127 125 -70 46 -53 -32 25 -53 -60 77 -49 43 12 -22 12 60 -9 -19 25 2 -21 44 60 -12 -4 -11 -30 54 37 43 30 -14 -28 -1 -29 -34 109 -19 -50 -31 -106 79 -1 -35 -42 -127 64 -105 28 20 -8 -50 110 -1 -126 -117 -125 26 7 -55 -13 -64 47 17 35 123 100 16 0 -49 17 -47 -107 -6 -51 40 -59 21 75 26 -13 -40 20 8 44 53 -25 -99 -3 -45 2 127 67 -27 -6 3 40 21 84 -5 31 -128 -17 16 18 -7 -33 -60 34 126 -53 38 66 -87 101 44 -21 -58 -82 -50 125 11 59 -21 -51 5 44 -30 33 106 -23 4 -29 -97 -63 -74 -113 -22 -60 -23 -30 57 94 5 59 -44 -50 -11 -65 -1 -17 60 4 43 80 10 81 -128 24 7 127 69 -16 50 75 -80 108 42 45 -109 -13 40 -47 -36 5 -10 35 85 19 43 25 -76 -21 -32 -46 41 -26 -69 -61 -74 -36 -8 7 111 -2 126 -51 68 -68 -33 88 38 -32 -22 39 100 70 -39 32 -107 -81 -12 83 -44 123 -18 38 21 124 32 93 -6 -5 68 -124 125 94 -74 -91 -37 42 127 -120 17 21 119 -9 -14 -53 40 115 34 125 125 18 108 -53 11 53 -51 -127 -57 -103 -31 51 127 -9 17 -104 -127 22 -127 -6 -19 -74 124 91 -2 28 65 89 54 -125 39 -47 -77 -122 127 -10 103 -120 -63 111 89 7 -38 61 -33 -19 -123 -119 52 4 25 -71 -23 37 59 16 66 41 -6 -5 39 18 -5 25 -67 25 -98 2 -50 43 -29 -28 -18 -65 36 49 25 -62 0 -52 -10 26 -18 -15 14 -32 50 18 4 -11 54 -105 5 19 41 43 26 33 -89 96 13 16 14 11 -19 0 -12 -63 -88 52 -122 51 -15 -21 113 -126 -18 9 -68 -42 5 -32 -20 121 -125 -22 -6 24 -50 -82 -121 -66 -5 -84 26 87 92 -26 17 72 15 -21 65 -29 -36 35 -53 -4 49 22 -127 20 -96 30 -5 18 2 -50 123 40 37 19 -27 -75 63 -15 48 9 121 -14 0 13 -70 -104 -119 -26 -17 8 98 -66 20 -120 35 117 43 94 21 19 41 -66 -101 -81 -12 -99 -100 33 105 -115 -17 125 -123 124 -36 48 66 127 -124 77 8 -46 127 53 29 57 13 123 76 -21 -106 -114 67 -37 -53 -15 12 56 64 53 0 97 12 -1 -38 63 -27 121 46 121 28 -64 -126 -65 68 126 15 80 31 123 -128 -37 37 -81 -41 117 42 126 -25 -114 -10 -47 64 -10 2 53 -76 -57 126 40 -94 54 -123 -82 -14 -45 45 -17 88 -14 -61 102 123 -99 86 74 -43 -128 127 -70 -34 127 -3 127 -44 -59 -125 -108 22 -126 91 -118 -126 18 78 -77 -46 39 121 46 -40 28 -127 -116 63 -83 78 5 -60 7 -3 2 110 -19 38 -92 -54 34 113 -12 120 -50 82 127 -59 127 17 -90 31 -50 115 -53 -52 58 -62 30 32 18 8 33 -127 8 -24 -24 -15 13 27 -44 -2 -52 38 40 -51 -102 -65 -117 -61 13 -32 -23 -34 -8 65 60 -67 -39 -93 28 23 103 85 120 9 126 37 -10 97 -98 17 -93 17 106 22 78 80 -9 -60 -41 27 74 -25 56 40 -11 -63 -101 -83 -3 -46 82 -23 92 -7 -111 106 -13 16 -33 32 -82 127 -7 -17 77 -76 -10 28 -37 -58 110 -6 8 89 46 75 53 -93 49 -47 -48 -38 13 -61 127 -106 30 -77 -19 -7 -84 -117 -72 24 -6 47 -52 110 -8 38 -123 29 99 46 -123 -8 -110 -94 -5 -114 23 126 -127 122 -27 89 60 71 62 -4 14 5 36 -25 -42 -89 -126 102 -37 46 -115 -19 -128 -49 73 27 -77 -126 57 -54 -16 106 -121 53 55 -123 -22 14 -9 28 113 29 -120 5 127 -103 20 -6 -54 49 -75 24 -2 9 -101 -24 -127 -18 -71 -127 93 113 1 23 -52 -47 116 28 -61 113 101 -53 70 12 -126 -125 124 -42 -61 -4 99 17 -109 -3 -123 70 122 83 -5 -26 127 15 26 68 -61 14 -127 -10 26 117 -80 121 -123 -65 -47 65 127 -15 71 3 -59 -36 -126 59 0 -82 126 24 127 120 11 65 25 126 -70 -59 126 -3 -114 -63 -124 125 -12 126 -124 127 34 -6 -42 4 11 -48 74 19 14 -120 48 9 17 2 41 71 15 -78 41 57 50 120 -93 84 81 47 -21 -88 -12 78 -37 17 51 -18 -53 123 14 -82 5 52 -10 33 -13 32 13 18 111 -43 31 -103 -125 -2 29 -29 12 -42 -24 -47 -10 102 -21 -26 16 7 -11 86 -29 12 -26 123 21 71 44 19 -116 29 -51 37 -68 57 -43 -91 -50 16 -29 12 4 -27 38 -6 18 -20 -19 -13 3 16 72 -67 -34 -116 -30 75 -31 36 -57 -28 40 40 -73 25 5 -4 -60 -39 35 -51 55 74 -78 94 63 -61 79 -102 15 -53 109 106 8 125 44 5 68 21 127 -98 -100 30 15 88 -65 -35 1 -49 47 2 87 -39 -121 -74 29 28 -116 127 -10 127 -60 -10 97 19 127 -54 27 95 -103 -25 -4 24 15 74 -44 56 -25 127 -64 -53 50 -3 -99 122 19 29 -41 2 21 27 -99 127 55 88 66 -25 26 81 -71 34 -26 -58 -65 -112 -72 52 37 71 66 -25 -34 -45 70 107 64 -126 -15 -50 92 124 -20 -32 36 70 80 42 108 124 36 -34 -27 -76 8 -34 -123 3 -115 -6 117 -11 -8 45 103 -119 38 -89 -8 -30 39 48 -48 -70 71 7 -52 101 71 74 -30 7 -66 -61 -69 -22 -45 59 61 41 127 3 78 -100 123 -61 75 25 -72 39 -87 111 -72 -23 23 -123 -18 -46 -1 15 82 -42 -118 127 -14 -43 11 -89 51 -85 -53 -16 -71 122 7 80 79 16 -43 -68 127 -28 -39 -98 -35 125 -115 -5 74 -63 -27 -57 56 -34 -52 10 32 -77 -46 -28 -23 4 65 -128 42 3 -32 123 1 31 -89 -19 81 52 98 0 -40 76 -37 -32 47 -73 22 64 -76 23 38 109 36 10 58 9 -1 69 52 46 108 93 97 66 -34 15 48 80 -97 -60 -49 -126 -29 -68 15 0 3 0 -62 85 -53 -60 26 74 -127 126 -54 -17 127 24 3 -33 1 12 61 -29 -102 -18 -26 124 76 12 59 -101 -6 -29 -73 19 -31 -7 34 10 -3 25 27 -128 -28 -46 -79 -11 24 -19 -89 9 102 -18 -28 -30 -30 -81 -54 4 62 100 19 31 23 -7 5 41 -125 -33 8 -94 -37 15 -32 3 7 54 8 -111 -45 -22 -19 28 31 -22 1 -38 -36 50 54 -34 34 -89 11 22 -51 -40 -32 -49 -88 -67 33 111 47 -23 4 -37 -11 -13 48 -4 7 -46 0 -44 -117 49 26 44 -40 -104 -25 15 -7 -5 -25 3 27 16 -1 -50 10 -107 38 -35 18 -9 28 -22 -23 -62 57 -13 51 25 14 -38 46 -27 -45 56 11 -114 -58 44 3 63 45 27 26 27 -51 26 18 -81 45 -17 48 -125 -27 -48 -19 8 72 -55 9 24 -40 3 -1 115 33 20 35 43 32 84 -36 31 41 32 -57 -62 0 -21 -104 2 -13 29 11 29 -25 40 -53 -23 55 45 -80 9 127 -67 -7 -7 13 22 -128 2 -17 -33 1 -40 22 -24 -22 36 -21 89 28 23 2 14 -18 -42 -29 -14 7 -8 3 -70 -26 -51 21 19 68 -2 6 0 16 -20 19 -28 63 -34 39 -123 12 -67 -40 -65 25 2 -61 -7 -7 3 15 10 42 9 -6 74 -10 7 -59 17 53 -36 76 10 27 49 15 26 42 44 17 91 80 31 9 43 56 -19 31 -60 -80 -35 -30 -51 67 9 -10 101 -32 90 47 42 -8 -89 -1 0 -37 94 45 -83 69 -38 -48 -80 -86 -3 15 18 22 -50 9 -46 -14 -11 -12 -74 -17 69 1 102 -82 33 -125 -42 122 -45 59 -19 -18 -3 92 86 -80 -6 -62 -4 16 3 5 64 127 46 -39 -15 -8 31 -84 103 -2 0 -51 -70 -92 2 39 98 14 42 -25 55 67 1 -31 -64 121 92 41 76 -58 93 11 107 74 3 -57 108 24 -50 -32 92 68 -2 -75 82 118 109 -27 -32 -81 -17 50 -13 -30 -128 24 -21 -85 4 15 45 -46 120 -36 12 46 60 31 -47 -89 25 -43 7 -31 -65 35 24 -126 -71 -4 -13 -90 46 74 -15 65 -28 -62 -77 -51 50 -42 -47 7 52 44 1 -8 24 -74 77 30 -107 -97 23 40 34 -1 -60 -8 -45 127 -16 -11 31 -91 -58 -26 69 5 92 -15 -43 -10 -70 -1 67 110 59 122 3 -35 76 11 71 14 -21 101 40 -26 -17 -86 47 -52 -3 62 -77 14 29 -9 30 63 0 -36 -28 -56 116 16 27 -3 14 8 15 106 11 -4 -35 6 -4 4 -27 2 -1 51 67 -1 -81 38 0 -33 -11 31 10 17 24 -16 -33 -29 -12 40 30 56 24 -73 57 -128 50 -66 -22 -33 -71 91 11 -17 72 -13 -59 68 -84 -12 -106 -96 11 -55 4 -55 -30 104 46 29 17 116 -127 4 -71 -24 -68 -87 -4 35 52 -89 67 -58 46 6 5 66 1 30 -18 -23 -128 65 110 -70 92 -55 -45 28 -22 119 -71 57 -98 44 29 43 80 68 40 82 -37 -47 127 -86 12 122 -40 38 -44 -18 -127 -38 -20 120 38 0 -8 61 4 74 -99 46 44 12 24 -81 -43 -3 19 10 22 88 -59 -77 -99 66 -121 120 -91 -13 -88 -1 -25 -100 -60 -28 37 102 -76 -73 -73 -27 -63 50 -2 0 51 -10 42 -23 46 -33 -1 99 75 -127 1 -49 23 36 27 70 34 54 -124 -30 -47 37 96 -46 -44 74 -62 -84 -40 -32 11 39 0 13 107 -29 127 82 -97 39 -12 -44 -15 125 26 38 -38 -49 -9 87 10 -7 -61 4 -51 14 40 97 35 -25 -4 -17 64 -55 41 72 62 20 80 -104 63 49 17 -3 -117 8 -13 66 36 27 22 -13 18 -17 -55 57 1 -5 -79 -59 -26 -39 92 -90 56 32 -33 -101 -2 -57 43 -13 14 -11 -4 26 45 -12 53 -13 -3 42 46 -113 30 -56 -3 -9 37 124 -124 -26 69 31 -5 5 -50 127 64 -44 7 -73 -25 -31 -58 20 68 6 5 -28 114 75 73 26 -53 8 -128 -123 -59 7 13 3 -35 48 -10 55 27 -39 72 30 -25 43 -8 -28 37 -66 -30 54 -65 -10 56 -85 -128 -29 87 37 -24 -37 -38 -35 58 66 19 -17 12 -12 -17 -81 -23 -3 -31 -22 -60 6 48 -127 -75 -47 19 -9 97 -30 48 76 55 64 -8 -19 -82 -46 -75 -17 -1 5 -22 96 38 -71 84 26 -11 32 35 55 -61 -11 125 -66 29 45 127 -38 -19 -20 -42 -22 -14 -26 44 71 11 -100 123 -22 -40 1 -8 -114 1 125 6 16 -38 -89 -51 0 32 2 29 -127 -2 -8 -87 52 34 46 -37 -23 -126 -84 -82 -117 93 -56 -12 -23 33 -5 33 -94 -98 -48 52 90 70 106 -15 52 -117 -37 -67 -65 -88 10 -42 -42 -128 -25 -36 16 19 28 -18 -75 16 20 87 56 -28 14 -34 15 -12 -128 -38 114 -57 -20 -32 -38 -15 11 48 40 -6 -47 88 127 -79 10 -55 -92 10 83 -12 127 -11 26 -2 28 35 -13 -62 -51 47 1 -52 44 113 -34 -99 -20 14 49 -11 -67 39 -128 -55 -121 24 -86 42 13 -22 -73 -45 9 -121 -118 81 90 36 23 -125 -57 83 -19 53 -18 -92 -85 -36 -13 20 34 37 -47 -32 26 -61 -59 -4 5 65 -46 -14 53 -54 -42 -4 0 24 2 96 -9 39 5 -13 -100 53 -17 80 32 -64 -109 -10 -27 15 -19 25 5 -127 9 50 31 2 -40 15 22 -32 -45 12 2 104 -33 -23 -7 62 14 2 -31 -21 -74 -5 6 78 104 34 -93 34 33 7 -33 -67 -31 14 22 85 -6 -72 -10 109 -48 73 -60 -5 -10 8 127 7 49 12 66 62 0 87 13 35 25 73 5 -69 11 -20 -33 -71 52 65 -76 48 33 127 -5 -25 -51 44 -32 104 14 22 17 -49 56 -9 45 -20 66 -14 -91 106 9 -83 12 55 8 56 30 2 -67 -101 2 -88 74 -81 -39 -14 24 16 35 -10 113 -19 -25 -48 111 -11 -17 -122 -32 70 4 -24 -26 70 -45 50 -18 3 -60 102 127 -42 -38 124 90 126 64 -99 -120 68 39 106 29 61 118 -56 75 -76 58 29 22 127 -24 -109 70 95 -68 8 27 -34 -23 24 6 -128 -48 -97 -62 -48 -14 18 126 -84 32 42 2 -70 83 29 -125 26 5 94 -100 76 -20 36 -7 33 68 29 -11 -77 93 6 -74 -50 -16 95 22 48 0 15 118 16 -33 -36 -43 -77 -50 52 -9 -19 95 -61 -24 83 67 13 -40 70 116 101 -95 1 26 95 -21 72 -7 -28 -80 59 123 -97 44 -15 118 -57 -81 -18 -124 73 89 123 -16 31 49 1 -86 64 34 -56 -43 -25 52 -92 -67 127 55 80 -33 28 62 -3 -125 -6 53 -7 32 27 -93 38 2 -37 -40 -59 -36 5 -44 3 28 44 -50 44 -29 14 8 21 -20 111 15 -4 -28 -3 127 3 -1 -35 -9 124 -8 -5 97 -13 -2 36 45 -5 32 -43 27 -63 42 20 126 -27 78 -33 -66 -45 -11 16 10 29 55 -122 71 39 -1 85 -37 97 36 27 -88 91 -68 25 -29 -47 -30 21 7 14 13 -85 -75 -127 -5 -42 39 -29 -124 12 32 30 40 126 -46 -107 6 50 80 -1 40 20 -18 17 -19 -1 -30 13 -118 -65 6 -25 -113 23 3 -83 58 103 -12 -88 -50 26 36 29 104 79 68 -89 -62 -17 -10 -17 125 -41 -71 19 54 39 111 65 -23 48 -33 -56 -38 23 -125 -50 32 122 -60 7 86 120 13 16 4 60 27 59 50 -68 -70 -14 20 -117 -122 48 -65 78 0 -50 73 14 34 -46 -118 -64 -29 -77 10 16 73 -124 -60 4 -57 35 6 33 73 -74 -113 -35 69 79 -34 -106 98 -39 10 75 -32 110 -107 -92 125 -121 -21 -42 7 -74 1 126 -25 6 68 71 15 -39 30 66 67 -101 -47 -16 66 -41 -79 18 14 -32 22 -74 -41 -59 27 10 59 -30 54 15 -55 109 52 -91 52 13 -39 -82 -66 -27 27 1 17 -10 27 -6 -28 53 -75 94 68 3 26 -18 45 38 127 40 -13 30 -60 65 51 -48 112 -3 99 10 -16 15 19 9 -13 42 -66 28 16 -36 -14 -59 -24 -26 31 -40 36 -43 55 4 9 58 34 -9 -12 -51 44 74 -67 13 -22 40 12 98 24 9 -41 -13 -22 58 6 -10 18 -30 28 -8 -113 17 -13 6 -20 43 21 8 -4 53 122 -3 0 48 -81 6 8 -57 5 0 -7 53 30 127 4 3 -27 96 7 64 -31 85 -37 63 21 21 -13 -7 57 -87 0 103 -79 -35 15 97 -5 -62 18 -34 10 1 -42 53 -2 55 -15 -125 -56 32 -11 -9 18 1 -15 23 78 34 90 6 35 73 104 -24 27 -31 27 23 -124 -1 -69 -23 1 -44 -127 39 -124 124 -30 -58 127 -31 -126 -121 121 -128 -95 -128 37 122 49 26 -125 46 -128 -127 -26 -128 22 54 43 -33 126 -81 -126 14 -36 40 -127 -22 -66 -6 36 -122 -6 -22 -112 -40 51 34 -126 27 -8 -32 -121 -55 -26 -63 -127 -17 7 -127 90 -83 -11 62 -128 9 -95 -110 24 63 112 27 -106 -64 -18 -62 3 -119 -128 -83 -46 -121 -25 127 -24 3 -40 118 65 123 2 4 86 -51 12 -77 52 21 43 75 -77 -121 -115 50 25 -11 85 37 71 91 80 -35 -52 48 -45 -56 41 29 73 71 45 34 -91 -33 53 -61 -125 127 2 -78 -127 95 51 -45 123 78 -49 110 55 49 121 -2 -50 -32 127 -26 -112 -38 36 -27 6 -5 104 111 -12 -11 -20 -48 84 -92 -10 -31 74 -25 -74 4 -49 24 -63 -46 -14 -1 50 78 45 39 -17 40 -38 34 53 -113 -47 -10 32 -59 -23 3 -89 -14 44 -5 -3 -6 -14 91 -93 -75 39 -24 95 -21 -128 112 -65 -88 -49 127 13 -113 110 5 127 39 98 -12 42 47 26 127 28 36 21 -127 4 127 31 -43 48 16 -58 8 28 -107 10 22 -27 40 -13 51 98 12 -19 29 -1 -20 -29 61 78 3 -57 45 27 -34 -26 -54 83 31 -51 -52 32 75 -18 -70 67 -41 -16 64 -43 -48 -39 4 116 -38 -14 -69 51 14 21 -34 -1 -86 105 101 -29 60 -55 -72 55 87 124 122 -6 63 -2 13 -72 16 -84 -47 103 -34 -67 -128 40 126 -42 78 -15 -15 124 -127 3 6 -33 34 80 48 61 -126 -92 57 16 41 -106 -55 127 57 1 -113 43 -19 -84 31 52 25 113 69 11 -42 -69 89 12 39 -17 19 32 80 46 117 -7 -15 -125 39 -66 -104 56 25 45 70 -62 -128 9 -77 11 27 -56 2 -9 -74 95 112 -8 52 43 11 46 101 27 79 -69 -34 14 -32 -128 49 82 -69 -36 36 -36 16 -128 5 -22 -22 22 3 32 -1 25 43 -50 36 52 50 -45 -19 -128 -25 114 -55 75 75 -113 112 -58 -111 -25 96 16 53 -42 21 -40 114 93 -19 99 5 -70 30 16 127 -54 -69 -73 -34 -15 -65 41 7 -5 -13 -18 13 117 -4 63 75 126 74 -6 -1 21 1 -3 26 29 44 -20 -45 34 51 -23 49 48 127 37 -12 -76 -44 26 5 -7 -14 -17 24 -12 -126 -16 -38 -40 78 51 26 85 -57 8 -27 -97 34 -29 124 25 127 2 32 -34 -12 93 -18 -25 -57 -30 91 88 21 -57 -25 14 -123 17 -29 54 20 126 -2 80 34 -96 -127 64 -31 -96 16 20 39 -2 4 -8 -4 91 0 -26 -11 41 -32 -96 -105 -19 16 -19 26 83 40 -30 -90 39 -48 47 -41 109 -45 27 -126 -34 1 92 -14 -14 -31 45 -85 -26 29 12 3 -27 -69 18 92 127 22 -46 72 -11 68 117 88 33 -128 11 124 -127 8 127 110 -57 -9 -27 124 -90 27 -51 -16 124 -127 126 -35 -35 119 -29 11 -23 122 -60 -93 -69 69 89 6 127 -45 -51 46 85 -113 -123 -22 -12 89 35 58 40 -3 83 69 125 60 -36 96 127 -39 69 120 -90 26 -28 -54 75 15 54 7 3 -92 -120 32 -27 -38 37 -64 38 112 123 51 -2 112 126 60 41 -119 -14 -116 23 52 50 83 -127 -2 -113 29 -10 -55 64 -77 50 84 51 -14 -106 73 101 -1 -35 24 20 19 -58 10 13 -33 -71 19 -43 -17 -79 -93 47 -16 -4 2 96 -60 2 -115 30 -65 -28 108 -102 -111 -53 126 -4 -93 67 -22 67 -40 -72 124 -67 -87 -28 -27 -49 9 -25 62 -127 -94 121 71 -65 -57 7 37 31 -4 21 46 -122 -10 80 -26 48 41 -113 -127 -3 79 15 47 20 127 73 20 62 11 -54 -45 -30 69 38 -31 -27 -128 86 51 0 58 -15 7 -16 55 -8 2 127 -50 10 127 -35 114 24 87 -122 -64 -74 -33 -79 -11 46 -117 64 -127 119 -68 -81 -101 -42 19 -44 111 2 43 -127 -11 114 -127 -9 9 -100 -32 -21 126 -60 17 127 -96 -69 -121 -126 55 -119 7 -20 54 -47 -126 40 60 -15 -22 11 -95 -27 46 -128 33 -3 4 -83 -104 49 -53 127 30 123 34 -33 -27 -69 -10 -69 69 -91 87 -113 20 -83 -48 17 81 120 -58 -124 -51 -40 70 67 -49 29 -9 95 25 -126 -83 61 127 -51 -126 127 29 44 49 -128 -10 -32 37 112 127 62 18 74 127 -78 -116 40 10 68 50 65 0 88 -97 73 -14 -53 -82 -72 46 -128 -62 127 66 125 127 97 26 127 74 -28 -70 20 -26 -13 110 45 93 50 34 96 -23 -23 -111 -90 -3 111 124 -45 -27 18 -38 106 13 127 94 127 -67 101 126 119 46 -12 -43 55 -7 66 -127 127 -27 -15 -33 -37 -92 -85 13 8 -11 0 64 52 -28 127 -123 -124 39 -53 -71 -31 -48 -112 20 23 79 4 81 74 -16 64 3 127 119 2 5 59 -31 2 68 -65 127 -35 98 100 -124 -8 -127 127 -10 -111 16 9 80 7 23 83 61 -127 17 107 -24 60 -50 -77 -127 -44 0 -29 56 19 56 -42 -53 -17 2 -96 34 27 92 -60 -37 85 77 -53 76 9 -3 -23 -63 -34 47 -39 -14 6 -22 20 -6 3 -4 -35 19 41 119 84 115 -11 16 16 -60 -11 -114 1 -42 33 -82 42 19 32 -19 14 -63 -62 94 65 -40 3 -109 -42 55 -105 -97 -118 -11 55 10 67 -127 52 43 48 -55 -37 44 31 29 -27 28 -128 -64 -127 -35 3 69 -11 74 -6 -79 33 -29 31 -22 -55 -60 35 68 -16 -11 20 -94 -27 61 65 14 49 -2 57 -72 -61 47 -17 0 -31 8 7 29 14 26 78 31 2 -3 127 -51 127 -75 -69 82 17 64 -54 -128 3 12 -100 19 -36 84 16 -47 127 112 -2 88 -106 127 -53 -23 -17 83 32 95 -55 126 -57 -25 -24 59 10 24 112 98 42 -101 -4 -53 82 -59 51 44 37 -57 -115 -42 -122 -46 127 -122 -101 10 31 -16 -13 119 -84 -29 24 1 25 101 117 8 36 114 -6 33 127 1 56 -69 31 31 -53 -9 123 46 -31 -25 -3 32 -33 -60 -20 30 -72 -64 52 21 117 81 -27 28 0 8 9 8 -52 -39 17 102 67 53 44 -28 126 -16 -10 30 9 -37 -124 -23 69 -43 14 -40 50 -8 16 -15 127 90 30 6 -4 -48 -113 2 -33 127 40 77 34 -115 50 -87 -20 41 27 105 14 91 -24 -33 3 0 22 -65 73 -37 100 13 -64 -63 23 39 -46 30 17 36 112 -10 -80 24 3 21 22 15 64 65 125 95 82 78 -68 -36 11 127 61 101 -21 4 123 -21 -64 21 10 -25 -5 -15 -73 32 29 42 37 9 -29 -72 -62 -126 -7 -73 -37 16 35 11 122 45 -52 -29 65 -51 82 86 2 -10 0 27 38 -39 -119 6 -40 -6 68 -127 9 30 -21 -95 42 54 92 5 -68 -4 67 54 -25 -35 126 -72 -37 68 -11 127 11 31 -84 -47 -40 -120 70 8 -35 127 -59 -40 55 -59 47 -19 10 3 52 40 -67 17 52 70 -3 2 29 -13 -49 28 71 -67 -91 75 1 -22 -88 1 31 -33 -48 59 -36 48 78 -45 -118 -50 69 25 58 -3 -109 7 115 -63 84 -13 -43 100 37 87 -65 113 -46 127 5 -16 -93 -117 14 15 8 45 59 -2 -100 -83 17 28 -15 11 -49 -12 -58 7 15 -116 86 50 -50 -73 -95 -106 20 -76 1 11 52 113 33 2 -45 -6 -62 69 10 118 -12 127 23 100 -10 28 -2 46 18 -73 68 61 -60 -52 38 -76 70 -69 -73 21 -35 -9 57 41 127 -119 11 -36 -10 16 -51 -121 -13 76 -126 -14 20 1 -34 -44 42 14 -110 -33 -123 -3 -77 -19 64 -21 53 -12 19 -53 127 -14 86 -24 121 63 34 -19 56 120 49 6 126 -106 6 96 -25 -120 34 38 -45 25 -16 45 -74 70 -59 -54 -44 -3 -10 -50 -22 -62 61 -39 -125 79 -120 -30 37 -1 52 33 -113 20 -13 127 -30 -13 14 125 59 -124 -27 -3 -56 -25 -78 126 84 -86 77 -41 -17 -22 37 -5 46 37 -128 54 -49 -35 -54 -43 24 40 10 -77 9 12 -5 -6 -79 1 -31 -33 -85 -32 54 -53 -5 43 69 74 -34 -109 3 -10 -96 -80 -100 39 45 -64 41 -11 13 -33 -47 47 -56 1 14 -1 -9 123 5 14 81 42 -49 -20 5 -51 18 -16 -35 -23 59 -127 -29 -127 -11 125 63 -18 18 13 48 12 85 -27 28 -99 28 8 -69 -29 -7 8 101 -60 -62 109 64 33 33 25 -7 -18 24 15 27 14 -11 93 -14 -24 10 7 -53 -23 -31 -1 -14 -11 -14 6 7 1 37 18 -1 -29 22 -30 -8 14 19 -64 6 78 -24 8 -26 15 74 -12 -7 23 -36 127 -34 -12 -19 53 7 -73 38 -15 50 40 32 28 1 16 -9 28 1 27 2 -33 63 83 -82 -19 -42 32 -22 35 -17 -10 10 76 2 23 18 28 -15 9 -18 -42 -6 38 24 30 7 11 84 -75 -41 26 9 12 15 2 -14 -2 12 -11 9 -46 -24 -9 32 21 -64 9 -35 13 -12 29 5 25 -52 -49 -2 25 2 9 34 -62 -5 -26 -11 -6 -72 13 61 18 13 -17 -9 14 -17 -50 -36 38 123 -4 12 -7 -18 -78 34 -41 -16 11 9 -14 2 14 19 27 31 13 0 40 -32 -13 51 19 -12 32 53 -8 16 32 5 1 -2 2 19 77 -15 -1 27 48 -20 47 -22 78 17 -9 -59 12 -18 -4 -101 -28 10 1 4 12 12 -3 -9 38 1 18 10 -14 5 -13 28 -19 -9 -23 5 -6 18 12 -6 12 9 43 -68 -9 7 -32 -1 5 -10 -22 -11 -26 -8 -30 4 -36 -27 8 0 -24 -8 17 16 -42 16 -4 18 -30 13 1 62 8 22 50 26 -36 4 -32 -17 5 -64 -10 -34 -21 10 -94 -15 8 11 -39 5 29 0 1 40 -2 11 -14 -36 -23 -23 -28 -44 -3 -13 73 11 -9 28 50 -9 0 -45 15 -17 -48 -10 13 -74 11 -11 37 -8 5 -28 -7 -58 25 -33 49 -7 -53 -9 -4 -8 0 49 -19 106 -11 -16 25 -26 -3 49 0 -66 -26 -24 27 -3 -23 12 6 2 13 27 -40 32 -10 26 27 27 66 6 -22 7 0 -44 -1 -22 2 -1 -15 -33 -8 -4 -8 -2 -33 -89 21 4 14 -40 1 30 -25 -16 10 -8 10 14 8 -16 -39 -31 -61 -9 -36 22 -15 16 -16 -69 -32 -15 -24 -13 -16 29 4 4 -26 -51 -16 0 -14 1 3 4 12 -33 -11 -13 5 29 17 -16 3 88 34 -42 -18 -21 50 36 16 43 -51 -40 64 19 -35 44 -123 -14 -59 -46 30 50 21 -64 -47 -88 126 15 -33 -8 -5 50 4 -68 14 -29 -36 -46 6 -36 16 3 -16 -11 25 -6 -8 -14 -2 -7 -12 -84 -50 -14 35 22 -9 16 25 -1 -1 -9 -15 -59 10 13 -20 -38 39 13 26 20 -6 71 0 -1 12 0 -60 -2 5 -26 28 -16 17 -6 -16 28 -5 -21 15 19 54 25 11 21 4 -5 18 -35 -16 68 -10 14 41 -7 23 -3 -33 1 -14 -1 36 -1 -7 38 15 15 -27 -70 -23 34 13 1 -12 26 35 -31 -13 -26 33 -26 5 8 55 -14 0 -25 14 0 -12 10 -4 -7 45 -3 -28 32 1 -14 -96 8 8 -9 12 8 -23 1 10 66 -13 9 -12 20 11 22 --62 32 -27 24 -55 82 -19 59 127 -36 -23 23 35 12 -11 15 -21 15 -65 -39 -23 -9 48 28 33 -120 -7 5 41 -126 99 37 -120 -33 -34 -31 27 -66 -124 -20 -78 -68 -36 9 50 41 -48 33 -53 48 31 -21 -24 -34 -115 23 26 -13 -125 39 66 -43 82 -48 12 -81 -28 -117 68 -42 46 -23 10 -13 -32 -49 126 -12 -25 -14 6 -19 56 0 101 35 -11 26 37 -77 -6 90 12 -3 4 49 88 -27 -46 102 -99 37 29 -37 -8 24 24 24 -11 -28 -20 69 -36 56 0 -8 14 -51 109 101 5 53 -11 -43 -14 -59 60 71 -4 -40 -5 59 21 85 119 -5 -71 33 -29 18 -22 37 3 21 74 113 95 56 -81 6 33 -82 -2 35 -3 121 12 -32 -74 -12 -110 -35 19 28 63 -13 24 -11 -18 -52 35 -9 -11 60 20 -8 48 -120 -67 64 68 28 108 98 6 42 13 -43 -7 -57 -128 -60 80 27 -32 28 -18 90 44 -55 -76 -124 -8 -13 4 -83 -40 -42 68 58 38 -58 107 57 65 -51 -115 1 -62 54 -5 -14 78 32 -93 7 -23 -8 -54 40 -79 51 73 99 22 -119 -10 90 -54 -70 49 38 -96 -24 13 -91 -90 35 -35 -62 41 -40 71 60 -17 84 6 -126 42 32 47 65 46 42 -50 -26 82 -21 81 67 13 -47 4 35 11 -125 -73 -41 57 -69 65 11 60 40 7 15 56 18 -35 127 -81 -41 64 -30 -18 -84 -20 -5 101 84 -69 3 -69 -26 15 -47 -11 44 61 -11 -32 -49 -25 -111 -46 0 -9 11 -14 21 -21 -40 -94 34 116 31 19 26 87 41 -74 -50 119 8 -30 47 90 34 -5 -23 -4 -64 46 -62 -109 -39 27 -59 13 -10 -63 17 27 40 -4 83 -54 34 32 -61 -25 113 4 -114 -13 -41 -79 -20 45 100 -122 -38 -112 2 -127 63 -111 -17 -13 78 -6 28 93 65 43 25 -100 19 26 107 -25 85 -22 -57 -8 74 -66 33 1 -2 51 95 -7 8 8 9 -65 -63 84 -77 -18 -65 68 45 -15 -21 -15 12 -18 -47 50 47 5 56 -80 17 -5 -119 58 16 -1 10 -102 24 -111 47 -20 -96 -36 -58 55 -20 59 -96 34 -79 -22 122 -7 1 -13 5 10 -40 17 27 39 46 -57 38 -9 -31 -27 46 -34 -58 -38 7 -1 -58 -45 34 59 -17 -13 -4 -71 -14 20 30 42 29 0 -6 -11 -37 -20 67 -37 105 -49 20 92 -27 -42 82 1 25 51 32 -78 19 -5 57 34 -103 109 -72 -77 -48 12 -119 23 4 -51 78 64 -4 -12 124 -43 2 -82 10 -47 40 0 -49 -53 33 47 -38 -54 6 2 10 -46 -5 64 22 11 -79 -7 -61 -28 95 20 113 -10 11 -60 55 -121 121 39 22 -22 49 27 -68 57 6 -15 24 6 -44 4 3 -72 -47 63 -49 61 52 12 -7 -17 -68 -77 -28 110 4 23 127 -33 54 23 10 23 31 77 -18 -30 -60 -34 -8 -27 43 -32 -14 -116 74 53 125 -10 -81 38 -11 -42 -73 -37 123 -50 -21 65 -65 -103 49 -55 70 54 7 -37 111 -78 43 59 -52 31 10 48 1 -87 -3 8 -51 53 7 62 -7 -103 -3 70 95 3 46 65 2 -33 -39 31 104 37 -17 37 106 -31 5 20 -100 66 -45 -32 7 55 -82 37 -53 45 30 34 -8 69 -118 41 44 51 31 -68 56 -122 33 -36 71 -123 52 76 47 46 76 58 78 -12 -28 -56 6 123 -39 -52 -33 67 -36 -33 25 5 14 21 46 -19 56 37 0 26 -26 -17 -109 15 -47 38 -74 -83 1 -53 39 40 50 64 25 -49 86 -40 -30 122 -127 71 -61 7 -80 -88 -71 -85 -4 -65 -27 125 -124 26 66 -127 -63 -35 -72 35 42 19 84 41 -73 56 48 -71 -32 -66 21 -72 -4 -52 -1 -29 -13 105 -18 -13 -90 -51 40 17 68 74 57 114 -6 -16 55 -45 -13 42 28 9 -30 -50 34 34 -84 80 -82 109 -1 10 -13 40 -117 32 -39 -12 -26 44 -14 -116 -13 -50 64 73 -1 -24 87 1 74 36 -77 12 -26 64 13 103 65 40 -55 -127 -33 -12 5 -104 62 17 -46 6 34 -87 55 30 94 -53 46 -30 -2 -5 72 -29 20 69 -3 2 -43 -30 66 -46 -82 55 61 -11 -59 -38 38 1 14 12 58 66 -126 -91 63 10 10 -40 80 -31 -24 53 -17 -10 46 30 118 -79 -50 13 34 -111 46 -29 41 -1 -63 -65 126 108 -116 -14 -22 20 4 -46 -29 1 51 3 10 -53 -53 -27 -38 -41 5 -32 -65 -21 49 47 -56 -38 -3 26 43 -102 -16 44 13 -31 46 -29 -104 -26 25 -15 47 -54 -13 -30 -55 -74 -53 96 11 -53 15 -61 12 -67 -107 15 64 -36 -14 -68 66 31 20 -11 -21 28 24 28 -18 32 -80 49 62 -12 -59 -88 -96 79 0 90 -25 -64 -17 -27 15 1 -22 55 65 1 87 -9 -13 101 81 6 -71 33 -11 18 81 3 107 1 112 33 5 -112 9 -23 -55 3 -9 24 41 33 -26 -31 4 24 15 -47 65 50 56 -13 42 -5 24 11 71 11 45 26 13 -51 50 20 3 -73 33 127 127 43 55 -4 -55 -6 109 53 -6 -24 54 14 -92 -35 47 -88 -37 80 -46 6 -7 13 68 16 -6 -20 18 -53 -118 7 -66 -33 -22 44 -82 31 43 -59 -6 30 -75 4 -18 -70 42 -19 52 5 61 -15 -23 -91 17 23 -5 56 105 -54 3 31 17 41 -19 21 47 -23 -80 77 66 -59 10 11 80 -70 46 -48 -36 -97 -107 -108 -33 -87 28 9 -55 -38 10 -27 -46 -17 36 -3 -26 -16 -13 45 63 14 18 -18 -41 -58 -39 1 -43 -8 -47 5 38 57 -37 28 21 30 -68 -87 44 23 73 67 15 -35 -14 -90 -36 -44 55 -62 -58 114 87 37 -31 4 32 44 -28 23 73 -9 112 -24 56 106 -36 127 88 14 20 -66 -19 13 69 24 96 125 86 -42 -4 12 -18 53 -11 -18 117 -18 -37 87 81 25 79 1 49 -6 3 -7 14 -10 55 42 27 7 101 9 24 -19 53 82 -81 -121 -125 -112 -47 41 7 6 -15 38 73 33 1 -17 64 -72 -34 127 69 20 12 22 58 5 -122 21 7 35 23 -8 -12 21 28 -42 14 -13 -30 13 24 12 57 -13 8 70 73 0 50 64 115 -24 93 -43 13 17 -10 1 -14 23 4 65 55 -33 -30 -3 -20 -19 -26 45 32 -46 -39 -69 -41 41 8 -19 -23 2 42 -27 -1 26 -37 6 2 -63 52 39 18 -2 -47 -63 -6 -2 -118 50 -10 20 62 44 -6 10 -15 -37 -39 -38 7 -36 32 -39 16 -3 8 -14 41 8 -36 -5 63 -58 -55 4 -19 -28 26 -20 12 -18 -20 70 23 9 -76 -7 -52 -42 86 1 -109 -12 51 98 30 -64 11 -63 26 42 -10 -87 -4 -7 -58 64 -128 -41 -88 58 25 40 88 12 -46 -52 -34 -9 -1 -79 -51 -23 31 -9 21 -94 -47 65 -6 83 32 25 60 45 23 -10 -88 -36 -126 24 57 12 -60 104 40 45 -1 -44 -6 -33 -1 24 113 65 -78 -26 15 -22 34 12 104 32 38 33 72 48 -41 41 -14 41 -54 39 91 -27 -18 -66 56 -59 -48 -46 17 -34 -76 -16 27 43 39 20 7 -83 -96 -80 -77 -29 -23 14 33 -23 -68 -13 45 -11 54 -58 16 2 7 -91 -54 -58 28 56 -14 -86 -128 -93 63 -59 25 -44 -71 -44 127 42 24 77 11 -119 -66 -94 -63 -1 24 118 51 -15 -21 -113 -85 -42 123 25 -70 -1 -97 -64 -14 0 9 24 5 -23 49 -126 10 70 -20 22 84 26 57 -36 20 46 29 -13 15 1 20 4 -70 -10 -38 9 46 -23 5 -2 26 -19 20 59 21 10 3 -6 28 -92 -9 -35 69 0 21 -57 47 -32 23 51 1 -23 -58 54 -31 -5 -77 -43 86 30 5 40 40 81 -10 -11 -66 -51 57 -78 -26 32 23 -105 69 -22 -20 80 -104 21 -17 66 73 89 39 42 58 -32 18 -69 -8 -45 -8 -39 -44 65 38 -69 -16 6 -1 -12 108 -73 0 6 104 -5 113 28 -19 1 -36 14 24 -48 -43 -16 -26 74 -89 14 76 -14 -20 -55 -27 30 -39 -70 -54 32 20 -82 28 45 15 5 -35 -54 -11 28 -23 -62 -39 -17 14 -73 -116 9 122 -59 6 8 -15 9 -75 -56 -97 34 -42 -33 -53 68 -39 -23 14 36 14 84 -3 14 -23 123 12 31 -101 18 36 -35 20 -50 63 -75 -10 46 -25 -52 -17 60 -33 8 14 103 -76 -64 -33 -25 -52 32 38 -31 28 -11 15 -18 58 15 74 19 20 8 12 -112 -13 -73 -12 -25 -48 -45 67 -109 4 44 46 -1 127 -62 -8 2 19 -7 46 88 -99 -30 30 -87 81 -4 47 -1 120 -62 10 -6 57 -12 37 62 58 107 -8 -19 69 -55 -64 -128 -59 69 -7 -68 -41 -54 12 -8 -44 20 -48 -3 31 19 12 -36 40 -22 22 -43 11 -48 -120 59 58 -92 -56 24 -75 -35 90 -20 -48 108 -3 57 38 18 -39 34 -125 57 -15 -18 43 -10 44 64 0 76 -53 41 69 -42 127 -17 -9 -75 -126 16 17 90 98 16 -54 32 42 -42 28 -48 54 -6 7 -5 -48 85 -45 19 57 12 -33 -86 -99 30 24 -26 -63 3 -28 92 -6 -38 17 42 8 12 -30 -38 -25 -28 113 55 53 -1 82 4 -24 -40 3 8 31 -10 16 -28 -18 27 11 71 -66 -14 -103 24 8 -50 2 -10 -20 -21 45 -43 -41 27 -27 -78 -13 -27 -66 -73 -31 -1 -60 17 -59 -4 -37 91 9 114 -27 49 -25 -43 26 68 74 61 -1 -3 36 30 -66 13 33 -22 -46 -22 -16 55 7 37 -36 -103 124 36 -36 55 26 -18 -14 -2 4 0 7 -1 6 -38 -4 37 -14 41 -55 45 38 38 22 40 56 0 -8 -17 -4 103 -41 -59 62 8 -10 -46 -19 22 63 60 -83 -24 -126 -14 -60 23 -55 29 -31 17 8 -8 -31 3 70 -28 22 -15 37 69 74 8 53 5 -31 -29 83 -15 -127 16 -88 -39 -39 -6 30 28 -78 42 -39 -24 -52 -59 -44 55 57 28 36 11 40 45 73 -84 15 14 -28 6 -22 -52 -14 -62 7 8 66 -38 -103 30 -66 -62 -70 16 -72 5 -78 59 51 -40 -25 9 -126 -17 -17 61 -107 -54 31 -46 75 32 24 -101 94 -24 91 -27 73 -109 -40 -34 -64 61 43 -29 -39 60 3 -27 -55 -22 37 18 -73 8 -64 -22 57 37 43 1 -35 -51 41 -61 22 -59 -26 -7 -23 -27 -58 27 21 -4 -33 -91 -11 -80 48 99 -5 -6 -12 110 -22 -5 -37 -43 -24 -13 -26 -24 33 -59 39 1 -62 -22 -8 -52 -53 20 -38 -42 34 46 -69 -23 -27 6 -33 -21 16 -39 -7 29 -94 -57 52 7 -28 -10 0 0 47 -119 -3 -12 -79 60 18 17 -48 52 -71 -110 38 -17 5 11 -22 19 91 7 -100 5 -8 -1 -12 -32 7 -13 67 21 1 -12 -79 -32 -29 24 -4 2 19 57 -32 44 -3 43 -12 -78 65 -18 6 -12 39 81 -17 39 43 12 74 -20 127 3 -97 17 -40 -82 -1 -31 28 100 65 -11 63 -66 -25 1 -39 -111 -84 -78 -22 -6 105 11 -3 45 72 54 -46 -37 -69 15 65 -13 -48 -70 0 89 14 -19 -55 99 121 68 58 -103 -41 -101 -22 66 -40 7 127 -28 4 -65 79 97 1 7 99 -20 -29 27 27 -1 55 -66 69 0 15 -46 110 -124 15 -76 -41 -26 -126 -118 126 0 22 -78 9 -16 -76 -9 -12 -46 -58 -77 -86 24 -5 -7 -16 -71 -60 -51 95 -2 -4 92 -24 77 0 30 -16 60 23 12 -27 -128 60 -36 1 33 -4 127 -104 83 -2 -101 26 -2 33 25 20 -32 -31 -11 -65 -29 11 -35 3 -10 -11 57 12 -125 55 -116 -35 -82 35 -113 -58 -72 -48 -32 36 -1 51 46 58 -75 0 2 -53 -118 -58 -46 -74 9 -14 15 -32 -57 -19 40 2 67 21 13 -57 0 22 9 -19 21 69 -44 44 24 -91 1 -4 -33 8 19 59 -37 -57 -120 39 -18 5 34 -112 77 32 -83 -9 2 -44 0 18 21 11 9 47 21 32 42 -117 19 10 -74 -18 18 -13 6 11 -64 34 40 15 75 -17 -34 10 -14 -50 7 -123 -82 -29 -24 -26 -81 4 32 5 -6 -102 -53 63 54 81 -17 -67 9 -97 63 -35 82 32 -48 5 -35 52 -38 -5 43 -4 -41 53 -34 26 0 86 63 -22 75 123 62 -33 1 60 -16 2 -3 -87 -13 -9 -42 -44 -4 86 -60 -43 -19 -13 127 28 4 -64 -24 25 -84 -112 -15 81 -6 -6 -8 91 26 6 -29 56 9 -8 93 -31 -30 -34 -55 -3 25 17 -33 -28 -97 5 119 14 -34 15 -18 39 -32 48 -115 66 14 56 -63 30 -49 36 -13 -74 -63 14 94 54 -88 12 -77 8 108 -15 -62 -94 -52 65 88 32 -7 54 107 -52 -1 -39 -11 -14 42 -44 -8 127 10 -36 -55 28 127 -105 38 -84 -54 19 -30 -39 17 44 -95 117 -6 -18 120 -77 -10 14 62 42 -58 19 105 127 24 119 71 -108 7 71 18 -41 61 -74 62 -105 41 -116 40 -56 -77 -17 4 -59 84 54 -46 -122 5 18 44 119 -87 81 -86 15 59 60 19 0 -103 -40 39 -63 82 95 -6 82 -120 69 48 1 -100 -10 63 71 -72 45 58 -108 -34 -67 -96 40 -7 3 -25 -43 -56 -5 -2 29 -36 -56 63 -58 18 -65 -61 29 6 -10 -7 10 -13 -87 -29 -33 -128 -51 -26 -88 -51 26 -69 -42 67 -125 -10 67 20 47 41 -124 71 36 60 49 -27 -9 -64 17 12 -15 9 -21 66 21 47 -21 -19 28 26 84 -35 -53 43 111 4 104 -33 -8 30 114 -39 15 -9 -25 26 58 22 24 43 -5 6 3 40 35 0 41 53 -126 -20 -5 -14 20 47 76 57 -3 -70 82 76 11 -26 -58 98 67 108 -121 -41 -99 -63 127 -12 -7 35 -94 30 -127 -124 15 -126 5 42 42 52 82 -47 -54 -120 15 8 30 2 -116 3 1 -64 79 12 -38 -42 -88 27 -93 118 51 -12 -24 -90 19 40 41 -27 9 -12 60 -1 73 -20 -78 127 -39 12 -20 -7 63 -72 -9 -47 18 -56 -21 -60 41 -120 -8 50 -45 -92 -89 -53 -15 127 9 -12 109 14 12 24 -7 -20 -90 21 55 101 38 117 23 -53 -64 -96 -47 51 85 13 -81 -48 62 -68 -87 -30 -23 -11 94 61 -33 -5 -14 16 6 39 30 -94 -48 -24 -106 -33 -42 -41 -24 0 20 -24 -7 35 5 20 -5 13 25 -8 -7 25 98 -18 76 103 62 -9 -6 23 -55 -6 120 6 -7 -67 -58 -45 -24 14 -23 -57 69 38 2 57 22 -26 -57 24 -1 20 29 61 21 16 93 -42 -12 -116 14 -36 25 -11 -33 -13 -115 3 -12 122 -79 26 -37 -29 67 -25 64 -35 40 -45 20 -40 42 -73 10 -19 -73 22 16 91 80 40 72 83 41 -13 67 66 13 58 37 -41 116 38 45 -27 -92 10 -22 26 -24 -62 -65 -62 -27 57 43 -25 8 44 35 -42 -63 -22 -34 66 -1 -21 -72 -7 78 16 27 -7 -24 -5 -45 -6 -71 19 92 -73 48 11 5 15 -65 -109 -24 -53 21 1 65 -19 -61 96 -96 101 8 -2 84 72 -77 -13 -10 -115 -11 -41 56 -60 -101 15 -24 -37 -39 18 58 53 -13 37 -43 -30 53 9 103 9 -36 14 -60 48 -127 3 -84 40 -119 69 -22 7 4 -23 -30 71 26 44 11 -47 -70 17 29 65 -25 -124 72 36 -36 -4 -62 -69 -65 18 20 -43 15 -10 -7 -63 -46 -95 5 1 28 20 4 17 65 -39 -38 29 13 56 -49 4 46 -76 -18 25 66 -15 41 -90 2 50 -3 0 67 -67 -56 57 46 33 12 70 -29 -58 -73 -1 110 -19 18 -3 93 -81 81 -58 -3 16 127 68 -22 -37 30 50 5 17 -45 63 61 0 -38 16 37 23 54 66 6 -16 -19 10 55 -31 -7 66 86 65 21 -19 70 28 62 36 68 -34 14 -96 51 -18 30 17 46 -34 50 13 -89 17 5 31 91 -69 -32 49 -127 -58 97 110 -11 80 -40 -22 27 -4 112 127 -15 -67 42 114 45 94 65 45 44 19 67 19 25 110 -1 87 -3 -19 47 12 -8 -42 15 7 -51 57 -111 108 -47 -18 94 -15 -39 45 -63 3 -90 -37 -13 32 8 -43 -8 39 30 -51 28 -19 -34 -10 42 -47 59 123 -10 63 50 17 42 47 19 -67 47 56 50 -35 12 6 -36 -96 47 -9 104 50 83 46 -54 -66 -31 -55 127 54 12 64 -72 27 38 -64 -56 30 125 -35 34 24 75 23 33 -27 -41 -84 -3 -15 33 80 44 29 54 -29 -101 -93 47 18 79 26 13 12 46 15 68 39 82 109 42 -19 -59 -50 2 -72 -26 31 76 69 -35 76 -37 42 13 6 -37 25 -62 -32 99 26 -36 -70 58 -38 2 1 34 -29 -9 -11 -14 32 -5 35 11 -26 12 11 -17 -11 -61 -33 -11 -33 -29 -23 -39 -26 33 19 -18 -66 -33 -35 -14 -92 -68 -26 -48 69 47 19 127 -80 30 49 28 8 -93 48 -62 -94 13 -34 40 -61 31 -2 19 45 20 -39 14 37 78 18 -9 -20 -10 -25 -27 104 75 47 38 89 -41 43 40 -20 -6 -66 -17 11 32 -41 26 34 26 55 -53 -89 125 47 -58 -116 28 -14 27 -12 -6 100 99 -14 55 1 -83 36 10 105 25 106 38 -1 -66 -100 67 -30 17 101 -21 21 -65 76 -16 -97 16 42 38 -89 72 75 94 55 32 7 82 16 44 -77 -35 -22 20 70 26 2 -46 -18 28 89 41 70 -64 -21 -60 -23 66 -23 -70 46 8 22 11 -55 93 87 60 -27 23 -44 15 10 -21 -30 -17 64 14 -83 -5 -19 -22 -32 15 -72 -17 40 -81 -29 -3 -5 -64 -35 -43 39 -56 28 -51 93 50 97 -29 -14 -28 -13 -12 12 14 18 -3 -24 37 10 -66 -21 -36 70 3 -24 21 -43 68 -9 -40 -51 -48 -50 -2 18 12 -17 33 -34 -18 -24 -4 81 -4 -52 -66 -46 -61 -19 -25 48 44 -24 -67 -52 -33 71 -84 5 44 -35 35 1 47 84 40 -20 25 -38 -21 127 92 24 26 53 -21 51 -45 -45 43 -116 7 -9 -97 -44 -47 20 -49 1 14 78 4 -105 23 -16 13 -24 -19 -5 -32 -53 0 -35 -11 -7 -45 -25 8 7 -21 27 -37 -57 13 8 79 66 15 -20 -36 -55 17 8 22 69 75 -25 -2 48 -8 0 -24 -24 -9 -50 -40 19 9 -21 5 -1 11 22 105 22 10 -15 8 -19 -20 10 80 -18 -11 46 62 54 -8 -77 -60 -92 -96 -124 77 95 -72 40 -13 16 0 63 -17 56 15 -118 19 -50 -40 -42 2 -39 -50 23 101 -125 -39 -64 59 42 122 0 98 14 23 -42 -10 117 -18 98 -1 51 -124 -48 -49 -12 -9 113 -115 -55 -112 13 4 30 70 52 14 1 -79 -108 15 116 105 13 51 -125 86 -11 -51 -44 65 -45 43 31 61 16 -2 6 -42 -92 -124 49 -105 123 -8 -44 -12 84 -76 13 -39 3 -19 1 -9 -82 -41 37 -23 31 -3 46 -50 -22 8 -33 8 91 -8 17 37 67 64 -60 -20 -62 -20 -55 65 20 -19 54 -124 22 31 102 17 29 -15 -21 -34 -12 -27 82 -44 -3 46 21 -55 -70 15 -48 -19 7 -53 19 -12 -78 -5 -102 13 3 -25 -67 64 -43 -118 68 -91 -66 -2 -32 -92 -81 86 6 -49 15 -103 -40 28 15 45 70 13 3 -1 -18 21 -11 28 -14 52 -58 -22 67 -53 6 -38 -88 11 73 68 44 -39 45 88 -43 116 -76 -1 21 17 -2 -87 -1 75 -66 -18 -7 21 59 -123 127 -55 -49 47 -6 89 19 40 -13 55 37 7 27 -53 -88 -104 -47 -72 -40 -54 36 8 -6 47 98 7 -86 -18 5 5 126 -19 -51 -78 44 -75 -53 -44 -2 63 42 95 87 -31 13 5 86 12 20 -25 85 40 -20 19 -125 122 76 61 53 -80 -49 58 -123 -41 -15 42 81 58 -17 1 32 19 59 5 -98 7 -27 60 -59 30 30 53 -36 59 -9 7 51 8 71 50 -21 -13 17 -15 -60 13 16 36 -74 87 -17 30 59 18 69 41 -52 61 33 43 73 -7 46 93 102 67 -1 51 -9 7 -52 -56 -15 -50 63 -23 -8 19 40 14 -36 27 -70 35 -19 32 63 -11 15 22 39 67 37 3 106 -5 2 -79 25 39 -105 74 -58 -45 68 21 -8 127 85 -32 -9 2 -2 -3 7 3 15 -14 -16 2 68 -8 58 13 -1 -19 -45 31 36 13 17 -14 48 12 47 27 -70 93 14 0 -20 -15 -27 -63 55 34 -121 17 31 17 104 4 -29 108 -6 1 -32 -84 -27 79 -48 64 -6 -31 -46 -60 82 34 -22 -29 -12 -7 -69 -1 92 40 -78 -15 28 -92 15 -18 14 118 -14 -26 19 58 -32 44 45 0 -55 -11 30 55 64 8 -98 19 -26 18 -6 12 -88 39 18 73 -70 -7 78 1 75 11 39 85 -44 -28 -54 4 -14 13 15 99 -79 20 33 -26 34 5 62 -100 -30 -4 2 36 33 -27 114 -88 29 -10 51 15 17 -17 -42 -58 42 20 -42 62 -14 45 7 14 -51 35 31 3 -43 70 39 -90 -7 -44 11 -37 -10 -5 36 -72 -75 -52 36 6 14 91 -3 -78 -35 -62 -15 32 -16 24 58 -52 42 1 -19 21 -24 4 34 88 62 -40 3 -89 66 95 6 62 11 27 12 27 16 30 94 -42 89 -37 59 -15 17 -64 94 -36 57 62 88 -34 74 -83 -23 -3 -84 -3 -128 -91 -55 42 -45 8 -3 24 -26 -54 49 -47 41 37 -65 -4 -27 52 81 -6 18 -110 47 4 -63 -81 3 -44 6 75 20 -125 4 -105 19 -120 25 -32 51 -15 -8 -74 8 88 -15 124 77 56 -63 97 28 -15 -16 23 -9 1 -78 47 50 37 99 -35 -34 100 -85 4 -80 10 12 103 -35 -28 127 -65 -42 -69 26 -39 20 5 43 -29 -22 75 25 4 -47 -38 8 38 -58 -6 -61 -9 76 -19 2 9 -32 120 -23 -29 -87 -25 24 -50 10 -50 -81 33 -46 -81 -40 -18 37 -20 -65 48 -1 -16 -17 3 -18 -85 -7 -11 35 -56 99 -15 -19 25 -77 22 2 -32 -29 20 -4 97 47 -58 -65 -3 26 36 -34 6 -70 12 -26 -31 -32 34 -19 98 -42 20 9 36 -24 2 -1 25 -119 27 -7 34 25 19 52 57 -40 48 45 -2 24 -73 31 15 67 25 82 -20 21 -115 9 13 28 13 -47 -91 -14 -9 -46 -19 25 -9 63 52 -12 -36 -59 -10 -125 -20 38 -3 106 -24 -92 -114 10 -61 -16 11 -30 -74 -98 -47 54 72 -58 67 -92 89 26 -28 56 46 36 -29 31 23 59 -69 -63 11 31 8 -74 -24 -42 -3 67 -45 -123 -16 17 -43 14 -14 72 -92 -82 -16 -46 -80 -81 -28 22 9 66 -49 49 -20 28 -49 110 39 52 51 34 32 43 -22 15 -33 6 24 -11 7 69 -33 69 -100 22 23 -8 -23 51 88 -128 66 9 36 -27 -13 -27 82 28 -83 -28 -63 84 22 -14 -19 65 19 -6 -4 12 -43 81 17 -27 1 56 -11 -9 35 99 -33 105 -22 31 -50 68 -70 29 -102 82 -106 34 53 15 25 12 96 5 -2 22 17 88 108 100 -34 45 -60 -107 66 10 -64 -98 56 -62 -51 -59 21 75 8 10 -39 -38 19 -27 48 28 -32 15 -2 21 17 19 -77 -74 -30 -51 -71 47 -31 -13 -1 -6 -15 9 113 6 50 47 26 -2 36 16 -73 41 43 81 55 17 -6 -8 -82 -20 12 -16 67 -52 78 8 -30 109 -48 -36 -16 31 -24 -123 -9 54 89 15 34 17 -28 -109 -37 107 11 -16 -36 39 15 -43 -33 49 -23 37 45 43 -28 -58 37 -28 -77 35 82 -21 -13 -11 39 22 0 -45 35 -40 -23 -18 11 -35 22 -5 34 1 -74 -66 -18 24 -47 2 -53 53 16 63 10 -45 -13 48 -17 7 -105 38 83 -125 53 -84 34 -19 11 -78 17 -83 57 54 -35 74 -22 40 3 81 -27 -80 46 -17 -29 -14 -17 -66 61 90 19 -2 -18 -31 31 -8 6 7 26 -29 28 95 -51 1 -23 3 37 70 -65 -4 -34 61 -44 -55 -34 -69 -92 35 -36 -5 -66 -7 32 -41 -34 23 76 36 -78 58 -22 72 -9 92 -124 -10 43 -14 24 -15 95 12 -93 -72 0 -20 -13 22 -96 -17 2 -26 1 65 6 79 118 9 -87 40 80 -3 13 76 26 38 126 110 -62 -83 -43 41 31 -45 -91 -63 127 -107 15 -59 -32 -28 -77 -23 -77 -12 79 -58 105 -120 -45 5 90 72 -70 22 29 17 -60 38 -39 -19 -90 83 123 -21 -1 124 -56 71 61 -63 -98 -36 -62 48 66 -30 72 -128 -17 83 0 -16 -22 -41 -4 -37 16 -31 -31 31 45 22 -6 30 32 -25 -71 31 -32 10 1 33 -12 -73 2 -46 -63 10 -91 5 51 0 38 92 35 -44 26 -63 27 103 44 -32 99 -104 71 122 69 -17 -89 -76 -51 -14 -36 54 -48 -27 -39 80 -21 -52 33 38 53 -34 84 98 3 -11 20 -52 -38 12 65 -122 91 49 -48 -19 1 -2 -81 15 25 12 127 28 -7 -8 -24 1 31 -2 -10 -71 35 0 -27 -5 3 53 39 9 0 -73 -30 64 31 -111 -14 -74 -7 -34 -127 28 -121 16 -13 -7 -33 47 -3 -40 -38 127 -26 32 -47 -118 39 -125 68 23 -33 94 -93 23 -50 69 -28 -128 -44 -6 41 127 30 -68 61 5 -39 -69 17 5 -16 -46 24 6 37 -8 15 -79 1 -13 96 -127 69 5 88 34 -88 -32 -55 53 10 -9 -60 -12 59 32 89 64 -5 21 -58 46 100 3 -89 -124 63 8 -28 59 -51 71 72 14 6 4 25 -22 20 22 -76 -101 39 -51 107 -69 9 11 -7 44 -5 -18 17 -71 49 -88 -14 -85 -34 11 1 8 -57 -13 -100 46 -61 -70 -50 -15 13 -70 52 11 -67 99 89 71 -16 4 -32 124 -16 -23 56 -31 -120 4 12 51 -83 52 -67 7 21 -50 -118 -56 52 9 -45 -125 44 21 48 8 55 37 71 56 -34 9 -28 -40 -38 -82 -125 -35 61 -50 -8 -56 2 -85 62 -8 -86 -71 25 -19 20 40 28 18 -128 100 -4 -4 77 -54 74 -98 -65 82 38 -3 6 -39 46 102 -3 -66 10 37 18 43 -23 119 -47 3 -24 -14 -66 -58 29 66 8 11 44 -6 -26 -13 -24 -106 -60 -23 -91 2 -86 48 5 -78 -52 -127 26 58 -62 -1 -59 37 24 27 -34 30 -125 -20 25 25 -42 -5 -34 -1 37 -86 -86 42 -116 35 26 10 -46 23 -65 38 2 0 -11 69 -102 -5 22 19 8 34 41 33 -27 62 -3 15 32 6 53 19 9 -41 70 25 99 -24 -11 -34 -5 -7 -39 -43 -45 92 -36 30 32 15 30 95 -52 -22 -35 54 -77 70 -55 -50 -49 -11 -8 -40 -14 -60 1 -47 -36 -64 92 -1 -11 21 11 0 41 45 -35 12 -11 -16 -14 106 19 0 -27 -42 -16 15 2 -26 -44 -41 24 -53 59 45 100 -5 11 -14 83 -23 -9 -126 71 43 -16 5 26 -4 -65 69 40 -25 4 -40 21 -20 82 -16 -26 -27 65 63 -26 -14 -90 62 37 23 48 97 92 -28 68 -31 10 43 -54 28 -55 -28 -7 6 -25 -77 -17 -101 -83 -12 -98 -10 -21 39 19 -88 118 -11 -45 106 -6 118 -38 -98 -108 41 4 34 56 11 -88 22 -36 -49 -124 23 -101 44 -55 -37 -48 -14 72 -65 -77 -47 100 48 84 71 31 -44 -92 100 57 -55 1 9 -36 -34 -7 -19 19 10 -64 -63 25 -14 -67 -4 -58 29 -82 -11 -51 -32 -93 20 50 15 -60 28 -39 -42 28 77 -22 -66 14 -21 62 -10 -6 18 -22 -13 9 43 10 14 -10 -86 -95 -119 -10 -61 -92 37 2 -6 -74 -74 25 8 -84 42 -23 -21 82 49 -1 58 84 -42 19 23 -5 -15 -5 51 -25 29 39 71 0 -44 -95 10 -70 -67 -16 13 -38 18 -32 -16 1 22 -8 -6 42 22 30 15 -74 39 45 -26 -15 36 -85 -33 -71 -14 63 -32 3 72 -82 5 -108 50 -20 -61 -44 -11 2 -19 0 14 13 67 17 32 60 64 -64 35 -16 -26 -75 73 2 -22 53 -2 12 63 -81 1 11 9 36 -36 39 -8 13 -61 -19 34 -15 37 -6 31 -20 -30 -51 101 -25 16 14 57 77 -24 65 -51 -47 49 -52 48 45 15 42 20 -68 0 -111 -18 12 48 3 -2 4 -33 34 39 72 1 -19 -44 -44 -73 39 32 38 28 29 30 -37 -12 -21 -56 -27 -19 -15 -43 -20 -31 -14 96 -98 69 44 -70 91 -15 78 57 -74 -126 -112 3 -1 31 -22 -125 97 64 -100 40 -31 21 10 124 -20 -6 121 16 -12 -3 86 18 78 -92 -126 4 -96 -1 -84 -103 -124 -106 -26 -10 57 21 -1 -77 -95 -20 29 -79 61 -20 53 -65 43 125 119 -23 -62 -2 56 22 -122 -66 -114 127 -102 65 -71 -65 -43 119 -13 -30 127 -53 -9 82 -77 59 -115 -121 -128 -22 55 13 40 -49 -79 58 -35 -28 29 85 58 -24 -47 3 -68 -54 33 73 -59 49 -54 -9 -32 -94 -44 -31 13 34 -63 44 5 -65 7 -26 -50 125 -10 -18 20 21 75 19 72 120 -88 40 -19 -71 -48 10 -44 -53 54 30 17 -66 41 3 13 54 23 -46 27 -24 -26 -75 -37 64 -60 22 48 -18 -127 -9 -91 -6 59 96 16 9 -47 56 87 -29 1 -69 7 -23 -30 11 -90 29 -35 17 -48 22 -37 -28 22 37 -30 -8 42 -19 -46 -15 17 -22 -11 -28 -15 -54 -20 -15 -11 -25 -64 29 22 -62 107 60 -70 49 82 17 127 -99 57 81 27 32 -85 41 -97 -15 12 59 19 -26 24 -99 67 53 22 -16 53 86 -70 23 -39 -79 38 -1 -65 -1 55 2 -56 34 38 -67 -6 51 25 -87 -18 -37 -37 -28 22 9 -89 -2 21 -2 -55 -34 19 -43 35 13 13 -56 -78 -38 -21 -54 39 -93 121 105 90 -11 29 2 12 -29 62 -48 -4 90 111 -8 -125 -33 -31 -28 -70 -51 -51 74 -97 -11 18 -40 124 1 -13 -5 62 -83 19 47 -77 70 105 117 -116 -4 -31 85 -38 31 -12 4 59 -40 -124 -6 5 28 -49 48 22 58 13 -127 4 -26 21 54 -16 4 -114 22 -46 17 -2 37 -48 -26 88 -23 -85 5 21 -42 20 -7 -69 2 -50 9 67 -68 -61 -77 -62 -48 55 43 48 -43 15 -12 41 67 -44 -20 -35 122 54 111 -81 81 116 65 -90 13 -71 -36 4 -73 -109 -6 11 5 36 -66 -33 -18 -19 -80 -33 -52 49 -28 2 -9 2 -48 18 6 19 -123 -124 77 39 104 17 26 5 38 -58 31 -46 48 86 46 -1 -26 -23 -5 27 -12 -4 -100 -72 -36 -76 -15 -125 40 -56 -41 -69 -20 -1 -62 36 -25 -67 30 -26 -27 19 -111 16 44 -127 -68 -108 -11 2 13 3 -30 -32 3 -75 126 29 31 -49 16 51 -40 -98 -18 43 -19 -21 8 18 -25 61 59 13 -12 -102 71 -75 27 -64 2 -48 -31 -110 27 61 112 44 80 -97 -3 -101 -37 84 -29 102 -19 50 61 37 -67 6 -31 -59 40 -8 48 7 12 90 -36 45 -14 -10 -38 -125 68 -43 -22 71 9 24 -57 97 124 13 3 -44 -19 127 24 25 87 -122 35 -1 59 116 -11 -124 74 -26 1 15 -22 30 8 8 -53 -15 15 -31 3 -79 11 34 -27 -14 36 -13 -19 -64 50 -9 8 -47 -62 -87 49 107 71 50 67 -53 -61 11 -68 -30 29 -123 -70 -32 -34 -75 -61 -24 -74 -31 -29 14 -47 4 96 0 91 -28 -11 17 -2 20 20 -55 -69 72 7 11 -36 114 5 -53 -22 33 -35 66 -9 -24 -30 33 -11 77 14 10 19 33 35 36 -8 8 97 -78 -59 25 36 -17 15 5 -82 88 -64 -46 108 -49 -56 14 54 7 37 -15 -53 -5 -36 -7 -25 87 10 -2 -32 15 3 37 39 -18 2 13 -16 -43 -65 -9 19 -55 12 29 45 0 11 -17 12 20 6 -11 -64 -4 63 16 105 -17 -26 -49 42 15 0 -57 -5 27 -41 31 38 -15 17 44 -62 53 -3 33 -14 34 86 0 -65 -20 -46 26 -18 -13 1 -25 -69 3 9 -28 -54 -21 -29 57 36 -22 -23 58 66 28 52 -50 18 10 72 21 9 45 37 19 -75 -69 9 45 21 5 66 31 76 -14 35 93 74 -1 -35 34 18 -29 65 -32 8 40 -7 -39 -10 -64 124 73 -34 -23 89 -103 -21 14 -11 -58 -3 -125 70 -57 -60 -17 -55 31 -46 71 125 29 -96 22 -79 -61 -5 -76 -24 53 26 58 24 -15 -29 40 -59 -52 -26 8 -48 -11 37 6 -53 13 97 -19 -121 22 10 122 -31 -17 11 -45 -1 -9 52 67 -36 37 -64 33 -37 -38 4 127 -9 11 -5 126 -7 -34 -16 4 -76 -54 45 -20 -4 43 46 47 -1 22 -35 -18 -29 -28 32 -82 25 -122 -60 31 48 10 -37 81 14 57 -33 -120 35 38 21 95 -65 -125 -58 59 10 13 8 -59 -35 -85 36 -122 -13 34 28 -8 47 -44 -13 35 -40 -105 -60 -67 54 -15 -108 14 -46 -55 0 -43 12 -125 8 -103 -75 10 -101 75 -120 -54 -51 93 7 127 -68 61 40 -8 65 -16 -68 -23 -48 -25 -9 29 21 51 -7 29 62 -15 29 4 -68 -85 103 24 -8 -124 60 76 -4 -8 -54 -17 -12 5 -49 -37 14 91 17 -52 -12 -13 -39 44 18 6 33 33 81 -88 30 2 -31 63 -9 -58 -9 -12 14 -43 24 -31 45 8 72 -30 -21 -36 41 28 -9 37 34 -74 20 -65 -57 8 -7 -68 2 89 -14 1 -48 -32 -54 29 19 76 -25 85 60 17 45 -37 18 -5 -54 20 51 54 -20 -8 33 24 -16 123 -44 47 -1 55 4 31 1 73 1 -21 -74 -2 39 -97 -11 55 -4 29 -17 12 35 67 3 -72 40 -14 127 -3 0 -19 -42 -127 -40 52 31 -46 -57 -127 -26 66 -57 -23 28 -43 -28 40 -45 -91 -93 -20 97 -73 86 -22 6 52 17 -38 -43 14 -14 -83 32 -53 65 -67 -33 42 18 46 -66 -3 -26 -25 -13 8 26 127 1 18 -51 -96 -24 -116 -7 -12 -68 -120 15 -15 42 -36 9 -5 -13 29 13 48 -30 -128 -34 -46 18 -78 -15 -22 2 7 82 60 7 5 -126 63 99 -66 -66 -74 -91 119 18 77 89 60 -42 -39 -52 47 94 21 35 8 53 -18 -69 -123 -17 -32 22 -17 -84 -3 -11 -128 -22 -128 -22 113 -97 -59 127 29 -28 125 89 -122 114 -63 99 21 -71 29 51 59 62 -105 3 9 122 25 -114 -33 77 -11 -46 -96 1 4 106 123 -113 118 44 -51 122 17 -110 25 -90 -90 46 73 -105 106 38 19 -24 55 92 -39 -123 33 83 37 54 -36 23 2 100 -10 -22 -39 -18 23 -64 52 124 122 98 30 24 20 -25 65 73 -31 47 15 -14 57 -26 -13 -28 -104 -84 -67 23 -43 57 32 -53 -80 36 -66 58 -30 -58 -39 -22 -28 48 73 79 -57 36 -52 33 3 -38 35 16 -16 13 -19 -3 46 13 -28 56 -7 49 -53 -25 -94 90 -60 -51 60 8 -32 11 60 12 23 -35 -123 -24 28 -74 112 -78 -55 -32 49 -12 -114 -38 6 -3 56 3 3 4 70 -23 -66 -37 72 88 37 -19 11 42 83 -121 59 24 44 -92 96 -104 -52 -9 9 -93 9 -80 114 61 6 24 -58 -111 127 -84 -41 99 62 -107 7 -18 -7 34 -124 -128 -33 -12 -59 -4 -14 -9 62 -66 -17 13 64 -1 -29 63 -44 -23 23 61 14 63 -58 35 -14 -33 31 23 42 -127 -52 -62 75 10 28 -6 41 -109 -59 -67 25 25 -103 -17 42 69 -59 -32 -5 40 34 -103 -33 32 -126 9 16 83 -25 31 126 -104 121 -24 117 94 51 -120 -70 57 -30 18 114 -8 70 48 -71 121 -30 117 63 122 113 9 30 15 11 47 -16 5 37 -28 -60 29 -121 67 -16 -6 21 69 10 -53 38 -31 87 -52 -128 -123 79 -117 -83 -12 123 -90 105 -8 24 -59 33 61 21 -11 58 26 -60 127 64 72 59 47 -37 96 -107 2 105 -66 35 52 -55 124 10 -119 -58 20 126 127 16 100 -27 -104 23 -55 -31 17 8 -47 72 64 27 -1 50 74 19 17 -34 13 25 13 5 1 28 40 -112 -79 12 14 -11 -90 4 56 7 126 16 -19 75 -14 -31 119 -66 59 -82 -4 17 82 -104 -47 74 54 -9 -125 122 119 30 54 49 53 34 63 -64 -36 36 55 -77 1 88 -12 -26 25 -13 -14 87 57 -51 123 23 22 93 27 -28 -53 41 -45 -64 -82 71 -94 45 -70 -11 65 10 37 13 -36 61 28 42 10 -54 -15 -14 63 -8 2 32 -98 -22 49 71 -90 -28 -94 60 -11 100 35 -19 -56 11 -29 58 -52 35 127 111 -10 -74 11 5 59 -4 105 -15 -35 84 -68 61 15 -82 -8 -52 120 76 49 -31 -11 60 -59 -37 -14 -20 -22 -37 44 -50 42 2 18 123 -57 -40 -10 -73 5 13 25 -124 -45 -31 -21 -83 47 -14 2 127 58 1 36 -58 15 -123 7 42 81 50 9 63 -85 -11 -53 -124 20 -102 12 107 -49 127 10 -24 -31 -127 -86 -89 -88 85 116 76 -57 47 -123 66 112 59 30 109 4 14 9 -40 -117 -16 -69 -41 -32 -35 -42 -24 37 -77 -100 97 32 7 65 71 -6 80 50 -97 126 -73 -23 -92 26 -6 -12 2 61 -123 -12 -127 64 -123 -109 -71 13 12 -128 -73 -40 -1 -64 89 -127 114 -36 -98 74 -3 -119 75 -115 -126 5 14 -126 124 -53 23 46 -44 43 -16 -27 -83 -9 24 8 -104 -72 -17 -9 -54 -102 -20 -128 18 -64 -106 -89 43 -3 47 -7 -83 -4 -47 21 -104 -31 115 -88 65 42 27 4 10 -11 1 -11 -77 8 -48 0 -26 -6 -73 24 -86 0 31 99 113 4 -115 -43 -110 97 -45 -19 -15 -122 -13 41 -34 23 -46 -51 -52 -12 0 9 -115 -22 -1 11 -38 11 -60 -51 10 -6 -56 -27 -80 -25 -49 65 -42 -3 97 56 125 14 -50 76 -3 -67 0 33 -36 -17 16 -51 49 8 15 20 -15 5 53 85 80 100 -58 -94 -124 120 19 11 -124 76 -127 -27 123 -66 -49 121 -52 54 4 -62 54 57 17 -126 42 12 -55 -46 40 -107 14 -15 -107 66 126 30 127 75 -9 -125 49 -79 -92 -6 -40 127 -31 102 -83 -127 -46 -46 -79 -78 -12 6 38 97 105 72 2 71 48 51 24 46 -9 -76 0 -36 33 21 -10 -79 -127 21 -40 -53 -126 -16 11 -111 -24 35 -19 107 35 127 95 83 12 93 -8 32 40 -1 91 70 52 25 23 -90 -127 22 34 22 42 -42 -42 8 -98 21 -70 123 99 24 63 -17 112 0 84 27 62 -1 47 55 23 -37 25 8 30 -2 -19 -7 122 -17 -27 52 77 -83 35 -88 52 -64 90 2 32 21 66 34 14 41 64 113 127 127 2 49 -81 7 -14 68 45 48 -1 -12 10 6 72 -23 47 71 -121 112 -82 40 9 -38 18 2 85 20 -39 -6 -32 29 -5 22 -8 1 70 81 65 -8 60 31 -24 21 64 87 -3 9 -19 -29 69 -12 1 -7 33 13 76 14 58 -17 -26 41 57 6 57 -30 -13 -12 11 -15 126 53 -41 -56 5 -16 34 -3 58 -87 16 2 -7 87 11 94 -6 8 77 -4 48 -1 -17 9 19 30 28 -43 39 20 104 47 -53 70 -12 -3 -31 -39 29 91 112 -32 -123 -29 -26 -72 45 3 38 -2 44 54 91 -32 35 -9 -15 26 38 39 -5 12 -61 -106 -5 -37 44 -114 124 -127 -101 -21 -68 40 108 -24 -93 1 56 -67 10 -51 27 61 10 -61 5 23 -6 -119 -51 34 112 66 72 38 107 67 -50 -15 -57 25 -79 52 -24 20 24 -8 19 14 -20 -86 91 25 -37 56 -11 -37 80 126 -38 -50 -14 29 11 -86 23 -30 -124 -36 10 83 -44 57 -72 -6 -57 71 -81 -9 59 -27 78 69 39 44 17 -32 45 91 -39 -128 99 88 72 15 63 -43 -45 -57 9 20 62 36 6 -54 8 -70 45 -84 0 61 27 -70 -83 -85 10 -33 -67 -40 87 -114 -22 -74 -23 -40 -30 -14 -18 115 -37 -20 -121 25 6 -39 13 -6 119 -1 -17 -116 -52 113 -17 -42 90 -53 85 -31 -111 92 -43 0 -18 15 -36 66 11 73 11 -98 -98 27 -28 29 36 -103 52 -50 46 -34 33 -98 -36 73 30 57 33 15 14 20 -31 -6 99 10 -41 14 -42 44 16 -49 23 17 -121 58 -64 -25 -41 -32 104 -25 95 10 -28 -68 54 18 12 -9 19 57 11 -52 31 4 49 -89 25 8 7 122 -11 30 15 -32 -84 28 -52 30 46 -55 -41 55 32 20 -9 -27 35 75 -10 -46 12 65 -54 -8 35 52 -45 -32 -39 29 -5 -74 -39 5 -89 -122 -18 -45 30 -69 -7 -26 19 -26 5 -45 -52 -56 38 -54 -15 20 -25 14 -17 -17 -84 24 31 3 -16 49 17 -8 66 83 112 2 -20 57 80 0 27 -27 44 -78 67 57 54 -9 66 16 14 88 -45 27 127 -61 27 20 44 68 -59 -47 49 -70 17 0 108 -14 88 43 20 -5 -46 -40 -4 -35 -9 -2 11 87 95 -35 8 63 -32 -55 -10 -19 -16 23 16 -72 -12 35 -35 -11 41 6 12 27 76 41 -5 6 -63 11 -87 -87 2 42 -11 -12 70 -21 -29 -74 50 -37 15 51 55 6 39 -44 -10 -38 -80 7 121 28 -14 -16 1 -52 107 -31 95 -45 -74 -41 -14 -41 4 86 -39 6 -29 67 31 -78 -115 -82 34 16 -26 2 -71 -36 88 6 47 32 5 -11 42 -37 -19 -20 2 17 9 -36 -3 77 51 -121 -91 -21 23 25 -72 -52 -55 -99 45 65 126 64 18 91 49 10 86 121 -120 -98 63 16 6 28 -109 29 -17 -3 -71 -52 15 -17 -3 69 -18 127 -14 -63 -90 57 64 -13 84 -62 18 80 -12 -12 -15 -19 120 2 -33 34 -9 -55 75 -13 -87 -127 -111 120 -101 43 -20 -8 -101 20 39 -93 -83 15 -19 120 56 12 -67 -21 36 -16 -12 37 33 -13 53 -48 30 91 -22 -1 -3 -7 -123 -21 37 -8 -5 -67 -44 -39 38 -34 -2 -10 41 127 1 33 -24 22 -4 44 0 -54 -121 12 -33 -6 30 -71 -33 14 -25 -37 62 -28 30 -42 -65 -24 41 25 -27 32 17 -2 44 -25 -58 -16 -19 32 65 -17 70 -66 -127 -7 -4 27 35 -48 -11 18 -103 120 47 -126 59 17 -63 58 45 -94 -39 115 -31 73 22 -86 7 -83 -30 23 31 -11 63 28 15 18 -96 43 -30 101 64 39 93 53 13 22 -29 35 -62 24 -31 -30 10 85 72 -87 -45 43 26 -60 -28 -57 -1 -10 3 -31 -119 9 -73 -19 4 -35 -76 -51 65 24 -53 10 30 -12 -35 -38 97 -12 -34 -87 -22 40 0 25 44 122 3 29 22 -24 -2 16 -93 -94 -15 62 81 -2 33 30 -9 -125 -36 -35 3 46 12 -59 41 -64 113 65 -27 -24 43 -29 95 51 -16 -112 -28 -26 -31 -11 31 -92 -125 -23 -66 -124 -2 -19 -52 20 -4 -2 -53 -128 26 -9 -103 -26 66 30 -4 -31 44 20 91 12 5 13 -4 8 0 35 48 124 -51 57 -41 -23 -83 1 -30 88 -71 51 21 -9 27 -4 -54 57 53 10 -6 -8 23 96 58 -10 -70 -24 -8 26 -21 18 24 -4 0 15 68 -112 -19 44 3 22 -67 -98 56 27 95 49 -29 15 12 -72 -89 -39 -65 27 -41 14 -26 24 42 -76 -25 -28 -69 -93 44 -46 -15 -25 -33 -47 -6 11 -17 43 -3 -70 18 71 15 -36 88 -34 -65 -56 24 -49 -61 -14 -3 -24 -45 -80 108 -37 -72 41 -27 -4 20 17 60 21 -61 32 103 -99 -35 -13 -65 -11 -5 -28 -122 62 -2 7 -43 -13 -42 21 22 -17 -44 -105 5 -13 16 42 25 -45 -32 -34 123 -56 89 -126 14 21 90 -72 127 15 -80 33 11 -22 127 68 80 92 6 -7 -126 -105 62 127 -33 -53 57 -33 -53 -112 86 -35 -27 -128 -30 28 127 6 -56 -20 75 -12 11 89 -127 -64 -87 33 -50 30 45 126 79 -128 29 12 15 -1 127 71 7 -87 60 -49 56 -29 81 40 80 -12 -84 -10 -1 29 51 3 77 36 -9 -10 74 4 -15 -112 -39 -16 -49 21 83 48 -47 47 32 32 75 -52 -9 -7 35 40 6 45 -2 41 -71 56 25 9 -32 -51 3 -26 -38 4 16 -26 -77 75 92 113 108 -20 106 -73 3 51 27 40 47 -98 -43 -9 -18 -12 -31 -3 -58 -23 11 31 14 -25 -74 15 1 33 16 11 -24 35 -47 30 -23 66 -10 103 17 48 -18 -35 31 -47 111 75 -39 39 -14 17 -14 96 -69 -4 -50 -8 51 -63 14 -33 11 30 113 29 -29 37 -19 24 -43 31 -27 55 27 -40 -30 32 -10 -60 7 27 27 37 22 -14 52 -55 47 62 55 -12 -86 4 47 -31 16 53 -19 39 15 -1 31 -21 14 32 16 30 24 -13 9 38 33 73 -9 -28 -25 15 -71 18 -13 76 -17 -54 -21 -6 33 -66 -38 -27 29 -2 53 -54 17 2 -13 96 -4 8 21 -11 4 -49 -36 -56 -16 27 3 -57 5 -96 -7 7 65 -18 66 9 5 84 78 -3 -17 -42 -2 -59 -42 2 -43 19 -54 28 -5 45 -80 127 19 35 22 -28 28 -19 69 24 18 38 -20 19 36 -47 -56 -36 73 7 -54 78 -44 38 -37 15 -42 -50 -26 24 29 7 79 29 41 12 4 -17 -11 -17 -22 60 -4 1 19 21 55 -1 -14 107 24 -38 62 47 1 -68 4 33 -17 -72 113 -13 -71 52 92 8 -25 -80 -23 -11 5 21 126 73 -57 -97 -14 -49 -19 51 -91 37 0 -9 -10 -10 -93 40 14 -11 -21 26 -59 13 -94 -13 93 46 -125 71 11 25 69 54 -71 29 47 -20 96 31 -126 -46 43 90 10 3 41 66 -37 -26 -9 -6 120 62 -31 -70 -14 58 3 69 -27 39 75 21 25 -69 -38 18 -83 53 -127 52 -39 15 -12 -87 5 0 63 -32 -67 -109 9 6 30 57 19 -34 21 -9 -61 -34 -31 -75 21 80 -12 41 -1 56 23 40 -84 -3 -127 -15 -41 65 -61 5 -60 34 8 -34 -25 -64 -39 -24 93 16 -15 16 25 46 -47 -65 9 11 44 38 2 66 73 40 43 -25 6 -86 38 -46 3 15 -47 55 24 -50 -8 32 -11 -23 5 16 -111 85 36 -4 74 74 4 37 1 58 -1 18 -86 0 -24 -53 -34 -51 -16 -88 -93 -6 53 4 -20 -13 23 57 -106 50 20 30 -25 -21 36 -29 -61 -37 -96 -24 -26 4 40 -22 -36 -17 40 -54 -60 -105 -19 -102 13 44 -3 44 19 -19 -79 -47 5 26 2 -14 -10 101 63 -57 41 39 116 4 108 18 -37 -40 18 -126 0 -37 118 4 -19 78 19 -56 119 -125 45 103 -46 -11 100 -38 55 77 -119 -122 -78 -2 7 12 11 55 -15 93 0 55 54 -81 -14 3 6 -58 -17 -18 -122 -38 -52 -51 -14 -68 14 85 57 45 -21 33 -48 79 -55 -107 73 -2 -61 33 -9 44 -44 -17 -9 59 -84 37 -20 -53 -41 41 -53 29 -61 -33 18 -72 -43 11 4 -29 109 -121 120 4 -20 -44 -41 -65 45 117 -99 -96 120 62 27 33 -29 -117 99 79 -23 0 38 -40 8 -34 29 -2 -127 -19 21 -46 -128 -19 -32 -110 -17 -13 -3 -12 -34 2 -64 29 -42 -86 -12 75 -40 -35 126 -56 -74 76 -17 -118 -67 102 9 -60 -75 -8 54 81 16 -27 -105 58 -23 -111 -124 28 -91 -25 -54 -18 26 0 30 11 -43 -39 -39 -27 -24 3 -101 -78 -37 41 4 3 -97 22 88 -20 -13 9 -74 2 7 -95 8 43 -49 13 26 -45 -56 96 -14 -115 -5 30 86 36 -8 50 63 35 88 -10 -66 -3 -3 -12 17 14 30 42 2 -20 49 -42 -28 17 -52 -10 -7 4 -42 57 -11 -5 87 -38 -2 -81 -7 -6 -21 1 18 19 47 -19 -42 71 15 127 -91 -21 -44 22 -88 -101 46 -79 26 48 99 0 33 9 -27 76 -28 28 34 24 -124 -79 2 -12 92 -9 11 -27 4 -47 108 6 23 5 -33 -3 -88 30 -6 -73 -101 51 -11 30 2 -47 -20 74 1 43 -18 14 54 -4 -24 -1 12 0 120 -81 46 -73 -41 -95 -43 61 -4 32 35 41 8 -75 94 -16 -12 -91 -31 -60 52 73 -6 51 2 14 -13 -1 50 15 2 39 12 39 -16 -44 -34 -64 9 28 -90 15 -7 -39 -56 -15 85 -54 -44 8 -32 1 -36 0 -11 -10 -58 51 3 -45 75 56 -17 60 -20 -71 -38 11 -30 14 -53 -27 -65 -5 47 33 57 63 44 -105 72 51 9 3 -35 42 43 43 75 91 -57 39 -43 -63 31 -128 -60 7 -35 -126 -39 -3 52 -2 8 -22 -21 0 122 -35 -56 -100 19 -19 62 70 -22 -43 17 116 61 -42 20 127 -3 77 102 -125 91 10 16 108 -25 -61 -31 -4 84 -56 69 -74 87 -32 98 5 -18 -6 44 4 31 -26 10 87 21 -50 67 -92 28 -26 2 -56 11 -59 6 -28 -19 3 -86 100 94 -18 -37 33 -89 -13 23 2 -39 -63 17 -10 -66 36 57 -25 -41 -7 -114 -4 18 -16 0 21 89 27 2 -18 16 -1 104 -39 -23 28 34 18 75 -33 1 29 34 38 53 -54 81 -1 79 -13 24 -32 66 -8 40 53 60 32 16 72 -84 -15 43 -58 25 -12 -89 30 63 45 -66 28 13 28 -65 -17 -62 -1 26 -34 -89 29 -53 9 55 62 3 12 -17 62 17 -3 -14 3 -67 -53 -7 84 50 -69 99 -102 -40 61 77 -61 23 -45 -65 -89 -31 -40 49 -78 57 28 45 25 -81 46 -5 -39 -93 -37 0 84 -33 -4 -1 -32 -10 17 30 25 -126 -49 32 44 115 84 41 12 -20 2 -13 60 -23 110 29 -119 72 124 -100 -35 -26 44 106 -80 85 -64 3 92 89 75 -32 30 -77 34 -14 -16 -30 51 35 -30 87 35 90 82 7 2 18 -19 -24 -37 -19 -35 20 55 1 48 28 60 8 18 -62 8 18 -34 36 -39 1 54 32 60 32 41 88 -43 50 -59 -66 -105 14 -21 -17 -38 28 -124 21 -15 -32 44 76 -117 -6 23 91 40 -19 51 -68 19 -3 -76 15 49 44 46 -67 39 -125 -55 22 -77 -122 -14 -60 -1 -19 -14 -37 -61 -6 83 -33 53 69 13 67 17 -26 29 19 37 19 23 -14 0 70 6 28 -125 110 94 73 99 -16 66 36 28 10 -34 -2 -20 77 58 -35 31 21 10 25 24 61 -7 71 -32 -56 -23 17 43 -34 -43 61 -27 -10 -49 -44 41 -109 -4 -78 -37 -53 62 61 -47 -28 -39 52 -53 -48 17 -7 42 5 35 -28 59 -33 44 8 107 42 -28 -2 68 -53 20 23 15 -53 -29 56 29 -13 -9 76 -13 17 -29 -58 -24 9 -46 36 -103 24 -19 39 -31 -55 -7 78 -1 48 32 -29 22 -8 -56 -24 -8 -19 -33 -36 -74 -18 17 -27 -11 53 11 -9 4 -4 13 -92 48 75 -65 14 126 25 3 104 6 -75 89 35 -83 57 -123 -5 23 -34 78 -89 51 25 -29 -11 31 -43 -34 53 25 -3 -41 -107 -29 -39 -9 58 6 -14 28 19 -7 -65 30 -13 -43 -58 -31 50 5 -30 56 26 9 -115 44 7 -41 86 29 48 29 38 51 50 -22 17 -31 35 -46 -46 -19 24 -3 -48 65 5 15 -7 26 63 1 -10 -27 -70 48 -51 43 24 -15 105 55 114 -24 -42 19 88 9 61 -29 116 -23 -73 -12 73 66 -4 41 -23 90 11 49 -39 -48 54 -16 124 -25 40 121 44 41 40 -32 -60 98 49 16 109 -21 123 20 67 -33 -8 -17 29 -3 53 -42 -37 46 114 100 19 -29 125 24 -41 39 -2 18 -17 34 -18 24 -1 -53 57 -36 58 126 -29 -22 -95 -104 -30 127 30 37 11 82 35 2 17 -16 -34 -118 23 -31 107 -7 -36 -38 -43 -29 64 14 -32 -37 -10 19 -2 1 39 -66 76 58 89 -23 19 2 52 -26 -25 -32 60 16 -19 -21 5 -22 -10 -22 -19 19 5 -48 -43 31 -37 46 -63 20 -17 15 -22 24 41 -18 40 -56 64 -45 -4 14 18 97 -27 7 68 69 75 26 -13 34 -35 5 5 8 27 -19 52 -18 -22 -40 -26 15 12 18 -8 55 69 -6 51 27 14 38 19 -9 -46 -25 -8 77 48 13 66 -95 -46 38 26 24 108 12 54 19 47 65 -50 -119 123 -63 -13 52 17 -2 83 18 -38 15 -17 -76 60 -122 -23 83 -59 76 21 45 10 -23 -9 -36 -8 -74 16 32 6 -58 46 70 -91 8 20 -27 68 125 57 -126 68 29 17 88 -11 1 -67 8 58 13 -3 41 -126 41 -87 8 107 54 -2 -48 5 -30 -19 30 -27 1 -10 -56 -6 -32 -47 -85 -108 6 49 104 -102 26 -12 45 41 -43 16 -29 -52 65 -74 -74 26 34 -9 -12 -58 -59 -38 -33 41 41 48 -40 107 -52 55 13 -108 56 4 -124 72 -12 -7 -12 115 74 94 -18 5 45 -64 23 -10 -83 102 64 16 29 -45 -20 112 -57 15 6 -7 -38 89 -25 -31 44 33 -33 -36 107 -56 -5 -17 5 -58 -33 -44 -57 -6 -68 89 34 106 -64 -48 -29 -11 -79 -9 -45 7 -96 -41 -35 -9 -69 -27 -80 28 -29 -8 -85 4 -43 -59 24 -25 -64 -61 -2 89 -19 36 -23 7 -50 -78 35 -24 -16 29 -25 8 -35 -33 23 45 14 -24 25 17 -1 106 -12 -18 43 -6 46 48 -72 -11 10 -54 -66 -74 -75 97 64 7 7 54 -11 13 -1 -43 -11 44 -13 -31 124 22 -29 -26 54 61 28 16 109 9 -49 -37 -39 -30 -46 29 12 37 29 6 -44 -64 20 68 8 -37 55 15 45 6 55 7 -63 85 7 -40 -16 -45 -68 -24 40 -72 -6 68 -5 -11 -26 -14 11 -34 -1 -18 126 -7 110 111 23 -95 21 -38 1 14 -74 -44 36 51 -7 48 27 -30 -45 -33 49 16 -39 -70 -39 26 -37 -12 -48 15 0 -11 100 46 -5 27 -55 119 39 -31 -26 -63 110 -26 4 19 74 36 12 -39 41 60 -28 -64 -36 -20 108 -34 20 -7 -45 2 -29 6 57 34 -77 -3 -14 34 -114 -4 -33 -64 -23 17 18 65 8 11 -18 49 -8 -18 15 -19 23 32 -62 -57 80 16 27 -77 45 25 39 -25 14 58 18 38 -27 -104 -82 9 19 -24 65 34 -7 -80 25 -52 80 127 -44 36 -50 26 -53 23 45 33 48 77 -39 33 85 56 -3 87 8 -19 33 76 -119 69 -78 36 -77 22 68 102 97 22 -52 75 -4 77 1 57 112 46 89 -25 73 56 7 -17 28 -16 -37 70 30 105 87 -3 3 61 7 70 109 -12 1 24 34 16 -21 -72 99 23 76 -19 -126 -48 -25 -13 9 127 -31 -33 -9 87 -3 -17 52 -61 7 -13 16 1 39 -17 13 63 -14 26 -5 -1 -46 48 -94 32 -16 -9 3 47 39 -15 -18 43 -40 -28 9 -9 -26 -40 57 -5 56 73 -99 101 -27 19 30 47 25 -72 -30 -32 120 -49 45 26 9 40 76 6 24 2 -1 -5 -13 -68 -16 -17 127 -2 14 76 18 -68 45 -55 18 -14 24 -1 -62 -55 -31 25 -45 -11 52 116 38 -18 53 -113 -20 -98 -23 29 67 51 -14 -35 30 -69 23 -31 -65 -95 14 75 -11 33 -12 -29 -16 -30 -119 36 52 5 37 19 2 57 -36 25 -96 11 40 71 -101 -60 -15 33 33 69 18 -39 13 21 7 12 24 20 -46 69 33 56 53 47 -87 -47 -22 -22 14 0 -52 22 -12 -38 58 -51 -68 11 -64 -30 -30 -33 -4 -47 94 -27 -19 -32 -10 -14 85 10 -91 48 43 -10 41 -66 23 76 47 20 -60 -40 -5 -54 41 45 14 61 -38 -6 -123 -98 -68 11 -111 17 22 53 -24 -2 -90 -9 -26 4 -61 38 -22 -58 -38 81 -20 -109 22 -66 -33 -56 29 -38 -50 -19 14 -4 69 10 34 26 0 -12 23 -21 2 38 45 -2 56 -18 87 -19 15 -11 30 -33 20 85 -96 -72 5 -51 54 -24 62 -49 -21 -64 20 20 6 56 104 -42 22 72 -32 46 81 75 -22 -121 -100 -72 6 4 98 -62 18 4 -43 -65 46 65 -5 -54 109 19 69 -29 -18 15 -15 9 -45 -31 -16 -107 111 31 -27 -5 -82 26 -20 6 29 1 29 47 127 47 -45 5 48 -59 25 9 60 2 39 25 12 28 -21 -59 3 33 19 -23 -20 -75 53 -65 57 -39 -18 -34 5 10 68 23 16 -5 36 55 -12 -36 72 -102 -3 -1 -15 -3 28 -42 60 -75 -53 -59 9 54 -36 -42 -75 68 -82 28 56 2 89 -28 17 -68 -30 58 29 48 8 -10 10 24 5 100 120 -56 14 -70 8 -25 0 67 121 21 105 -19 21 41 37 29 119 20 -26 5 4 51 -107 40 -66 -32 41 71 -13 6 -33 31 -36 1 1 62 65 -55 -46 9 -115 50 -31 -31 11 -106 -45 66 70 54 -25 41 -35 -70 -48 -34 15 -30 -45 119 66 87 -112 -55 -24 126 38 -40 -87 55 7 -31 81 42 -32 -66 -50 22 66 -128 32 -22 -61 11 -45 32 22 -38 86 23 -56 17 9 -31 63 75 -15 115 71 35 37 -38 40 -45 -45 -23 61 -37 -17 104 -40 31 2 -21 -63 3 124 -28 -99 73 -22 112 -30 73 -9 73 -39 -22 37 -22 122 -51 40 -51 10 3 60 106 -91 61 -106 -17 -36 -126 54 0 83 17 58 4 114 -65 89 7 52 26 -18 -62 -92 58 17 -8 46 -19 -7 88 -113 -68 -10 -61 39 96 1 10 -91 -1 -37 -18 -95 53 11 25 -35 -8 -7 21 -10 -52 77 52 24 -17 -15 114 52 -7 44 -19 -43 60 8 107 -88 66 -47 34 -20 10 82 60 -15 21 26 17 47 -21 -9 53 16 96 65 37 14 33 52 72 71 -10 12 -118 -26 17 8 28 -5 -85 -35 19 13 66 91 -11 19 -5 -60 48 60 -79 69 9 -11 -2 -83 -25 7 -8 -90 26 26 -19 -51 -9 36 -34 -2 -3 27 -66 53 58 12 -14 4 43 -26 -31 63 -58 -68 96 -76 74 -51 37 8 9 32 -24 -29 -68 -39 46 70 14 -28 7 -29 73 27 22 84 -60 37 -26 1 37 -12 24 79 -93 37 -96 -51 -17 7 -2 29 45 25 -26 10 49 -18 49 36 21 75 48 -30 25 56 15 -16 39 -26 -28 82 -74 22 38 -19 90 85 7 -49 -10 -27 -37 -30 41 66 -22 -11 -28 -2 -32 -6 -24 -32 62 -2 -15 -37 -12 65 14 76 127 23 20 26 28 -37 -88 -21 -4 -100 -21 -38 27 54 -41 -61 -55 76 64 0 -18 25 2 18 -32 8 -103 -12 -24 -87 127 -39 0 15 31 22 84 61 32 20 -74 28 -32 33 16 8 -24 -36 1 -52 45 6 -114 -84 -127 1 -58 26 -26 -60 32 -69 -47 127 63 6 85 84 71 -29 63 -10 22 30 71 83 61 37 26 8 -45 20 -70 47 -73 -1 61 69 76 56 51 -9 -25 -75 -103 85 -28 34 -40 -10 62 56 41 34 -64 51 24 -127 22 45 58 21 -23 9 -73 -28 17 53 -60 72 -57 22 -31 -26 -5 -45 -50 -35 -26 45 16 2 36 -8 39 127 71 11 -11 -6 59 -5 115 48 -17 -38 18 -37 1 72 -11 -34 -21 -38 -11 -37 0 34 -27 1 3 6 59 1 -13 -78 -11 -44 41 30 1 -32 -19 9 13 16 20 45 -64 -43 -77 -2 -24 -35 35 -5 65 -51 -18 41 3 -30 -13 1 23 35 6 -51 -62 14 -73 46 71 -46 -13 53 -22 14 93 15 -52 35 -20 29 -94 95 37 -112 -23 20 -83 12 34 -24 -18 8 24 68 -48 -68 50 -4 -5 -8 -12 28 -45 -37 -15 56 -65 -59 -117 95 8 63 5 40 40 -26 -10 -95 -57 18 -56 -111 49 74 -37 -75 37 -10 46 -2 63 -37 127 12 43 -32 -105 -34 -128 23 68 -31 53 -52 -38 4 10 36 127 -17 -46 6 61 76 -17 30 34 -117 -86 34 -17 123 7 31 11 44 -38 -10 -83 51 65 -81 44 63 -96 9 105 18 -1 79 -81 -13 48 34 -41 48 86 -40 90 19 28 127 -1 64 -62 -16 -82 42 -37 -95 53 73 81 90 -18 46 7 -99 18 73 -80 -70 -7 46 51 -27 -12 8 -3 12 19 -27 74 75 -37 89 -29 -35 39 7 41 -1 42 -4 34 41 49 -48 -70 -23 3 40 -80 29 37 46 93 110 -55 25 111 -56 -47 27 -54 -86 33 -19 33 39 -12 59 -11 54 -74 -1 20 -60 77 8 -70 70 22 -13 36 -32 -28 -44 -17 -19 57 68 3 -21 96 20 -7 -24 33 121 -8 5 -25 24 28 -50 25 -25 6 89 105 -16 36 8 6 -10 91 -61 8 28 98 42 2 41 -80 14 94 -21 -69 -27 39 17 70 -12 45 48 26 65 40 5 -13 32 -69 87 -37 42 16 11 -44 31 69 -22 14 3 -20 -40 17 14 -4 -2 -13 36 90 27 -5 4 5 -12 30 39 -5 -107 3 -22 -45 53 -44 -35 -55 5 10 -26 -59 -20 47 58 21 -19 -29 10 -30 37 -37 -37 -16 -40 22 -63 26 -28 35 -54 11 79 15 -50 -32 -24 -41 20 51 81 -52 -88 20 -41 -38 -55 -38 -44 26 36 37 -18 21 -28 75 -16 -52 56 37 -19 4 48 -12 -16 -45 100 -1 -66 -38 -30 -42 -28 -48 -3 43 29 -53 1 -26 -28 45 -45 45 -39 -22 26 73 -22 0 31 -12 17 46 18 38 -48 15 -20 32 6 45 20 -3 67 -63 -98 6 100 22 -50 21 -12 37 -17 20 75 -96 -3 7 67 51 88 12 82 65 37 14 -22 -29 68 -81 -2 2 21 -21 55 -44 -110 -39 54 77 39 76 16 41 25 33 111 -27 -3 44 -45 -73 23 -21 16 56 -60 -44 -83 -14 76 67 28 71 -5 17 122 -82 -46 55 44 52 -59 -34 17 46 12 61 32 26 -38 46 -31 60 -36 -52 12 -11 63 -47 22 -65 -21 -40 -32 1 -11 -53 21 51 -63 111 51 3 36 53 -122 6 49 -69 1 -28 -60 -39 50 -101 -45 43 -23 32 30 -49 -77 98 -15 -6 -62 -20 7 92 -24 12 58 8 4 19 -64 -105 -96 -58 12 -11 -4 -91 -51 69 28 -60 -125 -58 -12 42 67 66 3 -14 1 86 -59 85 -72 -43 8 95 22 7 -30 89 85 -49 33 15 28 33 14 -9 -8 -42 34 -32 62 -96 -34 64 6 34 49 87 62 -26 -90 -39 -55 -38 121 -17 13 -53 76 -84 22 69 105 -6 39 -66 9 69 -6 54 -54 10 -24 16 127 46 76 -43 -101 14 -17 14 -2 -3 44 6 -31 63 -18 -90 1 34 -39 -21 -55 -7 7 6 -13 55 65 -48 -44 -39 -127 -15 -78 -24 -115 -82 126 -63 47 44 5 7 -31 -37 -29 72 28 -48 14 -24 -123 48 -50 87 -10 -125 -73 23 19 -80 59 -11 -3 19 14 13 -28 -29 73 -23 -22 -56 -63 -33 -57 11 58 -23 -19 0 25 -60 -9 -38 -46 -107 -77 10 -80 -107 -38 -71 -50 -51 22 -28 -76 -47 -50 9 -37 8 59 0 -59 -27 20 67 -24 26 -8 -84 10 -66 -71 -62 -25 33 -41 -52 -83 -26 77 -25 -57 0 -52 23 -47 -52 -4 86 -72 42 -111 76 -34 -42 17 -30 -71 19 -33 -99 -77 -105 20 -39 -31 -2 50 -12 -50 -89 -2 23 28 -73 -50 -33 -74 -3 -40 -40 -53 -14 -21 -15 18 -48 -27 -26 9 50 -2 15 -96 24 7 4 75 -13 105 36 0 42 -15 -40 -77 -23 4 -29 -13 -71 62 14 23 -32 33 -15 -42 28 19 -19 -35 -64 28 -42 33 -46 -27 -11 -69 -5 4 -18 23 20 -24 10 0 -25 -27 -2 -53 -16 8 -46 -28 -14 -111 58 -44 124 20 6 41 46 36 1 -35 8 11 62 59 -23 25 -37 -13 40 29 -52 28 103 -42 -22 -9 13 33 14 -44 -33 -61 24 -5 44 7 68 -32 45 -36 2 -30 -29 -74 -34 23 20 -25 -21 -33 66 -3 -40 98 -53 -5 -68 25 -36 -12 17 58 35 19 -12 -85 3 -15 -12 -15 -21 28 -7 -12 80 8 30 -57 -55 26 -26 6 -4 3 -73 -8 -74 17 -19 -11 -25 -2 13 -7 67 10 -19 -36 -8 26 51 19 -14 -46 -7 37 8 13 6 48 74 44 -40 4 1 -14 -58 0 -11 -21 -29 6 4 -75 -35 -40 33 -31 -42 -120 -87 -4 -13 61 31 37 -37 -29 33 1 24 -27 -6 -58 14 -77 9 39 -49 -39 45 -76 -71 36 -5 45 -47 19 -18 -77 -28 -34 -66 -40 -58 57 -60 45 -2 -43 -127 -53 -66 -45 -117 -103 -25 -36 31 -123 -71 4 -49 -43 7 -117 -10 -26 127 -110 -47 -68 -41 53 -34 -69 -114 -123 -31 67 -85 -41 3 -28 -43 -34 -122 -89 -112 50 19 40 13 -90 21 25 -17 -17 -1 92 60 -12 -107 -95 124 104 -33 62 38 -62 -19 -94 -20 77 31 -1 -2 -25 -58 -31 73 62 30 -38 27 54 75 -25 23 9 -6 -68 -42 63 13 -26 7 13 38 -8 -67 -41 -11 44 -7 -24 -25 -83 -15 64 36 -48 -65 -103 19 -78 92 -69 17 -30 15 -81 -77 43 39 53 57 -54 -62 -47 54 26 9 53 -28 -63 40 -70 3 -33 -6 -92 -9 -31 -21 22 -31 -32 7 -128 -50 61 34 -26 50 50 25 -31 -17 -28 -14 23 -5 65 -62 27 -69 53 -123 -46 27 67 25 -16 -37 83 -82 39 -76 -18 10 37 5 -10 65 -40 -27 1 -19 87 -65 -53 52 6 46 59 59 59 -5 -36 126 -76 -126 -11 -31 -60 -59 -39 36 -63 54 -20 -22 19 -49 29 83 32 41 52 -42 -52 -32 65 15 6 -52 -126 -42 -40 -76 -114 -8 23 -56 60 -16 51 -20 14 -93 51 -16 21 46 79 70 36 -9 -12 -16 1 94 59 -65 55 -11 29 -60 -25 89 -6 126 22 33 -78 -23 0 62 59 73 -38 100 -37 -92 43 26 50 -20 -7 9 -19 -4 58 11 16 127 -15 82 40 17 78 4 10 -55 76 25 54 -25 69 9 -61 -81 67 22 71 -95 35 19 47 -26 39 -19 -35 27 58 7 -24 55 15 17 -65 -41 127 8 10 21 -102 -11 -11 -24 -13 82 94 2 -41 72 19 12 -43 41 127 -63 16 9 -28 69 -57 107 4 2 -9 -80 -20 -18 -27 30 7 63 12 7 -33 11 56 60 -19 49 41 99 -86 42 16 -51 -55 0 4 -28 31 -10 -26 -36 -1 -65 30 -104 69 -28 29 5 36 -17 62 33 14 52 26 -27 -5 8 115 -113 -13 34 82 -18 34 -47 1 -21 -57 66 87 -58 22 9 27 8 1 -127 -14 28 16 -27 -25 -86 -26 87 34 -48 15 -31 22 -67 -12 -6 42 18 6 124 -17 -42 -19 -5 -45 -60 97 -21 126 -37 39 74 49 31 -43 2 12 33 -60 45 -28 39 50 22 -35 -47 -55 13 34 12 3 -37 61 99 -110 -11 -25 -37 11 35 122 52 -68 -87 -22 -14 -65 -90 -71 -6 94 83 29 32 61 -15 -31 -4 63 -23 61 49 -24 30 56 -41 57 6 48 94 47 -50 -83 37 -66 31 104 -92 -20 45 -57 -90 9 48 31 -2 54 9 26 -82 -22 48 -44 -2 -90 29 27 2 -2 18 -25 17 81 5 2 -123 -39 -42 117 2 10 -5 -27 56 -21 56 92 12 55 -82 -17 -5 -6 -24 -11 -33 -15 -72 -73 2 15 100 61 -128 71 87 -56 37 127 19 16 107 62 40 -33 -126 116 56 31 -15 -62 -3 86 -65 45 -37 -25 -51 0 -67 62 -1 -2 -3 6 11 -59 127 -41 70 -43 -53 49 65 -87 82 -95 -125 -85 -51 15 -3 9 62 -47 48 5 77 -42 78 28 -15 76 -20 13 78 0 -1 -22 -61 -30 -74 -44 -46 64 36 124 -12 -107 50 -37 70 77 -99 79 -1 82 97 -71 27 98 -106 -128 -64 79 -61 -19 4 -20 30 -23 -23 -33 -21 -48 -40 -20 84 13 -114 32 -60 46 -33 -4 42 -116 -10 70 -13 -71 -17 -36 7 -102 -123 3 -37 70 15 -9 27 -106 -36 -112 76 -46 -11 -63 -42 -23 -38 -86 -127 44 66 -11 45 23 11 66 -41 -54 -62 -15 9 14 -42 -14 14 -11 105 -120 2 64 -11 38 -27 67 -17 29 55 -7 21 -16 -12 20 -14 -6 76 46 -46 -13 -68 -14 -6 57 -120 73 -60 -36 4 28 57 8 33 83 27 -19 -66 -75 -1 -11 23 -55 53 -45 45 33 74 -18 -28 87 -33 49 -69 106 43 11 10 34 40 -13 -50 -34 -18 -33 41 8 -39 -20 50 33 39 59 8 -104 -9 -27 -59 -104 38 48 38 -43 46 17 -77 -3 64 -45 -39 -43 86 13 -78 26 126 -43 21 -45 -54 -24 -65 33 -50 -2 -1 56 -92 32 -4 19 -32 -123 39 7 17 19 41 49 10 -1 12 42 -38 19 -17 -87 -27 -19 14 -43 36 -2 111 -1 -38 -31 36 -113 -93 48 14 6 60 -36 5 -3 17 13 0 -46 -30 57 6 -24 -53 7 -18 -5 20 -6 18 43 6 15 -127 -46 -9 63 -20 15 47 -8 -50 -119 -31 -108 -2 -90 49 48 -79 -11 42 18 50 12 9 -19 -49 -87 -50 8 36 -9 -4 30 4 18 26 91 -21 68 -40 71 -34 -33 13 16 51 33 -20 -35 55 -34 -22 53 46 38 -6 -49 -24 11 -25 28 -41 -17 30 -8 1 -7 -46 -44 8 5 11 -17 21 12 -91 -33 6 -27 -75 22 -26 -1 99 12 30 -9 10 -22 -24 -125 -49 -43 -9 26 6 -3 -17 41 -72 -38 -9 23 10 -10 -19 42 -23 -52 39 38 -62 -56 -8 40 1 -16 -23 57 27 -2 -33 41 -15 -10 -32 -44 44 -18 -10 -123 34 14 38 -60 22 33 -20 24 18 -103 -11 40 38 4 9 12 -13 67 -31 59 -9 9 4 15 -7 9 55 1 -41 5 22 -61 -112 23 33 -36 -14 14 30 32 7 11 18 -33 -62 -15 -18 0 -36 -24 22 -38 -9 -30 21 48 17 64 -1 57 -2 -20 15 -89 18 17 84 47 -8 25 4 0 16 9 -13 -3 -62 94 -26 -11 33 -12 -39 -40 13 35 20 22 -26 -15 126 19 -65 -20 -63 -2 -58 12 46 -3 -6 -4 49 -41 58 127 -46 64 121 24 51 -13 -21 -117 34 34 -103 -25 -38 72 -90 39 -4 -2 82 63 64 54 30 -24 78 -25 -123 103 33 48 93 -1 -8 8 -4 -21 -64 -9 -10 96 -52 -37 -36 30 78 -36 -80 -89 -23 56 48 70 25 -55 114 55 97 32 27 -32 -49 -8 34 -59 -20 -60 -70 -66 -46 -7 -110 -66 -58 -10 -37 -50 -31 10 22 -2 71 17 -26 -67 8 18 -26 55 31 40 -15 -76 9 -36 20 25 51 49 -44 36 19 -36 -2 -117 -25 -122 -25 16 14 28 12 18 -25 19 -34 30 1 -39 15 -27 33 -31 0 -14 66 1 8 -8 -32 -15 8 -36 10 52 26 2 -13 -125 -32 2 -116 -20 -50 -75 25 5 -26 -55 -22 32 -2 -56 -15 8 -37 -40 -45 12 -36 -48 21 -11 -38 -8 -35 -73 -22 -6 -122 -13 38 -45 -41 15 -84 14 80 -44 -4 -27 47 -37 35 9 -21 -60 -87 118 53 -72 4 -35 -80 17 47 -114 -30 -14 91 25 -97 16 35 -87 -19 30 -12 -12 90 -9 51 32 75 127 -13 -65 -80 -29 -51 29 -38 27 15 14 88 23 -50 -21 -11 15 -4 -41 -10 -37 -1 -27 -37 23 -76 14 -10 -16 54 -1 -52 -84 94 2 59 -67 21 -18 -3 27 61 60 2 -6 -42 -17 -125 -32 50 10 -46 -76 101 -1 9 6 57 -98 18 56 38 21 -22 -60 61 -17 -4 124 38 -29 3 -47 11 49 28 14 41 2 119 -21 -4 40 -42 126 35 69 20 82 10 24 -63 -44 23 -2 3 15 91 -71 28 63 59 40 -44 47 118 -20 -74 108 -22 52 5 -14 34 11 -58 1 -16 103 -34 -31 40 0 22 37 100 22 12 6 82 64 -107 46 -33 -111 -51 -46 -69 -53 56 -56 30 40 -44 -11 55 11 -49 39 -89 17 121 77 11 -19 61 3 -34 -21 -2 -4 -2 -5 1 81 25 -22 -88 -38 27 111 2 -4 -39 0 -16 -29 -19 -81 -57 41 -18 -4 -45 24 -55 -26 8 -4 49 -23 -67 -78 32 -37 -11 -26 58 3 18 -26 -9 17 -48 52 -38 5 73 -4 7 -51 78 35 -48 22 -30 14 -10 24 63 2 -122 -24 -4 20 -2 11 -23 50 16 -68 -10 -27 25 7 -24 -9 16 -49 2 -34 1 21 16 3 32 -57 1 56 -50 -73 -67 -69 17 10 -65 15 -34 42 -91 23 9 27 14 4 -15 6 -15 -28 -68 48 40 -62 26 0 123 -62 -47 -3 -15 11 2 18 -45 -12 -16 -38 -2 30 41 -77 -12 85 12 -7 -70 48 -20 21 -47 64 47 -1 -13 -16 -11 -74 -10 -24 65 20 10 2 31 -42 -41 -10 -52 19 102 47 9 -78 -96 11 -13 -2 -107 0 -48 -66 15 5 -22 -54 110 -50 -24 61 13 29 -11 10 57 1 -26 53 -80 -2 10 123 72 31 89 35 -11 71 -48 52 -1 -3 -44 13 51 12 -23 -8 29 17 110 81 -24 39 -17 -13 82 2 79 59 76 -56 6 77 14 -73 -53 -60 -43 -49 126 -2 84 24 82 -1 -17 5 67 -58 -56 -28 62 -4 126 127 5 90 7 39 24 49 -77 -72 -9 -37 -16 21 33 62 44 -15 -45 50 65 -17 12 85 13 122 45 -11 -32 -39 84 -42 -33 25 70 -2 44 68 7 -47 -22 34 7 14 -17 1 -6 -26 0 -36 53 86 -8 -36 -70 -88 -125 64 -77 4 51 117 4 -21 79 72 42 -62 31 -58 4 41 33 74 31 -14 32 84 -1 -21 21 -127 -49 28 -44 59 16 -106 -107 48 108 3 39 28 -30 -19 9 49 67 -37 11 -48 -51 -36 65 -25 -16 -5 14 1 -29 32 27 48 54 6 57 2 63 78 -55 -5 56 53 29 -5 97 -5 -16 -104 66 -13 43 61 -24 -46 -21 -22 -80 -65 39 5 -91 -58 -71 105 2 6 -113 -62 -30 -6 66 -18 -51 33 -109 37 -100 -78 -47 4 24 79 -53 -32 -29 -25 -14 80 -125 2 -51 -48 -24 125 71 33 -10 -21 -42 -37 -30 38 4 -56 -40 -84 8 16 81 -42 -9 31 21 119 127 -52 91 -81 -124 -121 -115 14 -8 80 -71 -21 6 64 -122 -1 -4 49 28 21 101 24 24 -72 54 -16 -45 35 46 49 17 -3 43 -76 -41 68 -31 -38 43 -57 -6 -20 -70 -17 46 -13 38 25 52 58 -55 -12 -14 13 -121 -24 -3 34 31 -20 99 -20 8 -65 -2 -102 -75 -15 -44 -69 -38 82 -89 79 12 -123 -13 114 24 -124 -22 -46 -38 -127 10 -36 -126 -1 -99 5 -43 -87 -120 61 -38 15 13 36 -71 -78 15 -1 22 -11 -28 -19 -26 -104 -72 33 -65 99 -44 42 50 73 -14 0 -60 -26 -21 15 -27 -3 32 55 -36 -93 25 36 39 5 -11 37 -38 -79 64 -19 -24 -7 21 -37 -60 -1 3 5 4 -37 74 12 9 41 119 -41 62 -20 46 29 51 72 -7 13 73 66 -7 1 -53 49 27 -34 -11 -11 -22 3 52 -80 27 -18 -57 -86 -4 -20 66 42 -3 -57 -9 -23 54 36 124 -17 -17 86 -123 27 -26 71 -52 -50 9 36 19 -16 -60 -70 -85 27 -43 41 -106 -32 -5 -22 -17 44 56 -6 -30 32 87 44 24 -79 -70 -33 101 11 1 33 57 36 -52 -29 -13 32 -52 12 37 -29 -36 -14 -17 57 38 61 -38 30 18 -31 -84 -39 -5 -74 -70 -22 -31 10 -47 -19 1 30 -47 36 -53 58 32 58 -21 -1 63 -102 46 1 42 -67 -24 -38 -12 95 -10 61 -18 -33 -27 -34 -49 -10 49 -12 33 61 24 -55 -46 -5 7 4 -19 -32 -51 -30 -19 -72 -53 -66 -32 -24 -31 22 -67 -27 -45 34 -2 3 14 76 76 -31 -74 2 -71 -23 -37 -74 23 74 -54 -11 84 41 8 -102 -66 -20 -6 77 -107 6 -34 -91 -26 61 -38 -54 -101 -4 80 -55 66 -65 62 -10 119 60 98 42 -31 31 -110 -96 89 -100 20 -39 15 -3 -54 -4 -5 -8 16 -121 112 -9 63 -67 -95 -48 127 68 12 124 23 125 -51 125 -75 12 -70 38 3 62 18 80 96 -30 -83 -2 81 54 124 118 -7 70 27 64 -7 -52 68 -12 123 78 13 2 -54 10 -78 -42 -102 19 107 26 76 -6 60 20 0 -116 58 83 43 -12 -1 5 45 99 31 -20 -71 18 63 87 29 -6 95 84 86 -66 -16 61 59 52 -17 -9 78 64 -34 83 21 -38 14 -5 2 -31 24 14 -21 62 92 -17 -15 40 -32 73 10 18 -4 -12 127 -4 35 11 -12 -73 26 24 -34 2 -33 5 14 40 7 63 66 -47 37 32 17 -125 102 24 1 -7 100 98 6 -54 108 74 46 -5 -72 -11 102 54 -47 -9 1 -104 17 38 -45 43 -3 -25 -56 -45 -5 18 -71 -2 44 -78 -41 39 -125 -46 65 47 106 -13 12 -60 -7 -65 127 -52 -119 56 5 35 20 4 -4 -55 -75 89 13 23 -27 50 -4 -127 65 -28 126 51 -90 127 -93 -115 -16 -42 10 -45 -73 123 5 -60 -6 -37 -50 -61 -56 14 37 118 -24 54 45 20 -41 33 -3 -126 -26 13 40 -39 -24 -25 -37 -23 -68 -73 0 12 32 -124 -67 31 -1 76 -127 -29 -84 81 75 -69 53 -6 45 9 -90 121 -33 75 -98 -75 -28 -41 -72 -97 -60 8 -8 -34 -32 11 -104 120 -48 11 10 46 -27 58 -21 -70 8 -31 -55 55 -125 127 -12 27 46 93 -58 -42 -54 42 -23 101 -21 29 -31 -102 41 -127 -50 78 -21 60 127 -15 -8 -30 33 68 -9 -87 -103 -120 -127 -37 12 40 -43 -39 0 -72 100 9 -5 -27 38 18 13 105 -56 -24 6 8 -61 -45 -92 -30 -23 -96 -37 37 -15 89 2 18 26 6 44 -10 -119 -35 34 30 61 16 7 -5 -19 -42 49 38 -54 -6 -4 21 110 -10 92 57 -56 1 13 2 116 -1 18 -18 -105 87 -110 -127 -98 -116 -63 80 40 -31 87 -78 33 -78 -21 -30 -126 -34 -33 -77 -30 54 -78 -125 -1 61 -32 -42 -63 -81 1 13 -72 18 -1 -63 45 -21 -1 30 72 21 -45 1 -24 -16 23 -45 30 15 24 -45 -118 -7 99 -32 73 115 -61 -48 -99 54 126 3 -123 24 -124 73 76 -51 19 80 76 51 12 -115 121 -123 -45 -79 -17 80 101 24 -65 -69 9 -114 -127 59 72 31 58 -76 120 29 -16 -127 -49 -111 -58 60 59 -33 -6 -39 4 -99 35 58 50 17 127 100 81 -57 -56 -29 47 40 -15 91 8 21 -33 77 45 -87 -20 -23 -84 47 53 96 -96 -128 -102 -50 -86 127 -24 32 -21 -18 3 1 -65 -82 -3 17 37 4 27 4 75 -38 7 -64 10 67 11 -16 -70 49 31 9 33 -21 -89 22 85 103 -8 48 18 -65 81 -1 55 43 127 22 -46 46 40 23 1 29 13 4 92 20 27 66 -53 74 -20 -21 45 -15 78 -4 99 -66 29 53 5 77 -4 61 35 49 -31 21 -117 -26 -1 -6 100 23 35 -7 3 -25 -19 27 8 -10 -79 53 -65 -11 14 -44 -1 -52 88 -71 15 -31 94 1 -24 -11 102 26 -11 11 0 22 38 -23 -84 -65 30 3 -9 -5 18 -3 -13 4 31 -26 23 2 37 52 -19 14 76 26 2 -12 22 -3 62 -9 12 -1 34 -15 24 -10 8 -7 22 -21 0 26 6 -1 -1 -30 5 69 20 52 35 38 -22 -30 -38 -40 4 18 -41 23 19 -37 -46 -82 18 -26 12 -63 25 -70 41 -66 -43 28 2 -12 -12 -7 -17 64 -53 -17 -18 4 10 24 13 41 36 -27 -25 18 -59 41 13 8 15 -9 -44 -48 -83 84 -4 78 -95 38 -26 -86 36 -31 10 7 -81 -7 -90 -122 58 -40 42 -7 -30 54 28 -33 22 -74 -9 127 73 8 -30 -14 -88 -15 47 46 9 43 7 -51 -61 -40 29 -64 124 18 -61 -3 -22 76 5 -14 15 24 9 -70 -63 21 -44 10 -51 49 -29 -13 -8 -48 -34 19 -56 24 -38 35 3 -2 -69 -78 -11 -67 -23 0 -34 21 -128 20 -33 42 -21 -74 45 70 24 118 66 35 -2 9 121 -115 52 72 68 60 27 -6 54 -73 -56 -22 -72 82 37 43 -52 20 8 4 38 110 77 95 -15 54 66 64 -2 12 33 53 -5 16 23 -2 -69 -37 59 40 -3 -87 32 82 42 51 -33 21 113 103 -43 70 -19 21 50 122 -64 -61 45 -41 61 8 -9 73 60 54 -28 24 24 -106 -26 -15 97 51 -4 -54 -7 105 -43 -61 121 -84 85 20 2 -35 -41 -41 77 -23 -13 27 -73 -13 -35 -37 4 28 122 -15 17 16 30 101 -67 28 -10 -45 18 -11 5 17 -10 -91 -28 74 -22 -26 -84 4 10 29 -18 33 21 -26 -84 14 56 -37 35 9 -73 -12 50 -18 -55 0 32 97 15 -35 -29 0 -36 -64 -45 80 16 6 22 40 -10 34 -20 -66 5 -9 -128 -37 -50 -3 -46 -24 -29 -51 44 23 123 -61 126 71 16 -1 -59 21 -69 -55 24 110 -46 -79 68 -50 -76 98 -17 79 -57 -2 46 -48 5 65 52 -38 -13 -18 -98 32 2 21 -27 -37 21 -6 33 -57 -76 -45 -24 56 -32 -62 94 20 1 46 -82 -46 -123 46 -50 127 -2 -33 110 -16 -54 -6 97 -49 18 -3 36 -2 -37 103 -5 88 49 -17 -1 -92 39 33 -27 -4 -21 -99 15 -53 25 44 51 127 24 37 -4 9 -46 16 66 -27 0 6 46 -45 -27 100 -43 30 0 11 68 -13 -122 -1 -4 56 29 64 18 29 25 39 -65 -38 37 -14 -110 40 45 -27 38 3 5 16 87 70 -2 18 -43 1 21 -47 45 -1 -11 24 -61 -93 -29 15 -33 -43 4 25 -28 99 -13 -24 -21 -65 -26 -13 -18 28 24 -74 -122 -26 -34 59 85 -62 -125 30 -20 -46 -49 -72 -9 -7 -44 -49 -60 -107 30 28 -65 -102 31 -14 -93 17 -89 -4 79 6 -44 -25 63 -7 33 69 -7 -88 69 9 4 -24 4 -38 7 30 43 -34 -19 15 24 -20 -6 68 2 -21 -62 -2 74 -41 29 55 93 -11 74 -23 34 22 3 12 -40 30 -42 -37 -8 -96 -3 -85 -35 -4 127 -24 55 -20 -33 -57 -22 100 44 6 40 -41 -7 31 15 -72 61 11 -88 44 111 -71 32 20 21 -35 -60 93 44 21 -68 27 12 47 -13 -19 -36 -44 -3 6 7 8 -5 11 -48 50 12 37 -37 10 -17 -22 1 22 36 32 -127 -16 -85 -68 43 53 15 55 -47 -29 -60 -13 57 -98 34 97 -25 27 -3 24 -85 -9 4 35 32 58 -72 47 -42 -73 10 -4 63 -64 -1 31 -47 -1 6 35 -12 71 -4 -44 -84 3 20 1 -34 2 123 -22 14 -58 -40 -41 -40 -29 14 -62 32 -18 42 18 -29 -12 16 -50 -56 -32 -21 60 -28 -23 -16 29 105 -4 29 -21 41 -14 68 -39 -34 -57 31 -4 -25 -87 -69 -3 34 10 -51 -15 14 -31 77 2 -9 1 72 76 -18 67 32 85 -11 -44 -13 -102 -89 -86 -8 11 -36 126 9 54 -4 67 38 41 10 96 118 -24 110 30 -79 79 48 -90 18 -8 -31 4 61 91 27 116 23 -11 116 38 65 64 17 7 42 0 -1 47 42 57 80 -80 88 -37 -93 38 21 63 -21 105 -13 46 53 52 72 -46 54 4 75 68 82 -49 -84 57 96 37 -69 18 37 -59 -40 49 -32 26 125 -12 -54 43 7 -27 -128 -49 64 -11 -65 -52 46 50 7 57 32 69 31 -91 127 -72 45 90 -110 -20 -5 125 112 -126 127 -88 -14 12 28 -86 -10 -66 51 -24 20 -9 -57 3 -13 41 -44 46 -53 37 -2 24 45 -41 6 15 -65 -106 23 -2 -19 -92 -40 -5 -71 -9 -94 -59 -13 -74 -62 32 -45 18 -10 -94 -5 25 52 45 3 10 -97 -100 -126 -55 -22 -64 -74 57 -126 -72 -57 -72 -24 29 119 -69 -71 -35 22 -27 -7 17 30 -22 -35 -49 7 -5 22 -10 103 -83 -88 60 74 -23 127 -1 40 -7 8 -88 33 -62 -51 45 37 -8 13 -64 -46 -62 64 126 61 -66 60 -3 -27 33 -9 14 -48 -39 21 5 79 -19 1 -53 -10 71 -15 15 -2 -42 60 -10 13 4 -6 -26 -81 -44 -13 23 33 112 65 2 56 36 17 70 -37 -26 25 -60 -50 -32 -16 -54 -108 77 40 50 32 21 6 0 40 -23 -49 -72 -45 -16 -19 81 4 84 -14 97 58 36 49 -55 -31 14 30 42 91 114 50 40 -9 -17 -25 69 -105 86 16 1 64 3 -14 65 74 31 56 -35 120 -46 -64 -5 18 18 53 -18 15 47 -11 -46 75 5 60 -14 -27 21 88 47 42 32 23 68 127 117 -47 114 1 55 -5 72 -37 3 21 53 22 -15 72 26 127 125 -10 115 81 48 77 47 -65 1 -47 -104 37 -9 -26 17 47 -12 9 0 -14 34 -50 -40 25 7 -82 -6 50 30 -2 -4 -20 58 82 -39 12 -12 3 -29 -8 10 35 44 19 -56 0 -80 -14 -28 19 -45 5 -13 12 -58 -9 -25 -26 -51 -17 -21 -106 48 -17 -41 0 7 47 -31 32 26 8 -38 17 28 -14 3 -24 -13 40 -56 -8 -21 -22 -4 -26 53 3 11 -6 -43 45 37 -32 -53 -35 11 -27 -84 -91 -11 45 -75 24 0 -50 -19 -55 -88 -12 -32 -13 -22 -22 -16 37 -25 7 -61 15 39 -26 -1 -4 -31 -8 34 31 -69 3 83 24 -28 -4 35 -21 31 1 -6 71 -38 -7 0 62 -38 4 52 -57 22 8 -4 -32 6 14 10 -11 3 -46 -8 3 -7 25 2 -5 21 36 -48 15 49 -13 -29 6 -9 5 22 -13 24 122 -27 -22 -10 24 29 -21 10 9 -21 -7 11 -37 24 -15 -14 90 -22 -92 35 -11 -10 -20 -19 36 37 67 -10 21 -23 -34 21 -4 -38 -17 4 37 1 25 98 32 53 65 24 -44 13 13 8 9 29 32 -44 -13 26 15 -51 51 -15 24 38 -22 -1 77 -29 -39 74 -8 27 -58 -5 67 -41 9 40 19 44 -30 -36 42 29 124 80 111 71 -4 121 -17 48 10 12 -2 15 17 12 -6 21 -15 86 -62 -62 -10 -2 -53 -9 39 67 66 -89 -9 -7 -16 33 -41 39 74 45 -59 76 25 -13 4 -26 -43 16 -64 30 39 4 -12 7 -90 23 -25 -37 -1 27 58 -33 -15 -5 17 -24 -22 19 49 122 -79 -44 -25 33 -11 81 1 -22 -13 -1 26 3 73 14 31 26 -58 95 -29 -65 31 13 47 26 -54 68 22 41 37 -1 -40 24 38 -18 27 61 -6 23 -90 97 9 -49 12 77 67 33 -22 56 77 -35 0 32 40 -24 16 -109 8 8 -83 3 4 38 -11 22 20 91 60 -44 3 70 48 -17 18 32 31 38 -31 -34 14 110 4 59 -47 -6 -31 62 -36 105 27 45 -128 -19 -94 58 -81 -20 -126 -47 -101 8 103 -41 -78 -10 -128 7 31 -71 76 -44 127 13 -41 -88 -20 -39 -77 127 -27 69 21 -4 -32 58 -36 53 -124 30 1 24 -117 -6 -1 -71 48 22 125 -34 83 13 -98 -43 -4 126 -9 -124 41 15 -128 -122 -60 -5 -76 86 -114 72 -10 42 -55 34 68 36 -35 72 -13 8 -30 -40 112 -13 -35 22 -8 125 -38 42 41 -51 -101 19 -51 -53 -53 28 53 -26 81 127 -2 -35 -77 -4 56 -56 -97 -123 40 5 -107 20 -54 -7 112 11 117 -98 38 -65 -72 -101 -42 -22 16 28 50 -19 21 33 -48 -34 -26 24 -22 -10 -42 7 -15 -40 24 -59 3 37 78 -36 115 76 45 0 69 -39 -128 11 -31 46 -116 1 -111 -81 -116 -38 -23 9 14 -7 -2 104 73 -25 65 -8 -69 48 81 -31 9 -62 -57 4 -3 -66 -95 -57 -19 -57 46 15 -70 14 -5 -3 24 20 -24 32 -15 33 -13 -48 -47 -1 39 -100 -54 38 -9 49 3 59 60 74 82 39 46 65 15 11 -63 -14 -34 9 -6 22 40 50 -28 38 -11 -62 -10 -35 18 40 -68 -52 -1 39 29 -96 -5 -28 -73 -52 -56 14 10 25 -9 -9 -69 -37 -5 -11 38 46 -18 -23 -36 -3 -57 16 26 24 57 30 -34 42 0 12 -47 96 31 95 55 22 -62 11 -16 62 43 -100 -5 36 44 32 -26 -116 -37 -124 -43 48 -6 16 -67 -26 73 -7 -17 16 12 21 -34 76 -15 75 -58 -9 -55 -15 -22 126 -14 25 16 3 -13 -59 9 -36 -42 12 -9 -53 -96 -56 -11 13 43 -11 -49 63 1 -70 -2 -15 60 -26 71 -44 17 -52 -126 -94 74 -65 20 24 -38 2 -62 -66 -105 -46 24 50 -16 31 15 34 66 25 23 -6 -10 1 -50 -84 65 21 -44 18 -39 -32 91 32 -35 -10 27 -15 -53 -64 -16 32 -6 -71 -67 -62 -7 13 -34 -3 85 -33 79 -45 -42 -50 -71 -60 -33 10 1 -57 25 -57 9 -15 -33 14 -41 89 2 -16 -40 -28 -72 -32 30 -59 32 31 -127 -65 -63 -46 23 18 21 -44 -17 9 -2 9 62 -50 -126 -1 -20 -128 -7 16 -64 -52 18 -25 88 15 76 92 -87 -33 53 -5 -2 41 7 5 -17 72 -31 -5 3 -128 -68 -18 23 3 -35 -39 62 -30 -59 24 30 73 -30 -30 -17 -14 89 -4 48 20 63 -29 -107 -44 -15 -37 85 -28 -49 -77 -63 -37 -40 -33 58 -121 -68 1 27 2 -42 -32 -9 -48 -26 -33 -70 10 -29 20 -44 87 -20 12 51 7 -74 43 29 53 -24 6 -127 -30 -45 -41 24 5 58 -6 24 -17 78 63 -24 24 -13 15 -41 28 -26 27 -1 86 73 7 9 -3 -31 -66 -25 -35 18 -35 -38 -13 -31 -36 20 -16 64 -121 -54 24 -33 1 23 25 -48 7 -27 70 -2 57 -10 32 26 11 -18 41 -50 -19 105 -55 8 30 71 31 -2 -94 -82 -62 125 -41 -28 -20 35 56 -31 46 -23 -34 120 0 -75 -26 -70 -3 -47 16 -30 51 66 15 -11 5 -59 -59 32 -40 28 -50 28 82 -54 -16 48 -93 -2 2 37 68 -22 22 22 11 0 -39 2 -88 61 5 54 45 -51 22 -2 -30 -119 -70 -27 -31 -6 -14 -67 -18 17 -6 -12 -34 -5 51 46 44 -90 -79 -43 111 45 -9 124 -47 105 -27 -25 -63 61 55 -95 -90 -8 -15 39 -47 -45 1 81 68 -39 -46 62 59 -81 -97 35 -27 127 2 -69 -44 40 -70 -94 -25 -128 -99 114 -70 -41 -40 66 69 35 -64 107 -121 -30 50 40 -88 42 62 -44 -7 -38 95 96 33 -83 -73 -55 -46 -117 -55 -37 -84 -40 -87 -47 44 47 -77 -105 -46 -40 10 46 -69 -112 29 56 -32 19 -39 -106 -63 -28 -70 -26 -61 -65 73 116 89 19 33 -14 16 -31 59 6 63 54 42 -59 -65 -66 -54 3 -65 -89 21 43 -3 62 124 37 66 -47 -75 28 -6 27 -50 -26 114 -51 70 -54 20 -36 -81 -31 0 40 6 40 -118 -15 56 1 -79 -27 -30 -53 47 -75 87 12 -42 31 -101 53 103 91 27 26 121 -74 -53 -42 23 -100 74 27 -23 88 -3 -80 -48 17 52 15 32 7 25 -10 -21 -2 14 67 -18 -30 -25 44 1 -76 -46 -115 -61 -23 -19 -23 34 -60 69 18 -124 -13 43 -57 106 61 -59 -63 126 14 109 105 -15 -56 36 -51 -33 -32 -47 -31 15 -21 45 -76 -125 -17 15 83 86 123 37 -33 -81 -34 -42 -31 62 -106 -100 -15 -19 -97 -64 -63 -86 71 -80 -17 -56 80 1 53 -22 -71 -9 22 39 77 14 -125 -54 0 36 -26 85 62 -36 -7 -34 82 -29 -41 -22 94 18 127 52 26 106 -9 29 127 31 7 -5 89 -63 -50 95 28 -1 -12 6 31 56 105 -38 -5 3 46 47 73 -2 -38 -116 -40 78 -27 91 62 -115 -14 -45 8 -36 36 91 123 109 51 -105 -25 27 -74 27 -12 78 -11 -10 6 20 -4 101 57 -53 30 32 -12 -71 51 120 -83 11 -99 11 -71 -32 44 42 47 46 -93 -62 -42 -22 22 -2 -83 -52 13 -128 40 -27 -23 7 92 -16 8 -52 4 11 15 2 -21 -36 -11 -3 -15 69 45 -43 91 -16 68 24 -3 22 116 79 123 -128 -78 127 -9 -8 -78 -119 -18 -48 48 -121 -56 39 -59 -86 -45 86 76 -44 125 58 -59 -109 -36 100 69 43 29 37 73 50 -24 14 41 -33 53 72 23 49 50 121 -8 -1 127 106 99 61 -3 74 34 74 127 72 -45 9 62 31 -19 -14 -60 19 -35 -27 19 7 51 86 61 0 -4 -65 31 -83 50 -23 49 -2 -3 16 13 2 -65 42 105 -7 47 -4 -59 -39 18 -37 50 81 9 -21 -7 96 -20 -92 -34 46 -7 117 42 -117 -53 -7 -81 7 -12 71 -4 -77 -44 -54 47 -38 -53 -69 -33 -92 69 -8 67 69 -89 15 -101 40 12 -46 -33 -20 -81 26 3 -13 77 12 47 -66 -72 -24 34 8 -44 -9 -11 41 16 -16 -65 -84 -84 -125 -37 9 56 -6 -82 28 -66 -13 -67 -1 -26 -49 -8 4 29 -7 29 24 -27 -31 62 96 -5 29 -28 -36 9 -29 122 7 -18 -31 -128 -124 -57 29 -10 -73 31 -12 -69 -111 75 122 -124 4 26 27 -50 -121 -127 -29 -15 -27 -26 38 -72 -33 -47 99 -29 16 63 6 -30 17 122 26 109 19 -126 -40 -57 113 45 41 65 12 -22 29 -128 -35 -123 -45 20 -101 25 -16 -10 -107 -108 -24 -66 -84 112 18 70 -19 11 51 -50 -34 74 -52 -50 63 7 -39 -56 -116 49 9 64 22 14 -127 58 -7 -106 91 -31 -12 6 -18 34 -4 -21 -125 1 -49 -45 -25 -44 11 -22 -36 28 -8 51 11 -127 72 -1 95 73 -5 -125 -33 -24 14 -74 -76 66 -63 -100 -35 70 23 63 33 -56 21 -2 37 76 41 3 -38 81 59 -48 -46 4 -119 -64 -32 -50 -31 63 14 29 122 -6 2 -32 -29 66 84 -65 117 -62 -51 23 -49 7 38 -7 4 -98 64 -81 -17 80 -16 79 35 -37 27 -19 -91 -54 -74 18 -124 -20 -24 -65 5 7 19 69 -18 -59 26 18 63 -20 -17 -5 -76 -17 21 -40 -52 24 -127 4 -14 40 -17 -8 -65 -69 4 -35 -16 0 -62 76 -17 64 -16 52 -65 -29 88 16 7 35 -44 -53 -102 -35 -2 58 78 -38 17 24 127 34 -12 -22 -13 73 54 3 -43 110 116 -40 23 93 43 -50 79 41 61 -32 101 19 -36 -86 -93 -8 31 -41 -47 60 -55 51 18 -56 -29 -111 -65 -48 44 21 6 -20 67 -97 35 16 36 -11 21 61 -50 65 43 108 23 0 -111 -19 38 0 11 -16 114 78 40 27 6 48 42 45 105 33 67 111 -59 38 96 -26 -24 49 23 37 3 26 -2 -24 90 -21 3 34 29 33 36 8 -90 26 -53 58 -13 68 -28 70 -66 -19 44 48 68 -81 -18 45 22 54 127 -36 82 -2 -32 -13 11 63 -27 12 28 126 -14 -19 -12 -9 97 -17 21 -80 -76 -68 -9 12 -27 13 124 34 86 27 6 -12 -17 -51 -19 14 12 -4 -27 17 121 -32 5 5 -38 63 30 -30 -64 -25 24 -7 -30 5 -1 38 12 -110 -39 -30 70 -12 -58 -38 -17 24 8 35 68 -52 55 -28 -126 -71 19 -23 31 69 -25 -24 70 -46 44 73 9 -33 -38 24 7 -22 -9 -40 -15 -13 28 15 -5 64 -46 -25 -98 -4 -63 3 90 -15 2 32 -31 82 30 59 -3 18 13 -38 -36 2 -1 -27 -62 -64 -26 10 -29 17 -15 -90 -10 14 71 28 2 -102 -4 -53 12 73 3 -41 124 -19 49 96 -24 9 -73 -127 -35 -116 11 -39 -11 101 15 26 61 -36 9 -24 -46 -41 124 17 40 -32 -65 15 0 118 -84 75 46 -19 -99 15 -111 14 -12 55 -32 4 17 21 50 19 8 -3 -18 2 -21 -92 22 35 49 -7 44 -55 8 46 -19 -27 -73 -126 -29 -34 -40 34 2 46 65 -48 -103 22 23 0 -3 -39 23 -17 58 -85 23 66 127 -17 34 -6 49 -26 -63 9 80 -17 -38 14 -60 118 38 -28 -16 55 -38 55 -75 -11 -79 -20 -57 62 124 -101 76 8 12 -23 -36 19 -25 11 60 108 -19 16 -16 -70 -35 20 -89 76 57 55 113 -90 58 -126 -29 -102 -11 -115 57 20 7 25 17 -42 -12 41 80 71 73 -15 82 55 66 89 11 -49 -51 7 85 34 72 127 0 -22 25 68 -6 -111 -67 13 84 12 -43 -53 -14 31 53 26 12 29 21 30 51 -48 15 37 37 13 8 -25 -23 -20 -14 5 -73 53 -24 -27 18 -10 86 25 -5 -57 -72 -22 1 -6 80 -9 -49 30 -19 -35 -25 -18 -35 59 -54 17 34 45 15 -28 -32 12 -21 -14 0 -30 7 -18 35 -5 -46 23 41 33 11 41 57 -27 14 5 -31 -5 0 -45 -33 8 -32 49 -29 25 -37 -48 17 -29 22 25 7 -18 -37 23 2 7 19 -38 32 -53 -26 -77 50 57 -38 10 -48 -35 -1 42 16 -12 -53 -25 43 -39 -46 -26 -28 -6 -11 16 42 90 14 20 -66 -85 -18 -39 0 -10 -2 -8 7 -122 1 -39 -126 -52 71 44 -67 73 35 61 -34 -26 -125 -43 37 20 51 -28 66 10 -19 -20 -24 39 55 -21 94 -10 23 -47 -94 -25 -102 -44 107 -1 75 -77 -23 -81 37 19 27 -2 -88 -43 -47 -63 29 38 -3 -40 24 -9 -30 70 28 -58 -1 20 -16 -47 43 -46 -47 -61 -15 43 34 60 61 5 -62 -9 5 -68 105 -71 -4 81 -19 11 37 -6 54 26 -3 -42 37 23 0 0 -30 6 16 121 20 39 21 -68 -4 -101 -36 -40 35 53 -103 25 -31 20 -76 -3 23 115 -52 87 30 42 -63 21 20 -17 98 -43 59 58 81 -59 -114 -5 -19 -63 79 -22 8 38 -1 1 -20 46 -26 85 26 -11 105 20 9 65 -95 7 -43 125 61 44 -61 19 31 -20 -3 39 78 -7 45 -36 9 24 -39 -1 4 66 -68 -13 31 -4 -64 23 126 -20 -28 62 25 70 24 58 68 4 7 -50 -45 123 98 10 93 28 70 97 77 -10 -54 32 4 7 59 26 -9 3 42 47 105 -9 10 30 10 -42 -8 9 12 -2 -116 -44 7 19 -7 46 21 67 -40 22 -15 15 -53 -9 -47 -15 -57 89 0 19 14 -46 -12 -58 37 40 -30 20 -9 26 -33 127 10 -13 47 -12 94 -16 17 -38 -24 121 -51 57 -46 -42 15 40 -19 -1 -37 -69 -61 3 11 66 58 -24 20 -64 4 -12 -79 -5 60 -16 29 61 25 26 -66 0 13 -25 2 -13 20 118 21 45 28 1 12 -80 68 25 -77 -59 -37 54 -46 59 21 24 -57 -80 -34 64 -23 -21 -20 -73 20 -68 101 -64 -12 -121 -35 20 99 -13 65 70 127 -42 -48 52 127 -60 13 30 -12 -12 84 54 91 17 28 48 -31 -78 105 -65 -62 -11 97 23 -23 67 46 44 -35 -128 -5 -26 0 4 44 85 -67 -75 -47 -59 -73 -29 22 8 -18 23 17 -83 -32 -8 -8 -21 18 49 -78 -58 9 9 47 -122 40 -51 -116 76 -15 13 63 10 12 -15 11 -7 77 10 -104 23 40 59 53 36 -16 -16 49 -73 -6 -64 0 15 97 -2 -18 53 28 -74 -22 -32 45 52 33 -67 26 -2 70 33 -16 -3 -69 65 -119 -50 -29 39 33 -13 18 -35 -15 24 26 57 -35 -25 16 24 69 -53 -1 -55 -92 79 -27 38 39 37 -66 -86 -5 -26 -10 19 55 101 50 -13 -5 -14 6 -32 74 62 57 123 48 37 10 -124 -26 50 -68 -42 55 23 1 29 -63 15 101 -55 61 -86 -66 -34 51 -52 -44 -17 100 -127 7 -68 34 -19 -13 -13 4 -80 4 -22 78 51 -17 82 53 -90 -23 -4 43 -17 43 102 108 42 -54 82 12 68 0 59 -98 6 68 -95 -3 86 -70 11 56 -95 -45 -88 54 17 -72 -31 70 -4 84 32 -58 -55 49 -72 20 -122 -37 -37 -125 -18 58 41 22 86 -6 123 -4 -64 28 -60 56 68 33 -51 40 7 -77 51 -11 22 56 -23 -108 21 90 95 -58 18 -49 31 -8 -5 -76 46 -124 76 82 -119 -55 -92 22 -17 38 -9 15 -112 -123 -55 -1 77 -58 -99 -21 -19 25 -28 -33 78 -18 -32 3 83 124 67 4 -10 89 21 124 -32 83 12 -34 95 23 16 -5 21 52 -30 19 104 23 -45 19 12 -12 34 -1 17 33 50 52 -47 60 -1 4 48 2 52 -64 37 -37 19 -69 -127 -15 -8 -50 -63 -33 9 6 -8 -96 33 40 -88 44 27 -11 -31 29 20 24 -38 103 -34 39 -123 79 -62 23 -79 -19 -37 -10 -60 17 10 -19 -14 -2 52 8 38 18 2 24 -5 64 -53 -9 -4 29 -14 79 94 -3 22 84 -24 29 3 21 11 -14 25 -44 -46 88 -12 36 24 -4 -30 23 -55 -48 10 -47 -11 67 -23 -43 -8 12 -28 40 92 121 58 34 -1 -62 29 -64 78 -29 -9 40 81 12 -40 8 -2 8 17 -12 35 -4 91 19 -16 15 -40 69 54 54 -43 4 -32 -43 -31 -16 39 -19 -23 -8 62 -55 13 9 -32 12 -64 -26 -41 3 -42 77 78 47 -25 60 3 7 1 6 67 -48 -1 -95 -47 46 -25 7 55 -14 -31 -16 12 4 -41 -102 -53 -43 -70 -37 -103 26 -64 -21 -3 17 15 -6 29 5 -51 48 25 17 -20 -74 45 -34 72 67 -23 -7 68 -19 23 -22 37 -93 -47 22 6 60 38 -17 1 16 10 -32 -5 73 -7 -32 49 -1 20 -23 22 -4 61 -14 14 57 126 15 80 -6 -68 -18 -12 -20 11 -17 -30 1 19 1 8 -7 19 78 -18 75 18 11 -40 -53 82 -11 25 54 -68 7 5 32 -49 80 -67 -3 -55 -51 8 51 -60 -23 -16 -24 -21 -8 -32 12 -77 -17 -37 22 59 -115 -51 -47 -44 -21 41 -24 -44 12 -70 -13 -1 -6 -74 -34 -78 0 -44 -34 -95 -81 -24 1 -73 -71 -51 -49 -19 -40 -53 -49 -72 5 -69 -30 -89 -14 -8 -74 -54 -47 -23 -79 30 -83 -66 -51 15 -63 -48 -52 -24 -14 125 -64 -12 -46 -13 13 -7 -46 -127 -12 -53 -35 -27 -59 -75 -31 -21 -13 -35 -7 -34 -1 47 14 8 -12 34 -9 -14 -24 -64 13 -22 3 25 56 -57 18 12 15 -31 -3 60 -14 -26 19 -121 -2 78 -7 -94 1 -20 -44 -9 -33 20 -15 -28 -60 20 13 46 -74 23 -3 1 32 4 7 -26 43 -39 -10 33 -59 -55 -69 32 -51 -79 41 40 33 44 -65 -20 -1 10 0 -84 -48 68 -54 36 -44 9 89 19 -9 20 22 -15 -22 -60 -36 -85 31 34 -3 22 -15 8 -55 10 -41 -28 -56 -56 -31 5 48 54 53 39 38 -27 5 34 -26 31 19 -44 -81 8 -55 3 34 127 -16 21 15 -125 35 -70 -98 -26 -26 66 43 79 33 -6 -52 18 80 -87 36 30 -24 1 -65 -70 -46 -17 44 8 44 64 2 -19 -22 -20 -26 61 33 31 24 -84 -45 -2 -52 -4 -31 72 -17 37 -20 -62 13 -25 8 -1 20 -4 12 13 64 47 5 93 -34 -83 17 -8 -20 -12 47 -26 -23 62 -50 86 54 34 38 13 0 44 83 -33 70 3 74 -36 -125 0 -32 -45 -101 59 18 -40 121 54 8 111 -120 -18 92 100 36 -32 25 -84 91 75 6 -42 28 95 31 -65 124 1 43 46 99 -6 26 20 15 -21 67 75 -16 26 84 28 -44 -35 102 41 -92 71 -88 -55 -44 15 -48 31 49 -25 74 68 27 125 -46 113 41 27 -5 45 -9 22 43 -75 120 38 81 97 18 92 -14 31 16 8 -45 -106 -22 64 21 26 -14 30 -56 -83 39 -92 -33 -65 15 -104 104 99 23 11 25 -28 67 119 -34 -21 61 -48 -83 5 23 3 -52 17 36 -17 -21 52 -31 44 -60 -90 24 -16 -71 13 -103 -69 75 46 -11 -18 -72 30 -7 -127 -77 89 21 -90 -22 -4 83 -50 17 -87 52 29 -53 -10 60 -90 45 -83 -49 75 117 -128 97 98 13 2 -68 -89 107 -90 -74 40 -15 -59 45 -12 -36 -11 -102 117 102 41 -124 8 39 22 -30 -52 48 -15 50 -38 79 14 41 109 -83 53 74 27 9 68 -37 -125 19 98 -119 90 15 46 54 -125 93 -95 13 71 -97 -13 20 -67 -14 -6 64 -52 7 -62 -36 -7 -114 -17 -41 -38 78 65 -78 39 72 126 -25 -67 122 -121 108 -87 31 48 -72 -124 -48 -86 -12 127 -126 44 -30 24 -54 3 44 24 40 59 -63 -19 3 79 4 -9 115 125 83 5 -48 77 -18 73 -22 88 -56 -36 -35 127 -93 -20 -21 -127 101 33 50 -123 -31 -5 54 -15 -40 -27 10 -36 17 -27 -87 -42 14 25 -50 127 -7 -22 -2 -94 57 13 3 -1 8 -71 -83 39 21 -34 -93 -5 11 -57 -18 -34 1 -74 -93 -127 -44 74 97 20 -52 -54 15 43 126 23 -49 71 -21 3 -71 0 -15 -91 -33 -27 70 2 13 -16 15 -81 -12 9 75 22 -30 45 -53 -47 41 0 -30 -128 -71 9 13 16 -81 127 -28 -74 39 4 14 108 -72 -42 -3 -13 -57 92 78 -79 0 23 -14 -44 92 9 -40 15 -6 48 49 -26 -24 26 100 31 14 -61 -16 4 -127 -16 13 -31 -55 -101 59 -44 -31 -20 -68 20 4 -82 56 -39 -44 56 -41 -6 -11 0 -6 20 40 -78 96 -13 -8 -91 0 46 -69 87 -32 -126 -34 16 54 29 -27 -31 -33 22 -38 -22 -46 -70 59 -71 22 -77 -43 15 -40 -18 16 7 13 44 -10 -16 -58 15 49 -30 22 118 -24 19 -35 3 -39 67 -22 93 -127 5 15 85 -16 46 -43 -38 6 10 -11 28 -25 84 42 -98 26 -22 -3 39 -8 2 -16 30 3 33 -27 23 -91 0 -117 34 -13 -12 34 -7 48 31 -36 35 -61 -31 -22 -7 22 0 7 -13 14 -6 -12 8 3 -64 24 86 42 46 48 -63 13 -6 -21 65 24 18 -44 37 -6 -20 -22 -24 4 32 10 -23 -46 2 -13 -84 -12 5 -40 13 -75 4 59 -3 -14 35 55 -84 30 -125 51 -38 47 52 28 12 -68 -16 27 -127 8 -64 -105 99 123 -6 -105 9 -23 -60 83 21 -35 -27 -40 125 100 35 46 108 -4 -23 -63 0 -49 64 -49 77 17 30 -26 7 -27 109 -48 -106 -109 -124 43 -26 -24 30 91 6 -123 -123 124 37 -75 42 -122 -28 17 93 -70 51 124 -44 82 38 -27 -29 124 14 -13 -51 -21 -16 -48 12 -70 39 -64 -33 11 -22 -54 -37 58 36 25 51 -106 120 127 -72 20 93 -4 13 122 21 -71 -43 -66 -94 -44 20 107 -14 45 0 -80 122 30 33 20 -27 -23 -99 4 3 64 -21 30 -47 122 -30 121 -1 -75 23 -67 36 126 119 -26 12 18 -107 11 51 -57 -3 -25 20 -22 105 52 32 -23 -115 13 -17 -35 -15 -96 -53 -15 -8 75 -125 92 -21 115 14 -19 -35 3 33 -34 107 -12 19 66 116 -42 -39 -94 -57 -13 5 -58 26 -2 19 -53 24 -115 45 -15 58 2 -122 78 48 12 -37 35 -128 35 40 -62 84 28 -117 4 -47 -124 20 -128 19 -56 -50 -45 -55 11 -55 74 41 -31 -52 32 -26 14 19 6 -47 -15 -31 2 -124 121 16 -22 2 -90 73 -123 -15 -78 -9 -26 -40 116 123 8 29 22 -120 -32 17 -68 -66 -28 15 -17 -13 88 5 -16 11 5 17 12 103 -119 -7 -80 90 74 -74 14 -10 44 74 42 33 -90 10 -111 44 36 -79 43 -105 9 -108 -15 81 94 58 2 28 -100 -6 -10 -54 12 67 0 99 -18 12 -76 127 1 -118 -50 -26 -53 33 -20 32 -5 57 33 23 73 8 81 22 18 -24 67 -35 -15 14 -60 -47 123 -19 8 -83 43 -55 21 -11 -122 -36 -14 101 30 -62 -76 36 110 -14 -74 41 -34 -70 1 7 -28 14 -44 -21 -39 -11 12 28 -72 -21 -74 -4 43 -6 95 -23 75 56 -38 13 -46 -21 51 72 -57 -78 -97 24 -53 -85 81 -32 92 3 -63 -34 44 0 127 -1 -73 72 127 24 -64 -1 -21 -7 -28 -74 -57 -55 8 112 -65 -36 19 20 -29 -34 12 -48 14 10 23 8 66 -45 -80 33 -23 -63 -127 65 22 -79 -65 13 20 -26 29 -125 -27 -59 -60 60 -24 14 44 -68 -44 9 -1 -41 -14 35 -49 8 30 -82 26 54 65 -18 95 -120 15 77 -29 6 -22 94 42 78 -64 -71 99 -128 53 66 54 67 62 -41 9 -67 -17 -40 -86 38 30 53 -11 16 -18 1 77 57 -13 8 -24 64 104 14 -3 10 -63 56 89 4 39 59 -57 126 -89 3 -3 -54 -36 6 -11 -20 20 58 47 17 -7 -31 57 -56 -50 -96 -8 46 -33 -97 24 -8 0 -35 -88 -74 -18 42 79 72 -26 31 -13 32 29 -17 -8 58 18 -48 -65 38 19 -46 49 8 35 -53 16 22 -2 -74 -38 69 19 -41 29 40 -73 7 -31 -30 -106 -105 -35 -9 -28 -33 -20 30 18 -18 -128 -4 -65 2 -16 -11 -31 36 -89 -125 -85 -2 40 -64 -37 -42 -7 -71 -89 -125 51 4 -6 73 4 -17 -69 0 -43 -56 17 -87 30 -48 -46 1 -74 -30 -21 -39 -26 -57 -37 -118 -127 -82 -92 108 0 32 -109 -57 21 37 -33 -50 -7 -86 14 -77 -91 -19 -57 -128 -9 -69 -47 11 -37 50 127 -25 57 -51 -16 -86 1 -80 17 -58 -14 19 22 -15 -36 36 -12 39 9 -27 -16 -14 -15 -32 -11 -18 -10 -48 25 -8 -16 -47 -126 -39 69 -53 65 -35 -50 -40 56 -7 23 23 19 -30 -9 72 -32 -46 -78 -30 -35 66 -9 13 -10 -26 9 2 -6 4 -39 -7 -24 34 -94 2 -36 -23 58 -10 12 0 79 57 7 -61 -13 38 105 23 -30 33 21 -52 26 -15 -25 56 1 -36 -17 -65 39 42 30 7 70 58 -7 -17 -67 54 1 0 -3 103 -11 -44 77 -13 10 -56 9 -32 -5 -93 61 56 -127 -44 -44 -119 -28 15 27 -27 22 -53 125 49 -3 45 56 -4 -73 -19 -5 -52 12 7 29 -27 -32 14 24 -32 11 43 0 -20 9 -32 -14 -30 -18 -43 -30 -18 -8 6 6 -14 -13 -1 13 -53 -12 75 -18 23 5 -45 -28 -29 -4 32 -48 96 -59 -18 3 -27 64 127 -67 10 12 16 4 -59 -16 -7 -44 -19 49 -23 8 14 39 -7 34 9 -123 -54 -123 39 -18 4 42 32 -29 -106 -34 3 -20 3 -29 -11 -84 37 -81 -38 -23 12 -60 -114 -45 -63 -9 -7 4 -2 41 -24 -22 -7 16 -3 -10 44 -52 40 -58 25 -29 93 47 -48 21 -15 19 -41 -25 -104 -50 -41 -21 -8 57 -39 -36 54 2 -17 -72 -67 -1 -77 7 -22 7 1 10 9 -19 -47 25 -62 -128 -126 -24 -71 -36 49 52 13 -9 -48 -2 -34 -20 -52 -13 -19 -35 -64 17 22 40 -17 17 35 -32 -55 1 -36 19 -82 -63 1 -9 -44 -52 -27 -40 58 30 9 -100 -25 81 13 108 -48 -61 -60 44 -46 43 6 32 45 -26 50 55 63 20 59 -78 77 25 -34 -34 -7 52 -32 9 36 -18 4 -15 11 -38 -51 -40 -41 -12 30 50 -1 1 47 1 -57 -71 5 93 25 -18 68 43 27 -69 -10 -14 17 26 -12 -10 -52 1 38 55 4 78 38 102 -24 61 -18 -12 -73 -18 2 38 -31 -22 49 -25 15 40 -59 24 -31 24 121 -49 9 49 -127 -1 30 49 30 124 -60 106 -31 14 43 11 70 -128 0 9 45 -9 95 44 62 -28 -123 -77 94 -53 68 -39 -31 10 -3 -116 2 21 11 -12 3 -16 -3 34 -10 47 -39 -34 -50 71 103 -13 -41 0 -43 -68 63 44 102 -25 -24 -48 -35 -25 59 125 127 -115 35 0 -1 20 -112 -47 -18 -66 -9 124 9 -84 -32 -52 -20 -77 21 -55 47 84 -34 66 48 50 -9 124 -32 9 -95 -76 18 5 -46 20 -19 67 95 -24 45 -22 -98 30 -123 41 -125 -128 5 127 48 50 -120 52 -41 -40 57 -12 -112 64 104 6 25 2 -8 11 -55 19 -87 122 -40 -12 -99 -78 73 79 55 22 -126 -91 31 -123 -47 36 -83 -31 76 121 34 37 -16 -72 84 15 115 -57 -78 -87 91 -50 48 2 -35 11 -125 29 -21 32 60 7 -41 91 56 -37 -66 -14 69 0 -62 44 -35 18 -54 5 -79 66 -4 -38 22 -125 -21 -55 -22 -23 -91 -60 111 -105 -91 6 -120 -3 -88 -61 53 -26 7 54 15 30 -17 -27 26 -126 -72 46 -15 35 -46 -73 24 -70 71 38 -51 91 -9 -26 6 6 -67 32 -82 -12 -83 -37 -94 -37 64 -55 -71 57 -22 -34 -51 -30 22 -102 81 -91 -105 -84 -101 30 8 -40 86 104 -123 -11 -3 -44 -50 -83 -27 49 19 28 3 36 10 -41 39 40 -95 -20 -76 -14 -21 58 1 -67 -22 67 96 58 14 -44 -86 46 18 -51 29 -15 127 107 -2 72 -62 -24 -57 -2 20 63 -1 82 -7 -121 -31 75 -128 -125 -23 -51 17 30 -13 18 63 -68 74 56 -6 0 -33 32 -20 100 39 12 72 -23 -76 33 -90 9 50 41 11 -43 -29 -96 100 44 44 15 45 21 -89 51 117 -54 13 -4 2 35 -35 -9 8 14 16 -29 2 63 25 -8 34 4 20 40 -46 -21 -25 36 86 34 21 15 1 -58 47 5 -5 -15 -2 -35 57 -33 4 19 6 -23 -57 43 84 -7 -23 5 -97 105 -3 53 103 -48 92 -22 -75 -24 -30 -107 -3 -11 -46 7 33 20 -40 0 33 -15 23 -42 -63 -52 12 -41 -54 -31 50 24 11 -94 3 8 -20 -50 -2 -69 87 -5 -24 -57 14 -30 -35 -32 -92 -59 -10 17 14 -13 -21 -22 2 -33 -4 -126 -38 36 -31 -18 -97 52 -62 -4 55 45 -17 33 43 16 -34 25 49 8 37 -43 -7 88 -73 -85 -9 -89 58 -13 -34 -48 -55 -38 7 -12 -6 2 10 72 -22 -37 15 -33 -97 -33 62 -48 43 21 55 3 -19 -60 71 -85 -5 -65 25 15 -54 -37 30 37 19 -13 -67 -16 -13 -10 -6 -1 10 -49 58 -27 31 14 -54 19 13 26 71 -11 -52 -2 8 -64 58 -5 30 21 -12 9 -34 -40 -48 -58 -22 -21 23 105 60 -54 -43 95 40 10 -7 39 -15 13 27 35 50 -21 90 -8 -56 -63 44 -26 29 19 8 -68 5 23 -63 -39 -28 83 -14 16 10 42 29 19 -60 -24 -47 12 -39 -128 -22 31 24 73 -14 -17 31 -51 46 71 64 -20 -14 77 7 44 -81 51 -32 -35 -3 52 21 0 -32 48 -55 -2 -8 3 82 13 15 30 18 -38 -42 -25 34 26 -8 7 17 -52 -80 64 -33 32 -23 -64 57 -68 -8 7 -28 23 39 -28 13 23 -23 -74 -26 -6 31 -87 5 19 -19 -49 -26 33 11 -43 26 23 -38 -36 -35 -123 -22 -37 -125 -49 -79 -127 106 -26 -26 49 50 -68 -40 24 77 -117 -50 33 -103 -6 -35 44 64 38 -41 12 -39 -28 -100 87 -75 -58 -106 -128 -77 49 4 -26 -67 -40 17 -111 -58 -2 21 64 39 -103 -17 18 71 -52 -92 14 14 -67 -13 -59 -24 -45 0 26 37 -16 39 82 -26 -68 21 -19 -49 -68 9 -70 41 -91 -20 -38 1 33 39 -54 -11 30 40 11 38 85 25 -28 -5 54 50 -45 -4 -96 40 -43 46 -53 -31 22 -18 -59 -38 26 -68 -41 -96 -7 -7 12 -45 46 49 -54 -105 -20 -1 -121 95 -37 33 90 -54 29 74 62 10 -18 -38 82 -67 27 -2 47 -80 -35 36 -107 13 3 -77 -59 -45 42 -98 -50 -114 53 -56 19 62 107 -22 34 -40 2 -15 49 70 -52 -30 -45 -35 -25 -72 -4 47 -41 51 27 58 80 -3 -4 58 -98 41 -3 76 -21 8 -56 -19 -55 62 -3 25 70 -19 12 65 55 13 -42 28 -56 43 -24 39 30 61 43 11 60 -72 27 -53 -43 -42 15 25 4 13 -12 -8 35 -30 23 65 8 26 -9 2 -32 82 119 -43 31 19 10 17 -53 79 -11 -54 -19 -61 57 -37 22 67 -9 14 -97 7 57 -55 -26 -109 -7 -7 -32 -9 -51 41 -23 49 37 -56 -51 60 0 28 -47 -12 -7 -50 -23 -120 -41 -81 -26 -46 69 4 17 -11 -74 46 60 74 -33 -48 -40 50 53 -125 103 -61 63 -56 105 -37 86 0 20 67 26 43 38 -26 -103 -31 -9 30 39 21 -27 -25 88 99 48 109 13 26 16 37 25 68 102 126 38 81 49 91 113 14 -17 108 -25 -29 -19 79 90 -45 0 12 68 51 -14 -4 -84 -60 53 48 124 21 -80 -4 26 0 5 23 127 95 -68 1 7 -67 120 26 127 -93 42 24 -38 -34 -18 16 89 92 48 25 -3 8 -27 -70 -84 28 -20 -128 56 -127 -13 -86 82 -37 67 -5 4 -40 74 -35 -16 47 98 -27 -36 -75 87 42 24 34 11 -12 36 41 125 50 26 82 -1 36 14 -24 -89 11 4 27 68 -82 -20 57 12 28 61 -37 26 -16 24 -64 -34 -3 -66 50 -54 60 46 11 -9 24 -54 -19 -17 -16 -25 -42 107 43 67 9 -34 21 -75 -28 13 23 -66 81 -27 -36 74 85 -125 38 -29 100 46 107 49 -71 -40 51 -13 84 49 125 66 -50 101 -39 -32 -28 -20 -18 24 -114 36 115 -71 15 103 8 44 -34 -1 -39 -63 -47 -4 83 10 80 -88 0 73 -2 64 -48 -28 -61 -57 -7 -70 -53 -76 -42 -12 87 26 28 -10 -3 -9 -43 22 -3 127 127 22 46 -4 32 93 -70 -44 29 125 -43 -1 54 -104 41 -17 91 -25 41 -14 18 -1 31 -44 0 12 36 53 49 92 -24 -59 91 2 -35 -23 14 126 35 6 -69 60 -20 -11 51 40 -8 -67 -25 61 -24 -44 52 40 33 -3 -10 55 -82 -53 24 -22 29 37 -25 10 63 3 39 55 -58 -17 23 21 -27 27 45 53 35 -18 -64 21 -37 57 24 74 -50 49 110 44 3 44 -33 11 92 -15 -112 -27 -45 -7 37 53 -3 112 28 -90 68 29 18 43 84 26 71 -58 -3 -12 -6 4 11 -13 -66 7 -25 6 -16 -19 15 92 28 -56 5 -82 7 63 33 -56 11 39 51 -29 37 -75 22 -127 -14 -94 -18 -8 127 -48 28 23 -81 -30 -5 25 23 -22 -7 51 59 70 -79 -24 -25 10 -43 -56 122 -37 -116 -41 43 -35 28 42 -28 24 -98 -44 1 -47 11 -6 -30 -112 0 20 -62 -63 32 4 24 -32 -57 -2 -20 -4 3 18 -92 16 -23 -57 -4 -8 99 -84 16 -46 -25 50 5 23 34 9 51 -1 96 12 7 21 60 -98 104 84 -22 26 45 13 -89 25 7 -3 38 8 42 67 -75 93 12 17 24 -13 -8 -60 32 -20 100 38 58 -42 24 22 -107 -40 -31 -34 56 66 85 -85 -28 49 -52 -13 -26 54 -26 -8 -56 -6 72 -37 -87 37 -52 -45 31 -2 106 -53 5 -13 -70 52 56 -19 32 -99 6 -21 27 88 52 25 9 -39 -99 -17 63 16 0 -53 -31 35 -38 -13 37 -2 57 -5 8 39 21 22 -96 -11 4 125 99 -4 4 111 89 120 -60 -30 0 -18 64 59 -5 83 -1 27 -40 79 69 -60 -12 126 24 17 127 53 -9 17 74 -27 -25 82 36 -9 3 66 44 -33 127 54 126 -4 -42 -41 -47 89 31 78 -74 28 73 6 2 40 22 2 127 75 86 26 -20 70 6 113 87 33 -70 -8 78 32 127 -49 21 4 37 -13 1 40 127 70 81 121 47 102 110 -26 -67 -10 -46 -43 -10 -34 -13 -58 51 -46 -80 -45 70 8 51 125 -10 46 -104 -13 34 11 -46 26 -101 -75 -100 -20 -7 -39 37 -10 -48 -24 -80 44 29 -103 45 -68 -60 42 15 -16 -1 26 8 49 -2 2 26 -51 -52 -22 46 -75 -26 8 -33 14 22 55 68 21 44 -12 -7 -50 -24 26 127 -87 27 2 -10 -79 -15 -56 118 53 -59 -97 47 3 -40 -47 -89 20 5 -49 22 43 44 50 36 -22 -79 -94 49 33 32 3 -1 37 50 -39 31 -19 17 -37 44 -1 -50 49 -20 -20 89 -103 31 64 -26 44 -17 -79 -44 31 -59 48 -27 45 48 28 -54 65 -48 -45 50 54 44 -20 -78 0 23 -68 -32 69 -47 -15 -74 20 6 27 -53 69 42 11 -30 100 -93 -95 67 80 9 13 -28 -39 62 50 -16 16 -18 -35 -31 -47 26 37 47 -12 78 17 -127 -30 -22 -7 90 10 -43 2 -44 1 3 40 -27 74 -13 1 71 -13 63 127 39 69 127 -19 -2 15 -36 110 5 42 105 -3 36 42 -31 100 122 92 8 -89 -60 80 -8 -27 7 12 70 -13 18 92 56 112 39 114 2 -33 6 31 59 30 -13 41 -65 -37 -45 13 -126 31 -66 -50 8 20 -19 -14 -71 -62 8 13 -28 -75 50 56 27 11 40 -80 71 -64 -21 63 -11 48 109 12 49 17 53 -60 18 -116 9 27 -3 10 -116 60 44 -83 47 26 0 -56 -5 20 -66 45 127 28 117 -9 -54 -35 13 -42 -34 -16 21 -41 80 -75 10 -60 -58 -63 -19 -10 -35 27 -55 -70 -83 -49 -22 -33 -52 -16 29 5 4 -36 -15 -32 35 16 -73 118 -30 8 -42 -19 22 54 35 43 -51 -18 -47 25 -6 -37 -15 -3 37 62 20 -10 27 -18 83 -69 40 40 -42 -69 -3 -6 -1 29 -7 -46 -54 14 -67 10 -74 51 -73 23 -8 80 34 -33 -25 5 94 41 28 70 24 102 -9 -40 25 -53 13 -17 -125 38 -5 -84 -12 -9 88 -24 50 -92 22 125 -59 45 -38 24 3 26 -44 38 44 -82 3 79 35 18 -74 19 -31 -79 -47 22 36 12 77 -31 4 64 -6 17 -67 6 -66 48 -30 44 34 9 -36 19 -37 25 16 -3 22 -53 -43 73 48 96 -47 -55 18 8 -77 48 65 45 -70 -26 -10 91 -8 74 71 -2 6 -85 -127 -93 -50 59 -118 13 -23 -15 -38 -104 24 86 -20 124 -25 -119 -110 119 -18 -83 -51 -105 -19 -90 -51 36 -62 -115 -66 17 -44 -56 29 -37 47 -27 -107 -27 0 -68 -60 -128 -112 -9 19 -19 -51 51 93 -127 84 -120 5 102 8 -4 -15 68 -120 -80 3 66 -2 99 29 12 -8 -29 -20 44 -112 -44 -126 84 -91 49 -36 5 57 50 -25 -6 6 27 89 46 -40 73 112 -103 63 124 22 42 76 -73 -5 -15 38 -67 0 -37 29 -56 21 15 87 127 -41 84 9 -13 -8 16 52 -96 42 -52 8 43 -101 -80 -48 -12 23 5 -11 -24 58 34 -2 29 31 -30 9 9 -104 -8 8 -65 -69 76 -21 33 127 -109 103 36 49 94 104 71 33 69 29 16 11 -48 31 4 1 -14 107 35 -28 -13 -58 55 0 -39 27 1 -30 -25 77 108 -75 -48 67 -19 -28 -26 -12 -67 -71 -38 86 49 -56 29 71 -35 -104 20 -43 -81 -38 43 28 74 -82 -121 -19 16 126 59 124 -108 39 24 98 -17 125 -48 -92 78 98 -126 121 37 -6 31 -102 102 -126 -22 -55 -54 62 125 -17 -40 82 -127 -39 -95 -46 96 8 -74 -63 6 37 53 85 76 -42 123 -65 -18 -109 51 -77 79 58 -41 62 91 -100 112 -61 -36 127 -108 102 63 -48 123 42 44 10 -60 -22 113 -24 68 40 21 -22 -38 23 108 37 -18 23 50 -38 -123 -55 -78 -79 -88 116 -54 22 15 -14 40 -1 -58 -128 18 -21 49 24 -56 21 35 97 -23 37 -19 15 -36 3 -29 -64 64 -64 21 -57 -55 -21 8 -12 33 -11 29 38 2 48 -65 1 39 5 -25 -120 -63 -38 15 66 -123 33 29 -61 46 -5 -9 -13 94 -105 1 -113 -67 -54 -19 37 -108 -63 8 72 -25 5 3 -20 29 -53 -81 113 20 -70 -88 -34 -87 45 -27 47 15 -6 -83 28 -14 -8 -28 -28 -46 -6 61 -89 -66 -51 30 22 61 24 -2 -73 -59 -4 -36 1 30 37 -55 -20 29 33 -98 -12 -23 43 -6 -61 32 -63 -39 -32 16 23 104 41 36 -27 29 35 -26 -7 45 -58 -47 3 -56 -19 34 -23 -6 93 18 -27 -54 -22 66 -13 16 2 70 3 -33 15 23 22 -95 17 75 -23 65 -26 -14 15 51 -17 45 -6 -47 -47 -27 -102 17 -70 35 94 -45 -26 32 -20 -10 -64 -52 20 -26 70 -69 11 127 73 11 -49 15 -27 -38 -18 24 -58 15 26 8 12 -32 37 -54 106 -75 -62 16 24 -74 115 -94 90 56 -36 24 -72 28 3 -34 37 65 -33 51 45 -78 -119 -46 -42 -29 8 -26 -8 -96 15 11 22 -26 -79 20 30 37 23 0 -18 -6 2 36 24 -40 -44 19 -35 64 42 -117 -39 -96 -1 -32 45 52 17 22 -35 -80 -35 -41 -13 27 18 21 39 -16 0 21 46 10 -11 8 54 11 -50 -113 5 -57 74 25 -2 -102 -65 18 6 11 78 -5 99 -4 47 17 51 84 45 12 88 12 -3 82 102 81 1 70 53 -101 -37 81 39 -32 -60 76 95 -22 -15 1 71 71 53 23 -53 0 -19 41 86 -49 21 16 44 12 68 -22 -51 33 13 0 14 -19 40 80 -13 -3 19 120 -11 24 77 39 27 66 83 23 83 -53 -58 -29 0 -57 44 -7 19 4 55 18 -65 15 46 89 -18 24 7 13 -68 22 53 -38 -93 -49 -60 -84 11 61 -4 58 -17 -17 -26 -88 31 36 -59 8 55 -17 58 -108 -36 -9 22 31 23 -22 -68 5 32 -39 -26 58 -58 -12 -8 -52 66 22 -3 37 -45 69 -13 -39 -4 -37 -68 -41 -38 1 -102 -25 -21 -3 -42 23 -60 -36 -12 -11 55 4 10 3 -42 -114 -8 47 -127 -16 4 2 -26 -20 -95 -21 -7 36 -39 39 -125 -11 -48 -97 -9 -37 54 108 -19 -37 42 26 69 -85 57 100 5 84 -45 69 -50 -37 -9 -31 -44 -69 -35 32 29 -12 7 68 99 -45 46 -54 -20 92 29 3 25 -23 -12 10 39 9 3 76 56 -80 21 -74 -4 19 -11 -38 -22 43 -52 90 16 0 -54 40 8 -23 -33 49 -60 74 -49 1 71 1 2 -41 -74 -83 7 61 -47 -13 -41 2 98 59 24 12 71 -33 -48 26 67 -6 -54 23 61 59 -92 69 86 -31 -27 19 31 -6 -19 -52 52 125 -57 -1 -3 -84 25 -64 59 -26 -83 -112 -128 15 -41 7 -55 24 114 18 -115 -74 20 -31 69 -65 -69 -106 -19 28 24 -115 18 11 6 21 -125 -111 -107 23 -83 -74 -104 -107 127 51 90 -127 -118 -94 -72 -86 -127 -26 -106 -6 -3 -47 -51 -9 -2 24 -31 108 -69 52 -94 -61 96 -8 -124 -54 11 -82 -65 54 10 9 115 28 14 104 -89 2 -85 -123 -8 37 7 47 -47 -25 -113 122 37 -95 20 35 -9 -1 -7 30 54 5 23 -15 -51 -36 6 95 31 27 -33 -36 41 -7 -18 -118 -90 78 24 -42 -128 44 82 -71 -66 1 47 25 35 -7 83 -103 -117 22 80 -65 -17 -76 13 -47 2 82 18 -42 -69 55 20 -29 -14 -20 3 -44 23 42 17 43 -11 -21 -46 -52 -69 21 -63 33 -24 -48 -97 -31 41 -64 3 23 74 37 -80 54 127 98 -8 -1 -17 78 42 -28 18 -49 3 27 -3 42 -61 12 -127 9 -90 -126 -41 64 -74 38 -27 0 75 -122 127 75 -90 53 54 1 -41 69 40 31 22 11 111 -68 -34 33 -48 16 -72 9 12 50 -67 -106 -99 -72 18 97 53 16 -34 12 8 -128 -24 -52 -70 -72 -4 87 -18 -45 10 51 21 33 16 -53 52 -10 20 -45 8 -33 36 -28 43 91 -60 -75 -128 59 16 16 41 -126 -9 -7 14 36 -4 -36 76 64 -19 125 17 -42 -6 -7 26 70 -7 -15 -26 38 39 -13 6 41 -16 -28 87 74 32 14 127 56 32 26 17 85 34 -43 -3 -35 -52 18 -17 -9 -88 -52 54 5 -125 60 84 29 27 8 10 52 3 -92 4 1 59 -5 -26 -28 65 54 12 -36 19 -12 -17 -4 -15 106 64 127 7 -14 -23 -67 45 62 68 24 20 50 -65 40 38 36 0 41 46 23 13 43 28 82 25 -20 1 8 20 -18 48 -22 37 -14 -1 89 25 8 -51 -26 -21 -20 -19 86 12 17 -19 18 43 26 -5 64 3 -52 14 19 -51 -28 5 -28 -39 -26 -127 4 6 6 52 -26 3 11 30 46 21 15 0 -35 59 28 20 -16 -30 23 60 0 56 32 55 97 17 85 -20 29 35 -44 44 -5 30 -67 57 17 20 66 -54 -7 -26 48 -21 -23 3 -35 -3 -36 43 -12 -1 -96 34 -29 36 -49 109 36 -7 -35 38 -55 40 -41 39 22 96 13 33 -17 11 14 -51 -6 -43 -11 51 32 12 17 -55 123 6 -22 -25 26 -1 63 37 -17 -66 34 -11 -17 30 -66 -18 -80 -1 27 -48 -13 -46 2 -27 5 -18 6 15 3 -22 20 10 34 -7 -7 -40 12 -19 -19 -36 -56 59 -4 21 75 5 75 2 81 -23 -38 -20 23 26 -5 -70 -61 -5 -39 57 -21 -51 121 -12 17 -64 -28 -33 -9 -21 -14 63 6 41 -55 -8 2 6 17 47 21 12 -8 35 -9 -29 16 -25 -128 80 127 35 -26 -101 -31 3 -1 -67 20 28 18 -44 -59 -1 -25 -42 -39 61 47 113 -21 -18 121 28 82 70 72 123 38 97 10 49 36 125 -94 -106 8 -15 66 91 -79 94 29 17 106 -42 23 88 -27 121 102 76 -50 -7 11 44 47 90 11 32 46 87 -64 -50 70 12 -21 23 -49 -9 60 83 55 126 32 85 -33 -32 -81 25 51 -40 -27 83 56 43 -68 -58 -8 -8 29 100 81 5 -35 83 -6 74 -35 -24 57 -15 -50 -107 52 -50 -5 16 -112 45 -3 34 -40 -114 9 18 108 122 105 111 51 50 -81 33 -13 56 40 81 -73 116 45 9 57 -31 -17 -24 -81 3 16 -1 -37 -98 66 -7 -38 66 1 -40 27 12 127 61 1 12 -5 -46 -46 48 -13 98 53 -39 29 -6 37 -126 -21 16 82 125 22 18 -28 -68 -14 54 -26 60 66 106 -121 25 37 -30 -15 -8 -37 30 0 -1 -11 6 -64 -16 -5 8 -101 -23 110 -24 0 -41 1 -80 127 7 -76 -1 53 -2 59 -60 -80 -1 -30 65 -15 -108 95 -42 0 -98 3 -51 -59 12 -49 45 72 116 22 -48 -44 -65 -24 1 7 19 -53 -42 33 31 37 -20 23 -60 -77 -35 -56 28 -92 -41 46 -25 16 -103 24 -51 -24 -71 -36 -34 -68 -56 104 41 64 -109 -73 54 -47 4 -12 -41 4 63 -24 80 69 6 -21 103 -22 34 20 15 -54 -79 -16 -50 -23 94 -11 -23 -13 4 -46 -10 36 -4 21 21 -41 16 40 -21 33 91 34 65 53 24 7 31 55 -13 -15 3 -57 112 70 80 28 3 34 -42 -27 -19 -30 33 126 37 -96 46 -13 -15 36 34 -53 25 -46 -66 29 46 92 3 -5 36 -39 27 -62 -60 10 36 -115 -10 -24 25 30 8 -1 3 42 -87 86 17 -44 43 23 8 -17 -104 1 100 -5 -124 38 41 14 53 11 42 12 -17 23 -65 -85 28 -16 -62 18 52 42 46 -3 18 58 23 32 10 -11 2 -11 29 20 -12 4 -37 -87 -9 29 100 66 90 -13 6 -2 38 -3 -4 -77 17 46 14 -36 -32 23 -4 -73 -78 -50 -15 -66 -9 -2 -28 -69 -32 31 13 54 9 -25 -73 -26 8 -17 37 -14 -1 37 -89 -18 -15 -13 73 -75 -75 70 12 -101 -45 -36 -8 -8 -33 25 -12 -95 27 58 4 -18 -31 -12 46 22 -14 32 -7 49 25 83 54 -4 0 4 32 -29 75 -25 -51 57 -57 -11 -18 28 -18 32 -14 44 10 57 -54 -41 -4 -40 84 -5 16 -16 -41 124 -8 -38 29 -54 34 2 -34 16 41 23 18 -51 53 45 -44 33 -36 -46 29 23 62 21 7 44 -91 -5 -48 -11 5 -44 29 -73 36 -40 15 -31 -14 -18 2 20 66 -70 31 17 -62 44 46 -15 -79 7 13 13 -10 1 41 38 -38 -7 1 92 -63 17 2 19 36 -8 64 -67 -14 53 -23 -44 -6 105 -46 43 -27 -22 -46 61 -8 -25 106 51 65 52 76 43 106 -23 4 -20 90 98 58 14 -91 -111 -7 -32 -83 -84 75 7 77 -30 -8 -18 -108 84 51 -41 92 15 97 1 -14 19 40 23 -15 94 -20 52 42 29 3 77 61 107 78 -101 -41 92 -83 79 -14 40 -8 5 43 23 0 -32 22 -44 99 -79 26 68 -40 1 -10 -2 -16 59 11 19 1 -27 57 -21 37 -58 -65 -23 -19 33 35 55 -36 -96 99 6 -70 35 -56 5 54 19 127 10 39 -13 26 -50 -29 -7 18 49 1 66 4 69 25 82 -44 -36 52 11 -82 -14 -7 60 -41 27 -55 -26 60 27 -89 23 -1 -32 58 29 22 -34 -6 -50 7 -45 32 29 -42 42 44 21 -6 -17 39 24 56 16 -78 -37 18 49 18 -27 29 -27 67 -50 -72 -31 23 54 -31 74 -13 17 19 -23 -18 -18 -26 -5 -38 -24 6 72 34 51 -24 10 7 53 41 -36 59 46 -13 31 -51 -27 8 33 -32 65 25 -36 0 -22 -16 -52 -12 14 27 39 1 44 15 -15 -39 17 -51 -26 -42 9 -2 -76 71 -21 59 30 56 9 13 -19 22 42 14 -1 77 -14 -32 -42 -3 49 33 -29 2 -51 13 37 -47 -49 57 15 -64 41 -10 -8 -61 -16 20 -56 -13 10 -10 8 -2 -8 46 5 -84 79 -92 32 -16 67 -110 15 -4 -72 122 123 82 -66 -29 -128 -47 8 -125 57 14 -31 9 -14 -118 -45 21 81 -125 7 -21 -84 -51 -21 -9 25 -21 35 122 22 -8 -72 67 3 -53 -12 -58 20 11 42 69 4 -62 56 -2 2 -126 47 -116 59 84 -5 -97 -115 42 16 122 2 73 -78 -83 -100 73 28 -22 -124 48 90 58 -3 -2 -124 125 -116 52 63 114 -23 93 -8 -94 105 2 69 127 -8 59 -6 -113 28 70 77 -14 111 87 -12 28 41 16 4 -14 -38 13 -74 -1 -2 15 -41 17 7 -127 75 27 -63 -80 0 -24 8 20 42 12 27 24 4 102 37 50 -29 -71 -20 124 -18 11 36 -50 -26 -47 109 7 -79 9 -106 120 -79 111 -36 64 -39 9 17 -21 8 45 72 -4 69 -64 -20 -16 41 -9 -28 5 -47 127 -32 8 -34 110 6 92 -65 -23 68 78 -58 -125 86 59 -3 -21 42 32 -18 -9 14 29 11 102 47 78 18 -14 -123 -48 46 -33 -128 53 -54 -124 -19 55 15 105 12 61 23 -125 49 -80 -75 19 -74 -105 30 -73 22 39 -13 124 -82 25 -30 26 -38 -78 -66 -60 40 -4 56 41 64 -26 29 -100 52 52 -96 -65 5 66 62 88 2 -58 9 127 67 80 -8 -57 -31 75 -14 -15 -43 120 -48 -33 21 9 -47 108 9 -41 38 -35 -52 26 -73 -18 -108 62 -55 1 -30 75 -26 -30 -87 18 27 91 49 35 75 -110 -38 98 47 39 53 -86 -26 73 -109 51 -55 -12 -7 91 82 -118 -10 44 18 25 17 68 -16 8 79 -76 66 -32 -19 68 -2 -94 41 53 -16 44 0 91 -79 -3 -41 -25 -39 32 -24 127 48 56 -5 -25 -109 12 90 59 54 -34 121 -12 48 -52 58 18 -89 -88 -2 -106 15 -31 -85 4 -31 -74 49 82 6 -3 -128 81 7 -112 61 -17 -12 91 10 85 24 -66 6 23 24 -42 -9 -49 -32 -122 5 -11 64 35 14 29 -25 31 -35 -39 -22 -63 -23 48 2 -21 3 51 51 16 -66 71 41 -18 98 15 80 47 41 15 22 -65 -65 23 -21 -22 -43 -2 -36 15 60 -52 19 34 21 -33 12 -12 -9 -18 -85 -37 31 -47 -53 21 -49 -45 91 10 -12 13 27 -96 -16 75 45 22 68 -12 -6 -15 -14 -16 37 -5 -49 16 4 -67 64 -23 23 67 37 -58 18 -48 12 3 -42 -31 -72 -32 -52 -126 100 23 -74 -22 9 -71 60 93 -17 -19 111 -10 51 -66 -35 22 -22 2 40 -3 53 -21 29 23 -35 -57 -20 -19 31 66 37 21 48 71 -12 32 -55 -23 -60 -35 -37 -26 1 43 -42 42 -28 14 2 42 -46 84 29 68 -12 -28 -52 -50 -9 64 14 23 -28 -36 -30 -20 35 37 7 -2 35 -13 66 -16 -77 60 -43 15 41 -78 14 -5 50 6 23 -98 18 56 -83 -28 -13 -36 -56 -118 -7 -73 -39 -41 60 90 -46 127 -3 -13 52 7 -32 11 -111 -9 -15 -124 42 -124 -51 -21 4 -83 -120 -76 -9 -66 -16 -79 -52 -1 -83 44 7 -14 94 -89 63 -34 82 -95 -63 12 73 -111 21 -3 64 26 -28 -55 -95 15 -20 -117 -8 -88 -73 -93 20 70 -14 -36 70 16 -57 24 -78 26 8 38 3 32 -67 52 -54 -56 127 -30 5 13 -91 94 -7 -11 105 -78 52 46 -42 33 -46 -104 -7 18 19 -4 39 15 -57 11 70 29 73 -10 2 127 84 -16 -50 -82 15 -36 -126 -21 33 -76 -56 82 -22 -10 6 48 -12 -33 7 -55 -8 34 81 -52 98 55 6 -91 98 33 0 -12 -11 -5 -74 -29 30 -7 -43 -5 -68 20 51 33 44 -37 41 -59 -99 73 53 30 16 16 -34 -3 -74 -123 -78 77 -127 -32 48 -59 14 -51 17 -37 39 40 124 -19 0 3 -79 -13 21 -1 33 -125 -9 20 -24 26 115 -33 -37 12 14 -5 -73 57 1 -47 32 39 -62 44 -104 42 23 15 -16 -1 8 93 36 -34 2 -6 24 127 -21 -11 1 32 -12 25 -94 -25 -32 36 16 29 -15 37 10 -53 -10 -26 25 -26 -55 -95 -51 110 -19 -28 9 -57 25 46 14 64 -40 35 -25 117 -1 -127 -61 66 -48 -51 -1 44 1 -61 -17 -3 37 -100 21 51 72 12 -23 -30 -25 -125 22 8 -59 -2 0 31 15 33 41 43 22 -5 34 32 10 -6 31 -11 11 13 4 22 -3 60 1 42 14 31 -28 -7 11 49 22 -14 -20 62 -8 44 50 4 29 1 1 -14 20 43 19 32 30 61 19 3 22 16 -5 -5 -23 -6 17 95 82 14 4 -17 13 41 51 -51 51 25 25 27 48 -18 16 33 55 9 17 -22 40 32 -21 1 8 22 -18 51 -11 -1 31 -5 -6 19 -4 28 35 -22 10 15 20 -15 -4 -4 -13 -47 27 34 -22 50 -7 -12 -10 10 5 -6 -6 13 32 -9 -16 23 -4 33 -5 -17 2 -13 25 47 -28 -5 -18 1 33 -11 -2 -21 37 -11 14 -8 19 14 -15 -12 51 8 36 2 18 -17 17 -15 1 1 -54 32 35 3 -9 -23 -9 -4 -6 8 -3 -31 -10 44 -48 -7 12 13 -13 -31 3 30 46 11 2 1 6 -4 -16 14 0 12 18 5 14 3 -40 -38 11 0 -6 -6 19 -2 3 -82 -4 -44 33 17 -4 -15 3 6 -3 -8 8 8 -1 45 -34 -16 -2 36 -4 9 -1 -11 4 5 13 -10 5 19 2 1 22 8 13 27 2 11 -23 -1 4 2 -35 -7 35 32 16 13 15 12 -1 -22 27 -33 -6 -11 24 -4 10 -36 1 40 -1 8 51 -36 11 -19 20 28 -23 -12 0 -20 -1 -18 18 -14 9 13 3 17 -33 7 -14 -37 6 -11 13 -10 -96 22 1 -49 63 47 40 25 26 23 8 2 11 17 29 19 6 -7 3 19 28 28 33 13 41 5 -23 -33 -45 -36 -24 -25 -20 -18 -19 -10 -18 -18 -24 -23 -21 -22 -16 -7 -18 0 7 3 8 -3 -8 -12 -16 -16 -10 -9 -14 -19 -13 -18 -18 -12 -20 -34 -69 -63 -42 -43 -67 11 12 20 14 16 28 29 25 26 29 28 36 35 31 28 29 14 -7 -46 -72 -70 -51 -62 -89 -59 -39 -7 9 9 0 -6 10 12 14 16 27 47 45 43 44 15 11 11 35 63 64 83 62 53 56 40 41 54 64 65 65 54 40 24 -3 -33 -69 -73 -63 -16 -44 -17 25 33 2 -14 -5 1 -3 -1 7 3 11 -7 -21 -36 -43 -47 -31 30 37 -1 -20 -7 -48 -40 -7 30 51 64 38 -6 -42 -50 -38 -31 -50 -88 -121 -126 -125 -99 -123 -98 -75 -68 -106 -97 -76 -57 -59 -68 -56 -38 -21 -5 -5 5 17 24 30 34 30 5 0 -16 -60 -28 -53 -87 -97 -119 -81 -51 -54 -45 -37 -23 -43 -56 -51 -25 -18 -19 -14 -7 25 31 -6 37 33 66 79 73 72 63 74 118 125 125 123 114 102 104 94 79 65 80 60 47 42 -4 26 35 43 29 14 4 -4 -2 -3 5 2 12 17 14 9 3 10 13 12 5 -13 36 19 21 5 6 14 15 8 2 -4 -5 -19 -23 -49 -68 -59 -41 -14 14 3 -17 -16 20 -29 -72 -28 1 -7 -27 -30 -21 -13 -21 -26 -39 -47 -45 -34 -36 -30 -17 -44 -66 -33 18 24 41 21 11 15 31 26 7 9 27 36 36 40 50 67 81 92 62 27 -75 -63 -25 -15 -40 -96 -112 -121 -116 -125 -127 -127 -127 -127 -118 -106 -86 -84 -78 -52 -23 -33 -22 23 37 36 45 42 36 51 49 42 34 40 37 29 37 38 33 36 32 24 44 66 79 31 -42 -47 50 126 87 27 31 30 27 28 43 48 53 46 32 22 16 -5 -27 -9 16 -10 -10 -8 1 7 3 -19 -20 -10 -23 -37 -31 -45 -41 -37 -34 -42 -44 -42 -44 -45 -39 -58 -18 -12 -23 -24 -15 -7 8 4 -22 -32 -30 -33 -31 -30 -30 -21 -23 -31 -15 -23 -30 0 6 40 95 110 110 118 123 123 113 83 72 61 63 58 58 60 61 60 29 25 21 28 56 35 -29 -45 -61 -86 -96 -110 -88 -104 -126 -125 -127 -128 -128 -126 -125 -84 -33 -41 -58 -28 17 30 52 62 68 53 52 53 57 47 59 72 78 61 59 73 76 69 76 75 77 85 29 3 -31 -68 -69 -73 -69 -72 -73 -72 -70 -78 -84 -88 -81 -71 -60 -78 -109 -86 -49 -65 -26 -40 -55 -50 -73 -87 -96 -90 -71 -65 -47 -31 -25 -24 -21 -19 -23 -30 -9 -58 -82 -8 55 61 53 62 62 53 53 63 69 72 78 66 68 70 66 53 48 38 46 41 27 -20 -30 -72 -85 -98 -97 -83 -73 -68 -78 -62 -59 -40 -20 -4 -4 -9 -16 -16 -1 8 42 7 9 6 24 33 35 34 33 35 49 73 88 107 120 123 123 113 99 66 22 45 70 72 -75 -60 -55 -80 -82 -80 -93 -82 -83 -59 -38 -34 -19 1 7 8 9 19 45 22 -14 -31 -33 -36 -32 -24 -22 -9 -19 -19 4 17 32 45 42 23 10 8 4 2 0 12 27 39 30 56 57 40 38 29 29 27 34 50 65 60 64 62 39 27 20 21 19 -32 -73 -113 30 30 22 31 45 47 39 31 26 20 13 14 15 17 6 4 15 20 -11 -31 -72 -23 -18 23 40 0 -30 -11 -9 -34 -47 -33 -14 -10 -8 -26 -45 -59 -58 -41 -60 -75 -93 -46 -8 5 16 33 39 49 48 40 37 46 28 33 38 37 32 25 42 60 62 45 5 -16 -41 -13 1 6 7 2 1 8 18 23 30 25 15 7 3 -17 -20 36 111 80 37 68 -13 15 12 4 -1 -18 -32 -42 -44 -48 -45 -55 -64 -75 -98 -123 -125 -120 -82 -71 -36 -3 -44 -90 -84 -84 -72 -48 -31 -12 3 14 11 5 16 21 39 55 56 41 22 13 7 18 -98 -121 -101 -89 -65 -52 -40 -33 -26 -33 -46 -39 -36 -22 -4 4 -2 -12 -17 2 9 5 23 4 -8 -8 11 17 6 -6 -11 -10 -20 -5 12 17 16 13 7 -9 2 4 13 -14 47 52 65 39 22 40 59 60 56 52 43 23 20 10 -12 -14 -6 -1 -4 -12 -21 11 19 39 44 38 30 24 21 20 12 12 20 24 20 20 21 17 15 24 34 29 16 6 -4 16 54 100 123 125 119 75 26 -1 -9 -11 -1 -8 -16 -18 -10 -4 17 27 42 15 46 28 6 10 17 27 34 41 44 45 39 26 15 2 -5 3 1 -10 -14 -13 -8 35 -39 -32 -25 -28 -18 -9 -4 -19 -35 -39 -50 -62 -68 -63 -37 -23 -31 -70 -127 -127 -123 -68 -8 -21 -25 -12 -15 -18 -19 -32 -29 -16 -8 -13 -18 -10 -2 1 5 6 4 5 19 27 109 72 43 36 29 35 30 22 33 27 12 16 9 3 6 16 5 15 19 28 40 112 -127 -127 -126 -65 -21 -7 -7 5 -3 -18 -27 -23 -18 -21 -28 -27 -20 -27 -43 -28 -25 -7 -126 -125 -69 -68 -59 -65 -71 -54 -43 -61 -57 -61 -65 -63 -63 -62 -70 -63 -52 -39 -42 -23 -10 2 9 12 10 22 7 10 13 6 -16 -22 -19 -10 10 13 2 4 4 -3 -7 16 -40 -30 -26 -19 -14 -16 -13 -14 -1 -2 -15 -4 -10 -12 -19 -23 -20 -2 -6 -14 -14 8 -68 -36 2 20 28 38 45 31 -1 -32 -51 -57 -44 -48 -62 -61 -53 -1 64 57 52 56 56 30 -4 13 39 34 35 40 19 9 0 4 5 8 15 24 39 76 75 30 -42 -98 36 38 19 10 2 5 7 -2 -6 -5 9 24 22 18 21 21 6 -3 -15 -26 -24 -28 50 58 41 33 12 16 30 15 24 34 36 47 57 69 83 96 98 97 107 89 75 33 -89 -120 -59 -50 -26 18 -15 -53 -50 -29 -24 -25 -27 -32 -30 -36 -33 -22 1 -21 -50 -37 -4 -22 -12 -2 -12 -21 3 48 94 118 117 99 86 71 58 39 18 1 0 5 10 18 -33 -18 -8 8 2 -10 -2 12 32 45 53 63 61 64 64 56 42 29 23 14 -42 -50 13 -8 -23 -28 -19 -12 0 10 22 35 26 14 -6 -30 -63 -91 -114 -112 -66 -58 7 123 -45 -68 -57 -46 -38 -57 -76 -70 -75 -79 -70 -67 -62 -45 -45 -51 -59 -73 -54 -20 -30 -43 -12 0 8 -3 -21 -28 -35 -36 -26 -20 -28 -26 -26 -28 -41 -50 -49 -62 -29 -19 8 14 5 -11 -6 0 27 31 37 35 24 14 6 3 -2 -8 -12 8 26 81 120 124 124 125 47 20 30 42 45 63 82 121 127 126 97 65 51 33 -4 -12 1 9 -6 3 18 -4 11 6 -5 -14 -49 -60 -68 -61 -37 -11 -4 -15 -19 -35 -57 -63 -61 -38 -10 -43 -102 -85 0 -4 26 51 70 71 67 65 61 44 46 38 41 39 30 31 35 43 24 14 -4 -11 32 8 5 -4 3 8 22 24 18 31 39 38 52 56 55 67 72 55 46 82 69 50 -80 -91 -42 -33 -74 -127 -125 -92 -97 -113 -114 -113 -120 -121 -124 -123 -125 -117 -92 -65 -61 -72 9 1 -18 -12 -1 -7 -18 -16 7 18 10 17 0 -8 -24 -53 -78 -124 -128 -128 -119 -85 77 58 42 29 28 19 -16 -38 -67 -79 -86 -61 -55 -53 -43 -25 -12 3 23 17 28 62 34 69 89 75 89 76 55 40 22 19 26 24 38 38 32 20 14 5 4 9 -3 24 21 30 35 25 12 18 33 29 16 8 -4 5 8 3 -2 -10 -9 -17 -42 -36 -42 -18 33 77 98 83 41 26 30 29 36 40 35 17 12 3 -11 -11 -6 10 50 36 35 -8 -2 1 -18 -28 -35 -37 -46 -44 -38 -39 -54 -53 -57 -59 -53 -56 -55 -38 -17 -34 -57 -50 -85 -43 -28 -23 -37 -41 -31 -22 -20 -34 -44 -31 -24 -17 -20 -12 -10 4 18 16 34 41 -3 11 5 12 2 0 -13 -8 -1 -1 9 3 7 4 7 5 6 6 -2 -24 -53 -53 88 34 -12 -43 -31 -31 -35 -31 -24 -21 -24 -24 -17 -6 14 22 36 65 82 101 71 127 -7 -13 -19 -21 -32 -21 -10 -3 -26 -43 -45 -54 -61 -74 -77 -74 -71 -79 -95 -101 -95 -33 47 52 44 39 39 30 19 9 21 19 1 -7 -1 13 17 10 2 12 16 4 -15 39 73 55 49 55 48 45 48 52 44 50 59 56 47 52 55 63 57 44 67 79 74 58 -44 -66 -63 -53 -54 -44 -40 -42 -38 -50 -69 -68 -61 -60 -54 -58 -62 -67 -64 -39 -30 -76 -40 -41 -55 -48 -40 -44 -43 -22 -19 -28 -17 -19 -21 -18 -9 -4 5 -7 -45 -51 -81 -93 -27 -27 -36 -47 -51 -57 -54 -59 -58 -54 -49 -44 -52 -59 -50 -47 -44 -31 -29 -29 -19 61 -1 9 51 71 69 87 114 117 90 77 75 60 63 59 43 32 25 16 11 -1 2 9 -11 -26 -27 -29 -28 -29 -26 -23 -29 -36 -47 -72 -81 -72 -45 -27 -12 -1 -8 4 4 -16 -9 -62 -66 -56 -51 -53 -54 -53 -66 -77 -75 -79 -81 -81 -66 -55 -54 -41 -62 -82 -89 -83 -32 -65 -68 -65 -71 -70 -66 -40 -35 -48 -38 -43 -46 -43 -17 -4 -3 -6 -23 -30 -28 -17 53 28 19 4 -16 -8 -17 -20 0 12 14 30 28 25 9 15 32 98 111 95 80 54 -23 -30 -28 -31 -35 -36 -40 -39 -52 -52 -43 -54 -52 -51 -49 -51 -47 -32 4 -21 -40 -37 -49 -54 -31 -29 -22 -12 -5 -14 -28 -31 -34 -26 -19 -23 -31 -19 -13 -20 -43 -30 -8 5 59 101 113 85 51 46 43 43 34 20 25 30 33 32 23 16 12 9 1 8 18 1 46 63 43 32 24 25 22 27 28 44 61 68 56 60 69 71 51 45 57 80 125 127 48 47 43 66 54 33 3 21 29 43 48 48 49 59 55 46 37 19 22 36 59 51 -119 -91 -57 -52 -48 -52 -37 -22 -14 -19 -22 -34 -45 -47 -48 -49 -47 -39 -10 -8 -24 -24 23 37 30 38 27 30 24 27 30 30 33 35 30 24 31 31 28 32 27 25 0 -5 75 31 11 32 58 63 58 33 34 41 22 37 22 6 2 15 20 5 0 8 36 54 -5 1 4 -4 5 23 34 24 19 29 30 31 27 21 3 3 3 0 -35 -37 -23 10 -24 -7 14 29 39 19 11 9 3 6 9 -9 -19 -18 -5 -5 -5 -3 -2 -7 -9 6 -4 52 43 17 -14 -8 -8 11 21 19 20 16 34 43 8 -11 2 26 33 16 24 5 -24 1 1 --128 -128 127 -128 -128 -128 -128 127 -128 127 -128 -128 127 127 -128 127 -128 127 127 127 -128 35 -128 127 -104 diff --git a/labs/zx-example/CHANGELOG.md b/labs/zx-example/CHANGELOG.md deleted file mode 100644 index d3d44a09b..000000000 --- a/labs/zx-example/CHANGELOG.md +++ /dev/null @@ -1,101 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/zx-example - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **labs/zx:** readme ([51164ae](https://github.com/AliMD/alwatr/commit/51164ae94eb4d06076981b3844377d2088f24bdb)) - -### Features - -- labs ([c672f3c](https://github.com/AliMD/alwatr/commit/c672f3cd7e2a336c0fed2bcba5f09d85da62728e)) -- labs refrences and workspace ([9676e29](https://github.com/AliMD/alwatr/commit/9676e290a84e4da07dc38d4c66c29b9a6a6cc179)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/zx-example - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/zx-example - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -### Features - -- **xz-example:** such a wow! ([b523293](https://github.com/AliMD/alwatr/commit/b5232932f3b17a39993fbb1a102c58daeef273f7)) diff --git a/labs/zx-example/README.md b/labs/zx-example/README.md deleted file mode 100644 index 4f1e0c41f..000000000 --- a/labs/zx-example/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @alwatr/zx-example - -Test google zx with typescript in action. - -## Usage - -```bash -yarn build -./labs/zx-example/zx-example.js -``` diff --git a/labs/zx-example/package.json b/labs/zx-example/package.json deleted file mode 100644 index b0ea1bfac..000000000 --- a/labs/zx-example/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@alwatr/zx-example", - "version": "1.0.0", - "description": "Test google zx with typescript in action.", - "keywords": [ - "zx-example", - "typescript", - "esm", - "alwatr" - ], - "main": "zx-example.js", - "type": "module", - "types": "zx-example.d.ts", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "private": true, - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "labs/zx-example" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/labs/zx-example#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "scripts": { - "build": "chmod -v +x *.js" - }, - "dependencies": { - "@alwatr/logger": "^1.0.0", - "tslib": "^2.6.2", - "zx": "^7.2.3" - } -} diff --git a/labs/zx-example/src/zx-example.ts b/labs/zx-example/src/zx-example.ts deleted file mode 100644 index cdc318d3e..000000000 --- a/labs/zx-example/src/zx-example.ts +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env node - -import {$} from 'zx'; -import {spinner} from 'zx/experimental'; - -await $`cat package.json | grep name`; - -const out = await spinner('working...', () => $`sleep 2 && echo 'Hello ;)'`); -console.log('out: %s', out.stdout); - -// prettier-ignore -await Promise.all([ - $`sleep 1; echo 1`, - $`sleep 1; echo 2`, - $`sleep 1; echo 3`, -]); - -await $`ls -la`; diff --git a/labs/zx-example/tsconfig.json b/labs/zx-example/tsconfig.json deleted file mode 100644 index 870674c31..000000000 --- a/labs/zx-example/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "." - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"} - ] -} diff --git a/lerna.json b/lerna.json index b776729b1..a0b6557bd 100644 --- a/lerna.json +++ b/lerna.json @@ -1,19 +1,88 @@ { - "$schema": "node_modules/@lerna-lite/cli/schemas/lerna-schema.json", - "version": "independent", + "$schema": "https://raw.githubusercontent.com/lerna-lite/lerna-lite/main/packages/cli/schemas/lerna-schema.json", + "version": "1.0.0-0", "npmClient": "yarn", - "packages": ["core/*", "services/*", "ui/*", "uniquely/*", "labs/*"], + "packages": [ + "packages/*" + ], "loglevel": "verbose", "command": { "version": { "conventionalCommits": true, "changelog": true, - "changelogPreset": "angular", + "changelogPreset": { + "name": "conventionalcommits", + "types": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "feature", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "refactor", + "section": "Code Refactoring" + }, + { + "type": "chore", + "section": "Miscellaneous Chores" + }, + { + "type": "docs", + "section": "Documentation", + "hidden": true + }, + { + "type": "doc", + "section": "Documentation", + "hidden": true + }, + { + "type": "deps", + "section": "Dependencies update", + "hidden": true + }, + { + "type": "style", + "section": "Styles", + "hidden": true + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System", + "hidden": true + }, + { + "type": "ci", + "section": "Continuous Integration", + "hidden": true + } + ] + }, "changelogIncludeCommitsClientLogin": " by @%l", - "ignoreChanges": ["*.md"], - "message": "release: new independent version", - "private": false, + "message": "release:", "forceGitTag": true, + "signGitTag": true, + "signGitCommit": true, "push": true, "createRelease": "github" }, diff --git a/logo.md b/logo.md deleted file mode 100644 index 77d23456d..000000000 --- a/logo.md +++ /dev/null @@ -1,70 +0,0 @@ -# Alwatr logo - -``` - _ __ _ - / \ [ | / |_ - / _ \ | | _ _ __ ,--. `| |-'_ .--. - / ___ \ | |[ \ [ \ [ ]`'_\ : | | [ `/'`\] - _/ / \ \_ | | \ \/\ \/ / // | |,| |, | | -|____| |____|[___] \__/\__/ \'-;__/\__/[___] -``` - -``` -█████ ██ ██ ██ █████ ████████ ██████ -██ ██ ██ ██ ██ ██ ██ ██ ██ ██ -███████ ██ ██ █ ██ ███████ ██ ██████ -██ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ -██ ██ ███████ ███ ███ ██ ██ ██ ██ ██ -``` - -``` - █████╗ ██╗ ██╗ ██╗ █████╗ ████████╗██████╗ -██╔══██╗██║ ██║ ██║██╔══██╗╚══██╔══╝██╔══██╗ -███████║██║ ██║ █╗ ██║███████║ ██║ ██████╔╝ -██╔══██║██║ ██║███╗██║██╔══██║ ██║ ██╔══██╗ -██║ ██║███████╗╚███╔███╔╝██║ ██║ ██║ ██║ ██║ -╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ -``` - -``` - ▄▄▄ ██▓ █ █░ ▄▄▄ ▄▄▄█████▓ ██▀███ -▒████▄ ▓██▒ ▓█░ █ ░█░▒████▄ ▓ ██▒ ▓▒▓██ ▒ ██▒ -▒██ ▀█▄ ▒██░ ▒█░ █ ░█ ▒██ ▀█▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒ -░██▄▄▄▄██ ▒██░ ░█░ █ ░█ ░██▄▄▄▄██░ ▓██▓ ░ ▒██▀▀█▄ - ▓█ ▓██▒░██████▒░░██▒██▓ ▓█ ▓██▒ ▒██▒ ░ ░██▓ ▒██▒ - ▒▒ ▓▒█░░ ▒░▓ ░░ ▓░▒ ▒ ▒▒ ▓▒█░ ▒ ░░ ░ ▒▓ ░▒▓░ - ▒ ▒▒ ░░ ░ ▒ ░ ▒ ░ ░ ▒ ▒▒ ░ ░ ░▒ ░ ▒░ - ░ ▒ ░ ░ ░ ░ ░ ▒ ░ ░░ ░ - ░ ░ ░ ░ ░ ░ ░ ░ -``` - -``` - ▄████████ ▄█ ▄█ █▄ ▄████████ ███ ▄████████ - ███ ███ ███ ███ ███ ███ ███ ▀█████████▄ ███ ███ - ███ ███ ███ ███ ███ ███ ███ ▀███▀▀██ ███ ███ - ███ ███ ███ ███ ███ ███ ███ ███ ▄███▄▄▄▄██▀ -▀███████████ ███ ███ ███ ▀███████████ ███ ▀▀███▀▀▀▀▀ - ███ ███ ███ ███ ███ ███ ███ ███ ▀███████████ - ███ ███ ███▌ ▄ ███ ▄█▄ ███ ███ ███ ███ ███ ███ - ███ █▀ █████▄▄██ ▀███▀███▀ ███ █▀ ▄████▀ ███ ███ - ▀ ███ ███ -``` - -``` - AAA LLLLLLLLLLL WWWWWWWW WWWWWWWW AAA TTTTTTTTTTTTTTTTTTTTTTTRRRRRRRRRRRRRRRRR - A:::A L:::::::::L W::::::W W::::::W A:::A T:::::::::::::::::::::TR::::::::::::::::R - A:::::A L:::::::::L W::::::W W::::::W A:::::A T:::::::::::::::::::::TR::::::RRRRRR:::::R - A:::::::A LL:::::::LL W::::::W W::::::W A:::::::A T:::::TT:::::::TT:::::TRR:::::R R:::::R - A:::::::::A L:::::L W:::::W WWWWW W:::::W A:::::::::A TTTTTT T:::::T TTTTTT R::::R R:::::R - A:::::A:::::A L:::::L W:::::W W:::::W W:::::W A:::::A:::::A T:::::T R::::R R:::::R - A:::::A A:::::A L:::::L W:::::W W:::::::W W:::::W A:::::A A:::::A T:::::T R::::RRRRRR:::::R - A:::::A A:::::A L:::::L W:::::W W:::::::::W W:::::W A:::::A A:::::A T:::::T R:::::::::::::RR - A:::::A A:::::A L:::::L W:::::W W:::::W:::::W W:::::W A:::::A A:::::A T:::::T R::::RRRRRR:::::R - A:::::AAAAAAAAA:::::A L:::::L W:::::W W:::::W W:::::W W:::::W A:::::AAAAAAAAA:::::A T:::::T R::::R R:::::R - A:::::::::::::::::::::A L:::::L W:::::W:::::W W:::::W:::::W A:::::::::::::::::::::A T:::::T R::::R R:::::R - A:::::AAAAAAAAAAAAA:::::A L:::::L LLLLLL W:::::::::W W:::::::::W A:::::AAAAAAAAAAAAA:::::A T:::::T R::::R R:::::R - A:::::A A:::::A LL:::::::LLLLLLLLL:::::L W:::::::W W:::::::W A:::::A A:::::A TT:::::::TT RR:::::R R:::::R - A:::::A A:::::A L::::::::::::::::::::::L W:::::W W:::::W A:::::A A:::::A T:::::::::T R::::::R R:::::R - A:::::A A:::::A L::::::::::::::::::::::L W:::W W:::W A:::::A A:::::A T:::::::::T R::::::R R:::::R -AAAAAAA AAAAAAALLLLLLLLLLLLLLLLLLLLLLLL WWW WWW AAAAAAA AAAAAAA TTTTTTTTTTT RRRRRRRR RRRRRRR -``` diff --git a/package.json b/package.json index 09a18d2a8..8f4636360 100644 --- a/package.json +++ b/package.json @@ -1,87 +1,60 @@ { - "name": "@alwatr/monorepo", - "description": "The Alwatr Library", - "repository": "https://github.com/AliMD/alwatr/", + "name": "alwatr-monorepo", + "description": "Alwatr Ecosystem", + "repository": "https://github.com/Alwatr/alwatr", "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", + "license": "AGPL-3.0-only", "type": "module", "private": true, "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" + "node": ">=18.16.0", + "yarn": ">=4.0.0" }, "workspaces": [ - "core/*", - "services/*", - "ui/*", - "uniquely/*", - "labs/*", - "demo" + "packages/*" ], + "prettier": "@alwatr/prettier-config", "scripts": { - "l": "yarn lint", - "b": "yarn build", - "br": "run-s build build:r", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "run-s build serve", - "w": "yarn watch", - "f": "yarn format", - "fl": "yarn format:eslint", - "fp": "yarn format:prettier", - "rl": "run-s pull ver", - "lint": "run-s lint:*", - "lint:ts": "eslint . --config .eslintrc.json --ext .ts", - "build": "yarn build:ts", - "build:ts": "tsc --build", - "build:r": "lerna run build", - "format": "run-s format:prettier format:eslint", - "format:eslint": "yarn lint:ts --fix", - "format:prettier": "prettier . --ignore-path .gitignore --write", - "clean": "git clean -d -x -f --exclude=node_modules --exclude=*.env --exclude=_data", - "serve": "wds", - "watch": "run-p watch:* serve", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "ver": "lerna version", + "b": "yarn run build", + "c": "yarn run clean", + "cb": "yarn run clean && yarn run build", + "l": "yarn run lint", + "f": "yarn run format", + "rl": "yarn run pull && yarn run clean && yarn run build && yarn run lint && yarn run release", + "upd": "yarn set version latest; yarn up '*'; yarn up '*' -R; yarn dlx @yarnpkg/sdks vscode; yarn dedupe", + "lint": "yarn run lint:ts && yarn run lint:es", + "lint:es": "eslint . --config .eslintrc.json --ext .ts --ignore-path .prettierignore", + "lint:ts": "lerna run build:ts", + "build": "lerna run build", + "watch": "lerna run --parallel watch", + "format": "yarn run format:prettier && yarn run format:eslint", + "format:eslint": "yarn run lint:es --fix", + "format:prettier": "prettier . --ignore-path .prettierignore --write", + "clean": "git add -v . && git clean -d -x -f --exclude=node_modules --exclude='*.env' --exclude=_data --exclude='.pnp*' --exclude=.yarn", "pull": "git pull", - "push": "git push && git push --tags", + "release": "lerna version", "publish": "lerna publish from-package" }, "devDependencies": { - "@deanc/esbuild-plugin-postcss": "^1.0.2", - "@lerna-lite/changed": "^2.6.0", - "@lerna-lite/cli": "^2.5.1", - "@lerna-lite/diff": "^2.6.0", - "@lerna-lite/exec": "^2.6.0", - "@lerna-lite/publish": "^2.6.0", - "@lerna-lite/run": "^2.6.0", - "@lerna-lite/version": "^2.5.1", - "@types/node": "^20.9.0", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "@web/dev-server": "^0.4.0", - "@webcomponents/webcomponentsjs": "^2.8.0", - "autoprefixer": "^10.4.16", - "esbuild": "^0.19.5", - "eslint": "^8.49.0", - "eslint-config-google": "^0.14.0", - "eslint-import-resolver-typescript": "^3.6.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-lit": "^1.9.1", - "eslint-plugin-wc": "^2.0.0", - "nodemon": "^3.0.1", - "npm-run-all": "^4.1.5", - "postcss": "^8.4.31", - "postcss-cli": "^10.1.0", - "postcss-import": "^15.1.0", - "postcss-preset-env": "^9.3.0", - "prettier": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.6", - "tailwindcss": "^3.3.5", - "ts-lit-plugin": "^2.0.1", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "workbox-build": "^7.0.0" - } + "@alwatr/eslint-config": "^1.2.11", + "@alwatr/prettier-config": "^1.0.6", + "@alwatr/tsconfig-base": "^1.3.2", + "@lerna-lite/changed": "^3.9.3", + "@lerna-lite/cli": "^3.9.3", + "@lerna-lite/diff": "^3.9.3", + "@lerna-lite/exec": "^3.9.3", + "@lerna-lite/publish": "^3.9.3", + "@lerna-lite/run": "^3.9.3", + "@lerna-lite/version": "^3.9.3", + "@typescript-eslint/eslint-plugin": "^7.17.0", + "@typescript-eslint/parser": "^7.17.0", + "conventional-changelog-conventionalcommits": "^7.0.2", + "eslint": "^8.57.0", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-require-extensions": "^0.1.3", + "prettier": "^3.3.3", + "typescript": "^5.6.3" + }, + "packageManager": "yarn@4.5.0" } diff --git a/packages/alwatr/LICENSE b/packages/alwatr/LICENSE new file mode 100644 index 000000000..0ad25db4b --- /dev/null +++ b/packages/alwatr/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/packages/alwatr/README.md b/packages/alwatr/README.md new file mode 100644 index 000000000..9cbc3aeea --- /dev/null +++ b/packages/alwatr/README.md @@ -0,0 +1,15 @@ +# Alwatr Ecosystem + +## Sponsors + +The following companies, organizations, and individuals support Nitrobase ongoing maintenance and development. Become a Sponsor to get your logo on our README and website. + +[![Exir Studio](https://avatars.githubusercontent.com/u/181194967?s=200&v=4)](https://exirstudio.com) + +### Contributing + +Contributions are welcome! Please read our [contribution guidelines](https://github.com/Alwatr/.github/blob/next/CONTRIBUTING.md) before submitting a pull request. + +### License + +This project is licensed under the [AGPL-3.0 License](LICENSE). diff --git a/packages/alwatr/package.json b/packages/alwatr/package.json new file mode 100644 index 000000000..064897328 --- /dev/null +++ b/packages/alwatr/package.json @@ -0,0 +1,107 @@ +{ + "name": "alwatr", + "displayName": "Alwatr", + "version": "1.0.0-0", + "description": "Alwatr Ecosystem", + "author": "S. Ali Mihandoost ", + "keywords": [ + "alwatr" + ], + "type": "module", + "main": "./dist/main.cjs", + "module": "./dist/main.mjs", + "types": "./dist/main.d.ts", + "exports": { + ".": { + "types": "./dist/main.d.ts", + "import": "./dist/main.mjs", + "require": "./dist/main.cjs" + }, + "./nanolib": { + "types": "./dist/nanolib/nanolib.d.ts", + "import": "./dist/nanolib/nanolib.mjs", + "require": "./dist/nanolib/nanolib.cjs" + }, + "./nanolib/dedupe": { + "types": "./dist/nanolib/dedupe.d.ts", + "import": "./dist/nanolib/dedupe.mjs", + "require": "./dist/nanolib/dedupe.cjs" + }, + "./nanolib/exit-hook": { + "types": "./dist/nanolib/exit-hook.d.ts", + "import": "./dist/nanolib/exit-hook.mjs", + "require": "./dist/nanolib/exit-hook.cjs" + }, + "./nanolib/node-fs": { + "types": "./dist/nanolib/node-fs.d.ts", + "import": "./dist/nanolib/node-fs.mjs", + "require": "./dist/nanolib/node-fs.cjs" + }, + "./nitrobase": { + "types": "./dist/nitrobase.d.ts", + "import": "./dist/nitrobase.mjs", + "require": "./dist/flux.cjs" + }, + "./flux": { + "types": "./dist/flux.d.ts", + "import": "./dist/flux.mjs", + "require": "./dist/flux.cjs" + }, + "./nanotron": { + "types": "./dist/nanotron.d.ts", + "import": "./dist/nanotron.mjs", + "require": "./dist/nanotron.cjs" + } + }, + "license": "AGPL-3.0-only", + "files": [ + "**/*.{js,mjs,cjs,map,d.ts,html,md}", + "!demo/**/*" + ], + "engines": { + "node": ">=18.16.0", + "yarn": ">=4.0.0" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/Alwatr/alwatr", + "directory": "packages/alwatr" + }, + "homepage": "https://github.com/Alwatr/alwatr#readme", + "bugs": { + "url": "https://github.com/Alwatr/alwatr/issues" + }, + "prettier": "@alwatr/prettier-config", + "scripts": { + "b": "yarn run build", + "t": "yarn run test", + "w": "yarn run watch", + "c": "yarn run clean", + "cb": "yarn run clean && yarn run build", + "d": "yarn run build:es && yarn node --enable-source-maps --trace-warnings", + "build": "yarn run build:ts && yarn run build:es", + "build:es": "nano-build --preset=module3", + "build:ts": "tsc --build", + "test": "NODE_OPTIONS=\"$NODE_OPTIONS --enable-source-maps --experimental-vm-modules\" jest", + "watch": "yarn run watch:ts & yarn run watch:es", + "watch:es": "yarn run build:es --watch", + "watch:ts": "yarn run build:ts --watch --preserveWatchOutput", + "clean": "rm -rfv dist *.tsbuildinfo" + }, + "dependencies": { + "@alwatr/flux": "^3.2.0", + "@alwatr/nanolib": "^1.2.1", + "@alwatr/nanotron": "^4.3.0", + "@alwatr/nitrobase": "^7.3.0" + }, + "devDependencies": { + "@alwatr/nano-build": "^2.0.2", + "@alwatr/prettier-config": "^1.0.6", + "@alwatr/tsconfig-base": "^1.3.2", + "@alwatr/type-helper": "^2.0.2", + "typescript": "^5.6.3" + } +} diff --git a/packages/alwatr/src/flux.ts b/packages/alwatr/src/flux.ts new file mode 100644 index 000000000..d7d3b699b --- /dev/null +++ b/packages/alwatr/src/flux.ts @@ -0,0 +1 @@ +export * from '@alwatr/flux'; diff --git a/ui/ui-kit2/index.ts b/packages/alwatr/src/main.ts similarity index 100% rename from ui/ui-kit2/index.ts rename to packages/alwatr/src/main.ts diff --git a/packages/alwatr/src/nanolib/dedupe.ts b/packages/alwatr/src/nanolib/dedupe.ts new file mode 100644 index 000000000..3975799fb --- /dev/null +++ b/packages/alwatr/src/nanolib/dedupe.ts @@ -0,0 +1 @@ +export * from '@alwatr/nanolib/dedupe'; diff --git a/packages/alwatr/src/nanolib/exit-hook.ts b/packages/alwatr/src/nanolib/exit-hook.ts new file mode 100644 index 000000000..1e193c47d --- /dev/null +++ b/packages/alwatr/src/nanolib/exit-hook.ts @@ -0,0 +1 @@ +export * from '@alwatr/nanolib/exit-hook'; diff --git a/packages/alwatr/src/nanolib/nanolib.ts b/packages/alwatr/src/nanolib/nanolib.ts new file mode 100644 index 000000000..00f6d82bf --- /dev/null +++ b/packages/alwatr/src/nanolib/nanolib.ts @@ -0,0 +1 @@ +export * from '@alwatr/nanolib'; diff --git a/packages/alwatr/src/nanolib/node-fs.ts b/packages/alwatr/src/nanolib/node-fs.ts new file mode 100644 index 000000000..ab8d7e872 --- /dev/null +++ b/packages/alwatr/src/nanolib/node-fs.ts @@ -0,0 +1 @@ +export * from '@alwatr/nanolib/node-fs'; diff --git a/packages/alwatr/src/nanotron.ts b/packages/alwatr/src/nanotron.ts new file mode 100644 index 000000000..fdcf2c07e --- /dev/null +++ b/packages/alwatr/src/nanotron.ts @@ -0,0 +1 @@ +export * from '@alwatr/nanotron'; diff --git a/packages/alwatr/src/nitrobase.ts b/packages/alwatr/src/nitrobase.ts new file mode 100644 index 000000000..84bf7e649 --- /dev/null +++ b/packages/alwatr/src/nitrobase.ts @@ -0,0 +1 @@ +export * from '@alwatr/nitrobase'; diff --git a/packages/alwatr/tsconfig.json b/packages/alwatr/tsconfig.json new file mode 100644 index 000000000..0d577a1d9 --- /dev/null +++ b/packages/alwatr/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@alwatr/tsconfig-base/tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "emitDeclarationOnly": true, + "composite": true, + "types": ["@alwatr/nano-build", "@alwatr/type-helper"] + }, + "include": ["src/**/*.ts"], + "references": [] +} diff --git a/services/README.md b/services/README.md deleted file mode 100644 index 5e52ae33d..000000000 --- a/services/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Server Side Micro/Nano Services and APIs diff --git a/services/comment/CHANGELOG.md b/services/comment/CHANGELOG.md deleted file mode 100644 index 0d0eae30a..000000000 --- a/services/comment/CHANGELOG.md +++ /dev/null @@ -1,80 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/comment - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/comment - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/comment - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/comment - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- refrence type in tsconfigs ([0652ac6](https://github.com/AliMD/alwatr/commit/0652ac67be6167f4bfa60bf84282e40af3228f16)) -- resolve conflict ([052314d](https://github.com/AliMD/alwatr/commit/052314d2adb3b9b0e44e54f9b8e6d60fc1827075)) -- **services:** app name in home page ([6feab58](https://github.com/AliMD/alwatr/commit/6feab58b5655c7a09150ec83adf9f3bd8fe976b4)) -- **services:** name and desc ([453c1b6](https://github.com/AliMD/alwatr/commit/453c1b6ff334a23bea690b7ff9dd874471b25bb9)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/alwatr/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **type:** chat ([4b7ac95](https://github.com/AliMD/alwatr/commit/4b7ac95522dcb637ebab2eda0b8f3e0cd80d59b0)) -- **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -- **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/comment - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- clean command ([14bafbb](https://github.com/AliMD/alwatr/commit/14bafbb01b3c92ccf516346a4e5117f1893c32e9)) -- inline home route ([94279c2](https://github.com/AliMD/alwatr/commit/94279c21891fc710f48642b1c8debbf02b2436d3)) -- inline home route ([ce978f6](https://github.com/AliMD/alwatr/commit/ce978f6e1e2890e853d0db351c08efca665e5fad)) -- package.json script ([e633a8c](https://github.com/AliMD/alwatr/commit/e633a8c4355bec0d2fc044f073f7f639c0fd1976)) -- remove lint dependencies from services ([f047a5b](https://github.com/AliMD/alwatr/commit/f047a5bb0d1e8277f48b55969e18dc3582d9a234)) -- services serve script ([3c62e06](https://github.com/AliMD/alwatr/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- **services/comment:** outDir on tsconfig ([00702c3](https://github.com/AliMD/alwatr/commit/00702c3c45757a140bc95938a6377df8bee46518)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -- update reply nano-server ([5a2d0e5](https://github.com/AliMD/alwatr/commit/5a2d0e5698b16cffcc5393ee4a44ffda66702425)) - -### Features - -- esbuild (: ([43c7269](https://github.com/AliMD/alwatr/commit/43c7269333cf71b142e26da1456446d42fb3f8e0)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- move some depndencies to devDependencies ([4e9576e](https://github.com/AliMD/alwatr/commit/4e9576e6fd55f361e08a54230931ad45832131d9)) -- new build process ([aa23ed2](https://github.com/AliMD/alwatr/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -### Bug Fixes - -- **deps:** typescipt version ([5b6d98c](https://github.com/AliMD/alwatr/commit/5b6d98c82350eef6df30f420e550dd4cf356b974)) diff --git a/services/comment/README.md b/services/comment/README.md deleted file mode 100644 index ec642b6f7..000000000 --- a/services/comment/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Comment API Nanoservice - -Distributed simple and fast comment api nanoservice. diff --git a/services/comment/demo.http b/services/comment/demo.http deleted file mode 100644 index a443f515f..000000000 --- a/services/comment/demo.http +++ /dev/null @@ -1,15 +0,0 @@ -U2FsdGVkX18aF0k6ldWMz5HiiVjwFAuTToSH1/pQOjZjxHgqd6CfR9r83CJUVGbv -f8QaNzRuaM/4ixoR6S+i2U+sIFY1WjWe+/DFmyZXtAiwwR/JT1GHVyQwCNwj6bog -kOKACZGSFkbm8qTkW79Ptd5dDJ/nptJkQ37hIkWWOhD+0k5pSU/0AREOHy9+vKgE -mryg55Rw9XpskVfUGMgmuSi64ZdBGBAHwwsmhUDcdzp9sqbUREjSXxfnp8mi2tzB -GRJgLWCu2LrhOcCyXnmGAvRKf6PkHrIT/vmsyIFjeHk90Gs7qt2YcVgi0DHaivmh -ZT1oKGfj0A2pA7qvI7ypRC0TGicGRp2tUl2gWU+iisKjCZNro1awhcMSvRwvI05y -KdnajGg1cSSNPBCW7MyY+ReKxRCe8JrMjzPwwWHOIZW2jINipdTjfu+azteE1dOR -OytRbzjfvwPrGUOKddjGJXv7NtmpVK4/xMlW9K4k+vZSbHN1fT45MEuTEwtYFfWZ -Zl2hqDzWmgMbvOHD+L+mfj5n0wlq/+EopeukCl1HMNstYJTETFDKgaynoMgH/ugI -3fePlDqDMIYTqlElRbu6PXlHuW0F3qCCDmz0mc5jZ8PzDa3Z39hR3jXnCphyNPxn -fZwc1mVWymSmdXH95Twx3ZB/OAyxEM33ZU71bvDyF+qhrv4Tq5s2LloJ6p89kLgo -KceBF5YiVaqTM00Vxx5+TNCCLQu28Mc7wENdvAqk3huUeNg5bnfXviSMmMb5uzy4 -Bf5SBig3VSEPBBte4YMW7zLSehOMLvDBKpctMVpj3QimvyLHBjnEfejhgzo+FqRn -oCJCyyzeBtpEtG5cnSZcwY2ZwsEHvnZav0/eG766oWkI7pMwqp/n5pnDaZZ34h3g -VOtRWw0z6dEXGynvmxpXpE3kuum6bd70hdbryZOPFA8= diff --git a/services/comment/package.json b/services/comment/package.json deleted file mode 100644 index 7b158178b..000000000 --- a/services/comment/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@alwatr/comment", - "version": "1.0.0", - "description": "Alwatr Comment API Nanoservice, Distributed simple and fast comment nanoservice.", - "type": "module", - "keywords": [ - "api", - "comment", - "chat", - "microservice", - "nanoservice", - "typescript", - "alwatr" - ], - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "services/comment" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/services/comment#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "yarn build:es --analyze=verbose", - "build:ts": "tsc --build", - "build:es": "esbuild src/index.ts --platform=node --target=node19 --bundle --format=esm --minify --sourcemap --outdir=dist --out-extension:.js=.mjs", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "node --enable-source-maps dist/index.mjs", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - } -} diff --git a/services/comment/src/config.ts b/services/comment/src/config.ts deleted file mode 100644 index 504086ac3..000000000 --- a/services/comment/src/config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('comment'); - -export const config = { - nanoServer: { - host: process.env.HOST ?? '0.0.0.0', - port: process.env.PORT != null ? +process.env.PORT : 8000, - allowAllOrigin: true, - accessToken: process.env.ACCESS_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - storage: { - host: process.env.STORAGE_HOST ?? '127.0.0.1', - port: process.env.STORAGE_PORT != null ? +process.env.STORAGE_PORT : 9000, - token: process.env.STORAGE_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, -}; - -logger.logProperty?.('config', config); diff --git a/services/comment/src/index.ts b/services/comment/src/index.ts deleted file mode 100644 index 0505d11e0..000000000 --- a/services/comment/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {logger} from './config.js'; -import './route/home.js'; -import './route/patch.js'; -import './route/storage.js'; - -logger.logOther?.('..:: Alwatr Comment API Nanoservice ::..'); diff --git a/services/comment/src/lib/nano-server.ts b/services/comment/src/lib/nano-server.ts deleted file mode 100644 index 593467ef5..000000000 --- a/services/comment/src/lib/nano-server.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrNanoServer} from '@alwatr/nano-server'; - -import {config} from '../config.js'; - -export const nanoServer = new AlwatrNanoServer(config.nanoServer); diff --git a/services/comment/src/lib/storage.ts b/services/comment/src/lib/storage.ts deleted file mode 100644 index 4f860ec90..000000000 --- a/services/comment/src/lib/storage.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import {config} from '../config.js'; - -import type {ChatMessage} from '@alwatr/type'; - -export const storageClient = new AlwatrStorageClient(config.storage); diff --git a/services/comment/src/route/home.ts b/services/comment/src/route/home.ts deleted file mode 100644 index 139edfccd..000000000 --- a/services/comment/src/route/home.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {nanoServer} from '../lib/nano-server.js'; - -nanoServer.route('GET', '/', () => ({ - ok: true, - data: { - app: '..:: Alwatr Comment API Nanoservice ::..', - message: 'Hello ;)', - }, -})); diff --git a/services/comment/src/route/patch.ts b/services/comment/src/route/patch.ts deleted file mode 100644 index 7a089d1ff..000000000 --- a/services/comment/src/route/patch.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageClient} from '../lib/storage.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; -import type {ChatMessage, StringifyableRecord} from '@alwatr/type'; - -nanoServer.route('PATCH', '/', setComment); - -async function setComment( - connection: AlwatrConnection, -): Promise> { - logger.logMethod?.('setComment'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{storage: string}>({storage: 'string'}); - - const bodyJson = await connection.requireJsonBody(); - - bodyJson.id ??= 'auto_increment'; - - // check reply id exists - // if (bodyJson.replyId !== undefined && !(await storage.has(bodyJson.replyId, params.storage))) { - // delete bodyJson.replyId; - // } - - try { - return { - ok: true, - data: await storageClient.set(bodyJson, params.storage), - }; - } - catch (_err) { - const err = _err as Error; - logger.error('setComment', err.message || 'storage_error', err); - return { - ok: false, - statusCode: 500, - errorCode: 'storage_error', - meta: { - name: err.name, - message: err.message, - cause: err.cause as StringifyableRecord, - }, - }; - } -} diff --git a/services/comment/src/route/storage.ts b/services/comment/src/route/storage.ts deleted file mode 100644 index 801a43fd9..000000000 --- a/services/comment/src/route/storage.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageClient} from '../lib/storage.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; -import type {ChatMessage, StringifyableRecord} from '@alwatr/type'; - -nanoServer.route('GET', '/storage', getStorage); - -async function getStorage( - connection: AlwatrConnection, -): Promise, StringifyableRecord>> { - logger.logMethod?.('getStorage'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{name: string}>({name: 'string'}); - - try { - return await storageClient.getStorage(params.name); - } - catch (_err) { - const err = _err as Error; - logger.error('getStorage', err.message || 'storage_error', err); - return { - ok: false, - statusCode: 500, - errorCode: 'storage_error', - meta: { - name: err.name, - message: err.message, - cause: err.cause as StringifyableRecord, - }, - }; - } -} diff --git a/services/comment/tsconfig.json b/services/comment/tsconfig.json deleted file mode 100644 index 1f3a43b59..000000000 --- a/services/comment/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build" - // "noEmit": true - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/nano-server"}, - {"path": "../../core/logger"}, - {"path": "../../core/type"}, - {"path": "../../core/storage-client"} - ] -} diff --git a/services/flight-crawler/CHANGELOG.md b/services/flight-crawler/CHANGELOG.md deleted file mode 100644 index 31b43bddc..000000000 --- a/services/flight-crawler/CHANGELOG.md +++ /dev/null @@ -1,93 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/flight-finder/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/flight-finder-crawler - -# [1.0.0](https://github.com/AliMD/flight-finder/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/flight-finder-crawler - -# [0.32.0](https://github.com/AliMD/flight-finder/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Features - -- **flight-crawler:** don't notify if flight not found ([c6b17d5](https://github.com/AliMD/flight-finder/commit/c6b17d5f091cd7914cc64ef023eb2923587e6dd6)) - -# [0.31.0](https://github.com/AliMD/flight-finder/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/flight-finder/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -# [0.30.0](https://github.com/AliMD/flight-finder/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/flight-finder-crawler - -# [0.29.0](https://github.com/AliMD/flight-finder/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/flight-finder/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -# [0.28.0](https://github.com/AliMD/flight-finder/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- review issue ([e5d192c](https://github.com/AliMD/flight-finder/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **services:** name and desc ([453c1b6](https://github.com/AliMD/flight-finder/commit/453c1b6ff334a23bea690b7ff9dd874471b25bb9)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/flight-finder/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- version in package.json ([403baa5](https://github.com/AliMD/flight-finder/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -# [0.27.0](https://github.com/AliMD/flight-finder/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **flight-crawler:** maxHour in makeMessage ([b6599f9](https://github.com/AliMD/flight-finder/commit/b6599f9f17fca56268cf8cad9d719e6d2a6c4fef)) -- **flight-crawler:** min&max hour in make message ([611930b](https://github.com/AliMD/flight-finder/commit/611930b2984dcdf046b7ca6696ef0d0b7fe16bfc)) -- **flight-crawler:** min&max hour in make message ([a75f7a0](https://github.com/AliMD/flight-finder/commit/a75f7a027b9cdaf2edc6574d781b09b3caf3eb78)) - -### Features - -- **flight-crawler:** min&max hour filter in make message ([bf62864](https://github.com/AliMD/flight-finder/commit/bf62864c3d2bd3e00079d03cb260aeda23072008)) - -# [0.26.0](https://github.com/AliMD/flight-finder/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- all import without .js ([fa739ab](https://github.com/AliMD/flight-finder/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -- clean command ([14bafbb](https://github.com/AliMD/flight-finder/commit/14bafbb01b3c92ccf516346a4e5117f1893c32e9)) -- crawler loop ([72951f9](https://github.com/AliMD/flight-finder/commit/72951f904c8e8eb04ded2a485a65add99150f984)) -- **ff:** types ([68b00e0](https://github.com/AliMD/flight-finder/commit/68b00e0e53e3fe7639d7eb0f4966d6192be453e4)) -- **flight-crawler:** check job list not empty ([6aa8546](https://github.com/AliMD/flight-finder/commit/6aa8546ae24b7b49224000f5802602b5b5c34ca4)) -- **flight-crawler:** handle null min and max hour ([3178fa7](https://github.com/AliMD/flight-finder/commit/3178fa7954b73eb51dbd081ebc2103a7a45696a4)) -- **flight-crawler:** makeMessage ([1b36a69](https://github.com/AliMD/flight-finder/commit/1b36a69f0e418d1343f3a901f2207f3cba60a203)) -- **flight-crawler:** null maxPrice on makeMessage ([b87b3ed](https://github.com/AliMD/flight-finder/commit/b87b3edc83f449d56f8211a8550dd26c2ae45269)) -- **flight-crawler:** rename job to result in extrafiltr ([3dc4918](https://github.com/AliMD/flight-finder/commit/3dc4918ca0184cf56e3b90b828aacbe2c891d635)) -- **flight-crawler:** set in storage single time ([bfc87ce](https://github.com/AliMD/flight-finder/commit/bfc87ce851bfdf9fa31c687fb3fcf78e011c1cf1)) -- **flight-crawler:** sort ([48c3d10](https://github.com/AliMD/flight-finder/commit/48c3d102838c3d12f590fb58c88bab3aa6d09620)) -- **flight-crawler:** use getStorage ([a65e6bd](https://github.com/AliMD/flight-finder/commit/a65e6bdac15c811971e3ed2c19e822d0311f1dfe)) -- **flight-finder:** extra filter ([a17554b](https://github.com/AliMD/flight-finder/commit/a17554b94c749607a0adb55414960c95515f005c)) -- package.json script ([e633a8c](https://github.com/AliMD/flight-finder/commit/e633a8c4355bec0d2fc044f073f7f639c0fd1976)) -- services serve script ([3c62e06](https://github.com/AliMD/flight-finder/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- **services/comment:** outDir on tsconfig ([00702c3](https://github.com/AliMD/flight-finder/commit/00702c3c45757a140bc95938a6377df8bee46518)) -- tsconfig ([e96dcd3](https://github.com/AliMD/flight-finder/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -- **uniquely/flight-crawler:** prevent set storage repeated ([75bd67d](https://github.com/AliMD/flight-finder/commit/75bd67da3e63b0b5953b24da22d91cd649fa3bcb)) - -### Features - -- esbuild (: ([43c7269](https://github.com/AliMD/flight-finder/commit/43c7269333cf71b142e26da1456446d42fb3f8e0)) -- **ff:** min & max hour ([f7f5884](https://github.com/AliMD/flight-finder/commit/f7f58840ea4d7b0678107cebb3887523e2aa4c55)) -- **flight-crawler:** format prices ([2275944](https://github.com/AliMD/flight-finder/commit/2275944714bb03107300bd0be9e261e90de8843e)) -- **flight-crawler:** increase delay ([2c40c69](https://github.com/AliMD/flight-finder/commit/2c40c699151506a84912935c032be0e63fe9ed3a)) -- **flight-crawler:** new jobResult option ([4566b3d](https://github.com/AliMD/flight-finder/commit/4566b3d376a5d4b41e8fc29500219f9dc4720ce4)) -- **flight-crawler:** sort jobResult ([de6d511](https://github.com/AliMD/flight-finder/commit/de6d5112cd36178fee930fada5eba88846b5cc55)) -- **flight-crawler:** time filter ([bcff68f](https://github.com/AliMD/flight-finder/commit/bcff68fe5be6d50b20329cc752fb51e894ab0f52)) -- **flight-crawler:** update message ([1d3275c](https://github.com/AliMD/flight-finder/commit/1d3275cd4129960b15a03d03e4c468a839e7f3c2)) -- **flight-crawler:** use city list ([773c37d](https://github.com/AliMD/flight-finder/commit/773c37d2c8807e015e3c90167f564aeb2347328f)) -- improve error debugging ([1fba504](https://github.com/AliMD/flight-finder/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- move some depndencies to devDependencies ([4e9576e](https://github.com/AliMD/flight-finder/commit/4e9576e6fd55f361e08a54230931ad45832131d9)) -- new build process ([aa23ed2](https://github.com/AliMD/flight-finder/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) diff --git a/services/flight-crawler/README.md b/services/flight-crawler/README.md deleted file mode 100644 index 8a598d1fa..000000000 --- a/services/flight-crawler/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Flight Crawler Nanoservice - -Distributed simple and fast flight crawler nanoservice. diff --git a/services/flight-crawler/package.json b/services/flight-crawler/package.json deleted file mode 100644 index 7da831aff..000000000 --- a/services/flight-crawler/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@alwatr/flight-finder-crawler", - "version": "1.0.0", - "description": "Alwatr Flight Crawler Nanoservice, Distributed simple and fast flight crawler nanoservice.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/flight-finder", - "directory": "crawler" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "yarn build:es --analyze=verbose", - "build:ts": "tsc --build", - "build:es": "esbuild src/index.ts --platform=node --target=node19 --bundle --format=esm --minify --sourcemap --outdir=dist --out-extension:.js=.mjs", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "while true; do node dist/index.mjs; sleep 180; done", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - } -} diff --git a/services/flight-crawler/src/config.ts b/services/flight-crawler/src/config.ts deleted file mode 100644 index 2502430bf..000000000 --- a/services/flight-crawler/src/config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('flight-crawler'); - -export const config = { - storage: { - host: process.env.STORAGE_HOST ?? '127.0.0.1', - port: process.env.STORAGE_PORT != null ? +process.env.STORAGE_PORT : 9000, - name: process.env.STORAGE_NAME ?? 'job', - token: process.env.STORAGE_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - notifier: { - host: process.env.NOTIFIER_HOST ?? 'http://127.0.0.1:8001', - to: process.env.NOTIFIER_TO ?? 'all', - token: process.env.NOTIFIER_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, -}; - -logger.logProperty?.('config', config); diff --git a/services/flight-crawler/src/crawl.ts b/services/flight-crawler/src/crawl.ts deleted file mode 100644 index 54ed02d21..000000000 --- a/services/flight-crawler/src/crawl.ts +++ /dev/null @@ -1,189 +0,0 @@ -import {type FetchOptions, fetch} from '@alwatr/fetch'; - -import {config, logger} from './config.js'; -import {cityList} from './lib/city-list.js'; -import {storageClient} from './lib/storage.js'; - -import type {SepehrResponse} from './lib/type.js'; -import type {Job, JobDetail, JobResult} from '@alwatr/type/flight-finder.js'; - -export async function crawlAllJobs(): Promise { - logger.logMethod?.('crawlAllJobs'); - const jobList = (await storageClient.getStorage()).data; - const jobKeyList = Object.keys(jobList); - let updated = false; - - for (const jobKey of jobKeyList) { - try { - const job = jobList[jobKey]; - const oldResultList = job.resultList; - const resultList = await crawl(job.detail); - job.resultList = resultList; - if (differentObject(job.resultList, oldResultList)) { - const message = makeMessage(job); - if (message !== '') { - await notify(config.notifier.to, message); - } - - logger.logOther?.(`Notified to ${config.notifier.to}!`); - await storageClient.set(job); - updated = true; - } - } - catch (err) { - logger.error('crawlAllJobs', 'crawling_failed', err); - } - } - // for updating meta - if (updated === false) await storageClient.set(jobList[jobKeyList[jobKeyList.length - 1]]); -} - -async function crawl(detail: JobDetail): Promise { - logger.logMethodArgs?.('crawl', detail); - const fetchOption = makeRequestOption(detail); - const response = await makeRequest(fetchOption); - let resultList = await translateResponse(response); - resultList = extraFilterResult(resultList, detail); - return resultList; -} - -function differentObject(obj1: unknown, obj2: unknown): boolean { - return JSON.stringify(obj1) !== JSON.stringify(obj2); -} - -function makeRequestOption(detail: JobDetail): Partial & {url: string} { - logger.logMethod?.('makeRequest'); - const fetchOptions: Partial & {url: string} = { - url: 'https://api.sepehr360.ir//fa/FlightAvailability/Api/B2cOnewayFlightApi/Search', - method: 'POST', - headers: { - authority: 'api.sepehr360.ir', - }, - bodyJson: { - currencyType: 'IRR', - sortOrder: 1, - pageSize: 20, - pageNumber: 0, - originAirportIataCode: detail.origin, - destinationAirportIataCode: detail.destination, - departureDate: detail.date, - sort: 1, - }, - }; - - return fetchOptions; -} - -async function makeRequest(option: Partial & {url: string}): Promise { - const response = await fetch({ - ...option, - retry: 5, - timeout: 30_000, - }); - if (!response.ok) { - throw new Error('fetch_failed'); - } - return response; -} - -async function translateResponse(response: Response): Promise { - logger.logMethod?.('translateResponse'); - const responseJson = (await response.json()) as SepehrResponse; - - const jobResult: JobResult[] = []; - for (const flightInformation of responseJson.flightHeaderList) { - jobResult.push({ - price: +(flightInformation.formattedPrice as string).replaceAll(',', ''), - seatCount: flightInformation.seatCount, - time: flightInformation.cleanDepartureTime, - airline: flightInformation.airlineName, - airplane: flightInformation.airplaneName, - arrivalTime: flightInformation.arrivalTime, - flightId: flightInformation.cleanFlightNumber, - }); - } - - jobResult.sort((a, b) => { - const compare = a.price - b.price; - if (compare != 0) { - return compare; - } - else if (a.flightId > b.flightId) { - return 1; - } - else if (a.flightId < b.flightId) { - return -1; - } - else { - return 0; - } - }); - - return jobResult; -} - -function extraFilterResult(jobResultList: JobResult[], detail: JobDetail): JobResult[] { - logger.logMethod?.('extraFilterResult'); - let filteredJobResultList: JobResult[] = jobResultList; - - if (detail.maxPrice != null) { - const maxPrice = detail.maxPrice; - filteredJobResultList = filteredJobResultList.filter((result) => { - return result.price <= maxPrice; - }); - } - - filteredJobResultList = filteredJobResultList.filter((result) => { - return result.seatCount >= detail.seatCount; - }); - - if (detail.minHour != null && detail.maxHour != null) { - const minHour = detail.minHour; - const maxHour = detail.maxHour; - filteredJobResultList = filteredJobResultList.filter((result) => { - const resultTime = +result.time.trim().split(':')[0]; - return resultTime >= minHour && resultTime <= maxHour; - }); - } - - return filteredJobResultList; -} - -function makeMessage(job: Job): string { - logger.logMethod?.('makeMessage'); - - if (job.resultList.length === 0) { - // return 'هیچ پروازی یافت نشد!'; - return ''; - } - - const resultListStr = job.resultList.map((jobResult) => ` - 💰${jobResult.price.toLocaleString('en-US')} ⏰${jobResult.time} 💺${jobResult.seatCount} 🛫${jobResult.flightId} - `).join(''); - - return ` - تغییرات جدید در جستجوی ${job.id}: - - ${job.detail.description} - - ${cityList[job.detail.origin]} ✈️ ${cityList[job.detail.destination]} - - تاریخ: ${job.detail.date} - حداکثر قیمت: ${job.detail.maxPrice ? job.detail.maxPrice.toLocaleString('en-US') : 'ندارد'} - تعداد صندلی: ${job.detail.seatCount} - ${job.detail.minHour && job.detail.minHour ? `از ساعت ${job.detail.minHour} تا ${job.detail.maxHour}` : ''} - - ${resultListStr} - `.replaceAll(' ', ''); -} - -async function notify(to: string, message: string): Promise { - await fetch({ - url: config.notifier.host, - method: 'POST', - headers: { - Authorization: `Bearer ${config.notifier.token}`, - }, - bodyJson: {to, message}, - }); -} diff --git a/services/flight-crawler/src/index.ts b/services/flight-crawler/src/index.ts deleted file mode 100644 index 132e23092..000000000 --- a/services/flight-crawler/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {logger} from './config.js'; -import {crawlAllJobs} from './crawl.js'; - -logger.logOther?.('..:: Alwatr Flight Crawler Nanoservice ::..'); - -crawlAllJobs(); - diff --git a/services/flight-crawler/src/lib/city-list.ts b/services/flight-crawler/src/lib/city-list.ts deleted file mode 100644 index 0f34a9aec..000000000 --- a/services/flight-crawler/src/lib/city-list.ts +++ /dev/null @@ -1,185 +0,0 @@ -export const cityList: Record = { - THR: 'تهران', - MHD: 'مشهد', - KIH: 'کیش', - IST: 'استانبول', - SYZ: 'شیراز', - SAW: 'استانبول صبیحا گوکچن', - AWZ: 'اهواز', - IFN: 'اصفهان', - NJF: 'نجف', - TEQ: 'استانبول چورلو', - BND: 'بندرعباس', - ABD: 'آبادان', - TBZ: 'تبریز', - PGU: 'عسلویه', - GSM: 'قشم', - TBS: 'تفلیس', - ZBR: 'چابهار', - SRY: 'ساری', - ZAH: 'زاهدان', - IAQ: 'بوشهر', - BGW: 'بغداد', - RAS: 'رشت', - KER: 'کرمان', - KSH: 'کرمانشاه', - AZD: 'یزد', - GZP: 'آنتالیا', - DNZ: 'آنتالیا دنیزلی', - DEF: 'دزفول', - DWC: 'دبی', - ISE: 'آنتالیا اسپارتا', - GBT: 'گرگان', - IIL: 'ایلام', - OMH: 'ارومیه', - ADU: 'اردبیل', - XBJ: 'بیرجند', - HDM: 'همدان', - GYD: 'باکو', - ADB: 'ازمیر', - ESB: 'آنکارا', - MCT: 'مسقط', - LHE: 'لاهور', - RZR: 'رامسر', - NSH: 'نوشهر', - LRR: 'لارستان', - EVN: 'ایروان', - KUL: 'کوالالامپور', - MRX: 'ماهشهر', - SDG: 'سنندج', - AFZ: 'سبزوار', - KHD: 'خرم آباد', - DMK: 'بانکوک', - PYK: 'پیام کرج تهران', - LFM: 'لامرد', - ACZ: 'زابل', - VAN: 'وان', - SHJ: 'شارجه', - SVO: 'مسکو', - PVG: 'شانگهای', - EBL: 'اربیل', - ISU: 'سلیمانیه', - GCH: 'گچساران', - LHR: 'لندن', - AKW: 'امیدیه', - SYJ: 'سیرجان', - BJB: 'بجنورد', - JWN: 'زنجان', - KBL: 'کابل', - LON: 'لندن لندن', - CQD: 'شهرکرد', - JAR: 'جهرم', - ATH: 'آتن', - KWI: 'کویت', - BXR: 'بم', - KKS: 'کاشان', - BEY: 'بیروت', - FRA: 'فرانکفورت', - IMQ: 'ماکو', - PAR: 'پاریس', - AJK: 'اراک', - CDG: 'پاریس شارل دوگول', - ORY: 'پاریس اورلی', - YES: 'یاسوج', - CAN: 'گوانگجو', - RUD: 'شاهرود', - MIL: 'میلان', - BDH: 'بندر لنگه', - ZIA: 'مسکو زوموویسکی', - DME: 'مسکو دومودیدوا', - XNH: 'ناصریه', - BOM: 'بمبئی', - DAM: 'دمشق', - DOH: 'دوحه', - BSR: 'بصره', - IHR: 'ایرانشهر', - MUC: 'مونیخ', - DEL: 'دهلی', - KHY: 'خوی', - PFQ: 'پارس آباد', - BCN: 'بارسلونا', - RJN: 'رفسنجان', - BER: 'برلین', - DUS: 'دوسلدورف', - BGY: 'میلان اوریو آل سیریو برگامو', - JYR: 'جیرفت', - ARN: 'استکهلم', - TCX: 'طبس', - AMS: 'آمستردام', - HAM: 'هامبورگ', - KHI: 'کراچی', - ECN: 'ارجان', - FCO: 'رم', - ASF: 'آستراخان', - PEK: 'پکن (بیجینگ)', - BRU: 'بروکسل', - BUS: 'باتومی', - DYU: 'دوشنبه', - ACP: 'مراغه', - GOT: 'گوتنبرگ', - ALA: 'آلماتی', - AUH: 'ابوظبی', - KLM: 'کلاله', - BEG: 'بلگراد', - ADA: 'آدنا', - HEA: 'هرات', - KYA: 'قونیه', - BJV: 'بدروم', - LED: 'سنت پترزبورگ', - AMM: 'امان', - SCO: 'اکتائو', - VAR: 'وارنا', - KZN: 'کازان', - HKT: 'پوکت', - IEV: 'کی یف ژولیانی', - VIE: 'وین', - DMM: 'دمام', - CGN: 'کلن', - MZR: 'مزار شریف', - LCA: 'لارناکا', - ISB: 'اسلام آباد', - TAS: 'تاشکند', - KDH: 'قندهار', - DLM: 'آنتالیا دالامان مارماریس', - BAH: 'بحرین', - MSQ: 'مینسک', - CPH: 'کپنهاگ', - NBO: 'نایروبی', - JSK: 'جاسک', - TXL: 'برلین تگل', - OSL: 'اسلو', - HKG: 'هنگ کنگ', - VKO: 'مسکو ونوکوا', - MXP: 'میلان مالپنسا', - JAI: 'جایپور', - KBP: 'کی یف', - TSE: 'آستانه', - SXI: 'سیری', - KHK: 'خارک', - LGW: 'لندن گتویک', - ASB: 'عشق آباد', - IKA: 'تهران امام خمینی', - DXB: 'دبی دبی', - BKK: 'بانکوک بانکوک', - AYT: 'آنتالیا آنتالیا', - BUZ: 'بوشهر بوشهر', - AEU: 'ابوموسی', - LVP: 'لاوان', - SZX: 'شنژن بن', - SIN: 'سنگاپور', - YYZ: 'تورنتو', - YMQ: 'مونترال', - BNX: 'بانیا لوکا', - SLL: 'صلاله', - YKO: 'حکاری یوکسک‌ اووا', - QMJ: 'مسجد سلیمان', - SNX: 'سمنان', - OHS: 'صحار', - TZX: 'ترابزون', - FRU: 'بیشکک', - CMB: 'کلمبو', - BHK: 'بخارا', - NAJ: 'نخجوان', - CKT: 'سرخس', - RMI: 'ریمینی', -} as const; diff --git a/services/flight-crawler/src/lib/storage.ts b/services/flight-crawler/src/lib/storage.ts deleted file mode 100644 index 9a3288c9c..000000000 --- a/services/flight-crawler/src/lib/storage.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import {config} from '../config.js'; - -import type {Job} from '@alwatr/type/flight-finder.js'; - -export const storageClient = new AlwatrStorageClient(config.storage); diff --git a/services/flight-crawler/src/lib/type.ts b/services/flight-crawler/src/lib/type.ts deleted file mode 100644 index 4ba8fb78c..000000000 --- a/services/flight-crawler/src/lib/type.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type {StringifyableRecord} from '@alwatr/type'; - -interface SepehrFlightInformation extends StringifyableRecord { - airlineName: string; - airlineIataCode: string; - airplaneName: string; - cleanFlightNumber: string; - cleanDepartureTime: string; - arrivalTime: string; - originName: string; - destinationName: string; - cabinType: string; - formattedPrice: string; - durationTotalMinutes: number; - seatCount: number; -} - -export interface SepehrResponse extends StringifyableRecord { - flightHeaderList: SepehrFlightInformation[]; -} - diff --git a/services/flight-crawler/tsconfig.json b/services/flight-crawler/tsconfig.json deleted file mode 100644 index a48c7e79f..000000000 --- a/services/flight-crawler/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build" - // "noEmit": true - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"}, - {"path": "../../core/type"}, - {"path": "../../core/fetch"}, - {"path": "../../core/storage-client"} - ] -} diff --git a/services/form-registration/CHANGELOG.md b/services/form-registration/CHANGELOG.md deleted file mode 100644 index 210916d3f..000000000 --- a/services/form-registration/CHANGELOG.md +++ /dev/null @@ -1,49 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/form-registration - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/form-registration - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/form-registration - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/form-registration - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **fetch:** device id to client id ([077e467](https://github.com/AliMD/alwatr/commit/077e4671d804d43c8f61a9d163d8d51d7a69134e)) -- **form-reg:** build issue ([4aad72c](https://github.com/AliMD/alwatr/commit/4aad72c039e9a90e0c77976435430c79efb4b607)) -- **form-reg:** remove access to all storage ([61efba8](https://github.com/AliMD/alwatr/commit/61efba8ada31e75952a996babcbcc383ed86de60)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -### Features - -- **form-reg:** dynamic form storage from valid list ([20459b1](https://github.com/AliMD/alwatr/commit/20459b115f8a195472c800cf171ffbc2e4e933d4)) -- **form-registration:** api prefix ([6242eb1](https://github.com/AliMD/alwatr/commit/6242eb16743e0447d1071451a339e0def6367ddf)) -- **form-registration:** deviceId, remoteAddress in request ([afd6af0](https://github.com/AliMD/alwatr/commit/afd6af03d0ad038553f05c9753a44a9418eab07c)) -- **form-registration:** get storage name in query params ([53ca10b](https://github.com/AliMD/alwatr/commit/53ca10bcff2a5bdaf04823a7d46437fa02582e81)) -- **math:** rename deviceId to clientId ([b211fd4](https://github.com/AliMD/alwatr/commit/b211fd42245d51d7109186ddb2f41574d0f0b786)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **form-registration:** service name ([6fc6ea0](https://github.com/AliMD/alwatr/commit/6fc6ea08103d6c4de62f0aba5e5791a20561d484)) diff --git a/services/form-registration/README.md b/services/form-registration/README.md deleted file mode 100644 index 64a6569c7..000000000 --- a/services/form-registration/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Form Registration API Nanoservice - -Distributed simple and fast nanoservice for registering form information. diff --git a/services/form-registration/demo.http b/services/form-registration/demo.http deleted file mode 100644 index 3448dd448..000000000 --- a/services/form-registration/demo.http +++ /dev/null @@ -1,19 +0,0 @@ -U2FsdGVkX19j530vcYY5SVWoC5pfiHLRGEpyMPuXeyO2NxZizZNs/l8wLHYYVVQy -qNv7+qXP59K3ogfL0yTPlmXFIjQB/ZGkQplCV/FQF1nGyJ0lXrDSctiroY7YNB26 -fnt/JUNPYh7NKwTFSu6tYOsuKE+hE6nvY3tLmzYrzMLmqFs96I8u9Fg0J/Le9YuQ -D0FulX9Ru5ROLkmIi2jyfFILpL9wodZtAc5V6pc8dgCy3inN959pxnGT7jDiYIoh -/395ySzniKwV1ZwU0zkDTmdAw3deg77qhbiHkGH64LRAX1G9mP1c3W4dOtq1oXsy -ayVKnadOaDf6IV1xBDKezdci7CRqIpRoW1m6mr15KdurcBW9+kCZQ46W2eAcLSe0 -IlTolI4xfQKpgheWYJxSURJTqeH0/pZ3PMv3LN+jTbD0Wfm3EUEBmNI9NQfWdOOs -dvZv7Mis6BXNM8C+r4b8F8ZeZvnyBJqrF7d6v8tCRRnhEz8/OaS1vrcFNr0GSoIU -AqlBmo9vtSGU7UefviHfkMuzm6zLam4LP2Lx4pjGygQixS/uQHvfkPsONaKbgMgr -JHqWydYnVR/3j7cpxa1dPPYtFgOzWs7GFSOhaHDV0/nK9/unjz8J5piNRArmL7Pl -kAqSlN8MWSUEcrdjSv+odkRgTG3D9BPevTGwnkTNjvFpIe6LBv71cVTXoINoZfRK -mjlLYC36Y1uBsC07If1tj/criJvBDm4RHkwT4s0/3a1FA2wORIduAE/vPz0aMp3d -Uz1vDlkd4bElRLEZcDh6SM8lBe1AhW7XYGA9DcIuTA9SAjfItzgeOVrRSNU4D4SD -RzCD1RUhwuMaS2xUF6gTKasEjvnSQepRcu6MGvm/ZVn35b/IapLmzk0qDm3u5cRX -1RB7QtzoU0EdD3p1xuhrPA9hRJz7Ah6MoR7eFyiKWKDMLEXcZxzjtt6MLKL39lk1 -PRcvTAaCZqjDFDLsYOjmnRLw5if3rvMkbM1SkgKlp7hvWq6s9oWA3f+S4u05dv7b -obCaPbFftx044SlGv5ks0wpWxHcnKAtLxQIisuh8UFuNYWKn/G4oX1RgPJaY8Kdr -DDWJvEs83t9wSb0wnYqQQnamTOFBrPR/I14N9bQ3s5iVbCOX3Bee66bkjt5mCpvg -6wJxrbzE7L8ztneZ9CX5rg== diff --git a/services/form-registration/package.json b/services/form-registration/package.json deleted file mode 100644 index e014c65b7..000000000 --- a/services/form-registration/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@alwatr/form-registration", - "version": "1.0.0", - "description": "Alwatr Form Registration API Nanoservice, Distributed simple and fast nanoservice for registering form information.", - "type": "module", - "keywords": [ - "api", - "form", - "microservice", - "nanoservice", - "typescript", - "alwatr" - ], - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "services/form-registration" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/services/form-registration#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "yarn build:es --analyze=verbose", - "build:ts": "tsc --build", - "build:es": "esbuild src/index.ts --platform=node --target=node19 --bundle --format=esm --minify --sourcemap --outdir=dist --out-extension:.js=.mjs", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "node --enable-source-maps dist/index.mjs", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - } -} diff --git a/services/form-registration/src/config.ts b/services/form-registration/src/config.ts deleted file mode 100644 index ad0081ae6..000000000 --- a/services/form-registration/src/config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('form'); - -export const config = { - nanoServer: { - host: process.env.HOST ?? '0.0.0.0', - port: process.env.PORT != null ? +process.env.PORT : 8000, - allowAllOrigin: true, - accessToken: process.env.ACCESS_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - storage: { - host: process.env.STORAGE_HOST ?? '127.0.0.1', - port: process.env.STORAGE_PORT != null ? +process.env.STORAGE_PORT : 9000, - token: process.env.STORAGE_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - formList: (process.env.FORM_LIST ?? 'temp') - .split(',') - .map((f) => f.trim()) - .filter((f) => f != ''), -}; - -logger.logProperty?.('config', config); diff --git a/services/form-registration/src/index.ts b/services/form-registration/src/index.ts deleted file mode 100644 index 564c990bb..000000000 --- a/services/form-registration/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {logger} from './config.js'; -import './route/home.js'; -import './route/put.js'; - -logger.logOther?.('..:: Alwatr Form Registration API Nanoservice ::..'); diff --git a/services/form-registration/src/lib/nano-server.ts b/services/form-registration/src/lib/nano-server.ts deleted file mode 100644 index 593467ef5..000000000 --- a/services/form-registration/src/lib/nano-server.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrNanoServer} from '@alwatr/nano-server'; - -import {config} from '../config.js'; - -export const nanoServer = new AlwatrNanoServer(config.nanoServer); diff --git a/services/form-registration/src/lib/storage.ts b/services/form-registration/src/lib/storage.ts deleted file mode 100644 index dc45ba2d1..000000000 --- a/services/form-registration/src/lib/storage.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import {config} from '../config.js'; - -import type {RecordItem} from '../type.js'; - -export const storageClient = new AlwatrStorageClient(config.storage); diff --git a/services/form-registration/src/route/home.ts b/services/form-registration/src/route/home.ts deleted file mode 100644 index 290d94536..000000000 --- a/services/form-registration/src/route/home.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {nanoServer} from '../lib/nano-server.js'; - -nanoServer.route('GET', '/', () => ({ - ok: true, - data: { - app: '..:: Alwatr Form Registration API Nanoservice ::..', - message: 'Hello ;)', - }, -})); diff --git a/services/form-registration/src/route/put.ts b/services/form-registration/src/route/put.ts deleted file mode 100644 index fbae4f885..000000000 --- a/services/form-registration/src/route/put.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageClient} from '../lib/storage.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; -import type {AlwatrDocumentObject, StringifyableRecord} from '@alwatr/type'; - -nanoServer.route('PUT', '/form/', async ( - connection: AlwatrConnection, -): Promise, StringifyableRecord>> => { - logger.logMethod?.('put'); - - connection.requireToken(config.nanoServer.accessToken); - const params = connection.requireQueryParams<{formId: string}>({formId: 'string'}); - const clientId = connection.requireClientId(); - const remoteAddress = connection.getRemoteAddress(); - - if (config.formList.indexOf(params.formId) === -1) { - return { - ok: false, - statusCode: 404, - errorCode: 'form_not_found', - }; - } - - const bodyJson = await connection.requireJsonBody(); - - await storageClient.set( - { - ...bodyJson, - id: 'auto_increment', - remoteAddress: remoteAddress, - clientId: clientId, - }, - 'form-' + params.formId, - ); - - return { - ok: true, - data: {}, - }; -}); diff --git a/services/form-registration/src/type.ts b/services/form-registration/src/type.ts deleted file mode 100644 index 1cec99514..000000000 --- a/services/form-registration/src/type.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {AlwatrDocumentObject} from '@alwatr/type'; - -export type RecordItem = AlwatrDocumentObject & { - clientId: string; - remoteAddress: string; -} diff --git a/services/form-registration/tsconfig.json b/services/form-registration/tsconfig.json deleted file mode 100644 index 1f3a43b59..000000000 --- a/services/form-registration/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build" - // "noEmit": true - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/nano-server"}, - {"path": "../../core/logger"}, - {"path": "../../core/type"}, - {"path": "../../core/storage-client"} - ] -} diff --git a/services/storage-server/CHANGELOG.md b/services/storage-server/CHANGELOG.md deleted file mode 100644 index 8fddb3a2e..000000000 --- a/services/storage-server/CHANGELOG.md +++ /dev/null @@ -1,215 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/storage-server - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **storage-server/link:** make dest folder if not exist ([b71acb4](https://github.com/AliMD/alwatr/commit/b71acb40e1ac07668a825703253b5c205f106bb4)) -- **storage-server:** remove json extension ([8d70704](https://github.com/AliMD/alwatr/commit/8d707046aeb35e4ebcfc0ea0e257ea29653fad34)) -- **storage-server:** rollback json extension as correct way ([47e6bc2](https://github.com/AliMD/alwatr/commit/47e6bc22076fd4835a1604370318792985472233)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- import util/node ([ca9e995](https://github.com/AliMD/alwatr/commit/ca9e995567ad267c1730e1c98f9dbbd03ab90331)) -- **storage-server:** link delay issue ([6498852](https://github.com/AliMD/alwatr/commit/6498852e406252b387f7e8ecaea1c9e74501f53d)) -- **storage-server:** return value ([6e31502](https://github.com/AliMD/alwatr/commit/6e3150296af8b0e6f45969686c21fba6c5a98d80)) - -### Features - -- **storage-server:** nre api response types ([8bb9408](https://github.com/AliMD/alwatr/commit/8bb94085584acf6b6a86b0a9bd82e060ae5b7f33)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **storage-server/cache-api-response:** resolve path ([dba3a76](https://github.com/AliMD/alwatr/commit/dba3a76bdcb4ec1732d71fb1ca7e94e44e3458fb)) -- **storage-server/cache-api-response:** resolve path ([ae10ebd](https://github.com/AliMD/alwatr/commit/ae10ebd584ff0047508aa175b3dc46e1cfc585e1)) -- **storage-server/cache-api-response:** resolve path and check not outside of base ([5f80d61](https://github.com/AliMD/alwatr/commit/5f80d6128d55fea52c2a5a28debfe8039ebd0e44)) -- **storage-server/link:** resolve and security check paths ([c4db8f4](https://github.com/AliMD/alwatr/commit/c4db8f4f0aabb7a83a6081776e992bc75a34f5f7)) -- **storage-server/touch:** remove id query params ([f6c9671](https://github.com/AliMD/alwatr/commit/f6c96719b00d8d6014a566396e06cfd6ef950454)) -- **storage-server:** import cache-api-response ([1ffa5b3](https://github.com/AliMD/alwatr/commit/1ffa5b3b8fb276b2af99af41af8270182f7de0b0)) -- **storage-server:** import route ([78fff6e](https://github.com/AliMD/alwatr/commit/78fff6e464535cadcd28411f82b1a8e0b370fa2e)) -- **storage-server:** routes ([3e162d1](https://github.com/AliMD/alwatr/commit/3e162d10daabdfbe91f4273bdc032031bd87cdf9)) - -### Features - -- **service:** `link` route ([eeb3275](https://github.com/AliMD/alwatr/commit/eeb3275160df0f5a307aa21d3406930d3ec24506)) -- **storage-server/cache-api-response:** demo ([8ad9193](https://github.com/AliMD/alwatr/commit/8ad9193cdacf7806486ead9e00da1bf0c199b932)) -- **storage-server/link:** make dest folder if not exist ([a68a442](https://github.com/AliMD/alwatr/commit/a68a442423e42dd1820c7e95140c05581accf380)) -- **storage-server:** `cache-api-response` route ([666b255](https://github.com/AliMD/alwatr/commit/666b2557aaccc256c7f8e89f117207fa1da21b81)) -- **storage-server:** add touch method ([a99ae5d](https://github.com/AliMD/alwatr/commit/a99ae5df13f909eba4ad5cbf6d7d04cb2a98b6f6)) -- **storage-server:** demo for link and touch ([4a59530](https://github.com/AliMD/alwatr/commit/4a595305bfde7127f32ee8096479d55c9d3b4490)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Features - -- **storage:** design new batch api in demo.http ([9a0e655](https://github.com/AliMD/alwatr/commit/9a0e65562a9781f732491bb5935d5ae98afe4e80)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **storage-server:** type ([5e033d7](https://github.com/AliMD/alwatr/commit/5e033d75d158a3b634a0d05da741241ff76f58d9)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **services:** app name in home page ([6feab58](https://github.com/AliMD/alwatr/commit/6feab58b5655c7a09150ec83adf9f3bd8fe976b4)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/alwatr/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/storage-server - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- clean command ([14bafbb](https://github.com/AliMD/alwatr/commit/14bafbb01b3c92ccf516346a4e5117f1893c32e9)) -- config ([893ba7c](https://github.com/AliMD/alwatr/commit/893ba7c92002a01d802ee945b65a7c3accc244bb)) -- package.json script ([e633a8c](https://github.com/AliMD/alwatr/commit/e633a8c4355bec0d2fc044f073f7f639c0fd1976)) -- remove lint dependencies from services ([f047a5b](https://github.com/AliMD/alwatr/commit/f047a5bb0d1e8277f48b55969e18dc3582d9a234)) -- services serve script ([3c62e06](https://github.com/AliMD/alwatr/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- **storage-server:** prevent to modify storage by reply ([5baecda](https://github.com/AliMD/alwatr/commit/5baecda57b78ac984a5e92108d12acdd22ac0d44)) -- tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35)) -- update reply nano-server ([5a2d0e5](https://github.com/AliMD/alwatr/commit/5a2d0e5698b16cffcc5393ee4a44ffda66702425)) - -### Features - -- esbuild (: ([43c7269](https://github.com/AliMD/alwatr/commit/43c7269333cf71b142e26da1456446d42fb3f8e0)) -- improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- move some depndencies to devDependencies ([4e9576e](https://github.com/AliMD/alwatr/commit/4e9576e6fd55f361e08a54230931ad45832131d9)) -- new build process ([aa23ed2](https://github.com/AliMD/alwatr/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) -- **publish-services:** synamic dockerfile for all services ([a900ae3](https://github.com/AliMD/alwatr/commit/a900ae3f795392031d8e0410fc57b136927aa53a)) -- **storage-server:** SAVE_DEBOUNCE config ([6997e12](https://github.com/AliMD/alwatr/commit/6997e1295cf82fcc3b043bbdd1199a70b6144df5)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -### Bug Fixes - -- **deps:** typescipt version ([5b6d98c](https://github.com/AliMD/alwatr/commit/5b6d98c82350eef6df30f420e550dd4cf356b974)) - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- **services/storage-server:** Dockerfile CMD ([1823e56](https://github.com/AliMD/alwatr/commit/1823e56229eccaba86325344011fb54804f66496)) -- **services:** dockerfile copy issue ([d2cf4bc](https://github.com/AliMD/alwatr/commit/d2cf4bccc0f5cdc034dbce9d17262d17b0df1198)) -- **services:** dockerfile copy issue ([0fa5bba](https://github.com/AliMD/alwatr/commit/0fa5bba017124221cfcfe75ad9ac1ad402faedef)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- remove \_updatedBy ([d8d5c83](https://github.com/AliMD/alwatr/commit/d8d5c83884bbd30566001ff84faf9e840503471c)) -- **services/storage-server:** dockerfile syntaxt ([42ba235](https://github.com/AliMD/alwatr/commit/42ba235371de46f6ef9a0ea5554afa41fe9001fa)) -- **storage-server:** dockerfile ([5fc7c9a](https://github.com/AliMD/alwatr/commit/5fc7c9a018ebcc6acefb0c6c6740759a7f7f8bd4)) -- **storage-server:** dockerfile args ([7777ca4](https://github.com/AliMD/alwatr/commit/7777ca4f1c7a33a21753b52205fcca0540d5eea2)) -- **storage-server:** dockerfile copy path ([a3021af](https://github.com/AliMD/alwatr/commit/a3021af0cdb35a25271e2a9e447a39426e634645)) -- **storage-server:** dockerfile from ([af63854](https://github.com/AliMD/alwatr/commit/af63854b24da6fa75108fe962a278fc107070102)) -- **storage-server:** types ([3f3d98a](https://github.com/AliMD/alwatr/commit/3f3d98a3dcd51340f888ab3db10c624e4e1ecd4b)) -- update types ([44cc57f](https://github.com/AliMD/alwatr/commit/44cc57f97a99ed810dae3fde39c9525bd0e8ff3c)) -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -### Features - -- **services/storage-server:** dockerignore ([530d342](https://github.com/AliMD/alwatr/commit/530d342e6f9fcd5c9ec4638b1a714fb3ac08c083)) -- **storage-server:** dockerfile ([aa80d6e](https://github.com/AliMD/alwatr/commit/aa80d6ec431e3b62beb26dba0fcc220ad27aaaf0)) -- **storage-server:** remove deps to fetch ([93d0c24](https://github.com/AliMD/alwatr/commit/93d0c244b9b943e4fd4ec982086574cd413fde11)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/storage-server - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -### Bug Fixes - -- **service:** update package.json ([31dc122](https://github.com/AliMD/alwatr/commit/31dc122cd4050167ece17e53800b3844b5c99c16)) - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -### Bug Fixes - -- **storage-client:** return boolean has in method ([68123cd](https://github.com/AliMD/alwatr/commit/68123cd92d2ec085dc72d948a163c26796b27adc)) -- **storage-server:** add host ([0f1d126](https://github.com/AliMD/alwatr/commit/0f1d126094cb816e947d9926088e93d556573c40)) -- **storage-server:** DocumentObject type ([cf8cf3e](https://github.com/AliMD/alwatr/commit/cf8cf3e128ddce690d5a7ad044007d7e76b3f6f9)) -- **storage-server:** path DocumentObject issue ([83ba54c](https://github.com/AliMD/alwatr/commit/83ba54cb73ba8efb5b395c0772d37601e997175e)) -- **storage-server:** use new storage-engine ([48bd4eb](https://github.com/AliMD/alwatr/commit/48bd4eb2e010d7ba1a29816b30dadb0a8247e0f0)) - -### Features - -- **services/storage-server:** has route ([7254393](https://github.com/AliMD/alwatr/commit/72543932408f5ffc24df79d577d3de8f97fb0358)) - -### Performance Improvements - -- **storage-server:** debug --trace-gc ([8f6adf4](https://github.com/AliMD/alwatr/commit/8f6adf4d6547c57f62e105ce83eef014360b3ca3)) - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -## [0.16.1](https://github.com/AliMD/alwatr/compare/v0.16.0...v0.16.1) (2022-09-10) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package alwatr-storage-nanoservice - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -### Bug Fixes - -- **storage:** first log ([76a32d0](https://github.com/AliMD/alwatr/commit/76a32d071b22b3a5b96a880d386bb3408ebe29ad)) -- **storage:** imports ([8d86a73](https://github.com/AliMD/alwatr/commit/8d86a73c85c117416e2ae0f4c9b879bfbc2d8a7c)) -- **storage:** review and test ([adc1d0b](https://github.com/AliMD/alwatr/commit/adc1d0b2ebd9cce4df946b21745c1a61172e66bb)) - -### Features - -- **services/storage:** base config ([75ae7d2](https://github.com/AliMD/alwatr/commit/75ae7d27dc3d910a2f45cf92e63bbd5115cc8fca)) -- **services/storage:** updateDocument route ([723c795](https://github.com/AliMD/alwatr/commit/723c795d573635653ee4246fb91dfe096a414cb2)) -- **services/storage:** extract and validate token ([dd4ffc4](https://github.com/AliMD/alwatr/commit/dd4ffc44b05ba0496b530a4a69164d595b72c081)) -- **services/storage:** make base types ([fb26b7a](https://github.com/AliMD/alwatr/commit/fb26b7a4f7646e17f4b1c6a5b2c4b51d666752a0)) -- **services/storage:** storage privider ([9b9c07f](https://github.com/AliMD/alwatr/commit/9b9c07f53725fb7eb2a92706d4f3392675d8aad2)) -- **services/storage:** test and demo ([22e8ad4](https://github.com/AliMD/alwatr/commit/22e8ad44cb39cacdb99f7535befed1a736aec773)) -- **storage:** docker ([a78f784](https://github.com/AliMD/alwatr/commit/a78f7845aaaf4faace6de92dae57763299ee7d10)) -- **storage:** get method ([0b04f12](https://github.com/AliMD/alwatr/commit/0b04f1209d7f865e2ef0e884a293587cfcd72420)) diff --git a/services/storage-server/README.md b/services/storage-server/README.md deleted file mode 100644 index e3964f040..000000000 --- a/services/storage-server/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Storage Server (Nanoservice) - -Elegant micro in-memory json-like storage nanoservice with disk backed, Fastest NoSQL Database. diff --git a/services/storage-server/demo.http b/services/storage-server/demo.http deleted file mode 100644 index 95530bcb6..000000000 --- a/services/storage-server/demo.http +++ /dev/null @@ -1,69 +0,0 @@ -U2FsdGVkX19PXwa9R8Q0EQDcFxt5qBjTxu1Jm+3KbCjRq1bmFEh65w1x4bsMXqDH -bYGW9yNIDfIWIodVxXeyJkUGUoFai1P/qkf5vzRf7aecdAg5YhBxpeK9sgXUWE2T -NWKBUfkRqPGuG92SCZjF/T5wXd8h9tBLtpLfIn91BBStwKRJaD3M8WqfXKVacoHm -gtF9i+kwZPPVBlzPbtWfuDuq3G+T1UFyX51OmPVk6cP7oXiB9712902BqqUW4UqS -Dx0yvkYPUU+8zdrN8C5mbSN4VRXY2KO0pkrou4YL8WSokB+hxZgEZrSMH0rZbXvY -56LPiYognEFvHAV/ZtYZFdEd3X+88mALWpRfw8GmOGq7tPAlgM2wH4CplAFELXyw -qOmoXzGJGaZe136znOFf8Ozv4RSo7BphioBJ4pyJ/z//CI8W2LhIpxbG8c4PtuyR -a6V2xUFUy9M78EWf57/2EXdQ/1Ir8nW/oOAJkOF+RKFj2X3FH94APg1ENDujZOLl -7Dvi6ZcnexlmP0MujYHSPXkx3rf66ihIup6BrSAK8Uwgfhd+sAPyu17g5hs1cukO -MKA4o+DUUhfxnpcZViskTws/3YMsWIO30qhNMHqfYfq93gO4TEKgCeUlALHaTN0+ -x7YQTogCAPHUJ007fIkVKa6iu8a+sxgyTm8LwnqysTYkKszNZcdh8xf8qz9CapDu -PiODsIIKTeZJhke6TpPaZRZpaNZR0BIA/gyu+xNaIZqVdZQiHbSERwGujS5z4Ye3 -o8Evoj6g04uM8rXx2if4YHbVj6ITwxJ9NUEwzgB0MzhgIJ7QehMOveO0usStyAto -UfRLtxD/orzAiMYJHh0f8kvjqOFcBWmeY9IcLqTWa1+RwDQ5uDOdqfNAhad1wy4M -ZLLHz7b8K8PihiNcJadCSIjJ4dZXjkJ2PA6q09Clfx3fIpj4eTAcaDnrAZiNTIQJ -hMEdEqycnV8r28+CBHVyb6qp8xWe/76tP1M1k75FN7S2LNPTCXV4t8AbAjsKUDG1 -zNdBlVdxaiJuPGC364vAg+VeMvrbiRjbYLPp3QMHFIvNwRct5kUIxWk5iQA+FRlf -1hgo+IrZ3cP0+ZhFlsUS3Nqq0GCqpnmUqYdWd/lkigrJxRK5tHQ+dJnkMXIVImTm -e0iavR7QELbFeo846w/vzmeaybD7OUq7Zzy4JbVRP42CBSr9Gp0M8kIox7Kw+nTg -nIleUzfuy8NwzEPDnirzCEQjxmpSz+0x+WFBjrtvPvHl+YN7wtmF8o2wKDrek9gW -4f1EdFErZxrkJpNuW3qLzaxxt0LPDk+40qHnjkS1e9/tZmoOvkPFvIO4p48eadZ0 -92Z1MxWP9JlPC0Mw+Yqo8EaCNHS0juqthhqTg+yvFBuaICvTSO26KfAba46ElE0k -j4C9R2SGoWz2iPNC/0anTfNv2RHDEvANmFZo+GQ5wN6eZF8CF+MfVA+XcGUYYsG3 -O01uN4QTuu7GzP4pxYiNyMUO6H163jpso/Zmw7Vf8XIXwVEYZ3EdueQ4KLfdgYxY -cksFQDF9mCfaTzLD7YR20BOzCeuJ7mgR4Ks7OYTxP6QRXkVauGrn45IpUPiwb68L -sM35XBSqaMpQXF9CToCI5aSxykywt6nkwQrbJJbzEbVCLi15TTDzglF2hPdvx7FL -Ob9hgrRzu4KrHN7dMlfCmgIoG8EdzFXsVNyzrt99ll4a8Ezeqp+c7qf1zRVXx2m2 -jOmtUbs6lPruD6ZYj4UEEyPeejfs+hdiHM4Sn6D8iJjmX7HF3WxHr3hjG8yA9v3W -fEumdJfe9OPvMAPVEb1Hqof08DK4WksIycoYnNSnMn+U//S4AGT1zVXZLJggorLd -3UCAnEJFaUpDQIkE1SpYLECzdZCygA21+n3MlNl631q9ukFRqGYYcldJLkyLGfXY -67kQflrAstn9EWapIpjvKm2OvFf1UQ/PJ69nTg3GqfNxgMOBHaLaqbDUaU0v2yDp -UHsdie8vE57ML9+EMvOFB0/zRLPGvImgTi6eUDQntOuxZIB9Kt6eflaI3+NHdaFt -9S9pj5P5Kc2wPQQJRgu4m+tE1SEFeNYLslahRwi7gwRqMdfxUHPsWvZvODO3AfeT -y/gwEQkKx+ksyZcOqkAf3jtb82/LPWmnWGKDMNzzCM1CiXxL1wK169iQaaWb/ahB -Y/xKapIo+Gyh5v38ZtockuVPsMQQNqJjzs11S4xt0qG4EYbnGWk90XguKHmaAC77 -gZOUFSPZKY82voJU32vBjkqp01YsN9HmfP9rMZ7YK8n7oZXuIg+MvnVL1A+4VlCb -0NXRGE7nUxEQRHwJ0HQ6FF/rxn3pViBYQA4UJr3rHvFoIwknQmytktVMxc1cxeSO -9mgJyRe1lmwyv4ScNknwIX4p4Ydnp4vac4WnUjUGJ4I3s5XniSel2YvvGo/xjbWi -TKVFWWN5S52YbQ6q9DKfaPyvQuaQnZfDQ2FnnUsqxOKuj7Ff0mvngbadEM5bHLpV -Xe0yJSwtoqejgqd5iYvq/vnET59oTUc46Be4cCVpbzLKGPGnF0mVriphTjEHxaca -zm69wx1KCPVy4zR+7PxwxdAIb+I1njNpBf5CwsXZJMArlEEjSK1EgyFoXBjbBjGy -eNTOyfYQv7M9b72DbFvLA1ogjWXOHcbSaEJF+7JFaOK9rUjd8tOMNPJNXxXvPhjr -0205FuAvlzvGPEM4glpp0pw5tfShxJAvB1ME/2QEazoYEGQcZqzalX1V8blYpYaV -EvDjPIbmVQJR05yz45/JCemRgYVse3Rqd96Jik2smeHmAcywZ4itzlBg387pmf6f -MHQTSdZKd6pcQsngYL7qRVO9vo7PslcA9JmdHQ6vnDZWJu6rRRam8i7Z74+SSkTM -xHa/xpWDj29+11P3VKDG63kffsD4lCvRcFy4jactI5mBsiXBjJrLQRuWErs6CN8M -tYyft9oeo79IhLg8/kWOncvjP0p7eOXsnZxqtzY9Kh+jQBEXqzEKRTqqVsh7dYYw -gJHHXPJeKBIaYjiZToZcEM02DhcuRT+RDg6P2Sgw3q7n94KK2xqb0xy0asuRznr2 -DzLngxOd3vsz0gVpZwVlawD8nKifdkArXQbtx6DGwsziqhGijVbOUS1CK8RByj6k -60lWMIswpaZeCNN18Jeiw7yfaVRUJHUPLWPqATmSXlDDq+SVSrm7vtQq+3oVy/zK -NZlQPPN0HFWGgGCQ4R4iQkxWksU6DWf2HHcomr4iMNnCHQhscBALGcMwOcFUsj/K -CxGbUqls2iF2lo7UGCszqSXxwECoupD0Q9ECtAX0wfkOgy4/ye/c2J+VqfejCfw/ -c6K/8tKIswMGCcnsBWYTOFDxWRv+d8uhPLoCdtZZscGhVIFpUw5nZnCY2A5oKVIc -s8KfjScQvKNTaCYmuM6v6YGV7wfslxJdSYQlpezyx3t1ZpAGRSiozeSXVFxKX+wm -dLcS6rftKWxa8xW7UXbN5Y0lIzZoZ5j2FqZtzzHWPsn2F4WoZlJ6LjPdrg3kxNtw -AJxvUF0u1SMRlpS1sUTWrZuoXqeXZBZktpC9D4DFEH8AK+Oy+W8SJs/4nSshQZDc -vDxdrOcfCOfnnT+gguy1id1qz7UcG7DUoBg3RNr9dpigppVifo3XvELpNC4l61MS -iVyOQwPcYVjweWH6eRVHFfDE7N7n5dpDgcU7jJbNWNHXxyZoSNgZbc8MhKG/C0k8 -HQKYKRkvQos89BEiqWETtBsNW6vQ7s+KCdililkOKu1DGgogbdGjIB3snoRhRA0l -bIQfxuTNADcauVHrUI01px5lupSTKuTZ2ELniBdIm1+QoaBcC55iyZkaMyuCCsM9 -Emk4IagCsUGpzIFtPsJSRwylTtKU+KamA3c7S1AVBZpIc/31iysUhKEcUlK+xPp2 -oZWTdwSwkfty7ezgqZTooa/SeBmGcOhhYuNtoWHCZ3Zm9DfsCB4fL5qoQlXhfkrB -UgGNy+OeJzujZ9iM/s58eEoFVQtqfM9Uet+XhuXeyrmEgNy0HLcZBnv4yGrf/Yd3 -VkpsiN0buwuZ9vO2gtvuVI9lTc00llwudB4+LCEx4GEAZuA4012W9DN3z4KF9yOR -dm3Y4aCtisWmmpSv4Fx73Gi+4HOvna3tDM0oeOXHAuJAqajjsVKKxrGx80z79wRx -JGd3tpAHngp/BZ0XfbIrjkbs/BoWPXtQLTBV3ApQC2W3q0tovDlWvw7+EoQp4sxJ -LHewqlfa9NDKFzamKvtvyZHVUESiH5r6H4qdx3W2ded5zpCtMqqp/EJY38S6p2Ql -AWziHiT86fC86kOEl+5YbiKUWWluYKb0XjyF2B6bg7S5ROdLHSJwRV7b9yxZEkoy -pa1EDQRnRMiP1e9pR9fxCQ== diff --git a/services/storage-server/package.json b/services/storage-server/package.json deleted file mode 100644 index 98427693a..000000000 --- a/services/storage-server/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@alwatr/storage-server", - "version": "1.0.0", - "description": "Alwatr Storage Server, Elegant micro in-memory json-like storage nanoservice with disk backed, Fastest NoSQL Database.", - "type": "module", - "keywords": [ - "database", - "storage", - "json", - "nosql", - "no-sql", - "api", - "data", - "data-storage", - "file", - "microservice", - "nanoservice", - "typescript", - "alwatr" - ], - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "services/storage-server" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/services/storage-server#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "yarn build:es --analyze=verbose", - "build:ts": "tsc --build", - "build:es": "esbuild src/index.ts --platform=node --target=node19 --bundle --format=esm --minify --sourcemap --outdir=dist --out-extension:.js=.mjs", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "node --enable-source-maps dist/index.mjs", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - } -} diff --git a/services/storage-server/src/config.ts b/services/storage-server/src/config.ts deleted file mode 100644 index 435fe3172..000000000 --- a/services/storage-server/src/config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {resolve} from 'node:path'; - -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('storage-server'); - -export const config = { - nanoServer: { - host: process.env.HOST ?? '0.0.0.0', - port: process.env.PORT != null ? +process.env.PORT : 9000, - accessToken: process.env.ACCESS_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - storage: { - path: resolve(process.env.STORAGE_PATH ?? 'db'), - saveDebounce: process.env.SAVE_DEBOUNCE != null ? +process.env.SAVE_DEBOUNCE : 100, - }, -} as const; - -logger.logProperty?.('config', config); diff --git a/services/storage-server/src/index.ts b/services/storage-server/src/index.ts deleted file mode 100644 index c13cf13b1..000000000 --- a/services/storage-server/src/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {logger} from './config.js'; -import './route/cache-api-response.js'; -import './route/delete.js'; -import './route/get.js'; -import './route/has.js'; -import './route/keys.js'; -import './route/link.js'; -import './route/patch.js'; -import './route/storage.js'; -import './route/touch.js'; - -logger.logOther?.('..:: Alwatr Storage Server ::..'); diff --git a/services/storage-server/src/lib/nano-server.ts b/services/storage-server/src/lib/nano-server.ts deleted file mode 100644 index 593467ef5..000000000 --- a/services/storage-server/src/lib/nano-server.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrNanoServer} from '@alwatr/nano-server'; - -import {config} from '../config.js'; - -export const nanoServer = new AlwatrNanoServer(config.nanoServer); diff --git a/services/storage-server/src/lib/storage-provider.ts b/services/storage-server/src/lib/storage-provider.ts deleted file mode 100644 index 600868ecc..000000000 --- a/services/storage-server/src/lib/storage-provider.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrStorageEngineProvider} from '@alwatr/storage-engine/provider.js'; - -import {config} from '../config.js'; - -export const storageProvider = new AlwatrStorageEngineProvider(config.storage); diff --git a/services/storage-server/src/route/cache-api-response.ts b/services/storage-server/src/route/cache-api-response.ts deleted file mode 100644 index 4f76fc524..000000000 --- a/services/storage-server/src/route/cache-api-response.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {resolve} from 'node:path'; - -import {writeJsonFile} from '@alwatr/util/node.js'; - -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; - -import type {AlwatrServiceResponseSuccess, StringifyableRecord} from '@alwatr/type'; - -nanoServer.route>('PUT', '/cache-api-response', async (connection) => { - logger.logMethod?.('cache-api-response'); - - connection.requireToken(config.nanoServer.accessToken); - - const bodyJson = await connection.requireJsonBody<{ path: string; data: StringifyableRecord }>(); - - const base = config.storage.path; - const path = resolve(base, bodyJson.path + '.json'); - - if (!path.startsWith(base)) { - return { - ok: false, - statusCode: 403, - errorCode: 'path_outside_base', - meta: {base, path}, - }; - } - - writeJsonFile(path, { - ok: true, - data: bodyJson.data, - }); - - return { - ok: true, - data: {}, - }; -}); diff --git a/services/storage-server/src/route/delete.ts b/services/storage-server/src/route/delete.ts deleted file mode 100644 index bc45709c0..000000000 --- a/services/storage-server/src/route/delete.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -nanoServer.route('DELETE', '/', (connection) => { - logger.logMethodArgs?.('delete', {method: connection.method}); - - connection.requireToken(config.nanoServer.accessToken); - - const param = connection.requireQueryParams<{storage: string; id: string}>({storage: 'string', id: 'string'}); - - const storageEngine = storageProvider.get({name: param.storage}); - - return { - ok: true, - data: storageEngine.delete(param.id), - }; -}); diff --git a/services/storage-server/src/route/get.ts b/services/storage-server/src/route/get.ts deleted file mode 100644 index 1930431b6..000000000 --- a/services/storage-server/src/route/get.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -import type {AlwatrDocumentObject, StringifyableRecord} from '@alwatr/type'; - -nanoServer.route('GET', '/', (connection) => { - if (!connection.url.search) { - logger.logMethod?.('home'); - return { - ok: true, - data: { - app: '..:: Alwatr Storage Server ::..', - message: 'Hello ;)', - }, - }; - } - - // else - logger.logMethod?.('getDocument'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{storage: string; id: string}>({storage: 'string', id: 'string'}); - - const storageEngine = storageProvider.get({name: params.storage}); - - const document = storageEngine.get(params.id, true); - - return { - ok: true, - data: document, - }; -}); diff --git a/services/storage-server/src/route/has.ts b/services/storage-server/src/route/has.ts deleted file mode 100644 index 469e12b38..000000000 --- a/services/storage-server/src/route/has.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -nanoServer.route('GET', '/has', (connection) => { - logger.logMethod?.('has'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{storage: string; id: string}>({storage: 'string', id: 'string'}); - - const storageEngine = storageProvider.get({name: params.storage}); - - return { - ok: true, - data: storageEngine.has(params.id), - }; -}); diff --git a/services/storage-server/src/route/keys.ts b/services/storage-server/src/route/keys.ts deleted file mode 100644 index a4a62d26c..000000000 --- a/services/storage-server/src/route/keys.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -nanoServer.route('GET', '/keys', (connection) => { - logger.logMethod?.('getStorageKeys'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{storage: string}>({storage: 'string'}); - - const storageEngine = storageProvider.get({name: params.storage}); - - return { - ok: true, - data: storageEngine.keys, - }; -}); diff --git a/services/storage-server/src/route/link.ts b/services/storage-server/src/route/link.ts deleted file mode 100644 index 71b1d51e3..000000000 --- a/services/storage-server/src/route/link.ts +++ /dev/null @@ -1,64 +0,0 @@ -import {existsSync} from 'node:fs'; -import {mkdir} from 'node:fs/promises'; -import {dirname, resolve} from 'node:path'; - -import {delay} from '@alwatr/util'; -import {makeLinkForce} from '@alwatr/util/node.js'; - -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; - -nanoServer.route('GET', '/link', async (connection) => { - logger.logMethod?.('link'); - - connection.requireToken(config.nanoServer.accessToken); - - let {src, dest} = connection.requireQueryParams<{src: string; dest: string}>({ - src: 'string', - dest: 'string', - }); - - const base = config.storage.path; - - if (src[src.length - 1] !== '/') { - src += '.json'; - dest += '.json'; - } - - src = resolve(base, src); - dest = resolve(base, dest); - - if (!src.startsWith(base) || !dest.startsWith(base)) { - // Prevent to access outside storage path by '../' in address. - return { - ok: false, - statusCode: 403, - errorCode: 'path_outside_base', - meta: {base, src, dest}, - }; - } - - const destDir = dirname(dest); - if (!existsSync(destDir)) { - mkdir(destDir, {recursive: true}); - } - - if (!existsSync(src)) { - await delay(config.storage.saveDebounce + 100); // ensure storage saved - if (!existsSync(src)) { - return { - ok: false, - statusCode: 400, - errorCode: 'src_not_found', - meta: {base, src, dest}, - }; - } - } - - await makeLinkForce(src, dest); - - return { - ok: true, - data: {}, - }; -}); diff --git a/services/storage-server/src/route/patch.ts b/services/storage-server/src/route/patch.ts deleted file mode 100644 index d43e4dd36..000000000 --- a/services/storage-server/src/route/patch.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -import type {AlwatrDocumentObject} from '@alwatr/storage-engine'; - -nanoServer.route('PATCH', '/', async (connection) => { - logger.logMethod?.('updateDocument'); - - connection.requireToken(config.nanoServer.accessToken); - - const param = connection.requireQueryParams<{storage: string}>({storage: 'string'}); - - const document = await connection.requireJsonBody(); - - if (!(typeof document.id === 'string' && document.id.length !== 0)) { - return { - ok: false, - statusCode: 406, - errorCode: 'doc_id_required', - }; - } - - const storageEngine = storageProvider.get({name: param.storage}); - - return { - ok: true, - data: storageEngine.set(document, true), - }; -}); diff --git a/services/storage-server/src/route/storage.ts b/services/storage-server/src/route/storage.ts deleted file mode 100644 index cfbfc63eb..000000000 --- a/services/storage-server/src/route/storage.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {AlwatrDocumentObject, AlwatrStorageMeta} from '@alwatr/type'; - -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -nanoServer.route, AlwatrStorageMeta>('GET', '/storage', (connection) => { - logger.logMethod?.('getStorage'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{name: string}>({name: 'string'}); - - const storageEngine = storageProvider.get({name: params.name}); - - return {...storageEngine._storage}; // prevent to modify storage by reply -}); diff --git a/services/storage-server/src/route/touch.ts b/services/storage-server/src/route/touch.ts deleted file mode 100644 index ca437eb74..000000000 --- a/services/storage-server/src/route/touch.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; -import {storageProvider} from '../lib/storage-provider.js'; - -nanoServer.route>('GET', '/touch', (connection) => { - logger.logMethod?.('touch'); - - connection.requireToken(config.nanoServer.accessToken); - - const params = connection.requireQueryParams<{storage: string}>({storage: 'string'}); - - storageProvider.get({name: params.storage}); - - return { - ok: true, - data: {}, - }; -}); diff --git a/services/storage-server/tsconfig.json b/services/storage-server/tsconfig.json deleted file mode 100644 index 6e9f25224..000000000 --- a/services/storage-server/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build" - // "noEmit": true - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"}, - {"path": "../../core/type"}, - {"path": "../../core/nano-server"}, - {"path": "../../core/storage-engine"}, - {"path": "../../core/util"}, - ] -} diff --git a/services/telegram-notifier/CHANGELOG.md b/services/telegram-notifier/CHANGELOG.md deleted file mode 100644 index 425272ffe..000000000 --- a/services/telegram-notifier/CHANGELOG.md +++ /dev/null @@ -1,88 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/flight-finder/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/telegram-notify - -# [1.0.0](https://github.com/AliMD/flight-finder/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Features - -- review and cleanup all workflows ([fff7e92](https://github.com/AliMD/flight-finder/commit/fff7e92c5d85a79adcc975802b949a9dc61d2ba3)) - -# [0.32.0](https://github.com/AliMD/flight-finder/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/telegram-notify - -# [0.31.0](https://github.com/AliMD/flight-finder/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/flight-finder/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **telegram-notifier:** escaping send message ([a9814bf](https://github.com/AliMD/flight-finder/commit/a9814bfca41c1260d5de7ec75e2356b3cdcbbc9d)) - -# [0.30.0](https://github.com/AliMD/flight-finder/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **telegram-notifier:** escaping special characters on sendMessage ([5507d6d](https://github.com/AliMD/flight-finder/commit/5507d6dd460201979b7ee3bb1ae255e572b7cf0d)) - -# [0.29.0](https://github.com/AliMD/flight-finder/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/flight-finder/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -# [0.28.0](https://github.com/AliMD/flight-finder/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **services:** app name in home page ([6feab58](https://github.com/AliMD/flight-finder/commit/6feab58b5655c7a09150ec83adf9f3bd8fe976b4)) -- **services:** name and desc ([453c1b6](https://github.com/AliMD/flight-finder/commit/453c1b6ff334a23bea690b7ff9dd874471b25bb9)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/flight-finder/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- version in package.json ([403baa5](https://github.com/AliMD/flight-finder/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **type:** define constructor type ([39c5ab7](https://github.com/AliMD/flight-finder/commit/39c5ab74f0a1471d5e20beff89f6885265907633)) - -# [0.27.0](https://github.com/AliMD/flight-finder/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/telegram-notify - -# [0.26.0](https://github.com/AliMD/flight-finder/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- add esbuild to git ignore ([46b3714](https://github.com/AliMD/flight-finder/commit/46b3714a4b578b6cfae9e2d17f8c39623470c1f5)) -- all import without .js ([fa739ab](https://github.com/AliMD/flight-finder/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -- clean command ([14bafbb](https://github.com/AliMD/flight-finder/commit/14bafbb01b3c92ccf516346a4e5117f1893c32e9)) -- crawler loop ([72951f9](https://github.com/AliMD/flight-finder/commit/72951f904c8e8eb04ded2a485a65add99150f984)) -- inline home route ([94279c2](https://github.com/AliMD/flight-finder/commit/94279c21891fc710f48642b1c8debbf02b2436d3)) -- inline home route ([ce978f6](https://github.com/AliMD/flight-finder/commit/ce978f6e1e2890e853d0db351c08efca665e5fad)) -- package.json script ([e633a8c](https://github.com/AliMD/flight-finder/commit/e633a8c4355bec0d2fc044f073f7f639c0fd1976)) -- remove lint dependencies from services ([f047a5b](https://github.com/AliMD/flight-finder/commit/f047a5bb0d1e8277f48b55969e18dc3582d9a234)) -- services serve script ([3c62e06](https://github.com/AliMD/flight-finder/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- **services/telegram-notifier:** remove await out of fucntion ([283b58b](https://github.com/AliMD/flight-finder/commit/283b58b0ebf8a9c01805e1aa6ee8222933b9dbc7)) -- **services/telegram-notifier:** remove storga-client ([c27f992](https://github.com/AliMD/flight-finder/commit/c27f9927b97f4d6f2e9c78d5a0a3f0268275bc38)) -- **services/telegram-notifier:** set stroage name in config ([010fa71](https://github.com/AliMD/flight-finder/commit/010fa71cf15698bffcc5378b252bd0aa564d8d6e)) -- **telegram-notifier:** build ([ecce1df](https://github.com/AliMD/flight-finder/commit/ecce1df81642b329dfb863d0503c06fc40688550)) -- **telegram-notifier:** folder ([8bb0b01](https://github.com/AliMD/flight-finder/commit/8bb0b016502f6e2c5b1dd588e8300d36eb24eba7)) -- **telegram-notifier:** lanch fail ([413b5fc](https://github.com/AliMD/flight-finder/commit/413b5fc3753304fe3c7e3e4ff574040fe3395ae8)) -- **telegram-notifier:** prevent duplicate register ([4f41f4c](https://github.com/AliMD/flight-finder/commit/4f41f4c6cca881f0fc90cc253d8d6eaa15a50c43)) -- tsconfig refrences ([cea0562](https://github.com/AliMD/flight-finder/commit/cea05621ecfa499476c5b10a412e60f27ba6a06d)) -- update reply nano-server ([5a2d0e5](https://github.com/AliMD/flight-finder/commit/5a2d0e5698b16cffcc5393ee4a44ffda66702425)) - -### Features - -- esbuild (: ([43c7269](https://github.com/AliMD/flight-finder/commit/43c7269333cf71b142e26da1456446d42fb3f8e0)) -- **flight-crawler:** run infinite ([a0185bc](https://github.com/AliMD/flight-finder/commit/a0185bc39eab40862e0621ae703f604b30998991)) -- improve error debugging ([1fba504](https://github.com/AliMD/flight-finder/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- launchBot ([b3990f9](https://github.com/AliMD/flight-finder/commit/b3990f92bba1b65d0e728615f701a4799619d821)) -- move some depndencies to devDependencies ([4e9576e](https://github.com/AliMD/flight-finder/commit/4e9576e6fd55f361e08a54230931ad45832131d9)) -- new build process ([aa23ed2](https://github.com/AliMD/flight-finder/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) -- **services/telegram-notifier:** dynamic storage path ([9f59240](https://github.com/AliMD/flight-finder/commit/9f5924008d7b567af1c990450da2450af887404a)) -- **telegram-notifier:** esbuild config ([b1ca298](https://github.com/AliMD/flight-finder/commit/b1ca298df482daddfab4d89e807c4c5654394245)) diff --git a/services/telegram-notifier/README.md b/services/telegram-notifier/README.md deleted file mode 100644 index 854b00aeb..000000000 --- a/services/telegram-notifier/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Telegram Notify Nanoservice - -Distributed simple and fast telegram notify nanoservice. diff --git a/services/telegram-notifier/demo.http b/services/telegram-notifier/demo.http deleted file mode 100644 index 3d8881647..000000000 --- a/services/telegram-notifier/demo.http +++ /dev/null @@ -1,6 +0,0 @@ -U2FsdGVkX1/rh6ZI/WJdX7MmV9jYUA9Kp8xSmgCAXDmvunvnxRPl/16kqAmLL3ae -ZGEpgj7JV5bH0wVxAHhgQx8if8XxYUpUDGwukKhYS5lfvMEmBVoQ0SeyqagMX4Gt -bYy5DrHgbqFENsUFJcw07RNdV3STudRh+I0r7p9NEM5Bu9UmFzNJTkDZo7cchk9y -cFGMc/TW/J4n4WE4S4ALkuV8CsPxgt1WuwsW/bduXLBD/ZCvvAtvWNFqZ9AAF8+/ -3C/w+SHBTrlbBUYb9WZduhc4EqTyqefv11HWxUYyZwfzm5pxmLAMcH23x+1bfKV5 -a7wGDG3CW/pwgles/IVt85MMt/0W1/rbz3J24wlMM3E= diff --git a/services/telegram-notifier/esbuild.mjs b/services/telegram-notifier/esbuild.mjs deleted file mode 100755 index 4e947b255..000000000 --- a/services/telegram-notifier/esbuild.mjs +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env node - -import {build} from 'esbuild'; - -build({ - entryPoints: ['./src/index.ts'], - - logLevel: 'debug', - platform: 'node', - target: 'node19', - format: 'esm', - - bundle: true, - treeShaking: true, - minify: true, - sourcemap: true, - - outdir: 'dist', - outExtension: { - '.js': '.mjs', - }, - - external: ['telegraf'], - - // banner: { - // js: 'import { createRequire } from \'module\';const require = createRequire(import.meta.url);', - // }, -}); diff --git a/services/telegram-notifier/package.json b/services/telegram-notifier/package.json deleted file mode 100644 index f068fd492..000000000 --- a/services/telegram-notifier/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@alwatr/telegram-notify", - "version": "1.0.0", - "description": "Alwatr Telegram Notify Microservice, Distributed simple and fast telegram notify nanoservice.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/flight-finder", - "directory": "telegram-notify" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "./esbuild.mjs", - "build:ts": "tsc --build", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "node --enable-source-maps dist/index.mjs", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - }, - "dependencies": { - "telegraf": "^4.13.1" - } -} diff --git a/services/telegram-notifier/src/bot/bot.ts b/services/telegram-notifier/src/bot/bot.ts deleted file mode 100644 index 320bf08c3..000000000 --- a/services/telegram-notifier/src/bot/bot.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {Telegraf} from 'telegraf'; - -import {config} from '../config.js'; - -export const bot = new Telegraf(config.telegramBot.token); diff --git a/services/telegram-notifier/src/bot/command/start.ts b/services/telegram-notifier/src/bot/command/start.ts deleted file mode 100644 index 451251427..000000000 --- a/services/telegram-notifier/src/bot/command/start.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {logger} from '../../config.js'; -import {storage} from '../../lib/storage.js'; -import {MemberList} from '../../lib/type.js'; -import {bot} from '../bot.js'; - -bot.command('start', async (ctx): Promise => { - const chatId = ctx.chat.id; - const token = ctx.message.text.split(' ')[1]; - logger.logMethodArgs?.('command/start', {chatId, token}); - - if (token == null) { - ctx.reply('این یک بات خصوصی هستش! لطفا مزاحم نشوید.'); - return; - } - - const target: MemberList = storage.get(token, true) ?? { - id: token, - memberList: [], - }; - - if (target.memberList.indexOf(chatId) !== -1) { - ctx.reply('شما درحال حاضر عضو این لیست هستید!'); - return; - } - - target.memberList.push(chatId); - storage.set(target, true); - - await ctx.reply('شما با موفقیت در لیست ثبت شدید.'); -}); diff --git a/services/telegram-notifier/src/bot/launch.ts b/services/telegram-notifier/src/bot/launch.ts deleted file mode 100644 index 07b9fd349..000000000 --- a/services/telegram-notifier/src/bot/launch.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {bot} from './bot.js'; -import {sendMessage} from './send-message.js'; -import {config, logger} from '../config.js'; - -export async function launchBot(): Promise { - logger.logMethod?.('launchBot'); - try { - bot.botInfo ??= await bot.telegram.getMe(); - logger.logProperty?.('botInfo', bot.botInfo); - - bot.launch().catch((err) => { - logger.error('launchBot', 'launch_bot_failed', err); - }); - - await sendMessage(config.telegramBot.debugNotifyToken, '⚡️ Bot launched'); - } - catch (err) { - logger.error('launchBot', 'launch_bot_failed', err); - } -} diff --git a/services/telegram-notifier/src/bot/send-message.ts b/services/telegram-notifier/src/bot/send-message.ts deleted file mode 100644 index 19359d635..000000000 --- a/services/telegram-notifier/src/bot/send-message.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {bot} from './bot.js'; -import {logger} from '../config.js'; -import {storage} from '../lib/storage.js'; - -const escapeCharacter = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; - -export async function sendMessage(to: string, message: string): Promise { - logger.logMethodArgs?.('sendMessage', {to, message}); - - for (const character of escapeCharacter) { - message = message.replaceAll(character, `\\${character}`); - } - - const target = storage.get(to); - if (target === null) { - logger.incident?.('sendMessage', 'target_not_found', 'no one registered to this toke', {to}); - return; - } - - for (const chatId of target.memberList) { - try { - await bot.telegram.sendMessage(chatId, message, {parse_mode: 'MarkdownV2'}); - } - catch (err) { - // TODO: handle blocked user - logger.error('sendMessage', 'error_send_message', err, {chatId}); - } - } -} diff --git a/services/telegram-notifier/src/config.ts b/services/telegram-notifier/src/config.ts deleted file mode 100644 index 8e8719f0e..000000000 --- a/services/telegram-notifier/src/config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('telegram-notifier'); - -const telegramBotToken = process.env.TELEGRAM_BOT_TOKEN; - -if (telegramBotToken == undefined) { - throw new Error('telegram bot token required, TELEGRAM_BOT_TOKEN="YOUR_SECRET_TOKEN" yarn start'); -} - -export const config = { - nanoServer: { - host: process.env.HOST ?? '0.0.0.0', - port: process.env.PORT != null ? +process.env.PORT : 8001, - accessToken: process.env.ACCESS_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - storage: { - path: process.env.STORAGE_PATH ?? 'db', - name: 'notifier-storage', - }, - telegramBot: { - debugNotifyToken: 'debug007', - token: telegramBotToken, - }, -}; - -logger.logProperty?.('config', config); diff --git a/services/telegram-notifier/src/index.ts b/services/telegram-notifier/src/index.ts deleted file mode 100644 index 94a86a2eb..000000000 --- a/services/telegram-notifier/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import './bot/command/start.js'; -import {launchBot} from './bot/launch.js'; -import {logger} from './config.js'; -import './route/home.js'; -import './route/notify.js'; - -logger.logOther?.('..:: Alwatr Telegram Notify Nanoservice ::..'); - -launchBot(); diff --git a/services/telegram-notifier/src/lib/nano-server.ts b/services/telegram-notifier/src/lib/nano-server.ts deleted file mode 100644 index 593467ef5..000000000 --- a/services/telegram-notifier/src/lib/nano-server.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrNanoServer} from '@alwatr/nano-server'; - -import {config} from '../config.js'; - -export const nanoServer = new AlwatrNanoServer(config.nanoServer); diff --git a/services/telegram-notifier/src/lib/storage.ts b/services/telegram-notifier/src/lib/storage.ts deleted file mode 100644 index 2577a817a..000000000 --- a/services/telegram-notifier/src/lib/storage.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {AlwatrStorageEngine} from '@alwatr/storage-engine'; - -import {MemberList} from './type.js'; -import {config} from '../config.js'; - -export const storage = new AlwatrStorageEngine(config.storage); diff --git a/services/telegram-notifier/src/lib/type.ts b/services/telegram-notifier/src/lib/type.ts deleted file mode 100644 index 580e2ef2d..000000000 --- a/services/telegram-notifier/src/lib/type.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type {AlwatrDocumentObject} from '@alwatr/type'; - -export type MemberList = AlwatrDocumentObject & { - memberList: number[]; -}; diff --git a/services/telegram-notifier/src/route/home.ts b/services/telegram-notifier/src/route/home.ts deleted file mode 100644 index 4e14fc72f..000000000 --- a/services/telegram-notifier/src/route/home.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {nanoServer} from '../lib/nano-server.js'; - -nanoServer.route('GET', '/', () => ({ - ok: true, - data: { - app: '..:: Alwatr Telegram Notify Nanoservice ::..', - message: 'Hello ;)', - }, -})); diff --git a/services/telegram-notifier/src/route/notify.ts b/services/telegram-notifier/src/route/notify.ts deleted file mode 100644 index a98bbe6e5..000000000 --- a/services/telegram-notifier/src/route/notify.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {sendMessage} from '../bot/send-message.js'; -import {config, logger} from '../config.js'; -import {nanoServer} from '../lib/nano-server.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; - -// Send message to admin -nanoServer.route('POST', '/', notify); - -async function notify(connection: AlwatrConnection): Promise, never>> { - logger.logMethod?.('notify'); - - connection.requireToken(config.nanoServer.accessToken); - - const bodyJson = await connection.requireJsonBody<{to: string; message: string}>(); - - await sendMessage(bodyJson.to, bodyJson.message); - - return { - ok: true, - data: {}, - }; -} diff --git a/services/telegram-notifier/tsconfig.json b/services/telegram-notifier/tsconfig.json deleted file mode 100644 index 61054f3ac..000000000 --- a/services/telegram-notifier/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build" - // "noEmit": true - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"}, - {"path": "../../core/nano-server"}, - {"path": "../../core/type"}, - {"path": "../../core/storage-engine"} - ] -} diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 9c7188e79..000000000 --- a/tailwind.config.js +++ /dev/null @@ -1,3 +0,0 @@ -import {tailwindConfig} from '@alwatr/style' - -export default tailwindConfig; diff --git a/tsconfig.base.json b/tsconfig.base.json deleted file mode 100644 index 32692253d..000000000 --- a/tsconfig.base.json +++ /dev/null @@ -1,76 +0,0 @@ -// https://www.typescriptlang.org/tsconfig - -{ - "compilerOptions": { - /* Basic Options */ - "incremental": true, - "target": "ES2020", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "resolveJsonModule": true, // temporary for fix import json issue - "lib": ["ES2023", "DOM", "DOM.Iterable"], - // "allowJs": true, - // "checkJs": true, - // "jsx": "preserve", - "declaration": true, - "declarationMap": true, - // "outFile": "./", - "outDir": "./", - // "rootDir": "./src", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "removeComments": false, - // "noEmit": true, - "importHelpers": true, - // "downlevelIteration": true, - "isolatedModules": true, // need for esbuild - - /* Strict Type-Checking Options */ - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "strictBindCallApply": true, - "strictPropertyInitialization": true, - "noImplicitThis": true, - "alwaysStrict": true, - - /* Additional Checks */ - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noImplicitOverride": true, - // "noUncheckedIndexedAccess": true, - // "noPropertyAccessFromIndexSignature": true, - - /* Module Resolution Options */ - // "paths": {}, - // "rootDirs": [], - // "typeRoots": [], - // "types": [], - "allowSyntheticDefaultImports": true, - // "esModuleInterop": true, - // "preserveSymlinks": true, - // "allowUmdGlobalAccess": true, - - /* Source Map Options */ - "sourceMap": true, - // "sourceRoot": "", - // "mapRoot": "", - // "inlineSourceMap": true, - "inlineSources": true, - - /* Experimental Options */ - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - - /* Advanced Options */ - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "useDefineForClassFields": false, - - "listEmittedFiles": true - // "diagnostics": true, - } -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 362e13987..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,70 +0,0 @@ -// https://www.typescriptlang.org/tsconfig - -{ - "extends": "./tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - "files": [], - "exclude": [], - "references": [ - // core - {"path": "./core/logger"}, - {"path": "./core/fetch"}, - {"path": "./core/signal"}, - {"path": "./core/signal2"}, - {"path": "./core/context"}, - {"path": "./core/server-context"}, - {"path": "./core/router"}, - {"path": "./core/router2"}, - {"path": "./core/i18n"}, - {"path": "./core/i18n2"}, - {"path": "./core/math"}, - {"path": "./core/nano-server"}, - {"path": "./core/storage-engine"}, - {"path": "./core/storage-client"}, - {"path": "./core/crypto"}, - {"path": "./core/validator"}, - {"path": "./core/util"}, - {"path": "./core/fsm"}, - {"path": "./core/fsm2"}, - {"path": "./core/type"}, - {"path": "./core/fract"}, - - // ui - {"path": "./ui/element"}, - {"path": "./ui/icon"}, - {"path": "./ui/ui-kit"}, - {"path": "./ui/ui-kit2"}, - {"path": "./ui/pwa-helper"}, - {"path": "./ui/style"}, - - // demo - {"path": "./demo"}, - - // services - {"path": "./services/telegram-notifier"}, - {"path": "./services/flight-crawler"}, - {"path": "./services/storage-server"}, - {"path": "./services/comment"}, - {"path": "./services/form-registration"}, - - // uniquely - {"path": "./ui/demo-pwa"}, - {"path": "./uniquely/flight-finder-api"}, - {"path": "./uniquely/soffit-pwa"}, - {"path": "./uniquely/com-api"}, - {"path": "./uniquely/com-pwa"}, - {"path": "./uniquely/keep-pwa"}, - - // labs - {"path": "./labs/zx-example"} - ] -} diff --git a/ui/README.md b/ui/README.md deleted file mode 100644 index f3f8aa5a9..000000000 --- a/ui/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr Web UI Packages/Elements diff --git a/ui/demo-pwa/CHANGELOG.md b/ui/demo-pwa/CHANGELOG.md deleted file mode 100644 index 0e6bcc2b7..000000000 --- a/ui/demo-pwa/CHANGELOG.md +++ /dev/null @@ -1,145 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/ui-demo-pwa - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/ui-demo-pwa - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/ui-demo-pwa - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/ui-demo-pwa - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- compatible with new element mixins ([d26e827](https://github.com/AliMD/alwatr/commit/d26e82731b2ae9c2483ba931c450c5a604633122)) -- compatible with new esbuild api ([e23638e](https://github.com/AliMD/alwatr/commit/e23638ed80a871fef12d5d75aa3eb3824c7cdabd)) -- demo-pwa and ui-kit surface element file name and imports ([9f9c382](https://github.com/AliMD/alwatr/commit/9f9c382cebd0d20d4b1bf9ae8490dfb960506ca1)) -- **demo-pwa:** import old toast ([4ebbb66](https://github.com/AliMD/alwatr/commit/4ebbb660323261502a5598999508822127c5a0e3)) -- **demo-ui:** move some property to content property ([e8dc738](https://github.com/AliMD/alwatr/commit/e8dc7389befee63d5cd0b3de4152c2f914de18e7)) -- lit-analyzer version ([199532d](https://github.com/AliMD/alwatr/commit/199532de48f0dc0e8470d11c6a6544da1c9ddf6c)) -- **pwa:** add blank service-worker.js for debug ([4894547](https://github.com/AliMD/alwatr/commit/4894547d9db9ccb548fd8f39add2c9777ebc23af)) -- **pwa:** clean old l10n resources ([7a48136](https://github.com/AliMD/alwatr/commit/7a4813665de64110baf4b4bc183b1a8a84012824)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) -- versions ([f7549ac](https://github.com/AliMD/alwatr/commit/f7549acca75c249e435aaf8597655850eed43961)) - -### Features - -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **demo-ui:** image-box demo ([a5b87ed](https://github.com/AliMD/alwatr/commit/a5b87edca97dff0d29483cd840d7e81d6158ee19)) -- **pwa-helper:** esbuild ([9694294](https://github.com/AliMD/alwatr/commit/9694294815203a86fbbfde8288371ab347c5ec11)) -- **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -- **pwa/esbuild:** pretty mode ([61903f8](https://github.com/AliMD/alwatr/commit/61903f89a9ad478fe0376b3e6746623ec7bc5907)) -- **pwa:** demo snackbar ([bf031e1](https://github.com/AliMD/alwatr/commit/bf031e197406284d657c3e2abc0d8f6cbe1fe2a8)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -- **toast:** improve ui ([7015c8a](https://github.com/AliMD/alwatr/commit/7015c8a49b9ef5d7c6a69532b48923d76422ff90)) -- **ui-kit/image-box:** update image box based on alwatr-con ([342fb5d](https://github.com/AliMD/alwatr/commit/342fb5d705c776e392077ea44d5796d1ae5d95b1)) - -### Reverts - -- **demo-ui:** image box demo ([a5fc9f0](https://github.com/AliMD/alwatr/commit/a5fc9f0f999e7ffaf0118ff1dacf83fc170fca5a)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **chat:** colors ([4cf93f6](https://github.com/AliMD/alwatr/commit/4cf93f6a5b2ee925e1b4a66f3535b4e6e7dfc1f0)) -- **demo-pwa:** clean metafile ([66032b3](https://github.com/AliMD/alwatr/commit/66032b375f51ac4ade3aa44f06f550e40749d452)) -- **demo-pwa:** dev-server config ([941bf8d](https://github.com/AliMD/alwatr/commit/941bf8d63475c470c3d3635c8f24272947ef8bda)) -- **demo-pwa:** prevent to export root file ([6f52c3e](https://github.com/AliMD/alwatr/commit/6f52c3e417c1cf69adbdf445f1eeb57fa668aed8)) -- **demo-ui:** offline available pwa config ([2874859](https://github.com/AliMD/alwatr/commit/28748596cf0f8c9311c8c14d469fcf43350b5070)) -- **pwa-element:** prevent to default import css for backward compatibility ([89591a2](https://github.com/AliMD/alwatr/commit/89591a28d1d829512200c8a0a026cbb7558e198d)) -- **pwa:** cleanup rollup ([988a125](https://github.com/AliMD/alwatr/commit/988a125140b9042cd33f0249876b84e7fe12112b)) -- **pwa:** debug mode scripts ([681fdc2](https://github.com/AliMD/alwatr/commit/681fdc24897b7bd4f677f26fd45ea048d5f9a675)) -- **pwa:** sw config ([c7b88ed](https://github.com/AliMD/alwatr/commit/c7b88ed638045932a517000749bad6889f22e1f8)) -- refrence type in tsconfigs ([0652ac6](https://github.com/AliMD/alwatr/commit/0652ac67be6167f4bfa60bf84282e40af3228f16)) -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **style/palette:** unreading ([1b9c573](https://github.com/AliMD/alwatr/commit/1b9c5735b5cd3b826448628d14dd618b153c9c14)) -- **ui/color:** color and palette issues ([79df153](https://github.com/AliMD/alwatr/commit/79df153fa4d636a69a7fc437df54c64e02eb4a3c)) -- **ui/tokens:** spacing ([d9096ff](https://github.com/AliMD/alwatr/commit/d9096ff2712713fb77b892e76f0c04398184c526)) -- **ui/token:** state opacity ([34fec9a](https://github.com/AliMD/alwatr/commit/34fec9a9357c6af37c41e58c779daf3d396c10ec)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **demo-pwa:** add middleware for routing ([bfc8f4f](https://github.com/AliMD/alwatr/commit/bfc8f4f2be306321fcfe40b9e44d30c640eb085d)) -- **demo-pwa:** build service worker on build proccess ([87c5d1e](https://github.com/AliMD/alwatr/commit/87c5d1e56ca5d232d026fa8e51b6c8acf66cbced)) -- **demo-pwa:** demo icon-box ([87b720b](https://github.com/AliMD/alwatr/commit/87b720b9844f71d9314b20c90803b18e0b1c379a)) -- **demo-pwa:** new esbuild process ([72e083e](https://github.com/AliMD/alwatr/commit/72e083ef13d313dee6453074cff6d470127630e0)) -- **demo-pwa:** register service worker ([ad8e2d8](https://github.com/AliMD/alwatr/commit/ad8e2d8073327d289bd069069847e98b12dba302)) -- **icon-box:** new style and layout ([2003e33](https://github.com/AliMD/alwatr/commit/2003e33e5095358e24fd4e07b3fc92a3b8a9d7d7)) -- **palette:** theming ([9a7d896](https://github.com/AliMD/alwatr/commit/9a7d896d4c82457dac12458c0fef1b8c8a75e9a0)) -- **pwa:** dev server ([4f5afcf](https://github.com/AliMD/alwatr/commit/4f5afcf047f88ba0ec5ccf061caf38b2cff632c2)) -- **pwa:** esbuild --debug mode ([fa0192c](https://github.com/AliMD/alwatr/commit/fa0192c2e1179ae953a1d67880464f48ec26452b)) -- **pwa:** improve esbuild ([5b78a6e](https://github.com/AliMD/alwatr/commit/5b78a6ebbd9491117393d299825c9c13e8c51481)) -- **pwa:** replace _ALWATR_VERSION_ from [#677](https://github.com/AliMD/alwatr/issues/677) ([eb30fc5](https://github.com/AliMD/alwatr/commit/eb30fc5e7779b8ee8bdab86b5e079018bd877718)) -- **pwa:** replace file hash in html ([145da60](https://github.com/AliMD/alwatr/commit/145da60afdaf9a48d0d1ac5a9228138413a64ff0)) -- **pwa:** unresolved state for show skeleton or loading ([8c4e834](https://github.com/AliMD/alwatr/commit/8c4e834b1415df14d6c76ef4d2040c60dc638b9e)) -- **pwa:** watch mode ([a0a0d88](https://github.com/AliMD/alwatr/commit/a0a0d884890002873434d1a2cf22976f4520f8ca)) -- **type:** add optional text on ChatPhotoMessage ([af83f5b](https://github.com/AliMD/alwatr/commit/af83f5b8604cecd3c9b0cb2375267458fd02431d)) -- **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -- **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) -- **ui/card/demo:** improve card demo ([3176cbe](https://github.com/AliMD/alwatr/commit/3176cbeb290453519542424a942dd0c282ef63ed)) -- **ui/color:** separate palette hsl/hct ([d9e23ac](https://github.com/AliMD/alwatr/commit/d9e23ac84579275211d2ffbe3cdc55ec964337cb)) -- **ui/demo-pwa:** error tokens ([98c4aa2](https://github.com/AliMD/alwatr/commit/98c4aa2efd7d54fc130a4fb502b42d0be4e68d13)) -- **ui/demo-pwa:** page card ([16c11f0](https://github.com/AliMD/alwatr/commit/16c11f05464f05a0949207975a08009ca969943e)) -- **ui:** add mdc layout grid system ([044d6a9](https://github.com/AliMD/alwatr/commit/044d6a9d24227e352293c0ef3d62156bdf5d27d5)) -- **ui:** new AlwatrSurfaceElement with elevation/tint/state simulation ([0877f4f](https://github.com/AliMD/alwatr/commit/0877f4f3dd780321f3c7498cffde66653a24de43)) -- **ui:** new color ([0669b38](https://github.com/AliMD/alwatr/commit/0669b3882fa161ba2984e1278d00f57cd003a9b1)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **page-chat:** colors ([35b1bf3](https://github.com/AliMD/alwatr/commit/35b1bf3b18fc96efd0ddf81452301973e2bce3b6)) -- **page-chat:** demo ([1c0d965](https://github.com/AliMD/alwatr/commit/1c0d965b8773627afbcc905cf18c5acf11f0ac9c)) -- **pwa-root:** build issues ([677b05d](https://github.com/AliMD/alwatr/commit/677b05d292187e8aee28c674150bdb264ac0b4c6)) -- **ui-kit:** font sizes ([2569644](https://github.com/AliMD/alwatr/commit/25696442da35ba570682c31157489d5802153fbf)) -- **ui/demo-pwa:** \_signalListenerList ([60d39b0](https://github.com/AliMD/alwatr/commit/60d39b0af925152feec56d011a1c7b1477134bf7)) -- **ui/style:** body font ([91f6611](https://github.com/AliMD/alwatr/commit/91f66113747f665da3ee585c9787145eb71a1b07)) -- **ui:** root sizes ([2bdf2d5](https://github.com/AliMD/alwatr/commit/2bdf2d5712905d75491f61a5d94322395987b6ab)) - -### Features - -- **chat-\*:** scrollbar and gaps ([c91e2d6](https://github.com/AliMD/alwatr/commit/c91e2d6ec5a4dcc80b2ae71f800dae46cdd8c1f8)) -- **chat-bubble:** rewrite with new styles ([f4c5f01](https://github.com/AliMD/alwatr/commit/f4c5f0154935a1df77493f309ac9ce9b072ce5a2)) -- **chat-list:** new element for list of chats ([3ddae05](https://github.com/AliMD/alwatr/commit/3ddae05cd0bcebb855327f0f449d3ee7c7e576cd)) -- **chat-list:** scrollbar style ([a02074d](https://github.com/AliMD/alwatr/commit/a02074d894d3d812bfe8fb63be37f0edde931c00)) -- **chat:** use new color system ([045b188](https://github.com/AliMD/alwatr/commit/045b18891ca8b9ba0a556be6c621747cb8d0a639)) -- **chat:** use new spacing system ([4e0d44e](https://github.com/AliMD/alwatr/commit/4e0d44e419973e28d5584e609f8efbc68f07fcd2)) -- **chat:** use system shape var ([dcff276](https://github.com/AliMD/alwatr/commit/dcff276ec28e345306f1a278a69bd64c05c5e130)) -- **demo-pwa:** page-chat ([138c4ab](https://github.com/AliMD/alwatr/commit/138c4ab67c342e5682eb12f76a073883a218b4bb)) -- **icon-button:** enhance styles and motion ([4b4a301](https://github.com/AliMD/alwatr/commit/4b4a301f53a059cc5faa4a75b22fc079f750bc38)) -- new ui design system ([8c9c8ba](https://github.com/AliMD/alwatr/commit/8c9c8ba29c477838f3e7034b902f4e0dafabd17c)) -- **page-chat:** new demo ([451d63f](https://github.com/AliMD/alwatr/commit/451d63fc0b904bb780c898c2909b1d7a116b353f)) -- **pwa-root:** style ([20a6fdc](https://github.com/AliMD/alwatr/commit/20a6fdcfdb66561e345e75bac2b0cf8e45818b42)) -- **tokens:** new motions ([48f3745](https://github.com/AliMD/alwatr/commit/48f374562a9f8f87abc7e8033036c819080a39e3)) -- **tokens:** z-zindex ([62926a7](https://github.com/AliMD/alwatr/commit/62926a7b8497f7231093e3bddb129993151f8929)) -- **ui-kit/chat-text-input:** translations ([3d03d3d](https://github.com/AliMD/alwatr/commit/3d03d3d56d9fef34b35c76568fb9d7ec7069f1ee)) -- **ui-kit:** material style tokens ([39ff343](https://github.com/AliMD/alwatr/commit/39ff343301b49f645b8b06da2e0e9c79566353ce)) -- **ui/chat:** new alwatr-chat element ([f711e12](https://github.com/AliMD/alwatr/commit/f711e12317a263d6e1d4bfc52dae54348cf64923)) -- **ui/demo-pwa/page-chat:** new demo ([7f98b8a](https://github.com/AliMD/alwatr/commit/7f98b8a14c999d17ce30364f48234498b166994f)) -- **ui/demo-pwa/style:** state tokens ([ef3913c](https://github.com/AliMD/alwatr/commit/ef3913c746f0f9b5a34ba9ccc88c1b2d1894dac9)) -- **ui/demo-pwa:** improve ([0eeb244](https://github.com/AliMD/alwatr/commit/0eeb2447ece26708c912e845c0f3b2fbd019614a)) -- **ui/demo-pwa:** use `alwatr-chat-text-input` ([0f5bfd1](https://github.com/AliMD/alwatr/commit/0f5bfd16b7c7973375c97f0a8b03d1e0b39bf148)) -- **ui/demo-pwa:** use icon button ([738571c](https://github.com/AliMD/alwatr/commit/738571c3b3d8cab16b3d1c50e1cca56a1da220f2)) -- **ui/tokens:** new spacing columns ([c46d1cd](https://github.com/AliMD/alwatr/commit/c46d1cd0ad58aaeef43bfc7628e844f611b0b969)) -- **ui/tokens:** spacing system ([cfd6b0e](https://github.com/AliMD/alwatr/commit/cfd6b0ee46472902c6ab52ab1002fc36eb37e489)) -- **ui:** global style ([6800205](https://github.com/AliMD/alwatr/commit/6800205215129d82b6afbfad2adbfb02a107c1a9)) diff --git a/ui/demo-pwa/README.md b/ui/demo-pwa/README.md deleted file mode 100644 index 33f74d00f..000000000 --- a/ui/demo-pwa/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr UI Demo - -Alwatr Progressive Web Application Demo powered by [`lit`](https://github.com/lit/lit) and [`@alwatr`](https://github.com/AliMD/alwatr) library! diff --git a/ui/demo-pwa/esbuild.mjs b/ui/demo-pwa/esbuild.mjs deleted file mode 100755 index bf50f1ec4..000000000 --- a/ui/demo-pwa/esbuild.mjs +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable no-undef */ -/* eslint-disable @typescript-eslint/explicit-function-return-type */ -import {execSync} from 'child_process'; -import {promises as fs, existsSync} from 'node:fs'; - -import {createLogger} from '@alwatr/logger'; -import postCssPlugin from '@deanc/esbuild-plugin-postcss'; -import postcssPresetEnv from 'postcss-preset-env'; -import * as esbuild from 'esbuild'; -import postcssImport from 'postcss-import'; -import postcssTailwind from 'tailwindcss'; -import postcssNesting from 'tailwindcss/nesting/index.js'; -import {generateSW} from 'workbox-build'; - -import packageJson from './package.json' assert {type: 'json'}; - -const logger = createLogger('alwatr-pwa-build'); -const banner = '/* ..:: Alwatr PWA ::.. */\n'; - -const srcDir = 'src'; -const resDir = 'res'; -const outDir = 'dist'; -const srcFilename = 'main'; - -const cleanMode = process.argv.includes('--clean'); -const watchMode = process.argv.includes('--watch'); -const debugMode = process.argv.includes('--debug'); -const prettyMode = process.argv.includes('--pretty'); - -const gitShortSha = execSync('git rev-parse --short HEAD').toString().trim(); - -logger.logOther?.(banner); - -logger.logProperty?.('cleanMode', cleanMode); -logger.logProperty?.('watchMode', watchMode); -logger.logProperty?.('debugMode', debugMode); -logger.logProperty?.('prettyMode', prettyMode); - -if (cleanMode) { - logger.logMethod?.('cleanDist'); - await fs.rm(outDir, {recursive: true, force: true}); -} - -const copyPromise = fs.cp(resDir, outDir, {recursive: true, force: true, dereference: true}); - -const esbuildContext = await esbuild.context({ - entryPoints: [`${srcDir}/${srcFilename}.ts`], - - logLevel: 'info', - platform: 'browser', - target: 'es2018', - format: 'esm', - conditions: debugMode ? ['development'] : undefined, - - minify: !prettyMode, - treeShaking: true, - sourcemap: true, - sourcesContent: debugMode, - bundle: true, - splitting: true, - charset: 'utf8', - legalComments: 'none', - metafile: true, - - define: { - _ALWATR_VERSION_: `'${packageJson.version}+${gitShortSha}'`, - }, - // drop: ['debugger'], - - loader: { - '.png': 'copy', - '.jpg': 'copy', - '.woff': 'copy', - '.woff2': 'copy', - '.svg': 'text', - '.scss': 'css', - }, - - banner: { - js: banner, - css: banner, - }, - - plugins: [ - postCssPlugin({ - plugins: [ - postcssImport, - postcssNesting, - postcssTailwind, - postcssPresetEnv, - ], - }), - ], - - outbase: srcDir, - outdir: outDir, - assetNames: 'asset/[name]-[hash]', - entryNames: watchMode ? '[name]' : '[dir]/[name]-[hash]', - chunkNames: 'chunks/[name]-[hash]', -}); - -const esBuildPromise = esbuildContext.rebuild(); - -async function makeHtml() { - logger.logMethod?.('makeHtml'); - - let htmlContent = await fs.readFile(`${resDir}/index.html`, {encoding: 'utf-8'}); - - const metafile = (await esBuildPromise).metafile; - const outFiles = Object.keys(metafile.outputs); - - const jsFilename = outFiles - .find((filename) => filename.includes(srcFilename) && filename.endsWith('.js')) - .substring(outDir.length + 1); - - const cssFilename = outFiles - .find((filename) => filename.includes(srcFilename) && filename.endsWith('.css')) - .substring(outDir.length + 1); - - logger.logProperty?.('jsFilename', jsFilename); - logger.logProperty?.('cssFilename', cssFilename); - - if (!existsSync(`${outDir}/${jsFilename}`)) { - logger.error('makeHtml', 'js_filename_not_found', {jsFilename}); - throw new Error('js_filename_not_found'); - } - - if (!existsSync(`${outDir}/${cssFilename}`)) { - logger.error('makeHtml', 'css_filename_not_found', {cssFilename}); - throw new Error('css_filename_not_found'); - } - - htmlContent = htmlContent - .replaceAll(`${srcFilename}.css`, cssFilename) - .replaceAll(`${srcFilename}.js`, jsFilename); - - await copyPromise; // wait to cp done - await fs.writeFile(`${outDir}/index.html`, htmlContent, {encoding: 'utf-8', flag: 'w'}); -} - -async function buildServiceWorker() { - logger.logMethod?.('buildServiceWorker'); - - const build = await generateSW({ - swDest: `${outDir}/service-worker.js`, - globDirectory: `${outDir}/`, - clientsClaim: true, - skipWaiting: true, - globPatterns: [ - '**/*.{js,css,json,png,svg,ico,webp,woff2,html}', - ], - }); - - logger.logOther?.('serviceWorkerPath', build); -} - -if (watchMode) { - esbuildContext.watch(); -} -else { - await makeHtml(); - esbuildContext.dispose(); - - - if (debugMode) { - console.log(await esbuild.analyzeMetafile((await esBuildPromise).metafile)); - } - - await buildServiceWorker(); // makeHtml must be done first -} - -// /* -// TODO: -// - Input Config -// - Workbox and sw -// - Res (all assets) hash -// - Dynamic from @alwatr/build -// - sideEffects -// https://esbuild.github.io/api/#ignore-annotations -// https://webpack.js.org/guides/tree-shaking/ -// - readme -// https://esbuild.github.io/api/#write -// https://github.com/fakundo/esbuild-plugin-replace-regex/blob/master/src/index.js#L30 -// https://github.com/zandaqo/esbuild-plugin-lit/blob/master/css-loader.ts -// https://github.com/chialab/rna/tree/main/packages/esbuild-plugin-html -// */ diff --git a/ui/demo-pwa/package.json b/ui/demo-pwa/package.json deleted file mode 100644 index bb37e4896..000000000 --- a/ui/demo-pwa/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@alwatr/ui-demo-pwa", - "version": "1.0.0", - "description": "Alwatr Progressive Web Application Demo.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "browserslist": "> 1.5%, not dead", - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/demo-pwa" - }, - "scripts": { - "b": "yarn build-dev", - "cb": "run-s clean build-dev", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "clean": "rm -rf dist build .tsbuildinfo", - "build": "yarn build:es", - "build-dev": "run-s build:root build:tsc \"build:es --debug\"", - "build:es": "./esbuild.mjs --debug --clean", - "build:tsc": "tsc --build", - "build:root": "cd ../../ && yarn build:ts", - "serve": "wds", - "watch": "run-p watch:root watch:es serve", - "watch:es": "yarn build:es --clean --watch --debug", - "watch:root": "cd ../../ && yarn watch:ts" - } -} diff --git a/ui/demo-pwa/res/image/favicon.ico b/ui/demo-pwa/res/image/favicon.ico deleted file mode 100644 index 4a865c673..000000000 Binary files a/ui/demo-pwa/res/image/favicon.ico and /dev/null differ diff --git a/ui/demo-pwa/res/image/icon-180.png b/ui/demo-pwa/res/image/icon-180.png deleted file mode 100644 index 6ea405528..000000000 Binary files a/ui/demo-pwa/res/image/icon-180.png and /dev/null differ diff --git a/ui/demo-pwa/res/image/icon-192-maskable.png b/ui/demo-pwa/res/image/icon-192-maskable.png deleted file mode 100644 index c3d566fb5..000000000 Binary files a/ui/demo-pwa/res/image/icon-192-maskable.png and /dev/null differ diff --git a/ui/demo-pwa/res/image/icon-192.png b/ui/demo-pwa/res/image/icon-192.png deleted file mode 100644 index 7d45fd3ce..000000000 Binary files a/ui/demo-pwa/res/image/icon-192.png and /dev/null differ diff --git a/ui/demo-pwa/res/image/icon-512-maskable.png b/ui/demo-pwa/res/image/icon-512-maskable.png deleted file mode 100644 index 8b496738d..000000000 Binary files a/ui/demo-pwa/res/image/icon-512-maskable.png and /dev/null differ diff --git a/ui/demo-pwa/res/image/icon-512.png b/ui/demo-pwa/res/image/icon-512.png deleted file mode 100644 index 7e69f3e99..000000000 Binary files a/ui/demo-pwa/res/image/icon-512.png and /dev/null differ diff --git a/ui/demo-pwa/res/index.html b/ui/demo-pwa/res/index.html deleted file mode 100644 index 79cf361bb..000000000 --- a/ui/demo-pwa/res/index.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - Alwatr UI Demo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - درحال بارگذاری... -
    - - - - diff --git a/ui/demo-pwa/res/manifest.webmanifest b/ui/demo-pwa/res/manifest.webmanifest deleted file mode 100644 index e180f664c..000000000 --- a/ui/demo-pwa/res/manifest.webmanifest +++ /dev/null @@ -1,18 +0,0 @@ -{ - "short_name": "Alwatr UI Demo", - "name": "Alwatr UI Demo", - "description": "Alwatr Progressive Web Application Demo.", - "start_url": "/?pwa", - "display": "standalone", - "theme_color": "#673ab7", - "background_color": "#673ab7", - "orientation": "portrait", - "default_locale": "fa", - "icons": [ - {"src": "/image/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable"}, - {"src": "/image/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable"}, - {"src": "/image/favicon.ico", "type": "image/x-icon", "sizes": "32x32"}, - {"src": "/image/icon-192.png", "type": "image/png", "sizes": "192x192"}, - {"src": "/image/icon-512.png", "type": "image/png", "sizes": "512x512"} - ] -} diff --git a/ui/demo-pwa/res/robots.txt b/ui/demo-pwa/res/robots.txt deleted file mode 100644 index c2a49f4fb..000000000 --- a/ui/demo-pwa/res/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/ui/demo-pwa/res/service-worker.js b/ui/demo-pwa/res/service-worker.js deleted file mode 100644 index 64a5d005d..000000000 --- a/ui/demo-pwa/res/service-worker.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Service worker not build in development mode.') diff --git a/ui/demo-pwa/src/config.ts b/ui/demo-pwa/src/config.ts deleted file mode 100644 index 35b9514b9..000000000 --- a/ui/demo-pwa/src/config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {FetchOptions} from '@alwatr/fetch'; -import {getConfKey} from '@alwatr/pwa-helper/config.js'; -import {getLocalStorageItem} from '@alwatr/util'; - -/** - * Debug API. - * - * ```ts - * localStorage.setItem('DEBUG_API', '"https://canary.tour.ir/"'); - * localStorage.setItem('DEBUG_CONFIG', JSON.stringify({token: 'secret_token'})); - * ``` - */ -const srvBaseUrl = getLocalStorageItem('DEBUG_API', '/'); -const apiBaseUrl = srvBaseUrl + 'api/v0/'; - -export const config = { - serverContext: { - base: srvBaseUrl, - api: apiBaseUrl, - cdn: srvBaseUrl + 'cdn', - token: getConfKey('token'), - }, - - fetchContextOptions: { - removeDuplicate: 'auto', - retry: 2, - retryDelay: 2_000, - } as Partial, -} as const; diff --git a/ui/demo-pwa/src/icons.ts b/ui/demo-pwa/src/icons.ts deleted file mode 100644 index 2ec3c4913..000000000 --- a/ui/demo-pwa/src/icons.ts +++ /dev/null @@ -1,21 +0,0 @@ -import call from '@alwatr/icon/svg/call-outline.svg'; -import {defaultExport} from '@alwatr/util'; - -/** - * Main app necessary icons. - */ -export const icons = { - call, - star: defaultExport(import('@alwatr/icon/svg/star-outline.svg')), - mic: defaultExport(import('@alwatr/icon/svg/mic-outline.svg')), - create: defaultExport(import('@alwatr/icon/svg/create-outline.svg')), - person: defaultExport(import('@alwatr/icon/svg/person-outline.svg')), - archive: defaultExport(import('@alwatr/icon/svg/archive-outline.svg')), - trash: defaultExport(import('@alwatr/icon/svg/trash-outline.svg')), - send: defaultExport(import('@alwatr/icon/svg/send-outline.svg')), - refresh: defaultExport(import('@alwatr/icon/svg/refresh-outline.svg')), - menu: defaultExport(import('@alwatr/icon/svg/menu-outline.svg')), - calendarNumber: defaultExport(import('@alwatr/icon/svg/calendar-number-outline.svg')), - home: defaultExport(import('@alwatr/icon/svg/home-outline.svg')), - triangle: defaultExport(import('@alwatr/icon/svg/triangle-outline.svg')), -}; diff --git a/ui/demo-pwa/src/main.css b/ui/demo-pwa/src/main.css deleted file mode 100644 index d7f2a92bf..000000000 --- a/ui/demo-pwa/src/main.css +++ /dev/null @@ -1,2 +0,0 @@ -@import '@alwatr/style/main.css'; -@import '@alwatr/style/palettes/h260.css'; diff --git a/ui/demo-pwa/src/main.ts b/ui/demo-pwa/src/main.ts deleted file mode 100644 index 4228faf2e..000000000 --- a/ui/demo-pwa/src/main.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {render} from '@alwatr/fract'; - -import './main.css'; -import {appLogger} from './share/logger.js'; -import {alwatrPwa, alwatrPwaContainer} from './ui/alwatr-pwa.js'; - -appLogger.logModule?.('main'); - -alwatrPwaContainer.replaceChildren(); // clean content -render(alwatrPwa(), alwatrPwaContainer); -alwatrPwaContainer.removeAttribute('unresolved'); diff --git a/ui/demo-pwa/src/share/app-navigation-context.ts b/ui/demo-pwa/src/share/app-navigation-context.ts deleted file mode 100644 index 2793e03a7..000000000 --- a/ui/demo-pwa/src/share/app-navigation-context.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {AlwatrContextSignal} from '@alwatr/signal2'; - -import {icons} from '../icons.js'; - -import type {NavigationBarContent} from '@alwatr/ui-kit2/navigation-bar/navigation-bar.js'; -import type {NavigationDrawerContent} from '@alwatr/ui-kit2/navigation-drawer/navigation-drawer.js'; -import type {NavigationRailContent} from '@alwatr/ui-kit2/navigation-rail/navigation-rail.js'; -import type {CenterTopAppBarContent} from '@alwatr/ui-kit2/top-app-bar/center-top-app-bar.js'; - -export interface AppNavigationContext { - navigationBar: NavigationBarContent; - navigationRail: NavigationRailContent; - navigationDrawer: NavigationDrawerContent; -} - -export const appNavigationContext = new AlwatrContextSignal({name: 'app-navigation-context'}); -export const topAppBarContext = new AlwatrContextSignal({name: 'top-app-bar-context'}); - -appNavigationContext.setValue({ - navigationRail: { - selected: 'given', - itemList: { - given: {label: 'دریافتی', icon: {svg: icons.menu}}, - contact: {label: 'مخاطبین', icon: {svg: icons.person}}, - send: {label: 'ارسال', icon: {svg: icons.send}}, - archive: {label: 'آرشیو', icon: {svg: icons.archive}}, - trash: {label: 'زباله', icon: {svg: icons.trash}}, - }, - }, - navigationBar: { - selected: 'send', - itemList: { - given: {label: 'دریافتی', icon: {svg: icons.menu}}, - contact: {label: 'مخاطبین', icon: {svg: icons.person}}, - send: {label: 'ارسال', icon: {svg: icons.send}}, - archive: {label: 'آرشیو', icon: {svg: icons.archive}}, - trash: {label: 'زباله', icon: {svg: icons.trash}}, - }, - }, - navigationDrawer: { - title: '', - selected: 'contact', - itemList: { - given: {label: 'دریافتی', icon: {svg: icons.menu}}, - contact: {label: 'مخاطبین', icon: {svg: icons.person}}, - send: {label: 'ارسال', icon: {svg: icons.send}}, - archive: {label: 'آرشیو', icon: {svg: icons.archive}}, - trash: {label: 'زباله', icon: {svg: icons.trash}}, - }, - }, -}); - -topAppBarContext.setValue({ - title: 'الوتر دمو', - startIcon: {svg: icons.person, onClick: () => {console.log('`startIcon` clicked');}}, - endIconList: [{svg: icons.refresh, onClick: () => {console.log('`refreshIcon` clicked');}}, {svg: icons.home, onClick: () => {console.log('`homeIcon` clicked');}}], -}); diff --git a/ui/demo-pwa/src/share/logger.ts b/ui/demo-pwa/src/share/logger.ts deleted file mode 100644 index d7cfdb566..000000000 --- a/ui/demo-pwa/src/share/logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const appLogger = createLogger('app'); diff --git a/ui/demo-pwa/src/ui/alwatr-pwa.ts b/ui/demo-pwa/src/ui/alwatr-pwa.ts deleted file mode 100644 index 4dce1ddeb..000000000 --- a/ui/demo-pwa/src/ui/alwatr-pwa.ts +++ /dev/null @@ -1,74 +0,0 @@ -import {AlwatrDynamicDirective, alwatrObserve, cache, directive, html, type PartInfo} from '@alwatr/fract'; -import {router, type RouteContext} from '@alwatr/router2'; -import {alwatrNavigationBar} from '@alwatr/ui-kit2/navigation-bar/navigation-bar.js'; -import {alwatrNavigationDrawer} from '@alwatr/ui-kit2/navigation-drawer/navigation-drawer.js'; -import {alwatrNavigationRail} from '@alwatr/ui-kit2/navigation-rail/navigation-rail.js'; -import {centerTopAppBar, type CenterTopAppBarContent} from '@alwatr/ui-kit2/top-app-bar/center-top-app-bar.js'; -import {renderState} from '@alwatr/util'; - -import {alwatrPageTest} from './page-test.js'; -import {appNavigationContext, topAppBarContext, type AppNavigationContext} from '../share/app-navigation-context.js'; -import {appLogger} from '../share/logger.js'; - -export type PageName = 'home' | 'favorites' | 'contact' | 'other' | '_404'; - -appLogger.logModule?.('alwatr-pwa'); - - -export class AlwatrPwaDirective extends AlwatrDynamicDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - * render(): unknown { - this._logger.logMethod?.('render'); - - yield this._renderTopAppBar(); - yield this._renderNavigationRail(); - yield this._renderNavigationDrawer(); - - yield html`
    ${this._renderContent()}
    `; - - yield this._renderNavigationBar(); - } - - protected _renderNavigationBar(): unknown { - return alwatrObserve(appNavigationContext, (content: AppNavigationContext) => alwatrNavigationBar(content.navigationBar)); - } - - protected _renderNavigationDrawer(): unknown { - return alwatrObserve(appNavigationContext, (content: AppNavigationContext) => alwatrNavigationDrawer(content.navigationDrawer)); - } - - protected _renderNavigationRail(): unknown { - return alwatrObserve(appNavigationContext, (context: AppNavigationContext) => alwatrNavigationRail(context.navigationRail)); - } - - protected _renderTopAppBar(): unknown { - return alwatrObserve(topAppBarContext, (context: CenterTopAppBarContent) => centerTopAppBar(context)); - } - - protected _renderContent(): unknown { - return alwatrObserve(router, (route: RouteContext) => { - const page = route.sectionList[0] as PageName ?? 'home'; - return cache(renderState(page, { - home: () => html`

    home2...

    `, - favorites: () => html`${alwatrPageTest(page)}`, - other: () => html`${alwatrPageTest(page)}`, - contact: () => html`

    call...

    `, - _404: () => html`

    404!

    `, - _default: '_404', - })); - }); - } -} - -// TODO: send app rendered signal - -export const alwatrPwa = directive(AlwatrPwaDirective); - -export const alwatrPwaContainer = document.getElementById('alwatr_pwa')!; - -if (alwatrPwaContainer === null) { - throw new Error('Cannot find `
    ` element!'); -} diff --git a/ui/demo-pwa/src/ui/button.ts b/ui/demo-pwa/src/ui/button.ts deleted file mode 100644 index c307bbcc8..000000000 --- a/ui/demo-pwa/src/ui/button.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {AlwatrDynamicDirective, classMap, directive, html, type PartInfo} from '@alwatr/fract'; - -export interface ButtonOptions { - /** - * Label. - */ - label: string, - - disabled?: boolean; - - extendClass?: string -} - -export class AlwatrButtonDirective extends AlwatrDynamicDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(options: ButtonOptions): unknown { - this._logger.logMethodArgs?.('render', options); - return html``; - } -} - -export const alwatrButton = directive(AlwatrButtonDirective); diff --git a/ui/demo-pwa/src/ui/lit-debug.ts b/ui/demo-pwa/src/ui/lit-debug.ts deleted file mode 100644 index 7a09bbb3e..000000000 --- a/ui/demo-pwa/src/ui/lit-debug.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {LitUnstable} from '@alwatr/fract'; - -import {appLogger} from '../share/logger.js'; - -(globalThis as unknown as {emitLitDebugLogEvents?: boolean}).emitLitDebugLogEvents = true; -globalThis.addEventListener('lit-debug', (event) => { - const detail = (event as CustomEvent).detail; - appLogger.logProperty?.('lit-debug', detail); -}); diff --git a/ui/demo-pwa/src/ui/page-test.ts b/ui/demo-pwa/src/ui/page-test.ts deleted file mode 100644 index e8bd622a4..000000000 --- a/ui/demo-pwa/src/ui/page-test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {AlwatrDynamicDirective, directive, html, type PartInfo} from '@alwatr/fract'; - -export class AlwatrPageTestDirective extends AlwatrDynamicDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(name: string): unknown { - this._logger.logMethodArgs?.('render', name); - return html`

    Page ${name}

    `; - } -} - -export const alwatrPageTest = directive(AlwatrPageTestDirective); diff --git a/ui/demo-pwa/tailwind.config.js b/ui/demo-pwa/tailwind.config.js deleted file mode 100644 index 9c7188e79..000000000 --- a/ui/demo-pwa/tailwind.config.js +++ /dev/null @@ -1,3 +0,0 @@ -import {tailwindConfig} from '@alwatr/style' - -export default tailwindConfig; diff --git a/ui/demo-pwa/tsconfig.json b/ui/demo-pwa/tsconfig.json deleted file mode 100644 index 492eb385f..000000000 --- a/ui/demo-pwa/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build", - "noEmit": true, - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/type"}, - {"path": "../../core/util"}, - {"path": "../../core/fract"}, - {"path": "../../core/router2"}, - {"path": "../../core/i18n2"}, - {"path": "../../ui/ui-kit"}, - {"path": "../../ui/ui-kit2"}, - {"path": "../../ui/style"} - ] -} diff --git a/ui/demo-pwa/web-dev-server.config.js b/ui/demo-pwa/web-dev-server.config.js deleted file mode 100644 index 9c0815c2e..000000000 --- a/ui/demo-pwa/web-dev-server.config.js +++ /dev/null @@ -1,27 +0,0 @@ -import {existsSync} from 'node:fs'; - -// https://modern-web.dev/docs/dev-server/cli-and-configuration/#configuration-file -/** @type {import('@web/dev-server').DevServerConfig} */ -const config = { - hostname: '0.0.0.0', - port: 8080, - open: true, - watch: true, - // debug: true, - rootDir: 'dist', - appIndex: 'index.html', - plugins: [], - middleware: [(context, next) => { - // if file not found, return app index.html - if (!( - context.url === '/' || - context.url.startsWith('/__w') || - existsSync(config.rootDir + context.url) - )) { - context.url = config.appIndex; - } - return next(); - }], -}; - -export default config; diff --git a/ui/element/CHANGELOG.md b/ui/element/CHANGELOG.md deleted file mode 100644 index a6e233921..000000000 --- a/ui/element/CHANGELOG.md +++ /dev/null @@ -1,341 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/element@1.1.1...@alwatr/element@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/element - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/element@1.1.0...@alwatr/element@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/element - -# 1.1.0 (2023-09-12) - -### Features - -* **element:** new `export`s ([a210deb](https://github.com/AliMD/alwatr/commit/a210deb1a6526e4bd145a31718b77385ab28e5e1)) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* compatible with new _addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -* **element/fsmc:** all render state must defined ([93f8ea3](https://github.com/AliMD/alwatr/commit/93f8ea31b8fa4f8845871a795eb2de107797f669)) -* **element/fsm:** compatible old mixins ([fe4427e](https://github.com/AliMD/alwatr/commit/fe4427ef62c2fd1680bcb3212feed681add4c2d4)) -* **element:** build issue ([224799c](https://github.com/AliMD/alwatr/commit/224799c5c664bcc11dac8061048c85708b3ba5ef)) -* **element:** check type of `actions` ([f39d617](https://github.com/AliMD/alwatr/commit/f39d617f106e03748d8ed9f539a77f4e810765b5)) -* **element:** remove old fsm mixin ([23efdf2](https://github.com/AliMD/alwatr/commit/23efdf25d2bbb768b70fd65f45f9fed3affcbd15)) -* **fsm:** cleanup old ([aa43264](https://github.com/AliMD/alwatr/commit/aa432644d76a0f81ea6e5c3b93da63f998ab159c)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **element/fsm:** rewrite state machine for lit ([592fc8d](https://github.com/AliMD/alwatr/commit/592fc8dd586255e719a31785d3989a348f63cce8)) -* **element/logger:** log remove ([f6dc4c6](https://github.com/AliMD/alwatr/commit/f6dc4c65292f7a491007f445749b798c4551ebfc)) -* **element/mixins/signal:** _addSignalListener ([fc987b3](https://github.com/AliMD/alwatr/commit/fc987b32db20975354e406ae89d4b4c006bf798d)) -* **element:** add reactive controller ([7d7d6cb](https://github.com/AliMD/alwatr/commit/7d7d6cb6e473177aa2062d5a57490a57e6b027ff)) -* **element:** export from `ref` ([bbaaca4](https://github.com/AliMD/alwatr/commit/bbaaca4bb19efa29f80c4206eff5985a2d86f62c)) -* **element:** export lit guard ([b51627f](https://github.com/AliMD/alwatr/commit/b51627fbd63f401aa4404ebb1d59281216247d80)) -* **element:** refactor fsm controller with new fsm api ([e51aaa2](https://github.com/AliMD/alwatr/commit/e51aaa241ea21a91df4e7399a4c7801be41ded49)) -* **element:** register and remove necessary listeners ([833e9cc](https://github.com/AliMD/alwatr/commit/833e9cc58a5515edcc1c1c72b2761c124557201d)) -* **element:** ScheduleUpdateToFrameMixin ([8a4307d](https://github.com/AliMD/alwatr/commit/8a4307dd3a6cc58f826e6faaa261cb3cb9e13d22)) -* **element:** use the new logger functions(time & timeEnd) ([2c4d919](https://github.com/AliMD/alwatr/commit/2c4d9191e2b296e17e86f20eebcf61523f1e0e3b)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **element/router-mixin:** prevent to duplicate first render ([453403e](https://github.com/AliMD/alwatr/commit/453403e8d42902ff2fe5391513dbecb8cc8a9948)) -* **element:** null able mapIterable items ([7bb7f01](https://github.com/AliMD/alwatr/commit/7bb7f01a5381389a9264005927e460725e4db842)) -* **element:** router mixin error ([c890b69](https://github.com/AliMD/alwatr/commit/c890b69feb6f7ea68d1a565bf9fadb55a55da90e)) -* **element:** state machine tender names ([c9b806a](https://github.com/AliMD/alwatr/commit/c9b806a983f38f7c438f709b8929f23d9c8164fb)) -* **router:** add _routeContextUpdated to interface ([72865b8](https://github.com/AliMD/alwatr/commit/72865b808db4c2267dac07347e26dc8914f7c3f0)) - -### Features - -* **element/fsm:** add render_unresolved, render_resolving ([5b8674c](https://github.com/AliMD/alwatr/commit/5b8674cd15558280bf2ad3d39bcd2ab89ab72508)) -* **element/state-machine-mixin:** add stateUpdated method ([d599282](https://github.com/AliMD/alwatr/commit/d599282c4056cafa3e68817e4697c11721ccf09b)) -* **element/StateMachineMixin:** reflect state to host attrib ([b054b50](https://github.com/AliMD/alwatr/commit/b054b5052b8ce452470e80838cdd49c26fdc533b)) -* **element/toggle:** selected property ([5d6c0a9](https://github.com/AliMD/alwatr/commit/5d6c0a9e08abe933932943c842a0d6766a311076)) -* **element:** add live directive ([4a95b0f](https://github.com/AliMD/alwatr/commit/4a95b0fef0e3c3fdc3a79396e7c8f749d0e380f3)) -* **element:** mapIterable, mapObject directives ([8958655](https://github.com/AliMD/alwatr/commit/89586552a9294b167462d025080e1b93c9088845)) -* **element:** router mixin ([5e80f82](https://github.com/AliMD/alwatr/commit/5e80f82882e930675e15ecc0448e7451708a36d5)) -* **element:** StateMachineMixin ([b395b79](https://github.com/AliMD/alwatr/commit/b395b795e4d115fd74632e25a4373db2c36fdad0)) -* **element:** toggle mixin ([5140b22](https://github.com/AliMD/alwatr/commit/5140b226f5b8330f2e930f3e125d73a0c6791b90)) -* **element:** UnresolvedMixin ([4a1c89a](https://github.com/AliMD/alwatr/commit/4a1c89aa41d7479b5b9f8e33252a11e5d372206c)) - -### Performance Improvements - -* **element/StateMachineMixin:** limit scheduleUpdate to animation frame ([e23317e](https://github.com/AliMD/alwatr/commit/e23317e2bc5efeeb6f0198b3f49f12d682bcc8e1)) -* **element:** clear signal listeners memory cost ([fe20757](https://github.com/AliMD/alwatr/commit/fe2075730436becf8642dcabd44116b40d33a4c7)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* compatible with i18n ([89c4a90](https://github.com/AliMD/alwatr/commit/89c4a90444db12930b1d0211942c9b84185cbb32)) -* **element:** compatible with new signal api ([020a083](https://github.com/AliMD/alwatr/commit/020a0837de496d8c4943fe5cdb659fee3dc0e051)) -* **element:** import issue ([87b3e12](https://github.com/AliMD/alwatr/commit/87b3e12a289fc477b072c1321aca160db46dc69c)) -* **element:** import type ([b125318](https://github.com/AliMD/alwatr/commit/b1253186036df3dcafca06f1bc4aca613c220f51)) -* **element:** logger mixin issue ([db5d96d](https://github.com/AliMD/alwatr/commit/db5d96d3a3b3cf5e07c60474e69ebf75a77978c4)) - -### Features - -* **element/direction:** compute mode and improve performance ([9d3b2ed](https://github.com/AliMD/alwatr/commit/9d3b2ed4443585e0b2eb497dd24501d8753983c5)) -* **element:** ali ([25422c4](https://github.com/AliMD/alwatr/commit/25422c4dee951be8c8bd37ec709f1492946731ad)) -* **element:** rewrite all mixins with new api ([baa1e5e](https://github.com/AliMD/alwatr/commit/baa1e5e546654658f473622b148ceb7e7e8e3da6)) -* **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -* review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -* **surface-element:** active-outline ([3261091](https://github.com/AliMD/alwatr/commit/3261091bdfbb3dd777aa2676f1bf0ce5d3aa7192)) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **element/sw-helper:** reload on new update ([b07db77](https://github.com/AliMD/alwatr/commit/b07db77bf8a9c28235cdfe9f1d0aff972feda73c)) -* **pwa-element:** prevent to default import css for backward compatibility ([89591a2](https://github.com/AliMD/alwatr/commit/89591a28d1d829512200c8a0a026cbb7558e198d)) -* **pwa:** debug mode scripts ([681fdc2](https://github.com/AliMD/alwatr/commit/681fdc24897b7bd4f677f26fd45ea048d5f9a675)) -* version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -* **demo-pwa:** register service worker ([ad8e2d8](https://github.com/AliMD/alwatr/commit/ad8e2d8073327d289bd069069847e98b12dba302)) -* **element:** separate _initLocale, _initRouter and _routeChanged ([a0af8ec](https://github.com/AliMD/alwatr/commit/a0af8ecfb6f5da24898da629de822cfe54ea5586)) -* **element:** service worker register ([c98b1f6](https://github.com/AliMD/alwatr/commit/c98b1f601b7a277d2bf713637f7475b037961f3a)) -* **element:** service-worker helper ([6ec8b59](https://github.com/AliMD/alwatr/commit/6ec8b59a617d514315926dac7c3e3318867782d2)) -* **icon-box:** new style and layout ([2003e33](https://github.com/AliMD/alwatr/commit/2003e33e5095358e24fd4e07b3fc92a3b8a9d7d7)) -* **pwa:** unresolved state for show skeleton or loading ([8c4e834](https://github.com/AliMD/alwatr/commit/8c4e834b1415df14d6c76ef4d2040c60dc638b9e)) -* **ui/element:** export `unsafeHTML` ([2cb6d49](https://github.com/AliMD/alwatr/commit/2cb6d49aca60dbbda45990bf13e0b9622725a0ef)) -* **ui:** new AlwatrSurfaceElement with elevation/tint/state simulation ([0877f4f](https://github.com/AliMD/alwatr/commit/0877f4f3dd780321f3c7498cffde66653a24de43)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* **element:** build issues ([0bfb016](https://github.com/AliMD/alwatr/commit/0bfb0167a82c1dfbd04884a049b76cf7f6033f86)) -* **element:** signal mixing safety check ([2f3c871](https://github.com/AliMD/alwatr/commit/2f3c87141e162e8f600246bf863fcfe93f41f53b)) -* **ui/element:** listener list type ([e089d01](https://github.com/AliMD/alwatr/commit/e089d018ed29eae8f0ba92767b12d37f5ad1729c)) - -### Features - -* **element/root:** host box-sizing ([0c4ce83](https://github.com/AliMD/alwatr/commit/0c4ce83c5f777aecb2317c832817854ff4cadcf9)) -* **element:** AlwatrRootElement ([3b4e59f](https://github.com/AliMD/alwatr/commit/3b4e59f840f600ebedf07c27a9e4cf4c5f1253c0)) -* **element:** DirectionMixin ([d2670dd](https://github.com/AliMD/alwatr/commit/d2670dd247f93759e3b6457b339a066cc2433269)) -* **element:** export from lit ([21f15d8](https://github.com/AliMD/alwatr/commit/21f15d86319a40fab02d86f24a1451c056f36a7c)) -* **element:** LocalizeMixin ([94f0f7f](https://github.com/AliMD/alwatr/commit/94f0f7f832ff885d7176884f243c57a2a03c7bdb)) -* **element:** use logger ([95708a7](https://github.com/AliMD/alwatr/commit/95708a7b8a8418ffe0cb9a98c6d5ed50ff6308e1)) -* **page-chat:** new demo ([451d63f](https://github.com/AliMD/alwatr/commit/451d63fc0b904bb780c898c2909b1d7a116b353f)) -* **type:** define constructor type ([39c5ab7](https://github.com/AliMD/alwatr/commit/39c5ab74f0a1471d5e20beff89f6885265907633)) -* **ui/element/i18n:** localization mixin ([999e1b1](https://github.com/AliMD/alwatr/commit/999e1b11f0af55704fdd5859398908aeedbb833c)) -* **ui/element:** seprate mixins ([a305c5d](https://github.com/AliMD/alwatr/commit/a305c5d0e027b4c19fb1a22e4dc75797d205655a)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* **ui/*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/element - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/element - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- **element/fsmc:** all render state must defined ([93f8ea3](https://github.com/AliMD/alwatr/commit/93f8ea31b8fa4f8845871a795eb2de107797f669)) -- **element/fsm:** compatible old mixins ([fe4427e](https://github.com/AliMD/alwatr/commit/fe4427ef62c2fd1680bcb3212feed681add4c2d4)) -- **element:** build issue ([224799c](https://github.com/AliMD/alwatr/commit/224799c5c664bcc11dac8061048c85708b3ba5ef)) -- **element:** check type of `actions` ([f39d617](https://github.com/AliMD/alwatr/commit/f39d617f106e03748d8ed9f539a77f4e810765b5)) -- **element:** remove old fsm mixin ([23efdf2](https://github.com/AliMD/alwatr/commit/23efdf25d2bbb768b70fd65f45f9fed3affcbd15)) -- **fsm:** cleanup old ([aa43264](https://github.com/AliMD/alwatr/commit/aa432644d76a0f81ea6e5c3b93da63f998ab159c)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **element/fsm:** rewrite state machine for lit ([592fc8d](https://github.com/AliMD/alwatr/commit/592fc8dd586255e719a31785d3989a348f63cce8)) -- **element/logger:** log remove ([f6dc4c6](https://github.com/AliMD/alwatr/commit/f6dc4c65292f7a491007f445749b798c4551ebfc)) -- **element/mixins/signal:** \_addSignalListener ([fc987b3](https://github.com/AliMD/alwatr/commit/fc987b32db20975354e406ae89d4b4c006bf798d)) -- **element:** add reactive controller ([7d7d6cb](https://github.com/AliMD/alwatr/commit/7d7d6cb6e473177aa2062d5a57490a57e6b027ff)) -- **element:** export from `ref` ([bbaaca4](https://github.com/AliMD/alwatr/commit/bbaaca4bb19efa29f80c4206eff5985a2d86f62c)) -- **element:** export lit guard ([b51627f](https://github.com/AliMD/alwatr/commit/b51627fbd63f401aa4404ebb1d59281216247d80)) -- **element:** refactor fsm controller with new fsm api ([e51aaa2](https://github.com/AliMD/alwatr/commit/e51aaa241ea21a91df4e7399a4c7801be41ded49)) -- **element:** register and remove necessary listeners ([833e9cc](https://github.com/AliMD/alwatr/commit/833e9cc58a5515edcc1c1c72b2761c124557201d)) -- **element:** ScheduleUpdateToFrameMixin ([8a4307d](https://github.com/AliMD/alwatr/commit/8a4307dd3a6cc58f826e6faaa261cb3cb9e13d22)) -- **element:** use the new logger functions(time & timeEnd) ([2c4d919](https://github.com/AliMD/alwatr/commit/2c4d9191e2b296e17e86f20eebcf61523f1e0e3b)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **element/router-mixin:** prevent to duplicate first render ([453403e](https://github.com/AliMD/alwatr/commit/453403e8d42902ff2fe5391513dbecb8cc8a9948)) -- **element:** null able mapIterable items ([7bb7f01](https://github.com/AliMD/alwatr/commit/7bb7f01a5381389a9264005927e460725e4db842)) -- **element:** router mixin error ([c890b69](https://github.com/AliMD/alwatr/commit/c890b69feb6f7ea68d1a565bf9fadb55a55da90e)) -- **element:** state machine tender names ([c9b806a](https://github.com/AliMD/alwatr/commit/c9b806a983f38f7c438f709b8929f23d9c8164fb)) -- **router:** add \_routeContextUpdated to interface ([72865b8](https://github.com/AliMD/alwatr/commit/72865b808db4c2267dac07347e26dc8914f7c3f0)) - -### Features - -- **element/fsm:** add render_unresolved, render_resolving ([5b8674c](https://github.com/AliMD/alwatr/commit/5b8674cd15558280bf2ad3d39bcd2ab89ab72508)) -- **element/state-machine-mixin:** add stateUpdated method ([d599282](https://github.com/AliMD/alwatr/commit/d599282c4056cafa3e68817e4697c11721ccf09b)) -- **element/StateMachineMixin:** reflect state to host attrib ([b054b50](https://github.com/AliMD/alwatr/commit/b054b5052b8ce452470e80838cdd49c26fdc533b)) -- **element/toggle:** selected property ([5d6c0a9](https://github.com/AliMD/alwatr/commit/5d6c0a9e08abe933932943c842a0d6766a311076)) -- **element:** add live directive ([4a95b0f](https://github.com/AliMD/alwatr/commit/4a95b0fef0e3c3fdc3a79396e7c8f749d0e380f3)) -- **element:** mapIterable, mapObject directives ([8958655](https://github.com/AliMD/alwatr/commit/89586552a9294b167462d025080e1b93c9088845)) -- **element:** router mixin ([5e80f82](https://github.com/AliMD/alwatr/commit/5e80f82882e930675e15ecc0448e7451708a36d5)) -- **element:** StateMachineMixin ([b395b79](https://github.com/AliMD/alwatr/commit/b395b795e4d115fd74632e25a4373db2c36fdad0)) -- **element:** toggle mixin ([5140b22](https://github.com/AliMD/alwatr/commit/5140b226f5b8330f2e930f3e125d73a0c6791b90)) -- **element:** UnresolvedMixin ([4a1c89a](https://github.com/AliMD/alwatr/commit/4a1c89aa41d7479b5b9f8e33252a11e5d372206c)) - -### Performance Improvements - -- **element/StateMachineMixin:** limit scheduleUpdate to animation frame ([e23317e](https://github.com/AliMD/alwatr/commit/e23317e2bc5efeeb6f0198b3f49f12d682bcc8e1)) -- **element:** clear signal listeners memory cost ([fe20757](https://github.com/AliMD/alwatr/commit/fe2075730436becf8642dcabd44116b40d33a4c7)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- compatible with i18n ([89c4a90](https://github.com/AliMD/alwatr/commit/89c4a90444db12930b1d0211942c9b84185cbb32)) -- **element:** compatible with new signal api ([020a083](https://github.com/AliMD/alwatr/commit/020a0837de496d8c4943fe5cdb659fee3dc0e051)) -- **element:** import issue ([87b3e12](https://github.com/AliMD/alwatr/commit/87b3e12a289fc477b072c1321aca160db46dc69c)) -- **element:** import type ([b125318](https://github.com/AliMD/alwatr/commit/b1253186036df3dcafca06f1bc4aca613c220f51)) -- **element:** logger mixin issue ([db5d96d](https://github.com/AliMD/alwatr/commit/db5d96d3a3b3cf5e07c60474e69ebf75a77978c4)) - -### Features - -- **element/direction:** compute mode and improve performance ([9d3b2ed](https://github.com/AliMD/alwatr/commit/9d3b2ed4443585e0b2eb497dd24501d8753983c5)) -- **element:** ali ([25422c4](https://github.com/AliMD/alwatr/commit/25422c4dee951be8c8bd37ec709f1492946731ad)) -- **element:** rewrite all mixins with new api ([baa1e5e](https://github.com/AliMD/alwatr/commit/baa1e5e546654658f473622b148ceb7e7e8e3da6)) -- **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -- **surface-element:** active-outline ([3261091](https://github.com/AliMD/alwatr/commit/3261091bdfbb3dd777aa2676f1bf0ce5d3aa7192)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **element/sw-helper:** reload on new update ([b07db77](https://github.com/AliMD/alwatr/commit/b07db77bf8a9c28235cdfe9f1d0aff972feda73c)) -- **pwa-element:** prevent to default import css for backward compatibility ([89591a2](https://github.com/AliMD/alwatr/commit/89591a28d1d829512200c8a0a026cbb7558e198d)) -- **pwa:** debug mode scripts ([681fdc2](https://github.com/AliMD/alwatr/commit/681fdc24897b7bd4f677f26fd45ea048d5f9a675)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **demo-pwa:** register service worker ([ad8e2d8](https://github.com/AliMD/alwatr/commit/ad8e2d8073327d289bd069069847e98b12dba302)) -- **element:** separate \_initLocale, \_initRouter and \_routeChanged ([a0af8ec](https://github.com/AliMD/alwatr/commit/a0af8ecfb6f5da24898da629de822cfe54ea5586)) -- **element:** service worker register ([c98b1f6](https://github.com/AliMD/alwatr/commit/c98b1f601b7a277d2bf713637f7475b037961f3a)) -- **element:** service-worker helper ([6ec8b59](https://github.com/AliMD/alwatr/commit/6ec8b59a617d514315926dac7c3e3318867782d2)) -- **icon-box:** new style and layout ([2003e33](https://github.com/AliMD/alwatr/commit/2003e33e5095358e24fd4e07b3fc92a3b8a9d7d7)) -- **pwa:** unresolved state for show skeleton or loading ([8c4e834](https://github.com/AliMD/alwatr/commit/8c4e834b1415df14d6c76ef4d2040c60dc638b9e)) -- **type:** define constructor type ([39c5ab7](https://github.com/AliMD/alwatr/commit/39c5ab74f0a1471d5e20beff89f6885265907633)) -- **ui/element:** export `unsafeHTML` ([2cb6d49](https://github.com/AliMD/alwatr/commit/2cb6d49aca60dbbda45990bf13e0b9622725a0ef)) -- **ui:** new AlwatrSurfaceElement with elevation/tint/state simulation ([0877f4f](https://github.com/AliMD/alwatr/commit/0877f4f3dd780321f3c7498cffde66653a24de43)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **element:** build issues ([0bfb016](https://github.com/AliMD/alwatr/commit/0bfb0167a82c1dfbd04884a049b76cf7f6033f86)) -- **element:** signal mixing safety check ([2f3c871](https://github.com/AliMD/alwatr/commit/2f3c87141e162e8f600246bf863fcfe93f41f53b)) -- **ui/element:** listener list type ([e089d01](https://github.com/AliMD/alwatr/commit/e089d018ed29eae8f0ba92767b12d37f5ad1729c)) - -### Features - -- **element/root:** host box-sizing ([0c4ce83](https://github.com/AliMD/alwatr/commit/0c4ce83c5f777aecb2317c832817854ff4cadcf9)) -- **element:** AlwatrRootElement ([3b4e59f](https://github.com/AliMD/alwatr/commit/3b4e59f840f600ebedf07c27a9e4cf4c5f1253c0)) -- **element:** DirectionMixin ([d2670dd](https://github.com/AliMD/alwatr/commit/d2670dd247f93759e3b6457b339a066cc2433269)) -- **element:** export from lit ([21f15d8](https://github.com/AliMD/alwatr/commit/21f15d86319a40fab02d86f24a1451c056f36a7c)) -- **element:** LocalizeMixin ([94f0f7f](https://github.com/AliMD/alwatr/commit/94f0f7f832ff885d7176884f243c57a2a03c7bdb)) -- **element:** use logger ([95708a7](https://github.com/AliMD/alwatr/commit/95708a7b8a8418ffe0cb9a98c6d5ed50ff6308e1)) -- **page-chat:** new demo ([451d63f](https://github.com/AliMD/alwatr/commit/451d63fc0b904bb780c898c2909b1d7a116b353f)) -- **ui/element/i18n:** localization mixin ([999e1b1](https://github.com/AliMD/alwatr/commit/999e1b11f0af55704fdd5859398908aeedbb833c)) -- **ui/element:** seprate mixins ([a305c5d](https://github.com/AliMD/alwatr/commit/a305c5d0e027b4c19fb1a22e4dc75797d205655a)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/element - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -**Note:** Version bump only for package @alwatr/element - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/element - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/element - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/element - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/element - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- Import error in webpack ([1a52f67](https://github.com/AliMD/alwatr/commit/1a52f67ff2788c51abd13126f34353c26aa669c3)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/element - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/element - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/element - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/element - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/element - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/element - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -**Note:** Version bump only for package @alwatr/element - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -### Features - -- **element:** init new package ([a9a65d9](https://github.com/AliMD/alwatr/commit/a9a65d94beb86583cb7e5e2b47b8f235994310cb)) -- **element:** LoggerMixin ([e5825e1](https://github.com/AliMD/alwatr/commit/e5825e160324cde596dbf3982bf080d54ba9955f)) diff --git a/ui/element/README.md b/ui/element/README.md deleted file mode 100644 index c6ca965ca..000000000 --- a/ui/element/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr Element - `@alwatr/element` - -Elegant powerful web component (lit-element) helper mixins written in tiny TypeScript module. - - diff --git a/ui/element/package.json b/ui/element/package.json deleted file mode 100644 index c0133f793..000000000 --- a/ui/element/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@alwatr/element", - "version": "1.1.2", - "description": "Elegant powerful web component (lit-element) helper mixins written in tiny TypeScript module.", - "keywords": [ - "element", - "lit", - "lit-element", - "web-component", - "mixin", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/element" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/element#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/fsm": "^1.1.2", - "@alwatr/i18n": "^1.1.2", - "@alwatr/logger": "^1.1.2", - "@alwatr/router": "^1.1.2", - "lit": "^2.8.0", - "tslib": "^2.6.2" - } -} diff --git a/ui/element/src/base-element.ts b/ui/element/src/base-element.ts deleted file mode 100644 index 829a41bbd..000000000 --- a/ui/element/src/base-element.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {LitElement} from 'lit'; - -import {LoggerMixin} from './mixins/logging.js'; - -/** - * Alwatr Base Element - * - * Include: LoggerMixin - */ -export const AlwatrBaseElement = LoggerMixin(LitElement); diff --git a/ui/element/src/directives/map.ts b/ui/element/src/directives/map.ts deleted file mode 100644 index dc1d49152..000000000 --- a/ui/element/src/directives/map.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Returns an iterable containing the result of calling `f(value)` on each value in `items`. - * - * @example - * - * ```ts - * render() { - * return html` - *
      - * ${mapIterable(this, items, (i) => html`
    • ${i}
    • `, 'loading...')} - *
    - * `; - * } - * ``` - */ -export function* mapIterable( - _this: unknown, - items: Iterable | undefined | null, - f: (value: T) => unknown, - loading?: unknown, -): unknown { - if (items == null) { - return loading; - } - for (const value of items) { - yield f.call(_this, value); - } -} - -/** - * Returns an iterable containing the result of calling `f(value)` on each value in `items`. - * - * @example - * - * ```ts - * render() { - * return html` - *
      - * ${mapObject(this, items, (i) => html`
    • ${i}
    • `, 'loading...')} - *
    - * `; - * } - * ``` - */ -export function* mapObject( - _this: unknown, - items: Record | undefined | null, - f: (value: T, key: string) => unknown, - loading?: unknown, -): unknown { - if (items == null) { - return loading; - } - for (const key in items) { - if (!Object.prototype.hasOwnProperty.call(items, key)) continue; - yield f.call(_this, items[key], key); - } -} diff --git a/ui/element/src/index.ts b/ui/element/src/index.ts deleted file mode 100644 index 4d86b7efd..000000000 --- a/ui/element/src/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {globalAlwatr} from '@alwatr/logger'; - -export * from './base-element.js'; - -export * from './mixins/localize.js'; -export * from './mixins/router.js'; -export * from './mixins/direction.js'; -export * from './mixins/logging.js'; -export * from './mixins/signal.js'; -export * from './mixins/toggle.js'; -export * from './mixins/unresolved.js'; -export * from './mixins/schedule-update-to-frame.js'; - -export * from './directives/map.js'; - -export * from './lit.js'; - -globalAlwatr.registeredList.push({ - name: '@alwatr/element', - version: _ALWATR_VERSION_, -}); diff --git a/ui/element/src/lit.ts b/ui/element/src/lit.ts deleted file mode 100644 index 23965ee4b..000000000 --- a/ui/element/src/lit.ts +++ /dev/null @@ -1,14 +0,0 @@ -export * from 'lit'; -export * from 'lit/decorators.js'; -export {map} from 'lit/directives/map.js'; -export {when} from 'lit/directives/when.js'; -export {live} from 'lit/directives/live.js'; -export {guard} from 'lit/directives/guard.js'; -export {repeat} from 'lit/directives/repeat.js'; -export {ifDefined} from 'lit/directives/if-defined.js'; -export {unsafeSVG} from 'lit/directives/unsafe-svg.js'; -export {unsafeHTML} from 'lit/directives/unsafe-html.js'; -export {cache} from 'lit/directives/cache.js'; -export {ref, createRef, type Ref} from 'lit/directives/ref.js'; -export {directive} from 'lit/directive.js'; -export {AsyncDirective} from 'lit/async-directive.js'; diff --git a/ui/element/src/mixins/direction.ts b/ui/element/src/mixins/direction.ts deleted file mode 100644 index 26ca1d792..000000000 --- a/ui/element/src/mixins/direction.ts +++ /dev/null @@ -1,77 +0,0 @@ -import {localeContextConsumer} from '@alwatr/i18n'; - -import type {SignalMixinInterface} from './signal.js'; -import type {Constructor, LocaleContext} from '@alwatr/type'; - -export declare class DirectionMixinInterface extends SignalMixinInterface { - protected _dirParent: HTMLElement | null; - protected _localeChange: (localeContext: LocaleContext) => void; - protected _updateDir: () => void; -} - -type ComputeMode = 'locale' | 'parents' | 'computed-style'; -const defaultComputeStyleMode: ComputeMode = 'parents'; - -export function DirectionMixin>( - superClass: T, - computeMode: ComputeMode = defaultComputeStyleMode, -): Constructor & T { - class DirectionMixinClass extends superClass { - /** - * Parent element for get direction in parents mode. - */ - protected _parentEl: HTMLElement | null = null; - - override connectedCallback(): void { - super.connectedCallback(); - this._addSignalListeners(localeContextConsumer.subscribe(() => this._updateDir())); - } - - /** - * Update direction from this._dirParent or l10n.locale - */ - protected _updateDir(dir?: string): void { - this._logger.logMethodArgs?.('_updateDir', {dir, computeMode}); - - if (typeof dir === 'string') { - // console.timeEnd('_updateDir'); - return this.setAttribute('dir', dir === 'rtl' ? dir : 'ltr'); - } - - // console.time('_updateDir'); - // else, calculate - if (computeMode === 'locale') { - return this._updateDir(localeContextConsumer.getValue()?.direction ?? document.documentElement.dir); - } - // else - if (computeMode === 'computed-style') { - const dir = window.getComputedStyle(this).getPropertyValue('direction'); - return this._updateDir(dir); - } - // else if (computeMode === 'parents') - if (this._parentEl !== null) { - return this._updateDir(this._parentEl.dir); - } - // else - let parentEl = (this.assignedSlot || this.parentNode) as HTMLElement | null; - while (parentEl != null && parentEl !== document.documentElement && !parentEl.dir) { - // prettier-ignore - parentEl = ( - parentEl.assignedSlot || - parentEl.parentNode || - (parentEl as unknown as ShadowRoot).host - ) as HTMLElement; - } - - if (parentEl?.dir) { - this._parentEl = parentEl; - return this._updateDir(parentEl.dir); - } - // else - computeMode = 'locale'; - this._updateDir(); - } - } - - return DirectionMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/localize.ts b/ui/element/src/mixins/localize.ts deleted file mode 100644 index f5d2a71bd..000000000 --- a/ui/element/src/mixins/localize.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {l18eContextConsumer} from '@alwatr/i18n'; - -import type {SignalMixinInterface} from './signal.js'; -import type {Constructor, L18eContext} from '@alwatr/type'; - -export declare class LocalizeMixinInterface extends SignalMixinInterface { - protected _l18eContextUpdated(_l18eContext: L18eContext): void; -} - -export function LocalizeMixin>( - superClass: T, -): Constructor & T { - class LocalizeMixinClass extends superClass { - override connectedCallback(): void { - super.connectedCallback(); - this._addSignalListeners( - l18eContextConsumer.subscribe(this._l18eContextUpdated.bind(this)), - ); - } - - /** - * On localization resource context update. - */ - protected _l18eContextUpdated(l18eContext: L18eContext): void { - this._logger.logMethodArgs?.('_l18eContextUpdated', l18eContext.meta); - this.requestUpdate(); - } - } - - return LocalizeMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/logging.ts b/ui/element/src/mixins/logging.ts deleted file mode 100644 index 1e406cd67..000000000 --- a/ui/element/src/mixins/logging.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {createLogger, type AlwatrLogger} from '@alwatr/logger'; - -import type {LitElement, PropertyValues} from '../lit.js'; -import type {Constructor} from '@alwatr/type'; - -let _lastAli = 0; - -export declare class LoggerMixinInterface extends LitElement { - /** - * Alwatr logger index! - * - * Element index for logger ;) - */ - ali: number; - - protected _logger: AlwatrLogger; -} - -export function LoggerMixin>(superClass: T): Constructor & T { - class LoggerMixinClass extends superClass { - ali: number = ++_lastAli; - protected _logger = createLogger(`<${this.tagName.toLowerCase()}-${this.ali}>`); - - private _$firstUpdated?: true; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...args: any[]) { - super(...args); - this._logger.logMethod?.('constructor'); - } - - override connectedCallback(): void { - this._logger.logMethod?.('connectedCallback'); - super.connectedCallback(); - } - - override disconnectedCallback(): void { - this._logger.logMethod?.('disconnectedCallback'); - super.disconnectedCallback(); - } - - protected override update(changedProperties: PropertyValues): void { - this._logger.logMethodArgs?.('update', {changedProperties}); - this._logger.time?.(this._$firstUpdated ? 'update-time' : 'first-update-time'); - super.update(changedProperties); - } - - protected override firstUpdated(changedProperties: PropertyValues): void { - this._logger.logMethodArgs?.('firstUpdated', {changedProperties}); - this._logger.timeEnd?.('first-update-time'); - super.firstUpdated(changedProperties); - } - - protected override updated(changedProperties: PropertyValues): void { - // this._logger.logMethodArgs('updated', {changedProperties}); - if (this._logger.devMode) { - if (this._$firstUpdated) { - this._logger.timeEnd?.('update-time'); - } - else { - this._$firstUpdated = true; - } - } - - super.updated(changedProperties); - } - - protected override render(): unknown { - this._logger.logMethod?.('render'); - return; - } - - override dispatchEvent(event: Event): boolean { - this._logger.logMethodArgs?.('dispatchEvent', { - type: event.type, - detail: (event as Event & {detail?: unknown}).detail, - }); - return super.dispatchEvent(event); - } - - override remove(): void { - this._logger.logMethod?.('remove'); - super.remove(); - } - } - - return LoggerMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/router.ts b/ui/element/src/mixins/router.ts deleted file mode 100644 index 8e03bddd6..000000000 --- a/ui/element/src/mixins/router.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {routeContextConsumer, type RouteContext} from '@alwatr/router'; - -import type {SignalMixinInterface} from './signal.js'; -import type {Constructor} from '@alwatr/type'; - -export declare class RouterMixinInterface extends SignalMixinInterface { - protected _routeContextUpdated(routeContext: RouteContext): void; -} - -export function RouterMixin>( - superClass: T, -): Constructor & T { - class RouterMixinClass extends superClass { - override connectedCallback(): void { - super.connectedCallback(); - this._addSignalListeners( - routeContextConsumer.subscribe((routeContext) => this._routeContextUpdated(routeContext), { - receivePrevious: 'No', - }), - ); - } - - /** - * On route context update. - */ - protected _routeContextUpdated(routeContext: RouteContext): void { - this._logger.logMethodArgs?.('_routeContextUpdated', routeContext); - this.requestUpdate(); - } - } - - return RouterMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/schedule-update-to-frame.ts b/ui/element/src/mixins/schedule-update-to-frame.ts deleted file mode 100644 index 9e496f66a..000000000 --- a/ui/element/src/mixins/schedule-update-to-frame.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {untilNextFrame} from '@alwatr/util'; - -import type {SignalMixinInterface} from './signal.js'; -import type {Constructor} from '@alwatr/type'; - -export declare class ScheduleUpdateToFrameMixinInterface extends SignalMixinInterface {} - -export function ScheduleUpdateToFrameMixin>( - superClass: T, -): Constructor & T { - class ScheduleUpdateToFrameMixinClass extends superClass { - protected override async scheduleUpdate(): Promise { - await untilNextFrame(); - super.scheduleUpdate(); - } - } - return ScheduleUpdateToFrameMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/signal.ts b/ui/element/src/mixins/signal.ts deleted file mode 100644 index e383b08d0..000000000 --- a/ui/element/src/mixins/signal.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {unsubscribe} from '@alwatr/signal/core.js'; - -import type {LoggerMixinInterface} from './logging.js'; -import type {ListenerSpec} from '@alwatr/signal/type.js'; -import type {Constructor, SingleOrArray} from '@alwatr/type'; - -export declare class SignalMixinInterface extends LoggerMixinInterface { - private _signalListenerList: ListenerSpec[]; - protected _addSignalListeners(listeners: SingleOrArray): void; -} - -export function SignalMixin>( - superClass: T, -): Constructor & T { - class SignalMixinClass extends superClass { - private _signalListenerList: ListenerSpec[] = []; - - protected _addSignalListeners(listeners: SingleOrArray): void { - if (Array.isArray(listeners)) { - this._signalListenerList = this._signalListenerList.concat(listeners); - } - else { - this._signalListenerList.push(listeners); - } - } - - override disconnectedCallback(): void { - for (const listener of this._signalListenerList) { - unsubscribe(listener); - } - this._signalListenerList.length = 0; - super.disconnectedCallback(); - } - } - - return SignalMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/toggle.ts b/ui/element/src/mixins/toggle.ts deleted file mode 100644 index 191cc029b..000000000 --- a/ui/element/src/mixins/toggle.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {property} from 'lit/decorators.js'; - -import type {LoggerMixinInterface} from './logging.js'; -import type {Constructor} from '@alwatr/type'; - -export declare class ToggleMixinInterface extends LoggerMixinInterface { - selected: boolean; - protected _click(event: MouseEvent): void -} - -export function ToggleMixin>( - superClass: T, -): Constructor & T { - class ToggleMixinClass extends superClass { - @property({type: Boolean, reflect: true}) - selected = false; - - override connectedCallback(): void { - super.connectedCallback(); - this.addEventListener('click', this._click); - } - override disconnectedCallback(): void { - super.disconnectedCallback(); - this.removeEventListener('click', this._click); - } - - /** - * On host click event. - */ - protected _click(event: MouseEvent): void { - this._logger.logMethod?.('_click'); - if (event.metaKey || event.altKey || event.shiftKey) return; - this.selected = !this.selected; - this.dispatchEvent(new CustomEvent('selected-change')); - } - } - - return ToggleMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/src/mixins/unresolved.ts b/ui/element/src/mixins/unresolved.ts deleted file mode 100644 index 16763905e..000000000 --- a/ui/element/src/mixins/unresolved.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type {LoggerMixinInterface} from './logging.js'; -import type {PropertyValues} from '../lit.js'; -import type {Constructor} from '@alwatr/type'; - -export declare class UnresolvedMixinInterface extends LoggerMixinInterface {} - -export function UnresolvedMixin>( - superClass: T, -): Constructor & T { - class UnresolvedMixinClass extends superClass { - protected override firstUpdated(_changedProperties: PropertyValues): void { - super.firstUpdated(_changedProperties); - if (this.hasAttribute('unresolved')) { - this.removeAttribute('unresolved'); - } - } - } - - return UnresolvedMixinClass as unknown as Constructor & T; -} diff --git a/ui/element/tsconfig.json b/ui/element/tsconfig.json deleted file mode 100644 index aefba9432..000000000 --- a/ui/element/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": ".", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ] - }, - // files, include and exclude from the inheriting config are always overwritten. - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"}, - {"path": "../../core/type"}, - {"path": "../../core/i18n"}, - {"path": "../../core/router"}, - {"path": "../../core/fsm"} - ] -} diff --git a/ui/font/CHANGELOG.md b/ui/font/CHANGELOG.md deleted file mode 100644 index fa6a12a62..000000000 --- a/ui/font/CHANGELOG.md +++ /dev/null @@ -1,162 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/font@1.1.0...@alwatr/font@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/font - -# 1.1.0 (2023-09-12) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Performance Improvements - -* **pwa:** optimize first load and rendering ([343d757](https://github.com/AliMD/alwatr/commit/343d757eefab6572df54fb4f7624698e9a9f9e11)) - -# 0.30.0 (2023-03-06) - -# 0.29.0 (2023-02-10) - -# 0.28.0 (2023-01-20) - -# 0.27.0 (2022-12-29) - -### Features - -* new ui design system ([8c9c8ba](https://github.com/AliMD/alwatr/commit/8c9c8ba29c477838f3e7034b902f4e0dafabd17c)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* **ui/*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/font - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/font - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Performance Improvements - -- **pwa:** optimize first load and rendering ([343d757](https://github.com/AliMD/alwatr/commit/343d757eefab6572df54fb4f7624698e9a9f9e11)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -**Note:** Version bump only for package @alwatr/font - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -**Note:** Version bump only for package @alwatr/font - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -**Note:** Version bump only for package @alwatr/font - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Features - -- new ui design system ([8c9c8ba](https://github.com/AliMD/alwatr/commit/8c9c8ba29c477838f3e7034b902f4e0dafabd17c)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/font - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -**Note:** Version bump only for package @alwatr/font - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/font - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/font - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/font - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/font - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -**Note:** Version bump only for package @alwatr/font - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Bug Fixes - -- **font:** review ([a371bf2](https://github.com/AliMD/alwatr/commit/a371bf2bcf6477487ceeadeaa596919066f5c468)) - -### Features - -- **font:** rename font files ([eb76649](https://github.com/AliMD/alwatr/commit/eb76649be6b7eee14660664a037b2b535ce52805)) -- **font:** seprate stylesheets ([fafa726](https://github.com/AliMD/alwatr/commit/fafa726d887ddddda31042651e58d5180e4d5a97)) - -# [0.18.0](https://github.com/AliMD/alwatr/compare/v0.17.0...v0.18.0) (2022-10-22) - -**Note:** Version bump only for package @alwatr/font - -# [0.17.0](https://github.com/AliMD/alwatr/compare/v0.16.1...v0.17.0) (2022-10-21) - -**Note:** Version bump only for package @alwatr/font - -# [0.16.0](https://github.com/AliMD/alwatr/compare/v0.15.0...v0.16.0) (2022-09-08) - -**Note:** Version bump only for package @alwatr/font - -# [0.15.0](https://github.com/AliMD/alwatr/compare/v0.14.0...v0.15.0) (2022-09-01) - -**Note:** Version bump only for package @alwatr/font - -# [0.14.0](https://github.com/AliMD/alwatr/compare/v0.13.0...v0.14.0) (2022-08-19) - -**Note:** Version bump only for package @alwatr/font - -# [0.13.0](https://github.com/AliMD/alwatr/compare/v0.12.0...v0.13.0) (2022-08-06) - -**Note:** Version bump only for package @alwatr/font - -# [0.12.0](https://github.com/AliMD/alwatr/compare/v0.11.0...v0.12.0) (2022-07-22) - -### Bug Fixes - -- **font:** sahel-vf font-weight ([bf84782](https://github.com/AliMD/alwatr/commit/bf84782347ed4898d854325415f6f43b1953f842)) - -# [0.11.0](https://github.com/AliMD/alwatr/compare/v0.10.1...v0.11.0) (2022-04-16) - -**Note:** Version bump only for package @alwatr/font - -## [0.10.1](https://github.com/AliMD/alwatr/compare/v0.10.0...v0.10.1) (2022-04-02) - -### Bug Fixes - -- **font:** including woff2 ([6d10eb3](https://github.com/AliMD/alwatr/commit/6d10eb33dbdd0f9b6b0f3b9930e44b099d499b77)) - -# [0.10.0](https://github.com/AliMD/alwatr/compare/v0.9.0...v0.10.0) (2022-04-02) - -### Features - -- **font:** add vazirmatn font files ([6499d01](https://github.com/AliMD/alwatr/commit/6499d01fca69909071debefa545d6e9a9d5d85a1)) -- **font:** define fonts, the wight way! ([215afb8](https://github.com/AliMD/alwatr/commit/215afb8959dbc3fd1f0e2e0ebe10a878ab2ddec8)) diff --git a/ui/font/README.md b/ui/font/README.md deleted file mode 100644 index f6c9c590a..000000000 --- a/ui/font/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Alwatr Font - `@alwatr/font` - -Best practices (The Right Way) of using Persian/Arabic web fonts in the website and webapp. - -## How to use - -Insert these lines inside `` tag. -[Demo](https://output.jsbin.com/zucajut) - -### Vazirmatn - -```html - - - - - - - - -``` - -### Vazirmatn Round Dot - -```html - - - - - - - - -``` - -### Sahel - -```html - - - - - - - - -``` diff --git a/ui/font/package.json b/ui/font/package.json deleted file mode 100644 index 15e928efa..000000000 --- a/ui/font/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@alwatr/font", - "version": "1.1.1", - "description": "Best practices (The Right Way) of using Persian/Arabic web fonts in the website and webapp.", - "keywords": [ - "font", - "fonts", - "persian", - "farsi", - "arabic", - "vazirmatn", - "sahel", - "typography", - "pwa", - "alwatr" - ], - "main": "vazirmatn.css", - "author": "S. Ali Mihandoost ", - "license": "MIT", - "files": [ - "**/*.woff*", - "**/*.css", - "**/*.md" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/font" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/font#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - } -} diff --git a/ui/font/sahel.css b/ui/font/sahel.css deleted file mode 100644 index 7534ebb73..000000000 --- a/ui/font/sahel.css +++ /dev/null @@ -1,77 +0,0 @@ -/* Sahel Variable (Without-Latin) */ -@font-face { - font-family: 'sahel-vf'; - font-weight: 300 900; - src: url('sahel/sahel[wght].woff2') format('woff2 supports variations'), - url('sahel/sahel[wght].woff2') format('woff2-variations'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} - -/* Sahel (Without-Latin, None VF Fallback) */ -@font-face { - font-family: 'sahel'; - font-weight: 300; - src: url('sahel/sahel-300.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'sahel'; - font-weight: 400; - src: url('sahel/sahel-400.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'sahel'; - font-weight: 600; - src: url('sahel/sahel-600.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'sahel'; - font-weight: 700; - src: url('sahel/sahel-700.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'sahel'; - font-weight: 900; - src: url('sahel/sahel-900.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} - -/* Global page typography */ -:root { - --ref-font-family-sahel: 'sahel-vf', 'sahel'; -} -body { - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - word-wrap: break-word; - text-size-adjust: none; - -webkit-text-size-adjust: none; - font-feature-settings: 'calt' 1, 'tnum' 0; - font-family: 'sahel-vf', - 'sahel', - system-ui, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - 'Roboto', - 'Oxygen', - 'Ubuntu', - 'Cantarell', - 'Open Sans', - 'Helvetica Neue', - 'Arial', - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji', - 'Segoe UI Symbol'; -} diff --git a/ui/font/sahel/note.txt b/ui/font/sahel/note.txt deleted file mode 100644 index 8611e5c83..000000000 --- a/ui/font/sahel/note.txt +++ /dev/null @@ -1,6 +0,0 @@ -mv Sahel-Black-WOL.woff sahel-900.woff -mv Sahel-Bold-WOL.woff sahel-700.woff -mv Sahel-Semi-bold-WOL.woff sahel-600.woff -mv Sahel-WOL.woff sahel-400.woff -mv Sahel-Light-WOL.woff sahel-300.woff - diff --git a/ui/font/sahel/sahel-300.woff b/ui/font/sahel/sahel-300.woff deleted file mode 100644 index f67d3db93..000000000 Binary files a/ui/font/sahel/sahel-300.woff and /dev/null differ diff --git a/ui/font/sahel/sahel-400.woff b/ui/font/sahel/sahel-400.woff deleted file mode 100644 index e98a850e9..000000000 Binary files a/ui/font/sahel/sahel-400.woff and /dev/null differ diff --git a/ui/font/sahel/sahel-600.woff b/ui/font/sahel/sahel-600.woff deleted file mode 100644 index fa7f27719..000000000 Binary files a/ui/font/sahel/sahel-600.woff and /dev/null differ diff --git a/ui/font/sahel/sahel-700.woff b/ui/font/sahel/sahel-700.woff deleted file mode 100644 index e2491d78b..000000000 Binary files a/ui/font/sahel/sahel-700.woff and /dev/null differ diff --git a/ui/font/sahel/sahel-900.woff b/ui/font/sahel/sahel-900.woff deleted file mode 100644 index 38cfd97af..000000000 Binary files a/ui/font/sahel/sahel-900.woff and /dev/null differ diff --git a/ui/font/sahel/sahel[wght].woff2 b/ui/font/sahel/sahel[wght].woff2 deleted file mode 100644 index f29ad1950..000000000 Binary files a/ui/font/sahel/sahel[wght].woff2 and /dev/null differ diff --git a/ui/font/vazirmatn-roundot.css b/ui/font/vazirmatn-roundot.css deleted file mode 100644 index 00d44e730..000000000 --- a/ui/font/vazirmatn-roundot.css +++ /dev/null @@ -1,105 +0,0 @@ -/* Vazirmatn Round-Dots Variable (Without-Latin) */ -@font-face { - font-family: 'vazirmatn-roundot-vf'; - font-weight: 100 900; - src: url('vazirmatn-roundot/vazirmatn-roundot[wght].woff2') format('woff2 supports variations'), - url('vazirmatn-roundot/vazirmatn-roundot[wght].woff2') format('woff2-variations'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} - -/* Vazirmatn Round-Dots (Without-Latin, None VF Fallback) */ -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 100; - src: url('vazirmatn-roundot/vazirmatn-roundot-100.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 200; - src: url('vazirmatn-roundot/vazirmatn-roundot-200.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 300; - src: url('vazirmatn-roundot/vazirmatn-roundot-300.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 400; - src: url('vazirmatn-roundot/vazirmatn-roundot-400.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 500; - src: url('vazirmatn-roundot/vazirmatn-roundot-500.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 600; - src: url('vazirmatn-roundot/vazirmatn-roundot-600.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 700; - src: url('vazirmatn-roundot/vazirmatn-roundot-700.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 800; - src: url('vazirmatn-roundot/vazirmatn-roundot-800.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn-roundot'; - font-weight: 900; - src: url('vazirmatn-roundot/vazirmatn-roundot-900.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} - -/* Global page typography */ -:root { - --ref-font-family-vazirmatn-roundot: 'vazirmatn-roundot-vf', 'vazirmatn-roundot'; -} -body { - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - word-wrap: break-word; - text-size-adjust: none; - -webkit-text-size-adjust: none; - font-feature-settings: 'calt' 1, 'tnum' 0; - font-family: 'vazirmatn-roundot-vf', - 'vazirmatn-roundot', - system-ui, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - 'Roboto', - 'Oxygen', - 'Ubuntu', - 'Cantarell', - 'Open Sans', - 'Helvetica Neue', - 'Arial', - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji', - 'Segoe UI Symbol'; -} diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-100.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-100.woff deleted file mode 100644 index 4d9fd6677..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-100.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-200.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-200.woff deleted file mode 100644 index dd7b2406a..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-200.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-300.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-300.woff deleted file mode 100644 index 8f8a05a5e..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-300.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-400.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-400.woff deleted file mode 100644 index a4084694e..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-400.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-500.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-500.woff deleted file mode 100644 index dcf29bc2b..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-500.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-600.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-600.woff deleted file mode 100644 index b5399be56..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-600.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-700.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-700.woff deleted file mode 100644 index dc8349a91..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-700.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-800.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-800.woff deleted file mode 100644 index d31b63a22..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-800.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot-900.woff b/ui/font/vazirmatn-roundot/vazirmatn-roundot-900.woff deleted file mode 100644 index d5c542a34..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot-900.woff and /dev/null differ diff --git a/ui/font/vazirmatn-roundot/vazirmatn-roundot[wght].woff2 b/ui/font/vazirmatn-roundot/vazirmatn-roundot[wght].woff2 deleted file mode 100644 index db96f6550..000000000 Binary files a/ui/font/vazirmatn-roundot/vazirmatn-roundot[wght].woff2 and /dev/null differ diff --git a/ui/font/vazirmatn.css b/ui/font/vazirmatn.css deleted file mode 100644 index cee0b33fa..000000000 --- a/ui/font/vazirmatn.css +++ /dev/null @@ -1,105 +0,0 @@ -/* Vazirmatn Variable (Without-Latin) */ -@font-face { - font-family: 'vazirmatn-vf'; - font-weight: 100 900; - src: url('vazirmatn/vazirmatn[wght].woff2') format('woff2 supports variations'), - url('vazirmatn/vazirmatn[wght].woff2') format('woff2-variations'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} - -/* Vazirmatn (Without-Latin, None VF Fallback) */ -@font-face { - font-family: 'vazirmatn'; - font-weight: 100; - src: url('vazirmatn/vazirmatn-100.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 200; - src: url('vazirmatn/vazirmatn-200.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 300; - src: url('vazirmatn/vazirmatn-300.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 400; - src: url('vazirmatn/vazirmatn-400.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 500; - src: url('vazirmatn/vazirmatn-500.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 600; - src: url('vazirmatn/vazirmatn-600.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 700; - src: url('vazirmatn/vazirmatn-700.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 800; - src: url('vazirmatn/vazirmatn-800.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} -@font-face { - font-family: 'vazirmatn'; - font-weight: 900; - src: url('vazirmatn/vazirmatn-900.woff') format('woff'); - font-display: swap; - unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+1EE00-1EEFF; -} - -/* Global page typography */ -:root { - --ref-font-family-vazirmatn: 'vazirmatn-vf', 'vazirmatn'; -} -body { - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - word-wrap: break-word; - text-size-adjust: none; - -webkit-text-size-adjust: none; - font-feature-settings: 'calt' 1, 'tnum' 0; - font-family: 'vazirmatn-vf', - 'vazirmatn', - system-ui, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - 'Roboto', - 'Oxygen', - 'Ubuntu', - 'Cantarell', - 'Open Sans', - 'Helvetica Neue', - 'Arial', - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji', - 'Segoe UI Symbol'; -} diff --git a/ui/font/vazirmatn/note.txt b/ui/font/vazirmatn/note.txt deleted file mode 100644 index db59223ff..000000000 --- a/ui/font/vazirmatn/note.txt +++ /dev/null @@ -1,37 +0,0 @@ -mv Vazirmatn-NL-Black.ttf vazirmatn-900.ttf -mv Vazirmatn-NL-Bold.ttf vazirmatn-700.ttf -mv Vazirmatn-NL-ExtraBold.ttf vazirmatn-800.ttf -mv Vazirmatn-NL-ExtraLight.ttf vazirmatn-200.ttf -mv Vazirmatn-NL-Light.ttf vazirmatn-300.ttf -mv Vazirmatn-NL-Medium.ttf vazirmatn-500.ttf -mv Vazirmatn-NL-Regular.ttf vazirmatn-400.ttf -mv Vazirmatn-NL-SemiBold.ttf vazirmatn-600.ttf -mv Vazirmatn-NL-Thin.ttf vazirmatn-100.ttf -mv Vazirmatn-RD-NL-Black.ttf vazirmatn-roundot-900.ttf -mv Vazirmatn-RD-NL-Bold.ttf vazirmatn-roundot-700.ttf -mv Vazirmatn-RD-NL-ExtraBold.ttf vazirmatn-roundot-800.ttf -mv Vazirmatn-RD-NL-ExtraLight.ttf vazirmatn-roundot-200.ttf -mv Vazirmatn-RD-NL-Light.ttf vazirmatn-roundot-300.ttf -mv Vazirmatn-RD-NL-Medium.ttf vazirmatn-roundot-500.ttf -mv Vazirmatn-RD-NL-Regular.ttf vazirmatn-roundot-400.ttf -mv Vazirmatn-RD-NL-SemiBold.ttf vazirmatn-roundot-600.ttf -mv Vazirmatn-RD-NL-Thin.ttf vazirmatn-roundot-100.ttf - -npx ttf2woff vazirmatn-900.ttf vazirmatn-900.woff -npx ttf2woff vazirmatn-700.ttf vazirmatn-700.woff -npx ttf2woff vazirmatn-800.ttf vazirmatn-800.woff -npx ttf2woff vazirmatn-200.ttf vazirmatn-200.woff -npx ttf2woff vazirmatn-300.ttf vazirmatn-300.woff -npx ttf2woff vazirmatn-500.ttf vazirmatn-500.woff -npx ttf2woff vazirmatn-400.ttf vazirmatn-400.woff -npx ttf2woff vazirmatn-600.ttf vazirmatn-600.woff -npx ttf2woff vazirmatn-100.ttf vazirmatn-100.woff -npx ttf2woff vazirmatn-roundot-900.ttf vazirmatn-roundot-900.woff -npx ttf2woff vazirmatn-roundot-700.ttf vazirmatn-roundot-700.woff -npx ttf2woff vazirmatn-roundot-800.ttf vazirmatn-roundot-800.woff -npx ttf2woff vazirmatn-roundot-200.ttf vazirmatn-roundot-200.woff -npx ttf2woff vazirmatn-roundot-300.ttf vazirmatn-roundot-300.woff -npx ttf2woff vazirmatn-roundot-500.ttf vazirmatn-roundot-500.woff -npx ttf2woff vazirmatn-roundot-400.ttf vazirmatn-roundot-400.woff -npx ttf2woff vazirmatn-roundot-600.ttf vazirmatn-roundot-600.woff -npx ttf2woff vazirmatn-roundot-100.ttf vazirmatn-roundot-100.woff diff --git a/ui/font/vazirmatn/vazirmatn-100.woff b/ui/font/vazirmatn/vazirmatn-100.woff deleted file mode 100644 index e851f30c3..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-100.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-200.woff b/ui/font/vazirmatn/vazirmatn-200.woff deleted file mode 100644 index b57ca3a94..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-200.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-300.woff b/ui/font/vazirmatn/vazirmatn-300.woff deleted file mode 100644 index bddb8b1c0..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-300.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-400.woff b/ui/font/vazirmatn/vazirmatn-400.woff deleted file mode 100644 index 7e485be3d..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-400.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-500.woff b/ui/font/vazirmatn/vazirmatn-500.woff deleted file mode 100644 index 58e6c91ec..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-500.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-600.woff b/ui/font/vazirmatn/vazirmatn-600.woff deleted file mode 100644 index a4fbbaa3f..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-600.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-700.woff b/ui/font/vazirmatn/vazirmatn-700.woff deleted file mode 100644 index 62d709ec9..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-700.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-800.woff b/ui/font/vazirmatn/vazirmatn-800.woff deleted file mode 100644 index 4f258d716..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-800.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn-900.woff b/ui/font/vazirmatn/vazirmatn-900.woff deleted file mode 100644 index 0fa9d4a5f..000000000 Binary files a/ui/font/vazirmatn/vazirmatn-900.woff and /dev/null differ diff --git a/ui/font/vazirmatn/vazirmatn[wght].woff2 b/ui/font/vazirmatn/vazirmatn[wght].woff2 deleted file mode 100644 index 53735bd15..000000000 Binary files a/ui/font/vazirmatn/vazirmatn[wght].woff2 and /dev/null differ diff --git a/ui/icon/CHANGELOG.md b/ui/icon/CHANGELOG.md deleted file mode 100644 index e827c4bea..000000000 --- a/ui/icon/CHANGELOG.md +++ /dev/null @@ -1,209 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/icon@1.1.1...@alwatr/icon@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/icon - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/icon@1.1.0...@alwatr/icon@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/icon - -# 1.1.0 (2023-09-12) - -### Bug Fixes - -* **icon:** scg export ([c50e413](https://github.com/AliMD/alwatr/commit/c50e4139f566afa9ec791eea81f2d3403561d481)) - -### Features - -* **icon:** import svg type ([ca659e4](https://github.com/AliMD/alwatr/commit/ca659e43a485488e5e8ea177f7d955054e69682e)) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* **icon:** 404 cache issue ([5fbc7d8](https://github.com/AliMD/alwatr/commit/5fbc7d87dcb6a82e8cb72e689730db1660c7aa58)) -* **icon:** build issue ([42d3914](https://github.com/AliMD/alwatr/commit/42d39140ca43602c8e30d676bcd9af4b4f62998e)) -* **icon:** render delay on icon change ([9b4bafb](https://github.com/AliMD/alwatr/commit/9b4bafbb23c613c32c35ae3a0c83c1fdd38b8ac4)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -* **ui/icon:** svg property ([7815917](https://github.com/AliMD/alwatr/commit/7815917546be016387d9c0a30a60821d541a0bce)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* **icon:** fill color ([fa1c280](https://github.com/AliMD/alwatr/commit/fa1c280e0385f3acbf456204f47d6e627371e130)) -* **icon:** fix all svg currentcolor ([f06c795](https://github.com/AliMD/alwatr/commit/f06c795f36c5b05c8c2e17e8b80e1e5dd72613c6)) -* **icon:** vertical-align style ([d449498](https://github.com/AliMD/alwatr/commit/d4494981d00a46aa512b6d892286f9f24aeaa0ff)) - -### Features - -* **icon:** add toman icon ;) ([fbebf5b](https://github.com/AliMD/alwatr/commit/fbebf5b5051fc92c634455bb1ba6e5447720bbe1)) -* **icon:** update and compress all icons ([8ded731](https://github.com/AliMD/alwatr/commit/8ded731ef6da34a1f66d1fce80a92c77929b8144)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* compatible with new element mixins ([d26e827](https://github.com/AliMD/alwatr/commit/d26e82731b2ae9c2483ba931c450c5a604633122)) - -### Features - -* debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -* **icon:** enhance preload, support `icon-url-prefix` context signal ([b5a277c](https://github.com/AliMD/alwatr/commit/b5a277c1403177ba14de9434d908df0f4000a5a6)) - -# 0.28.0 (2023-01-20) - -### Bug Fixes - -* **icon:** attr name ([92492bd](https://github.com/AliMD/alwatr/commit/92492bde7595a272ce38476732ee32ddc758d9d2)) -* **icon:** fetch timeout ([46ee93e](https://github.com/AliMD/alwatr/commit/46ee93e2a3b50ec5b087dd86a84ebee37a9695c5)) - -# 0.27.0 (2022-12-29) - -### Bug Fixes - -* **icon:** DirectionMixin! ([61b369e](https://github.com/AliMD/alwatr/commit/61b369e4a058d38df79f281dc84193129a12b4a5)) -* **icon:** PropertyValues ([ccba95a](https://github.com/AliMD/alwatr/commit/ccba95a7a716773c57474d8002320304e772e3cc)) -* **icon:** reflect flip-rtl errro ([b2359e6](https://github.com/AliMD/alwatr/commit/b2359e64c2ef9c381274fe91cc038593c0603ee9)) - -### Features - -* **element:** export from lit ([21f15d8](https://github.com/AliMD/alwatr/commit/21f15d86319a40fab02d86f24a1451c056f36a7c)) -* **ui/icon:** localize mixin ([d91fe98](https://github.com/AliMD/alwatr/commit/d91fe98c3d9df8e30e5159ab93bb8018ef6d4c90)) - -# 0.26.0 (2022-12-22) - -### Bug Fixes - -* **ui/*:** package path ([21dc99f](https://github.com/AliMD/alwatr/commit/21dc99fddb55b085a3d79b8595ae4630520bc43e)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/icon - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/icon - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **icon:** 404 cache issue ([5fbc7d8](https://github.com/AliMD/alwatr/commit/5fbc7d87dcb6a82e8cb72e689730db1660c7aa58)) -- **icon:** build issue ([42d3914](https://github.com/AliMD/alwatr/commit/42d39140ca43602c8e30d676bcd9af4b4f62998e)) -- **icon:** render delay on icon change ([9b4bafb](https://github.com/AliMD/alwatr/commit/9b4bafbb23c613c32c35ae3a0c83c1fdd38b8ac4)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **ui/icon:** svg property ([7815917](https://github.com/AliMD/alwatr/commit/7815917546be016387d9c0a30a60821d541a0bce)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **icon:** fill color ([fa1c280](https://github.com/AliMD/alwatr/commit/fa1c280e0385f3acbf456204f47d6e627371e130)) -- **icon:** fix all svg currentcolor ([f06c795](https://github.com/AliMD/alwatr/commit/f06c795f36c5b05c8c2e17e8b80e1e5dd72613c6)) -- **icon:** vertical-align style ([d449498](https://github.com/AliMD/alwatr/commit/d4494981d00a46aa512b6d892286f9f24aeaa0ff)) - -### Features - -- **icon:** add toman icon ;) ([fbebf5b](https://github.com/AliMD/alwatr/commit/fbebf5b5051fc92c634455bb1ba6e5447720bbe1)) -- **icon:** update and compress all icons ([8ded731](https://github.com/AliMD/alwatr/commit/8ded731ef6da34a1f66d1fce80a92c77929b8144)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- compatible with new element mixins ([d26e827](https://github.com/AliMD/alwatr/commit/d26e82731b2ae9c2483ba931c450c5a604633122)) - -### Features - -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **icon:** enhance preload, support `icon-url-prefix` context signal ([b5a277c](https://github.com/AliMD/alwatr/commit/b5a277c1403177ba14de9434d908df0f4000a5a6)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **icon:** attr name ([92492bd](https://github.com/AliMD/alwatr/commit/92492bde7595a272ce38476732ee32ddc758d9d2)) -- **icon:** fetch timeout ([46ee93e](https://github.com/AliMD/alwatr/commit/46ee93e2a3b50ec5b087dd86a84ebee37a9695c5)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **icon:** DirectionMixin! ([61b369e](https://github.com/AliMD/alwatr/commit/61b369e4a058d38df79f281dc84193129a12b4a5)) -- **icon:** PropertyValues ([ccba95a](https://github.com/AliMD/alwatr/commit/ccba95a7a716773c57474d8002320304e772e3cc)) -- **icon:** reflect flip-rtl errro ([b2359e6](https://github.com/AliMD/alwatr/commit/b2359e64c2ef9c381274fe91cc038593c0603ee9)) - -### Features - -- **element:** export from lit ([21f15d8](https://github.com/AliMD/alwatr/commit/21f15d86319a40fab02d86f24a1451c056f36a7c)) -- **ui/icon:** localize mixin ([d91fe98](https://github.com/AliMD/alwatr/commit/d91fe98c3d9df8e30e5159ab93bb8018ef6d4c90)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **ui/\*:** package path ([21dc99f](https://github.com/AliMD/alwatr/commit/21dc99fddb55b085a3d79b8595ae4630520bc43e)) - -# [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07) - -**Note:** Version bump only for package @alwatr/icon - -## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01) - -### Bug Fixes - -- set correct dependencies in package.json and references in tsconfig.json ([1fb05a8](https://github.com/AliMD/alwatr/commit/1fb05a80e1e098f3334cf3b4bd9c9ebf0c75fbf8)) - -# [0.24.0](https://github.com/AliMD/alwatr/compare/v0.23.0...v0.24.0) (2022-11-28) - -### Bug Fixes - -- use ~ for package version ([4e027ff](https://github.com/AliMD/alwatr/commit/4e027ff63875e03b088ebcdc1bdf2495f4494eec)) - -# [0.23.0](https://github.com/AliMD/alwatr/compare/v0.22.1...v0.23.0) (2022-11-23) - -**Note:** Version bump only for package @alwatr/icon - -## [0.22.1](https://github.com/AliMD/alwatr/compare/v0.22.0...v0.22.1) (2022-11-21) - -**Note:** Version bump only for package @alwatr/icon - -# [0.22.0](https://github.com/AliMD/alwatr/compare/v0.21.0...v0.22.0) (2022-11-20) - -**Note:** Version bump only for package @alwatr/icon - -# [0.21.0](https://github.com/AliMD/alwatr/compare/v0.20.0...v0.21.0) (2022-11-13) - -**Note:** Version bump only for package @alwatr/icon - -# [0.20.0](https://github.com/AliMD/alwatr/compare/v0.19.0...v0.20.0) (2022-11-05) - -### Features - -- **`alwatr-icon`:** icon component ([4a24cdc](https://github.com/AliMD/alwatr/commit/4a24cdcfbb55bdc3928dd39ca9e6372caec386b2)) -- **icon:** refactor and improve ([d75a3f7](https://github.com/AliMD/alwatr/commit/d75a3f7e3d748f974366a2e5a452f3039d19bf18)) - -# [0.19.0](https://github.com/AliMD/alwatr/compare/v0.18.0...v0.19.0) (2022-11-01) - -### Features - -- **`alwatr-icon`:** `url-prefix` attr ([3af2dd4](https://github.com/AliMD/alwatr/commit/3af2dd4ba4a6451d54db7577badce9b279509265)) -- **`alwatr-icon`:** define styles & proprties ([fa0e7c7](https://github.com/AliMD/alwatr/commit/fa0e7c7c22bd9d45e7c3bde7ddb1323875223f63)) -- **`alwatr-icon`:** reflect property ([b1ce3df](https://github.com/AliMD/alwatr/commit/b1ce3df4dc28c3e32cb02c5efcf518c406ebfa82)) -- **`alwatr-icon`:** svg content ([26752bf](https://github.com/AliMD/alwatr/commit/26752bf34376634eac531e066f4a98437fe60b90)) -- **alwatr-icon:** improve ([8522864](https://github.com/AliMD/alwatr/commit/85228649e1d3c8d179e3fbb5c5d2eb606bc7be3a)) diff --git a/ui/icon/README.md b/ui/icon/README.md deleted file mode 100644 index 625ce122d..000000000 --- a/ui/icon/README.md +++ /dev/null @@ -1,210 +0,0 @@ -# Alwatr Icon - `@alwatr/icon` - `` - -Best practices (The Right Way) of using premium designed icons in the website and webapp. - -## How to use - -```html - - - - - -``` - -## Icons - - - -| Outline | | Filled | | Sharp | | -| ----------------------------------------------- | ------------------ | ------------------------------- | ---------- | ------------------------------------------- | ---------------- | -| ![airplane-outline](./svg/airplane-outline.svg) | `airplane-outline` | ![airplane](./svg/airplane.svg) | `airplane` | ![airplane-sharp](./svg/airplane-sharp.svg) | `airplane-sharp` | -| ![archive-outline](./svg/archive-outline.svg) | `archive-outline` | ![archive](./svg/archive.svg) | `archive` | ![archive-sharp](./svg/archive-sharp.svg) | `archive-sharp` | -| ![apps-outline](./svg/apps-outline.svg) | `apps-outline` | ![apps](./svg/apps.svg) | `apps` | ![apps-sharp](./svg/apps-sharp.svg) | `apps-sharp` | - -| Icon | Name | Icon | Name | Icon | Name | -| ----------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------- | ---------------------------- | -| ![accessibility](./svg/accessibility-outline.svg) | `accessibility` | ![add-circle](./svg/add-circle-outline.svg) | `add-circle` | ![add](./svg/add-outline.svg) | `add` | -| ![airplane](./svg/airplane-outline.svg) | `airplane` | ![alarm](./svg/alarm-outline.svg) | `alarm` | ![albums](./svg/albums-outline.svg) | `albums` | -| ![alert-circle](./svg/alert-circle-outline.svg) | `alert-circle` | ![alert](./svg/alert-outline.svg) | `alert` | ![american-football](./svg/american-football-outline.svg) | `american-football` | -| ![analytics](./svg/analytics-outline.svg) | `analytics` | ![aperture](./svg/aperture-outline.svg) | `aperture` | ![apps](./svg/apps-outline.svg) | `apps` | -| ![archive](./svg/archive-outline.svg) | `archive` | ![arrow-back-circle](./svg/arrow-back-circle-outline.svg) | `arrow-back-circle` | ![arrow-back](./svg/arrow-back-outline.svg) | `arrow-back` | -| ![arrow-down-circle](./svg/arrow-down-circle-outline.svg) | `arrow-down-circle` | ![arrow-down](./svg/arrow-down-outline.svg) | `arrow-down` | ![arrow-forward-circle](./svg/arrow-forward-circle-outline.svg) | `arrow-forward-circle` | -| ![arrow-forward](./svg/arrow-forward-outline.svg) | `arrow-forward` | ![arrow-redo-circle](./svg/arrow-redo-circle-outline.svg) | `arrow-redo-circle` | ![arrow-redo](./svg/arrow-redo-outline.svg) | `arrow-redo` | -| ![arrow-undo-circle](./svg/arrow-undo-circle-outline.svg) | `arrow-undo-circle` | ![arrow-undo](./svg/arrow-undo-outline.svg) | `arrow-undo` | ![arrow-up-circle](./svg/arrow-up-circle-outline.svg) | `arrow-up-circle` | -| ![arrow-up](./svg/arrow-up-outline.svg) | `arrow-up` | ![at-circle](./svg/at-circle-outline.svg) | `at-circle` | ![at](./svg/at-outline.svg) | `at` | -| ![attach](./svg/attach-outline.svg) | `attach` | ![backspace](./svg/backspace-outline.svg) | `backspace` | ![bag-add](./svg/bag-add-outline.svg) | `bag-add` | -| ![bag-check](./svg/bag-check-outline.svg) | `bag-check` | ![bag-handle](./svg/bag-handle-outline.svg) | `bag-handle` | ![bag-remove](./svg/bag-remove-outline.svg) | `bag-remove` | -| ![bag](./svg/bag-outline.svg) | `bag` | ![balloon](./svg/balloon-outline.svg) | `balloon` | ![ban](./svg/ban-outline.svg) | `ban` | -| ![bandage](./svg/bandage-outline.svg) | `bandage` | ![bar-chart](./svg/bar-chart-outline.svg) | `bar-chart` | ![barbell](./svg/barbell-outline.svg) | `barbell` | -| ![barcode](./svg/barcode-outline.svg) | `barcode` | ![baseball](./svg/baseball-outline.svg) | `baseball` | ![basket](./svg/basket-outline.svg) | `basket` | -| ![basketball](./svg/basketball-outline.svg) | `basketball` | ![battery-charging](./svg/battery-charging-outline.svg) | `battery-charging` | ![battery-dead](./svg/battery-dead-outline.svg) | `battery-dead` | -| ![battery-full](./svg/battery-full-outline.svg) | `battery-full` | ![battery-half](./svg/battery-half-outline.svg) | `battery-half` | ![beaker](./svg/beaker-outline.svg) | `beaker` | -| ![bed](./svg/bed-outline.svg) | `bed` | ![beer](./svg/beer-outline.svg) | `beer` | ![bicycle](./svg/bicycle-outline.svg) | `bicycle` | -| ![bluetooth](./svg/bluetooth-outline.svg) | `bluetooth` | ![boat](./svg/boat-outline.svg) | `boat` | ![body](./svg/body-outline.svg) | `body` | -| ![bonfire](./svg/bonfire-outline.svg) | `bonfire` | ![book](./svg/book-outline.svg) | `book` | ![bookmark](./svg/bookmark-outline.svg) | `bookmark` | -| ![bookmarks](./svg/bookmarks-outline.svg) | `bookmarks` | ![bowling-ball](./svg/bowling-ball-outline.svg) | `bowling-ball` | ![briefcase](./svg/briefcase-outline.svg) | `briefcase` | -| ![browsers](./svg/browsers-outline.svg) | `browsers` | ![brush](./svg/brush-outline.svg) | `brush` | ![bug](./svg/bug-outline.svg) | `bug` | -| ![build](./svg/build-outline.svg) | `build` | ![bulb](./svg/bulb-outline.svg) | `bulb` | ![bus](./svg/bus-outline.svg) | `bus` | -| ![business](./svg/business-outline.svg) | `business` | ![cafe](./svg/cafe-outline.svg) | `cafe` | ![calculator](./svg/calculator-outline.svg) | `calculator` | -| ![calendar-clear](./svg/calendar-clear-outline.svg) | `calendar-clear` | ![calendar-number](./svg/calendar-number-outline.svg) | `calendar-number` | ![calendar](./svg/calendar-outline.svg) | `calendar` | -| ![call](./svg/call-outline.svg) | `call` | ![camera-reverse](./svg/camera-reverse-outline.svg) | `camera-reverse` | ![camera](./svg/camera-outline.svg) | `camera` | -| ![car-sport](./svg/car-sport-outline.svg) | `car-sport` | ![car](./svg/car-outline.svg) | `car` | ![card](./svg/card-outline.svg) | `card` | -| ![caret-back-circle](./svg/caret-back-circle-outline.svg) | `caret-back-circle` | ![caret-back](./svg/caret-back-outline.svg) | `caret-back` | ![caret-down-circle](./svg/caret-down-circle-outline.svg) | `caret-down-circle` | -| ![caret-down](./svg/caret-down-outline.svg) | `caret-down` | ![caret-forward-circle](./svg/caret-forward-circle-outline.svg) | `caret-forward-circle` | ![caret-forward](./svg/caret-forward-outline.svg) | `caret-forward` | -| ![caret-up-circle](./svg/caret-up-circle-outline.svg) | `caret-up-circle` | ![caret-up](./svg/caret-up-outline.svg) | `caret-up` | ![cart](./svg/cart-outline.svg) | `cart` | -| ![cash](./svg/cash-outline.svg) | `cash` | ![cellular](./svg/cellular-outline.svg) | `cellular` | ![chatbox-ellipses](./svg/chatbox-ellipses-outline.svg) | `chatbox-ellipses` | -| ![chatbox](./svg/chatbox-outline.svg) | `chatbox` | ![chatbubble-ellipses](./svg/chatbubble-ellipses-outline.svg) | `chatbubble-ellipses` | ![chatbubble](./svg/chatbubble-outline.svg) | `chatbubble` | -| ![chatbubbles](./svg/chatbubbles-outline.svg) | `chatbubbles` | ![checkbox](./svg/checkbox-outline.svg) | `checkbox` | ![checkmark-circle](./svg/checkmark-circle-outline.svg) | `checkmark-circle` | -| ![checkmark-done-circle](./svg/checkmark-done-circle-outline.svg) | `checkmark-done-circle` | ![checkmark-done](./svg/checkmark-done-outline.svg) | `checkmark-done` | ![checkmark](./svg/checkmark-outline.svg) | `checkmark` | -| ![chevron-back-circle](./svg/chevron-back-circle-outline.svg) | `chevron-back-circle` | ![chevron-back](./svg/chevron-back-outline.svg) | `chevron-back` | ![chevron-down-circle](./svg/chevron-down-circle-outline.svg) | `chevron-down-circle` | -| ![chevron-down](./svg/chevron-down-outline.svg) | `chevron-down` | ![chevron-forward-circle](./svg/chevron-forward-circle-outline.svg) | `chevron-forward-circle` | ![chevron-forward](./svg/chevron-forward-outline.svg) | `chevron-forward` | -| ![chevron-up-circle](./svg/chevron-up-circle-outline.svg) | `chevron-up-circle` | ![chevron-up](./svg/chevron-up-outline.svg) | `chevron-up` | ![clipboard](./svg/clipboard-outline.svg) | `clipboard` | -| ![close-circle](./svg/close-circle-outline.svg) | `close-circle` | ![close](./svg/close-outline.svg) | `close` | ![cloud-circle](./svg/cloud-circle-outline.svg) | `cloud-circle` | -| ![cloud-done](./svg/cloud-done-outline.svg) | `cloud-done` | ![cloud-download](./svg/cloud-download-outline.svg) | `cloud-download` | ![cloud-offline](./svg/cloud-offline-outline.svg) | `cloud-offline` | -| ![cloud-upload](./svg/cloud-upload-outline.svg) | `cloud-upload` | ![cloud](./svg/cloud-outline.svg) | `cloud` | ![cloudy-night](./svg/cloudy-night-outline.svg) | `cloudy-night` | -| ![cloudy](./svg/cloudy-outline.svg) | `cloudy` | ![code-download](./svg/code-download-outline.svg) | `code-download` | ![code-slash](./svg/code-slash-outline.svg) | `code-slash` | -| ![code-working](./svg/code-working-outline.svg) | `code-working` | ![code](./svg/code-outline.svg) | `code` | ![cog](./svg/cog-outline.svg) | `cog` | -| ![color-fill](./svg/color-fill-outline.svg) | `color-fill` | ![color-filter](./svg/color-filter-outline.svg) | `color-filter` | ![color-palette](./svg/color-palette-outline.svg) | `color-palette` | -| ![color-wand](./svg/color-wand-outline.svg) | `color-wand` | ![compass](./svg/compass-outline.svg) | `compass` | ![construct](./svg/construct-outline.svg) | `construct` | -| ![contract](./svg/contract-outline.svg) | `contract` | ![contrast](./svg/contrast-outline.svg) | `contrast` | ![copy](./svg/copy-outline.svg) | `copy` | -| ![create](./svg/create-outline.svg) | `create` | ![crop](./svg/crop-outline.svg) | `crop` | ![cube](./svg/cube-outline.svg) | `cube` | -| ![cut](./svg/cut-outline.svg) | `cut` | ![desktop](./svg/desktop-outline.svg) | `desktop` | ![diamond](./svg/diamond-outline.svg) | `diamond` | -| ![dice](./svg/dice-outline.svg) | `dice` | ![disc](./svg/disc-outline.svg) | `disc` | ![document-attach](./svg/document-attach-outline.svg) | `document-attach` | -| ![document-lock](./svg/document-lock-outline.svg) | `document-lock` | ![document-text](./svg/document-text-outline.svg) | `document-text` | ![document](./svg/document-outline.svg) | `document` | -| ![documents](./svg/documents-outline.svg) | `documents` | ![download](./svg/download-outline.svg) | `download` | ![duplicate](./svg/duplicate-outline.svg) | `duplicate` | -| ![ear](./svg/ear-outline.svg) | `ear` | ![earth](./svg/earth-outline.svg) | `earth` | ![easel](./svg/easel-outline.svg) | `easel` | -| ![egg](./svg/egg-outline.svg) | `egg` | ![ellipse](./svg/ellipse-outline.svg) | `ellipse` | ![ellipsis-horizontal-circle](./svg/ellipsis-horizontal-circle-outline.svg) | `ellipsis-horizontal-circle` | -| ![ellipsis-horizontal](./svg/ellipsis-horizontal-outline.svg) | `ellipsis-horizontal` | ![ellipsis-vertical-circle](./svg/ellipsis-vertical-circle-outline.svg) | `ellipsis-vertical-circle` | ![ellipsis-vertical](./svg/ellipsis-vertical-outline.svg) | `ellipsis-vertical` | -| ![enter](./svg/enter-outline.svg) | `enter` | ![exit](./svg/exit-outline.svg) | `exit` | ![expand](./svg/expand-outline.svg) | `expand` | -| ![extension-puzzle](./svg/extension-puzzle-outline.svg) | `extension-puzzle` | ![eye-off](./svg/eye-off-outline.svg) | `eye-off` | ![eye](./svg/eye-outline.svg) | `eye` | -| ![eyedrop](./svg/eyedrop-outline.svg) | `eyedrop` | ![fast-food](./svg/fast-food-outline.svg) | `fast-food` | ![female](./svg/female-outline.svg) | `female` | -| ![file-tray-full](./svg/file-tray-full-outline.svg) | `file-tray-full` | ![file-tray-stacked](./svg/file-tray-stacked-outline.svg) | `file-tray-stacked` | ![file-tray](./svg/file-tray-outline.svg) | `file-tray` | -| ![film](./svg/film-outline.svg) | `film` | ![filter-circle](./svg/filter-circle-outline.svg) | `filter-circle` | ![filter](./svg/filter-outline.svg) | `filter` | -| ![finger-print](./svg/finger-print-outline.svg) | `finger-print` | ![fish](./svg/fish-outline.svg) | `fish` | ![fitness](./svg/fitness-outline.svg) | `fitness` | -| ![flag](./svg/flag-outline.svg) | `flag` | ![flame](./svg/flame-outline.svg) | `flame` | ![flash-off](./svg/flash-off-outline.svg) | `flash-off` | -| ![flash](./svg/flash-outline.svg) | `flash` | ![flashlight](./svg/flashlight-outline.svg) | `flashlight` | ![flask](./svg/flask-outline.svg) | `flask` | -| ![flower](./svg/flower-outline.svg) | `flower` | ![folder-open](./svg/folder-open-outline.svg) | `folder-open` | ![folder](./svg/folder-outline.svg) | `folder` | -| ![football](./svg/football-outline.svg) | `football` | ![footsteps](./svg/footsteps-outline.svg) | `footsteps` | ![funnel](./svg/funnel-outline.svg) | `funnel` | -| ![game-controller](./svg/game-controller-outline.svg) | `game-controller` | ![gift](./svg/gift-outline.svg) | `gift` | ![git-branch](./svg/git-branch-outline.svg) | `git-branch` | -| ![git-commit](./svg/git-commit-outline.svg) | `git-commit` | ![git-compare](./svg/git-compare-outline.svg) | `git-compare` | ![git-merge](./svg/git-merge-outline.svg) | `git-merge` | -| ![git-network](./svg/git-network-outline.svg) | `git-network` | ![git-pull-request](./svg/git-pull-request-outline.svg) | `git-pull-request` | ![glasses](./svg/glasses-outline.svg) | `glasses` | -| ![globe](./svg/globe-outline.svg) | `globe` | ![golf](./svg/golf-outline.svg) | `golf` | ![grid](./svg/grid-outline.svg) | `grid` | -| ![hammer](./svg/hammer-outline.svg) | `hammer` | ![hand-left](./svg/hand-left-outline.svg) | `hand-left` | ![hand-right](./svg/hand-right-outline.svg) | `hand-right` | -| ![happy](./svg/happy-outline.svg) | `happy` | ![hardware-chip](./svg/hardware-chip-outline.svg) | `hardware-chip` | ![headset](./svg/headset-outline.svg) | `headset` | -| ![heart-circle](./svg/heart-circle-outline.svg) | `heart-circle` | ![heart-dislike-circle](./svg/heart-dislike-circle-outline.svg) | `heart-dislike-circle` | ![heart-dislike](./svg/heart-dislike-outline.svg) | `heart-dislike` | -| ![heart-half](./svg/heart-half-outline.svg) | `heart-half` | ![heart](./svg/heart-outline.svg) | `heart` | ![help-buoy](./svg/help-buoy-outline.svg) | `help-buoy` | -| ![help-circle](./svg/help-circle-outline.svg) | `help-circle` | ![help](./svg/help-outline.svg) | `help` | ![home](./svg/home-outline.svg) | `home` | -| ![hourglass](./svg/hourglass-outline.svg) | `hourglass` | ![ice-cream](./svg/ice-cream-outline.svg) | `ice-cream` | ![id-card](./svg/id-card-outline.svg) | `id-card` | -| ![image](./svg/image-outline.svg) | `image` | ![images](./svg/images-outline.svg) | `images` | ![infinite](./svg/infinite-outline.svg) | `infinite` | -| ![information-circle](./svg/information-circle-outline.svg) | `information-circle` | ![information](./svg/information-outline.svg) | `information` | ![invert-mode](./svg/invert-mode-outline.svg) | `invert-mode` | -| ![journal](./svg/journal-outline.svg) | `journal` | ![key](./svg/key-outline.svg) | `key` | ![keypad](./svg/keypad-outline.svg) | `keypad` | -| ![language](./svg/language-outline.svg) | `language` | ![laptop](./svg/laptop-outline.svg) | `laptop` | ![layers](./svg/layers-outline.svg) | `layers` | -| ![leaf](./svg/leaf-outline.svg) | `leaf` | ![library](./svg/library-outline.svg) | `library` | ![link](./svg/link-outline.svg) | `link` | -| ![list-circle](./svg/list-circle-outline.svg) | `list-circle` | ![list](./svg/list-outline.svg) | `list` | ![locate](./svg/locate-outline.svg) | `locate` | -| ![location](./svg/location-outline.svg) | `location` | ![lock-closed](./svg/lock-closed-outline.svg) | `lock-closed` | ![lock-open](./svg/lock-open-outline.svg) | `lock-open` | -| ![log-in](./svg/log-in-outline.svg) | `log-in` | ![log-out](./svg/log-out-outline.svg) | `log-out` | ![magnet](./svg/magnet-outline.svg) | `magnet` | -| ![mail-open](./svg/mail-open-outline.svg) | `mail-open` | ![mail-unread](./svg/mail-unread-outline.svg) | `mail-unread` | ![mail](./svg/mail-outline.svg) | `mail` | -| ![male-female](./svg/male-female-outline.svg) | `male-female` | ![male](./svg/male-outline.svg) | `male` | ![man](./svg/man-outline.svg) | `man` | -| ![map](./svg/map-outline.svg) | `map` | ![medal](./svg/medal-outline.svg) | `medal` | ![medical](./svg/medical-outline.svg) | `medical` | -| ![medkit](./svg/medkit-outline.svg) | `medkit` | ![megaphone](./svg/megaphone-outline.svg) | `megaphone` | ![menu](./svg/menu-outline.svg) | `menu` | -| ![mic-circle](./svg/mic-circle-outline.svg) | `mic-circle` | ![mic-off-circle](./svg/mic-off-circle-outline.svg) | `mic-off-circle` | ![mic-off](./svg/mic-off-outline.svg) | `mic-off` | -| ![mic](./svg/mic-outline.svg) | `mic` | ![moon](./svg/moon-outline.svg) | `moon` | ![move](./svg/move-outline.svg) | `move` | -| ![musical-note](./svg/musical-note-outline.svg) | `musical-note` | ![musical-notes](./svg/musical-notes-outline.svg) | `musical-notes` | ![navigate-circle](./svg/navigate-circle-outline.svg) | `navigate-circle` | -| ![navigate](./svg/navigate-outline.svg) | `navigate` | ![newspaper](./svg/newspaper-outline.svg) | `newspaper` | ![notifications-circle](./svg/notifications-circle-outline.svg) | `notifications-circle` | -| ![notifications-off-circle](./svg/notifications-off-circle-outline.svg) | `notifications-off-circle` | ![notifications-off](./svg/notifications-off-outline.svg) | `notifications-off` | ![notifications](./svg/notifications-outline.svg) | `notifications` | -| ![nuclear](./svg/nuclear-outline.svg) | `nuclear` | ![nutrition](./svg/nutrition-outline.svg) | `nutrition` | ![open](./svg/open-outline.svg) | `open` | -| ![options](./svg/options-outline.svg) | `options` | ![paper-plane](./svg/paper-plane-outline.svg) | `paper-plane` | ![partly-sunny](./svg/partly-sunny-outline.svg) | `partly-sunny` | -| ![pause-circle](./svg/pause-circle-outline.svg) | `pause-circle` | ![pause](./svg/pause-outline.svg) | `pause` | ![paw](./svg/paw-outline.svg) | `paw` | -| ![pencil](./svg/pencil-outline.svg) | `pencil` | ![people-circle](./svg/people-circle-outline.svg) | `people-circle` | ![people](./svg/people-outline.svg) | `people` | -| ![person-add](./svg/person-add-outline.svg) | `person-add` | ![person-circle](./svg/person-circle-outline.svg) | `person-circle` | ![person-remove](./svg/person-remove-outline.svg) | `person-remove` | -| ![person](./svg/person-outline.svg) | `person` | ![phone-landscape](./svg/phone-landscape-outline.svg) | `phone-landscape` | ![phone-portrait](./svg/phone-portrait-outline.svg) | `phone-portrait` | -| ![pie-chart](./svg/pie-chart-outline.svg) | `pie-chart` | ![pin](./svg/pin-outline.svg) | `pin` | ![pint](./svg/pint-outline.svg) | `pint` | -| ![pizza](./svg/pizza-outline.svg) | `pizza` | ![planet](./svg/planet-outline.svg) | `planet` | ![play-back-circle](./svg/play-back-circle-outline.svg) | `play-back-circle` | -| ![play-back](./svg/play-back-outline.svg) | `play-back` | ![play-circle](./svg/play-circle-outline.svg) | `play-circle` | ![play-forward-circle](./svg/play-forward-circle-outline.svg) | `play-forward-circle` | -| ![play-forward](./svg/play-forward-outline.svg) | `play-forward` | ![play-skip-back-circle](./svg/play-skip-back-circle-outline.svg) | `play-skip-back-circle` | ![play-skip-back](./svg/play-skip-back-outline.svg) | `play-skip-back` | -| ![play-skip-forward-circle](./svg/play-skip-forward-circle-outline.svg) | `play-skip-forward-circle` | ![play-skip-forward](./svg/play-skip-forward-outline.svg) | `play-skip-forward` | ![play](./svg/play-outline.svg) | `play` | -| ![podium](./svg/podium-outline.svg) | `podium` | ![power](./svg/power-outline.svg) | `power` | ![pricetag](./svg/pricetag-outline.svg) | `pricetag` | -| ![pricetags](./svg/pricetags-outline.svg) | `pricetags` | ![print](./svg/print-outline.svg) | `print` | ![prism](./svg/prism-outline.svg) | `prism` | -| ![pulse](./svg/pulse-outline.svg) | `pulse` | ![push](./svg/push-outline.svg) | `push` | ![qr-code](./svg/qr-code-outline.svg) | `qr-code` | -| ![radio-button-off](./svg/radio-button-off-outline.svg) | `radio-button-off` | ![radio-button-on](./svg/radio-button-on-outline.svg) | `radio-button-on` | ![radio](./svg/radio-outline.svg) | `radio` | -| ![rainy](./svg/rainy-outline.svg) | `rainy` | ![reader](./svg/reader-outline.svg) | `reader` | ![receipt](./svg/receipt-outline.svg) | `receipt` | -| ![recording](./svg/recording-outline.svg) | `recording` | ![refresh-circle](./svg/refresh-circle-outline.svg) | `refresh-circle` | ![refresh](./svg/refresh-outline.svg) | `refresh` | -| ![reload-circle](./svg/reload-circle-outline.svg) | `reload-circle` | ![reload](./svg/reload-outline.svg) | `reload` | ![remove-circle](./svg/remove-circle-outline.svg) | `remove-circle` | -| ![remove](./svg/remove-outline.svg) | `remove` | ![reorder-four](./svg/reorder-four-outline.svg) | `reorder-four` | ![reorder-three](./svg/reorder-three-outline.svg) | `reorder-three` | -| ![reorder-two](./svg/reorder-two-outline.svg) | `reorder-two` | ![repeat](./svg/repeat-outline.svg) | `repeat` | ![resize](./svg/resize-outline.svg) | `resize` | -| ![restaurant](./svg/restaurant-outline.svg) | `restaurant` | ![return-down-back](./svg/return-down-back-outline.svg) | `return-down-back` | ![return-down-forward](./svg/return-down-forward-outline.svg) | `return-down-forward` | -| ![return-up-back](./svg/return-up-back-outline.svg) | `return-up-back` | ![return-up-forward](./svg/return-up-forward-outline.svg) | `return-up-forward` | ![ribbon](./svg/ribbon-outline.svg) | `ribbon` | -| ![rocket](./svg/rocket-outline.svg) | `rocket` | ![rose](./svg/rose-outline.svg) | `rose` | ![sad](./svg/sad-outline.svg) | `sad` | -| ![save](./svg/save-outline.svg) | `save` | ![scale](./svg/scale-outline.svg) | `scale` | ![scan-circle](./svg/scan-circle-outline.svg) | `scan-circle` | -| ![scan](./svg/scan-outline.svg) | `scan` | ![school](./svg/school-outline.svg) | `school` | ![search-circle](./svg/search-circle-outline.svg) | `search-circle` | -| ![search](./svg/search-outline.svg) | `search` | ![send](./svg/send-outline.svg) | `send` | ![server](./svg/server-outline.svg) | `server` | -| ![settings](./svg/settings-outline.svg) | `settings` | ![shapes](./svg/shapes-outline.svg) | `shapes` | ![share-social](./svg/share-social-outline.svg) | `share-social` | -| ![share](./svg/share-outline.svg) | `share` | ![shield-checkmark](./svg/shield-checkmark-outline.svg) | `shield-checkmark` | ![shield-half](./svg/shield-half-outline.svg) | `shield-half` | -| ![shield](./svg/shield-outline.svg) | `shield` | ![shirt](./svg/shirt-outline.svg) | `shirt` | ![shuffle](./svg/shuffle-outline.svg) | `shuffle` | -| ![skull](./svg/skull-outline.svg) | `skull` | ![snow](./svg/snow-outline.svg) | `snow` | ![sparkles](./svg/sparkles-outline.svg) | `sparkles` | -| ![speedometer](./svg/speedometer-outline.svg) | `speedometer` | ![square](./svg/square-outline.svg) | `square` | ![star-half](./svg/star-half-outline.svg) | `star-half` | -| ![star](./svg/star-outline.svg) | `star` | ![stats-chart](./svg/stats-chart-outline.svg) | `stats-chart` | ![stop-circle](./svg/stop-circle-outline.svg) | `stop-circle` | -| ![stop](./svg/stop-outline.svg) | `stop` | ![stopwatch](./svg/stopwatch-outline.svg) | `stopwatch` | ![storefront](./svg/storefront-outline.svg) | `storefront` | -| ![subway](./svg/subway-outline.svg) | `subway` | ![sunny](./svg/sunny-outline.svg) | `sunny` | ![swap-horizontal](./svg/swap-horizontal-outline.svg) | `swap-horizontal` | -| ![swap-vertical](./svg/swap-vertical-outline.svg) | `swap-vertical` | ![sync-circle](./svg/sync-circle-outline.svg) | `sync-circle` | ![sync](./svg/sync-outline.svg) | `sync` | -| ![tablet-landscape](./svg/tablet-landscape-outline.svg) | `tablet-landscape` | ![tablet-portrait](./svg/tablet-portrait-outline.svg) | `tablet-portrait` | ![telescope](./svg/telescope-outline.svg) | `telescope` | -| ![tennisball](./svg/tennisball-outline.svg) | `tennisball` | ![terminal](./svg/terminal-outline.svg) | `terminal` | ![text](./svg/text-outline.svg) | `text` | -| ![thermometer](./svg/thermometer-outline.svg) | `thermometer` | ![thumbs-down](./svg/thumbs-down-outline.svg) | `thumbs-down` | ![thumbs-up](./svg/thumbs-up-outline.svg) | `thumbs-up` | -| ![thunderstorm](./svg/thunderstorm-outline.svg) | `thunderstorm` | ![ticket](./svg/ticket-outline.svg) | `ticket` | ![time](./svg/time-outline.svg) | `time` | -| ![timer](./svg/timer-outline.svg) | `timer` | ![today](./svg/today-outline.svg) | `today` | ![toggle](./svg/toggle-outline.svg) | `toggle` | -| ![trail-sign](./svg/trail-sign-outline.svg) | `trail-sign` | ![train](./svg/train-outline.svg) | `train` | ![transgender](./svg/transgender-outline.svg) | `transgender` | -| ![trash-bin](./svg/trash-bin-outline.svg) | `trash-bin` | ![trash](./svg/trash-outline.svg) | `trash` | ![trending-down](./svg/trending-down-outline.svg) | `trending-down` | -| ![trending-up](./svg/trending-up-outline.svg) | `trending-up` | ![triangle](./svg/triangle-outline.svg) | `triangle` | ![trophy](./svg/trophy-outline.svg) | `trophy` | -| ![tv](./svg/tv-outline.svg) | `tv` | ![umbrella](./svg/umbrella-outline.svg) | `umbrella` | ![unlink](./svg/unlink-outline.svg) | `unlink` | -| ![videocam-off](./svg/videocam-off-outline.svg) | `videocam-off` | ![videocam](./svg/videocam-outline.svg) | `videocam` | ![volume-high](./svg/volume-high-outline.svg) | `volume-high` | -| ![volume-low](./svg/volume-low-outline.svg) | `volume-low` | ![volume-medium](./svg/volume-medium-outline.svg) | `volume-medium` | ![volume-mute](./svg/volume-mute-outline.svg) | `volume-mute` | -| ![volume-off](./svg/volume-off-outline.svg) | `volume-off` | ![walk](./svg/walk-outline.svg) | `walk` | ![wallet](./svg/wallet-outline.svg) | `wallet` | -| ![warning](./svg/warning-outline.svg) | `warning` | ![watch](./svg/watch-outline.svg) | `watch` | ![water](./svg/water-outline.svg) | `water` | -| ![wifi](./svg/wifi-outline.svg) | `wifi` | ![wine](./svg/wine-outline.svg) | `wine` | ![woman](./svg/woman-outline.svg) | `woman` | - -### Logos - -| Icon | Name | Icon | Name | Icon | Name | -| ----------------------------------------------- | ------------------ | --------------------------------------------------------- | ----------------------- | ----------------------------------------------------------- | ------------------------ | -| ![logo-alipay](./svg/logo-alipay.svg) | `logo-alipay` | ![logo-amazon](./svg/logo-amazon.svg) | `logo-amazon` | ![logo-amplify](./svg/logo-amplify.svg) | `logo-amplify` | -| ![logo-android](./svg/logo-android.svg) | `logo-android` | ![logo-angular](./svg/logo-angular.svg) | `logo-angular` | ![logo-apple-appstore](./svg/logo-apple-appstore.svg) | `logo-apple-appstore` | -| ![logo-apple-ar](./svg/logo-apple-ar.svg) | `logo-apple-ar` | ![logo-apple](./svg/logo-apple.svg) | `logo-apple` | ![logo-behance](./svg/logo-behance.svg) | `logo-behance` | -| ![logo-bitbucket](./svg/logo-bitbucket.svg) | `logo-bitbucket` | ![logo-bitcoin](./svg/logo-bitcoin.svg) | `logo-bitcoin` | ![logo-buffer](./svg/logo-buffer.svg) | `logo-buffer` | -| ![logo-capacitor](./svg/logo-capacitor.svg) | `logo-capacitor` | ![logo-chrome](./svg/logo-chrome.svg) | `logo-chrome` | ![logo-closed-captioning](./svg/logo-closed-captioning.svg) | `logo-closed-captioning` | -| ![logo-codepen](./svg/logo-codepen.svg) | `logo-codepen` | ![logo-css3](./svg/logo-css3.svg) | `logo-css3` | ![logo-designernews](./svg/logo-designernews.svg) | `logo-designernews` | -| ![logo-deviantart](./svg/logo-deviantart.svg) | `logo-deviantart` | ![logo-discord](./svg/logo-discord.svg) | `logo-discord` | ![logo-docker](./svg/logo-docker.svg) | `logo-docker` | -| ![logo-dribbble](./svg/logo-dribbble.svg) | `logo-dribbble` | ![logo-dropbox](./svg/logo-dropbox.svg) | `logo-dropbox` | ![logo-edge](./svg/logo-edge.svg) | `logo-edge` | -| ![logo-electron](./svg/logo-electron.svg) | `logo-electron` | ![logo-euro](./svg/logo-euro.svg) | `logo-euro` | ![logo-facebook](./svg/logo-facebook.svg) | `logo-facebook` | -| ![logo-figma](./svg/logo-figma.svg) | `logo-figma` | ![logo-firebase](./svg/logo-firebase.svg) | `logo-firebase` | ![logo-firefox](./svg/logo-firefox.svg) | `logo-firefox` | -| ![logo-flickr](./svg/logo-flickr.svg) | `logo-flickr` | ![logo-foursquare](./svg/logo-foursquare.svg) | `logo-foursquare` | ![logo-github](./svg/logo-github.svg) | `logo-github` | -| ![logo-gitlab](./svg/logo-gitlab.svg) | `logo-gitlab` | ![logo-google-playstore](./svg/logo-google-playstore.svg) | `logo-google-playstore` | ![logo-google](./svg/logo-google.svg) | `logo-google` | -| ![logo-hackernews](./svg/logo-hackernews.svg) | `logo-hackernews` | ![logo-html5](./svg/logo-html5.svg) | `logo-html5` | ![logo-instagram](./svg/logo-instagram.svg) | `logo-instagram` | -| ![logo-ionic](./svg/logo-ionic.svg) | `logo-ionic` | ![logo-ionitron](./svg/logo-ionitron.svg) | `logo-ionitron` | ![logo-javascript](./svg/logo-javascript.svg) | `logo-javascript` | -| ![logo-laravel](./svg/logo-laravel.svg) | `logo-laravel` | ![logo-linkedin](./svg/logo-linkedin.svg) | `logo-linkedin` | ![logo-markdown](./svg/logo-markdown.svg) | `logo-markdown` | -| ![logo-mastodon](./svg/logo-mastodon.svg) | `logo-mastodon` | ![logo-medium](./svg/logo-medium.svg) | `logo-medium` | ![logo-microsoft](./svg/logo-microsoft.svg) | `logo-microsoft` | -| ![logo-no-smoking](./svg/logo-no-smoking.svg) | `logo-no-smoking` | ![logo-nodejs](./svg/logo-nodejs.svg) | `logo-nodejs` | ![logo-npm](./svg/logo-npm.svg) | `logo-npm` | -| ![logo-octocat](./svg/logo-octocat.svg) | `logo-octocat` | ![logo-paypal](./svg/logo-paypal.svg) | `logo-paypal` | ![logo-pinterest](./svg/logo-pinterest.svg) | `logo-pinterest` | -| ![logo-playstation](./svg/logo-playstation.svg) | `logo-playstation` | ![logo-pwa](./svg/logo-pwa.svg) | `logo-pwa` | ![logo-python](./svg/logo-python.svg) | `logo-python` | -| ![logo-react](./svg/logo-react.svg) | `logo-react` | ![logo-reddit](./svg/logo-reddit.svg) | `logo-reddit` | ![logo-rss](./svg/logo-rss.svg) | `logo-rss` | -| ![logo-sass](./svg/logo-sass.svg) | `logo-sass` | ![logo-skype](./svg/logo-skype.svg) | `logo-skype` | ![logo-slack](./svg/logo-slack.svg) | `logo-slack` | -| ![logo-snapchat](./svg/logo-snapchat.svg) | `logo-snapchat` | ![logo-soundcloud](./svg/logo-soundcloud.svg) | `logo-soundcloud` | ![logo-stackoverflow](./svg/logo-stackoverflow.svg) | `logo-stackoverflow` | -| ![logo-steam](./svg/logo-steam.svg) | `logo-steam` | ![logo-stencil](./svg/logo-stencil.svg) | `logo-stencil` | ![logo-tableau](./svg/logo-tableau.svg) | `logo-tableau` | -| ![logo-tiktok](./svg/logo-tiktok.svg) | `logo-tiktok` | ![logo-tumblr](./svg/logo-tumblr.svg) | `logo-tumblr` | ![logo-tux](./svg/logo-tux.svg) | `logo-tux` | -| ![logo-twitch](./svg/logo-twitch.svg) | `logo-twitch` | ![logo-twitter](./svg/logo-twitter.svg) | `logo-twitter` | ![logo-usd](./svg/logo-usd.svg) | `logo-usd` | -| ![logo-venmo](./svg/logo-venmo.svg) | `logo-venmo` | ![logo-vercel](./svg/logo-vercel.svg) | `logo-vercel` | ![logo-vimeo](./svg/logo-vimeo.svg) | `logo-vimeo` | -| ![logo-vk](./svg/logo-vk.svg) | `logo-vk` | ![logo-vue](./svg/logo-vue.svg) | `logo-vue` | ![logo-web-component](./svg/logo-web-component.svg) | `logo-web-component` | -| ![logo-wechat](./svg/logo-wechat.svg) | `logo-wechat` | ![logo-whatsapp](./svg/logo-whatsapp.svg) | `logo-whatsapp` | ![logo-windows](./svg/logo-windows.svg) | `logo-windows` | -| ![logo-wordpress](./svg/logo-wordpress.svg) | `logo-wordpress` | ![logo-xbox](./svg/logo-xbox.svg) | `logo-xbox` | ![logo-xing](./svg/logo-xing.svg) | `logo-xing` | -| ![logo-yahoo](./svg/logo-yahoo.svg) | `logo-yahoo` | ![logo-yen](./svg/logo-yen.svg) | `logo-yen` | ![logo-youtube](./svg/logo-youtube.svg) | `logo-youtube` | diff --git a/ui/icon/package.json b/ui/icon/package.json deleted file mode 100644 index ef3d16da3..000000000 --- a/ui/icon/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@alwatr/icon", - "version": "1.1.2", - "description": "Best practices (The Right Way) of using premium designed icons in the website and webapp.", - "keywords": [ - "icon", - "icons", - "lit", - "element", - "component", - "typescript", - "pwa", - "alwatr" - ], - "main": "icon.js", - "type": "module", - "types": "icon.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md,svg}" - ], - "exports": { - ".": { - "default": "./icon.js", - "types": "./icon.d.ts" - }, - "./svg/*.svg": { - "default": "./svg/*.svg", - "types": "./svg.d.ts" - } - }, - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/icon" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/icon#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/element": "^1.1.2", - "@alwatr/fetch": "^1.1.2", - "@alwatr/logger": "^1.1.2", - "tslib": "^2.6.2" - } -} diff --git a/ui/icon/src/icon.ts b/ui/icon/src/icon.ts deleted file mode 100644 index 626c1b184..000000000 --- a/ui/icon/src/icon.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { - AlwatrBaseElement, - unsafeSVG, - customElement, - property, - html, - css, - DirectionMixin, - SignalMixin, - nothing, - type HTMLTemplateResult, -} from '@alwatr/element'; -import {globalAlwatr} from '@alwatr/logger'; - -import {preloadIcon} from './preload.js'; - -export {preloadIcon}; - -globalAlwatr.registeredList.push({ - name: '@alwatr/icon', - version: _ALWATR_VERSION_, -}); - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-icon': AlwatrIcon; - } -} - -/** - * Alwatr icon component - * - * @attr {Boolean} flip-rtl - */ -@customElement('alwatr-icon') -export class AlwatrIcon extends DirectionMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: inline-block; - width: 1em; - height: 1em; - contain: size layout paint style; - box-sizing: content-box; - vertical-align: middle; - } - - :host([flip-rtl][dir='rtl']) svg { - transform: scaleX(-1); - } - - svg { - display: block; - height: 100%; - width: 100%; - stroke: currentcolor; - fill: currentcolor; - } - `; - - protected static _fallback: HTMLTemplateResult = html` - - - - `; - - @property({attribute: false}) - svg: HTMLTemplateResult | null = null; - - private _name = ''; - set name(val: string) { - this._name = val; - if (val) this._fetchIcon(val); - } - - @property() - get name(): string { - return this._name; - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return this.svg ?? nothing; - } - - protected async _fetchIcon(name: string): Promise { - this._logger.logMethodArgs?.('_fetchIcon', {name}); - if (!name) return; - - this.svg = null; - - let _timer: ReturnType | null = setTimeout(() => { - if (name !== this._name) return; - _timer = null; - this.svg = (this.constructor as typeof AlwatrIcon)._fallback; - }, 3_000); - - try { - const svg = await preloadIcon(this.name); - if (name !== this._name) return; - if (_timer != null) clearTimeout(_timer); - this.svg = html`${unsafeSVG(svg)}`; - } - catch (err) { - this._logger.error('_fetchIcon', 'fetch_failed', err); - } - } -} diff --git a/ui/icon/src/preload.ts b/ui/icon/src/preload.ts deleted file mode 100644 index d10639c60..000000000 --- a/ui/icon/src/preload.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {fetch} from '@alwatr/fetch'; -import {contextConsumer} from '@alwatr/signal'; - -const urlPrefixContext = contextConsumer.bind('icon-url-prefix'); - -export async function preloadIcon(name: string): Promise { - const urlPrefix = urlPrefixContext.getValue() ?? 'https://cdn.jsdelivr.net/npm/@alwatr/icon@0/svg/'; - const url = urlPrefix + name + '.svg'; - - const response = await fetch({ - url, - removeDuplicate: 'auto', - cacheStrategy: 'cache_first', - }); - - if (response.ok !== true) { - throw new Error('fetch_failed'); - } - - return await response.text(); -} diff --git a/ui/icon/src/svg.ts b/ui/icon/src/svg.ts deleted file mode 100644 index 4c7b85719..000000000 --- a/ui/icon/src/svg.ts +++ /dev/null @@ -1,2 +0,0 @@ -const s = ''; -export default s; diff --git a/ui/icon/svg/accessibility-outline.svg b/ui/icon/svg/accessibility-outline.svg deleted file mode 100644 index 000c98492..000000000 --- a/ui/icon/svg/accessibility-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/accessibility-sharp.svg b/ui/icon/svg/accessibility-sharp.svg deleted file mode 100644 index 00cfeeb27..000000000 --- a/ui/icon/svg/accessibility-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/accessibility.svg b/ui/icon/svg/accessibility.svg deleted file mode 100644 index d3b00793b..000000000 --- a/ui/icon/svg/accessibility.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/add-circle-outline.svg b/ui/icon/svg/add-circle-outline.svg deleted file mode 100644 index 72fe36830..000000000 --- a/ui/icon/svg/add-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/add-circle-sharp.svg b/ui/icon/svg/add-circle-sharp.svg deleted file mode 100644 index ee69fb9af..000000000 --- a/ui/icon/svg/add-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/add-circle.svg b/ui/icon/svg/add-circle.svg deleted file mode 100644 index ebdd272fe..000000000 --- a/ui/icon/svg/add-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/add-outline.svg b/ui/icon/svg/add-outline.svg deleted file mode 100644 index 6cfc90efc..000000000 --- a/ui/icon/svg/add-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/add-sharp.svg b/ui/icon/svg/add-sharp.svg deleted file mode 100644 index 484df3be0..000000000 --- a/ui/icon/svg/add-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/add.svg b/ui/icon/svg/add.svg deleted file mode 100644 index 6cfc90efc..000000000 --- a/ui/icon/svg/add.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/airplane-outline.svg b/ui/icon/svg/airplane-outline.svg deleted file mode 100644 index 13ab25a19..000000000 --- a/ui/icon/svg/airplane-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/airplane-sharp.svg b/ui/icon/svg/airplane-sharp.svg deleted file mode 100644 index 1c315e7cf..000000000 --- a/ui/icon/svg/airplane-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/airplane.svg b/ui/icon/svg/airplane.svg deleted file mode 100644 index 71430c0a6..000000000 --- a/ui/icon/svg/airplane.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alarm-outline.svg b/ui/icon/svg/alarm-outline.svg deleted file mode 100644 index c3393856f..000000000 --- a/ui/icon/svg/alarm-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alarm-sharp.svg b/ui/icon/svg/alarm-sharp.svg deleted file mode 100644 index 88fcd9626..000000000 --- a/ui/icon/svg/alarm-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alarm.svg b/ui/icon/svg/alarm.svg deleted file mode 100644 index 914c91d9d..000000000 --- a/ui/icon/svg/alarm.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/albums-outline.svg b/ui/icon/svg/albums-outline.svg deleted file mode 100644 index 15c623d3c..000000000 --- a/ui/icon/svg/albums-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/albums-sharp.svg b/ui/icon/svg/albums-sharp.svg deleted file mode 100644 index 720140dfb..000000000 --- a/ui/icon/svg/albums-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/albums.svg b/ui/icon/svg/albums.svg deleted file mode 100644 index fb08af885..000000000 --- a/ui/icon/svg/albums.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alert-circle-outline.svg b/ui/icon/svg/alert-circle-outline.svg deleted file mode 100644 index 7d78f40a6..000000000 --- a/ui/icon/svg/alert-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alert-circle-sharp.svg b/ui/icon/svg/alert-circle-sharp.svg deleted file mode 100644 index 4fd441607..000000000 --- a/ui/icon/svg/alert-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/alert-circle.svg b/ui/icon/svg/alert-circle.svg deleted file mode 100644 index eb6a40336..000000000 --- a/ui/icon/svg/alert-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/alert-outline.svg b/ui/icon/svg/alert-outline.svg deleted file mode 100644 index a7f92e90a..000000000 --- a/ui/icon/svg/alert-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alert-sharp.svg b/ui/icon/svg/alert-sharp.svg deleted file mode 100644 index 8ff77ab43..000000000 --- a/ui/icon/svg/alert-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/alert.svg b/ui/icon/svg/alert.svg deleted file mode 100644 index a7f92e90a..000000000 --- a/ui/icon/svg/alert.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/american-football-outline.svg b/ui/icon/svg/american-football-outline.svg deleted file mode 100644 index b7523313e..000000000 --- a/ui/icon/svg/american-football-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/american-football-sharp.svg b/ui/icon/svg/american-football-sharp.svg deleted file mode 100644 index 7c6e7e386..000000000 --- a/ui/icon/svg/american-football-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/american-football.svg b/ui/icon/svg/american-football.svg deleted file mode 100644 index 57ea9a1ef..000000000 --- a/ui/icon/svg/american-football.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/analytics-outline.svg b/ui/icon/svg/analytics-outline.svg deleted file mode 100644 index 3822c6d05..000000000 --- a/ui/icon/svg/analytics-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/analytics-sharp.svg b/ui/icon/svg/analytics-sharp.svg deleted file mode 100644 index 556fc1c48..000000000 --- a/ui/icon/svg/analytics-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/analytics.svg b/ui/icon/svg/analytics.svg deleted file mode 100644 index acc72aa5c..000000000 --- a/ui/icon/svg/analytics.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/aperture-outline.svg b/ui/icon/svg/aperture-outline.svg deleted file mode 100644 index 0aa9f7601..000000000 --- a/ui/icon/svg/aperture-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/aperture-sharp.svg b/ui/icon/svg/aperture-sharp.svg deleted file mode 100644 index 1ec863905..000000000 --- a/ui/icon/svg/aperture-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/aperture.svg b/ui/icon/svg/aperture.svg deleted file mode 100644 index 656db161c..000000000 --- a/ui/icon/svg/aperture.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/apps-outline.svg b/ui/icon/svg/apps-outline.svg deleted file mode 100644 index 5dce387a2..000000000 --- a/ui/icon/svg/apps-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/apps-sharp.svg b/ui/icon/svg/apps-sharp.svg deleted file mode 100644 index 2dd184390..000000000 --- a/ui/icon/svg/apps-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/apps.svg b/ui/icon/svg/apps.svg deleted file mode 100644 index d391a2efa..000000000 --- a/ui/icon/svg/apps.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/archive-outline.svg b/ui/icon/svg/archive-outline.svg deleted file mode 100644 index e7d938e5c..000000000 --- a/ui/icon/svg/archive-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/archive-sharp.svg b/ui/icon/svg/archive-sharp.svg deleted file mode 100644 index 931ad2674..000000000 --- a/ui/icon/svg/archive-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/archive.svg b/ui/icon/svg/archive.svg deleted file mode 100644 index b67ecb3b9..000000000 --- a/ui/icon/svg/archive.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-back-circle-outline.svg b/ui/icon/svg/arrow-back-circle-outline.svg deleted file mode 100644 index 9fe7f9fcc..000000000 --- a/ui/icon/svg/arrow-back-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-back-circle-sharp.svg b/ui/icon/svg/arrow-back-circle-sharp.svg deleted file mode 100644 index 16fe1371a..000000000 --- a/ui/icon/svg/arrow-back-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-back-circle.svg b/ui/icon/svg/arrow-back-circle.svg deleted file mode 100644 index d80d23c11..000000000 --- a/ui/icon/svg/arrow-back-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-back-outline.svg b/ui/icon/svg/arrow-back-outline.svg deleted file mode 100644 index a5c1f4205..000000000 --- a/ui/icon/svg/arrow-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-back-sharp.svg b/ui/icon/svg/arrow-back-sharp.svg deleted file mode 100644 index 1f472d7d6..000000000 --- a/ui/icon/svg/arrow-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-back.svg b/ui/icon/svg/arrow-back.svg deleted file mode 100644 index a5c1f4205..000000000 --- a/ui/icon/svg/arrow-back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-down-circle-outline.svg b/ui/icon/svg/arrow-down-circle-outline.svg deleted file mode 100644 index 02360e9cf..000000000 --- a/ui/icon/svg/arrow-down-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-down-circle-sharp.svg b/ui/icon/svg/arrow-down-circle-sharp.svg deleted file mode 100644 index 851f25118..000000000 --- a/ui/icon/svg/arrow-down-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-down-circle.svg b/ui/icon/svg/arrow-down-circle.svg deleted file mode 100644 index bdbffc7d1..000000000 --- a/ui/icon/svg/arrow-down-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-down-outline.svg b/ui/icon/svg/arrow-down-outline.svg deleted file mode 100644 index 40bbe865d..000000000 --- a/ui/icon/svg/arrow-down-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-down-sharp.svg b/ui/icon/svg/arrow-down-sharp.svg deleted file mode 100644 index 0d3f20ddf..000000000 --- a/ui/icon/svg/arrow-down-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-down.svg b/ui/icon/svg/arrow-down.svg deleted file mode 100644 index 40bbe865d..000000000 --- a/ui/icon/svg/arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-forward-circle-outline.svg b/ui/icon/svg/arrow-forward-circle-outline.svg deleted file mode 100644 index dbb58fb90..000000000 --- a/ui/icon/svg/arrow-forward-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-forward-circle-sharp.svg b/ui/icon/svg/arrow-forward-circle-sharp.svg deleted file mode 100644 index 94f73581b..000000000 --- a/ui/icon/svg/arrow-forward-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-forward-circle.svg b/ui/icon/svg/arrow-forward-circle.svg deleted file mode 100644 index 0b5c7b459..000000000 --- a/ui/icon/svg/arrow-forward-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-forward-outline.svg b/ui/icon/svg/arrow-forward-outline.svg deleted file mode 100644 index e875be885..000000000 --- a/ui/icon/svg/arrow-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-forward-sharp.svg b/ui/icon/svg/arrow-forward-sharp.svg deleted file mode 100644 index 7b4e417fc..000000000 --- a/ui/icon/svg/arrow-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-forward.svg b/ui/icon/svg/arrow-forward.svg deleted file mode 100644 index e875be885..000000000 --- a/ui/icon/svg/arrow-forward.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-redo-circle-outline.svg b/ui/icon/svg/arrow-redo-circle-outline.svg deleted file mode 100644 index f38a6c6d5..000000000 --- a/ui/icon/svg/arrow-redo-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-redo-circle-sharp.svg b/ui/icon/svg/arrow-redo-circle-sharp.svg deleted file mode 100644 index eecf3717c..000000000 --- a/ui/icon/svg/arrow-redo-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-redo-circle.svg b/ui/icon/svg/arrow-redo-circle.svg deleted file mode 100644 index 765cf0a66..000000000 --- a/ui/icon/svg/arrow-redo-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-redo-outline.svg b/ui/icon/svg/arrow-redo-outline.svg deleted file mode 100644 index 8140b2114..000000000 --- a/ui/icon/svg/arrow-redo-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-redo-sharp.svg b/ui/icon/svg/arrow-redo-sharp.svg deleted file mode 100644 index 9ec083c59..000000000 --- a/ui/icon/svg/arrow-redo-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-redo.svg b/ui/icon/svg/arrow-redo.svg deleted file mode 100644 index e0e069564..000000000 --- a/ui/icon/svg/arrow-redo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-undo-circle-outline.svg b/ui/icon/svg/arrow-undo-circle-outline.svg deleted file mode 100644 index c7de466c4..000000000 --- a/ui/icon/svg/arrow-undo-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-undo-circle-sharp.svg b/ui/icon/svg/arrow-undo-circle-sharp.svg deleted file mode 100644 index f0a8aa29b..000000000 --- a/ui/icon/svg/arrow-undo-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-undo-circle.svg b/ui/icon/svg/arrow-undo-circle.svg deleted file mode 100644 index 71a65722b..000000000 --- a/ui/icon/svg/arrow-undo-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-undo-outline.svg b/ui/icon/svg/arrow-undo-outline.svg deleted file mode 100644 index 84e0a5d14..000000000 --- a/ui/icon/svg/arrow-undo-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-undo-sharp.svg b/ui/icon/svg/arrow-undo-sharp.svg deleted file mode 100644 index 3d3ec476a..000000000 --- a/ui/icon/svg/arrow-undo-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-undo.svg b/ui/icon/svg/arrow-undo.svg deleted file mode 100644 index 3d0f8bd57..000000000 --- a/ui/icon/svg/arrow-undo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-up-circle-outline.svg b/ui/icon/svg/arrow-up-circle-outline.svg deleted file mode 100644 index 03a534927..000000000 --- a/ui/icon/svg/arrow-up-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-up-circle-sharp.svg b/ui/icon/svg/arrow-up-circle-sharp.svg deleted file mode 100644 index 9bf470b3c..000000000 --- a/ui/icon/svg/arrow-up-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/arrow-up-circle.svg b/ui/icon/svg/arrow-up-circle.svg deleted file mode 100644 index 68f804d83..000000000 --- a/ui/icon/svg/arrow-up-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-up-outline.svg b/ui/icon/svg/arrow-up-outline.svg deleted file mode 100644 index d76c2ca9e..000000000 --- a/ui/icon/svg/arrow-up-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-up-sharp.svg b/ui/icon/svg/arrow-up-sharp.svg deleted file mode 100644 index be0b2fa9f..000000000 --- a/ui/icon/svg/arrow-up-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/arrow-up.svg b/ui/icon/svg/arrow-up.svg deleted file mode 100644 index d76c2ca9e..000000000 --- a/ui/icon/svg/arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/at-circle-outline.svg b/ui/icon/svg/at-circle-outline.svg deleted file mode 100644 index b6196c6f0..000000000 --- a/ui/icon/svg/at-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/at-circle-sharp.svg b/ui/icon/svg/at-circle-sharp.svg deleted file mode 100644 index 54a60ccbb..000000000 --- a/ui/icon/svg/at-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/at-circle.svg b/ui/icon/svg/at-circle.svg deleted file mode 100644 index 539fecaf8..000000000 --- a/ui/icon/svg/at-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/at-outline.svg b/ui/icon/svg/at-outline.svg deleted file mode 100644 index 3cfdb1989..000000000 --- a/ui/icon/svg/at-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/at-sharp.svg b/ui/icon/svg/at-sharp.svg deleted file mode 100644 index 65ee8707f..000000000 --- a/ui/icon/svg/at-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/at.svg b/ui/icon/svg/at.svg deleted file mode 100644 index 3cfdb1989..000000000 --- a/ui/icon/svg/at.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/attach-outline.svg b/ui/icon/svg/attach-outline.svg deleted file mode 100644 index 4d69365b4..000000000 --- a/ui/icon/svg/attach-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/attach-sharp.svg b/ui/icon/svg/attach-sharp.svg deleted file mode 100644 index 2c7546b24..000000000 --- a/ui/icon/svg/attach-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/attach.svg b/ui/icon/svg/attach.svg deleted file mode 100644 index 4d69365b4..000000000 --- a/ui/icon/svg/attach.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/backspace-outline.svg b/ui/icon/svg/backspace-outline.svg deleted file mode 100644 index d72dbe62d..000000000 --- a/ui/icon/svg/backspace-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/backspace-sharp.svg b/ui/icon/svg/backspace-sharp.svg deleted file mode 100644 index 0d6e36e97..000000000 --- a/ui/icon/svg/backspace-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/backspace.svg b/ui/icon/svg/backspace.svg deleted file mode 100644 index 1dfdd0a3f..000000000 --- a/ui/icon/svg/backspace.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-add-outline.svg b/ui/icon/svg/bag-add-outline.svg deleted file mode 100644 index b8c88ac38..000000000 --- a/ui/icon/svg/bag-add-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-add-sharp.svg b/ui/icon/svg/bag-add-sharp.svg deleted file mode 100644 index 26fc586f4..000000000 --- a/ui/icon/svg/bag-add-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-add.svg b/ui/icon/svg/bag-add.svg deleted file mode 100644 index 587d59ae3..000000000 --- a/ui/icon/svg/bag-add.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-check-outline.svg b/ui/icon/svg/bag-check-outline.svg deleted file mode 100644 index 15f2b0d1e..000000000 --- a/ui/icon/svg/bag-check-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-check-sharp.svg b/ui/icon/svg/bag-check-sharp.svg deleted file mode 100644 index f4b7bd69c..000000000 --- a/ui/icon/svg/bag-check-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-check.svg b/ui/icon/svg/bag-check.svg deleted file mode 100644 index 8813fe358..000000000 --- a/ui/icon/svg/bag-check.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-handle-outline.svg b/ui/icon/svg/bag-handle-outline.svg deleted file mode 100644 index f1c8494bc..000000000 --- a/ui/icon/svg/bag-handle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-handle-sharp.svg b/ui/icon/svg/bag-handle-sharp.svg deleted file mode 100644 index df5764b40..000000000 --- a/ui/icon/svg/bag-handle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-handle.svg b/ui/icon/svg/bag-handle.svg deleted file mode 100644 index 6896d7432..000000000 --- a/ui/icon/svg/bag-handle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-outline.svg b/ui/icon/svg/bag-outline.svg deleted file mode 100644 index fc59aaa9d..000000000 --- a/ui/icon/svg/bag-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-remove-outline.svg b/ui/icon/svg/bag-remove-outline.svg deleted file mode 100644 index 52e7a7b3e..000000000 --- a/ui/icon/svg/bag-remove-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-remove-sharp.svg b/ui/icon/svg/bag-remove-sharp.svg deleted file mode 100644 index f017cb70c..000000000 --- a/ui/icon/svg/bag-remove-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-remove.svg b/ui/icon/svg/bag-remove.svg deleted file mode 100644 index edfc48d74..000000000 --- a/ui/icon/svg/bag-remove.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag-sharp.svg b/ui/icon/svg/bag-sharp.svg deleted file mode 100644 index a22951fcd..000000000 --- a/ui/icon/svg/bag-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bag.svg b/ui/icon/svg/bag.svg deleted file mode 100644 index be7749bba..000000000 --- a/ui/icon/svg/bag.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/balloon-outline.svg b/ui/icon/svg/balloon-outline.svg deleted file mode 100644 index 72a1ba252..000000000 --- a/ui/icon/svg/balloon-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/balloon-sharp.svg b/ui/icon/svg/balloon-sharp.svg deleted file mode 100644 index 1bfc81c54..000000000 --- a/ui/icon/svg/balloon-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/balloon.svg b/ui/icon/svg/balloon.svg deleted file mode 100644 index 4dc600710..000000000 --- a/ui/icon/svg/balloon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ban-outline.svg b/ui/icon/svg/ban-outline.svg deleted file mode 100644 index e5746945e..000000000 --- a/ui/icon/svg/ban-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ban-sharp.svg b/ui/icon/svg/ban-sharp.svg deleted file mode 100644 index e73be9c3b..000000000 --- a/ui/icon/svg/ban-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ban.svg b/ui/icon/svg/ban.svg deleted file mode 100644 index f4992feca..000000000 --- a/ui/icon/svg/ban.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bandage-outline.svg b/ui/icon/svg/bandage-outline.svg deleted file mode 100644 index 4477c39d6..000000000 --- a/ui/icon/svg/bandage-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bandage-sharp.svg b/ui/icon/svg/bandage-sharp.svg deleted file mode 100644 index 7fa3e6fd5..000000000 --- a/ui/icon/svg/bandage-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bandage.svg b/ui/icon/svg/bandage.svg deleted file mode 100644 index 5a095368d..000000000 --- a/ui/icon/svg/bandage.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bar-chart-outline.svg b/ui/icon/svg/bar-chart-outline.svg deleted file mode 100644 index 2223ba53b..000000000 --- a/ui/icon/svg/bar-chart-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bar-chart-sharp.svg b/ui/icon/svg/bar-chart-sharp.svg deleted file mode 100644 index 6b4c5f28b..000000000 --- a/ui/icon/svg/bar-chart-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/bar-chart.svg b/ui/icon/svg/bar-chart.svg deleted file mode 100644 index 36ece09be..000000000 --- a/ui/icon/svg/bar-chart.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/barbell-outline.svg b/ui/icon/svg/barbell-outline.svg deleted file mode 100644 index 160427fbb..000000000 --- a/ui/icon/svg/barbell-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/barbell-sharp.svg b/ui/icon/svg/barbell-sharp.svg deleted file mode 100644 index 85f331d23..000000000 --- a/ui/icon/svg/barbell-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/barbell.svg b/ui/icon/svg/barbell.svg deleted file mode 100644 index 6d6924cdd..000000000 --- a/ui/icon/svg/barbell.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/barcode-outline.svg b/ui/icon/svg/barcode-outline.svg deleted file mode 100644 index df1ae04cb..000000000 --- a/ui/icon/svg/barcode-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/barcode-sharp.svg b/ui/icon/svg/barcode-sharp.svg deleted file mode 100644 index 6ffb130f4..000000000 --- a/ui/icon/svg/barcode-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/barcode.svg b/ui/icon/svg/barcode.svg deleted file mode 100644 index 6f3abc6cb..000000000 --- a/ui/icon/svg/barcode.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/baseball-outline.svg b/ui/icon/svg/baseball-outline.svg deleted file mode 100644 index 7957d6929..000000000 --- a/ui/icon/svg/baseball-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/baseball-sharp.svg b/ui/icon/svg/baseball-sharp.svg deleted file mode 100644 index e872d240d..000000000 --- a/ui/icon/svg/baseball-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/baseball.svg b/ui/icon/svg/baseball.svg deleted file mode 100644 index 75fe9b44b..000000000 --- a/ui/icon/svg/baseball.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/basket-outline.svg b/ui/icon/svg/basket-outline.svg deleted file mode 100644 index ba1a04ebd..000000000 --- a/ui/icon/svg/basket-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/basket-sharp.svg b/ui/icon/svg/basket-sharp.svg deleted file mode 100644 index 5e9620b5a..000000000 --- a/ui/icon/svg/basket-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/basket.svg b/ui/icon/svg/basket.svg deleted file mode 100644 index 641f434a5..000000000 --- a/ui/icon/svg/basket.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/basketball-outline.svg b/ui/icon/svg/basketball-outline.svg deleted file mode 100644 index ae687c987..000000000 --- a/ui/icon/svg/basketball-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/basketball-sharp.svg b/ui/icon/svg/basketball-sharp.svg deleted file mode 100644 index c5c537474..000000000 --- a/ui/icon/svg/basketball-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/basketball.svg b/ui/icon/svg/basketball.svg deleted file mode 100644 index c5c537474..000000000 --- a/ui/icon/svg/basketball.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-charging-outline.svg b/ui/icon/svg/battery-charging-outline.svg deleted file mode 100644 index e95ea41b1..000000000 --- a/ui/icon/svg/battery-charging-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-charging-sharp.svg b/ui/icon/svg/battery-charging-sharp.svg deleted file mode 100644 index c548f2f10..000000000 --- a/ui/icon/svg/battery-charging-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-charging.svg b/ui/icon/svg/battery-charging.svg deleted file mode 100644 index e95ea41b1..000000000 --- a/ui/icon/svg/battery-charging.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-dead-outline.svg b/ui/icon/svg/battery-dead-outline.svg deleted file mode 100644 index 7e0eda7e6..000000000 --- a/ui/icon/svg/battery-dead-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-dead-sharp.svg b/ui/icon/svg/battery-dead-sharp.svg deleted file mode 100644 index fe5023063..000000000 --- a/ui/icon/svg/battery-dead-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-dead.svg b/ui/icon/svg/battery-dead.svg deleted file mode 100644 index 7e0eda7e6..000000000 --- a/ui/icon/svg/battery-dead.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-full-outline.svg b/ui/icon/svg/battery-full-outline.svg deleted file mode 100644 index d9297d743..000000000 --- a/ui/icon/svg/battery-full-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-full-sharp.svg b/ui/icon/svg/battery-full-sharp.svg deleted file mode 100644 index af00a91b5..000000000 --- a/ui/icon/svg/battery-full-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/battery-full.svg b/ui/icon/svg/battery-full.svg deleted file mode 100644 index d9297d743..000000000 --- a/ui/icon/svg/battery-full.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-half-outline.svg b/ui/icon/svg/battery-half-outline.svg deleted file mode 100644 index 47850be74..000000000 --- a/ui/icon/svg/battery-half-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/battery-half-sharp.svg b/ui/icon/svg/battery-half-sharp.svg deleted file mode 100644 index 0bb58b742..000000000 --- a/ui/icon/svg/battery-half-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/battery-half.svg b/ui/icon/svg/battery-half.svg deleted file mode 100644 index 47850be74..000000000 --- a/ui/icon/svg/battery-half.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/beaker-outline.svg b/ui/icon/svg/beaker-outline.svg deleted file mode 100644 index dd987fed1..000000000 --- a/ui/icon/svg/beaker-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/beaker-sharp.svg b/ui/icon/svg/beaker-sharp.svg deleted file mode 100644 index 479263a41..000000000 --- a/ui/icon/svg/beaker-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/beaker.svg b/ui/icon/svg/beaker.svg deleted file mode 100644 index 6bac779be..000000000 --- a/ui/icon/svg/beaker.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bed-outline.svg b/ui/icon/svg/bed-outline.svg deleted file mode 100644 index 32f490a0e..000000000 --- a/ui/icon/svg/bed-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bed-sharp.svg b/ui/icon/svg/bed-sharp.svg deleted file mode 100644 index 54aa1e356..000000000 --- a/ui/icon/svg/bed-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bed.svg b/ui/icon/svg/bed.svg deleted file mode 100644 index 9445d29fe..000000000 --- a/ui/icon/svg/bed.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/beer-outline.svg b/ui/icon/svg/beer-outline.svg deleted file mode 100644 index fb3bcea25..000000000 --- a/ui/icon/svg/beer-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/beer-sharp.svg b/ui/icon/svg/beer-sharp.svg deleted file mode 100644 index e3bb98bae..000000000 --- a/ui/icon/svg/beer-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/beer.svg b/ui/icon/svg/beer.svg deleted file mode 100644 index c322f25cc..000000000 --- a/ui/icon/svg/beer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bicycle-outline.svg b/ui/icon/svg/bicycle-outline.svg deleted file mode 100644 index 15cbc7547..000000000 --- a/ui/icon/svg/bicycle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bicycle-sharp.svg b/ui/icon/svg/bicycle-sharp.svg deleted file mode 100644 index b2401ca2b..000000000 --- a/ui/icon/svg/bicycle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bicycle.svg b/ui/icon/svg/bicycle.svg deleted file mode 100644 index e559f177a..000000000 --- a/ui/icon/svg/bicycle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bluetooth-outline.svg b/ui/icon/svg/bluetooth-outline.svg deleted file mode 100644 index d6890aa14..000000000 --- a/ui/icon/svg/bluetooth-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bluetooth-sharp.svg b/ui/icon/svg/bluetooth-sharp.svg deleted file mode 100644 index 9016e68c4..000000000 --- a/ui/icon/svg/bluetooth-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bluetooth.svg b/ui/icon/svg/bluetooth.svg deleted file mode 100644 index 42fab18ad..000000000 --- a/ui/icon/svg/bluetooth.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/boat-outline.svg b/ui/icon/svg/boat-outline.svg deleted file mode 100644 index 2afdf11a0..000000000 --- a/ui/icon/svg/boat-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/boat-sharp.svg b/ui/icon/svg/boat-sharp.svg deleted file mode 100644 index 2fac68d81..000000000 --- a/ui/icon/svg/boat-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/boat.svg b/ui/icon/svg/boat.svg deleted file mode 100644 index b208a70c0..000000000 --- a/ui/icon/svg/boat.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/body-outline.svg b/ui/icon/svg/body-outline.svg deleted file mode 100644 index 6b6c533d9..000000000 --- a/ui/icon/svg/body-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/body-sharp.svg b/ui/icon/svg/body-sharp.svg deleted file mode 100644 index 4f5076e87..000000000 --- a/ui/icon/svg/body-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/body.svg b/ui/icon/svg/body.svg deleted file mode 100644 index 4737f0979..000000000 --- a/ui/icon/svg/body.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bonfire-outline.svg b/ui/icon/svg/bonfire-outline.svg deleted file mode 100644 index cbc299908..000000000 --- a/ui/icon/svg/bonfire-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bonfire-sharp.svg b/ui/icon/svg/bonfire-sharp.svg deleted file mode 100644 index c1de420fe..000000000 --- a/ui/icon/svg/bonfire-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bonfire.svg b/ui/icon/svg/bonfire.svg deleted file mode 100644 index 8417e158a..000000000 --- a/ui/icon/svg/bonfire.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/book-outline.svg b/ui/icon/svg/book-outline.svg deleted file mode 100644 index 6f2a35a04..000000000 --- a/ui/icon/svg/book-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/book-sharp.svg b/ui/icon/svg/book-sharp.svg deleted file mode 100644 index 8198ddf30..000000000 --- a/ui/icon/svg/book-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/book.svg b/ui/icon/svg/book.svg deleted file mode 100644 index 0c9932855..000000000 --- a/ui/icon/svg/book.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bookmark-outline.svg b/ui/icon/svg/bookmark-outline.svg deleted file mode 100644 index b9e876cef..000000000 --- a/ui/icon/svg/bookmark-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bookmark-sharp.svg b/ui/icon/svg/bookmark-sharp.svg deleted file mode 100644 index 68a0b1811..000000000 --- a/ui/icon/svg/bookmark-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/bookmark.svg b/ui/icon/svg/bookmark.svg deleted file mode 100644 index a41fc95bd..000000000 --- a/ui/icon/svg/bookmark.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bookmarks-outline.svg b/ui/icon/svg/bookmarks-outline.svg deleted file mode 100644 index dc236ce32..000000000 --- a/ui/icon/svg/bookmarks-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bookmarks-sharp.svg b/ui/icon/svg/bookmarks-sharp.svg deleted file mode 100644 index 32ce6fe1d..000000000 --- a/ui/icon/svg/bookmarks-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/bookmarks.svg b/ui/icon/svg/bookmarks.svg deleted file mode 100644 index 9927f7202..000000000 --- a/ui/icon/svg/bookmarks.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bowling-ball-outline.svg b/ui/icon/svg/bowling-ball-outline.svg deleted file mode 100644 index c40ca4b48..000000000 --- a/ui/icon/svg/bowling-ball-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bowling-ball-sharp.svg b/ui/icon/svg/bowling-ball-sharp.svg deleted file mode 100644 index 479630895..000000000 --- a/ui/icon/svg/bowling-ball-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bowling-ball.svg b/ui/icon/svg/bowling-ball.svg deleted file mode 100644 index e06605db1..000000000 --- a/ui/icon/svg/bowling-ball.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/briefcase-outline.svg b/ui/icon/svg/briefcase-outline.svg deleted file mode 100644 index 27d838d4a..000000000 --- a/ui/icon/svg/briefcase-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/briefcase-sharp.svg b/ui/icon/svg/briefcase-sharp.svg deleted file mode 100644 index ec13ae804..000000000 --- a/ui/icon/svg/briefcase-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/briefcase.svg b/ui/icon/svg/briefcase.svg deleted file mode 100644 index e298b4d2a..000000000 --- a/ui/icon/svg/briefcase.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/browsers-outline.svg b/ui/icon/svg/browsers-outline.svg deleted file mode 100644 index e3061108b..000000000 --- a/ui/icon/svg/browsers-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/browsers-sharp.svg b/ui/icon/svg/browsers-sharp.svg deleted file mode 100644 index 8d950e7ba..000000000 --- a/ui/icon/svg/browsers-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/browsers.svg b/ui/icon/svg/browsers.svg deleted file mode 100644 index 706bbfceb..000000000 --- a/ui/icon/svg/browsers.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/brush-outline.svg b/ui/icon/svg/brush-outline.svg deleted file mode 100644 index f0a28b20d..000000000 --- a/ui/icon/svg/brush-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/brush-sharp.svg b/ui/icon/svg/brush-sharp.svg deleted file mode 100644 index c8501e0c3..000000000 --- a/ui/icon/svg/brush-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/brush.svg b/ui/icon/svg/brush.svg deleted file mode 100644 index 4608e14b1..000000000 --- a/ui/icon/svg/brush.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/bug-outline.svg b/ui/icon/svg/bug-outline.svg deleted file mode 100644 index 0aa356d50..000000000 --- a/ui/icon/svg/bug-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bug-sharp.svg b/ui/icon/svg/bug-sharp.svg deleted file mode 100644 index c44d04191..000000000 --- a/ui/icon/svg/bug-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bug.svg b/ui/icon/svg/bug.svg deleted file mode 100644 index a95151707..000000000 --- a/ui/icon/svg/bug.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/build-outline.svg b/ui/icon/svg/build-outline.svg deleted file mode 100644 index ce6fd14d1..000000000 --- a/ui/icon/svg/build-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/build-sharp.svg b/ui/icon/svg/build-sharp.svg deleted file mode 100644 index a21654fab..000000000 --- a/ui/icon/svg/build-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/build.svg b/ui/icon/svg/build.svg deleted file mode 100644 index 4a75c400b..000000000 --- a/ui/icon/svg/build.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bulb-outline.svg b/ui/icon/svg/bulb-outline.svg deleted file mode 100644 index cfcb990b8..000000000 --- a/ui/icon/svg/bulb-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bulb-sharp.svg b/ui/icon/svg/bulb-sharp.svg deleted file mode 100644 index 7e13024d0..000000000 --- a/ui/icon/svg/bulb-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bulb.svg b/ui/icon/svg/bulb.svg deleted file mode 100644 index d23e36bab..000000000 --- a/ui/icon/svg/bulb.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bus-outline.svg b/ui/icon/svg/bus-outline.svg deleted file mode 100644 index 8166a6436..000000000 --- a/ui/icon/svg/bus-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bus-sharp.svg b/ui/icon/svg/bus-sharp.svg deleted file mode 100644 index 7dc702745..000000000 --- a/ui/icon/svg/bus-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/bus.svg b/ui/icon/svg/bus.svg deleted file mode 100644 index a12c564dd..000000000 --- a/ui/icon/svg/bus.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/business-outline.svg b/ui/icon/svg/business-outline.svg deleted file mode 100644 index e3f4cd3f3..000000000 --- a/ui/icon/svg/business-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/business-sharp.svg b/ui/icon/svg/business-sharp.svg deleted file mode 100644 index cbf9c84fd..000000000 --- a/ui/icon/svg/business-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/business.svg b/ui/icon/svg/business.svg deleted file mode 100644 index 1dd16971d..000000000 --- a/ui/icon/svg/business.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cafe-outline.svg b/ui/icon/svg/cafe-outline.svg deleted file mode 100644 index fee2a95e7..000000000 --- a/ui/icon/svg/cafe-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cafe-sharp.svg b/ui/icon/svg/cafe-sharp.svg deleted file mode 100644 index dd035178d..000000000 --- a/ui/icon/svg/cafe-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cafe.svg b/ui/icon/svg/cafe.svg deleted file mode 100644 index 7f6fbba0b..000000000 --- a/ui/icon/svg/cafe.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calculator-outline.svg b/ui/icon/svg/calculator-outline.svg deleted file mode 100644 index 495175279..000000000 --- a/ui/icon/svg/calculator-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calculator-sharp.svg b/ui/icon/svg/calculator-sharp.svg deleted file mode 100644 index 43211db14..000000000 --- a/ui/icon/svg/calculator-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/calculator.svg b/ui/icon/svg/calculator.svg deleted file mode 100644 index fa2caab0d..000000000 --- a/ui/icon/svg/calculator.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-clear-outline.svg b/ui/icon/svg/calendar-clear-outline.svg deleted file mode 100644 index 32d085450..000000000 --- a/ui/icon/svg/calendar-clear-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-clear-sharp.svg b/ui/icon/svg/calendar-clear-sharp.svg deleted file mode 100644 index 62ecf74b7..000000000 --- a/ui/icon/svg/calendar-clear-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-clear.svg b/ui/icon/svg/calendar-clear.svg deleted file mode 100644 index 55a0de2cb..000000000 --- a/ui/icon/svg/calendar-clear.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-number-outline.svg b/ui/icon/svg/calendar-number-outline.svg deleted file mode 100644 index 8ef386c28..000000000 --- a/ui/icon/svg/calendar-number-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-number-sharp.svg b/ui/icon/svg/calendar-number-sharp.svg deleted file mode 100644 index 0a0ad7de0..000000000 --- a/ui/icon/svg/calendar-number-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-number.svg b/ui/icon/svg/calendar-number.svg deleted file mode 100644 index 4e797c0ce..000000000 --- a/ui/icon/svg/calendar-number.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-outline.svg b/ui/icon/svg/calendar-outline.svg deleted file mode 100644 index 6d3ddfe94..000000000 --- a/ui/icon/svg/calendar-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar-sharp.svg b/ui/icon/svg/calendar-sharp.svg deleted file mode 100644 index 444b212e6..000000000 --- a/ui/icon/svg/calendar-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/calendar.svg b/ui/icon/svg/calendar.svg deleted file mode 100644 index b8242a5b6..000000000 --- a/ui/icon/svg/calendar.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/call-outline.svg b/ui/icon/svg/call-outline.svg deleted file mode 100644 index b6ed09d70..000000000 --- a/ui/icon/svg/call-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/call-sharp.svg b/ui/icon/svg/call-sharp.svg deleted file mode 100644 index 2b100bf9f..000000000 --- a/ui/icon/svg/call-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/call.svg b/ui/icon/svg/call.svg deleted file mode 100644 index 6bdf8298f..000000000 --- a/ui/icon/svg/call.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/camera-outline.svg b/ui/icon/svg/camera-outline.svg deleted file mode 100644 index 1fc46c537..000000000 --- a/ui/icon/svg/camera-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/camera-reverse-outline.svg b/ui/icon/svg/camera-reverse-outline.svg deleted file mode 100644 index 9adfbdf49..000000000 --- a/ui/icon/svg/camera-reverse-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/camera-reverse-sharp.svg b/ui/icon/svg/camera-reverse-sharp.svg deleted file mode 100644 index 2c33867cc..000000000 --- a/ui/icon/svg/camera-reverse-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/camera-reverse.svg b/ui/icon/svg/camera-reverse.svg deleted file mode 100644 index e66ac3866..000000000 --- a/ui/icon/svg/camera-reverse.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/camera-sharp.svg b/ui/icon/svg/camera-sharp.svg deleted file mode 100644 index dabdeba7b..000000000 --- a/ui/icon/svg/camera-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/camera.svg b/ui/icon/svg/camera.svg deleted file mode 100644 index 7d53dbe33..000000000 --- a/ui/icon/svg/camera.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/car-outline.svg b/ui/icon/svg/car-outline.svg deleted file mode 100644 index b18caf6d9..000000000 --- a/ui/icon/svg/car-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/car-sharp.svg b/ui/icon/svg/car-sharp.svg deleted file mode 100644 index fcc70d84a..000000000 --- a/ui/icon/svg/car-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/car-sport-outline.svg b/ui/icon/svg/car-sport-outline.svg deleted file mode 100644 index 8156f0b37..000000000 --- a/ui/icon/svg/car-sport-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/car-sport-sharp.svg b/ui/icon/svg/car-sport-sharp.svg deleted file mode 100644 index d17d84b78..000000000 --- a/ui/icon/svg/car-sport-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/car-sport.svg b/ui/icon/svg/car-sport.svg deleted file mode 100644 index 59a24d793..000000000 --- a/ui/icon/svg/car-sport.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/car.svg b/ui/icon/svg/car.svg deleted file mode 100644 index 37e0134c2..000000000 --- a/ui/icon/svg/car.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/card-outline.svg b/ui/icon/svg/card-outline.svg deleted file mode 100644 index d1ab08f76..000000000 --- a/ui/icon/svg/card-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/card-sharp.svg b/ui/icon/svg/card-sharp.svg deleted file mode 100644 index 4c3590325..000000000 --- a/ui/icon/svg/card-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/card.svg b/ui/icon/svg/card.svg deleted file mode 100644 index c73ed3f08..000000000 --- a/ui/icon/svg/card.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/caret-back-circle-outline.svg b/ui/icon/svg/caret-back-circle-outline.svg deleted file mode 100644 index 74e749632..000000000 --- a/ui/icon/svg/caret-back-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/caret-back-circle-sharp.svg b/ui/icon/svg/caret-back-circle-sharp.svg deleted file mode 100644 index cc7865478..000000000 --- a/ui/icon/svg/caret-back-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-back-circle.svg b/ui/icon/svg/caret-back-circle.svg deleted file mode 100644 index 652e3ec9b..000000000 --- a/ui/icon/svg/caret-back-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-back-outline.svg b/ui/icon/svg/caret-back-outline.svg deleted file mode 100644 index b116d89b1..000000000 --- a/ui/icon/svg/caret-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-back-sharp.svg b/ui/icon/svg/caret-back-sharp.svg deleted file mode 100644 index 3712c3a75..000000000 --- a/ui/icon/svg/caret-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-back.svg b/ui/icon/svg/caret-back.svg deleted file mode 100644 index b116d89b1..000000000 --- a/ui/icon/svg/caret-back.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-down-circle-outline.svg b/ui/icon/svg/caret-down-circle-outline.svg deleted file mode 100644 index 90e217836..000000000 --- a/ui/icon/svg/caret-down-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/caret-down-circle-sharp.svg b/ui/icon/svg/caret-down-circle-sharp.svg deleted file mode 100644 index 8abfc8ff9..000000000 --- a/ui/icon/svg/caret-down-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-down-circle.svg b/ui/icon/svg/caret-down-circle.svg deleted file mode 100644 index 2e8a7d0e6..000000000 --- a/ui/icon/svg/caret-down-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-down-outline.svg b/ui/icon/svg/caret-down-outline.svg deleted file mode 100644 index d6e7f2c0d..000000000 --- a/ui/icon/svg/caret-down-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-down-sharp.svg b/ui/icon/svg/caret-down-sharp.svg deleted file mode 100644 index 463ff638d..000000000 --- a/ui/icon/svg/caret-down-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-down.svg b/ui/icon/svg/caret-down.svg deleted file mode 100644 index d6e7f2c0d..000000000 --- a/ui/icon/svg/caret-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-forward-circle-outline.svg b/ui/icon/svg/caret-forward-circle-outline.svg deleted file mode 100644 index 481c0c21c..000000000 --- a/ui/icon/svg/caret-forward-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/caret-forward-circle-sharp.svg b/ui/icon/svg/caret-forward-circle-sharp.svg deleted file mode 100644 index 95c7bc9e6..000000000 --- a/ui/icon/svg/caret-forward-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-forward-circle.svg b/ui/icon/svg/caret-forward-circle.svg deleted file mode 100644 index 3919ca47d..000000000 --- a/ui/icon/svg/caret-forward-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-forward-outline.svg b/ui/icon/svg/caret-forward-outline.svg deleted file mode 100644 index b38e8b3db..000000000 --- a/ui/icon/svg/caret-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-forward-sharp.svg b/ui/icon/svg/caret-forward-sharp.svg deleted file mode 100644 index 9711a20f9..000000000 --- a/ui/icon/svg/caret-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-forward.svg b/ui/icon/svg/caret-forward.svg deleted file mode 100644 index b38e8b3db..000000000 --- a/ui/icon/svg/caret-forward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-up-circle-outline.svg b/ui/icon/svg/caret-up-circle-outline.svg deleted file mode 100644 index f3416c57f..000000000 --- a/ui/icon/svg/caret-up-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/caret-up-circle-sharp.svg b/ui/icon/svg/caret-up-circle-sharp.svg deleted file mode 100644 index 6cbae8295..000000000 --- a/ui/icon/svg/caret-up-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-up-circle.svg b/ui/icon/svg/caret-up-circle.svg deleted file mode 100644 index 66aac7374..000000000 --- a/ui/icon/svg/caret-up-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-up-outline.svg b/ui/icon/svg/caret-up-outline.svg deleted file mode 100644 index 5a00434ce..000000000 --- a/ui/icon/svg/caret-up-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-up-sharp.svg b/ui/icon/svg/caret-up-sharp.svg deleted file mode 100644 index 195b74f84..000000000 --- a/ui/icon/svg/caret-up-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/caret-up.svg b/ui/icon/svg/caret-up.svg deleted file mode 100644 index 5a00434ce..000000000 --- a/ui/icon/svg/caret-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cart-outline.svg b/ui/icon/svg/cart-outline.svg deleted file mode 100644 index c20e49f55..000000000 --- a/ui/icon/svg/cart-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cart-sharp.svg b/ui/icon/svg/cart-sharp.svg deleted file mode 100644 index a6df4966b..000000000 --- a/ui/icon/svg/cart-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cart.svg b/ui/icon/svg/cart.svg deleted file mode 100644 index 3841553ad..000000000 --- a/ui/icon/svg/cart.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cash-outline.svg b/ui/icon/svg/cash-outline.svg deleted file mode 100644 index a757d26f5..000000000 --- a/ui/icon/svg/cash-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cash-sharp.svg b/ui/icon/svg/cash-sharp.svg deleted file mode 100644 index 1b296ee16..000000000 --- a/ui/icon/svg/cash-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cash.svg b/ui/icon/svg/cash.svg deleted file mode 100644 index 760cddc08..000000000 --- a/ui/icon/svg/cash.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cellular-outline.svg b/ui/icon/svg/cellular-outline.svg deleted file mode 100644 index 9dbd5432e..000000000 --- a/ui/icon/svg/cellular-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cellular-sharp.svg b/ui/icon/svg/cellular-sharp.svg deleted file mode 100644 index 59307af35..000000000 --- a/ui/icon/svg/cellular-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cellular.svg b/ui/icon/svg/cellular.svg deleted file mode 100644 index d95f3e78b..000000000 --- a/ui/icon/svg/cellular.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbox-ellipses-outline.svg b/ui/icon/svg/chatbox-ellipses-outline.svg deleted file mode 100644 index 027424138..000000000 --- a/ui/icon/svg/chatbox-ellipses-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbox-ellipses-sharp.svg b/ui/icon/svg/chatbox-ellipses-sharp.svg deleted file mode 100644 index 6fd9f7fef..000000000 --- a/ui/icon/svg/chatbox-ellipses-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbox-ellipses.svg b/ui/icon/svg/chatbox-ellipses.svg deleted file mode 100644 index b24068749..000000000 --- a/ui/icon/svg/chatbox-ellipses.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbox-outline.svg b/ui/icon/svg/chatbox-outline.svg deleted file mode 100644 index a67cfc172..000000000 --- a/ui/icon/svg/chatbox-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbox-sharp.svg b/ui/icon/svg/chatbox-sharp.svg deleted file mode 100644 index 317784670..000000000 --- a/ui/icon/svg/chatbox-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chatbox.svg b/ui/icon/svg/chatbox.svg deleted file mode 100644 index 651d61e17..000000000 --- a/ui/icon/svg/chatbox.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubble-ellipses-outline.svg b/ui/icon/svg/chatbubble-ellipses-outline.svg deleted file mode 100644 index 8511f0697..000000000 --- a/ui/icon/svg/chatbubble-ellipses-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubble-ellipses-sharp.svg b/ui/icon/svg/chatbubble-ellipses-sharp.svg deleted file mode 100644 index 0dbcee00a..000000000 --- a/ui/icon/svg/chatbubble-ellipses-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubble-ellipses.svg b/ui/icon/svg/chatbubble-ellipses.svg deleted file mode 100644 index be6397a00..000000000 --- a/ui/icon/svg/chatbubble-ellipses.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubble-outline.svg b/ui/icon/svg/chatbubble-outline.svg deleted file mode 100644 index a2b4d5f61..000000000 --- a/ui/icon/svg/chatbubble-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubble-sharp.svg b/ui/icon/svg/chatbubble-sharp.svg deleted file mode 100644 index 95594085e..000000000 --- a/ui/icon/svg/chatbubble-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubble.svg b/ui/icon/svg/chatbubble.svg deleted file mode 100644 index 91c41f6bf..000000000 --- a/ui/icon/svg/chatbubble.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chatbubbles-outline.svg b/ui/icon/svg/chatbubbles-outline.svg deleted file mode 100644 index 0a85562c3..000000000 --- a/ui/icon/svg/chatbubbles-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubbles-sharp.svg b/ui/icon/svg/chatbubbles-sharp.svg deleted file mode 100644 index e79adafa0..000000000 --- a/ui/icon/svg/chatbubbles-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chatbubbles.svg b/ui/icon/svg/chatbubbles.svg deleted file mode 100644 index f700388ac..000000000 --- a/ui/icon/svg/chatbubbles.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkbox-outline.svg b/ui/icon/svg/checkbox-outline.svg deleted file mode 100644 index 44d813ca0..000000000 --- a/ui/icon/svg/checkbox-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkbox-sharp.svg b/ui/icon/svg/checkbox-sharp.svg deleted file mode 100644 index 1cae985b2..000000000 --- a/ui/icon/svg/checkbox-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/checkbox.svg b/ui/icon/svg/checkbox.svg deleted file mode 100644 index 6ba57f561..000000000 --- a/ui/icon/svg/checkbox.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-circle-outline.svg b/ui/icon/svg/checkmark-circle-outline.svg deleted file mode 100644 index e735473f0..000000000 --- a/ui/icon/svg/checkmark-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-circle-sharp.svg b/ui/icon/svg/checkmark-circle-sharp.svg deleted file mode 100644 index 978d61200..000000000 --- a/ui/icon/svg/checkmark-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/checkmark-circle.svg b/ui/icon/svg/checkmark-circle.svg deleted file mode 100644 index f2a05ace8..000000000 --- a/ui/icon/svg/checkmark-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/checkmark-done-circle-outline.svg b/ui/icon/svg/checkmark-done-circle-outline.svg deleted file mode 100644 index 57a8f4e86..000000000 --- a/ui/icon/svg/checkmark-done-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-done-circle-sharp.svg b/ui/icon/svg/checkmark-done-circle-sharp.svg deleted file mode 100644 index 38bd50d57..000000000 --- a/ui/icon/svg/checkmark-done-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/checkmark-done-circle.svg b/ui/icon/svg/checkmark-done-circle.svg deleted file mode 100644 index e5f48f878..000000000 --- a/ui/icon/svg/checkmark-done-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-done-outline.svg b/ui/icon/svg/checkmark-done-outline.svg deleted file mode 100644 index 3f1284529..000000000 --- a/ui/icon/svg/checkmark-done-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-done-sharp.svg b/ui/icon/svg/checkmark-done-sharp.svg deleted file mode 100644 index ce3b32e2f..000000000 --- a/ui/icon/svg/checkmark-done-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-done.svg b/ui/icon/svg/checkmark-done.svg deleted file mode 100644 index 3f1284529..000000000 --- a/ui/icon/svg/checkmark-done.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-outline.svg b/ui/icon/svg/checkmark-outline.svg deleted file mode 100644 index e98d65af4..000000000 --- a/ui/icon/svg/checkmark-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark-sharp.svg b/ui/icon/svg/checkmark-sharp.svg deleted file mode 100644 index fb43858e1..000000000 --- a/ui/icon/svg/checkmark-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/checkmark.svg b/ui/icon/svg/checkmark.svg deleted file mode 100644 index e98d65af4..000000000 --- a/ui/icon/svg/checkmark.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-back-circle-outline.svg b/ui/icon/svg/chevron-back-circle-outline.svg deleted file mode 100644 index ebfcfb121..000000000 --- a/ui/icon/svg/chevron-back-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-back-circle-sharp.svg b/ui/icon/svg/chevron-back-circle-sharp.svg deleted file mode 100644 index ac43791e0..000000000 --- a/ui/icon/svg/chevron-back-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-back-circle.svg b/ui/icon/svg/chevron-back-circle.svg deleted file mode 100644 index 49e3c7ef2..000000000 --- a/ui/icon/svg/chevron-back-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-back-outline.svg b/ui/icon/svg/chevron-back-outline.svg deleted file mode 100644 index 93df0bd10..000000000 --- a/ui/icon/svg/chevron-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-back-sharp.svg b/ui/icon/svg/chevron-back-sharp.svg deleted file mode 100644 index 00cfe76c1..000000000 --- a/ui/icon/svg/chevron-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-back.svg b/ui/icon/svg/chevron-back.svg deleted file mode 100644 index 93df0bd10..000000000 --- a/ui/icon/svg/chevron-back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-down-circle-outline.svg b/ui/icon/svg/chevron-down-circle-outline.svg deleted file mode 100644 index b292c886d..000000000 --- a/ui/icon/svg/chevron-down-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-down-circle-sharp.svg b/ui/icon/svg/chevron-down-circle-sharp.svg deleted file mode 100644 index 67ac0358a..000000000 --- a/ui/icon/svg/chevron-down-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-down-circle.svg b/ui/icon/svg/chevron-down-circle.svg deleted file mode 100644 index 1e9e8ab5f..000000000 --- a/ui/icon/svg/chevron-down-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-down-outline.svg b/ui/icon/svg/chevron-down-outline.svg deleted file mode 100644 index 5cbbbc4ff..000000000 --- a/ui/icon/svg/chevron-down-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-down-sharp.svg b/ui/icon/svg/chevron-down-sharp.svg deleted file mode 100644 index 9705a2a0c..000000000 --- a/ui/icon/svg/chevron-down-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-down.svg b/ui/icon/svg/chevron-down.svg deleted file mode 100644 index 5cbbbc4ff..000000000 --- a/ui/icon/svg/chevron-down.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-forward-circle-outline.svg b/ui/icon/svg/chevron-forward-circle-outline.svg deleted file mode 100644 index 7f040dbee..000000000 --- a/ui/icon/svg/chevron-forward-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-forward-circle-sharp.svg b/ui/icon/svg/chevron-forward-circle-sharp.svg deleted file mode 100644 index 51cf03833..000000000 --- a/ui/icon/svg/chevron-forward-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-forward-circle.svg b/ui/icon/svg/chevron-forward-circle.svg deleted file mode 100644 index 9c421e68c..000000000 --- a/ui/icon/svg/chevron-forward-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-forward-outline.svg b/ui/icon/svg/chevron-forward-outline.svg deleted file mode 100644 index 101823b88..000000000 --- a/ui/icon/svg/chevron-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-forward-sharp.svg b/ui/icon/svg/chevron-forward-sharp.svg deleted file mode 100644 index bb5e104b7..000000000 --- a/ui/icon/svg/chevron-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-forward.svg b/ui/icon/svg/chevron-forward.svg deleted file mode 100644 index 101823b88..000000000 --- a/ui/icon/svg/chevron-forward.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-up-circle-outline.svg b/ui/icon/svg/chevron-up-circle-outline.svg deleted file mode 100644 index 4ffc33b99..000000000 --- a/ui/icon/svg/chevron-up-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-up-circle-sharp.svg b/ui/icon/svg/chevron-up-circle-sharp.svg deleted file mode 100644 index 552c167ca..000000000 --- a/ui/icon/svg/chevron-up-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-up-circle.svg b/ui/icon/svg/chevron-up-circle.svg deleted file mode 100644 index 659a18ff5..000000000 --- a/ui/icon/svg/chevron-up-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/chevron-up-outline.svg b/ui/icon/svg/chevron-up-outline.svg deleted file mode 100644 index 753f2c5bf..000000000 --- a/ui/icon/svg/chevron-up-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-up-sharp.svg b/ui/icon/svg/chevron-up-sharp.svg deleted file mode 100644 index bdfadd0cf..000000000 --- a/ui/icon/svg/chevron-up-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/chevron-up.svg b/ui/icon/svg/chevron-up.svg deleted file mode 100644 index 753f2c5bf..000000000 --- a/ui/icon/svg/chevron-up.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/clipboard-outline.svg b/ui/icon/svg/clipboard-outline.svg deleted file mode 100644 index 3b2ca4384..000000000 --- a/ui/icon/svg/clipboard-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/clipboard-sharp.svg b/ui/icon/svg/clipboard-sharp.svg deleted file mode 100644 index 5fa28cec5..000000000 --- a/ui/icon/svg/clipboard-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/clipboard.svg b/ui/icon/svg/clipboard.svg deleted file mode 100644 index ef85627d4..000000000 --- a/ui/icon/svg/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/close-circle-outline.svg b/ui/icon/svg/close-circle-outline.svg deleted file mode 100644 index c117f4465..000000000 --- a/ui/icon/svg/close-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/close-circle-sharp.svg b/ui/icon/svg/close-circle-sharp.svg deleted file mode 100644 index 4f1d1a6b1..000000000 --- a/ui/icon/svg/close-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/close-circle.svg b/ui/icon/svg/close-circle.svg deleted file mode 100644 index 9a32a7483..000000000 --- a/ui/icon/svg/close-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/close-outline.svg b/ui/icon/svg/close-outline.svg deleted file mode 100644 index f0d3b6e07..000000000 --- a/ui/icon/svg/close-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/close-sharp.svg b/ui/icon/svg/close-sharp.svg deleted file mode 100644 index 40cb56e3c..000000000 --- a/ui/icon/svg/close-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/close.svg b/ui/icon/svg/close.svg deleted file mode 100644 index 652d5db56..000000000 --- a/ui/icon/svg/close.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cloud-circle-outline.svg b/ui/icon/svg/cloud-circle-outline.svg deleted file mode 100644 index c066d0d45..000000000 --- a/ui/icon/svg/cloud-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-circle-sharp.svg b/ui/icon/svg/cloud-circle-sharp.svg deleted file mode 100644 index bb344c7bf..000000000 --- a/ui/icon/svg/cloud-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cloud-circle.svg b/ui/icon/svg/cloud-circle.svg deleted file mode 100644 index 7145e8ac1..000000000 --- a/ui/icon/svg/cloud-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cloud-done-outline.svg b/ui/icon/svg/cloud-done-outline.svg deleted file mode 100644 index 38d8dbab2..000000000 --- a/ui/icon/svg/cloud-done-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-done-sharp.svg b/ui/icon/svg/cloud-done-sharp.svg deleted file mode 100644 index 6d5d9d090..000000000 --- a/ui/icon/svg/cloud-done-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-done.svg b/ui/icon/svg/cloud-done.svg deleted file mode 100644 index 05668fb23..000000000 --- a/ui/icon/svg/cloud-done.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-download-outline.svg b/ui/icon/svg/cloud-download-outline.svg deleted file mode 100644 index e32780cb4..000000000 --- a/ui/icon/svg/cloud-download-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-download-sharp.svg b/ui/icon/svg/cloud-download-sharp.svg deleted file mode 100644 index c55963e2c..000000000 --- a/ui/icon/svg/cloud-download-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-download.svg b/ui/icon/svg/cloud-download.svg deleted file mode 100644 index d13d4bae8..000000000 --- a/ui/icon/svg/cloud-download.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-offline-outline.svg b/ui/icon/svg/cloud-offline-outline.svg deleted file mode 100644 index ea1753536..000000000 --- a/ui/icon/svg/cloud-offline-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-offline-sharp.svg b/ui/icon/svg/cloud-offline-sharp.svg deleted file mode 100644 index 33b0a9852..000000000 --- a/ui/icon/svg/cloud-offline-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-offline.svg b/ui/icon/svg/cloud-offline.svg deleted file mode 100644 index d8fadab3d..000000000 --- a/ui/icon/svg/cloud-offline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-outline.svg b/ui/icon/svg/cloud-outline.svg deleted file mode 100644 index 16762b026..000000000 --- a/ui/icon/svg/cloud-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-sharp.svg b/ui/icon/svg/cloud-sharp.svg deleted file mode 100644 index 00e7c6a84..000000000 --- a/ui/icon/svg/cloud-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-upload-outline.svg b/ui/icon/svg/cloud-upload-outline.svg deleted file mode 100644 index e139444eb..000000000 --- a/ui/icon/svg/cloud-upload-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud-upload-sharp.svg b/ui/icon/svg/cloud-upload-sharp.svg deleted file mode 100644 index 5e46da4b6..000000000 --- a/ui/icon/svg/cloud-upload-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cloud-upload.svg b/ui/icon/svg/cloud-upload.svg deleted file mode 100644 index 463dd1331..000000000 --- a/ui/icon/svg/cloud-upload.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloud.svg b/ui/icon/svg/cloud.svg deleted file mode 100644 index 95ea5087a..000000000 --- a/ui/icon/svg/cloud.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloudy-night-outline.svg b/ui/icon/svg/cloudy-night-outline.svg deleted file mode 100644 index f3036a398..000000000 --- a/ui/icon/svg/cloudy-night-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloudy-night-sharp.svg b/ui/icon/svg/cloudy-night-sharp.svg deleted file mode 100644 index eeddbcba6..000000000 --- a/ui/icon/svg/cloudy-night-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloudy-night.svg b/ui/icon/svg/cloudy-night.svg deleted file mode 100644 index d1174722b..000000000 --- a/ui/icon/svg/cloudy-night.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloudy-outline.svg b/ui/icon/svg/cloudy-outline.svg deleted file mode 100644 index 14107c86a..000000000 --- a/ui/icon/svg/cloudy-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloudy-sharp.svg b/ui/icon/svg/cloudy-sharp.svg deleted file mode 100644 index a1ff1147d..000000000 --- a/ui/icon/svg/cloudy-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cloudy.svg b/ui/icon/svg/cloudy.svg deleted file mode 100644 index 89867159f..000000000 --- a/ui/icon/svg/cloudy.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-download-outline.svg b/ui/icon/svg/code-download-outline.svg deleted file mode 100644 index e9e44c4f8..000000000 --- a/ui/icon/svg/code-download-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-download-sharp.svg b/ui/icon/svg/code-download-sharp.svg deleted file mode 100644 index 08ce9cdee..000000000 --- a/ui/icon/svg/code-download-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-download.svg b/ui/icon/svg/code-download.svg deleted file mode 100644 index ad8a6aeef..000000000 --- a/ui/icon/svg/code-download.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-outline.svg b/ui/icon/svg/code-outline.svg deleted file mode 100644 index 42169c865..000000000 --- a/ui/icon/svg/code-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-sharp.svg b/ui/icon/svg/code-sharp.svg deleted file mode 100644 index 2e04cb119..000000000 --- a/ui/icon/svg/code-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/code-slash-outline.svg b/ui/icon/svg/code-slash-outline.svg deleted file mode 100644 index f7988c730..000000000 --- a/ui/icon/svg/code-slash-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-slash-sharp.svg b/ui/icon/svg/code-slash-sharp.svg deleted file mode 100644 index 1cff0ba14..000000000 --- a/ui/icon/svg/code-slash-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/code-slash.svg b/ui/icon/svg/code-slash.svg deleted file mode 100644 index 0f59a0824..000000000 --- a/ui/icon/svg/code-slash.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-working-outline.svg b/ui/icon/svg/code-working-outline.svg deleted file mode 100644 index 4ac5b5434..000000000 --- a/ui/icon/svg/code-working-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-working-sharp.svg b/ui/icon/svg/code-working-sharp.svg deleted file mode 100644 index 4ef94f073..000000000 --- a/ui/icon/svg/code-working-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code-working.svg b/ui/icon/svg/code-working.svg deleted file mode 100644 index 82f0ea262..000000000 --- a/ui/icon/svg/code-working.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/code.svg b/ui/icon/svg/code.svg deleted file mode 100644 index b73a895f3..000000000 --- a/ui/icon/svg/code.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cog-outline.svg b/ui/icon/svg/cog-outline.svg deleted file mode 100644 index 492af9ae6..000000000 --- a/ui/icon/svg/cog-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cog-sharp.svg b/ui/icon/svg/cog-sharp.svg deleted file mode 100644 index b2ba10dd9..000000000 --- a/ui/icon/svg/cog-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cog.svg b/ui/icon/svg/cog.svg deleted file mode 100644 index b33d5152f..000000000 --- a/ui/icon/svg/cog.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-fill-outline.svg b/ui/icon/svg/color-fill-outline.svg deleted file mode 100644 index ceae29854..000000000 --- a/ui/icon/svg/color-fill-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-fill-sharp.svg b/ui/icon/svg/color-fill-sharp.svg deleted file mode 100644 index 3c4c5d3ee..000000000 --- a/ui/icon/svg/color-fill-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/color-fill.svg b/ui/icon/svg/color-fill.svg deleted file mode 100644 index b9f38aca5..000000000 --- a/ui/icon/svg/color-fill.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-filter-outline.svg b/ui/icon/svg/color-filter-outline.svg deleted file mode 100644 index 5dbea28e2..000000000 --- a/ui/icon/svg/color-filter-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-filter-sharp.svg b/ui/icon/svg/color-filter-sharp.svg deleted file mode 100644 index b9d6da575..000000000 --- a/ui/icon/svg/color-filter-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-filter.svg b/ui/icon/svg/color-filter.svg deleted file mode 100644 index b6544487a..000000000 --- a/ui/icon/svg/color-filter.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-palette-outline.svg b/ui/icon/svg/color-palette-outline.svg deleted file mode 100644 index dda333e50..000000000 --- a/ui/icon/svg/color-palette-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-palette-sharp.svg b/ui/icon/svg/color-palette-sharp.svg deleted file mode 100644 index 93d0c1a17..000000000 --- a/ui/icon/svg/color-palette-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-palette.svg b/ui/icon/svg/color-palette.svg deleted file mode 100644 index 1ca983e9e..000000000 --- a/ui/icon/svg/color-palette.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-wand-outline.svg b/ui/icon/svg/color-wand-outline.svg deleted file mode 100644 index 73eecb1d4..000000000 --- a/ui/icon/svg/color-wand-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/color-wand-sharp.svg b/ui/icon/svg/color-wand-sharp.svg deleted file mode 100644 index e09f0f7e1..000000000 --- a/ui/icon/svg/color-wand-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/color-wand.svg b/ui/icon/svg/color-wand.svg deleted file mode 100644 index 3297a25cc..000000000 --- a/ui/icon/svg/color-wand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/compass-outline.svg b/ui/icon/svg/compass-outline.svg deleted file mode 100644 index d0f5d4d7f..000000000 --- a/ui/icon/svg/compass-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/compass-sharp.svg b/ui/icon/svg/compass-sharp.svg deleted file mode 100644 index bc1b91bad..000000000 --- a/ui/icon/svg/compass-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/compass.svg b/ui/icon/svg/compass.svg deleted file mode 100644 index 541f9cc81..000000000 --- a/ui/icon/svg/compass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/construct-outline.svg b/ui/icon/svg/construct-outline.svg deleted file mode 100644 index c18cb1b7b..000000000 --- a/ui/icon/svg/construct-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/construct-sharp.svg b/ui/icon/svg/construct-sharp.svg deleted file mode 100644 index 104b92389..000000000 --- a/ui/icon/svg/construct-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/construct.svg b/ui/icon/svg/construct.svg deleted file mode 100644 index 23a932b13..000000000 --- a/ui/icon/svg/construct.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/contract-outline.svg b/ui/icon/svg/contract-outline.svg deleted file mode 100644 index e9e0ac390..000000000 --- a/ui/icon/svg/contract-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/contract-sharp.svg b/ui/icon/svg/contract-sharp.svg deleted file mode 100644 index c93bf3cfb..000000000 --- a/ui/icon/svg/contract-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/contract.svg b/ui/icon/svg/contract.svg deleted file mode 100644 index e9e0ac390..000000000 --- a/ui/icon/svg/contract.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/contrast-outline.svg b/ui/icon/svg/contrast-outline.svg deleted file mode 100644 index b25c6b68b..000000000 --- a/ui/icon/svg/contrast-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/contrast-sharp.svg b/ui/icon/svg/contrast-sharp.svg deleted file mode 100644 index 3a611c10f..000000000 --- a/ui/icon/svg/contrast-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/contrast.svg b/ui/icon/svg/contrast.svg deleted file mode 100644 index 9c71f5263..000000000 --- a/ui/icon/svg/contrast.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/copy-outline.svg b/ui/icon/svg/copy-outline.svg deleted file mode 100644 index 26f5132a9..000000000 --- a/ui/icon/svg/copy-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/copy-sharp.svg b/ui/icon/svg/copy-sharp.svg deleted file mode 100644 index df6999ce1..000000000 --- a/ui/icon/svg/copy-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/copy.svg b/ui/icon/svg/copy.svg deleted file mode 100644 index 4f6cf732f..000000000 --- a/ui/icon/svg/copy.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/create-outline.svg b/ui/icon/svg/create-outline.svg deleted file mode 100644 index b1ff9fd23..000000000 --- a/ui/icon/svg/create-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/create-sharp.svg b/ui/icon/svg/create-sharp.svg deleted file mode 100644 index 811943a8a..000000000 --- a/ui/icon/svg/create-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/create.svg b/ui/icon/svg/create.svg deleted file mode 100644 index 46b545eb5..000000000 --- a/ui/icon/svg/create.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/crop-outline.svg b/ui/icon/svg/crop-outline.svg deleted file mode 100644 index 894bea947..000000000 --- a/ui/icon/svg/crop-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/crop-sharp.svg b/ui/icon/svg/crop-sharp.svg deleted file mode 100644 index 295bf0937..000000000 --- a/ui/icon/svg/crop-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/crop.svg b/ui/icon/svg/crop.svg deleted file mode 100644 index ebd0fb1f9..000000000 --- a/ui/icon/svg/crop.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cube-outline.svg b/ui/icon/svg/cube-outline.svg deleted file mode 100644 index d3b0f91d6..000000000 --- a/ui/icon/svg/cube-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cube-sharp.svg b/ui/icon/svg/cube-sharp.svg deleted file mode 100644 index f5c73fbfc..000000000 --- a/ui/icon/svg/cube-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cube.svg b/ui/icon/svg/cube.svg deleted file mode 100644 index 1f087af67..000000000 --- a/ui/icon/svg/cube.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cut-outline.svg b/ui/icon/svg/cut-outline.svg deleted file mode 100644 index f0f1c669e..000000000 --- a/ui/icon/svg/cut-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/cut-sharp.svg b/ui/icon/svg/cut-sharp.svg deleted file mode 100644 index e7a594950..000000000 --- a/ui/icon/svg/cut-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/cut.svg b/ui/icon/svg/cut.svg deleted file mode 100644 index b2f039e47..000000000 --- a/ui/icon/svg/cut.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/desktop-outline.svg b/ui/icon/svg/desktop-outline.svg deleted file mode 100644 index bdd828006..000000000 --- a/ui/icon/svg/desktop-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/desktop-sharp.svg b/ui/icon/svg/desktop-sharp.svg deleted file mode 100644 index 79d582e7a..000000000 --- a/ui/icon/svg/desktop-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/desktop.svg b/ui/icon/svg/desktop.svg deleted file mode 100644 index 76c15d74a..000000000 --- a/ui/icon/svg/desktop.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/diamond-outline.svg b/ui/icon/svg/diamond-outline.svg deleted file mode 100644 index 15d068d87..000000000 --- a/ui/icon/svg/diamond-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/diamond-sharp.svg b/ui/icon/svg/diamond-sharp.svg deleted file mode 100644 index 6e5c3f82d..000000000 --- a/ui/icon/svg/diamond-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/diamond.svg b/ui/icon/svg/diamond.svg deleted file mode 100644 index d99927cb6..000000000 --- a/ui/icon/svg/diamond.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/dice-outline.svg b/ui/icon/svg/dice-outline.svg deleted file mode 100644 index bbf3c7f61..000000000 --- a/ui/icon/svg/dice-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/dice-sharp.svg b/ui/icon/svg/dice-sharp.svg deleted file mode 100644 index fb353f8a4..000000000 --- a/ui/icon/svg/dice-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/dice.svg b/ui/icon/svg/dice.svg deleted file mode 100644 index 6d51c6050..000000000 --- a/ui/icon/svg/dice.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/disc-outline.svg b/ui/icon/svg/disc-outline.svg deleted file mode 100644 index 1b2e37d9e..000000000 --- a/ui/icon/svg/disc-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/disc-sharp.svg b/ui/icon/svg/disc-sharp.svg deleted file mode 100644 index 0eaca59f8..000000000 --- a/ui/icon/svg/disc-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/disc.svg b/ui/icon/svg/disc.svg deleted file mode 100644 index 48fd69297..000000000 --- a/ui/icon/svg/disc.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-attach-outline.svg b/ui/icon/svg/document-attach-outline.svg deleted file mode 100644 index 2ee3bc6a8..000000000 --- a/ui/icon/svg/document-attach-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-attach-sharp.svg b/ui/icon/svg/document-attach-sharp.svg deleted file mode 100644 index 1b6fe6ddc..000000000 --- a/ui/icon/svg/document-attach-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-attach.svg b/ui/icon/svg/document-attach.svg deleted file mode 100644 index b2e5d7b8e..000000000 --- a/ui/icon/svg/document-attach.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-lock-outline.svg b/ui/icon/svg/document-lock-outline.svg deleted file mode 100644 index 7d044350e..000000000 --- a/ui/icon/svg/document-lock-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-lock-sharp.svg b/ui/icon/svg/document-lock-sharp.svg deleted file mode 100644 index 8bdcad4b2..000000000 --- a/ui/icon/svg/document-lock-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-lock.svg b/ui/icon/svg/document-lock.svg deleted file mode 100644 index 3d4446dbc..000000000 --- a/ui/icon/svg/document-lock.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-outline.svg b/ui/icon/svg/document-outline.svg deleted file mode 100644 index a67feac2c..000000000 --- a/ui/icon/svg/document-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-sharp.svg b/ui/icon/svg/document-sharp.svg deleted file mode 100644 index 25f6d8ead..000000000 --- a/ui/icon/svg/document-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-text-outline.svg b/ui/icon/svg/document-text-outline.svg deleted file mode 100644 index f607cf19f..000000000 --- a/ui/icon/svg/document-text-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-text-sharp.svg b/ui/icon/svg/document-text-sharp.svg deleted file mode 100644 index ab31a94e4..000000000 --- a/ui/icon/svg/document-text-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document-text.svg b/ui/icon/svg/document-text.svg deleted file mode 100644 index a4bd4a4c3..000000000 --- a/ui/icon/svg/document-text.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/document.svg b/ui/icon/svg/document.svg deleted file mode 100644 index a50b254da..000000000 --- a/ui/icon/svg/document.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/documents-outline.svg b/ui/icon/svg/documents-outline.svg deleted file mode 100644 index 576186460..000000000 --- a/ui/icon/svg/documents-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/documents-sharp.svg b/ui/icon/svg/documents-sharp.svg deleted file mode 100644 index 6e31fed52..000000000 --- a/ui/icon/svg/documents-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/documents.svg b/ui/icon/svg/documents.svg deleted file mode 100644 index 0b8978a5e..000000000 --- a/ui/icon/svg/documents.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/download-outline.svg b/ui/icon/svg/download-outline.svg deleted file mode 100644 index e79632efe..000000000 --- a/ui/icon/svg/download-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/download-sharp.svg b/ui/icon/svg/download-sharp.svg deleted file mode 100644 index 1e1342502..000000000 --- a/ui/icon/svg/download-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/download.svg b/ui/icon/svg/download.svg deleted file mode 100644 index 832fc9bca..000000000 --- a/ui/icon/svg/download.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/duplicate-outline.svg b/ui/icon/svg/duplicate-outline.svg deleted file mode 100644 index d0664930f..000000000 --- a/ui/icon/svg/duplicate-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/duplicate-sharp.svg b/ui/icon/svg/duplicate-sharp.svg deleted file mode 100644 index fd14a9f05..000000000 --- a/ui/icon/svg/duplicate-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/duplicate.svg b/ui/icon/svg/duplicate.svg deleted file mode 100644 index 93e5efaa5..000000000 --- a/ui/icon/svg/duplicate.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ear-outline.svg b/ui/icon/svg/ear-outline.svg deleted file mode 100644 index f26733a23..000000000 --- a/ui/icon/svg/ear-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ear-sharp.svg b/ui/icon/svg/ear-sharp.svg deleted file mode 100644 index 73bc8db8a..000000000 --- a/ui/icon/svg/ear-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ear.svg b/ui/icon/svg/ear.svg deleted file mode 100644 index df1d822b1..000000000 --- a/ui/icon/svg/ear.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/earth-outline.svg b/ui/icon/svg/earth-outline.svg deleted file mode 100644 index 8b41c9825..000000000 --- a/ui/icon/svg/earth-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/earth-sharp.svg b/ui/icon/svg/earth-sharp.svg deleted file mode 100644 index ceaebd203..000000000 --- a/ui/icon/svg/earth-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/earth.svg b/ui/icon/svg/earth.svg deleted file mode 100644 index 954db7634..000000000 --- a/ui/icon/svg/earth.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/easel-outline.svg b/ui/icon/svg/easel-outline.svg deleted file mode 100644 index 54193ab6b..000000000 --- a/ui/icon/svg/easel-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/easel-sharp.svg b/ui/icon/svg/easel-sharp.svg deleted file mode 100644 index 9758dece6..000000000 --- a/ui/icon/svg/easel-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/easel.svg b/ui/icon/svg/easel.svg deleted file mode 100644 index 6d971254a..000000000 --- a/ui/icon/svg/easel.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/egg-outline.svg b/ui/icon/svg/egg-outline.svg deleted file mode 100644 index 69d2c3a35..000000000 --- a/ui/icon/svg/egg-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/egg-sharp.svg b/ui/icon/svg/egg-sharp.svg deleted file mode 100644 index 7021b33a4..000000000 --- a/ui/icon/svg/egg-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/egg.svg b/ui/icon/svg/egg.svg deleted file mode 100644 index 67e76e9e5..000000000 --- a/ui/icon/svg/egg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipse-outline.svg b/ui/icon/svg/ellipse-outline.svg deleted file mode 100644 index 7e4362948..000000000 --- a/ui/icon/svg/ellipse-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipse-sharp.svg b/ui/icon/svg/ellipse-sharp.svg deleted file mode 100644 index 956ebaf40..000000000 --- a/ui/icon/svg/ellipse-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipse.svg b/ui/icon/svg/ellipse.svg deleted file mode 100644 index 956ebaf40..000000000 --- a/ui/icon/svg/ellipse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipsis-horizontal-circle-outline.svg b/ui/icon/svg/ellipsis-horizontal-circle-outline.svg deleted file mode 100644 index 0f6b87907..000000000 --- a/ui/icon/svg/ellipsis-horizontal-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipsis-horizontal-circle-sharp.svg b/ui/icon/svg/ellipsis-horizontal-circle-sharp.svg deleted file mode 100644 index f5edd4c44..000000000 --- a/ui/icon/svg/ellipsis-horizontal-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipsis-horizontal-circle.svg b/ui/icon/svg/ellipsis-horizontal-circle.svg deleted file mode 100644 index 0f6b87907..000000000 --- a/ui/icon/svg/ellipsis-horizontal-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipsis-horizontal-outline.svg b/ui/icon/svg/ellipsis-horizontal-outline.svg deleted file mode 100644 index 92163521f..000000000 --- a/ui/icon/svg/ellipsis-horizontal-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipsis-horizontal-sharp.svg b/ui/icon/svg/ellipsis-horizontal-sharp.svg deleted file mode 100644 index 59b0ba478..000000000 --- a/ui/icon/svg/ellipsis-horizontal-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipsis-horizontal.svg b/ui/icon/svg/ellipsis-horizontal.svg deleted file mode 100644 index 59b0ba478..000000000 --- a/ui/icon/svg/ellipsis-horizontal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipsis-vertical-circle-outline.svg b/ui/icon/svg/ellipsis-vertical-circle-outline.svg deleted file mode 100644 index dafb1a465..000000000 --- a/ui/icon/svg/ellipsis-vertical-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipsis-vertical-circle-sharp.svg b/ui/icon/svg/ellipsis-vertical-circle-sharp.svg deleted file mode 100644 index 18b5e1ac8..000000000 --- a/ui/icon/svg/ellipsis-vertical-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipsis-vertical-circle.svg b/ui/icon/svg/ellipsis-vertical-circle.svg deleted file mode 100644 index dafb1a465..000000000 --- a/ui/icon/svg/ellipsis-vertical-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipsis-vertical-outline.svg b/ui/icon/svg/ellipsis-vertical-outline.svg deleted file mode 100644 index bc3a3cf46..000000000 --- a/ui/icon/svg/ellipsis-vertical-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ellipsis-vertical-sharp.svg b/ui/icon/svg/ellipsis-vertical-sharp.svg deleted file mode 100644 index f4f5fe8c8..000000000 --- a/ui/icon/svg/ellipsis-vertical-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ellipsis-vertical.svg b/ui/icon/svg/ellipsis-vertical.svg deleted file mode 100644 index f4f5fe8c8..000000000 --- a/ui/icon/svg/ellipsis-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/enter-outline.svg b/ui/icon/svg/enter-outline.svg deleted file mode 100644 index e5a267799..000000000 --- a/ui/icon/svg/enter-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/enter-sharp.svg b/ui/icon/svg/enter-sharp.svg deleted file mode 100644 index d207d25d7..000000000 --- a/ui/icon/svg/enter-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/enter.svg b/ui/icon/svg/enter.svg deleted file mode 100644 index 46f0f3cd8..000000000 --- a/ui/icon/svg/enter.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/exit-outline.svg b/ui/icon/svg/exit-outline.svg deleted file mode 100644 index 818cbdbdd..000000000 --- a/ui/icon/svg/exit-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/exit-sharp.svg b/ui/icon/svg/exit-sharp.svg deleted file mode 100644 index 0f6b7c1b0..000000000 --- a/ui/icon/svg/exit-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/exit.svg b/ui/icon/svg/exit.svg deleted file mode 100644 index d1ca77a72..000000000 --- a/ui/icon/svg/exit.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/expand-outline.svg b/ui/icon/svg/expand-outline.svg deleted file mode 100644 index edd3ebd5e..000000000 --- a/ui/icon/svg/expand-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/expand-sharp.svg b/ui/icon/svg/expand-sharp.svg deleted file mode 100644 index 8532422cb..000000000 --- a/ui/icon/svg/expand-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/expand.svg b/ui/icon/svg/expand.svg deleted file mode 100644 index edd3ebd5e..000000000 --- a/ui/icon/svg/expand.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/extension-puzzle-outline.svg b/ui/icon/svg/extension-puzzle-outline.svg deleted file mode 100644 index a2d535ee1..000000000 --- a/ui/icon/svg/extension-puzzle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/extension-puzzle-sharp.svg b/ui/icon/svg/extension-puzzle-sharp.svg deleted file mode 100644 index 8b2960525..000000000 --- a/ui/icon/svg/extension-puzzle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/extension-puzzle.svg b/ui/icon/svg/extension-puzzle.svg deleted file mode 100644 index 44804a093..000000000 --- a/ui/icon/svg/extension-puzzle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eye-off-outline.svg b/ui/icon/svg/eye-off-outline.svg deleted file mode 100644 index 28a64a426..000000000 --- a/ui/icon/svg/eye-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eye-off-sharp.svg b/ui/icon/svg/eye-off-sharp.svg deleted file mode 100644 index b12f576e9..000000000 --- a/ui/icon/svg/eye-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eye-off.svg b/ui/icon/svg/eye-off.svg deleted file mode 100644 index 41a22dd69..000000000 --- a/ui/icon/svg/eye-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eye-outline.svg b/ui/icon/svg/eye-outline.svg deleted file mode 100644 index 1dad4150c..000000000 --- a/ui/icon/svg/eye-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eye-sharp.svg b/ui/icon/svg/eye-sharp.svg deleted file mode 100644 index 05028f20c..000000000 --- a/ui/icon/svg/eye-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eye.svg b/ui/icon/svg/eye.svg deleted file mode 100644 index 83a68b454..000000000 --- a/ui/icon/svg/eye.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eyedrop-outline.svg b/ui/icon/svg/eyedrop-outline.svg deleted file mode 100644 index f5f25846d..000000000 --- a/ui/icon/svg/eyedrop-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eyedrop-sharp.svg b/ui/icon/svg/eyedrop-sharp.svg deleted file mode 100644 index 2facf6047..000000000 --- a/ui/icon/svg/eyedrop-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/eyedrop.svg b/ui/icon/svg/eyedrop.svg deleted file mode 100644 index 951780111..000000000 --- a/ui/icon/svg/eyedrop.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fast-food-outline.svg b/ui/icon/svg/fast-food-outline.svg deleted file mode 100644 index 1a8461688..000000000 --- a/ui/icon/svg/fast-food-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fast-food-sharp.svg b/ui/icon/svg/fast-food-sharp.svg deleted file mode 100644 index 9e50c35b1..000000000 --- a/ui/icon/svg/fast-food-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fast-food.svg b/ui/icon/svg/fast-food.svg deleted file mode 100644 index bc5cbc8e1..000000000 --- a/ui/icon/svg/fast-food.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/female-outline.svg b/ui/icon/svg/female-outline.svg deleted file mode 100644 index 32f9559d3..000000000 --- a/ui/icon/svg/female-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/female-sharp.svg b/ui/icon/svg/female-sharp.svg deleted file mode 100644 index bab64d9be..000000000 --- a/ui/icon/svg/female-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/female.svg b/ui/icon/svg/female.svg deleted file mode 100644 index 64496a2fd..000000000 --- a/ui/icon/svg/female.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/file-tray-full-outline.svg b/ui/icon/svg/file-tray-full-outline.svg deleted file mode 100644 index 9d39fdef5..000000000 --- a/ui/icon/svg/file-tray-full-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/file-tray-full-sharp.svg b/ui/icon/svg/file-tray-full-sharp.svg deleted file mode 100644 index 403a1c985..000000000 --- a/ui/icon/svg/file-tray-full-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/file-tray-full.svg b/ui/icon/svg/file-tray-full.svg deleted file mode 100644 index 4cbc1ddd9..000000000 --- a/ui/icon/svg/file-tray-full.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/file-tray-outline.svg b/ui/icon/svg/file-tray-outline.svg deleted file mode 100644 index 7ba492e05..000000000 --- a/ui/icon/svg/file-tray-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/file-tray-sharp.svg b/ui/icon/svg/file-tray-sharp.svg deleted file mode 100644 index 35960dd38..000000000 --- a/ui/icon/svg/file-tray-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/file-tray-stacked-outline.svg b/ui/icon/svg/file-tray-stacked-outline.svg deleted file mode 100644 index c2804c4b7..000000000 --- a/ui/icon/svg/file-tray-stacked-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/file-tray-stacked-sharp.svg b/ui/icon/svg/file-tray-stacked-sharp.svg deleted file mode 100644 index 2a32d81d8..000000000 --- a/ui/icon/svg/file-tray-stacked-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/file-tray-stacked.svg b/ui/icon/svg/file-tray-stacked.svg deleted file mode 100644 index 24e773ad5..000000000 --- a/ui/icon/svg/file-tray-stacked.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/file-tray.svg b/ui/icon/svg/file-tray.svg deleted file mode 100644 index 5b3bf2399..000000000 --- a/ui/icon/svg/file-tray.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/film-outline.svg b/ui/icon/svg/film-outline.svg deleted file mode 100644 index 52038a06f..000000000 --- a/ui/icon/svg/film-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/film-sharp.svg b/ui/icon/svg/film-sharp.svg deleted file mode 100644 index 07908a780..000000000 --- a/ui/icon/svg/film-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/film.svg b/ui/icon/svg/film.svg deleted file mode 100644 index 10bf4e83c..000000000 --- a/ui/icon/svg/film.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/filter-circle-outline.svg b/ui/icon/svg/filter-circle-outline.svg deleted file mode 100644 index ba8468fe8..000000000 --- a/ui/icon/svg/filter-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/filter-circle-sharp.svg b/ui/icon/svg/filter-circle-sharp.svg deleted file mode 100644 index 0c98cc351..000000000 --- a/ui/icon/svg/filter-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/filter-circle.svg b/ui/icon/svg/filter-circle.svg deleted file mode 100644 index f9a5a0ce1..000000000 --- a/ui/icon/svg/filter-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/filter-outline.svg b/ui/icon/svg/filter-outline.svg deleted file mode 100644 index 30bb7208c..000000000 --- a/ui/icon/svg/filter-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/filter-sharp.svg b/ui/icon/svg/filter-sharp.svg deleted file mode 100644 index f6b8d4787..000000000 --- a/ui/icon/svg/filter-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/filter.svg b/ui/icon/svg/filter.svg deleted file mode 100644 index 6bfd109f6..000000000 --- a/ui/icon/svg/filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/finger-print-outline.svg b/ui/icon/svg/finger-print-outline.svg deleted file mode 100644 index e9372c8d2..000000000 --- a/ui/icon/svg/finger-print-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/finger-print-sharp.svg b/ui/icon/svg/finger-print-sharp.svg deleted file mode 100644 index 6333fe85d..000000000 --- a/ui/icon/svg/finger-print-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/finger-print.svg b/ui/icon/svg/finger-print.svg deleted file mode 100644 index 65a4b80f3..000000000 --- a/ui/icon/svg/finger-print.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fish-outline.svg b/ui/icon/svg/fish-outline.svg deleted file mode 100644 index ce2474cb4..000000000 --- a/ui/icon/svg/fish-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fish-sharp.svg b/ui/icon/svg/fish-sharp.svg deleted file mode 100644 index 6863d942e..000000000 --- a/ui/icon/svg/fish-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fish.svg b/ui/icon/svg/fish.svg deleted file mode 100644 index 1b5394077..000000000 --- a/ui/icon/svg/fish.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fitness-outline.svg b/ui/icon/svg/fitness-outline.svg deleted file mode 100644 index fe15d8283..000000000 --- a/ui/icon/svg/fitness-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fitness-sharp.svg b/ui/icon/svg/fitness-sharp.svg deleted file mode 100644 index 625ad7c18..000000000 --- a/ui/icon/svg/fitness-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/fitness.svg b/ui/icon/svg/fitness.svg deleted file mode 100644 index 4df996f97..000000000 --- a/ui/icon/svg/fitness.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flag-outline.svg b/ui/icon/svg/flag-outline.svg deleted file mode 100644 index 47fe2c88d..000000000 --- a/ui/icon/svg/flag-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flag-sharp.svg b/ui/icon/svg/flag-sharp.svg deleted file mode 100644 index a3b83d2fa..000000000 --- a/ui/icon/svg/flag-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flag.svg b/ui/icon/svg/flag.svg deleted file mode 100644 index e3c9c5864..000000000 --- a/ui/icon/svg/flag.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flame-outline.svg b/ui/icon/svg/flame-outline.svg deleted file mode 100644 index 30d6995b1..000000000 --- a/ui/icon/svg/flame-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flame-sharp.svg b/ui/icon/svg/flame-sharp.svg deleted file mode 100644 index 3e04a0bb8..000000000 --- a/ui/icon/svg/flame-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flame.svg b/ui/icon/svg/flame.svg deleted file mode 100644 index b61a0a7d3..000000000 --- a/ui/icon/svg/flame.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flash-off-outline.svg b/ui/icon/svg/flash-off-outline.svg deleted file mode 100644 index 6aad339b4..000000000 --- a/ui/icon/svg/flash-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flash-off-sharp.svg b/ui/icon/svg/flash-off-sharp.svg deleted file mode 100644 index 2c1f7183f..000000000 --- a/ui/icon/svg/flash-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/flash-off.svg b/ui/icon/svg/flash-off.svg deleted file mode 100644 index 90aacc6ab..000000000 --- a/ui/icon/svg/flash-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flash-outline.svg b/ui/icon/svg/flash-outline.svg deleted file mode 100644 index 5cd6e104a..000000000 --- a/ui/icon/svg/flash-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flash-sharp.svg b/ui/icon/svg/flash-sharp.svg deleted file mode 100644 index 73313f66e..000000000 --- a/ui/icon/svg/flash-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/flash.svg b/ui/icon/svg/flash.svg deleted file mode 100644 index d62fbe553..000000000 --- a/ui/icon/svg/flash.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flashlight-outline.svg b/ui/icon/svg/flashlight-outline.svg deleted file mode 100644 index 071ab6e7a..000000000 --- a/ui/icon/svg/flashlight-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flashlight-sharp.svg b/ui/icon/svg/flashlight-sharp.svg deleted file mode 100644 index e4c4ad5cf..000000000 --- a/ui/icon/svg/flashlight-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/flashlight.svg b/ui/icon/svg/flashlight.svg deleted file mode 100644 index 9e81b712a..000000000 --- a/ui/icon/svg/flashlight.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flask-outline.svg b/ui/icon/svg/flask-outline.svg deleted file mode 100644 index 00df2f309..000000000 --- a/ui/icon/svg/flask-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flask-sharp.svg b/ui/icon/svg/flask-sharp.svg deleted file mode 100644 index 772333b58..000000000 --- a/ui/icon/svg/flask-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flask.svg b/ui/icon/svg/flask.svg deleted file mode 100644 index 674fff061..000000000 --- a/ui/icon/svg/flask.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flower-outline.svg b/ui/icon/svg/flower-outline.svg deleted file mode 100644 index 28a77925f..000000000 --- a/ui/icon/svg/flower-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flower-sharp.svg b/ui/icon/svg/flower-sharp.svg deleted file mode 100644 index b01c2a524..000000000 --- a/ui/icon/svg/flower-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/flower.svg b/ui/icon/svg/flower.svg deleted file mode 100644 index 0b145bbac..000000000 --- a/ui/icon/svg/flower.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/folder-open-outline.svg b/ui/icon/svg/folder-open-outline.svg deleted file mode 100644 index 2120274de..000000000 --- a/ui/icon/svg/folder-open-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/folder-open-sharp.svg b/ui/icon/svg/folder-open-sharp.svg deleted file mode 100644 index 9b66798dc..000000000 --- a/ui/icon/svg/folder-open-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/folder-open.svg b/ui/icon/svg/folder-open.svg deleted file mode 100644 index 1ae7b77ee..000000000 --- a/ui/icon/svg/folder-open.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/folder-outline.svg b/ui/icon/svg/folder-outline.svg deleted file mode 100644 index f100156e1..000000000 --- a/ui/icon/svg/folder-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/folder-sharp.svg b/ui/icon/svg/folder-sharp.svg deleted file mode 100644 index c7c258404..000000000 --- a/ui/icon/svg/folder-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/folder.svg b/ui/icon/svg/folder.svg deleted file mode 100644 index 47e225926..000000000 --- a/ui/icon/svg/folder.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/football-outline.svg b/ui/icon/svg/football-outline.svg deleted file mode 100644 index 86fd2b137..000000000 --- a/ui/icon/svg/football-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/football-sharp.svg b/ui/icon/svg/football-sharp.svg deleted file mode 100644 index 594671295..000000000 --- a/ui/icon/svg/football-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/football.svg b/ui/icon/svg/football.svg deleted file mode 100644 index 999ea3ed1..000000000 --- a/ui/icon/svg/football.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/footsteps-outline.svg b/ui/icon/svg/footsteps-outline.svg deleted file mode 100644 index 32949a3aa..000000000 --- a/ui/icon/svg/footsteps-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/footsteps-sharp.svg b/ui/icon/svg/footsteps-sharp.svg deleted file mode 100644 index d4224a020..000000000 --- a/ui/icon/svg/footsteps-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/footsteps.svg b/ui/icon/svg/footsteps.svg deleted file mode 100644 index e340a127a..000000000 --- a/ui/icon/svg/footsteps.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/funnel-outline.svg b/ui/icon/svg/funnel-outline.svg deleted file mode 100644 index 5a89927e1..000000000 --- a/ui/icon/svg/funnel-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/funnel-sharp.svg b/ui/icon/svg/funnel-sharp.svg deleted file mode 100644 index f9f09b07e..000000000 --- a/ui/icon/svg/funnel-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/funnel.svg b/ui/icon/svg/funnel.svg deleted file mode 100644 index 149b94649..000000000 --- a/ui/icon/svg/funnel.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/game-controller-outline.svg b/ui/icon/svg/game-controller-outline.svg deleted file mode 100644 index 812b5303d..000000000 --- a/ui/icon/svg/game-controller-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/game-controller-sharp.svg b/ui/icon/svg/game-controller-sharp.svg deleted file mode 100644 index f85af1e0e..000000000 --- a/ui/icon/svg/game-controller-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/game-controller.svg b/ui/icon/svg/game-controller.svg deleted file mode 100644 index be672c7f7..000000000 --- a/ui/icon/svg/game-controller.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/gift-outline.svg b/ui/icon/svg/gift-outline.svg deleted file mode 100644 index 065a27320..000000000 --- a/ui/icon/svg/gift-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/gift-sharp.svg b/ui/icon/svg/gift-sharp.svg deleted file mode 100644 index 81ecb7f87..000000000 --- a/ui/icon/svg/gift-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/gift.svg b/ui/icon/svg/gift.svg deleted file mode 100644 index 63038979e..000000000 --- a/ui/icon/svg/gift.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-branch-outline.svg b/ui/icon/svg/git-branch-outline.svg deleted file mode 100644 index a4220ea1c..000000000 --- a/ui/icon/svg/git-branch-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-branch-sharp.svg b/ui/icon/svg/git-branch-sharp.svg deleted file mode 100644 index 9923be1b4..000000000 --- a/ui/icon/svg/git-branch-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-branch.svg b/ui/icon/svg/git-branch.svg deleted file mode 100644 index d8c088bde..000000000 --- a/ui/icon/svg/git-branch.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-commit-outline.svg b/ui/icon/svg/git-commit-outline.svg deleted file mode 100644 index 887dd8c84..000000000 --- a/ui/icon/svg/git-commit-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-commit-sharp.svg b/ui/icon/svg/git-commit-sharp.svg deleted file mode 100644 index ee34a296b..000000000 --- a/ui/icon/svg/git-commit-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/git-commit.svg b/ui/icon/svg/git-commit.svg deleted file mode 100644 index aee6fc95f..000000000 --- a/ui/icon/svg/git-commit.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-compare-outline.svg b/ui/icon/svg/git-compare-outline.svg deleted file mode 100644 index 9cdf34b32..000000000 --- a/ui/icon/svg/git-compare-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-compare-sharp.svg b/ui/icon/svg/git-compare-sharp.svg deleted file mode 100644 index 0c31156b2..000000000 --- a/ui/icon/svg/git-compare-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-compare.svg b/ui/icon/svg/git-compare.svg deleted file mode 100644 index 08dcbec22..000000000 --- a/ui/icon/svg/git-compare.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-merge-outline.svg b/ui/icon/svg/git-merge-outline.svg deleted file mode 100644 index 04d601005..000000000 --- a/ui/icon/svg/git-merge-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-merge-sharp.svg b/ui/icon/svg/git-merge-sharp.svg deleted file mode 100644 index 8322e8ba7..000000000 --- a/ui/icon/svg/git-merge-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-merge.svg b/ui/icon/svg/git-merge.svg deleted file mode 100644 index 83bbb2604..000000000 --- a/ui/icon/svg/git-merge.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-network-outline.svg b/ui/icon/svg/git-network-outline.svg deleted file mode 100644 index 47e541933..000000000 --- a/ui/icon/svg/git-network-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-network-sharp.svg b/ui/icon/svg/git-network-sharp.svg deleted file mode 100644 index 40a93e09c..000000000 --- a/ui/icon/svg/git-network-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-network.svg b/ui/icon/svg/git-network.svg deleted file mode 100644 index 546b940fb..000000000 --- a/ui/icon/svg/git-network.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-pull-request-outline.svg b/ui/icon/svg/git-pull-request-outline.svg deleted file mode 100644 index 263527796..000000000 --- a/ui/icon/svg/git-pull-request-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-pull-request-sharp.svg b/ui/icon/svg/git-pull-request-sharp.svg deleted file mode 100644 index 654441afd..000000000 --- a/ui/icon/svg/git-pull-request-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/git-pull-request.svg b/ui/icon/svg/git-pull-request.svg deleted file mode 100644 index 10a6c63c7..000000000 --- a/ui/icon/svg/git-pull-request.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/glasses-outline.svg b/ui/icon/svg/glasses-outline.svg deleted file mode 100644 index 0c9956c9f..000000000 --- a/ui/icon/svg/glasses-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/glasses-sharp.svg b/ui/icon/svg/glasses-sharp.svg deleted file mode 100644 index eab18d0b5..000000000 --- a/ui/icon/svg/glasses-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/glasses.svg b/ui/icon/svg/glasses.svg deleted file mode 100644 index 1b773efe4..000000000 --- a/ui/icon/svg/glasses.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/globe-outline.svg b/ui/icon/svg/globe-outline.svg deleted file mode 100644 index bd43d6430..000000000 --- a/ui/icon/svg/globe-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/globe-sharp.svg b/ui/icon/svg/globe-sharp.svg deleted file mode 100644 index 777009ac2..000000000 --- a/ui/icon/svg/globe-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/globe.svg b/ui/icon/svg/globe.svg deleted file mode 100644 index d61095b0d..000000000 --- a/ui/icon/svg/globe.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/golf-outline.svg b/ui/icon/svg/golf-outline.svg deleted file mode 100644 index cc3f5867d..000000000 --- a/ui/icon/svg/golf-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/golf-sharp.svg b/ui/icon/svg/golf-sharp.svg deleted file mode 100644 index abef52771..000000000 --- a/ui/icon/svg/golf-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/golf.svg b/ui/icon/svg/golf.svg deleted file mode 100644 index ba161344d..000000000 --- a/ui/icon/svg/golf.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/grid-outline.svg b/ui/icon/svg/grid-outline.svg deleted file mode 100644 index d97369ba9..000000000 --- a/ui/icon/svg/grid-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/grid-sharp.svg b/ui/icon/svg/grid-sharp.svg deleted file mode 100644 index 365712902..000000000 --- a/ui/icon/svg/grid-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/grid.svg b/ui/icon/svg/grid.svg deleted file mode 100644 index 7637b2a58..000000000 --- a/ui/icon/svg/grid.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hammer-outline.svg b/ui/icon/svg/hammer-outline.svg deleted file mode 100644 index 1bae4995f..000000000 --- a/ui/icon/svg/hammer-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hammer-sharp.svg b/ui/icon/svg/hammer-sharp.svg deleted file mode 100644 index 3e3420eee..000000000 --- a/ui/icon/svg/hammer-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hammer.svg b/ui/icon/svg/hammer.svg deleted file mode 100644 index fe3f711cf..000000000 --- a/ui/icon/svg/hammer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hand-left-outline.svg b/ui/icon/svg/hand-left-outline.svg deleted file mode 100644 index 9dc08b8d0..000000000 --- a/ui/icon/svg/hand-left-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hand-left-sharp.svg b/ui/icon/svg/hand-left-sharp.svg deleted file mode 100644 index f89142fb9..000000000 --- a/ui/icon/svg/hand-left-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hand-left.svg b/ui/icon/svg/hand-left.svg deleted file mode 100644 index 2ee4439cb..000000000 --- a/ui/icon/svg/hand-left.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hand-right-outline.svg b/ui/icon/svg/hand-right-outline.svg deleted file mode 100644 index 8ef1348ae..000000000 --- a/ui/icon/svg/hand-right-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hand-right-sharp.svg b/ui/icon/svg/hand-right-sharp.svg deleted file mode 100644 index 8511c4478..000000000 --- a/ui/icon/svg/hand-right-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hand-right.svg b/ui/icon/svg/hand-right.svg deleted file mode 100644 index 30d40dc8b..000000000 --- a/ui/icon/svg/hand-right.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/happy-outline.svg b/ui/icon/svg/happy-outline.svg deleted file mode 100644 index 78e0f48b9..000000000 --- a/ui/icon/svg/happy-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/happy-sharp.svg b/ui/icon/svg/happy-sharp.svg deleted file mode 100644 index 6dcdcee09..000000000 --- a/ui/icon/svg/happy-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/happy.svg b/ui/icon/svg/happy.svg deleted file mode 100644 index 99978d698..000000000 --- a/ui/icon/svg/happy.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hardware-chip-outline.svg b/ui/icon/svg/hardware-chip-outline.svg deleted file mode 100644 index 6df5f8a45..000000000 --- a/ui/icon/svg/hardware-chip-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hardware-chip-sharp.svg b/ui/icon/svg/hardware-chip-sharp.svg deleted file mode 100644 index 41aac22b4..000000000 --- a/ui/icon/svg/hardware-chip-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hardware-chip.svg b/ui/icon/svg/hardware-chip.svg deleted file mode 100644 index a490e1dbe..000000000 --- a/ui/icon/svg/hardware-chip.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/headset-outline.svg b/ui/icon/svg/headset-outline.svg deleted file mode 100644 index e9059e525..000000000 --- a/ui/icon/svg/headset-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/headset-sharp.svg b/ui/icon/svg/headset-sharp.svg deleted file mode 100644 index 958bbe6db..000000000 --- a/ui/icon/svg/headset-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/headset.svg b/ui/icon/svg/headset.svg deleted file mode 100644 index f87e5dc1b..000000000 --- a/ui/icon/svg/headset.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-circle-outline.svg b/ui/icon/svg/heart-circle-outline.svg deleted file mode 100644 index b77736981..000000000 --- a/ui/icon/svg/heart-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-circle-sharp.svg b/ui/icon/svg/heart-circle-sharp.svg deleted file mode 100644 index 5ba51b762..000000000 --- a/ui/icon/svg/heart-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/heart-circle.svg b/ui/icon/svg/heart-circle.svg deleted file mode 100644 index 26da0f211..000000000 --- a/ui/icon/svg/heart-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/heart-dislike-circle-outline.svg b/ui/icon/svg/heart-dislike-circle-outline.svg deleted file mode 100644 index e4dfe8716..000000000 --- a/ui/icon/svg/heart-dislike-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-dislike-circle-sharp.svg b/ui/icon/svg/heart-dislike-circle-sharp.svg deleted file mode 100644 index b4fb493bf..000000000 --- a/ui/icon/svg/heart-dislike-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/heart-dislike-circle.svg b/ui/icon/svg/heart-dislike-circle.svg deleted file mode 100644 index 3e72266f3..000000000 --- a/ui/icon/svg/heart-dislike-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-dislike-outline.svg b/ui/icon/svg/heart-dislike-outline.svg deleted file mode 100644 index e245a4e60..000000000 --- a/ui/icon/svg/heart-dislike-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-dislike-sharp.svg b/ui/icon/svg/heart-dislike-sharp.svg deleted file mode 100644 index d10cfafa4..000000000 --- a/ui/icon/svg/heart-dislike-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/heart-dislike.svg b/ui/icon/svg/heart-dislike.svg deleted file mode 100644 index 20b40ff34..000000000 --- a/ui/icon/svg/heart-dislike.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-half-outline.svg b/ui/icon/svg/heart-half-outline.svg deleted file mode 100644 index c34828423..000000000 --- a/ui/icon/svg/heart-half-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-half-sharp.svg b/ui/icon/svg/heart-half-sharp.svg deleted file mode 100644 index c81ac1e6d..000000000 --- a/ui/icon/svg/heart-half-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-half.svg b/ui/icon/svg/heart-half.svg deleted file mode 100644 index c34828423..000000000 --- a/ui/icon/svg/heart-half.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-outline.svg b/ui/icon/svg/heart-outline.svg deleted file mode 100644 index abe5bd92b..000000000 --- a/ui/icon/svg/heart-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/heart-sharp.svg b/ui/icon/svg/heart-sharp.svg deleted file mode 100644 index 3410a928e..000000000 --- a/ui/icon/svg/heart-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/heart.svg b/ui/icon/svg/heart.svg deleted file mode 100644 index 946cba5e8..000000000 --- a/ui/icon/svg/heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/help-buoy-outline.svg b/ui/icon/svg/help-buoy-outline.svg deleted file mode 100644 index 5f792ac74..000000000 --- a/ui/icon/svg/help-buoy-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-buoy-sharp.svg b/ui/icon/svg/help-buoy-sharp.svg deleted file mode 100644 index 76885897e..000000000 --- a/ui/icon/svg/help-buoy-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-buoy.svg b/ui/icon/svg/help-buoy.svg deleted file mode 100644 index 6b37aa6d2..000000000 --- a/ui/icon/svg/help-buoy.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-circle-outline.svg b/ui/icon/svg/help-circle-outline.svg deleted file mode 100644 index 594f42a9f..000000000 --- a/ui/icon/svg/help-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-circle-sharp.svg b/ui/icon/svg/help-circle-sharp.svg deleted file mode 100644 index bb25b4142..000000000 --- a/ui/icon/svg/help-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-circle.svg b/ui/icon/svg/help-circle.svg deleted file mode 100644 index 5572c0103..000000000 --- a/ui/icon/svg/help-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-outline.svg b/ui/icon/svg/help-outline.svg deleted file mode 100644 index a977f5306..000000000 --- a/ui/icon/svg/help-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help-sharp.svg b/ui/icon/svg/help-sharp.svg deleted file mode 100644 index 0d85aca78..000000000 --- a/ui/icon/svg/help-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/help.svg b/ui/icon/svg/help.svg deleted file mode 100644 index a977f5306..000000000 --- a/ui/icon/svg/help.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/home-outline.svg b/ui/icon/svg/home-outline.svg deleted file mode 100644 index 9772c2fbf..000000000 --- a/ui/icon/svg/home-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/home-sharp.svg b/ui/icon/svg/home-sharp.svg deleted file mode 100644 index c9eb23be7..000000000 --- a/ui/icon/svg/home-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/home.svg b/ui/icon/svg/home.svg deleted file mode 100644 index 8a19b9267..000000000 --- a/ui/icon/svg/home.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hourglass-outline.svg b/ui/icon/svg/hourglass-outline.svg deleted file mode 100644 index 8765c0b6c..000000000 --- a/ui/icon/svg/hourglass-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/hourglass-sharp.svg b/ui/icon/svg/hourglass-sharp.svg deleted file mode 100644 index c167f2d9f..000000000 --- a/ui/icon/svg/hourglass-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/hourglass.svg b/ui/icon/svg/hourglass.svg deleted file mode 100644 index 90c9b8c50..000000000 --- a/ui/icon/svg/hourglass.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ice-cream-outline.svg b/ui/icon/svg/ice-cream-outline.svg deleted file mode 100644 index 1b807912b..000000000 --- a/ui/icon/svg/ice-cream-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ice-cream-sharp.svg b/ui/icon/svg/ice-cream-sharp.svg deleted file mode 100644 index 91965b92b..000000000 --- a/ui/icon/svg/ice-cream-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ice-cream.svg b/ui/icon/svg/ice-cream.svg deleted file mode 100644 index 6e65094ca..000000000 --- a/ui/icon/svg/ice-cream.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/id-card-outline.svg b/ui/icon/svg/id-card-outline.svg deleted file mode 100644 index 1ecf2c353..000000000 --- a/ui/icon/svg/id-card-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/id-card-sharp.svg b/ui/icon/svg/id-card-sharp.svg deleted file mode 100644 index e0e6db6db..000000000 --- a/ui/icon/svg/id-card-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/id-card.svg b/ui/icon/svg/id-card.svg deleted file mode 100644 index cb897c832..000000000 --- a/ui/icon/svg/id-card.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/image-outline.svg b/ui/icon/svg/image-outline.svg deleted file mode 100644 index 104886428..000000000 --- a/ui/icon/svg/image-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/image-sharp.svg b/ui/icon/svg/image-sharp.svg deleted file mode 100644 index 06bc104a8..000000000 --- a/ui/icon/svg/image-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/image.svg b/ui/icon/svg/image.svg deleted file mode 100644 index 505f885f7..000000000 --- a/ui/icon/svg/image.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/images-outline.svg b/ui/icon/svg/images-outline.svg deleted file mode 100644 index d70ebded4..000000000 --- a/ui/icon/svg/images-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/images-sharp.svg b/ui/icon/svg/images-sharp.svg deleted file mode 100644 index c66765ed5..000000000 --- a/ui/icon/svg/images-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/images.svg b/ui/icon/svg/images.svg deleted file mode 100644 index f57f2d40f..000000000 --- a/ui/icon/svg/images.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/infinite-outline.svg b/ui/icon/svg/infinite-outline.svg deleted file mode 100644 index 639238984..000000000 --- a/ui/icon/svg/infinite-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/infinite-sharp.svg b/ui/icon/svg/infinite-sharp.svg deleted file mode 100644 index a5225b12b..000000000 --- a/ui/icon/svg/infinite-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/infinite.svg b/ui/icon/svg/infinite.svg deleted file mode 100644 index 51b456b61..000000000 --- a/ui/icon/svg/infinite.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/information-circle-outline.svg b/ui/icon/svg/information-circle-outline.svg deleted file mode 100644 index b0e3eeae7..000000000 --- a/ui/icon/svg/information-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/information-circle-sharp.svg b/ui/icon/svg/information-circle-sharp.svg deleted file mode 100644 index e1d32f419..000000000 --- a/ui/icon/svg/information-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/information-circle.svg b/ui/icon/svg/information-circle.svg deleted file mode 100644 index 967fd0adf..000000000 --- a/ui/icon/svg/information-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/information-outline.svg b/ui/icon/svg/information-outline.svg deleted file mode 100644 index 615b0dc03..000000000 --- a/ui/icon/svg/information-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/information-sharp.svg b/ui/icon/svg/information-sharp.svg deleted file mode 100644 index 5d7600102..000000000 --- a/ui/icon/svg/information-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/information.svg b/ui/icon/svg/information.svg deleted file mode 100644 index 615b0dc03..000000000 --- a/ui/icon/svg/information.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/invert-mode-outline.svg b/ui/icon/svg/invert-mode-outline.svg deleted file mode 100644 index 5422b7564..000000000 --- a/ui/icon/svg/invert-mode-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/invert-mode-sharp.svg b/ui/icon/svg/invert-mode-sharp.svg deleted file mode 100644 index b30cfc023..000000000 --- a/ui/icon/svg/invert-mode-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/invert-mode.svg b/ui/icon/svg/invert-mode.svg deleted file mode 100644 index b4b000f2d..000000000 --- a/ui/icon/svg/invert-mode.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/journal-outline.svg b/ui/icon/svg/journal-outline.svg deleted file mode 100644 index 4957bd551..000000000 --- a/ui/icon/svg/journal-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/journal-sharp.svg b/ui/icon/svg/journal-sharp.svg deleted file mode 100644 index db1dc7759..000000000 --- a/ui/icon/svg/journal-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/journal.svg b/ui/icon/svg/journal.svg deleted file mode 100644 index 6ea86c826..000000000 --- a/ui/icon/svg/journal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/key-outline.svg b/ui/icon/svg/key-outline.svg deleted file mode 100644 index 9e8b9606b..000000000 --- a/ui/icon/svg/key-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/key-sharp.svg b/ui/icon/svg/key-sharp.svg deleted file mode 100644 index bd7148610..000000000 --- a/ui/icon/svg/key-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/key.svg b/ui/icon/svg/key.svg deleted file mode 100644 index 245f4a829..000000000 --- a/ui/icon/svg/key.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/keypad-outline.svg b/ui/icon/svg/keypad-outline.svg deleted file mode 100644 index f64ccf457..000000000 --- a/ui/icon/svg/keypad-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/keypad-sharp.svg b/ui/icon/svg/keypad-sharp.svg deleted file mode 100644 index 2f869fa74..000000000 --- a/ui/icon/svg/keypad-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/keypad.svg b/ui/icon/svg/keypad.svg deleted file mode 100644 index bc3562c44..000000000 --- a/ui/icon/svg/keypad.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/language-outline.svg b/ui/icon/svg/language-outline.svg deleted file mode 100644 index 2b9634dae..000000000 --- a/ui/icon/svg/language-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/language-sharp.svg b/ui/icon/svg/language-sharp.svg deleted file mode 100644 index d456ae5bb..000000000 --- a/ui/icon/svg/language-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/language.svg b/ui/icon/svg/language.svg deleted file mode 100644 index 3cd4b2831..000000000 --- a/ui/icon/svg/language.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/laptop-outline.svg b/ui/icon/svg/laptop-outline.svg deleted file mode 100644 index 5fd3df86d..000000000 --- a/ui/icon/svg/laptop-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/laptop-sharp.svg b/ui/icon/svg/laptop-sharp.svg deleted file mode 100644 index de37e9f76..000000000 --- a/ui/icon/svg/laptop-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/laptop.svg b/ui/icon/svg/laptop.svg deleted file mode 100644 index b1dae82b2..000000000 --- a/ui/icon/svg/laptop.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/layers-outline.svg b/ui/icon/svg/layers-outline.svg deleted file mode 100644 index a8bfc5c63..000000000 --- a/ui/icon/svg/layers-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/layers-sharp.svg b/ui/icon/svg/layers-sharp.svg deleted file mode 100644 index 89b4af76c..000000000 --- a/ui/icon/svg/layers-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/layers.svg b/ui/icon/svg/layers.svg deleted file mode 100644 index f7527a782..000000000 --- a/ui/icon/svg/layers.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/leaf-outline.svg b/ui/icon/svg/leaf-outline.svg deleted file mode 100644 index 52e6c138b..000000000 --- a/ui/icon/svg/leaf-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/leaf-sharp.svg b/ui/icon/svg/leaf-sharp.svg deleted file mode 100644 index e5aca1bb2..000000000 --- a/ui/icon/svg/leaf-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/leaf.svg b/ui/icon/svg/leaf.svg deleted file mode 100644 index a5ca759df..000000000 --- a/ui/icon/svg/leaf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/library-outline.svg b/ui/icon/svg/library-outline.svg deleted file mode 100644 index b7ed26c32..000000000 --- a/ui/icon/svg/library-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/library-sharp.svg b/ui/icon/svg/library-sharp.svg deleted file mode 100644 index 21a7deac8..000000000 --- a/ui/icon/svg/library-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/library.svg b/ui/icon/svg/library.svg deleted file mode 100644 index e0bdc3f3e..000000000 --- a/ui/icon/svg/library.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/link-outline.svg b/ui/icon/svg/link-outline.svg deleted file mode 100644 index 02e970d7b..000000000 --- a/ui/icon/svg/link-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/link-sharp.svg b/ui/icon/svg/link-sharp.svg deleted file mode 100644 index 8e6135634..000000000 --- a/ui/icon/svg/link-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/link.svg b/ui/icon/svg/link.svg deleted file mode 100644 index 249926a58..000000000 --- a/ui/icon/svg/link.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/list-circle-outline.svg b/ui/icon/svg/list-circle-outline.svg deleted file mode 100644 index 2979d3aaa..000000000 --- a/ui/icon/svg/list-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/list-circle-sharp.svg b/ui/icon/svg/list-circle-sharp.svg deleted file mode 100644 index df5977dbd..000000000 --- a/ui/icon/svg/list-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/list-circle.svg b/ui/icon/svg/list-circle.svg deleted file mode 100644 index 4c7e63ea4..000000000 --- a/ui/icon/svg/list-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/list-outline.svg b/ui/icon/svg/list-outline.svg deleted file mode 100644 index 544b357bf..000000000 --- a/ui/icon/svg/list-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/list-sharp.svg b/ui/icon/svg/list-sharp.svg deleted file mode 100644 index 713db148f..000000000 --- a/ui/icon/svg/list-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/list.svg b/ui/icon/svg/list.svg deleted file mode 100644 index a5fe274bd..000000000 --- a/ui/icon/svg/list.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/locate-outline.svg b/ui/icon/svg/locate-outline.svg deleted file mode 100644 index 166772a35..000000000 --- a/ui/icon/svg/locate-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/locate-sharp.svg b/ui/icon/svg/locate-sharp.svg deleted file mode 100644 index c87e2421e..000000000 --- a/ui/icon/svg/locate-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/locate.svg b/ui/icon/svg/locate.svg deleted file mode 100644 index 3ac0b1eea..000000000 --- a/ui/icon/svg/locate.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/location-outline.svg b/ui/icon/svg/location-outline.svg deleted file mode 100644 index 34ce94f41..000000000 --- a/ui/icon/svg/location-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/location-sharp.svg b/ui/icon/svg/location-sharp.svg deleted file mode 100644 index 7ad45855b..000000000 --- a/ui/icon/svg/location-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/location.svg b/ui/icon/svg/location.svg deleted file mode 100644 index d0df74b40..000000000 --- a/ui/icon/svg/location.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/lock-closed-outline.svg b/ui/icon/svg/lock-closed-outline.svg deleted file mode 100644 index a8a1f10e4..000000000 --- a/ui/icon/svg/lock-closed-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/lock-closed-sharp.svg b/ui/icon/svg/lock-closed-sharp.svg deleted file mode 100644 index 61fbccee4..000000000 --- a/ui/icon/svg/lock-closed-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/lock-closed.svg b/ui/icon/svg/lock-closed.svg deleted file mode 100644 index 5aa4c0419..000000000 --- a/ui/icon/svg/lock-closed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/lock-open-outline.svg b/ui/icon/svg/lock-open-outline.svg deleted file mode 100644 index a5162382c..000000000 --- a/ui/icon/svg/lock-open-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/lock-open-sharp.svg b/ui/icon/svg/lock-open-sharp.svg deleted file mode 100644 index 692f137be..000000000 --- a/ui/icon/svg/lock-open-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/lock-open.svg b/ui/icon/svg/lock-open.svg deleted file mode 100644 index f07edf86a..000000000 --- a/ui/icon/svg/lock-open.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/log-in-outline.svg b/ui/icon/svg/log-in-outline.svg deleted file mode 100644 index 419c5ae2d..000000000 --- a/ui/icon/svg/log-in-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/log-in-sharp.svg b/ui/icon/svg/log-in-sharp.svg deleted file mode 100644 index 1339109fa..000000000 --- a/ui/icon/svg/log-in-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/log-in.svg b/ui/icon/svg/log-in.svg deleted file mode 100644 index e479fcfba..000000000 --- a/ui/icon/svg/log-in.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/log-out-outline.svg b/ui/icon/svg/log-out-outline.svg deleted file mode 100644 index 1f326c81b..000000000 --- a/ui/icon/svg/log-out-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/log-out-sharp.svg b/ui/icon/svg/log-out-sharp.svg deleted file mode 100644 index f0e6655dd..000000000 --- a/ui/icon/svg/log-out-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/log-out.svg b/ui/icon/svg/log-out.svg deleted file mode 100644 index d743ab29c..000000000 --- a/ui/icon/svg/log-out.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-alipay.svg b/ui/icon/svg/logo-alipay.svg deleted file mode 100644 index b2d9f8d02..000000000 --- a/ui/icon/svg/logo-alipay.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-amazon.svg b/ui/icon/svg/logo-amazon.svg deleted file mode 100644 index f47f9bf71..000000000 --- a/ui/icon/svg/logo-amazon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-amplify.svg b/ui/icon/svg/logo-amplify.svg deleted file mode 100644 index ad22e0d40..000000000 --- a/ui/icon/svg/logo-amplify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-android.svg b/ui/icon/svg/logo-android.svg deleted file mode 100644 index 155f89e29..000000000 --- a/ui/icon/svg/logo-android.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-angular.svg b/ui/icon/svg/logo-angular.svg deleted file mode 100644 index 64305ae49..000000000 --- a/ui/icon/svg/logo-angular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-apple-appstore.svg b/ui/icon/svg/logo-apple-appstore.svg deleted file mode 100644 index a9936583c..000000000 --- a/ui/icon/svg/logo-apple-appstore.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-apple-ar.svg b/ui/icon/svg/logo-apple-ar.svg deleted file mode 100644 index dcfc472fb..000000000 --- a/ui/icon/svg/logo-apple-ar.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-apple.svg b/ui/icon/svg/logo-apple.svg deleted file mode 100644 index 0c7958280..000000000 --- a/ui/icon/svg/logo-apple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-behance.svg b/ui/icon/svg/logo-behance.svg deleted file mode 100644 index 125bc23c8..000000000 --- a/ui/icon/svg/logo-behance.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-bitbucket.svg b/ui/icon/svg/logo-bitbucket.svg deleted file mode 100644 index 695ca776d..000000000 --- a/ui/icon/svg/logo-bitbucket.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-bitcoin.svg b/ui/icon/svg/logo-bitcoin.svg deleted file mode 100644 index 4d50693b7..000000000 --- a/ui/icon/svg/logo-bitcoin.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-buffer.svg b/ui/icon/svg/logo-buffer.svg deleted file mode 100644 index 28804745c..000000000 --- a/ui/icon/svg/logo-buffer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-capacitor.svg b/ui/icon/svg/logo-capacitor.svg deleted file mode 100644 index d8ca0255f..000000000 --- a/ui/icon/svg/logo-capacitor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-chrome.svg b/ui/icon/svg/logo-chrome.svg deleted file mode 100644 index 1f4ee647d..000000000 --- a/ui/icon/svg/logo-chrome.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-closed-captioning.svg b/ui/icon/svg/logo-closed-captioning.svg deleted file mode 100644 index 1c173d31d..000000000 --- a/ui/icon/svg/logo-closed-captioning.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-codepen.svg b/ui/icon/svg/logo-codepen.svg deleted file mode 100644 index 895dd50c7..000000000 --- a/ui/icon/svg/logo-codepen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-css3.svg b/ui/icon/svg/logo-css3.svg deleted file mode 100644 index 8b069ce30..000000000 --- a/ui/icon/svg/logo-css3.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-designernews.svg b/ui/icon/svg/logo-designernews.svg deleted file mode 100644 index dbd06f48e..000000000 --- a/ui/icon/svg/logo-designernews.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-deviantart.svg b/ui/icon/svg/logo-deviantart.svg deleted file mode 100644 index 09ad6fab8..000000000 --- a/ui/icon/svg/logo-deviantart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-discord.svg b/ui/icon/svg/logo-discord.svg deleted file mode 100644 index 5e8706e0a..000000000 --- a/ui/icon/svg/logo-discord.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-docker.svg b/ui/icon/svg/logo-docker.svg deleted file mode 100644 index f3ec921ba..000000000 --- a/ui/icon/svg/logo-docker.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-dribbble.svg b/ui/icon/svg/logo-dribbble.svg deleted file mode 100644 index c739bcabe..000000000 --- a/ui/icon/svg/logo-dribbble.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-dropbox.svg b/ui/icon/svg/logo-dropbox.svg deleted file mode 100644 index ac00dfbe1..000000000 --- a/ui/icon/svg/logo-dropbox.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-edge.svg b/ui/icon/svg/logo-edge.svg deleted file mode 100644 index 2eabf70a8..000000000 --- a/ui/icon/svg/logo-edge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-electron.svg b/ui/icon/svg/logo-electron.svg deleted file mode 100644 index c7343518f..000000000 --- a/ui/icon/svg/logo-electron.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-euro.svg b/ui/icon/svg/logo-euro.svg deleted file mode 100644 index d6e13c011..000000000 --- a/ui/icon/svg/logo-euro.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-facebook.svg b/ui/icon/svg/logo-facebook.svg deleted file mode 100644 index 34fe99dcb..000000000 --- a/ui/icon/svg/logo-facebook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-figma.svg b/ui/icon/svg/logo-figma.svg deleted file mode 100644 index e21f6a284..000000000 --- a/ui/icon/svg/logo-figma.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-firebase.svg b/ui/icon/svg/logo-firebase.svg deleted file mode 100644 index 6818de7af..000000000 --- a/ui/icon/svg/logo-firebase.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-firefox.svg b/ui/icon/svg/logo-firefox.svg deleted file mode 100644 index f1e60b93d..000000000 --- a/ui/icon/svg/logo-firefox.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-flickr.svg b/ui/icon/svg/logo-flickr.svg deleted file mode 100644 index 37ccd302d..000000000 --- a/ui/icon/svg/logo-flickr.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-foursquare.svg b/ui/icon/svg/logo-foursquare.svg deleted file mode 100644 index 7f278931b..000000000 --- a/ui/icon/svg/logo-foursquare.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-github.svg b/ui/icon/svg/logo-github.svg deleted file mode 100644 index 4cafefb0b..000000000 --- a/ui/icon/svg/logo-github.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-gitlab.svg b/ui/icon/svg/logo-gitlab.svg deleted file mode 100644 index 135390676..000000000 --- a/ui/icon/svg/logo-gitlab.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-google-playstore.svg b/ui/icon/svg/logo-google-playstore.svg deleted file mode 100644 index 7f21454ac..000000000 --- a/ui/icon/svg/logo-google-playstore.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-google.svg b/ui/icon/svg/logo-google.svg deleted file mode 100644 index 677b2d08b..000000000 --- a/ui/icon/svg/logo-google.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-hackernews.svg b/ui/icon/svg/logo-hackernews.svg deleted file mode 100644 index cffec25ff..000000000 --- a/ui/icon/svg/logo-hackernews.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-html5.svg b/ui/icon/svg/logo-html5.svg deleted file mode 100644 index 01375458c..000000000 --- a/ui/icon/svg/logo-html5.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-instagram.svg b/ui/icon/svg/logo-instagram.svg deleted file mode 100644 index bb5e9f7eb..000000000 --- a/ui/icon/svg/logo-instagram.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-ionic.svg b/ui/icon/svg/logo-ionic.svg deleted file mode 100644 index 677905d77..000000000 --- a/ui/icon/svg/logo-ionic.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-ionitron.svg b/ui/icon/svg/logo-ionitron.svg deleted file mode 100644 index 5f286fa07..000000000 --- a/ui/icon/svg/logo-ionitron.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-javascript.svg b/ui/icon/svg/logo-javascript.svg deleted file mode 100644 index 7d411b710..000000000 --- a/ui/icon/svg/logo-javascript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-laravel.svg b/ui/icon/svg/logo-laravel.svg deleted file mode 100644 index 21da6e205..000000000 --- a/ui/icon/svg/logo-laravel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-linkedin.svg b/ui/icon/svg/logo-linkedin.svg deleted file mode 100644 index 64a5c6094..000000000 --- a/ui/icon/svg/logo-linkedin.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-markdown.svg b/ui/icon/svg/logo-markdown.svg deleted file mode 100644 index 197449f5b..000000000 --- a/ui/icon/svg/logo-markdown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-mastodon.svg b/ui/icon/svg/logo-mastodon.svg deleted file mode 100644 index 83a99f83f..000000000 --- a/ui/icon/svg/logo-mastodon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-medium.svg b/ui/icon/svg/logo-medium.svg deleted file mode 100644 index 16971b3cd..000000000 --- a/ui/icon/svg/logo-medium.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-microsoft.svg b/ui/icon/svg/logo-microsoft.svg deleted file mode 100644 index 237e376ab..000000000 --- a/ui/icon/svg/logo-microsoft.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-no-smoking.svg b/ui/icon/svg/logo-no-smoking.svg deleted file mode 100644 index 2aa95f82a..000000000 --- a/ui/icon/svg/logo-no-smoking.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-nodejs.svg b/ui/icon/svg/logo-nodejs.svg deleted file mode 100644 index 77d171d1f..000000000 --- a/ui/icon/svg/logo-nodejs.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-npm.svg b/ui/icon/svg/logo-npm.svg deleted file mode 100644 index 8634301b8..000000000 --- a/ui/icon/svg/logo-npm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-octocat.svg b/ui/icon/svg/logo-octocat.svg deleted file mode 100644 index 353603e6e..000000000 --- a/ui/icon/svg/logo-octocat.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-paypal.svg b/ui/icon/svg/logo-paypal.svg deleted file mode 100644 index 8b1d2309c..000000000 --- a/ui/icon/svg/logo-paypal.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-pinterest.svg b/ui/icon/svg/logo-pinterest.svg deleted file mode 100644 index c573a91d7..000000000 --- a/ui/icon/svg/logo-pinterest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-playstation.svg b/ui/icon/svg/logo-playstation.svg deleted file mode 100644 index 3e0b5061e..000000000 --- a/ui/icon/svg/logo-playstation.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-pwa.svg b/ui/icon/svg/logo-pwa.svg deleted file mode 100644 index 8b4499052..000000000 --- a/ui/icon/svg/logo-pwa.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-python.svg b/ui/icon/svg/logo-python.svg deleted file mode 100644 index e21890af8..000000000 --- a/ui/icon/svg/logo-python.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-react.svg b/ui/icon/svg/logo-react.svg deleted file mode 100644 index 6366f8baf..000000000 --- a/ui/icon/svg/logo-react.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-reddit.svg b/ui/icon/svg/logo-reddit.svg deleted file mode 100644 index c274cd093..000000000 --- a/ui/icon/svg/logo-reddit.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-rss.svg b/ui/icon/svg/logo-rss.svg deleted file mode 100644 index 209972622..000000000 --- a/ui/icon/svg/logo-rss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-sass.svg b/ui/icon/svg/logo-sass.svg deleted file mode 100644 index 452f3b46f..000000000 --- a/ui/icon/svg/logo-sass.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-skype.svg b/ui/icon/svg/logo-skype.svg deleted file mode 100644 index 1e9c1a4ff..000000000 --- a/ui/icon/svg/logo-skype.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-slack.svg b/ui/icon/svg/logo-slack.svg deleted file mode 100644 index 1a8771737..000000000 --- a/ui/icon/svg/logo-slack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-snapchat.svg b/ui/icon/svg/logo-snapchat.svg deleted file mode 100644 index 6eb83aa99..000000000 --- a/ui/icon/svg/logo-snapchat.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-soundcloud.svg b/ui/icon/svg/logo-soundcloud.svg deleted file mode 100644 index 171329408..000000000 --- a/ui/icon/svg/logo-soundcloud.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-stackoverflow.svg b/ui/icon/svg/logo-stackoverflow.svg deleted file mode 100644 index 0837df650..000000000 --- a/ui/icon/svg/logo-stackoverflow.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-steam.svg b/ui/icon/svg/logo-steam.svg deleted file mode 100644 index 81f0f952b..000000000 --- a/ui/icon/svg/logo-steam.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-stencil.svg b/ui/icon/svg/logo-stencil.svg deleted file mode 100644 index 440676e75..000000000 --- a/ui/icon/svg/logo-stencil.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-tableau.svg b/ui/icon/svg/logo-tableau.svg deleted file mode 100644 index 525b6bf6c..000000000 --- a/ui/icon/svg/logo-tableau.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-tiktok.svg b/ui/icon/svg/logo-tiktok.svg deleted file mode 100644 index c448ffe7d..000000000 --- a/ui/icon/svg/logo-tiktok.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-tumblr.svg b/ui/icon/svg/logo-tumblr.svg deleted file mode 100644 index 4ddd3754f..000000000 --- a/ui/icon/svg/logo-tumblr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-tux.svg b/ui/icon/svg/logo-tux.svg deleted file mode 100644 index 7d883c696..000000000 --- a/ui/icon/svg/logo-tux.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-twitch.svg b/ui/icon/svg/logo-twitch.svg deleted file mode 100644 index 72780818b..000000000 --- a/ui/icon/svg/logo-twitch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-twitter.svg b/ui/icon/svg/logo-twitter.svg deleted file mode 100644 index 2ad344b55..000000000 --- a/ui/icon/svg/logo-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-usd.svg b/ui/icon/svg/logo-usd.svg deleted file mode 100644 index cdb02408d..000000000 --- a/ui/icon/svg/logo-usd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-venmo.svg b/ui/icon/svg/logo-venmo.svg deleted file mode 100644 index 93ffa504d..000000000 --- a/ui/icon/svg/logo-venmo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-vercel.svg b/ui/icon/svg/logo-vercel.svg deleted file mode 100644 index 503cb62f1..000000000 --- a/ui/icon/svg/logo-vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-vimeo.svg b/ui/icon/svg/logo-vimeo.svg deleted file mode 100644 index daa32bf9f..000000000 --- a/ui/icon/svg/logo-vimeo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-vk.svg b/ui/icon/svg/logo-vk.svg deleted file mode 100644 index 268caaae0..000000000 --- a/ui/icon/svg/logo-vk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-vue.svg b/ui/icon/svg/logo-vue.svg deleted file mode 100644 index a0553c1b8..000000000 --- a/ui/icon/svg/logo-vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-web-component.svg b/ui/icon/svg/logo-web-component.svg deleted file mode 100644 index cbcd7c4da..000000000 --- a/ui/icon/svg/logo-web-component.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-wechat.svg b/ui/icon/svg/logo-wechat.svg deleted file mode 100644 index 90ce2b3d4..000000000 --- a/ui/icon/svg/logo-wechat.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-whatsapp.svg b/ui/icon/svg/logo-whatsapp.svg deleted file mode 100644 index 9dec31c5b..000000000 --- a/ui/icon/svg/logo-whatsapp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-windows.svg b/ui/icon/svg/logo-windows.svg deleted file mode 100644 index a2cfb947b..000000000 --- a/ui/icon/svg/logo-windows.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-wordpress.svg b/ui/icon/svg/logo-wordpress.svg deleted file mode 100644 index 9015ed55d..000000000 --- a/ui/icon/svg/logo-wordpress.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-xbox.svg b/ui/icon/svg/logo-xbox.svg deleted file mode 100644 index 90b87909a..000000000 --- a/ui/icon/svg/logo-xbox.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-xing.svg b/ui/icon/svg/logo-xing.svg deleted file mode 100644 index a84e15fb6..000000000 --- a/ui/icon/svg/logo-xing.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-yahoo.svg b/ui/icon/svg/logo-yahoo.svg deleted file mode 100644 index 0df959eff..000000000 --- a/ui/icon/svg/logo-yahoo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/logo-yen.svg b/ui/icon/svg/logo-yen.svg deleted file mode 100644 index c66d6e2ba..000000000 --- a/ui/icon/svg/logo-yen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/logo-youtube.svg b/ui/icon/svg/logo-youtube.svg deleted file mode 100644 index d48cfd285..000000000 --- a/ui/icon/svg/logo-youtube.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/magnet-outline.svg b/ui/icon/svg/magnet-outline.svg deleted file mode 100644 index 0f925db9e..000000000 --- a/ui/icon/svg/magnet-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/magnet-sharp.svg b/ui/icon/svg/magnet-sharp.svg deleted file mode 100644 index 0cbfc7522..000000000 --- a/ui/icon/svg/magnet-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/magnet.svg b/ui/icon/svg/magnet.svg deleted file mode 100644 index 9cc3e0cc3..000000000 --- a/ui/icon/svg/magnet.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-open-outline.svg b/ui/icon/svg/mail-open-outline.svg deleted file mode 100644 index acef78185..000000000 --- a/ui/icon/svg/mail-open-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-open-sharp.svg b/ui/icon/svg/mail-open-sharp.svg deleted file mode 100644 index c5a8b3e2b..000000000 --- a/ui/icon/svg/mail-open-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-open.svg b/ui/icon/svg/mail-open.svg deleted file mode 100644 index b83ef3362..000000000 --- a/ui/icon/svg/mail-open.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-outline.svg b/ui/icon/svg/mail-outline.svg deleted file mode 100644 index 2eede48e1..000000000 --- a/ui/icon/svg/mail-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-sharp.svg b/ui/icon/svg/mail-sharp.svg deleted file mode 100644 index 74073607c..000000000 --- a/ui/icon/svg/mail-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-unread-outline.svg b/ui/icon/svg/mail-unread-outline.svg deleted file mode 100644 index ebd695c5a..000000000 --- a/ui/icon/svg/mail-unread-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-unread-sharp.svg b/ui/icon/svg/mail-unread-sharp.svg deleted file mode 100644 index 20d6eebfb..000000000 --- a/ui/icon/svg/mail-unread-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail-unread.svg b/ui/icon/svg/mail-unread.svg deleted file mode 100644 index 34bb821fd..000000000 --- a/ui/icon/svg/mail-unread.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mail.svg b/ui/icon/svg/mail.svg deleted file mode 100644 index 7395f9412..000000000 --- a/ui/icon/svg/mail.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/male-female-outline.svg b/ui/icon/svg/male-female-outline.svg deleted file mode 100644 index 4674705bd..000000000 --- a/ui/icon/svg/male-female-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/male-female-sharp.svg b/ui/icon/svg/male-female-sharp.svg deleted file mode 100644 index 9c9ec2935..000000000 --- a/ui/icon/svg/male-female-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/male-female.svg b/ui/icon/svg/male-female.svg deleted file mode 100644 index 214021447..000000000 --- a/ui/icon/svg/male-female.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/male-outline.svg b/ui/icon/svg/male-outline.svg deleted file mode 100644 index 22b6110b3..000000000 --- a/ui/icon/svg/male-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/male-sharp.svg b/ui/icon/svg/male-sharp.svg deleted file mode 100644 index b979e00d9..000000000 --- a/ui/icon/svg/male-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/male.svg b/ui/icon/svg/male.svg deleted file mode 100644 index d18ac762e..000000000 --- a/ui/icon/svg/male.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/man-outline.svg b/ui/icon/svg/man-outline.svg deleted file mode 100644 index f4b40b496..000000000 --- a/ui/icon/svg/man-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/man-sharp.svg b/ui/icon/svg/man-sharp.svg deleted file mode 100644 index b4c270279..000000000 --- a/ui/icon/svg/man-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/man.svg b/ui/icon/svg/man.svg deleted file mode 100644 index d420b622d..000000000 --- a/ui/icon/svg/man.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/map-outline.svg b/ui/icon/svg/map-outline.svg deleted file mode 100644 index 4fb63e4f2..000000000 --- a/ui/icon/svg/map-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/map-sharp.svg b/ui/icon/svg/map-sharp.svg deleted file mode 100644 index 8642626e2..000000000 --- a/ui/icon/svg/map-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/map.svg b/ui/icon/svg/map.svg deleted file mode 100644 index 4a45a9017..000000000 --- a/ui/icon/svg/map.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/medal-outline.svg b/ui/icon/svg/medal-outline.svg deleted file mode 100644 index 65a394165..000000000 --- a/ui/icon/svg/medal-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/medal-sharp.svg b/ui/icon/svg/medal-sharp.svg deleted file mode 100644 index 20354d58e..000000000 --- a/ui/icon/svg/medal-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/medal.svg b/ui/icon/svg/medal.svg deleted file mode 100644 index a84302ad8..000000000 --- a/ui/icon/svg/medal.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/medical-outline.svg b/ui/icon/svg/medical-outline.svg deleted file mode 100644 index b9ce78f33..000000000 --- a/ui/icon/svg/medical-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/medical-sharp.svg b/ui/icon/svg/medical-sharp.svg deleted file mode 100644 index 39189ca57..000000000 --- a/ui/icon/svg/medical-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/medical.svg b/ui/icon/svg/medical.svg deleted file mode 100644 index 399ffa81d..000000000 --- a/ui/icon/svg/medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/medkit-outline.svg b/ui/icon/svg/medkit-outline.svg deleted file mode 100644 index da29c5bec..000000000 --- a/ui/icon/svg/medkit-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/medkit-sharp.svg b/ui/icon/svg/medkit-sharp.svg deleted file mode 100644 index 33f908c04..000000000 --- a/ui/icon/svg/medkit-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/medkit.svg b/ui/icon/svg/medkit.svg deleted file mode 100644 index b5221d91e..000000000 --- a/ui/icon/svg/medkit.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/megaphone-outline.svg b/ui/icon/svg/megaphone-outline.svg deleted file mode 100644 index cd9ff057f..000000000 --- a/ui/icon/svg/megaphone-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/megaphone-sharp.svg b/ui/icon/svg/megaphone-sharp.svg deleted file mode 100644 index 3fe4c6e0d..000000000 --- a/ui/icon/svg/megaphone-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/megaphone.svg b/ui/icon/svg/megaphone.svg deleted file mode 100644 index 714c9481a..000000000 --- a/ui/icon/svg/megaphone.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/menu-outline.svg b/ui/icon/svg/menu-outline.svg deleted file mode 100644 index 8f7573f89..000000000 --- a/ui/icon/svg/menu-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/menu-sharp.svg b/ui/icon/svg/menu-sharp.svg deleted file mode 100644 index eb6685d9f..000000000 --- a/ui/icon/svg/menu-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/menu.svg b/ui/icon/svg/menu.svg deleted file mode 100644 index 34ae3985d..000000000 --- a/ui/icon/svg/menu.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-circle-outline.svg b/ui/icon/svg/mic-circle-outline.svg deleted file mode 100644 index cd4be48e1..000000000 --- a/ui/icon/svg/mic-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-circle-sharp.svg b/ui/icon/svg/mic-circle-sharp.svg deleted file mode 100644 index e3cd177d8..000000000 --- a/ui/icon/svg/mic-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-circle.svg b/ui/icon/svg/mic-circle.svg deleted file mode 100644 index ae7bf2966..000000000 --- a/ui/icon/svg/mic-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-off-circle-outline.svg b/ui/icon/svg/mic-off-circle-outline.svg deleted file mode 100644 index 2a2700f5a..000000000 --- a/ui/icon/svg/mic-off-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-off-circle-sharp.svg b/ui/icon/svg/mic-off-circle-sharp.svg deleted file mode 100644 index 37e0b0436..000000000 --- a/ui/icon/svg/mic-off-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-off-circle.svg b/ui/icon/svg/mic-off-circle.svg deleted file mode 100644 index 32f1c1817..000000000 --- a/ui/icon/svg/mic-off-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-off-outline.svg b/ui/icon/svg/mic-off-outline.svg deleted file mode 100644 index 7330e7ba1..000000000 --- a/ui/icon/svg/mic-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-off-sharp.svg b/ui/icon/svg/mic-off-sharp.svg deleted file mode 100644 index bec38a50e..000000000 --- a/ui/icon/svg/mic-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-off.svg b/ui/icon/svg/mic-off.svg deleted file mode 100644 index 8da7c4317..000000000 --- a/ui/icon/svg/mic-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-outline.svg b/ui/icon/svg/mic-outline.svg deleted file mode 100644 index 5efa1cd30..000000000 --- a/ui/icon/svg/mic-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic-sharp.svg b/ui/icon/svg/mic-sharp.svg deleted file mode 100644 index 6e26c1eaa..000000000 --- a/ui/icon/svg/mic-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/mic.svg b/ui/icon/svg/mic.svg deleted file mode 100644 index 7124e3b68..000000000 --- a/ui/icon/svg/mic.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/moon-outline.svg b/ui/icon/svg/moon-outline.svg deleted file mode 100644 index f1b18b49c..000000000 --- a/ui/icon/svg/moon-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/moon-sharp.svg b/ui/icon/svg/moon-sharp.svg deleted file mode 100644 index a55f3507f..000000000 --- a/ui/icon/svg/moon-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/moon.svg b/ui/icon/svg/moon.svg deleted file mode 100644 index 348d366d0..000000000 --- a/ui/icon/svg/moon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/move-outline.svg b/ui/icon/svg/move-outline.svg deleted file mode 100644 index e980ee9e0..000000000 --- a/ui/icon/svg/move-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/move-sharp.svg b/ui/icon/svg/move-sharp.svg deleted file mode 100644 index a28e76028..000000000 --- a/ui/icon/svg/move-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/move.svg b/ui/icon/svg/move.svg deleted file mode 100644 index e980ee9e0..000000000 --- a/ui/icon/svg/move.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/musical-note-outline.svg b/ui/icon/svg/musical-note-outline.svg deleted file mode 100644 index 010d3c84d..000000000 --- a/ui/icon/svg/musical-note-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/musical-note-sharp.svg b/ui/icon/svg/musical-note-sharp.svg deleted file mode 100644 index d1941d42a..000000000 --- a/ui/icon/svg/musical-note-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/musical-note.svg b/ui/icon/svg/musical-note.svg deleted file mode 100644 index 885f2ebda..000000000 --- a/ui/icon/svg/musical-note.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/musical-notes-outline.svg b/ui/icon/svg/musical-notes-outline.svg deleted file mode 100644 index 614f4e66c..000000000 --- a/ui/icon/svg/musical-notes-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/musical-notes-sharp.svg b/ui/icon/svg/musical-notes-sharp.svg deleted file mode 100644 index 6ac46b466..000000000 --- a/ui/icon/svg/musical-notes-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/musical-notes.svg b/ui/icon/svg/musical-notes.svg deleted file mode 100644 index bea97ca27..000000000 --- a/ui/icon/svg/musical-notes.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/navigate-circle-outline.svg b/ui/icon/svg/navigate-circle-outline.svg deleted file mode 100644 index 01fe6d867..000000000 --- a/ui/icon/svg/navigate-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/navigate-circle-sharp.svg b/ui/icon/svg/navigate-circle-sharp.svg deleted file mode 100644 index 4c1dbb207..000000000 --- a/ui/icon/svg/navigate-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/navigate-circle.svg b/ui/icon/svg/navigate-circle.svg deleted file mode 100644 index f46580c3e..000000000 --- a/ui/icon/svg/navigate-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/navigate-outline.svg b/ui/icon/svg/navigate-outline.svg deleted file mode 100644 index a432ec2a3..000000000 --- a/ui/icon/svg/navigate-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/navigate-sharp.svg b/ui/icon/svg/navigate-sharp.svg deleted file mode 100644 index b678fb220..000000000 --- a/ui/icon/svg/navigate-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/navigate.svg b/ui/icon/svg/navigate.svg deleted file mode 100644 index 5feb062af..000000000 --- a/ui/icon/svg/navigate.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/newspaper-outline.svg b/ui/icon/svg/newspaper-outline.svg deleted file mode 100644 index 5861b566b..000000000 --- a/ui/icon/svg/newspaper-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/newspaper-sharp.svg b/ui/icon/svg/newspaper-sharp.svg deleted file mode 100644 index 09a7aaefd..000000000 --- a/ui/icon/svg/newspaper-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/newspaper.svg b/ui/icon/svg/newspaper.svg deleted file mode 100644 index 1a57c75bb..000000000 --- a/ui/icon/svg/newspaper.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-circle-outline.svg b/ui/icon/svg/notifications-circle-outline.svg deleted file mode 100644 index 8ee41f70f..000000000 --- a/ui/icon/svg/notifications-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-circle-sharp.svg b/ui/icon/svg/notifications-circle-sharp.svg deleted file mode 100644 index b6c09bbee..000000000 --- a/ui/icon/svg/notifications-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/notifications-circle.svg b/ui/icon/svg/notifications-circle.svg deleted file mode 100644 index 81c21f017..000000000 --- a/ui/icon/svg/notifications-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-off-circle-outline.svg b/ui/icon/svg/notifications-off-circle-outline.svg deleted file mode 100644 index 923f9807a..000000000 --- a/ui/icon/svg/notifications-off-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-off-circle-sharp.svg b/ui/icon/svg/notifications-off-circle-sharp.svg deleted file mode 100644 index f121c17a9..000000000 --- a/ui/icon/svg/notifications-off-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/notifications-off-circle.svg b/ui/icon/svg/notifications-off-circle.svg deleted file mode 100644 index 0baf08af8..000000000 --- a/ui/icon/svg/notifications-off-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-off-outline.svg b/ui/icon/svg/notifications-off-outline.svg deleted file mode 100644 index b568861df..000000000 --- a/ui/icon/svg/notifications-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-off-sharp.svg b/ui/icon/svg/notifications-off-sharp.svg deleted file mode 100644 index 502c61cef..000000000 --- a/ui/icon/svg/notifications-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-off.svg b/ui/icon/svg/notifications-off.svg deleted file mode 100644 index ee47a3ed9..000000000 --- a/ui/icon/svg/notifications-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-outline.svg b/ui/icon/svg/notifications-outline.svg deleted file mode 100644 index 1d26fdf9f..000000000 --- a/ui/icon/svg/notifications-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/notifications-sharp.svg b/ui/icon/svg/notifications-sharp.svg deleted file mode 100644 index 438f6aa29..000000000 --- a/ui/icon/svg/notifications-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/notifications.svg b/ui/icon/svg/notifications.svg deleted file mode 100644 index 60852eaf9..000000000 --- a/ui/icon/svg/notifications.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/nuclear-outline.svg b/ui/icon/svg/nuclear-outline.svg deleted file mode 100644 index 618b92a91..000000000 --- a/ui/icon/svg/nuclear-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/nuclear-sharp.svg b/ui/icon/svg/nuclear-sharp.svg deleted file mode 100644 index 529d15c8a..000000000 --- a/ui/icon/svg/nuclear-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/nuclear.svg b/ui/icon/svg/nuclear.svg deleted file mode 100644 index b73bf7e0d..000000000 --- a/ui/icon/svg/nuclear.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/nutrition-outline.svg b/ui/icon/svg/nutrition-outline.svg deleted file mode 100644 index e4bfddaba..000000000 --- a/ui/icon/svg/nutrition-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/nutrition-sharp.svg b/ui/icon/svg/nutrition-sharp.svg deleted file mode 100644 index fe0a60aa7..000000000 --- a/ui/icon/svg/nutrition-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/nutrition.svg b/ui/icon/svg/nutrition.svg deleted file mode 100644 index aec56e39a..000000000 --- a/ui/icon/svg/nutrition.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/open-outline.svg b/ui/icon/svg/open-outline.svg deleted file mode 100644 index 2e9ce51d2..000000000 --- a/ui/icon/svg/open-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/open-sharp.svg b/ui/icon/svg/open-sharp.svg deleted file mode 100644 index 41c741f64..000000000 --- a/ui/icon/svg/open-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/open.svg b/ui/icon/svg/open.svg deleted file mode 100644 index 7cf778458..000000000 --- a/ui/icon/svg/open.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/options-outline.svg b/ui/icon/svg/options-outline.svg deleted file mode 100644 index 677e96acb..000000000 --- a/ui/icon/svg/options-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/options-sharp.svg b/ui/icon/svg/options-sharp.svg deleted file mode 100644 index d04f70769..000000000 --- a/ui/icon/svg/options-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/options.svg b/ui/icon/svg/options.svg deleted file mode 100644 index ae963f00c..000000000 --- a/ui/icon/svg/options.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/paper-plane-outline.svg b/ui/icon/svg/paper-plane-outline.svg deleted file mode 100644 index 830fc8e4d..000000000 --- a/ui/icon/svg/paper-plane-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/paper-plane-sharp.svg b/ui/icon/svg/paper-plane-sharp.svg deleted file mode 100644 index d8ebb522c..000000000 --- a/ui/icon/svg/paper-plane-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/paper-plane.svg b/ui/icon/svg/paper-plane.svg deleted file mode 100644 index bff6cffe6..000000000 --- a/ui/icon/svg/paper-plane.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/partly-sunny-outline.svg b/ui/icon/svg/partly-sunny-outline.svg deleted file mode 100644 index 71da9fb8e..000000000 --- a/ui/icon/svg/partly-sunny-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/partly-sunny-sharp.svg b/ui/icon/svg/partly-sunny-sharp.svg deleted file mode 100644 index 8904f88a7..000000000 --- a/ui/icon/svg/partly-sunny-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/partly-sunny.svg b/ui/icon/svg/partly-sunny.svg deleted file mode 100644 index 22bacd1c5..000000000 --- a/ui/icon/svg/partly-sunny.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pause-circle-outline.svg b/ui/icon/svg/pause-circle-outline.svg deleted file mode 100644 index 0a561a28d..000000000 --- a/ui/icon/svg/pause-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pause-circle-sharp.svg b/ui/icon/svg/pause-circle-sharp.svg deleted file mode 100644 index cebd512f8..000000000 --- a/ui/icon/svg/pause-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pause-circle.svg b/ui/icon/svg/pause-circle.svg deleted file mode 100644 index c2811c920..000000000 --- a/ui/icon/svg/pause-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pause-outline.svg b/ui/icon/svg/pause-outline.svg deleted file mode 100644 index 8719d60b8..000000000 --- a/ui/icon/svg/pause-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pause-sharp.svg b/ui/icon/svg/pause-sharp.svg deleted file mode 100644 index 1145b6e65..000000000 --- a/ui/icon/svg/pause-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pause.svg b/ui/icon/svg/pause.svg deleted file mode 100644 index cbaa400ea..000000000 --- a/ui/icon/svg/pause.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/paw-outline.svg b/ui/icon/svg/paw-outline.svg deleted file mode 100644 index 43f8537aa..000000000 --- a/ui/icon/svg/paw-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/paw-sharp.svg b/ui/icon/svg/paw-sharp.svg deleted file mode 100644 index 00de85035..000000000 --- a/ui/icon/svg/paw-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/paw.svg b/ui/icon/svg/paw.svg deleted file mode 100644 index 7a99fd649..000000000 --- a/ui/icon/svg/paw.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pencil-outline.svg b/ui/icon/svg/pencil-outline.svg deleted file mode 100644 index 75ed5e792..000000000 --- a/ui/icon/svg/pencil-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pencil-sharp.svg b/ui/icon/svg/pencil-sharp.svg deleted file mode 100644 index 52183080d..000000000 --- a/ui/icon/svg/pencil-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pencil.svg b/ui/icon/svg/pencil.svg deleted file mode 100644 index 3b02d0f46..000000000 --- a/ui/icon/svg/pencil.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/people-circle-outline.svg b/ui/icon/svg/people-circle-outline.svg deleted file mode 100644 index 7cce07e7f..000000000 --- a/ui/icon/svg/people-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/people-circle-sharp.svg b/ui/icon/svg/people-circle-sharp.svg deleted file mode 100644 index 147e8233a..000000000 --- a/ui/icon/svg/people-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/people-circle.svg b/ui/icon/svg/people-circle.svg deleted file mode 100644 index 0f19364b9..000000000 --- a/ui/icon/svg/people-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/people-outline.svg b/ui/icon/svg/people-outline.svg deleted file mode 100644 index 960f8490f..000000000 --- a/ui/icon/svg/people-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/people-sharp.svg b/ui/icon/svg/people-sharp.svg deleted file mode 100644 index cb6faf33e..000000000 --- a/ui/icon/svg/people-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/people.svg b/ui/icon/svg/people.svg deleted file mode 100644 index c13037254..000000000 --- a/ui/icon/svg/people.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-add-outline.svg b/ui/icon/svg/person-add-outline.svg deleted file mode 100644 index 64e5fbf2b..000000000 --- a/ui/icon/svg/person-add-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-add-sharp.svg b/ui/icon/svg/person-add-sharp.svg deleted file mode 100644 index c7bdae3de..000000000 --- a/ui/icon/svg/person-add-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/person-add.svg b/ui/icon/svg/person-add.svg deleted file mode 100644 index 2e4538863..000000000 --- a/ui/icon/svg/person-add.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-circle-outline.svg b/ui/icon/svg/person-circle-outline.svg deleted file mode 100644 index 6fb964574..000000000 --- a/ui/icon/svg/person-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-circle-sharp.svg b/ui/icon/svg/person-circle-sharp.svg deleted file mode 100644 index 4706e1c1d..000000000 --- a/ui/icon/svg/person-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-circle.svg b/ui/icon/svg/person-circle.svg deleted file mode 100644 index 472962a26..000000000 --- a/ui/icon/svg/person-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-outline.svg b/ui/icon/svg/person-outline.svg deleted file mode 100644 index 135d9a95d..000000000 --- a/ui/icon/svg/person-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-remove-outline.svg b/ui/icon/svg/person-remove-outline.svg deleted file mode 100644 index 066767d1e..000000000 --- a/ui/icon/svg/person-remove-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-remove-sharp.svg b/ui/icon/svg/person-remove-sharp.svg deleted file mode 100644 index 14f1d56e4..000000000 --- a/ui/icon/svg/person-remove-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/person-remove.svg b/ui/icon/svg/person-remove.svg deleted file mode 100644 index f12907897..000000000 --- a/ui/icon/svg/person-remove.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/person-sharp.svg b/ui/icon/svg/person-sharp.svg deleted file mode 100644 index cc8a5b24b..000000000 --- a/ui/icon/svg/person-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/person.svg b/ui/icon/svg/person.svg deleted file mode 100644 index a4eede97e..000000000 --- a/ui/icon/svg/person.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/phone-landscape-outline.svg b/ui/icon/svg/phone-landscape-outline.svg deleted file mode 100644 index 8af151763..000000000 --- a/ui/icon/svg/phone-landscape-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/phone-landscape-sharp.svg b/ui/icon/svg/phone-landscape-sharp.svg deleted file mode 100644 index 2084f3d36..000000000 --- a/ui/icon/svg/phone-landscape-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/phone-landscape.svg b/ui/icon/svg/phone-landscape.svg deleted file mode 100644 index cdbdbf7e3..000000000 --- a/ui/icon/svg/phone-landscape.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/phone-portrait-outline.svg b/ui/icon/svg/phone-portrait-outline.svg deleted file mode 100644 index eb3c3d010..000000000 --- a/ui/icon/svg/phone-portrait-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/phone-portrait-sharp.svg b/ui/icon/svg/phone-portrait-sharp.svg deleted file mode 100644 index 536e1887b..000000000 --- a/ui/icon/svg/phone-portrait-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/phone-portrait.svg b/ui/icon/svg/phone-portrait.svg deleted file mode 100644 index 3f5e42825..000000000 --- a/ui/icon/svg/phone-portrait.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pie-chart-outline.svg b/ui/icon/svg/pie-chart-outline.svg deleted file mode 100644 index c2350e9ef..000000000 --- a/ui/icon/svg/pie-chart-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pie-chart-sharp.svg b/ui/icon/svg/pie-chart-sharp.svg deleted file mode 100644 index 5813359dc..000000000 --- a/ui/icon/svg/pie-chart-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pie-chart.svg b/ui/icon/svg/pie-chart.svg deleted file mode 100644 index 65b213119..000000000 --- a/ui/icon/svg/pie-chart.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pin-outline.svg b/ui/icon/svg/pin-outline.svg deleted file mode 100644 index b7cf0d52b..000000000 --- a/ui/icon/svg/pin-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pin-sharp.svg b/ui/icon/svg/pin-sharp.svg deleted file mode 100644 index a66873c30..000000000 --- a/ui/icon/svg/pin-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pin.svg b/ui/icon/svg/pin.svg deleted file mode 100644 index de74a1194..000000000 --- a/ui/icon/svg/pin.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pint-outline.svg b/ui/icon/svg/pint-outline.svg deleted file mode 100644 index 9fa7cbd0e..000000000 --- a/ui/icon/svg/pint-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pint-sharp.svg b/ui/icon/svg/pint-sharp.svg deleted file mode 100644 index 8ac0fc6f0..000000000 --- a/ui/icon/svg/pint-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pint.svg b/ui/icon/svg/pint.svg deleted file mode 100644 index e38193738..000000000 --- a/ui/icon/svg/pint.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pizza-outline.svg b/ui/icon/svg/pizza-outline.svg deleted file mode 100644 index 1b9d85075..000000000 --- a/ui/icon/svg/pizza-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pizza-sharp.svg b/ui/icon/svg/pizza-sharp.svg deleted file mode 100644 index 5b58d2f29..000000000 --- a/ui/icon/svg/pizza-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pizza.svg b/ui/icon/svg/pizza.svg deleted file mode 100644 index f36fc9539..000000000 --- a/ui/icon/svg/pizza.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/planet-outline.svg b/ui/icon/svg/planet-outline.svg deleted file mode 100644 index a2008961b..000000000 --- a/ui/icon/svg/planet-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/planet-sharp.svg b/ui/icon/svg/planet-sharp.svg deleted file mode 100644 index 00084c8a6..000000000 --- a/ui/icon/svg/planet-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/planet.svg b/ui/icon/svg/planet.svg deleted file mode 100644 index ca6be09a7..000000000 --- a/ui/icon/svg/planet.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-back-circle-outline.svg b/ui/icon/svg/play-back-circle-outline.svg deleted file mode 100644 index c72215b32..000000000 --- a/ui/icon/svg/play-back-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-back-circle-sharp.svg b/ui/icon/svg/play-back-circle-sharp.svg deleted file mode 100644 index 7e3acf443..000000000 --- a/ui/icon/svg/play-back-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-back-circle.svg b/ui/icon/svg/play-back-circle.svg deleted file mode 100644 index d34194bfe..000000000 --- a/ui/icon/svg/play-back-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-back-outline.svg b/ui/icon/svg/play-back-outline.svg deleted file mode 100644 index 381a7001d..000000000 --- a/ui/icon/svg/play-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-back-sharp.svg b/ui/icon/svg/play-back-sharp.svg deleted file mode 100644 index eaf2eab2e..000000000 --- a/ui/icon/svg/play-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-back.svg b/ui/icon/svg/play-back.svg deleted file mode 100644 index 88e64e42a..000000000 --- a/ui/icon/svg/play-back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-circle-outline.svg b/ui/icon/svg/play-circle-outline.svg deleted file mode 100644 index 9718cea65..000000000 --- a/ui/icon/svg/play-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-circle-sharp.svg b/ui/icon/svg/play-circle-sharp.svg deleted file mode 100644 index cd563179a..000000000 --- a/ui/icon/svg/play-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-circle.svg b/ui/icon/svg/play-circle.svg deleted file mode 100644 index 512f272c4..000000000 --- a/ui/icon/svg/play-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-forward-circle-outline.svg b/ui/icon/svg/play-forward-circle-outline.svg deleted file mode 100644 index 0c994ee57..000000000 --- a/ui/icon/svg/play-forward-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-forward-circle-sharp.svg b/ui/icon/svg/play-forward-circle-sharp.svg deleted file mode 100644 index 4f65bc0f6..000000000 --- a/ui/icon/svg/play-forward-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-forward-circle.svg b/ui/icon/svg/play-forward-circle.svg deleted file mode 100644 index 3fcfff6ba..000000000 --- a/ui/icon/svg/play-forward-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-forward-outline.svg b/ui/icon/svg/play-forward-outline.svg deleted file mode 100644 index dbac22eac..000000000 --- a/ui/icon/svg/play-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-forward-sharp.svg b/ui/icon/svg/play-forward-sharp.svg deleted file mode 100644 index e53c4c79f..000000000 --- a/ui/icon/svg/play-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-forward.svg b/ui/icon/svg/play-forward.svg deleted file mode 100644 index db292c3cd..000000000 --- a/ui/icon/svg/play-forward.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-outline.svg b/ui/icon/svg/play-outline.svg deleted file mode 100644 index a457806f8..000000000 --- a/ui/icon/svg/play-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-sharp.svg b/ui/icon/svg/play-sharp.svg deleted file mode 100644 index 633e161f2..000000000 --- a/ui/icon/svg/play-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-skip-back-circle-outline.svg b/ui/icon/svg/play-skip-back-circle-outline.svg deleted file mode 100644 index 064eb4889..000000000 --- a/ui/icon/svg/play-skip-back-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-back-circle-sharp.svg b/ui/icon/svg/play-skip-back-circle-sharp.svg deleted file mode 100644 index 66fd38f36..000000000 --- a/ui/icon/svg/play-skip-back-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-skip-back-circle.svg b/ui/icon/svg/play-skip-back-circle.svg deleted file mode 100644 index b9d362892..000000000 --- a/ui/icon/svg/play-skip-back-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-back-outline.svg b/ui/icon/svg/play-skip-back-outline.svg deleted file mode 100644 index 88240f2dd..000000000 --- a/ui/icon/svg/play-skip-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-back-sharp.svg b/ui/icon/svg/play-skip-back-sharp.svg deleted file mode 100644 index df155bbb0..000000000 --- a/ui/icon/svg/play-skip-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-skip-back.svg b/ui/icon/svg/play-skip-back.svg deleted file mode 100644 index 0caad8056..000000000 --- a/ui/icon/svg/play-skip-back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-forward-circle-outline.svg b/ui/icon/svg/play-skip-forward-circle-outline.svg deleted file mode 100644 index 97c1e0293..000000000 --- a/ui/icon/svg/play-skip-forward-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-forward-circle-sharp.svg b/ui/icon/svg/play-skip-forward-circle-sharp.svg deleted file mode 100644 index 148d44be4..000000000 --- a/ui/icon/svg/play-skip-forward-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-skip-forward-circle.svg b/ui/icon/svg/play-skip-forward-circle.svg deleted file mode 100644 index 02a3e4e8d..000000000 --- a/ui/icon/svg/play-skip-forward-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-forward-outline.svg b/ui/icon/svg/play-skip-forward-outline.svg deleted file mode 100644 index 656397d1d..000000000 --- a/ui/icon/svg/play-skip-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play-skip-forward-sharp.svg b/ui/icon/svg/play-skip-forward-sharp.svg deleted file mode 100644 index 032ca1171..000000000 --- a/ui/icon/svg/play-skip-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/play-skip-forward.svg b/ui/icon/svg/play-skip-forward.svg deleted file mode 100644 index 34f75fea5..000000000 --- a/ui/icon/svg/play-skip-forward.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/play.svg b/ui/icon/svg/play.svg deleted file mode 100644 index 746bf345c..000000000 --- a/ui/icon/svg/play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/podium-outline.svg b/ui/icon/svg/podium-outline.svg deleted file mode 100644 index 081cf68e9..000000000 --- a/ui/icon/svg/podium-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/podium-sharp.svg b/ui/icon/svg/podium-sharp.svg deleted file mode 100644 index 280481e0f..000000000 --- a/ui/icon/svg/podium-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/podium.svg b/ui/icon/svg/podium.svg deleted file mode 100644 index ee6807317..000000000 --- a/ui/icon/svg/podium.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/power-outline.svg b/ui/icon/svg/power-outline.svg deleted file mode 100644 index b27be0fb7..000000000 --- a/ui/icon/svg/power-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/power-sharp.svg b/ui/icon/svg/power-sharp.svg deleted file mode 100644 index 1312a5d75..000000000 --- a/ui/icon/svg/power-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/power.svg b/ui/icon/svg/power.svg deleted file mode 100644 index ef8899594..000000000 --- a/ui/icon/svg/power.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pricetag-outline.svg b/ui/icon/svg/pricetag-outline.svg deleted file mode 100644 index d346561c5..000000000 --- a/ui/icon/svg/pricetag-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pricetag-sharp.svg b/ui/icon/svg/pricetag-sharp.svg deleted file mode 100644 index 0f216f185..000000000 --- a/ui/icon/svg/pricetag-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pricetag.svg b/ui/icon/svg/pricetag.svg deleted file mode 100644 index 396990c28..000000000 --- a/ui/icon/svg/pricetag.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pricetags-outline.svg b/ui/icon/svg/pricetags-outline.svg deleted file mode 100644 index 4b151c161..000000000 --- a/ui/icon/svg/pricetags-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pricetags-sharp.svg b/ui/icon/svg/pricetags-sharp.svg deleted file mode 100644 index 01739c6f1..000000000 --- a/ui/icon/svg/pricetags-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pricetags.svg b/ui/icon/svg/pricetags.svg deleted file mode 100644 index 75bff5307..000000000 --- a/ui/icon/svg/pricetags.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/print-outline.svg b/ui/icon/svg/print-outline.svg deleted file mode 100644 index 671d0747d..000000000 --- a/ui/icon/svg/print-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/print-sharp.svg b/ui/icon/svg/print-sharp.svg deleted file mode 100644 index d330cc732..000000000 --- a/ui/icon/svg/print-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/print.svg b/ui/icon/svg/print.svg deleted file mode 100644 index b84486701..000000000 --- a/ui/icon/svg/print.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/prism-outline.svg b/ui/icon/svg/prism-outline.svg deleted file mode 100644 index 9af6eb958..000000000 --- a/ui/icon/svg/prism-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/prism-sharp.svg b/ui/icon/svg/prism-sharp.svg deleted file mode 100644 index 8003ccce8..000000000 --- a/ui/icon/svg/prism-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/prism.svg b/ui/icon/svg/prism.svg deleted file mode 100644 index cbb9514bb..000000000 --- a/ui/icon/svg/prism.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/pulse-outline.svg b/ui/icon/svg/pulse-outline.svg deleted file mode 100644 index d9b4480f8..000000000 --- a/ui/icon/svg/pulse-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pulse-sharp.svg b/ui/icon/svg/pulse-sharp.svg deleted file mode 100644 index d087fff78..000000000 --- a/ui/icon/svg/pulse-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/pulse.svg b/ui/icon/svg/pulse.svg deleted file mode 100644 index a803b4715..000000000 --- a/ui/icon/svg/pulse.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/push-outline.svg b/ui/icon/svg/push-outline.svg deleted file mode 100644 index cc03b5727..000000000 --- a/ui/icon/svg/push-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/push-sharp.svg b/ui/icon/svg/push-sharp.svg deleted file mode 100644 index 8f11ef6f3..000000000 --- a/ui/icon/svg/push-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/push.svg b/ui/icon/svg/push.svg deleted file mode 100644 index 31ff43373..000000000 --- a/ui/icon/svg/push.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/qr-code-outline.svg b/ui/icon/svg/qr-code-outline.svg deleted file mode 100644 index d80493e3e..000000000 --- a/ui/icon/svg/qr-code-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/qr-code-sharp.svg b/ui/icon/svg/qr-code-sharp.svg deleted file mode 100644 index 38251f31b..000000000 --- a/ui/icon/svg/qr-code-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/qr-code.svg b/ui/icon/svg/qr-code.svg deleted file mode 100644 index 0d517dc4d..000000000 --- a/ui/icon/svg/qr-code.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-button-off-outline.svg b/ui/icon/svg/radio-button-off-outline.svg deleted file mode 100644 index 01396396d..000000000 --- a/ui/icon/svg/radio-button-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-button-off-sharp.svg b/ui/icon/svg/radio-button-off-sharp.svg deleted file mode 100644 index 01396396d..000000000 --- a/ui/icon/svg/radio-button-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-button-off.svg b/ui/icon/svg/radio-button-off.svg deleted file mode 100644 index 01396396d..000000000 --- a/ui/icon/svg/radio-button-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-button-on-outline.svg b/ui/icon/svg/radio-button-on-outline.svg deleted file mode 100644 index 0728516c5..000000000 --- a/ui/icon/svg/radio-button-on-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-button-on-sharp.svg b/ui/icon/svg/radio-button-on-sharp.svg deleted file mode 100644 index 0728516c5..000000000 --- a/ui/icon/svg/radio-button-on-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-button-on.svg b/ui/icon/svg/radio-button-on.svg deleted file mode 100644 index 0728516c5..000000000 --- a/ui/icon/svg/radio-button-on.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-outline.svg b/ui/icon/svg/radio-outline.svg deleted file mode 100644 index 57a253255..000000000 --- a/ui/icon/svg/radio-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/radio-sharp.svg b/ui/icon/svg/radio-sharp.svg deleted file mode 100644 index 61c475fed..000000000 --- a/ui/icon/svg/radio-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/radio.svg b/ui/icon/svg/radio.svg deleted file mode 100644 index a0db1bb56..000000000 --- a/ui/icon/svg/radio.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rainy-outline.svg b/ui/icon/svg/rainy-outline.svg deleted file mode 100644 index 3fb115d26..000000000 --- a/ui/icon/svg/rainy-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rainy-sharp.svg b/ui/icon/svg/rainy-sharp.svg deleted file mode 100644 index 8b3616b56..000000000 --- a/ui/icon/svg/rainy-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/rainy.svg b/ui/icon/svg/rainy.svg deleted file mode 100644 index 42c8d3961..000000000 --- a/ui/icon/svg/rainy.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reader-outline.svg b/ui/icon/svg/reader-outline.svg deleted file mode 100644 index 4ce1d4081..000000000 --- a/ui/icon/svg/reader-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reader-sharp.svg b/ui/icon/svg/reader-sharp.svg deleted file mode 100644 index f20f2142f..000000000 --- a/ui/icon/svg/reader-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/reader.svg b/ui/icon/svg/reader.svg deleted file mode 100644 index 422af2754..000000000 --- a/ui/icon/svg/reader.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/receipt-outline.svg b/ui/icon/svg/receipt-outline.svg deleted file mode 100644 index 79649d1f7..000000000 --- a/ui/icon/svg/receipt-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/receipt-sharp.svg b/ui/icon/svg/receipt-sharp.svg deleted file mode 100644 index 7bbc1e116..000000000 --- a/ui/icon/svg/receipt-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/receipt.svg b/ui/icon/svg/receipt.svg deleted file mode 100644 index 258139d0a..000000000 --- a/ui/icon/svg/receipt.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/recording-outline.svg b/ui/icon/svg/recording-outline.svg deleted file mode 100644 index b3225fb5a..000000000 --- a/ui/icon/svg/recording-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/recording-sharp.svg b/ui/icon/svg/recording-sharp.svg deleted file mode 100644 index 72ed55364..000000000 --- a/ui/icon/svg/recording-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/recording.svg b/ui/icon/svg/recording.svg deleted file mode 100644 index dd88101fa..000000000 --- a/ui/icon/svg/recording.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/refresh-circle-outline.svg b/ui/icon/svg/refresh-circle-outline.svg deleted file mode 100644 index f94b98e24..000000000 --- a/ui/icon/svg/refresh-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/refresh-circle-sharp.svg b/ui/icon/svg/refresh-circle-sharp.svg deleted file mode 100644 index 7069e057b..000000000 --- a/ui/icon/svg/refresh-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/refresh-circle.svg b/ui/icon/svg/refresh-circle.svg deleted file mode 100644 index 7d1911c6d..000000000 --- a/ui/icon/svg/refresh-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/refresh-outline.svg b/ui/icon/svg/refresh-outline.svg deleted file mode 100644 index 26d31b4f7..000000000 --- a/ui/icon/svg/refresh-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/refresh-sharp.svg b/ui/icon/svg/refresh-sharp.svg deleted file mode 100644 index 07a37188f..000000000 --- a/ui/icon/svg/refresh-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/refresh.svg b/ui/icon/svg/refresh.svg deleted file mode 100644 index 26d31b4f7..000000000 --- a/ui/icon/svg/refresh.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reload-circle-outline.svg b/ui/icon/svg/reload-circle-outline.svg deleted file mode 100644 index 8bad6cf74..000000000 --- a/ui/icon/svg/reload-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reload-circle-sharp.svg b/ui/icon/svg/reload-circle-sharp.svg deleted file mode 100644 index 99b33ed8d..000000000 --- a/ui/icon/svg/reload-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/reload-circle.svg b/ui/icon/svg/reload-circle.svg deleted file mode 100644 index 164f01bca..000000000 --- a/ui/icon/svg/reload-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reload-outline.svg b/ui/icon/svg/reload-outline.svg deleted file mode 100644 index 0291a680f..000000000 --- a/ui/icon/svg/reload-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reload-sharp.svg b/ui/icon/svg/reload-sharp.svg deleted file mode 100644 index fdb531535..000000000 --- a/ui/icon/svg/reload-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reload.svg b/ui/icon/svg/reload.svg deleted file mode 100644 index 0291a680f..000000000 --- a/ui/icon/svg/reload.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/remove-circle-outline.svg b/ui/icon/svg/remove-circle-outline.svg deleted file mode 100644 index 12ac5ea67..000000000 --- a/ui/icon/svg/remove-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/remove-circle-sharp.svg b/ui/icon/svg/remove-circle-sharp.svg deleted file mode 100644 index 1715f4367..000000000 --- a/ui/icon/svg/remove-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/remove-circle.svg b/ui/icon/svg/remove-circle.svg deleted file mode 100644 index b120ba232..000000000 --- a/ui/icon/svg/remove-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/remove-outline.svg b/ui/icon/svg/remove-outline.svg deleted file mode 100644 index f6e95f240..000000000 --- a/ui/icon/svg/remove-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/remove-sharp.svg b/ui/icon/svg/remove-sharp.svg deleted file mode 100644 index b628d2a65..000000000 --- a/ui/icon/svg/remove-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/remove.svg b/ui/icon/svg/remove.svg deleted file mode 100644 index f6e95f240..000000000 --- a/ui/icon/svg/remove.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-four-outline.svg b/ui/icon/svg/reorder-four-outline.svg deleted file mode 100644 index 1458c9ab4..000000000 --- a/ui/icon/svg/reorder-four-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-four-sharp.svg b/ui/icon/svg/reorder-four-sharp.svg deleted file mode 100644 index 65a25a827..000000000 --- a/ui/icon/svg/reorder-four-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-four.svg b/ui/icon/svg/reorder-four.svg deleted file mode 100644 index 034fe5548..000000000 --- a/ui/icon/svg/reorder-four.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-three-outline.svg b/ui/icon/svg/reorder-three-outline.svg deleted file mode 100644 index 5412340f7..000000000 --- a/ui/icon/svg/reorder-three-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-three-sharp.svg b/ui/icon/svg/reorder-three-sharp.svg deleted file mode 100644 index f2446b648..000000000 --- a/ui/icon/svg/reorder-three-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-three.svg b/ui/icon/svg/reorder-three.svg deleted file mode 100644 index f5eb96eae..000000000 --- a/ui/icon/svg/reorder-three.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-two-outline.svg b/ui/icon/svg/reorder-two-outline.svg deleted file mode 100644 index e0aac3253..000000000 --- a/ui/icon/svg/reorder-two-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-two-sharp.svg b/ui/icon/svg/reorder-two-sharp.svg deleted file mode 100644 index 6c90d434a..000000000 --- a/ui/icon/svg/reorder-two-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/reorder-two.svg b/ui/icon/svg/reorder-two.svg deleted file mode 100644 index 70d76894f..000000000 --- a/ui/icon/svg/reorder-two.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/repeat-outline.svg b/ui/icon/svg/repeat-outline.svg deleted file mode 100644 index 6940e899c..000000000 --- a/ui/icon/svg/repeat-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/repeat-sharp.svg b/ui/icon/svg/repeat-sharp.svg deleted file mode 100644 index 36d19d06d..000000000 --- a/ui/icon/svg/repeat-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/repeat.svg b/ui/icon/svg/repeat.svg deleted file mode 100644 index 6940e899c..000000000 --- a/ui/icon/svg/repeat.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/resize-outline.svg b/ui/icon/svg/resize-outline.svg deleted file mode 100644 index cc2058662..000000000 --- a/ui/icon/svg/resize-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/resize-sharp.svg b/ui/icon/svg/resize-sharp.svg deleted file mode 100644 index 4bca1145c..000000000 --- a/ui/icon/svg/resize-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/resize.svg b/ui/icon/svg/resize.svg deleted file mode 100644 index cc2058662..000000000 --- a/ui/icon/svg/resize.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/restaurant-outline.svg b/ui/icon/svg/restaurant-outline.svg deleted file mode 100644 index 67e637008..000000000 --- a/ui/icon/svg/restaurant-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/restaurant-sharp.svg b/ui/icon/svg/restaurant-sharp.svg deleted file mode 100644 index 865687e64..000000000 --- a/ui/icon/svg/restaurant-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/restaurant.svg b/ui/icon/svg/restaurant.svg deleted file mode 100644 index 958eb740f..000000000 --- a/ui/icon/svg/restaurant.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-down-back-outline.svg b/ui/icon/svg/return-down-back-outline.svg deleted file mode 100644 index 4a2cfab9b..000000000 --- a/ui/icon/svg/return-down-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-down-back-sharp.svg b/ui/icon/svg/return-down-back-sharp.svg deleted file mode 100644 index 5e7c7da8e..000000000 --- a/ui/icon/svg/return-down-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-down-back.svg b/ui/icon/svg/return-down-back.svg deleted file mode 100644 index 4a2cfab9b..000000000 --- a/ui/icon/svg/return-down-back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-down-forward-outline.svg b/ui/icon/svg/return-down-forward-outline.svg deleted file mode 100644 index e4830376d..000000000 --- a/ui/icon/svg/return-down-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-down-forward-sharp.svg b/ui/icon/svg/return-down-forward-sharp.svg deleted file mode 100644 index dedd94ad4..000000000 --- a/ui/icon/svg/return-down-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-down-forward.svg b/ui/icon/svg/return-down-forward.svg deleted file mode 100644 index e4830376d..000000000 --- a/ui/icon/svg/return-down-forward.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-up-back-outline.svg b/ui/icon/svg/return-up-back-outline.svg deleted file mode 100644 index 83b57b778..000000000 --- a/ui/icon/svg/return-up-back-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-up-back-sharp.svg b/ui/icon/svg/return-up-back-sharp.svg deleted file mode 100644 index a78b70e77..000000000 --- a/ui/icon/svg/return-up-back-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-up-back.svg b/ui/icon/svg/return-up-back.svg deleted file mode 100644 index 83b57b778..000000000 --- a/ui/icon/svg/return-up-back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-up-forward-outline.svg b/ui/icon/svg/return-up-forward-outline.svg deleted file mode 100644 index 9b5f4e602..000000000 --- a/ui/icon/svg/return-up-forward-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-up-forward-sharp.svg b/ui/icon/svg/return-up-forward-sharp.svg deleted file mode 100644 index cc8994a9b..000000000 --- a/ui/icon/svg/return-up-forward-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/return-up-forward.svg b/ui/icon/svg/return-up-forward.svg deleted file mode 100644 index 9b5f4e602..000000000 --- a/ui/icon/svg/return-up-forward.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ribbon-outline.svg b/ui/icon/svg/ribbon-outline.svg deleted file mode 100644 index 3e9cbf4cc..000000000 --- a/ui/icon/svg/ribbon-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ribbon-sharp.svg b/ui/icon/svg/ribbon-sharp.svg deleted file mode 100644 index ce7cf1acb..000000000 --- a/ui/icon/svg/ribbon-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ribbon.svg b/ui/icon/svg/ribbon.svg deleted file mode 100644 index f935612b7..000000000 --- a/ui/icon/svg/ribbon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rocket-outline.svg b/ui/icon/svg/rocket-outline.svg deleted file mode 100644 index 49f0552f7..000000000 --- a/ui/icon/svg/rocket-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rocket-sharp.svg b/ui/icon/svg/rocket-sharp.svg deleted file mode 100644 index 4eb5f50fc..000000000 --- a/ui/icon/svg/rocket-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rocket.svg b/ui/icon/svg/rocket.svg deleted file mode 100644 index af61ac6de..000000000 --- a/ui/icon/svg/rocket.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rose-outline.svg b/ui/icon/svg/rose-outline.svg deleted file mode 100644 index 0fab2f068..000000000 --- a/ui/icon/svg/rose-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rose-sharp.svg b/ui/icon/svg/rose-sharp.svg deleted file mode 100644 index 5638e98a4..000000000 --- a/ui/icon/svg/rose-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/rose.svg b/ui/icon/svg/rose.svg deleted file mode 100644 index 527e7d821..000000000 --- a/ui/icon/svg/rose.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sad-outline.svg b/ui/icon/svg/sad-outline.svg deleted file mode 100644 index 8e2f883f0..000000000 --- a/ui/icon/svg/sad-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sad-sharp.svg b/ui/icon/svg/sad-sharp.svg deleted file mode 100644 index 575759f8f..000000000 --- a/ui/icon/svg/sad-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sad.svg b/ui/icon/svg/sad.svg deleted file mode 100644 index 6d8527d92..000000000 --- a/ui/icon/svg/sad.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/save-outline.svg b/ui/icon/svg/save-outline.svg deleted file mode 100644 index 5e1d3d095..000000000 --- a/ui/icon/svg/save-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/save-sharp.svg b/ui/icon/svg/save-sharp.svg deleted file mode 100644 index 091220980..000000000 --- a/ui/icon/svg/save-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/save.svg b/ui/icon/svg/save.svg deleted file mode 100644 index 4018702db..000000000 --- a/ui/icon/svg/save.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scale-outline.svg b/ui/icon/svg/scale-outline.svg deleted file mode 100644 index 8126c7ddb..000000000 --- a/ui/icon/svg/scale-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scale-sharp.svg b/ui/icon/svg/scale-sharp.svg deleted file mode 100644 index 6a25b7bf1..000000000 --- a/ui/icon/svg/scale-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scale.svg b/ui/icon/svg/scale.svg deleted file mode 100644 index 8f0da0d0d..000000000 --- a/ui/icon/svg/scale.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scan-circle-outline.svg b/ui/icon/svg/scan-circle-outline.svg deleted file mode 100644 index 81bf4d2b5..000000000 --- a/ui/icon/svg/scan-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scan-circle-sharp.svg b/ui/icon/svg/scan-circle-sharp.svg deleted file mode 100644 index f64762754..000000000 --- a/ui/icon/svg/scan-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scan-circle.svg b/ui/icon/svg/scan-circle.svg deleted file mode 100644 index 9e5230463..000000000 --- a/ui/icon/svg/scan-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scan-outline.svg b/ui/icon/svg/scan-outline.svg deleted file mode 100644 index 82315dd72..000000000 --- a/ui/icon/svg/scan-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scan-sharp.svg b/ui/icon/svg/scan-sharp.svg deleted file mode 100644 index 96990769f..000000000 --- a/ui/icon/svg/scan-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/scan.svg b/ui/icon/svg/scan.svg deleted file mode 100644 index 3e92da97c..000000000 --- a/ui/icon/svg/scan.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/school-outline.svg b/ui/icon/svg/school-outline.svg deleted file mode 100644 index f69015586..000000000 --- a/ui/icon/svg/school-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/school-sharp.svg b/ui/icon/svg/school-sharp.svg deleted file mode 100644 index bcf1cbf8f..000000000 --- a/ui/icon/svg/school-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/school.svg b/ui/icon/svg/school.svg deleted file mode 100644 index 8d0435132..000000000 --- a/ui/icon/svg/school.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/search-circle-outline.svg b/ui/icon/svg/search-circle-outline.svg deleted file mode 100644 index 6fb1f9f21..000000000 --- a/ui/icon/svg/search-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/search-circle-sharp.svg b/ui/icon/svg/search-circle-sharp.svg deleted file mode 100644 index 502886cc8..000000000 --- a/ui/icon/svg/search-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/search-circle.svg b/ui/icon/svg/search-circle.svg deleted file mode 100644 index d2856e1f8..000000000 --- a/ui/icon/svg/search-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/search-outline.svg b/ui/icon/svg/search-outline.svg deleted file mode 100644 index 87f2f991b..000000000 --- a/ui/icon/svg/search-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/search-sharp.svg b/ui/icon/svg/search-sharp.svg deleted file mode 100644 index 0690e7b2f..000000000 --- a/ui/icon/svg/search-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/search.svg b/ui/icon/svg/search.svg deleted file mode 100644 index 88bdd87ea..000000000 --- a/ui/icon/svg/search.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/send-outline.svg b/ui/icon/svg/send-outline.svg deleted file mode 100644 index 312d7d593..000000000 --- a/ui/icon/svg/send-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/send-sharp.svg b/ui/icon/svg/send-sharp.svg deleted file mode 100644 index 8564b683a..000000000 --- a/ui/icon/svg/send-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/send.svg b/ui/icon/svg/send.svg deleted file mode 100644 index bc93a3953..000000000 --- a/ui/icon/svg/send.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/server-outline.svg b/ui/icon/svg/server-outline.svg deleted file mode 100644 index 9c174f76b..000000000 --- a/ui/icon/svg/server-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/server-sharp.svg b/ui/icon/svg/server-sharp.svg deleted file mode 100644 index c9f9c7780..000000000 --- a/ui/icon/svg/server-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/server.svg b/ui/icon/svg/server.svg deleted file mode 100644 index 4bec44821..000000000 --- a/ui/icon/svg/server.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/settings-outline.svg b/ui/icon/svg/settings-outline.svg deleted file mode 100644 index 16f2ddfa6..000000000 --- a/ui/icon/svg/settings-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/settings-sharp.svg b/ui/icon/svg/settings-sharp.svg deleted file mode 100644 index 3f30976d2..000000000 --- a/ui/icon/svg/settings-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/settings.svg b/ui/icon/svg/settings.svg deleted file mode 100644 index 743e6b139..000000000 --- a/ui/icon/svg/settings.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shapes-outline.svg b/ui/icon/svg/shapes-outline.svg deleted file mode 100644 index 90912ba76..000000000 --- a/ui/icon/svg/shapes-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shapes-sharp.svg b/ui/icon/svg/shapes-sharp.svg deleted file mode 100644 index 13cc7625d..000000000 --- a/ui/icon/svg/shapes-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/shapes.svg b/ui/icon/svg/shapes.svg deleted file mode 100644 index 1d28aeefa..000000000 --- a/ui/icon/svg/shapes.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/share-outline.svg b/ui/icon/svg/share-outline.svg deleted file mode 100644 index 727cc4d2d..000000000 --- a/ui/icon/svg/share-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/share-sharp.svg b/ui/icon/svg/share-sharp.svg deleted file mode 100644 index 1791f175e..000000000 --- a/ui/icon/svg/share-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/share-social-outline.svg b/ui/icon/svg/share-social-outline.svg deleted file mode 100644 index 32630800e..000000000 --- a/ui/icon/svg/share-social-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/share-social-sharp.svg b/ui/icon/svg/share-social-sharp.svg deleted file mode 100644 index 83c8efb52..000000000 --- a/ui/icon/svg/share-social-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/share-social.svg b/ui/icon/svg/share-social.svg deleted file mode 100644 index 1e0b34078..000000000 --- a/ui/icon/svg/share-social.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/share.svg b/ui/icon/svg/share.svg deleted file mode 100644 index 0bf5dcbef..000000000 --- a/ui/icon/svg/share.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-checkmark-outline.svg b/ui/icon/svg/shield-checkmark-outline.svg deleted file mode 100644 index 2b992b03c..000000000 --- a/ui/icon/svg/shield-checkmark-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-checkmark-sharp.svg b/ui/icon/svg/shield-checkmark-sharp.svg deleted file mode 100644 index b032107ed..000000000 --- a/ui/icon/svg/shield-checkmark-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/shield-checkmark.svg b/ui/icon/svg/shield-checkmark.svg deleted file mode 100644 index d46bdaca4..000000000 --- a/ui/icon/svg/shield-checkmark.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-half-outline.svg b/ui/icon/svg/shield-half-outline.svg deleted file mode 100644 index 1405c4009..000000000 --- a/ui/icon/svg/shield-half-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-half-sharp.svg b/ui/icon/svg/shield-half-sharp.svg deleted file mode 100644 index de33a62db..000000000 --- a/ui/icon/svg/shield-half-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-half.svg b/ui/icon/svg/shield-half.svg deleted file mode 100644 index e0aed71e8..000000000 --- a/ui/icon/svg/shield-half.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-outline.svg b/ui/icon/svg/shield-outline.svg deleted file mode 100644 index c41238bae..000000000 --- a/ui/icon/svg/shield-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shield-sharp.svg b/ui/icon/svg/shield-sharp.svg deleted file mode 100644 index 3b8c9dcad..000000000 --- a/ui/icon/svg/shield-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/shield.svg b/ui/icon/svg/shield.svg deleted file mode 100644 index 0d99f1158..000000000 --- a/ui/icon/svg/shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/shirt-outline.svg b/ui/icon/svg/shirt-outline.svg deleted file mode 100644 index 816b1afcc..000000000 --- a/ui/icon/svg/shirt-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shirt-sharp.svg b/ui/icon/svg/shirt-sharp.svg deleted file mode 100644 index 493563b50..000000000 --- a/ui/icon/svg/shirt-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/shirt.svg b/ui/icon/svg/shirt.svg deleted file mode 100644 index fd2e88829..000000000 --- a/ui/icon/svg/shirt.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shuffle-outline.svg b/ui/icon/svg/shuffle-outline.svg deleted file mode 100644 index 3373249d6..000000000 --- a/ui/icon/svg/shuffle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shuffle-sharp.svg b/ui/icon/svg/shuffle-sharp.svg deleted file mode 100644 index 8db8816df..000000000 --- a/ui/icon/svg/shuffle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/shuffle.svg b/ui/icon/svg/shuffle.svg deleted file mode 100644 index 3373249d6..000000000 --- a/ui/icon/svg/shuffle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/skull-outline.svg b/ui/icon/svg/skull-outline.svg deleted file mode 100644 index f8bd663f5..000000000 --- a/ui/icon/svg/skull-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/skull-sharp.svg b/ui/icon/svg/skull-sharp.svg deleted file mode 100644 index 89fc96a43..000000000 --- a/ui/icon/svg/skull-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/skull.svg b/ui/icon/svg/skull.svg deleted file mode 100644 index c9904c02b..000000000 --- a/ui/icon/svg/skull.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/snow-outline.svg b/ui/icon/svg/snow-outline.svg deleted file mode 100644 index b39717ee6..000000000 --- a/ui/icon/svg/snow-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/snow-sharp.svg b/ui/icon/svg/snow-sharp.svg deleted file mode 100644 index bd649f200..000000000 --- a/ui/icon/svg/snow-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/snow.svg b/ui/icon/svg/snow.svg deleted file mode 100644 index 4797b7100..000000000 --- a/ui/icon/svg/snow.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sparkles-outline.svg b/ui/icon/svg/sparkles-outline.svg deleted file mode 100644 index 42786be01..000000000 --- a/ui/icon/svg/sparkles-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sparkles-sharp.svg b/ui/icon/svg/sparkles-sharp.svg deleted file mode 100644 index 6e47afe66..000000000 --- a/ui/icon/svg/sparkles-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sparkles.svg b/ui/icon/svg/sparkles.svg deleted file mode 100644 index 18725e00d..000000000 --- a/ui/icon/svg/sparkles.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/speedometer-outline.svg b/ui/icon/svg/speedometer-outline.svg deleted file mode 100644 index c4ee90ab2..000000000 --- a/ui/icon/svg/speedometer-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/speedometer-sharp.svg b/ui/icon/svg/speedometer-sharp.svg deleted file mode 100644 index 49105f40d..000000000 --- a/ui/icon/svg/speedometer-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/speedometer.svg b/ui/icon/svg/speedometer.svg deleted file mode 100644 index ce219e17f..000000000 --- a/ui/icon/svg/speedometer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/square-outline.svg b/ui/icon/svg/square-outline.svg deleted file mode 100644 index 35983a794..000000000 --- a/ui/icon/svg/square-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/square-sharp.svg b/ui/icon/svg/square-sharp.svg deleted file mode 100644 index c16c6f11d..000000000 --- a/ui/icon/svg/square-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/square.svg b/ui/icon/svg/square.svg deleted file mode 100644 index 5cd2f11a8..000000000 --- a/ui/icon/svg/square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/star-half-outline.svg b/ui/icon/svg/star-half-outline.svg deleted file mode 100644 index f17efcac3..000000000 --- a/ui/icon/svg/star-half-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/star-half-sharp.svg b/ui/icon/svg/star-half-sharp.svg deleted file mode 100644 index c77fa40a3..000000000 --- a/ui/icon/svg/star-half-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/star-half.svg b/ui/icon/svg/star-half.svg deleted file mode 100644 index f17efcac3..000000000 --- a/ui/icon/svg/star-half.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/star-outline.svg b/ui/icon/svg/star-outline.svg deleted file mode 100644 index b045620ab..000000000 --- a/ui/icon/svg/star-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/star-sharp.svg b/ui/icon/svg/star-sharp.svg deleted file mode 100644 index 0bfb49500..000000000 --- a/ui/icon/svg/star-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/star.svg b/ui/icon/svg/star.svg deleted file mode 100644 index 025185efc..000000000 --- a/ui/icon/svg/star.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stats-chart-outline.svg b/ui/icon/svg/stats-chart-outline.svg deleted file mode 100644 index 67a734f69..000000000 --- a/ui/icon/svg/stats-chart-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stats-chart-sharp.svg b/ui/icon/svg/stats-chart-sharp.svg deleted file mode 100644 index 2a861f65a..000000000 --- a/ui/icon/svg/stats-chart-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/stats-chart.svg b/ui/icon/svg/stats-chart.svg deleted file mode 100644 index 73bbdc616..000000000 --- a/ui/icon/svg/stats-chart.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stop-circle-outline.svg b/ui/icon/svg/stop-circle-outline.svg deleted file mode 100644 index 8530801d3..000000000 --- a/ui/icon/svg/stop-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stop-circle-sharp.svg b/ui/icon/svg/stop-circle-sharp.svg deleted file mode 100644 index 4106c36c6..000000000 --- a/ui/icon/svg/stop-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/stop-circle.svg b/ui/icon/svg/stop-circle.svg deleted file mode 100644 index b8530d83f..000000000 --- a/ui/icon/svg/stop-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/stop-outline.svg b/ui/icon/svg/stop-outline.svg deleted file mode 100644 index 6a77fe93c..000000000 --- a/ui/icon/svg/stop-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stop-sharp.svg b/ui/icon/svg/stop-sharp.svg deleted file mode 100644 index ff9a64ea1..000000000 --- a/ui/icon/svg/stop-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/stop.svg b/ui/icon/svg/stop.svg deleted file mode 100644 index 9079a45d9..000000000 --- a/ui/icon/svg/stop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/stopwatch-outline.svg b/ui/icon/svg/stopwatch-outline.svg deleted file mode 100644 index 6235df5e8..000000000 --- a/ui/icon/svg/stopwatch-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stopwatch-sharp.svg b/ui/icon/svg/stopwatch-sharp.svg deleted file mode 100644 index 9938321e3..000000000 --- a/ui/icon/svg/stopwatch-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/stopwatch.svg b/ui/icon/svg/stopwatch.svg deleted file mode 100644 index 01310b573..000000000 --- a/ui/icon/svg/stopwatch.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/storefront-outline.svg b/ui/icon/svg/storefront-outline.svg deleted file mode 100644 index 7fd1ab19b..000000000 --- a/ui/icon/svg/storefront-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/storefront-sharp.svg b/ui/icon/svg/storefront-sharp.svg deleted file mode 100644 index e9d14120c..000000000 --- a/ui/icon/svg/storefront-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/storefront.svg b/ui/icon/svg/storefront.svg deleted file mode 100644 index 911f396b8..000000000 --- a/ui/icon/svg/storefront.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/subway-outline.svg b/ui/icon/svg/subway-outline.svg deleted file mode 100644 index 9d9f83e02..000000000 --- a/ui/icon/svg/subway-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/subway-sharp.svg b/ui/icon/svg/subway-sharp.svg deleted file mode 100644 index 1d77a2817..000000000 --- a/ui/icon/svg/subway-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/subway.svg b/ui/icon/svg/subway.svg deleted file mode 100644 index bc603f062..000000000 --- a/ui/icon/svg/subway.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sunny-outline.svg b/ui/icon/svg/sunny-outline.svg deleted file mode 100644 index 28df9ca80..000000000 --- a/ui/icon/svg/sunny-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sunny-sharp.svg b/ui/icon/svg/sunny-sharp.svg deleted file mode 100644 index f2458496f..000000000 --- a/ui/icon/svg/sunny-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sunny.svg b/ui/icon/svg/sunny.svg deleted file mode 100644 index 0d3db26d5..000000000 --- a/ui/icon/svg/sunny.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/swap-horizontal-outline.svg b/ui/icon/svg/swap-horizontal-outline.svg deleted file mode 100644 index 71aa91002..000000000 --- a/ui/icon/svg/swap-horizontal-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/swap-horizontal-sharp.svg b/ui/icon/svg/swap-horizontal-sharp.svg deleted file mode 100644 index 219bfd103..000000000 --- a/ui/icon/svg/swap-horizontal-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/swap-horizontal.svg b/ui/icon/svg/swap-horizontal.svg deleted file mode 100644 index 71aa91002..000000000 --- a/ui/icon/svg/swap-horizontal.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/swap-vertical-outline.svg b/ui/icon/svg/swap-vertical-outline.svg deleted file mode 100644 index 7e20c723f..000000000 --- a/ui/icon/svg/swap-vertical-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/swap-vertical-sharp.svg b/ui/icon/svg/swap-vertical-sharp.svg deleted file mode 100644 index 243e37702..000000000 --- a/ui/icon/svg/swap-vertical-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/swap-vertical.svg b/ui/icon/svg/swap-vertical.svg deleted file mode 100644 index 7e20c723f..000000000 --- a/ui/icon/svg/swap-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sync-circle-outline.svg b/ui/icon/svg/sync-circle-outline.svg deleted file mode 100644 index 4f9223b78..000000000 --- a/ui/icon/svg/sync-circle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sync-circle-sharp.svg b/ui/icon/svg/sync-circle-sharp.svg deleted file mode 100644 index be3e3f036..000000000 --- a/ui/icon/svg/sync-circle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sync-circle.svg b/ui/icon/svg/sync-circle.svg deleted file mode 100644 index f8e4694d3..000000000 --- a/ui/icon/svg/sync-circle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sync-outline.svg b/ui/icon/svg/sync-outline.svg deleted file mode 100644 index fabeca535..000000000 --- a/ui/icon/svg/sync-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sync-sharp.svg b/ui/icon/svg/sync-sharp.svg deleted file mode 100644 index bbd34e516..000000000 --- a/ui/icon/svg/sync-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/sync.svg b/ui/icon/svg/sync.svg deleted file mode 100644 index fabeca535..000000000 --- a/ui/icon/svg/sync.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tablet-landscape-outline.svg b/ui/icon/svg/tablet-landscape-outline.svg deleted file mode 100644 index 5c6c9dfec..000000000 --- a/ui/icon/svg/tablet-landscape-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tablet-landscape-sharp.svg b/ui/icon/svg/tablet-landscape-sharp.svg deleted file mode 100644 index 4e26a8f75..000000000 --- a/ui/icon/svg/tablet-landscape-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tablet-landscape.svg b/ui/icon/svg/tablet-landscape.svg deleted file mode 100644 index 3384a8ed1..000000000 --- a/ui/icon/svg/tablet-landscape.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tablet-portrait-outline.svg b/ui/icon/svg/tablet-portrait-outline.svg deleted file mode 100644 index 135b228e7..000000000 --- a/ui/icon/svg/tablet-portrait-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tablet-portrait-sharp.svg b/ui/icon/svg/tablet-portrait-sharp.svg deleted file mode 100644 index a40c4afaf..000000000 --- a/ui/icon/svg/tablet-portrait-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/tablet-portrait.svg b/ui/icon/svg/tablet-portrait.svg deleted file mode 100644 index cdcca899e..000000000 --- a/ui/icon/svg/tablet-portrait.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/telescope-outline.svg b/ui/icon/svg/telescope-outline.svg deleted file mode 100644 index 833ee69ec..000000000 --- a/ui/icon/svg/telescope-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/telescope-sharp.svg b/ui/icon/svg/telescope-sharp.svg deleted file mode 100644 index 8d648cdcb..000000000 --- a/ui/icon/svg/telescope-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/telescope.svg b/ui/icon/svg/telescope.svg deleted file mode 100644 index 16709da7e..000000000 --- a/ui/icon/svg/telescope.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tennisball-outline.svg b/ui/icon/svg/tennisball-outline.svg deleted file mode 100644 index d3c9bc835..000000000 --- a/ui/icon/svg/tennisball-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tennisball-sharp.svg b/ui/icon/svg/tennisball-sharp.svg deleted file mode 100644 index 68b1e3640..000000000 --- a/ui/icon/svg/tennisball-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tennisball.svg b/ui/icon/svg/tennisball.svg deleted file mode 100644 index 0f573e867..000000000 --- a/ui/icon/svg/tennisball.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/terminal-outline.svg b/ui/icon/svg/terminal-outline.svg deleted file mode 100644 index 6a8ebcf60..000000000 --- a/ui/icon/svg/terminal-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/terminal-sharp.svg b/ui/icon/svg/terminal-sharp.svg deleted file mode 100644 index c5a1da081..000000000 --- a/ui/icon/svg/terminal-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/terminal.svg b/ui/icon/svg/terminal.svg deleted file mode 100644 index 496b9618f..000000000 --- a/ui/icon/svg/terminal.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/text-outline.svg b/ui/icon/svg/text-outline.svg deleted file mode 100644 index a2e3558d8..000000000 --- a/ui/icon/svg/text-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/text-sharp.svg b/ui/icon/svg/text-sharp.svg deleted file mode 100644 index 5a1489f10..000000000 --- a/ui/icon/svg/text-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/text.svg b/ui/icon/svg/text.svg deleted file mode 100644 index c1cd6fd99..000000000 --- a/ui/icon/svg/text.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thermometer-outline.svg b/ui/icon/svg/thermometer-outline.svg deleted file mode 100644 index baa988b80..000000000 --- a/ui/icon/svg/thermometer-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thermometer-sharp.svg b/ui/icon/svg/thermometer-sharp.svg deleted file mode 100644 index 01fff1d9f..000000000 --- a/ui/icon/svg/thermometer-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thermometer.svg b/ui/icon/svg/thermometer.svg deleted file mode 100644 index acfcb93b1..000000000 --- a/ui/icon/svg/thermometer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thumbs-down-outline.svg b/ui/icon/svg/thumbs-down-outline.svg deleted file mode 100644 index 721bd848c..000000000 --- a/ui/icon/svg/thumbs-down-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thumbs-down-sharp.svg b/ui/icon/svg/thumbs-down-sharp.svg deleted file mode 100644 index d11a91ca7..000000000 --- a/ui/icon/svg/thumbs-down-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thumbs-down.svg b/ui/icon/svg/thumbs-down.svg deleted file mode 100644 index d59446f4e..000000000 --- a/ui/icon/svg/thumbs-down.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thumbs-up-outline.svg b/ui/icon/svg/thumbs-up-outline.svg deleted file mode 100644 index b56f2f9b2..000000000 --- a/ui/icon/svg/thumbs-up-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thumbs-up-sharp.svg b/ui/icon/svg/thumbs-up-sharp.svg deleted file mode 100644 index 4ace37472..000000000 --- a/ui/icon/svg/thumbs-up-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thumbs-up.svg b/ui/icon/svg/thumbs-up.svg deleted file mode 100644 index 583a78f89..000000000 --- a/ui/icon/svg/thumbs-up.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thunderstorm-outline.svg b/ui/icon/svg/thunderstorm-outline.svg deleted file mode 100644 index c9c94685a..000000000 --- a/ui/icon/svg/thunderstorm-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/thunderstorm-sharp.svg b/ui/icon/svg/thunderstorm-sharp.svg deleted file mode 100644 index 4c6a83e12..000000000 --- a/ui/icon/svg/thunderstorm-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/thunderstorm.svg b/ui/icon/svg/thunderstorm.svg deleted file mode 100644 index 41c80d58e..000000000 --- a/ui/icon/svg/thunderstorm.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ticket-outline.svg b/ui/icon/svg/ticket-outline.svg deleted file mode 100644 index abf0d526f..000000000 --- a/ui/icon/svg/ticket-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/ticket-sharp.svg b/ui/icon/svg/ticket-sharp.svg deleted file mode 100644 index 7ece62883..000000000 --- a/ui/icon/svg/ticket-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/ticket.svg b/ui/icon/svg/ticket.svg deleted file mode 100644 index b1c22e2ca..000000000 --- a/ui/icon/svg/ticket.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/time-outline.svg b/ui/icon/svg/time-outline.svg deleted file mode 100644 index 9e374c263..000000000 --- a/ui/icon/svg/time-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/time-sharp.svg b/ui/icon/svg/time-sharp.svg deleted file mode 100644 index 070999cb8..000000000 --- a/ui/icon/svg/time-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/time.svg b/ui/icon/svg/time.svg deleted file mode 100644 index d41e03e57..000000000 --- a/ui/icon/svg/time.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/timer-outline.svg b/ui/icon/svg/timer-outline.svg deleted file mode 100644 index 7145fc705..000000000 --- a/ui/icon/svg/timer-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/timer-sharp.svg b/ui/icon/svg/timer-sharp.svg deleted file mode 100644 index cc61698de..000000000 --- a/ui/icon/svg/timer-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/timer.svg b/ui/icon/svg/timer.svg deleted file mode 100644 index 491f77ceb..000000000 --- a/ui/icon/svg/timer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/today-outline.svg b/ui/icon/svg/today-outline.svg deleted file mode 100644 index 71fc17fdd..000000000 --- a/ui/icon/svg/today-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/today-sharp.svg b/ui/icon/svg/today-sharp.svg deleted file mode 100644 index 8ea42040a..000000000 --- a/ui/icon/svg/today-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/today.svg b/ui/icon/svg/today.svg deleted file mode 100644 index db4496127..000000000 --- a/ui/icon/svg/today.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/toggle-outline.svg b/ui/icon/svg/toggle-outline.svg deleted file mode 100644 index 028236732..000000000 --- a/ui/icon/svg/toggle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/toggle-sharp.svg b/ui/icon/svg/toggle-sharp.svg deleted file mode 100644 index 4c6c043df..000000000 --- a/ui/icon/svg/toggle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/toggle.svg b/ui/icon/svg/toggle.svg deleted file mode 100644 index 93fde7c52..000000000 --- a/ui/icon/svg/toggle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/toman.svg b/ui/icon/svg/toman.svg deleted file mode 100644 index 87a8907d1..000000000 --- a/ui/icon/svg/toman.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trail-sign-outline.svg b/ui/icon/svg/trail-sign-outline.svg deleted file mode 100644 index 9914b1046..000000000 --- a/ui/icon/svg/trail-sign-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trail-sign-sharp.svg b/ui/icon/svg/trail-sign-sharp.svg deleted file mode 100644 index bf67a3726..000000000 --- a/ui/icon/svg/trail-sign-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/trail-sign.svg b/ui/icon/svg/trail-sign.svg deleted file mode 100644 index 2a6db0853..000000000 --- a/ui/icon/svg/trail-sign.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/train-outline.svg b/ui/icon/svg/train-outline.svg deleted file mode 100644 index b662ebf55..000000000 --- a/ui/icon/svg/train-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/train-sharp.svg b/ui/icon/svg/train-sharp.svg deleted file mode 100644 index db04fc187..000000000 --- a/ui/icon/svg/train-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/train.svg b/ui/icon/svg/train.svg deleted file mode 100644 index 814e10ad7..000000000 --- a/ui/icon/svg/train.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/transgender-outline.svg b/ui/icon/svg/transgender-outline.svg deleted file mode 100644 index afaf1bd55..000000000 --- a/ui/icon/svg/transgender-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/transgender-sharp.svg b/ui/icon/svg/transgender-sharp.svg deleted file mode 100644 index aea56ff57..000000000 --- a/ui/icon/svg/transgender-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/transgender.svg b/ui/icon/svg/transgender.svg deleted file mode 100644 index b42167a78..000000000 --- a/ui/icon/svg/transgender.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trash-bin-outline.svg b/ui/icon/svg/trash-bin-outline.svg deleted file mode 100644 index f5a4f3424..000000000 --- a/ui/icon/svg/trash-bin-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trash-bin-sharp.svg b/ui/icon/svg/trash-bin-sharp.svg deleted file mode 100644 index b89f54e34..000000000 --- a/ui/icon/svg/trash-bin-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/trash-bin.svg b/ui/icon/svg/trash-bin.svg deleted file mode 100644 index 111a0d925..000000000 --- a/ui/icon/svg/trash-bin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/trash-outline.svg b/ui/icon/svg/trash-outline.svg deleted file mode 100644 index c9005b469..000000000 --- a/ui/icon/svg/trash-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trash-sharp.svg b/ui/icon/svg/trash-sharp.svg deleted file mode 100644 index daa32ef82..000000000 --- a/ui/icon/svg/trash-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trash.svg b/ui/icon/svg/trash.svg deleted file mode 100644 index 8d58d1770..000000000 --- a/ui/icon/svg/trash.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trending-down-outline.svg b/ui/icon/svg/trending-down-outline.svg deleted file mode 100644 index 6c01bcd99..000000000 --- a/ui/icon/svg/trending-down-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trending-down-sharp.svg b/ui/icon/svg/trending-down-sharp.svg deleted file mode 100644 index 6f8eb7281..000000000 --- a/ui/icon/svg/trending-down-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trending-down.svg b/ui/icon/svg/trending-down.svg deleted file mode 100644 index 6c01bcd99..000000000 --- a/ui/icon/svg/trending-down.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trending-up-outline.svg b/ui/icon/svg/trending-up-outline.svg deleted file mode 100644 index f9ee4e26c..000000000 --- a/ui/icon/svg/trending-up-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trending-up-sharp.svg b/ui/icon/svg/trending-up-sharp.svg deleted file mode 100644 index f89f9cb0c..000000000 --- a/ui/icon/svg/trending-up-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trending-up.svg b/ui/icon/svg/trending-up.svg deleted file mode 100644 index f9ee4e26c..000000000 --- a/ui/icon/svg/trending-up.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/triangle-outline.svg b/ui/icon/svg/triangle-outline.svg deleted file mode 100644 index 621f564df..000000000 --- a/ui/icon/svg/triangle-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/triangle-sharp.svg b/ui/icon/svg/triangle-sharp.svg deleted file mode 100644 index f18ff36f1..000000000 --- a/ui/icon/svg/triangle-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/triangle.svg b/ui/icon/svg/triangle.svg deleted file mode 100644 index a7cc7dffe..000000000 --- a/ui/icon/svg/triangle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/trophy-outline.svg b/ui/icon/svg/trophy-outline.svg deleted file mode 100644 index 36978ffff..000000000 --- a/ui/icon/svg/trophy-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trophy-sharp.svg b/ui/icon/svg/trophy-sharp.svg deleted file mode 100644 index 47e026324..000000000 --- a/ui/icon/svg/trophy-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/trophy.svg b/ui/icon/svg/trophy.svg deleted file mode 100644 index 52ca2f58b..000000000 --- a/ui/icon/svg/trophy.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tv-outline.svg b/ui/icon/svg/tv-outline.svg deleted file mode 100644 index d61ba0cb4..000000000 --- a/ui/icon/svg/tv-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/tv-sharp.svg b/ui/icon/svg/tv-sharp.svg deleted file mode 100644 index a21e1ec5f..000000000 --- a/ui/icon/svg/tv-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/tv.svg b/ui/icon/svg/tv.svg deleted file mode 100644 index f6e461afe..000000000 --- a/ui/icon/svg/tv.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/umbrella-outline.svg b/ui/icon/svg/umbrella-outline.svg deleted file mode 100644 index 7a65335da..000000000 --- a/ui/icon/svg/umbrella-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/umbrella-sharp.svg b/ui/icon/svg/umbrella-sharp.svg deleted file mode 100644 index 252d76aa8..000000000 --- a/ui/icon/svg/umbrella-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/umbrella.svg b/ui/icon/svg/umbrella.svg deleted file mode 100644 index 15d21c62d..000000000 --- a/ui/icon/svg/umbrella.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/unlink-outline.svg b/ui/icon/svg/unlink-outline.svg deleted file mode 100644 index e890eaef2..000000000 --- a/ui/icon/svg/unlink-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/unlink-sharp.svg b/ui/icon/svg/unlink-sharp.svg deleted file mode 100644 index 037cfd01f..000000000 --- a/ui/icon/svg/unlink-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/unlink.svg b/ui/icon/svg/unlink.svg deleted file mode 100644 index 9a97ff8ca..000000000 --- a/ui/icon/svg/unlink.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/videocam-off-outline.svg b/ui/icon/svg/videocam-off-outline.svg deleted file mode 100644 index 45f62b445..000000000 --- a/ui/icon/svg/videocam-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/videocam-off-sharp.svg b/ui/icon/svg/videocam-off-sharp.svg deleted file mode 100644 index b54b9b04a..000000000 --- a/ui/icon/svg/videocam-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/videocam-off.svg b/ui/icon/svg/videocam-off.svg deleted file mode 100644 index c8d3a73ab..000000000 --- a/ui/icon/svg/videocam-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/videocam-outline.svg b/ui/icon/svg/videocam-outline.svg deleted file mode 100644 index 198cfa8ec..000000000 --- a/ui/icon/svg/videocam-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/videocam-sharp.svg b/ui/icon/svg/videocam-sharp.svg deleted file mode 100644 index 82a86c279..000000000 --- a/ui/icon/svg/videocam-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/videocam.svg b/ui/icon/svg/videocam.svg deleted file mode 100644 index 8bfaefe1d..000000000 --- a/ui/icon/svg/videocam.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-high-outline.svg b/ui/icon/svg/volume-high-outline.svg deleted file mode 100644 index d5232732b..000000000 --- a/ui/icon/svg/volume-high-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-high-sharp.svg b/ui/icon/svg/volume-high-sharp.svg deleted file mode 100644 index b618856ab..000000000 --- a/ui/icon/svg/volume-high-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-high.svg b/ui/icon/svg/volume-high.svg deleted file mode 100644 index d6545d71b..000000000 --- a/ui/icon/svg/volume-high.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-low-outline.svg b/ui/icon/svg/volume-low-outline.svg deleted file mode 100644 index 68ce7c167..000000000 --- a/ui/icon/svg/volume-low-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-low-sharp.svg b/ui/icon/svg/volume-low-sharp.svg deleted file mode 100644 index 241689d7a..000000000 --- a/ui/icon/svg/volume-low-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/volume-low.svg b/ui/icon/svg/volume-low.svg deleted file mode 100644 index c6b43a07f..000000000 --- a/ui/icon/svg/volume-low.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-medium-outline.svg b/ui/icon/svg/volume-medium-outline.svg deleted file mode 100644 index f7049f4f9..000000000 --- a/ui/icon/svg/volume-medium-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-medium-sharp.svg b/ui/icon/svg/volume-medium-sharp.svg deleted file mode 100644 index 9596f5984..000000000 --- a/ui/icon/svg/volume-medium-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-medium.svg b/ui/icon/svg/volume-medium.svg deleted file mode 100644 index 66fc91d1d..000000000 --- a/ui/icon/svg/volume-medium.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-mute-outline.svg b/ui/icon/svg/volume-mute-outline.svg deleted file mode 100644 index a38c8e46a..000000000 --- a/ui/icon/svg/volume-mute-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-mute-sharp.svg b/ui/icon/svg/volume-mute-sharp.svg deleted file mode 100644 index 0a0a7fc6d..000000000 --- a/ui/icon/svg/volume-mute-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-mute.svg b/ui/icon/svg/volume-mute.svg deleted file mode 100644 index 660477ebc..000000000 --- a/ui/icon/svg/volume-mute.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-off-outline.svg b/ui/icon/svg/volume-off-outline.svg deleted file mode 100644 index e4725355b..000000000 --- a/ui/icon/svg/volume-off-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/volume-off-sharp.svg b/ui/icon/svg/volume-off-sharp.svg deleted file mode 100644 index 50598330e..000000000 --- a/ui/icon/svg/volume-off-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/volume-off.svg b/ui/icon/svg/volume-off.svg deleted file mode 100644 index 516afbcba..000000000 --- a/ui/icon/svg/volume-off.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/walk-outline.svg b/ui/icon/svg/walk-outline.svg deleted file mode 100644 index 5630993bf..000000000 --- a/ui/icon/svg/walk-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/walk-sharp.svg b/ui/icon/svg/walk-sharp.svg deleted file mode 100644 index 77b5e24b8..000000000 --- a/ui/icon/svg/walk-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/walk.svg b/ui/icon/svg/walk.svg deleted file mode 100644 index 1ce12d0b9..000000000 --- a/ui/icon/svg/walk.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wallet-outline.svg b/ui/icon/svg/wallet-outline.svg deleted file mode 100644 index 7f82dcb82..000000000 --- a/ui/icon/svg/wallet-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wallet-sharp.svg b/ui/icon/svg/wallet-sharp.svg deleted file mode 100644 index 1032e58c8..000000000 --- a/ui/icon/svg/wallet-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wallet.svg b/ui/icon/svg/wallet.svg deleted file mode 100644 index a563ba1d8..000000000 --- a/ui/icon/svg/wallet.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/warning-outline.svg b/ui/icon/svg/warning-outline.svg deleted file mode 100644 index fb17e121c..000000000 --- a/ui/icon/svg/warning-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/warning-sharp.svg b/ui/icon/svg/warning-sharp.svg deleted file mode 100644 index 9f46e65e7..000000000 --- a/ui/icon/svg/warning-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/warning.svg b/ui/icon/svg/warning.svg deleted file mode 100644 index c8ecbdd91..000000000 --- a/ui/icon/svg/warning.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/watch-outline.svg b/ui/icon/svg/watch-outline.svg deleted file mode 100644 index 4d793695f..000000000 --- a/ui/icon/svg/watch-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/watch-sharp.svg b/ui/icon/svg/watch-sharp.svg deleted file mode 100644 index a52ad052b..000000000 --- a/ui/icon/svg/watch-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/watch.svg b/ui/icon/svg/watch.svg deleted file mode 100644 index 6f57b93d9..000000000 --- a/ui/icon/svg/watch.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/water-outline.svg b/ui/icon/svg/water-outline.svg deleted file mode 100644 index 80bfed10a..000000000 --- a/ui/icon/svg/water-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/water-sharp.svg b/ui/icon/svg/water-sharp.svg deleted file mode 100644 index f989ebe06..000000000 --- a/ui/icon/svg/water-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/water.svg b/ui/icon/svg/water.svg deleted file mode 100644 index 05743d3ef..000000000 --- a/ui/icon/svg/water.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wifi-outline.svg b/ui/icon/svg/wifi-outline.svg deleted file mode 100644 index 86b891f21..000000000 --- a/ui/icon/svg/wifi-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wifi-sharp.svg b/ui/icon/svg/wifi-sharp.svg deleted file mode 100644 index 379f08385..000000000 --- a/ui/icon/svg/wifi-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wifi.svg b/ui/icon/svg/wifi.svg deleted file mode 100644 index b350eb787..000000000 --- a/ui/icon/svg/wifi.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wine-outline.svg b/ui/icon/svg/wine-outline.svg deleted file mode 100644 index b1ca9efc5..000000000 --- a/ui/icon/svg/wine-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/wine-sharp.svg b/ui/icon/svg/wine-sharp.svg deleted file mode 100644 index c855186ef..000000000 --- a/ui/icon/svg/wine-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/wine.svg b/ui/icon/svg/wine.svg deleted file mode 100644 index 62eab0692..000000000 --- a/ui/icon/svg/wine.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/woman-outline.svg b/ui/icon/svg/woman-outline.svg deleted file mode 100644 index 4fb2f0d8a..000000000 --- a/ui/icon/svg/woman-outline.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/svg/woman-sharp.svg b/ui/icon/svg/woman-sharp.svg deleted file mode 100644 index d3ca0d4f2..000000000 --- a/ui/icon/svg/woman-sharp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/icon/svg/woman.svg b/ui/icon/svg/woman.svg deleted file mode 100644 index 7596bc111..000000000 --- a/ui/icon/svg/woman.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ui/icon/tsconfig.json b/ui/icon/tsconfig.json deleted file mode 100644 index fb9aae9cf..000000000 --- a/ui/icon/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": ".", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../element"}, - {"path": "../../core/fetch"}, - {"path": "../../core/logger"} - ] -} diff --git a/ui/playground/.gitignore b/ui/playground/.gitignore deleted file mode 100644 index e063f41dd..000000000 --- a/ui/playground/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dist.css diff --git a/ui/playground/app.html b/ui/playground/app.html deleted file mode 100644 index 4eee20ba4..000000000 --- a/ui/playground/app.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - -
    - - -
    - - - - - -
    - -
    - - -
    - عنوان صفحه -
    - - - - -
    - - -
    ...
    - - - -
    -
    - - diff --git a/ui/playground/button.html b/ui/playground/button.html deleted file mode 100644 index dfa518905..000000000 --- a/ui/playground/button.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - -
    - -
    - - diff --git a/ui/playground/fab.html b/ui/playground/fab.html deleted file mode 100644 index b0e1a23c3..000000000 --- a/ui/playground/fab.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - -
    -
    - - - - - -
    - -
    - - - -
    -
    - - diff --git a/ui/playground/index.css b/ui/playground/index.css deleted file mode 100644 index d7f2a92bf..000000000 --- a/ui/playground/index.css +++ /dev/null @@ -1,2 +0,0 @@ -@import '@alwatr/style/main.css'; -@import '@alwatr/style/palettes/h260.css'; diff --git a/ui/playground/index.html b/ui/playground/index.html deleted file mode 100644 index 79669d5c0..000000000 --- a/ui/playground/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - -
    -
      -
    1. App
    2. -
    3. Top App Bar
    4. -
    5. Navigation Bar
    6. -
    7. Navigation Drawer
    8. -
    9. Navigation Rail
    10. -
    11. FAB
    12. -
    13. Button
    14. -
    15. Page Test
    16. -
    -
    - - diff --git a/ui/playground/navigation-bar.html b/ui/playground/navigation-bar.html deleted file mode 100644 index 082fbc51f..000000000 --- a/ui/playground/navigation-bar.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - - - - diff --git a/ui/playground/navigation-drawer.html b/ui/playground/navigation-drawer.html deleted file mode 100644 index 2ca9a3907..000000000 --- a/ui/playground/navigation-drawer.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - - - - - diff --git a/ui/playground/navigation-rail.html b/ui/playground/navigation-rail.html deleted file mode 100644 index 9cf337895..000000000 --- a/ui/playground/navigation-rail.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - - - - - diff --git a/ui/playground/package.json b/ui/playground/package.json deleted file mode 100644 index 259ec649b..000000000 --- a/ui/playground/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@alwatr/playground", - "version": "1.0.0", - "description": "Alwatr Ui Playground", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/playground" - }, - "browserslist": "> 1.5%, not dead", - "postcss": { - "plugins": { - "postcss-import": {}, - "tailwindcss/nesting": {}, - "tailwindcss": {}, - "postcss-preset-env": {} - } - }, - "scripts": { - "b": "yarn build", - "s": "yarn start", - "w": "yarn watch", - "start": "run-s clean build serve", - "build": "run-s build:*", - "build:css": "postcss index.css --map --output dist.css", - "serve": "wds", - "watch": "run-p watch:css serve", - "watch:css": "yarn build:css --watch" - } -} diff --git a/ui/playground/page-test.html b/ui/playground/page-test.html deleted file mode 100644 index 8df14cdb0..000000000 --- a/ui/playground/page-test.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - -
    - -
    - -
    - - - - - -
    -
    -
    -
    - New dashboard is live! -
    -

    Premium leads for all your SaaS projects

    -

    - Focus on building your amazing service and we will do the rest. We grew more than 10,000 online - businesses. -

    - -
    -
    -
    -
    -
    -
    -
    -
    - Hero Image -
    -
    -
    - -
    - - - -
    -
    - -
    -
    - - - -
    -

    Fully Featured

    -

    - Amazing and latest features to help you build your next idea with cool tools and super modern - technology. -

    -
    - - - -
    -
    -
    - Preview Feature Image -
    -

    Amazing Feature

    -

    - Donec lacinia venenatis metus at bibendum? In hac habitasse platea dictumst. Proin ac nibh rutrum - lectus rhoncus eleifend. Sed porttitor pretium venenatis. Suspendisse potenti. -

    -
    -
    -
    - Preview Feature Image -
    -

    Inspiring Feature

    -

    - Donec lacinia venenatis metus at bibendum? In hac habitasse platea dictumst. Proin ac nibh rutrum - lectus rhoncus eleifend. Sed porttitor pretium venenatis. Suspendisse potenti. -

    -
    -
    -
    - Preview Feature Image -
    -

    Cool Feature

    -

    - Donec lacinia venenatis metus at bibendum? In hac habitasse platea dictumst. Proin ac nibh rutrum - lectus rhoncus eleifend. Sed porttitor pretium venenatis. Suspendisse potenti. -

    -
    -
    - -
    -
    - - - -
    -
    - -
    -
    We Answer
    -

    Frequently Asked Questions

    -

    - Be sure to - get in touch and let us - know if you have any further questions. -

    -
    - - - -
    -
    -

    What features are included?

    -

    - Etiam egestas fringilla enim, id convallis lectus laoreet at. Fusce purus nisi, gravida sed - consectetur ut, interdum quis nisi. Quisque egestas nisl id lectus facilisis scelerisque. -

    -
    -
    -

    Do I get access to the community?

    -

    - Etiam egestas fringilla enim, id convallis lectus laoreet at. Fusce purus nisi, gravida sed - consectetur ut, interdum quis nisi. Quisque egestas nisl id lectus facilisis scelerisque. -

    -
    -
    -

    Do you offer email support?

    -

    - Etiam egestas fringilla enim, id convallis lectus laoreet at. Fusce purus nisi, gravida sed - consectetur ut, interdum quis nisi. Quisque egestas nisl id lectus facilisis scelerisque. -

    -
    -
    -

    Are the updates free for life?

    -

    - Etiam egestas fringilla enim, id convallis lectus laoreet at. Fusce purus nisi, gravida sed - consectetur ut, interdum quis nisi. Quisque egestas nisl id lectus facilisis scelerisque. -

    -
    -
    - -
    -
    - - - -
    -
    -
    -
    -
    -
    -
    - -
    -

    - Ready? Let’s do it! -

    -

    - Get your own custom dashboard and start building amazing services, always with the most solid and - rock steady foundation. -

    -
    - - - - - -
    -
    -
    -
    -
    - - - - - -
    - -
    - - - diff --git a/ui/playground/tailwind.config.js b/ui/playground/tailwind.config.js deleted file mode 100644 index 3981a8b17..000000000 --- a/ui/playground/tailwind.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import {tailwindConfig} from '@alwatr/style' - -export default { - ...tailwindConfig, - content: [ - '**/*.html', - // join(dirname(require.resolve('@alwatr/ui-kit2')), '**/*.ts'), - ], -}; diff --git a/ui/playground/top-app-bar.html b/ui/playground/top-app-bar.html deleted file mode 100644 index cc49b6490..000000000 --- a/ui/playground/top-app-bar.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - Alwatr UI Playground - - - - - - - - - - - -
    - -
    - - -
    - عنوان صفحه -
    - - - - -
    - -
    - - -
    -
    - - -
    - - - - -
    - -
    -
    عنوان صفحه
    -
    -
    - -
    - - -
    -
    - - -
    - - - - -
    - -
    -
    عنوان صفحه
    -
    -
    -
    - - diff --git a/ui/playground/tsconfig.json b/ui/playground/tsconfig.json deleted file mode 100644 index ba6f95e39..000000000 --- a/ui/playground/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build", - "noEmit": true, - "plugins": [], - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [] -} diff --git a/ui/playground/web-dev-server.config.js b/ui/playground/web-dev-server.config.js deleted file mode 100644 index 22626d67b..000000000 --- a/ui/playground/web-dev-server.config.js +++ /dev/null @@ -1,10 +0,0 @@ -// https://modern-web.dev/docs/dev-server/cli-and-configuration/#configuration-file -/** @type {import('@web/dev-server').DevServerConfig} */ -const config = { - hostname: '0.0.0.0', - port: 8090, - open: true, - watch: true, -}; - -export default config; diff --git a/ui/pwa-helper/CHANGELOG.md b/ui/pwa-helper/CHANGELOG.md deleted file mode 100644 index 660ede586..000000000 --- a/ui/pwa-helper/CHANGELOG.md +++ /dev/null @@ -1,158 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.2](https://github.com/AliMD/alwatr/compare/@alwatr/pwa-helper@1.1.1...@alwatr/pwa-helper@1.1.2) (2023-09-12) - -**Note:** Version bump only for package @alwatr/pwa-helper - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/pwa-helper@1.1.0...@alwatr/pwa-helper@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/pwa-helper - -# 1.1.0 (2023-09-12) - -### Features - -* **pwa-helper/esbuild:** support scss files ([56a8965](https://github.com/AliMD/alwatr/commit/56a896569d089fdd83e79ff1472a3c851238cbf8)) -* **pwa-helper:** handle `svg` files ([2ad14e2](https://github.com/AliMD/alwatr/commit/2ad14e29176856fdcbbaa51aa98ab7dab6639188)) -* **wds:** add 0.0.0.0 hostname ([5addfb7](https://github.com/AliMD/alwatr/commit/5addfb72a58b5ee32e84346387edc17b45d26d73)) - -# 1.0.0 (2023-06-14) - -# 0.32.0 (2023-05-27) - -# 0.31.0 (2023-05-08) - -### Bug Fixes - -* compatible with new _addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -* **pwa-element:** scroll issue ([136dbd0](https://github.com/AliMD/alwatr/commit/136dbd07592fdae28bbe0969a38e82fd2f49c144)) -* **pwa-helper/esbuild:** hash entryNames ([0394a26](https://github.com/AliMD/alwatr/commit/0394a26d9f72d21ca762af3c04f5521e6e600f28)) -* **pwa-helper:** disable auto scroll on page changes temporary ([d2cc128](https://github.com/AliMD/alwatr/commit/d2cc12889664fbd324c53ecc00582995fd2ab552)) -* **pwa-helper:** render routerOutlet to this ([e06bc3a](https://github.com/AliMD/alwatr/commit/e06bc3ac95a9f640ff7e8d912328e4c2e3a64b21)) -* **pwa-helper:** show user notify version ([7a01234](https://github.com/AliMD/alwatr/commit/7a01234a5e05cbc66438c589c8783be2e2d8adf4)) - -### Features - -* **pwa-helper:** add build short sha to alwatr version ([0411b9c](https://github.com/AliMD/alwatr/commit/0411b9c7e92b243ed4f24337432c2f0412817920)) - -### Performance Improvements - -* **pwa:** optimize downloading performance ([39ef8b4](https://github.com/AliMD/alwatr/commit/39ef8b45065cbfff45273441cca527a1195d9750)) - -# 0.30.0 (2023-03-06) - -### Bug Fixes - -* configs ([00f85f5](https://github.com/AliMD/alwatr/commit/00f85f525f07334544cc9e007c49f2343ba8cec3)) -* **pwa-helper:** build banner ([359fe73](https://github.com/AliMD/alwatr/commit/359fe73eec0fa50299b07525684e4a5fa84cd3a6)) -* **pwa-helper:** dereference on copy ([7bd54eb](https://github.com/AliMD/alwatr/commit/7bd54eb775708ea625406268aa47735e7eb1f4a5)) -* **pwa-helper:** getConfKey type ([0b8901c](https://github.com/AliMD/alwatr/commit/0b8901cc74ba54d81b740a21b29e439513cc2a45)) -* **pwa-helper:** pwa version ([5a35f00](https://github.com/AliMD/alwatr/commit/5a35f00ec452726cb63f81e02d1387453af30ae8)) - -### Features - -* **pwa-helper:** back-click-event ([0937837](https://github.com/AliMD/alwatr/commit/0937837185dd9fd2a49e3d16086854f6244aa450)) -* **pwa-helper:** central pwa-dev-server.config.js ([147c7e7](https://github.com/AliMD/alwatr/commit/147c7e7bac17179619cfca153463db74f134ba7b)) -* **pwa-helper:** handle nack to home event ([4e30cdc](https://github.com/AliMD/alwatr/commit/4e30cdcc36f0cc450310ed7c98c1fae828efbf6e)) -* **pwa-helper:** new render layout with root top-app-bar and context ([62f7918](https://github.com/AliMD/alwatr/commit/62f79185fddf48175036b03577eeb06bd6335c19)) -* **pwa-helper:** scrollToTopCommand ([630d6cd](https://github.com/AliMD/alwatr/commit/630d6cd4543529f0f650ff99ad4a99803e85843b)) -* **pwa-helper:** using UnresolvedMixin ([3c0f95e](https://github.com/AliMD/alwatr/commit/3c0f95ee5395049aa7f10f3d562f0aa41773e531)) - -### Performance Improvements - -* **pwa-element:** scheduleUpdate by animation frame ([388004d](https://github.com/AliMD/alwatr/commit/388004dd3b355319968135206dfcd600d46921dd)) - -# 0.29.0 (2023-02-10) - -### Bug Fixes - -* **pwa-helper:** _routeChanged ([5a22e3f](https://github.com/AliMD/alwatr/commit/5a22e3f9bea3ed03a49889d7725cb807f359c02a)) -* **pwa-helper:** disable dynamic entryNames in build ([b829639](https://github.com/AliMD/alwatr/commit/b829639bf3b4940bee44ca6c73aa8ce74f35c3ca)) -* **pwa-helper:** show version ([9235dee](https://github.com/AliMD/alwatr/commit/9235dee636a76ad9e07686564ebdfa45f45e8928)) -* **pwa-helper:** version and old workbox config ([3646f14](https://github.com/AliMD/alwatr/commit/3646f144669b8b46266833b19fd1aff064b13ad8)) -* **snackbar:** padding ([6765f89](https://github.com/AliMD/alwatr/commit/6765f8900e798aea1f77e9e76be36e055411dd3e)) - -### Features - -* debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -* **icon-button:** new standard icon button ([b8e9836](https://github.com/AliMD/alwatr/commit/b8e98365fe3e8f1f6db1a21480257049c0294f03)) -* **pwa-helper:** esbuild ([9694294](https://github.com/AliMD/alwatr/commit/9694294815203a86fbbfde8288371ab347c5ec11)) -* **pwa-helper:** get config utils ([df0b593](https://github.com/AliMD/alwatr/commit/df0b593985440267f32ecf646422a3fa13692b03)) -* **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -* **pwa-helper:** user toast on sw signals ([2569728](https://github.com/AliMD/alwatr/commit/2569728683e49e020ce77a573aa79f2453bfe774)) -* **soffit:** enhance develope scripts ([d4b5f5b](https://github.com/AliMD/alwatr/commit/d4b5f5b233f2da196192ad03ef755abda0dcb3cf)) - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/pwa-helper - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/pwa-helper - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **pwa-element:** scroll issue ([136dbd0](https://github.com/AliMD/alwatr/commit/136dbd07592fdae28bbe0969a38e82fd2f49c144)) -- **pwa-helper/esbuild:** hash entryNames ([0394a26](https://github.com/AliMD/alwatr/commit/0394a26d9f72d21ca762af3c04f5521e6e600f28)) -- **pwa-helper:** disable auto scroll on page changes temporary ([d2cc128](https://github.com/AliMD/alwatr/commit/d2cc12889664fbd324c53ecc00582995fd2ab552)) -- **pwa-helper:** render routerOutlet to this ([e06bc3a](https://github.com/AliMD/alwatr/commit/e06bc3ac95a9f640ff7e8d912328e4c2e3a64b21)) -- **pwa-helper:** show user notify version ([7a01234](https://github.com/AliMD/alwatr/commit/7a01234a5e05cbc66438c589c8783be2e2d8adf4)) - -### Features - -- **pwa-helper:** add build short sha to alwatr version ([0411b9c](https://github.com/AliMD/alwatr/commit/0411b9c7e92b243ed4f24337432c2f0412817920)) - -### Performance Improvements - -- **pwa:** optimize downloading performance ([39ef8b4](https://github.com/AliMD/alwatr/commit/39ef8b45065cbfff45273441cca527a1195d9750)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- configs ([00f85f5](https://github.com/AliMD/alwatr/commit/00f85f525f07334544cc9e007c49f2343ba8cec3)) -- **pwa-helper:** build banner ([359fe73](https://github.com/AliMD/alwatr/commit/359fe73eec0fa50299b07525684e4a5fa84cd3a6)) -- **pwa-helper:** dereference on copy ([7bd54eb](https://github.com/AliMD/alwatr/commit/7bd54eb775708ea625406268aa47735e7eb1f4a5)) -- **pwa-helper:** getConfKey type ([0b8901c](https://github.com/AliMD/alwatr/commit/0b8901cc74ba54d81b740a21b29e439513cc2a45)) -- **pwa-helper:** pwa version ([5a35f00](https://github.com/AliMD/alwatr/commit/5a35f00ec452726cb63f81e02d1387453af30ae8)) - -### Features - -- **pwa-helper:** back-click-event ([0937837](https://github.com/AliMD/alwatr/commit/0937837185dd9fd2a49e3d16086854f6244aa450)) -- **pwa-helper:** central pwa-dev-server.config.js ([147c7e7](https://github.com/AliMD/alwatr/commit/147c7e7bac17179619cfca153463db74f134ba7b)) -- **pwa-helper:** handle nack to home event ([4e30cdc](https://github.com/AliMD/alwatr/commit/4e30cdcc36f0cc450310ed7c98c1fae828efbf6e)) -- **pwa-helper:** new render layout with root top-app-bar and context ([62f7918](https://github.com/AliMD/alwatr/commit/62f79185fddf48175036b03577eeb06bd6335c19)) -- **pwa-helper:** scrollToTopCommand ([630d6cd](https://github.com/AliMD/alwatr/commit/630d6cd4543529f0f650ff99ad4a99803e85843b)) -- **pwa-helper:** using UnresolvedMixin ([3c0f95e](https://github.com/AliMD/alwatr/commit/3c0f95ee5395049aa7f10f3d562f0aa41773e531)) - -### Performance Improvements - -- **pwa-element:** scheduleUpdate by animation frame ([388004d](https://github.com/AliMD/alwatr/commit/388004dd3b355319968135206dfcd600d46921dd)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **pwa-helper:** \_routeChanged ([5a22e3f](https://github.com/AliMD/alwatr/commit/5a22e3f9bea3ed03a49889d7725cb807f359c02a)) -- **pwa-helper:** disable dynamic entryNames in build ([b829639](https://github.com/AliMD/alwatr/commit/b829639bf3b4940bee44ca6c73aa8ce74f35c3ca)) -- **pwa-helper:** show version ([9235dee](https://github.com/AliMD/alwatr/commit/9235dee636a76ad9e07686564ebdfa45f45e8928)) -- **pwa-helper:** version and old workbox config ([3646f14](https://github.com/AliMD/alwatr/commit/3646f144669b8b46266833b19fd1aff064b13ad8)) -- **snackbar:** padding ([6765f89](https://github.com/AliMD/alwatr/commit/6765f8900e798aea1f77e9e76be36e055411dd3e)) - -### Features - -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **icon-button:** new standard icon button ([b8e9836](https://github.com/AliMD/alwatr/commit/b8e98365fe3e8f1f6db1a21480257049c0294f03)) -- **pwa-helper:** esbuild ([9694294](https://github.com/AliMD/alwatr/commit/9694294815203a86fbbfde8288371ab347c5ec11)) -- **pwa-helper:** get config utils ([df0b593](https://github.com/AliMD/alwatr/commit/df0b593985440267f32ecf646422a3fa13692b03)) -- **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -- **pwa-helper:** user toast on sw signals ([2569728](https://github.com/AliMD/alwatr/commit/2569728683e49e020ce77a573aa79f2453bfe774)) -- **soffit:** enhance develope scripts ([d4b5f5b](https://github.com/AliMD/alwatr/commit/d4b5f5b233f2da196192ad03ef755abda0dcb3cf)) diff --git a/ui/pwa-helper/README.md b/ui/pwa-helper/README.md deleted file mode 100644 index 30b635be7..000000000 --- a/ui/pwa-helper/README.md +++ /dev/null @@ -1 +0,0 @@ -# Alwatr PWA Helper - `@alwatr/pwa-helper` diff --git a/ui/pwa-helper/esbuild.mjs b/ui/pwa-helper/esbuild.mjs deleted file mode 100755 index 654539714..000000000 --- a/ui/pwa-helper/esbuild.mjs +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable no-undef */ -/* eslint-disable @typescript-eslint/explicit-function-return-type */ -import {execSync} from 'child_process'; -import {promises as fs, existsSync} from 'node:fs'; - -import {createLogger} from '@alwatr/logger'; -import * as esbuild from 'esbuild'; -import {generateSW} from 'workbox-build'; - -import packageJson from './package.json' assert {type: 'json'}; - -const logger = createLogger('alwatr-pwa-build'); -const banner = '/* ..:: Alwatr PWA ::.. */\n'; - -const srcDir = 'src'; -const resDir = 'res'; -const outDir = 'dist'; -const srcFilename = 'alwatr-pwa'; - -const cleanMode = process.argv.includes('--clean'); -const watchMode = process.argv.includes('--watch'); -const debugMode = process.argv.includes('--debug'); -const prettyMode = process.argv.includes('--pretty'); - -const gitShortSha = execSync('git rev-parse --short HEAD').toString().trim(); - -logger.logOther?.(banner); - -logger.logProperty?.('cleanMode', cleanMode); -logger.logProperty?.('watchMode', watchMode); -logger.logProperty?.('debugMode', debugMode); -logger.logProperty?.('prettyMode', prettyMode); - -if (cleanMode) { - logger.logMethod?.('cleanDist'); - await fs.rm(outDir, {recursive: true, force: true}); -} - -const copyPromise = fs.cp(resDir, outDir, {recursive: true, force: true, dereference: true}); - -const esbuildContext = await esbuild.context({ - entryPoints: [`${srcDir}/${srcFilename}.ts`], - - logLevel: 'info', - platform: 'browser', - target: 'es2018', - format: 'esm', - conditions: debugMode ? ['development'] : undefined, - - minify: !prettyMode, - treeShaking: true, - sourcemap: true, - sourcesContent: debugMode, - bundle: true, - splitting: true, - charset: 'utf8', - legalComments: 'none', - metafile: true, - - define: { - _ALWATR_VERSION_: `'${packageJson.version}+${gitShortSha}'`, - }, - // drop: ['debugger'], - - loader: { - '.png': 'copy', - '.jpg': 'copy', - '.woff': 'copy', - '.woff2': 'copy', - '.svg': 'text', - '.scss': 'css', - }, - - banner: { - js: banner, - css: banner, - }, - - outbase: srcDir, - outdir: outDir, - assetNames: 'asset/[name]-[hash]', - entryNames: watchMode ? '[name]' : '[dir]/[name]-[hash]', - chunkNames: 'chunks/[name]-[hash]', -}); - -const esBuildPromise = esbuildContext.rebuild(); - -async function makeHtml() { - logger.logMethod?.('makeHtml'); - - let htmlContent = await fs.readFile(`${resDir}/index.html`, {encoding: 'utf-8'}); - - const metafile = (await esBuildPromise).metafile; - const outFiles = Object.keys(metafile.outputs); - - const jsFilename = outFiles - .find((filename) => filename.includes(srcFilename) && filename.endsWith('.js')) - .substring(outDir.length + 1); - - const cssFilename = outFiles - .find((filename) => filename.includes(srcFilename) && filename.endsWith('.css')) - .substring(outDir.length + 1); - - logger.logProperty?.('jsFilename', jsFilename); - logger.logProperty?.('cssFilename', cssFilename); - - if (!existsSync(`${outDir}/${jsFilename}`)) { - logger.error('makeHtml', 'js_filename_not_found', {jsFilename}); - throw new Error('js_filename_not_found'); - } - - if (!existsSync(`${outDir}/${cssFilename}`)) { - logger.error('makeHtml', 'css_filename_not_found', {cssFilename}); - throw new Error('css_filename_not_found'); - } - - htmlContent = htmlContent - .replaceAll('alwatr-pwa.css', cssFilename) - .replaceAll('alwatr-pwa.js', jsFilename); - - await copyPromise; // wait to cp done - await fs.writeFile(`${outDir}/index.html`, htmlContent, {encoding: 'utf-8', flag: 'w'}); -} - -async function buildServiceWorker() { - logger.logMethod?.('buildServiceWorker'); - - const build = await generateSW({ - swDest: `${outDir}/service-worker.js`, - globDirectory: `${outDir}/`, - clientsClaim: true, - skipWaiting: true, - globPatterns: [ - '**/*.{js,css,json,png,svg,ico,webp,woff2,html}', - ], - }); - - logger.logOther?.('serviceWorkerPath', build); -} - -if (watchMode) { - esbuildContext.watch({}); -} -else { - await makeHtml(); - esbuildContext.dispose(); - - - if (debugMode) { - console.log(await esbuild.analyzeMetafile((await esBuildPromise).metafile)); - } - - await buildServiceWorker(); // makeHtml must be done first -} - -/* - TODO: - - Input Config - - version - - Workbox and sw - - Res (all assets) hash - - PostCSS css file - - lit css loader - - PostCSS lit internal styles - - Dynamic from @alwatr/build - - sideEffects - https://esbuild.github.io/api/#ignore-annotations - https://webpack.js.org/guides/tree-shaking/ - - readme - https://esbuild.github.io/api/#write - https://github.com/fakundo/esbuild-plugin-replace-regex/blob/master/src/index.js#L30 - https://github.com/zandaqo/esbuild-plugin-lit/blob/master/css-loader.ts - https://github.com/chialab/rna/tree/main/packages/esbuild-plugin-html -*/ diff --git a/ui/pwa-helper/package.json b/ui/pwa-helper/package.json deleted file mode 100644 index 970017927..000000000 --- a/ui/pwa-helper/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@alwatr/pwa-helper", - "version": "1.1.2", - "description": "Alwatr PWA Helper", - "keywords": [ - "element", - "lit", - "lit-element", - "web-component", - "mixin", - "typescript", - "esm", - "alwatr" - ], - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/element" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/pwa-helper#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/element": "^1.1.2", - "@alwatr/i18n": "^1.1.2", - "@alwatr/logger": "^1.1.2", - "@alwatr/ui-kit": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/ui/pwa-helper/pwa-dev-server.config.js b/ui/pwa-helper/pwa-dev-server.config.js deleted file mode 100644 index 24b1051af..000000000 --- a/ui/pwa-helper/pwa-dev-server.config.js +++ /dev/null @@ -1,25 +0,0 @@ -import {existsSync} from 'node:fs'; - -// https://modern-web.dev/docs/dev-server/cli-and-configuration/#configuration-file -/** @type {import('@web/dev-server').DevServerConfig} */ -export const config = { - hostname: '0.0.0.0', - port: 8080, - open: true, - watch: true, - // debug: true, - rootDir: 'dist', - appIndex: 'index.html', - plugins: [], - middleware: [(context, next) => { - // if file not found, return app index.html - if (!( - context.url === '/' || - context.url.startsWith('/__w') || - existsSync(config.rootDir + context.url) - )) { - context.url = config.appIndex; - } - return next(); - }], -}; diff --git a/ui/pwa-helper/src/config.ts b/ui/pwa-helper/src/config.ts deleted file mode 100644 index 17ba9771f..000000000 --- a/ui/pwa-helper/src/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {getLocalStorageItem} from '@alwatr/util'; - -import type {Stringifyable, StringifyableRecord} from '@alwatr/type'; - -declare global { - // eslint-disable-next-line no-var - var appConfig: StringifyableRecord; -} - -// TODO: config-context with dynamic import like l18e - -/** - * Debug app config. - * - * Example: - * - * ```ts - * localStorage.setItem('DEBUG_CONFIG', JSON.stringify(globalThis.appConfig)) - * ``` - */ -const debugConfig = getLocalStorageItem('DEBUG_CONFIG', null); -if (debugConfig != null) { - globalThis.appConfig = debugConfig; -} - -export function getConfKey(key: string): T { - const val = globalThis.appConfig?.[key]; - if (val == null) throw new Error('invalid_app_config', {cause: {key, val}}); - return val as T; -} diff --git a/ui/pwa-helper/src/context.ts b/ui/pwa-helper/src/context.ts deleted file mode 100644 index 08edc348b..000000000 --- a/ui/pwa-helper/src/context.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {contextProvider, commandTrigger} from '@alwatr/signal'; - -import type {TopAppBarContent} from '@alwatr/ui-kit/top-app-bar/top-app-bar.js'; - -export const topAppBarContextProvider = contextProvider.bind('top_app_bar_context'); -// export const topAppBarContextConsumer = contextConsumer.bind(topAppBarContextProvider.id); - -export const scrollToTopCommand = commandTrigger.bind<{smooth?: boolean}, undefined>('command_scroll_to_top'); diff --git a/ui/pwa-helper/src/logger.ts b/ui/pwa-helper/src/logger.ts deleted file mode 100644 index 085991f50..000000000 --- a/ui/pwa-helper/src/logger.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {createLogger, globalAlwatr} from '@alwatr/logger'; - -export const logger = createLogger('pwa-helper'); - -globalAlwatr.registeredList.push({ - name: '@alwatr/pwa-helper', - version: _ALWATR_VERSION_, -}); diff --git a/ui/pwa-helper/src/pwa-element.ts b/ui/pwa-helper/src/pwa-element.ts deleted file mode 100644 index 5bf03ab98..000000000 --- a/ui/pwa-helper/src/pwa-element.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { - cache, - html, - css, - AlwatrBaseElement, - SignalMixin, - RouterMixin, - UnresolvedMixin, - type PropertyValues, - type CSSResultGroup, -} from '@alwatr/element'; -import {localeContextConsumer, setLocale} from '@alwatr/i18n'; -import {RouteContext, routerOutlet, type RoutesConfig} from '@alwatr/router'; -import {commandHandler, commandTrigger} from '@alwatr/signal'; -import '@alwatr/ui-kit/snackbar/controller.js'; -import '@alwatr/ui-kit/style/pwa.css'; -import '@alwatr/ui-kit/style/token.css'; -import '@alwatr/ui-kit/top-app-bar/top-app-bar.js'; -import {untilNextFrame} from '@alwatr/util'; - -import {scrollToTopCommand, topAppBarContextProvider} from './context.js'; -import './signal/back-to-home-click.js'; -import './signal/browser-back-click.js'; -import './signal/register-service-worker-command.js'; -import './signal/sw-user-notify.js'; - -/** - * Alwatr Root Base Element - * - * Include: AlwatrPwaElement, root styles, router config, multi-page render - */ -export class AlwatrPwaElement extends RouterMixin(SignalMixin(UnresolvedMixin(AlwatrBaseElement))) { - static override styles: CSSResultGroup = css` - :host { - contain: size layout paint style; - box-sizing: border-box; - height: 100%; - display: flex; - flex-direction: column; - flex-wrap: nowrap; - align-items: stretch; - overflow: hidden; - overflow: clip; - } - - main { - contain: size layout paint style; - flex-grow: 1; - flex-shrink: 0; - } - - .scroll-area { - overflow-y: auto; - } - - [unresolved] { - display: block; - text-align: center; - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - } - `; - - override connectedCallback(): void { - super.connectedCallback(); - - if (!localeContextConsumer.getValue()) { - setLocale(); - } - - this._addSignalListeners(commandHandler.define<{smooth?: boolean}, undefined>( - scrollToTopCommand.id, - async (option): Promise => { - await untilNextFrame(); - this.renderRoot.querySelector('.scroll-area')?.scrollTo({ - top: 0, - left: 0, - behavior: option.smooth ? 'smooth' : 'auto', - }); - return; - }, - )); - } - - protected _routesConfig: RoutesConfig = { - routeId: (routeContext) => routeContext.sectionList[0]?.toString(), - templates: { - home: () => html`

    Page Home ;)

    `, - _404: () => html`

    404, Not found!

    `, - }, - }; - - protected override _routeContextUpdated(routeContext: RouteContext): void { - super._routeContextUpdated(routeContext); - scrollToTopCommand.request({smooth: true}); - } - - protected override async scheduleUpdate(): Promise { - await untilNextFrame(); - super.scheduleUpdate(); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return [this._topAppBarTemplate(), this._mainTemplate(), this._navigationBarTemplate()]; - } - - protected override firstUpdated(changedProperties: PropertyValues): void { - super.firstUpdated(changedProperties); - commandTrigger.request('register_service_worker_command', {}); - } - - protected _topAppBarTemplate(): unknown { - return html``; - } - - protected _mainTemplate(): unknown { - return html`
    ${cache(routerOutlet(this._routesConfig, this))}
    `; - } - - protected _navigationBarTemplate(): unknown { - return html`
    Navigation bar...
    `; - } -} diff --git a/ui/pwa-helper/src/signal/back-to-home-click.ts b/ui/pwa-helper/src/signal/back-to-home-click.ts deleted file mode 100644 index d73d6b21e..000000000 --- a/ui/pwa-helper/src/signal/back-to-home-click.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {redirect} from '@alwatr/router'; -import {eventListener} from '@alwatr/signal'; - -import {logger} from '../logger.js'; - -import type {ClickSignalType} from '@alwatr/type'; - -eventListener.subscribe('back_to_home_click_event', () => { - logger.logMethod?.('back_to_home_click_event'); - redirect({sectionList: []}); -}); diff --git a/ui/pwa-helper/src/signal/browser-back-click.ts b/ui/pwa-helper/src/signal/browser-back-click.ts deleted file mode 100644 index 5b58878dd..000000000 --- a/ui/pwa-helper/src/signal/browser-back-click.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {eventListener} from '@alwatr/signal'; - -import {logger} from '../logger.js'; - -import type {ClickSignalType} from '@alwatr/type'; - -eventListener.subscribe('browser_back_click_event', () => { - logger.logMethod?.('browser_back_click_event'); - history.back(); -}); - -// TODO: replace all and remove this -eventListener.subscribe('back-click-event', () => { - logger.logMethod?.('browser_back_click_event'); - history.back(); -}); diff --git a/ui/pwa-helper/src/signal/register-service-worker-command.ts b/ui/pwa-helper/src/signal/register-service-worker-command.ts deleted file mode 100644 index 26c359a69..000000000 --- a/ui/pwa-helper/src/signal/register-service-worker-command.ts +++ /dev/null @@ -1,68 +0,0 @@ -import {commandHandler, eventTrigger} from '@alwatr/signal'; -import {StringifyableRecord} from '@alwatr/type'; - -import {logger} from '../logger.js'; - -export interface Options extends StringifyableRecord { - /** - * Service worker path - * - * @default 'service-worker.js' - */ - path?: string, - - /** - * Service worker scope - * - * @default '/' - */ - scope?: string, -} - -commandHandler.define('register_service_worker_command', async (options = {}) => { - options.path ??= 'service-worker.js'; - options.scope ??= '/'; - logger.logMethodArgs?.('registerServiceWorker', options); - - if (!('serviceWorker' in navigator)) { - logger.incident?.('registerServiceWorker', 'sw_unsupported', 'Service worker not supported in this browser'); - return false; - } - - try { - const swRegistration = await navigator.serviceWorker.register(options.path); - swRegistration.addEventListener('updatefound', () => swUpdateFound(swRegistration.installing)); - logger.logOther?.('Service worker registered'); - eventTrigger.dispatch('service_worker_registered', null); - } - catch (err) { - logger.error('registerServiceWorker', 'sw_reg_fail', 'Service worker registration failed'); - eventTrigger.dispatch('service_worker_register_failed', null); - return false; - } - - return true; -}); - -function swUpdateFound(sw: ServiceWorker | null): void { - if (sw == null) return; - logger.logMethod?.('swUpdateFound'); - sw.addEventListener('statechange', () => swStateChange(sw)); -} - -function swStateChange(sw: ServiceWorker): void { - logger.logMethodArgs?.('swStateChange', sw.state); - if (sw.state === 'installed') { - // if old controller available then its update else its new install - if (navigator.serviceWorker.controller) { - // send sw-updated signal; - eventTrigger.dispatch('service_worker_updated', null); - } - else { - eventTrigger.dispatch('service_worker_installed', null); - } - } - else if (sw.state === 'redundant') { - logger.accident('swStateChange', 'sw_redundant', 'Service worker redundant'); - } -} diff --git a/ui/pwa-helper/src/signal/sw-user-notify.ts b/ui/pwa-helper/src/signal/sw-user-notify.ts deleted file mode 100644 index da32723fc..000000000 --- a/ui/pwa-helper/src/signal/sw-user-notify.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {replaceNumber, localeContextConsumer} from '@alwatr/i18n'; -import {eventListener} from '@alwatr/signal'; -import {snackbarSignalTrigger} from '@alwatr/ui-kit/snackbar/show-snackbar.js'; -import {delay, getLocalStorageItem, setLocalStorageItem} from '@alwatr/util'; - -// FIXME: i18n - -eventListener.subscribe('service_worker_registered', async () => { - if (getLocalStorageItem('notify_new_version', null) !== null) { - if (localeContextConsumer.getValue() == null) { - await localeContextConsumer.untilChange(); - } - localStorage.removeItem('notify_new_version'); - snackbarSignalTrigger.request({ - message: `به نسخه ${replaceNumber(_ALWATR_VERSION_.split('+')[0].replace('-beta.', ' بتا '))} خوش‌آمدید.`, - }); - } -}); - -eventListener.subscribe('service_worker_installed', () => void snackbarSignalTrigger.request({ - message: 'برنامه نصب شد و اکنون به صورت آفلاین در دسترس است.', -})); - -eventListener.subscribe('service_worker_updated', async () => { - setLocalStorageItem('notify_new_version', ''); - const response = await snackbarSignalTrigger.requestWithResponse({ - message: 'نسخه جدید این برنامه نصب و هم‌اکنون در دسترس است.', - actionLabel: 'به‌روزرسانی', - duration: -1, - }); - if (response.actionButton) { - await delay(500); - window.location.reload(); - } -}); - diff --git a/ui/pwa-helper/tsconfig.json b/ui/pwa-helper/tsconfig.json deleted file mode 100644 index ccff16824..000000000 --- a/ui/pwa-helper/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": ".", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ] - }, - // files, include and exclude from the inheriting config are always overwritten. - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"}, - {"path": "../../core/i18n"}, - {"path": "../../core/type"}, - {"path": "../element"}, - {"path": "../ui-kit"}, - ] -} diff --git a/ui/style/CHANGELOG.md b/ui/style/CHANGELOG.md deleted file mode 100644 index a3c8fd995..000000000 --- a/ui/style/CHANGELOG.md +++ /dev/null @@ -1,30 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.1.1](https://github.com/AliMD/alwatr/compare/@alwatr/style@1.1.0...@alwatr/style@1.1.1) (2023-09-12) - -**Note:** Version bump only for package @alwatr/style - -# 1.1.0 (2023-09-12) - -### Bug Fixes - -* **style:** change backdrop to scrim ([e41d771](https://github.com/AliMD/alwatr/commit/e41d771082933b39035bb91b1fbc6486f4d803a7)) -* **style:** import type issue ([19fc273](https://github.com/AliMD/alwatr/commit/19fc273310c2e32beb1d48224bcebb9f1dd75153)) -* **style:** outline colors ([e948464](https://github.com/AliMD/alwatr/commit/e9484640b2b11ad2e010fcad2b729efb5e0eeb39)) -* **style:** typography fontWeight ([74fc62b](https://github.com/AliMD/alwatr/commit/74fc62b6bbb009090c58bde3db9bfa841fa0131c)) - -### Features - -* **style:** add `stateLayerPlugin` ([db076dd](https://github.com/AliMD/alwatr/commit/db076dd5f3af851e5eac3e1c68d7b1e2cb7cbc0d)) -* **style:** add new color h260 ([c128609](https://github.com/AliMD/alwatr/commit/c128609963df0aba508f239799ef8c52ea066c40)) -* **style:** add our z-index ([af5c97f](https://github.com/AliMD/alwatr/commit/af5c97f6f9fb439ec414e903497f416ddd2a76de)) -* **style:** add ui-kit2 to tailwind content ([8aeb3c9](https://github.com/AliMD/alwatr/commit/8aeb3c90df1e87c1d7e128a0b50662727417e679)) -* **style:** elevation util ([29412d6](https://github.com/AliMD/alwatr/commit/29412d6541ce63e2dbf4078a81b308c1b7a6020c)) -* **style:** enhance stateHover, stateActive ([0aa3ee1](https://github.com/AliMD/alwatr/commit/0aa3ee1ed13183921aed058502fd961f2902e676)) -* **style:** new package for alwatr 2 css system ([9b9c791](https://github.com/AliMD/alwatr/commit/9b9c791570f23ec14d724528b5173cfe93a5e46b)) -* **style:** screen breakpoints ([839b149](https://github.com/AliMD/alwatr/commit/839b14951665fbb109a46713d528e0070da46e4e)) -* **style:** update material 3 colors ([7d8d755](https://github.com/AliMD/alwatr/commit/7d8d75557d927d045889a3463562e50093edbbdc)) -* update postcss-preset-env and browserlist ([b83fcb8](https://github.com/AliMD/alwatr/commit/b83fcb8e7d3f9cfa41f6e846444591642d7ebe6c)) diff --git a/ui/style/README.md b/ui/style/README.md deleted file mode 100644 index fd261bb02..000000000 --- a/ui/style/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Alwatr Style - `@alwatr/style` - -Alwatr shared styles (lib, utils, theme, ...). diff --git a/ui/style/lib/base.css b/ui/style/lib/base.css deleted file mode 100644 index 6045ce374..000000000 --- a/ui/style/lib/base.css +++ /dev/null @@ -1,16 +0,0 @@ -@layer base { - * { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - } - - body { - text-rendering: optimizeLegibility; - font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - tab-size: 4; - text-size-adjust: none; - -webkit-user-drag: none; - -ms-content-zooming: none; - } -} diff --git a/ui/style/lib/colors.css b/ui/style/lib/colors.css deleted file mode 100644 index 09eb1c1ca..000000000 --- a/ui/style/lib/colors.css +++ /dev/null @@ -1,97 +0,0 @@ -@layer base { - :root { - --sys-color-primary: var(--ref-palette-primary40); - --sys-color-primary-container: var(--ref-palette-primary90); - --sys-color-on-primary: var(--ref-palette-primary100); - --sys-color-on-primary-container: var(--ref-palette-primary10); - --sys-color-inverse-primary: var(--ref-palette-primary80); - - --sys-color-secondary: var(--ref-palette-secondary40); - --sys-color-secondary-container: var(--ref-palette-secondary90); - --sys-color-on-secondary: var(--ref-palette-secondary100); - --sys-color-on-secondary-container: var(--ref-palette-secondary10); - - --sys-color-tertiary: var(--ref-palette-tertiary40); - --sys-color-tertiary-container: var(--ref-palette-tertiary90); - --sys-color-on-tertiary: var(--ref-palette-tertiary100); - --sys-color-on-tertiary-container: var(--ref-palette-tertiary10); - - --sys-color-background: var(--ref-palette-neutral98); - --sys-color-surface: var(--ref-palette-neutral98); - --sys-color-surface-bright: var(--ref-palette-neutral98); - --sys-color-surface-dim: var(--ref-palette-neutral90); /* 87! */ - --sys-color-surface-container-lowest: var(--ref-palette-neutral100); - --sys-color-surface-container-low: var(--ref-palette-neutral98); /* 86! */ - --sys-color-surface-container: var(--ref-palette-neutral95); /* 94! */ - --sys-color-surface-container-high: var(--ref-palette-neutral90); /* 92! */ - --sys-color-surface-container-highest: var(--ref-palette-neutral90); - --sys-color-surface-variant: var(--ref-palette-neutral-variant90); - --sys-color-inverse-surface: var(--ref-palette-neutral20); - - --sys-color-on-background: var(--ref-palette-neutral10); - --sys-color-on-surface: var(--ref-palette-neutral10); - --sys-color-on-surface-variant: var(--ref-palette-neutral-variant30); - --sys-color-inverse-on-surface: var(--ref-palette-neutral95); - - --sys-color-outline: var(--ref-palette-neutral-variant50); - --sys-color-outline-variant: var(--ref-palette-neutral-variant80); - - --sys-color-error: var(--ref-palette-error40); - --sys-color-error-container: var(--ref-palette-error90); - --sys-color-on-error: var(--ref-palette-error100); - --sys-color-on-error-container: var(--ref-palette-error10); - - --sys-color-surface-tint: var(--sys-color-primary-hsl); - --sys-color-shadow: var(--ref-palette-neutral0); - --sys-color-scrim: var(--ref-palette-neutral0); - } - - @media (prefers-color-scheme: dark) { - :root { - --sys-color-primary: var(--ref-palette-primary60); - --sys-color-primary-container: var(--ref-palette-primary30); - --sys-color-on-primary: var(--ref-palette-primary20); - --sys-color-on-primary-container: var(--ref-palette-primary90); - --sys-color-inverse-primary: var(--ref-palette-primary40); - - --sys-color-secondary: var(--ref-palette-secondary80); - --sys-color-secondary-container: var(--ref-palette-secondary30); - --sys-color-on-secondary: var(--ref-palette-secondary20); - --sys-color-on-secondary-container: var(--ref-palette-secondary90); - - --sys-color-tertiary: var(--ref-palette-tertiary80); - --sys-color-tertiary-container: var(--ref-palette-tertiary30); - --sys-color-on-tertiary: var(--ref-palette-tertiary20); - --sys-color-on-tertiary-container: var(--ref-palette-tertiary90); - - --sys-color-background: var(--ref-palette-neutral10); /* 6! */ - --sys-color-surface: var(--ref-palette-neutral10); /* 6! */ - --sys-color-surface-bright: var(--ref-palette-neutral24); - --sys-color-surface-dim: var(--ref-palette-neutral10); /* 6! */ - --sys-color-surface-container-lowest: var(--ref-palette-neutral0); /* 4! */ - --sys-color-surface-container-low: var(--ref-palette-neutral10); - --sys-color-surface-container: var(--ref-palette-neutral10); /* 12! */ - --sys-color-surface-container-high: var(--ref-palette-neutral20); /* 17! */ - --sys-color-surface-container-highest: var(--ref-palette-neutral20); /* 22! */ - --sys-color-surface-variant: var(--ref-palette-neutral-variant30); - --sys-color-inverse-surface: var(--ref-palette-neutral90); - - --sys-color-on-background: var(--ref-palette-neutral90); - --sys-color-on-surface: var(--ref-palette-neutral90); - --sys-color-on-surface-variant: var(--ref-palette-neutral-variant80); - --sys-color-inverse-on-surface: var(--ref-palette-neutral20); - - --sys-color-outline: var(--ref-palette-neutral-variant60); - --sys-color-outline-variant: var(--ref-palette-neutral-variant30); - - --sys-color-error: var(--ref-palette-error80); - --sys-color-error-container: var(--ref-palette-error30); - --sys-color-on-error: var(--ref-palette-error20); - --sys-color-on-error-container: var(--ref-palette-error90); - - --sys-color-surface-tint: var(--sys-color-primary-hsl); - --sys-color-shadow: var(--ref-palette-neutral0); - --sys-color-scrim: var(--ref-palette-neutral0); - } - } -} diff --git a/ui/style/lib/colors.ts b/ui/style/lib/colors.ts deleted file mode 100644 index ebd3d2b2e..000000000 --- a/ui/style/lib/colors.ts +++ /dev/null @@ -1,284 +0,0 @@ -import type {Config} from 'tailwindcss'; - -export const refColors = { - refPrimary: { - 0: 'rgba(var(--ref-palette-primary0), )', - 10: 'rgba(var(--ref-palette-primary10), )', - 20: 'rgba(var(--ref-palette-primary20), )', - 25: 'rgba(var(--ref-palette-primary25), )', - 30: 'rgba(var(--ref-palette-primary30), )', - 35: 'rgba(var(--ref-palette-primary35), )', - 40: 'rgba(var(--ref-palette-primary40), )', - 50: 'rgba(var(--ref-palette-primary50), )', - 60: 'rgba(var(--ref-palette-primary60), )', - 70: 'rgba(var(--ref-palette-primary70), )', - 80: 'rgba(var(--ref-palette-primary80), )', - 90: 'rgba(var(--ref-palette-primary90), )', - 95: 'rgba(var(--ref-palette-primary95), )', - 98: 'rgba(var(--ref-palette-primary98), )', - 99: 'rgba(var(--ref-palette-primary99), )', - 100: 'rgba(var(--ref-palette-primary100), )', - }, - - refSecondary: { - 0: 'rgba(var(--ref-palette-secondary0), )', - 10: 'rgba(var(--ref-palette-secondary10), )', - 20: 'rgba(var(--ref-palette-secondary20), )', - 25: 'rgba(var(--ref-palette-secondary25), )', - 30: 'rgba(var(--ref-palette-secondary30), )', - 35: 'rgba(var(--ref-palette-secondary35), )', - 40: 'rgba(var(--ref-palette-secondary40), )', - 50: 'rgba(var(--ref-palette-secondary50), )', - 60: 'rgba(var(--ref-palette-secondary60), )', - 70: 'rgba(var(--ref-palette-secondary70), )', - 80: 'rgba(var(--ref-palette-secondary80), )', - 90: 'rgba(var(--ref-palette-secondary90), )', - 95: 'rgba(var(--ref-palette-secondary95), )', - 98: 'rgba(var(--ref-palette-secondary98), )', - 99: 'rgba(var(--ref-palette-secondary99), )', - 100: 'rgba(var(--ref-palette-secondary100), )', - }, - - refTertiary: { - 0: 'rgba(var(--ref-palette-tertiary0), )', - 10: 'rgba(var(--ref-palette-tertiary10), )', - 20: 'rgba(var(--ref-palette-tertiary20), )', - 25: 'rgba(var(--ref-palette-tertiary25), )', - 30: 'rgba(var(--ref-palette-tertiary30), )', - 35: 'rgba(var(--ref-palette-tertiary35), )', - 40: 'rgba(var(--ref-palette-tertiary40), )', - 50: 'rgba(var(--ref-palette-tertiary50), )', - 60: 'rgba(var(--ref-palette-tertiary60), )', - 70: 'rgba(var(--ref-palette-tertiary70), )', - 80: 'rgba(var(--ref-palette-tertiary80), )', - 90: 'rgba(var(--ref-palette-tertiary90), )', - 95: 'rgba(var(--ref-palette-tertiary95), )', - 98: 'rgba(var(--ref-palette-tertiary98), )', - 99: 'rgba(var(--ref-palette-tertiary99), )', - 100: 'rgba(var(--ref-palette-tertiary100), )', - }, - - refNeutral: { - 0: 'rgba(var(--ref-palette-neutral0), )', - 10: 'rgba(var(--ref-palette-neutral10), )', - 20: 'rgba(var(--ref-palette-neutral20), )', - 25: 'rgba(var(--ref-palette-neutral25), )', - 30: 'rgba(var(--ref-palette-neutral30), )', - 35: 'rgba(var(--ref-palette-neutral35), )', - 40: 'rgba(var(--ref-palette-neutral40), )', - 50: 'rgba(var(--ref-palette-neutral50), )', - 60: 'rgba(var(--ref-palette-neutral60), )', - 70: 'rgba(var(--ref-palette-neutral70), )', - 80: 'rgba(var(--ref-palette-neutral80), )', - 90: 'rgba(var(--ref-palette-neutral90), )', - 95: 'rgba(var(--ref-palette-neutral95), )', - 98: 'rgba(var(--ref-palette-neutral98), )', - 99: 'rgba(var(--ref-palette-neutral99), )', - 100: 'rgba(var(--ref-palette-neutral100), )', - }, - - refNeutralVariant: { - 0: 'rgba(var(--ref-palette-neutral-variant0), )', - 10: 'rgba(var(--ref-palette-neutral-variant10), )', - 20: 'rgba(var(--ref-palette-neutral-variant20), )', - 25: 'rgba(var(--ref-palette-neutral-variant25), )', - 30: 'rgba(var(--ref-palette-neutral-variant30), )', - 35: 'rgba(var(--ref-palette-neutral-variant35), )', - 40: 'rgba(var(--ref-palette-neutral-variant40), )', - 50: 'rgba(var(--ref-palette-neutral-variant50), )', - 60: 'rgba(var(--ref-palette-neutral-variant60), )', - 70: 'rgba(var(--ref-palette-neutral-variant70), )', - 80: 'rgba(var(--ref-palette-neutral-variant80), )', - 90: 'rgba(var(--ref-palette-neutral-variant90), )', - 95: 'rgba(var(--ref-palette-neutral-variant95), )', - 98: 'rgba(var(--ref-palette-neutral-variant98), )', - 99: 'rgba(var(--ref-palette-neutral-variant99), )', - 100: 'rgba(var(--ref-palette-neutral-variant100), )', - }, - - refError: { - 0: 'rgba(var(--ref-palette-error0), )', - 10: 'rgba(var(--ref-palette-error10), )', - 20: 'rgba(var(--ref-palette-error20), )', - 25: 'rgba(var(--ref-palette-error25), )', - 30: 'rgba(var(--ref-palette-error30), )', - 35: 'rgba(var(--ref-palette-error35), )', - 40: 'rgba(var(--ref-palette-error40), )', - 50: 'rgba(var(--ref-palette-error50), )', - 60: 'rgba(var(--ref-palette-error60), )', - 70: 'rgba(var(--ref-palette-error70), )', - 80: 'rgba(var(--ref-palette-error80), )', - 90: 'rgba(var(--ref-palette-error90), )', - 95: 'rgba(var(--ref-palette-error95), )', - 98: 'rgba(var(--ref-palette-error98), )', - 99: 'rgba(var(--ref-palette-error99), )', - 100: 'rgba(var(--ref-palette-error100), )', - }, -} as const; - -export const colorTheme: Config['theme'] = { - colors: { - ...refColors, - - /** - * Primary colors - */ - primary: 'rgba(var(--sys-color-primary), )', - primaryLight: refColors.refPrimary[40], - primaryDark: refColors.refPrimary[80], - - primaryContainer: 'rgba(var(--sys-color-primary-container), )', - primaryContainerLight: refColors.refPrimary[90], - primaryContainerDark: refColors.refPrimary[30], - - onPrimary: 'rgba(var(--sys-color-on-primary), )', - onPrimaryLight: refColors.refPrimary[100], - onPrimaryDark: refColors.refPrimary[20], - - onPrimaryContainer: 'rgba(var(--sys-color-on-primary-container), )', - onPrimaryContainerLight: refColors.refPrimary[10], - onPrimaryContainerDark: refColors.refPrimary[90], - - inversePrimary: 'rgba(var(--sys-color-inverse-primary), )', - inversePrimaryLight: refColors.refPrimary[80], - inversePrimaryDark: refColors.refPrimary[40], - - /** - * Secondary colors - */ - secondary: 'rgba(var(--sys-color-secondary), )', - secondaryLight: refColors.refSecondary[40], - secondaryDark: refColors.refSecondary[80], - - secondaryContainer: 'rgba(var(--sys-color-secondary-container), )', - secondaryContainerLight: refColors.refSecondary[90], - secondaryContainerDark: refColors.refSecondary[30], - - onSecondary: 'rgba(var(--sys-color-on-secondary), )', - onSecondaryLight: refColors.refSecondary[100], - onSecondaryDark: refColors.refSecondary[20], - - onSecondaryContainer: 'rgba(var(--sys-color-on-secondary-container), )', - onSecondaryContainerLight: refColors.refSecondary[10], - onSecondaryContainerDark: refColors.refSecondary[90], - - /** - * Tertiary colors - */ - tertiary: 'rgba(var(--sys-color-tertiary), )', - tertiaryLight: refColors.refTertiary[40], - tertiaryDark: refColors.refTertiary[80], - - tertiaryContainer: 'rgba(var(--sys-color-tertiary-container), )', - tertiaryContainerLight: refColors.refTertiary[90], - tertiaryContainerDark: refColors.refTertiary[30], - - onTertiary: 'rgba(var(--sys-color-on-tertiary), )', - onTertiaryLight: refColors.refTertiary[100], - onTertiaryDark: refColors.refTertiary[20], - - onTertiaryContainer: 'rgba(var(--sys-color-on-tertiary-container), )', - onTertiaryContainerLight: refColors.refTertiary[10], - onTertiaryContainerDark: refColors.refTertiary[90], - - /** - * Surface colors - */ - background: 'rgba(var(--sys-color-background), )', - backgroundLight: refColors.refNeutral[98], - backgroundDark: refColors.refNeutral[10], - - surface: 'rgba(var(--sys-color-surface), )', - surfaceLight: refColors.refNeutral[98], - surfaceDark: refColors.refNeutral[10], - - surfaceDim: 'rgba(var(--sys-color-surface-dim), )', - surfaceDimLight: refColors.refNeutral[90], - surfaceDimDark: refColors.refNeutral[10], - - surfaceBright: 'rgba(var(--sys-color-surface-bright), )', - surfaceBrightLight: refColors.refNeutral[98], - surfaceBrightDark: refColors.refNeutral[20], - - surfaceContainerLowest: 'rgba(var(--sys-color-surface-container-lowest), )', - surfaceContainerLowestLight: refColors.refNeutral[100], - surfaceContainerLowestDark: refColors.refNeutral[0], - - surfaceContainerLow: 'rgba(var(--sys-color-surface-container-low), )', - surfaceContainerLowLight: refColors.refNeutral[98], - surfaceContainerLowDark: refColors.refNeutral[10], - - surfaceContainer: 'rgba(var(--sys-color-surface-container), )', - surfaceContainerLight: refColors.refNeutral[95], - surfaceContainerDark: refColors.refNeutral[10], - - surfaceContainerHigh: 'rgba(var(--sys-color-surface-container-high), )', - surfaceContainerHighLight: refColors.refNeutral[90], - surfaceContainerHighDark: refColors.refNeutral[20], - - surfaceContainerHighest: 'rgba(var(--sys-color-surface-container-highest), )', - surfaceContainerHighestLight: refColors.refNeutral[90], - surfaceContainerHighestDark: refColors.refNeutral[20], - - surfaceVariant: 'rgba(var(--sys-color-surface-variant), )', - surfaceVariantLight: refColors.refNeutral[90], - surfaceVariantDark: refColors.refNeutral[30], - - inverseSurface: 'rgba(var(--sys-color-inverse-surface), )', - inverseSurfaceLight: refColors.refNeutral[20], - inverseSurfaceDark: refColors.refNeutral[90], - - onBackground: 'rgba(var(--sys-color-on-background), )', - onBackgroundLight: refColors.refNeutral[10], - onBackgroundDark: refColors.refNeutral[90], - - onSurface: 'rgba(var(--sys-color-on-surface), )', - onSurfaceLight: refColors.refNeutral[10], - onSurfaceDark: refColors.refNeutral[90], - - onSurfaceVariant: 'rgba(var(--sys-color-on-surface-variant), )', - onSurfaceVariantLight: refColors.refNeutral[30], - onSurfaceVariantDark: refColors.refNeutral[80], - - inverseOnSurface: 'rgba(var(--sys-color-inverse-on-surface), )', - inverseOnSurfaceLight: refColors.refNeutral[95], - inverseOnSurfaceDark: refColors.refNeutral[20], - - /** - * Outline colors - */ - outline: 'rgba(var(--sys-color-outline), )', - outlineLight: refColors.refNeutralVariant[50], - outlineDark: refColors.refNeutralVariant[60], - - outlineVariant: 'rgba(var(--sys-color-outline-variant), )', - outlineVariantLight: refColors.refNeutralVariant[80], - outlineVariantDark: refColors.refNeutralVariant[30], - - /** - * Error colors - */ - error: 'rgba(var(--sys-color-error), )', - errorLight: refColors.refError[40], - errorDark: refColors.refError[80], - - errorContainer: 'rgba(var(--sys-color-error-container), )', - errorContainerLight: refColors.refError[90], - errorContainerDark: refColors.refError[30], - - onError: 'rgba(var(--sys-color-on-error), )', - onErrorLight: refColors.refError[100], - onErrorDark: refColors.refError[20], - - onErrorContainer: 'rgba(var(--sys-color-on-error-container), )', - onErrorContainerLight: refColors.refError[10], - onErrorContainerDark: refColors.refError[90], - - /** - * Other colors - */ - surfaceTint: refColors.refPrimary[40], - shadow: refColors.refNeutral[0], - scrim: refColors.refNeutral[0], - }, -}; diff --git a/ui/style/lib/elevation.ts b/ui/style/lib/elevation.ts deleted file mode 100644 index 290fbb2d7..000000000 --- a/ui/style/lib/elevation.ts +++ /dev/null @@ -1,181 +0,0 @@ -import plugin from 'tailwindcss/plugin.js'; - -export const elevationPlugin = plugin(({addUtilities}) => { - addUtilities({ - '.elevation-0': { - boxShadow: ` - 0px 0px 0px 0px rgba(var(--sys-color-shadow), 0.2), - 0px 0px 0px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 0px 0px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-1': { - boxShadow: ` - 0px 2px 1px -1px rgba(var(--sys-color-shadow), 0.2), - 0px 1px 1px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 1px 3px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-2': { - boxShadow: ` - 0px 3px 1px -2px rgba(var(--sys-color-shadow), 0.2), - 0px 2px 2px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 1px 5px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-3': { - boxShadow: ` - 0px 3px 3px -2px rgba(var(--sys-color-shadow), 0.2), - 0px 3px 4px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 1px 8px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-4': { - boxShadow: ` - 0px 2px 4px -1px rgba(var(--sys-color-shadow), 0.2), - 0px 4px 5px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 1px 10px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-5': { - boxShadow: ` - 0px 3px 5px -1px rgba(var(--sys-color-shadow), 0.2), - 0px 5px 8px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 1px 14px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-6': { - boxShadow: ` - 0px 3px 5px -1px rgba(var(--sys-color-shadow), 0.2), - 0px 6px 10px 0px rgba(var(--sys-color-shadow), 0.14), - 0px 1px 18px 0px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-7': { - boxShadow: ` - 0px 4px 5px -2px rgba(var(--sys-color-shadow), 0.2), - 0px 7px 10px 1px rgba(var(--sys-color-shadow), 0.14), - 0px 2px 16px 1px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-8': { - boxShadow: ` - 0px 5px 5px -3px rgba(var(--sys-color-shadow), 0.2), - 0px 8px 10px 1px rgba(var(--sys-color-shadow), 0.14), - 0px 3px 14px 2px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-9': { - boxShadow: ` - 0px 5px 6px -3px rgba(var(--sys-color-shadow), 0.2), - 0px 9px 12px 1px rgba(var(--sys-color-shadow), 0.14), - 0px 3px 16px 2px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-10': { - boxShadow: ` - 0px 6px 6px -3px rgba(var(--sys-color-shadow), 0.2), - 0px 10px 14px 1px rgba(var(--sys-color-shadow), 0.14), - 0px 4px 18px 3px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-11': { - boxShadow: ` - 0px 6px 7px -4px rgba(var(--sys-color-shadow), 0.2), - 0px 11px 15px 1px rgba(var(--sys-color-shadow), 0.14), - 0px 4px 20px 3px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-12': { - boxShadow: ` - 0px 7px 8px -4px rgba(var(--sys-color-shadow), 0.2), - 0px 12px 17px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 5px 22px 4px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-13': { - boxShadow: ` - 0px 7px 8px -4px rgba(var(--sys-color-shadow), 0.2), - 0px 13px 19px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 5px 24px 4px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-14': { - boxShadow: ` - 0px 7px 9px -4px rgba(var(--sys-color-shadow), 0.2), - 0px 14px 21px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 5px 26px 4px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-15': { - boxShadow: ` - 0px 8px 9px -5px rgba(var(--sys-color-shadow), 0.2), - 0px 15px 22px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 6px 28px 5px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-16': { - boxShadow: ` - 0px 8px 10px -5px rgba(var(--sys-color-shadow), 0.2), - 0px 16px 24px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 6px 30px 5px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-17': { - boxShadow: ` - 0px 8px 11px -5px rgba(var(--sys-color-shadow), 0.2), - 0px 17px 26px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 6px 32px 5px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-18': { - boxShadow: ` - 0px 9px 11px -5px rgba(var(--sys-color-shadow), 0.2), - 0px 18px 28px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 7px 34px 6px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-19': { - boxShadow: ` - 0px 9px 12px -6px rgba(var(--sys-color-shadow), 0.2), - 0px 19px 29px 2px rgba(var(--sys-color-shadow), 0.14), - 0px 7px 36px 6px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-20': { - boxShadow: ` - 0px 10px 13px -6px rgba(var(--sys-color-shadow), 0.2), - 0px 20px 31px 3px rgba(var(--sys-color-shadow), 0.14), - 0px 8px 38px 7px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-21': { - boxShadow: ` - 0px 10px 13px -6px rgba(var(--sys-color-shadow), 0.2), - 0px 21px 33px 3px rgba(var(--sys-color-shadow), 0.14), - 0px 8px 40px 7px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-22': { - boxShadow: ` - 0px 10px 14px -6px rgba(var(--sys-color-shadow), 0.2), - 0px 22px 35px 3px rgba(var(--sys-color-shadow), 0.14), - 0px 8px 42px 7px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-23': { - boxShadow: ` - 0px 11px 14px -7px rgba(var(--sys-color-shadow), 0.2), - 0px 23px 36px 3px rgba(var(--sys-color-shadow), 0.14), - 0px 9px 44px 8px rgba(var(--sys-color-shadow), 0.12) - `, - }, - '.elevation-24': { - boxShadow: ` - 0px 11px 15px -7px rgba(var(--sys-color-shadow), 0.2), - 0px 24px 38px 3px rgba(var(--sys-color-shadow), 0.14), - 0px 9px 46px 8px rgba(var(--sys-color-shadow), 0.12) - `, - }, - }); -}); diff --git a/ui/style/lib/screen.ts b/ui/style/lib/screen.ts deleted file mode 100644 index 8cbd5ba7a..000000000 --- a/ui/style/lib/screen.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type {Config} from 'tailwindcss'; - -export const screenTheme: Config['theme'] = { - screens: { - medium: '600px', - extended: '840px', - }, -}; diff --git a/ui/style/lib/state-layer.ts b/ui/style/lib/state-layer.ts deleted file mode 100644 index 6c37ce775..000000000 --- a/ui/style/lib/state-layer.ts +++ /dev/null @@ -1,60 +0,0 @@ -import plugin from 'tailwindcss/plugin.js'; -// @ts-expect-error Could not find a declaration file for module -import flattenColorPalette from 'tailwindcss/src/util/flattenColorPalette.js'; - -const stateOpacity = { - hover: 0.08, - focus: 0.12, - pressed: 0.12, - dragged: 0.16, -} as const; - -export const stateLayerPlugin = plugin(({matchUtilities, theme}) => { - matchUtilities( - { - state: (value) => { - if (typeof value !== 'function') return null; - const makeColor = value as unknown as (options: {opacityValue: number}) => string; - const colors = { - base: makeColor({opacityValue: 1}), - hover: makeColor({opacityValue: stateOpacity.hover}), - focus: makeColor({opacityValue: stateOpacity.focus}), - pressed: makeColor({opacityValue: stateOpacity.pressed}), - }; - return { - 'color': colors.base, - '&:hover': { - backgroundImage: `linear-gradient(${colors.hover}, ${colors.hover})`, - }, - '&:active': { - backgroundImage: `linear-gradient(${colors.pressed}, ${colors.pressed})`, - }, - '&:focus:not(:hover), &:focus-within:not(:hover)': { - 'backgroundImage': `linear-gradient(${colors.focus}, ${colors.focus})`, - }, - }; - }, - stateHover: (value) => { - if (typeof value !== 'function') return null; - const makeColor = value as unknown as (options: {opacityValue: number}) => string; - const color = makeColor({opacityValue: stateOpacity.hover}); - return { - backgroundImage: `linear-gradient(${color}, ${color})`, - }; - }, - stateActive: (value) => { - if (typeof value !== 'function') return null; - const makeColor = value as unknown as (options: {opacityValue: number}) => string; - const color = makeColor({opacityValue: stateOpacity.pressed}); - return { - backgroundImage: `linear-gradient(${color}, ${color})`, - }; - }, - }, - { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - values: (({DEFAULT: _, ...colors}) => colors)(flattenColorPalette(theme('colors'))), - type: 'color', - }, - ); -}); diff --git a/ui/style/lib/tailwind.ts b/ui/style/lib/tailwind.ts deleted file mode 100644 index 1db8bd475..000000000 --- a/ui/style/lib/tailwind.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {join, dirname} from 'node:path'; - -import {colorTheme} from './colors.js'; -import {elevationPlugin} from './elevation.js'; -import {screenTheme} from './screen.js'; -import {stateLayerPlugin} from './state-layer.js'; -import {typographyTheme} from './typography.js'; -import {zIndexTheme} from './z-index.js'; - -import type {Config} from 'tailwindcss'; - -export const tailwindConfig: Config = { - content: [ - './res/*.html', - './src/**/*.ts', - join(dirname(require.resolve('@alwatr/ui-kit2')), '**/*.ts'), - ], - darkMode: 'media', - theme: { - extend: { - ...colorTheme, - ...typographyTheme, - ...zIndexTheme, - ...screenTheme, - }, - }, - plugins: [ - elevationPlugin, - stateLayerPlugin, - ], -}; diff --git a/ui/style/lib/typography.ts b/ui/style/lib/typography.ts deleted file mode 100644 index faf82c3fb..000000000 --- a/ui/style/lib/typography.ts +++ /dev/null @@ -1,163 +0,0 @@ -import type {Config} from 'tailwindcss'; - -export const systemFont = [ - 'system-ui', - '-apple-system', - 'BlinkMacSystemFont', - '"Segoe UI"', - '"Roboto"', - '"Oxygen"', - '"Ubuntu"', - '"Cantarell"', - '"Open Sans"', - 'Helvetica Neue', - '"Arial"', - '"Noto Sans"', - 'sans-serif', - '"Apple Color Emoji"', - '"Segoe UI Emoji"', - '"Segoe UI Symbol"', - '"Noto Color Emoji"', -]; - -export const typographyTheme: Config['theme'] = { - fontFamily: { - vazirmatn: [ - ['"vazirmatn-vf"', '"vazirmatn"', ...systemFont], - { - fontFeatureSettings: '"calt" 1, "tnum" 0', - }, - ], - vazirmatnRd: [ - ['"vazirmatn-roundot-vf"', '"vazirmatn-roundot"', ...systemFont], - { - fontFeatureSettings: '"calt" 1, "tnum" 0', - }, - ], - system: systemFont, - sans: systemFont, - }, - - fontSize: { - displayLarge: [ - '57px', - { - lineHeight: '64px', - letterSpacing: '-0.25px', - fontWeight: '400', - }, - ], - displayMedium: [ - '45px', - { - lineHeight: '52px', - letterSpacing: '0px', - fontWeight: '400', - }, - ], - displaySmall: [ - '36px', - { - lineHeight: '44px', - letterSpacing: '0px', - fontWeight: '400', - }, - ], - headlineLarge: [ - '32px', - { - lineHeight: '40px', - letterSpacing: '0px', - fontWeight: '400', - }, - ], - headlineMedium: [ - '28px', - { - lineHeight: '36px', - letterSpacing: '0px', - fontWeight: '400', - }, - ], - headlineSmall: [ - '24px', - { - lineHeight: '32px', - letterSpacing: '0px', - fontWeight: '400', - }, - ], - bodyLarge: [ - '16px', - { - lineHeight: '24px', - letterSpacing: '0.5px', - fontWeight: '400', - }, - ], - bodyMedium: [ - '14px', - { - lineHeight: '20px', - letterSpacing: '0.25px', - fontWeight: '400', - }, - ], - bodySmall: [ - '12px', - { - lineHeight: '15px', - letterSpacing: '0.4px', - fontWeight: '400', - }, - ], - labelLarge: [ - '14px', - { - lineHeight: '20px', - letterSpacing: '0.1px', - fontWeight: '500', - }, - ], - labelMedium: [ - '12px', - { - lineHeight: '16px', - letterSpacing: '0.5px', - fontWeight: '500', - }, - ], - labelSmall: [ - '11px', - { - lineHeight: '16px', - letterSpacing: '0.5px', - fontWeight: '500', - }, - ], - titleLarge: [ - '22px', - { - lineHeight: '28px', - letterSpacing: '0px', - fontWeight: '400', - }, - ], - titleMedium: [ - '16px', - { - lineHeight: '24px', - letterSpacing: '0.15px', - fontWeight: '500', - }, - ], - titleSmall: [ - '14px', - { - lineHeight: '20px', - letterSpacing: '0.1px', - fontWeight: '500', - }, - ], - }, -}; diff --git a/ui/style/lib/z-index.ts b/ui/style/lib/z-index.ts deleted file mode 100644 index bafa1abba..000000000 --- a/ui/style/lib/z-index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type {Config} from 'tailwindcss'; - -export const zIndexTheme: Config['theme'] = { - zIndex: { - 'bottomness': '-900', - 'below': '-1', - 'default': '1', - 'above': '2', - 'dropdown': '100', - 'sticky': '200', - 'fixed': '300', - 'scrim': '400', - 'modal': '500', - 'popover': '600', - 'snackbar': '700', - 'tooltip': '800', - 'topness': '900', - }, -}; diff --git a/ui/style/main.css b/ui/style/main.css deleted file mode 100644 index e635cff95..000000000 --- a/ui/style/main.css +++ /dev/null @@ -1,6 +0,0 @@ -@import 'tailwindcss/base'; -@import 'tailwindcss/components'; -@import 'tailwindcss/utilities'; - -@import './lib/base.css'; -@import './lib/colors.css'; diff --git a/ui/style/main.ts b/ui/style/main.ts deleted file mode 100644 index 57e0eecaf..000000000 --- a/ui/style/main.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './lib/tailwind.js'; diff --git a/ui/style/package.json b/ui/style/package.json deleted file mode 100644 index 336170a97..000000000 --- a/ui/style/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@alwatr/style", - "version": "1.1.1", - "description": "Alwatr shared styles (lib, utils, theme, ...).", - "keywords": [ - "style", - "alwatr" - ], - "main": "main.js", - "type": "module", - "types": "main.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/*.{d.ts.map,d.ts,js.map,js,html,md,svg,css}" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/style" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/style#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "tslib": "^2.6.2" - } -} diff --git a/ui/style/palettes/h260.css b/ui/style/palettes/h260.css deleted file mode 100644 index 68081f0c7..000000000 --- a/ui/style/palettes/h260.css +++ /dev/null @@ -1,113 +0,0 @@ -@layer base { - :root { - /* HCT 260/48 */ - - /* primary */ - --ref-palette-primary0: 0, 0, 0; - --ref-palette-primary10: 0, 28, 59; - --ref-palette-primary20: 0, 48, 96; - --ref-palette-primary25: 0, 59, 115; - --ref-palette-primary30: 0, 71, 135; - --ref-palette-primary35: 11, 83, 153; - --ref-palette-primary40: 34, 95, 166; - --ref-palette-primary50: 65, 120, 193; - --ref-palette-primary60: 93, 146, 221; - --ref-palette-primary70: 121, 173, 250; - --ref-palette-primary80: 167, 200, 255; - --ref-palette-primary90: 213, 227, 255; - --ref-palette-primary95: 235, 241, 255; - --ref-palette-primary98: 249, 249, 255; - --ref-palette-primary99: 253, 251, 255; - --ref-palette-primary100: 255, 255, 255; - - /* secondary */ - --ref-palette-secondary0: 0, 0, 0; - --ref-palette-secondary10: 18, 28, 43; - --ref-palette-secondary20: 39, 49, 65; - --ref-palette-secondary25: 50, 60, 77; - --ref-palette-secondary30: 61, 71, 88; - --ref-palette-secondary35: 73, 83, 100; - --ref-palette-secondary40: 85, 95, 113; - --ref-palette-secondary50: 109, 119, 138; - --ref-palette-secondary60: 135, 145, 165; - --ref-palette-secondary70: 161, 172, 192; - --ref-palette-secondary80: 189, 199, 220; - --ref-palette-secondary90: 217, 227, 248; - --ref-palette-secondary95: 235, 241, 255; - --ref-palette-secondary98: 249, 249, 255; - --ref-palette-secondary99: 253, 251, 255; - --ref-palette-secondary100: 255, 255, 255; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0, 0; - --ref-palette-tertiary10: 39, 19, 47; - --ref-palette-tertiary20: 62, 40, 69; - --ref-palette-tertiary25: 73, 51, 81; - --ref-palette-tertiary30: 85, 63, 93; - --ref-palette-tertiary35: 98, 74, 105; - --ref-palette-tertiary40: 110, 86, 118; - --ref-palette-tertiary50: 136, 110, 144; - --ref-palette-tertiary60: 163, 135, 170; - --ref-palette-tertiary70: 190, 162, 198; - --ref-palette-tertiary80: 219, 189, 226; - --ref-palette-tertiary90: 248, 216, 254; - --ref-palette-tertiary95: 254, 235, 255; - --ref-palette-tertiary98: 255, 247, 251; - --ref-palette-tertiary99: 255, 251, 255; - --ref-palette-tertiary100: 255, 255, 255; - - /* neutral */ - --ref-palette-neutral0: 0, 0, 0; - --ref-palette-neutral10: 26, 28, 30; - --ref-palette-neutral20: 47, 48, 51; - --ref-palette-neutral25: 58, 59, 62; - --ref-palette-neutral30: 70, 71, 74; - --ref-palette-neutral35: 81, 82, 86; - --ref-palette-neutral40: 94, 94, 98; - --ref-palette-neutral50: 118, 119, 122; - --ref-palette-neutral60: 144, 144, 148; - --ref-palette-neutral70: 171, 171, 174; - --ref-palette-neutral80: 199, 198, 202; - --ref-palette-neutral90: 227, 226, 230; - --ref-palette-neutral95: 241, 240, 244; - --ref-palette-neutral98: 250, 249, 253; - --ref-palette-neutral99: 253, 251, 255; - --ref-palette-neutral100: 255, 255, 255; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0, 0; - --ref-palette-neutral-variant10: 24, 28, 34; - --ref-palette-neutral-variant20: 45, 48, 56; - --ref-palette-neutral-variant25: 56, 59, 67; - --ref-palette-neutral-variant30: 67, 71, 78; - --ref-palette-neutral-variant35: 79, 82, 90; - --ref-palette-neutral-variant40: 91, 94, 102; - --ref-palette-neutral-variant50: 116, 119, 127; - --ref-palette-neutral-variant60: 141, 145, 153; - --ref-palette-neutral-variant70: 168, 171, 180; - --ref-palette-neutral-variant80: 196, 198, 207; - --ref-palette-neutral-variant90: 224, 226, 236; - --ref-palette-neutral-variant95: 238, 240, 250; - --ref-palette-neutral-variant98: 249, 249, 255; - --ref-palette-neutral-variant99: 253, 251, 255; - --ref-palette-neutral-variant100: 255, 255, 255; - - /* error */ - --ref-palette-error0: 0, 0, 0; - --ref-palette-error10: 65, 0, 2; - --ref-palette-error20: 105, 0, 5; - --ref-palette-error25: 126, 0, 7; - --ref-palette-error30: 147, 0, 10; - --ref-palette-error35: 168, 7, 16; - --ref-palette-error40: 186, 26, 26; - --ref-palette-error50: 222, 55, 48; - --ref-palette-error60: 255, 84, 73; - --ref-palette-error70: 255, 137, 125; - --ref-palette-error80: 255, 180, 171; - --ref-palette-error90: 255, 218, 214; - --ref-palette-error95: 255, 237, 234; - --ref-palette-error98: 255, 248, 247; - --ref-palette-error99: 255, 251, 255; - --ref-palette-error100: 255, 255, 255; - } -} diff --git a/ui/style/palettes/h300.css b/ui/style/palettes/h300.css deleted file mode 100644 index 72554a1bd..000000000 --- a/ui/style/palettes/h300.css +++ /dev/null @@ -1,113 +0,0 @@ -@layer base { - :root { - /* HCT 300/48 */ - - /* primary */ - --ref-palette-primary0: 0, 0, 0; - --ref-palette-primary10: 35, 0, 92; - --ref-palette-primary20: 57, 29, 114; - --ref-palette-primary25: 68, 42, 126; - --ref-palette-primary30: 80, 55, 138; - --ref-palette-primary35: 92, 67, 151; - --ref-palette-primary40: 104, 79, 164; - --ref-palette-primary50: 130, 104, 191; - --ref-palette-primary60: 156, 130, 219; - --ref-palette-primary70: 183, 156, 248; - --ref-palette-primary80: 208, 188, 255; - --ref-palette-primary90: 233, 221, 255; - --ref-palette-primary95: 246, 237, 255; - --ref-palette-primary98: 254, 247, 255; - --ref-palette-primary99: 255, 251, 255; - --ref-palette-primary100: 255, 255, 255; - - /* secondary */ - --ref-palette-secondary0: 0, 0, 0; - --ref-palette-secondary10: 30, 25, 43; - --ref-palette-secondary20: 51, 45, 65; - --ref-palette-secondary25: 62, 56, 76; - --ref-palette-secondary30: 74, 68, 88; - --ref-palette-secondary35: 86, 79, 100; - --ref-palette-secondary40: 98, 91, 112; - --ref-palette-secondary50: 123, 115, 138; - --ref-palette-secondary60: 149, 141, 164; - --ref-palette-secondary70: 176, 167, 191; - --ref-palette-secondary80: 204, 194, 219; - --ref-palette-secondary90: 232, 222, 248; - --ref-palette-secondary95: 246, 237, 255; - --ref-palette-secondary98: 254, 247, 255; - --ref-palette-secondary99: 255, 251, 255; - --ref-palette-secondary100: 255, 255, 255; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0, 0; - --ref-palette-tertiary10: 49, 16, 28; - --ref-palette-tertiary20: 74, 37, 49; - --ref-palette-tertiary25: 86, 48, 60; - --ref-palette-tertiary30: 99, 59, 72; - --ref-palette-tertiary35: 112, 70, 83; - --ref-palette-tertiary40: 126, 82, 95; - --ref-palette-tertiary50: 153, 106, 120; - --ref-palette-tertiary60: 181, 131, 145; - --ref-palette-tertiary70: 210, 157, 172; - --ref-palette-tertiary80: 240, 184, 199; - --ref-palette-tertiary90: 255, 217, 226; - --ref-palette-tertiary95: 255, 236, 240; - --ref-palette-tertiary98: 255, 248, 248; - --ref-palette-tertiary99: 255, 251, 255; - --ref-palette-tertiary100: 255, 255, 255; - - /* neutral */ - --ref-palette-neutral0: 0, 0, 0; - --ref-palette-neutral10: 28, 27, 30; - --ref-palette-neutral20: 50, 48, 51; - --ref-palette-neutral25: 61, 59, 62; - --ref-palette-neutral30: 72, 70, 74; - --ref-palette-neutral35: 84, 81, 86; - --ref-palette-neutral40: 96, 93, 98; - --ref-palette-neutral50: 121, 118, 122; - --ref-palette-neutral60: 147, 143, 148; - --ref-palette-neutral70: 174, 170, 174; - --ref-palette-neutral80: 202, 197, 202; - --ref-palette-neutral90: 230, 225, 230; - --ref-palette-neutral95: 245, 239, 244; - --ref-palette-neutral98: 253, 248, 253; - --ref-palette-neutral99: 255, 251, 255; - --ref-palette-neutral100: 255, 255, 255; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0, 0; - --ref-palette-neutral-variant10: 29, 26, 34; - --ref-palette-neutral-variant20: 50, 47, 55; - --ref-palette-neutral-variant25: 61, 58, 67; - --ref-palette-neutral-variant30: 73, 69, 78; - --ref-palette-neutral-variant35: 85, 81, 90; - --ref-palette-neutral-variant40: 97, 93, 102; - --ref-palette-neutral-variant50: 122, 117, 127; - --ref-palette-neutral-variant60: 148, 143, 153; - --ref-palette-neutral-variant70: 175, 169, 180; - --ref-palette-neutral-variant80: 202, 196, 207; - --ref-palette-neutral-variant90: 231, 224, 235; - --ref-palette-neutral-variant95: 245, 238, 250; - --ref-palette-neutral-variant98: 254, 247, 255; - --ref-palette-neutral-variant99: 255, 251, 255; - --ref-palette-neutral-variant100: 255, 255, 255; - - /* error */ - --ref-palette-error0: 0, 0, 0; - --ref-palette-error10: 65, 0, 2; - --ref-palette-error20: 105, 0, 5; - --ref-palette-error25: 126, 0, 7; - --ref-palette-error30: 147, 0, 10; - --ref-palette-error35: 168, 7, 16; - --ref-palette-error40: 186, 26, 26; - --ref-palette-error50: 222, 55, 48; - --ref-palette-error60: 255, 84, 73; - --ref-palette-error70: 255, 137, 125; - --ref-palette-error80: 255, 180, 171; - --ref-palette-error90: 255, 218, 214; - --ref-palette-error95: 255, 237, 234; - --ref-palette-error98: 255, 248, 247; - --ref-palette-error99: 255, 251, 255; - --ref-palette-error100: 255, 255, 255; - } -} diff --git a/ui/style/tsconfig.json b/ui/style/tsconfig.json deleted file mode 100644 index bb56d029e..000000000 --- a/ui/style/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": ".", - "outDir": ".", - }, - - "include": ["**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/logger"} - ] -} diff --git a/ui/ui-kit/CHANGELOG.md b/ui/ui-kit/CHANGELOG.md deleted file mode 100644 index b4735bfee..000000000 --- a/ui/ui-kit/CHANGELOG.md +++ /dev/null @@ -1,272 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/ui-kit - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **keep:** color palette ([3cc5566](https://github.com/AliMD/alwatr/commit/3cc5566ffdd849fe930eb85b5be05bf0e75771af)) - -### Features - -- **ui/theme:** 20 palette ([41a86a2](https://github.com/AliMD/alwatr/commit/41a86a24a77aa92799b88b3fec19e28b02b3d917)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/ui-kit - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **button:** disabled issue ([7f9b457](https://github.com/AliMD/alwatr/commit/7f9b457dabec82636b7fb158206c70f2e150fefd)) -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- **icon-button:** disable bug ([a92fee4](https://github.com/AliMD/alwatr/commit/a92fee48bfdf2cf92aa30e8b0fb506ac0fab5c64)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **surface:** disabled color issue ([01a8140](https://github.com/AliMD/alwatr/commit/01a8140ef1f2f86920483e4ee4936dda5a155b9b)) -- **ui/icon-button:** default content value ([4303620](https://github.com/AliMD/alwatr/commit/4303620c26a34999db2ad7098c417e1c8f00414b)) -- **ui/snackbar:** check `actionLabelKey` ([9788f53](https://github.com/AliMD/alwatr/commit/9788f53a469db7cc677f30a5c62a68478018a832)) -- **ui/snackbar:** use label for action button content ([68beefa](https://github.com/AliMD/alwatr/commit/68beefa82532159225dbf5468255dff3adaba43a)) -- **ui/surface:** box sizing ([6ef9a45](https://github.com/AliMD/alwatr/commit/6ef9a45301a699875477f659447001ed5e4ab1c3)) -- **ui/text-field:** fix default of `value` & handle its `click` event ([a685899](https://github.com/AliMD/alwatr/commit/a685899f60f83ed26f43ec7a8f2ca16ec37c1078)) -- **ui/text-field:** set empty string for undefined value ([3efad6b](https://github.com/AliMD/alwatr/commit/3efad6b639ffad06bccb25d48de3fbe6fe2f7abb)) - -### Features - -- **ui-kit/snackbar:** message/actionLabelMessage l10n key ([e09f3e1](https://github.com/AliMD/alwatr/commit/e09f3e170998902e218e1d23a0d3b5ceabc55dc9)) -- **ui-kit/style:** add --sys-surface-reloading-opacity ([2ba6367](https://github.com/AliMD/alwatr/commit/2ba6367058290f8bfdf1eabe1d0cd3a634a7d9db)) -- **ui/button:** label on content ([df010a8](https://github.com/AliMD/alwatr/commit/df010a8ccb49759e5638eb5992898549ce3f55b0)) -- **ui/text-field:** readonly prop ([02a785e](https://github.com/AliMD/alwatr/commit/02a785ef8f842cdb86aea259e8019f01d7ba9e4e)) -- use button content ([a3f3872](https://github.com/AliMD/alwatr/commit/a3f3872c16e2bf5ad99c90cd03563007271fc530)) - -### Performance Improvements - -- **pwa:** optimize first load and rendering ([343d757](https://github.com/AliMD/alwatr/commit/343d757eefab6572df54fb4f7624698e9a9f9e11)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **text-field:** make it inline ([72320b7](https://github.com/AliMD/alwatr/commit/72320b74608902c1ee9525b5b93e3774732d7492)) -- **top-app-bar:** style shrink ([a398821](https://github.com/AliMD/alwatr/commit/a398821690ae6d81814b5920a3d4496ccef5fe32)) -- **ui-kit/button:** elevated ([2865804](https://github.com/AliMD/alwatr/commit/2865804b6c5970492ef490deba9f867ed5eddad5)) -- **ui-kit/chat:** footer icon button height ([8353fbc](https://github.com/AliMD/alwatr/commit/8353fbcec9cd2f982468ebf2bd949a76cb8f5e1d)) -- **ui-kit:** rename signalId to clickSignalId ([d8addc7](https://github.com/AliMD/alwatr/commit/d8addc7776e2f002f81207d6bcdc1c28d1568400)) -- **ui/icon-button:** remove bind \_click ([b678434](https://github.com/AliMD/alwatr/commit/b6784340e8dc669fe8b572c3d8c4fdb604f2f42a)) -- **ui/product-card:** toman icon ([8a6ddae](https://github.com/AliMD/alwatr/commit/8a6ddae2000639223d505fc67cf2d5f3738fa80e)) -- **ui/text-field:** width problem ([baf53a2](https://github.com/AliMD/alwatr/commit/baf53a279e311dba91bfbf029744993c8f8754e4)) -- **ui:** surface tinted attrib ([56310b0](https://github.com/AliMD/alwatr/commit/56310b04734d51841863cd03eb37e3b5c51957fc)) - -### Features - -- **button:** add icon ([476a14f](https://github.com/AliMD/alwatr/commit/476a14fea2cbab4bef5b0fd764fa83e82784c358)) -- **button:** add signalId for click event ([fdde714](https://github.com/AliMD/alwatr/commit/fdde714b40ca24526d60f7c590dcce3861e4a97d)) -- **button:** click signal with detail ([03c2dc1](https://github.com/AliMD/alwatr/commit/03c2dc1e64562815505b468c761ac245554470ed)) -- **button:** icon style ([11b736d](https://github.com/AliMD/alwatr/commit/11b736d8c518ff773e2dcb4ab34e8a20641960ff)) -- **com-pwa:** set default value on shipping form ([bbcdfcb](https://github.com/AliMD/alwatr/commit/bbcdfcbed84384711e1d6d81e0173106704d502d)) -- **icon-box:** headline ellipsis overflow ([935b49b](https://github.com/AliMD/alwatr/commit/935b49b50b947af3cc5b1e39123d6c05de05eabf)) -- **icon-box:** tinted ([436f989](https://github.com/AliMD/alwatr/commit/436f98960a6ea89be6153e9122ce94c20220332d)) -- **icon-button:** IconButtonContent.disabled ([a6c1ee9](https://github.com/AliMD/alwatr/commit/a6c1ee985d9e20bfd6f2586dade27f394fac35e0)) -- **product-card:** optional price ([a554ee5](https://github.com/AliMD/alwatr/commit/a554ee510af66e336b2a66173536b0bbb197f4d2)) -- **surface:** tinted ([129031a](https://github.com/AliMD/alwatr/commit/129031a2e4da66a3f6ecd303f787a98f60db77fe)) -- **text-field:** refactor with value prop and input-change event ([7bc0414](https://github.com/AliMD/alwatr/commit/7bc041438c032e224f0c84e849e38b2bf411bf0c)) -- **top-app-bar:** connect to context ([e690f08](https://github.com/AliMD/alwatr/commit/e690f088717ca9225e4e7d8bedfe160b61029715)) -- **top-app-bar:** tinted ([c943915](https://github.com/AliMD/alwatr/commit/c9439154adc40588361fdc140ba0dd8fde65bce0)) -- **ui-kit/card:** enhance toggle animation ([9950353](https://github.com/AliMD/alwatr/commit/99503532938349f3d1df93d87e2c0156b880670d)) -- **ui-kit/chat:** update ([3c51a71](https://github.com/AliMD/alwatr/commit/3c51a71682511affc3bdb20ce7fa21523e77011e)) -- **ui-kit/text-area:** new component ([e5a3ffb](https://github.com/AliMD/alwatr/commit/e5a3ffb342dfdf96b48bbea08b95dbd0c76f6a6a)) -- **ui-kit/text-field:** hide arrow on number input ([ce69ecf](https://github.com/AliMD/alwatr/commit/ce69ecfd4a30bbd06ce690d0c045613314d16fad)) -- **ui-kit:** enhance root unresolved styles ([ee0b581](https://github.com/AliMD/alwatr/commit/ee0b5816e202570acf836743bdea631694162c87)) -- **ui-kit:** move radio group from soffit-pwa ([0d5786f](https://github.com/AliMD/alwatr/commit/0d5786f4f7cfc950e988e8f35c9c9e80f53cac23)) -- **ui-kit:** selectable product card ([1a8d219](https://github.com/AliMD/alwatr/commit/1a8d219695677d8841f1fbbfb7b10a5a67ad3c24)) -- **ui/field:** refactor with new prop and change event ([e78821d](https://github.com/AliMD/alwatr/commit/e78821de09f27c470e15e502be19c79e04153a65)) -- **ui/product-card:** add id ([3d7cc2f](https://github.com/AliMD/alwatr/commit/3d7cc2f416b5630c15fc140d9a01295b776e42ae)) -- **ui/style:** color theme hct 85deg ([9be16f4](https://github.com/AliMD/alwatr/commit/9be16f43fc4e7037604afcd09edb8d6e7857c11d)) -- **ui/surface:** color animation ([ade9229](https://github.com/AliMD/alwatr/commit/ade9229b1bd34c5c87910db17bcf2f55f8dc0a47)) -- **ui/top-app-bar:** headlineKey and default values ([327c04e](https://github.com/AliMD/alwatr/commit/327c04e1bef597a058396b171055d981523c14f3)) - -### Performance Improvements - -- **ui-kit/style:** body render ([ef4ed24](https://github.com/AliMD/alwatr/commit/ef4ed24f165e92d335e96d98cf3b5252fb9173b6)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- compatible with i18n ([89c4a90](https://github.com/AliMD/alwatr/commit/89c4a90444db12930b1d0211942c9b84185cbb32)) -- compatible with new element mixins ([d26e827](https://github.com/AliMD/alwatr/commit/d26e82731b2ae9c2483ba931c450c5a604633122)) -- compatible with new i18n api ([17a7c42](https://github.com/AliMD/alwatr/commit/17a7c42576f35888b16fee36209032c452183d1b)) -- demo-pwa and ui-kit surface element file name and imports ([9f9c382](https://github.com/AliMD/alwatr/commit/9f9c382cebd0d20d4b1bf9ae8490dfb960506ca1)) -- **icon-box:** IconBoxContent target type ([0e3afbc](https://github.com/AliMD/alwatr/commit/0e3afbcb639b45a2ff261a2be0222b2e8d3f079b)) -- **icon-button:** active margin state ([24d0b0f](https://github.com/AliMD/alwatr/commit/24d0b0ffd0303f92056bd84e8491e2cd7a4f2367)) -- **snackbar:** always keep permanent snackbar ([1932239](https://github.com/AliMD/alwatr/commit/193223966c33a778aba50bc20c5c3361a47cda04)) -- **snackbar:** padding ([6765f89](https://github.com/AliMD/alwatr/commit/6765f8900e798aea1f77e9e76be36e055411dd3e)) -- **snackbar:** position ([ad7cb96](https://github.com/AliMD/alwatr/commit/ad7cb9612e194f61464dc9bcab7667d1b8236c44)) -- **snackbar:** show snackbar bugs ([a26843e](https://github.com/AliMD/alwatr/commit/a26843ea2e88f5f8dcdbca8cd032da1b24bf939c)) -- **snackbar:** size and position ([5a2b46d](https://github.com/AliMD/alwatr/commit/5a2b46d1871c7bbdb9afd1ef70d9d1814b5a354b)) -- **snackbar:** z-index ([7212201](https://github.com/AliMD/alwatr/commit/7212201c195ade52838927a1f6de096bb6ce5f65)) -- **soffit-pwa:** build issue ([9294c58](https://github.com/AliMD/alwatr/commit/9294c58d970c7bd55cf93d4ed56d47c1510de358)) -- **soffit-pwa:** review ([8cdc94e](https://github.com/AliMD/alwatr/commit/8cdc94e015982a51e24381a7a3455212711b3c4a)) -- **style:** remove tap-highlight in webkit ([c44ce67](https://github.com/AliMD/alwatr/commit/c44ce6771724672e20675523ad71fa59f2a5d6b8)) -- **text-field:** elevation bug ([405a0e7](https://github.com/AliMD/alwatr/commit/405a0e7a822ada00bd58c53e7903164584ef05c2)) -- **toast:** use `signal` & complete its render(not completed) ([c5ff7af](https://github.com/AliMD/alwatr/commit/c5ff7af59246595a0db67cb6288eb8a534676d84)) -- **top-app-bar:** persian title alignment ([b19d7ed](https://github.com/AliMD/alwatr/commit/b19d7edacfd9fe3c0610d18fd5bea125c1fddba5)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) -- **ui-kit/chat:** compatibility with new icon-button ([449effc](https://github.com/AliMD/alwatr/commit/449effc0f2e0a3a8c0f7217a49054a1f9e6a7ad8)) -- **ui-kit/icon-box:** false on undefined toggleAttribute ([d277458](https://github.com/AliMD/alwatr/commit/d27745890100d1c3236cc270dd1a7225ced94b7a)) -- **ui-kit/style:** vazirmatn css var name ([889882b](https://github.com/AliMD/alwatr/commit/889882bb97956978e0c321f96581dd33d145d9b9)) -- **ui-kit/top-app-bar:** import ([9fe764e](https://github.com/AliMD/alwatr/commit/9fe764ee47081542e5fa0cc9f8f106ee2a5555bb)) -- **ui-kit:** remove old toast ([0900d71](https://github.com/AliMD/alwatr/commit/0900d7105161ae44811c7cb7ffc194cbdd39dab9)) -- **ui/button:** line-height and white-space ([782d6e3](https://github.com/AliMD/alwatr/commit/782d6e32a431734de25c1323b4a8d0520e84f392)) -- **ui/style/mobile-only:** use --sys-breakpoint-handset ([19bd07d](https://github.com/AliMD/alwatr/commit/19bd07dfc1b0b88f31e984d67d2c2940d08a987b)) -- **ui/surface:** prevent ro overwrite all transition ([aff63c2](https://github.com/AliMD/alwatr/commit/aff63c255c7ae9b6f39f5021168394df3692b049)) - -### Features - -- **`alwatr-top-app-bar`:** new components ([c370160](https://github.com/AliMD/alwatr/commit/c370160f41f5252dec2d2954906ea55be51ac21a)) -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **fields:** name property ([37d9803](https://github.com/AliMD/alwatr/commit/37d9803a7c20033e0b8f99ea5590c7f1ebdf083f)) -- **icon-box:** ass slot, highlight, pre-line, enhance typescale, enhance template ([77f4b30](https://github.com/AliMD/alwatr/commit/77f4b3094cd902a352b7c29232dc416c17b5932b)) -- **icon-box:** height transition ([8fd7526](https://github.com/AliMD/alwatr/commit/8fd7526a7d31955ce9aada0d5954f82937bd3af2)) -- **icon-box:** more dynamic options ([c5ec98e](https://github.com/AliMD/alwatr/commit/c5ec98e857ad16c4c0119290c686c8872dca1b0f)) -- **icon-box:** pointer cursor on highlighted ([11f1787](https://github.com/AliMD/alwatr/commit/11f1787d5830b75e7dba5d50427a612a1d827594)) -- **icon-button:** new content prop with click signal event ([bb5dae6](https://github.com/AliMD/alwatr/commit/bb5dae6048fcacb4a4e70aab514e4900fd5a96ea)) -- **icon-button:** new standard icon button ([b8e9836](https://github.com/AliMD/alwatr/commit/b8e98365fe3e8f1f6db1a21480257049c0294f03)) -- **image-box:** selected style ([c092e2d](https://github.com/AliMD/alwatr/commit/c092e2d0f8428c0ddd9596346d073275298d14ab)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -- **snackbar:** command signal and controller ([6b81ed9](https://github.com/AliMD/alwatr/commit/6b81ed9f780b1fa7a34c03160259a2f36d272183)) -- **snackbar:** new ui-kit snackbar comp ([34857d9](https://github.com/AliMD/alwatr/commit/34857d93bafdcb3c902edf83d0c94e27a0210538)) -- **snackbar:** show-snackbar-command ([9916fdf](https://github.com/AliMD/alwatr/commit/9916fdff6701ab63914c483d59fa1ab5faecbfb5)) -- **soffit-pwa:** top app bar headline styles ([7f5f775](https://github.com/AliMD/alwatr/commit/7f5f7755ff98dd39913fc9d179c05085a0d5416f)) -- **soffit, snackbar:** enhance spacing ([4d421da](https://github.com/AliMD/alwatr/commit/4d421da25c691e2cd89a32d9ccf6c05fef787ba4)) -- **surface,icon-box:** disabled animation ([5723c6a](https://github.com/AliMD/alwatr/commit/5723c6aafec5bbb80f0a8613c31a081204c4754a)) -- **text-field:** sanitize number in values ([bb4a912](https://github.com/AliMD/alwatr/commit/bb4a9127b5566256a7ddae81d06801a4134290f4)) -- **toast:** action button ([4d46936](https://github.com/AliMD/alwatr/commit/4d4693600ca5b1decf8a57168a710e571e0008bd)) -- **toast:** add `toast` component ([9fa06d4](https://github.com/AliMD/alwatr/commit/9fa06d40e4ad5e91d46d8d8d77855d7bb7c384dc)) -- **toast:** close ([d9e5837](https://github.com/AliMD/alwatr/commit/d9e5837f3d61be92159e42797d0e083c6e8db7ca)) -- **toast:** improve ui ([7015c8a](https://github.com/AliMD/alwatr/commit/7015c8a49b9ef5d7c6a69532b48923d76422ff90)) -- **toast:** organaize styles ([0400c40](https://github.com/AliMD/alwatr/commit/0400c4076975882b292b160a3c32db64a1797b8e)) -- **top-app-bar:** new top app abr element ([753735f](https://github.com/AliMD/alwatr/commit/753735ff0c9cb0e17a4160a0293f1679a684b4c5)) -- **top-app-bar:** type center, small, medium, large ([4b6c696](https://github.com/AliMD/alwatr/commit/4b6c696cf4f69ae4c78004bf888ee6716767d68a)) -- **ui-kit/image-box:** checkmark on selected card ([397ef53](https://github.com/AliMD/alwatr/commit/397ef53d46e8ff535ae33c3b91aa3e8d3a294835)) -- **ui-kit/image-box:** new element ([1d73526](https://github.com/AliMD/alwatr/commit/1d73526f7d9ee9ad612a261686d3d49b83af5942)) -- **ui-kit/image-box:** selected style ([78d3976](https://github.com/AliMD/alwatr/commit/78d3976e012eaaccba9d85e1bb34520ffb5a6c19)) -- **ui-kit/image-box:** StringifyableRecord content type ([703bd90](https://github.com/AliMD/alwatr/commit/703bd90011ce61c12ba4f9075a8d4a9184dbb684)) -- **ui-kit/image-box:** update image box based on alwatr-con ([342fb5d](https://github.com/AliMD/alwatr/commit/342fb5d705c776e392077ea44d5796d1ae5d95b1)) -- **ui-kit/text-field:** value prop ([de06e45](https://github.com/AliMD/alwatr/commit/de06e45afd31b73c4f2e75011b82a9fba58a024b)) -- **ui-kit:** simple button element ([790236f](https://github.com/AliMD/alwatr/commit/790236f839e842a1ad2cd030a892797bacd68897)) -- **ui-kit:** text-field element ([f87862f](https://github.com/AliMD/alwatr/commit/f87862f9798baa6630dfdd7cc06ff6ddb9622d60)) -- **ui/style:** mobile only style ([2f6c339](https://github.com/AliMD/alwatr/commit/2f6c339926dd4f16bcdb7ad6bc569895683ab34d)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **card,focus-ring:** disable and active state ([50d3deb](https://github.com/AliMD/alwatr/commit/50d3deb2cf2020a4b6ec72c0c581fffb167a1b1a)) -- **card:** review styles ([481031c](https://github.com/AliMD/alwatr/commit/481031c93b0e49f7a541087da1fd283c5bfada36)) -- **chat:** --sys-radius vars ([b69b361](https://github.com/AliMD/alwatr/commit/b69b36162dd19446b75e9ac6c84e74581fce3d79)) -- **chat:** colors ([4cf93f6](https://github.com/AliMD/alwatr/commit/4cf93f6a5b2ee925e1b4a66f3535b4e6e7dfc1f0)) -- **icon-box:** optional description ([83ff766](https://github.com/AliMD/alwatr/commit/83ff76634d06775321ebd600de2ee630694d5ee0)) -- **icon-box:** style when desc is empty ([18fdde1](https://github.com/AliMD/alwatr/commit/18fdde1ce4e55869c491a90c603bb7059424bef5)) -- **icon-box:** target ([e108661](https://github.com/AliMD/alwatr/commit/e1086612704f8763daea1e1b0c58d21e580a4d66)) -- resolve conflict ([052314d](https://github.com/AliMD/alwatr/commit/052314d2adb3b9b0e44e54f9b8e6d60fc1827075)) -- **ui-kit/card:** filled `box-shadow` ([cf3a860](https://github.com/AliMD/alwatr/commit/cf3a86045d88bba39c6849b263e03af4bb5a247a)) -- **ui-kit/cards:** theming variables ([2ed156b](https://github.com/AliMD/alwatr/commit/2ed156b73540d2b6de42a79522729a84b44613cf)) -- **ui-kit/card:** styles ([738da92](https://github.com/AliMD/alwatr/commit/738da92a6ea6c99ab789a3af1f36beb15dbc2a04)) -- **ui-kit/focus-ring:** focus-within ([3d234bf](https://github.com/AliMD/alwatr/commit/3d234bf7055fd1e7db58877f7e8e9556e25f0e63)) -- **ui-kit/icon-box:** empty & linkable width ([e187b8a](https://github.com/AliMD/alwatr/commit/e187b8ac94dfe365145a0d1191654094d167c685)) -- **ui-kit/icon-box:** empty & linkable width ([533fccd](https://github.com/AliMD/alwatr/commit/533fccdbc867a44dd0f624d13287c16ccf825148)) -- **ui-kit/icon-button:** import path ([7770b9c](https://github.com/AliMD/alwatr/commit/7770b9c009d5362641d0da2d5cbf4f62a1b01f8c)) - -### Features - -- **cards:** update style variables ([ec2c0f2](https://github.com/AliMD/alwatr/commit/ec2c0f20e96ce6860ffc4a0c9c9ad5735c3913ab)) -- **chat-text-input:** use disabled surface for send btn ([80ae708](https://github.com/AliMD/alwatr/commit/80ae708702e5e44c9ba1978ba072f44028636066)) -- **chat-text:** filled icon color ([eb4e563](https://github.com/AliMD/alwatr/commit/eb4e5638e93ccb27e8307928a43ffbdb7483f5df)) -- **icon-box:** new style and layout ([2003e33](https://github.com/AliMD/alwatr/commit/2003e33e5095358e24fd4e07b3fc92a3b8a9d7d7)) -- **icon-box:** respect breaks in desc ([9c3aef8](https://github.com/AliMD/alwatr/commit/9c3aef811bea818bcbfd618d0c1b4f0c487f42bb)) -- **pwa:** unresolved state for show skeleton or loading ([8c4e834](https://github.com/AliMD/alwatr/commit/8c4e834b1415df14d6c76ef4d2040c60dc638b9e)) -- **standard-icon-button:** use new surface styles ([379c0f6](https://github.com/AliMD/alwatr/commit/379c0f6c1d11bd1c56f831ffc2477fac5d98e53f)) -- **type:** chat ([4b7ac95](https://github.com/AliMD/alwatr/commit/4b7ac95522dcb637ebab2eda0b8f3e0cd80d59b0)) -- **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -- **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) -- **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) -- **ui-kit/card:** base card element ([4c88879](https://github.com/AliMD/alwatr/commit/4c888797e3cd28f4830760dc13c86a3047b55d89)) -- **ui-kit/card:** rewrite styles ([a50bc57](https://github.com/AliMD/alwatr/commit/a50bc57e76e9c7882ff04f37ddc61e1657ab5ca6)) -- **ui-kit/cards:** imporve styles & rename ([00c4b64](https://github.com/AliMD/alwatr/commit/00c4b643d70bf7c95d4e9dace5f19cf7710c8d0c)) -- **ui-kit/focus-ring:** new component ([12e19da](https://github.com/AliMD/alwatr/commit/12e19dab4b56c1b5fe30fe4c8d6f0df594822d37)) -- **ui-kit/icon-box:** inline if for target ([9ca6966](https://github.com/AliMD/alwatr/commit/9ca69663ddf924483a5ae41f1b2a0fbb062ebc1c)) -- **ui-kit/icon-box:** new component ([e13e319](https://github.com/AliMD/alwatr/commit/e13e3196f45d8f4566704e87f1c819bf3b418fd8)) -- **ui-kit/icon-box:** new component ([f381ab3](https://github.com/AliMD/alwatr/commit/f381ab343109e5a1c51df8842a77a83417c93f60)) -- **ui-kit/icon-button:** add css shadow part ([#667](https://github.com/AliMD/alwatr/issues/667)) ([c39b7a9](https://github.com/AliMD/alwatr/commit/c39b7a95874001724aa51e8f0786af41564a2c4b)) -- **ui-kit/icon-button:** use `focus-ring` ([9730f05](https://github.com/AliMD/alwatr/commit/9730f05df9a881ef14102006a67cc83848921f85)) -- **ui-kit/icon-button:** use focus ring ([cedd003](https://github.com/AliMD/alwatr/commit/cedd003eaaf3d331e7d5be6a11fe5e40e44703cd)) -- **ui-kit/style:** focus ring ([45232a9](https://github.com/AliMD/alwatr/commit/45232a9aa265ea97b4db42398468dc0ae1d5ebbe)) -- **ui-kit:** downloadable link on icon-box ([e249dba](https://github.com/AliMD/alwatr/commit/e249dba12c34665792ccd1c4215cb50e5e6a00e2)) -- **ui-kit:** elevated, filled, outlined card components ([1e9746e](https://github.com/AliMD/alwatr/commit/1e9746e7dcbfce6f7acfa828ad18418f1152ec24)) -- **ui:** add palette 260 and 270 ([a94ca31](https://github.com/AliMD/alwatr/commit/a94ca3105a4eaf38e467d57671e2b886e1f0bd66)) -- **ui:** new AlwatrSurfaceElement with elevation/tint/state simulation ([0877f4f](https://github.com/AliMD/alwatr/commit/0877f4f3dd780321f3c7498cffde66653a24de43)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **chat-avatar:** grow ([d935030](https://github.com/AliMD/alwatr/commit/d9350303d9345729ab83f410182afeb1b7823294)) -- **chat-avatar:** size with new root fs ([63c8f36](https://github.com/AliMD/alwatr/commit/63c8f3617856a2ee65ccf7b398d5635349afb019)) -- **chat-footer:** footer padding, demo \_changeLocale ([6454599](https://github.com/AliMD/alwatr/commit/6454599272bc0c1b01c223274f48b8de99655130)) -- **standard-icon-button:** style ([0cfe9ee](https://github.com/AliMD/alwatr/commit/0cfe9ee6ea3e782b95d8953686a25fdc6c7d2847)) -- **ui-kit/chat-footer:** styles ([38e3bbc](https://github.com/AliMD/alwatr/commit/38e3bbc5d35242466cd4e33bf4bcacd5c6a87368)) -- **ui-kit/chat-text-input:** direction mixin ([8f00eac](https://github.com/AliMD/alwatr/commit/8f00eac04fe64fe5aa933a37fddce93c24c1bc58)) -- **ui-kit/icon-button:** flip-rtl attr ([9607493](https://github.com/AliMD/alwatr/commit/9607493754ad454c27f26d0eba883ca4488fca67)) -- **ui-kit:** font sizes ([2569644](https://github.com/AliMD/alwatr/commit/25696442da35ba570682c31157489d5802153fbf)) -- **ui:** root sizes ([2bdf2d5](https://github.com/AliMD/alwatr/commit/2bdf2d5712905d75491f61a5d94322395987b6ab)) - -### Features - -- **chat-\*:** scrollbar and gaps ([c91e2d6](https://github.com/AliMD/alwatr/commit/c91e2d6ec5a4dcc80b2ae71f800dae46cdd8c1f8)) -- **chat-avatar:** new style ([ea11421](https://github.com/AliMD/alwatr/commit/ea114213ad811206897c57f885b2973182a62f94)) -- **chat-bubble:** rewrite with new styles ([f4c5f01](https://github.com/AliMD/alwatr/commit/f4c5f0154935a1df77493f309ac9ce9b072ce5a2)) -- **chat-bubble:** side attrib ([5c36f8d](https://github.com/AliMD/alwatr/commit/5c36f8d5093659b7d6b6a251822294530f235fd0)) -- **chat-list:** new element for list of chats ([3ddae05](https://github.com/AliMD/alwatr/commit/3ddae05cd0bcebb855327f0f449d3ee7c7e576cd)) -- **chat-list:** scrollbar style ([a02074d](https://github.com/AliMD/alwatr/commit/a02074d894d3d812bfe8fb63be37f0edde931c00)) -- **chat-list:** self property and gap and spaces ([9d9edca](https://github.com/AliMD/alwatr/commit/9d9edca5a9a1c4ae1cf9f085ca3da92dfad7acae)) -- **chat-message:** ChatTextMessage type ([227dda3](https://github.com/AliMD/alwatr/commit/227dda3611049f787bfaee2f4443420b005475e2)) -- **chat-message:** gap and spaces ([0b1043a](https://github.com/AliMD/alwatr/commit/0b1043a9a9ba2c67b664ca2edc7ad8610b05c210)) -- **chat-message:** new chat element ([12f9b72](https://github.com/AliMD/alwatr/commit/12f9b724ec35a55d5e7a1d8495dd11ba0f6a77a4)) -- **chat-text-input:** inputElement ([4abfdd6](https://github.com/AliMD/alwatr/commit/4abfdd6c4e73e5db588e6f099fc9d5e1b8cd06db)) -- **chat-text-input:** style ([8c302cc](https://github.com/AliMD/alwatr/commit/8c302ccd7045a91f596a6ddae601ae87a26a8fc5)) -- **chat:** use new color system ([045b188](https://github.com/AliMD/alwatr/commit/045b18891ca8b9ba0a556be6c621747cb8d0a639)) -- **chat:** use new spacing system ([4e0d44e](https://github.com/AliMD/alwatr/commit/4e0d44e419973e28d5584e609f8efbc68f07fcd2)) -- **chat:** use system shape var ([dcff276](https://github.com/AliMD/alwatr/commit/dcff276ec28e345306f1a278a69bd64c05c5e130)) -- **icon-button:** enhance styles and motion ([4b4a301](https://github.com/AliMD/alwatr/commit/4b4a301f53a059cc5faa4a75b22fc079f750bc38)) -- new ui design system ([8c9c8ba](https://github.com/AliMD/alwatr/commit/8c9c8ba29c477838f3e7034b902f4e0dafabd17c)) -- **page-chat:** new demo ([451d63f](https://github.com/AliMD/alwatr/commit/451d63fc0b904bb780c898c2909b1d7a116b353f)) -- **ui-kit/chat-footer:** build base ([30cf89a](https://github.com/AliMD/alwatr/commit/30cf89aac3a68e0fc028eb7a8a227efce85ba892)) -- **ui-kit/chat-footer:** component ([7041047](https://github.com/AliMD/alwatr/commit/70410476ff7846b14873dfdf6299d528e1de2f61)) -- **ui-kit/chat-footer:** new component ([5151d1c](https://github.com/AliMD/alwatr/commit/5151d1c50c1fd63e1bee479220a4363a9ab800e3)) -- **ui-kit/chat-text-input:** flex grow ([b8837ff](https://github.com/AliMD/alwatr/commit/b8837ff9772959a585e4862f48b9b5da390da561)) -- **ui-kit/chat-text-input:** improve ([28f08a9](https://github.com/AliMD/alwatr/commit/28f08a91ff49ac4567c86fea7d3bd4458d69cc4a)) -- **ui-kit/chat-text-input:** translations ([3d03d3d](https://github.com/AliMD/alwatr/commit/3d03d3d56d9fef34b35c76568fb9d7ec7069f1ee)) -- **ui-kit/chat-text-input:** typography ([e67113e](https://github.com/AliMD/alwatr/commit/e67113ec2e3c8e32a5e700162755995d852aec66)) -- **ui-kit/icon-button:** component ([7db86bf](https://github.com/AliMD/alwatr/commit/7db86bfa678d64237951a8c8002c38dd51d3d082)) -- **ui-kit/icon-button:** icon flip-rtl ([f6427b6](https://github.com/AliMD/alwatr/commit/f6427b62315389cea308f2a522e358af8b9838cd)) -- **ui-kit:** elevation sample ([ccd9e8a](https://github.com/AliMD/alwatr/commit/ccd9e8a9c7cc94a830a03bf11ddbf46891300f68)) -- **ui/chat:** new alwatr-chat element ([f711e12](https://github.com/AliMD/alwatr/commit/f711e12317a263d6e1d4bfc52dae54348cf64923)) -- **ui/ui-kit:** chat text input component ([586aefd](https://github.com/AliMD/alwatr/commit/586aefd7fcbfd520f36f035415dbb76d5ffa324f)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -### Features - -- **ui-kit:** index file ([5888dde](https://github.com/AliMD/alwatr/commit/5888ddedc38da7a8b6ae07e3826c9bc52c91680f)) -- **ui-kit:** new package ([418b3a6](https://github.com/AliMD/alwatr/commit/418b3a66157658be3b88635947d5121cdc9a757f)) diff --git a/ui/ui-kit/README.md b/ui/ui-kit/README.md deleted file mode 100644 index 70ac0251e..000000000 --- a/ui/ui-kit/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr UI-Kit - `@alwatr/ui-kit` - -Alwatr UI Elements Kit. - - diff --git a/ui/ui-kit/icon/icon.scss b/ui/ui-kit/icon/icon.scss deleted file mode 100644 index 3fe354c61..000000000 --- a/ui/ui-kit/icon/icon.scss +++ /dev/null @@ -1,21 +0,0 @@ -.alwatr-icon { - display: inline-block; - width: 1em; - height: 1em; - contain: size layout paint style; - box-sizing: content-box; - vertical-align: middle; - - & svg { - display: block; - height: 100%; - width: 100%; - stroke: currentcolor; - fill: currentcolor; - } -} - -[dir='rtl'] .alwatr-icon.flip-icon-in-rtl svg, -[dir='rtl'] .flip-icon-in-rtl .alwatr-icon svg { - transform: scaleX(-1); -} diff --git a/ui/ui-kit/navigation-bar2/navigation-bar.scss b/ui/ui-kit/navigation-bar2/navigation-bar.scss deleted file mode 100644 index 54659dddb..000000000 --- a/ui/ui-kit/navigation-bar2/navigation-bar.scss +++ /dev/null @@ -1,23 +0,0 @@ -.navigation-bar { - display: flex; - justify-content: space-between; - align-items: center; - gap: calc(var(--sys-spacing-track) / 2); - padding: calc(1.5 * var(--sys-spacing-track)) 0 calc(2 * var(--sys-spacing-track)) 0; - color: var(--sys-color-on-surface-variant); - user-select: none; - - & a { - display: block; - height: 100%; - flex-grow: 1; - text-align: center; - text-decoration: none; - color: inherit; - } - - .alwatr-icon { - padding: calc(var(--sys-spacing-track) / 2) calc(2.5 * var(--sys-spacing-track)); - font-size: calc(3 * var(--sys-spacing-track)); - } -} diff --git a/ui/ui-kit/package.json b/ui/ui-kit/package.json deleted file mode 100644 index 31e97b526..000000000 --- a/ui/ui-kit/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@alwatr/ui-kit", - "version": "1.0.0", - "description": "Alwatr UI Elements Kit", - "keywords": [ - "element", - "ui-kit", - "ui", - "lit", - "lit-element", - "web-component", - "typescript", - "esm", - "alwatr" - ], - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/**/*.{d.ts.map,d.ts,js.map,js,md,css}" - ], - "private": true, - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/ui-kit" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/ui-kit#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/element": "^1.0.0", - "@alwatr/fetch": "^1.0.0", - "@alwatr/i18n": "^1.0.0", - "@alwatr/i18n2": "^1.0.0", - "@alwatr/icon": "^1.0.0", - "@alwatr/signal": "^1.0.0", - "@alwatr/signal2": "^1.0.0", - "@alwatr/util": "^1.0.0", - "@alwatr/router2": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/ui/ui-kit/src/button/button.ts b/ui/ui-kit/src/button/button.ts deleted file mode 100644 index 99fe36c4a..000000000 --- a/ui/ui-kit/src/button/button.ts +++ /dev/null @@ -1,138 +0,0 @@ -import {PropertyValues, css, customElement, html, nothing, property} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/icon'; -import {eventTrigger} from '@alwatr/signal'; - -import {AlwatrSurface} from '../card/surface.js'; - -import type {ClickSignalType, Stringifyable, StringifyableRecord} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-button': AlwatrButton; - } -} - -export interface ButtonContent extends StringifyableRecord { - /** - * Label. - */ - label?: string - - /** - * Label i18n key. - */ - labelKey?: string; - - /** - * Icon name. - */ - icon?: string; - - /** - * Flip icon on rtl - */ - flipRtl?: true; - - /** - * Unique name for identify click event over signal. - */ - clickSignalId?: string; - - /** - * Dispatched signal with ClickSignalType and this detail. - */ - clickDetail?: Stringifyable; - - disabled?: boolean; -} - -/** - * Alwatr outlined text field. - * - * @attr click-signal-id - */ -@customElement('alwatr-button') -export class AlwatrButton extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - --_surface-color-on: var(--sys-color-primary-hsl); - background-color: transparent; - display: inline-flex; - align-items: center; - gap: var(--sys-spacing-track); - min-width: calc(6 * var(--sys-spacing-track)); - text-align: center; - vertical-align: middle; - padding: 0 calc(1.5 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-label-large-font-family-name); - font-weight: var(--sys-typescale-label-large-font-weight); - font-size: var(--sys-typescale-label-large-font-size); - letter-spacing: var(--sys-typescale-label-large-letter-spacing); - line-height: var(--sys-typescale-label-large-line-height); - line-height: calc(5 * var(--sys-spacing-track)); - border-radius: var(--sys-radius-xlarge); - white-space: nowrap; - user-select: none; - cursor: pointer; - } - - alwatr-icon { - font-size: calc(2.5 * var(--sys-spacing-track)); - } - `, - ]; - - @property({type: Object}) - content?: ButtonContent; - - protected override firstUpdated(_changedProperties: PropertyValues): void { - super.firstUpdated(_changedProperties); - this.setAttribute('stated', ''); - } - - override connectedCallback(): void { - super.connectedCallback(); - this.addEventListener('click', this._click); - } - - override disconnectedCallback(): void { - super.disconnectedCallback(); - this.removeEventListener('click', this._click); - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - - if (this.content?.disabled != null && this.hasAttribute('disabled') !== this.content.disabled) { - this.toggleAttribute('disabled', this.content.disabled); - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - const content = this.content || {}; - - return [ - content.icon - ? html`` - : nothing, - html`${content.label ?? message(content.labelKey)}`, - ]; - } - - protected _click(event: MouseEvent): void { - if (this.content?.clickSignalId == null) return; - this._logger.logMethodArgs?.('click', {clickSignalId: this.content.clickSignalId}); - eventTrigger.dispatch(this.content.clickSignalId, { - x: event.clientX, - y: event.clientY, - altKey: event.altKey, - ctrlKey: event.ctrlKey, - metaKey: event.metaKey, - detail: this.content.clickDetail, - }); - } -} diff --git a/ui/ui-kit/src/button/icon-button.ts b/ui/ui-kit/src/button/icon-button.ts deleted file mode 100644 index 174a80ebd..000000000 --- a/ui/ui-kit/src/button/icon-button.ts +++ /dev/null @@ -1,136 +0,0 @@ -import {css, customElement, html, property, type PropertyValues} from '@alwatr/element'; -import '@alwatr/icon'; -import {eventTrigger} from '@alwatr/signal'; - -import {AlwatrSurface} from '../card/surface.js'; - -import type {StringifyableRecord, ClickSignalType, Stringifyable} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-icon-button': AlwatrStandardIconButton; - } -} - -export interface IconButtonContent extends StringifyableRecord { - /** - * Icon name. - */ - icon: string; - - /** - * Flip icon on rtl - */ - flipRtl?: true; - - /** - * Unique name for identify click event over signal. - */ - clickSignalId?: string; - - /** - * Dispatched signal with ClickSignalType and this detail. - */ - clickDetail?: Stringifyable; - - disabled?: boolean; -} - -/** - * Alwatr standard icon button element. - * - * @attr {Boolean} flip-rtl - * - * @cssprop {String} [--comp-icon-button-color-hsl=var(--sys-color-on-surface-variant-hsl)] - */ -@customElement('alwatr-icon-button') -export class AlwatrStandardIconButton extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - --_surface-color-on: var(--comp-icon-button-color-hsl, var(--sys-color-on-surface-variant-hsl)); - --_surface-state-color: var(--comp-icon-button-color-hsl, var(--sys-color-on-surface-variant-hsl)); - - display: inline-block; - padding: calc(0.5 * var(--sys-spacing-track)); - font-size: calc(3 * var(--sys-spacing-track)); /* icon size */ - background-image: none; - background-color: hsla(var(--_surface-state-color), var(--_surface-state-opacity)); - background-clip: content-box; - border-radius: 50%; - box-shadow: none; - - user-select: none; - cursor: pointer; - align-self: center; - vertical-align: middle; - flex-grow: 0; - flex-shrink: 0; - } - - alwatr-icon { - display: block; - padding: var(--sys-spacing-track); - } - `, - ]; - - @property({type: Object}) - content?: IconButtonContent; - - protected override firstUpdated(_changedProperties: PropertyValues): void { - super.firstUpdated(_changedProperties); - this.setAttribute('stated', ''); - } - - override connectedCallback(): void { - super.connectedCallback(); - this.addEventListener('click', this._click); - } - - override disconnectedCallback(): void { - super.disconnectedCallback(); - this.removeEventListener('click', this._click); - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - - const disabled = Boolean(this.content?.disabled); - if (this.hasAttribute('disabled') !== disabled) { - this.toggleAttribute('disabled', disabled); - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - const content = this.content || {icon: ''}; - - return html``; - } - - protected _click(event: MouseEvent): void { - const clickSignalId = this.content?.clickSignalId; - this._logger.logMethodArgs?.('click', {clickSignalId: clickSignalId}); - if (clickSignalId) { - eventTrigger.dispatch(clickSignalId, { - x: event.clientX, - y: event.clientY, - altKey: event.altKey, - ctrlKey: event.ctrlKey, - metaKey: event.metaKey, - detail: this.content?.clickDetail, - }); - } - } -} - -/* - TODO: - 1. Filled icon button - 2. Filled tonal icon button - 3. Outlined icon button - 4. toggle/selected mode - https://m3.material.io/components/icon-buttons/specs -*/ diff --git a/ui/ui-kit/src/card/icon-box.ts b/ui/ui-kit/src/card/icon-box.ts deleted file mode 100644 index 2122f1cca..000000000 --- a/ui/ui-kit/src/card/icon-box.ts +++ /dev/null @@ -1,151 +0,0 @@ -import {css, customElement, html, property, nothing, ifDefined, when, PropertyValues} from '@alwatr/element'; -import '@alwatr/icon'; - -import {AlwatrSurface} from './surface.js'; - -import type {StringifyableRecord} from '@alwatr/type'; - - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-icon-box': AlwatrIconBox; - } -} - -export interface IconBoxContent extends StringifyableRecord { - icon?: string; - headline: string; - description?: string; - href?: string; - flipRtl?: boolean; - target?: 'download' | '_blank'; - highlight?: boolean; - stated?: boolean; - preLine?: boolean; - elevated?: number; - tinted?: number; -} - -/** - * Alwatr icon box element. - */ -@customElement('alwatr-icon-box') -export class AlwatrIconBox extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - display: block; - padding: 0; - transition-property: color, background-color, opacity, height; - transition-duration: var(--sys-motion-duration-small), var(--sys-motion-duration-small), - var(--sys-motion-duration-small), var(--sys-motion-duration-large); - transition-timing-function: var(--sys-motion-easing-normal); - font-family: var(--sys-typescale-body-small-font-family-name); - font-weight: var(--sys-typescale-body-small-font-weight); - font-size: var(--sys-typescale-body-small-font-size); - letter-spacing: var(--sys-typescale-body-small-letter-spacing); - line-height: var(--sys-typescale-body-small-line-height); - user-select: none; - -webkit-user-select: none; - } - - :host([highlight]) { - cursor: pointer; - } - - :host([highlight]:hover) { - --_surface-color-on: var(--sys-color-on-primary-hsl); - --_surface-color-bg: var(--sys-color-primary-hsl); - } - - .container { - display: block; - padding: calc(2 * var(--sys-spacing-track)); - border-radius: inherit; - color: inherit; - text-decoration: inherit; - } - - .headline { - margin: 0; - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - .headline alwatr-icon { - display: block; - margin-bottom: var(--sys-spacing-track); - font-size: 1.5em; - color: var(--sys-color-primary); - transition: color var(--sys-motion-duration-small) var(--sys-motion-easing-normal); - } - :host([highlight]:hover) .headline alwatr-icon { - color: var(--sys-color-on-primary); - } - - .description { - margin-top: calc(2 * var(--sys-spacing-track)); - } - :host([pre-line]) .description { - white-space: pre-line; - } - `, - ]; - - @property({type: Object, attribute: false}) - content?: IconBoxContent; - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('content') && this.content != null) { - this.toggleAttribute('highlight', Boolean(this.content.highlight)); - this.toggleAttribute('stated', Boolean(this.content.stated)); - this.toggleAttribute('pre-line', Boolean(this.content.preLine)); - if (this.content.elevated != null && this.content.elevated > 0) { - this.setAttribute('elevated', this.content.elevated + ''); - } - else { - this.removeAttribute('elevated'); - } - if (this.content.tinted != null && this.content.tinted > 0) { - this.setAttribute('tinted', this.content.tinted + ''); - } - else { - this.removeAttribute('tinted'); - } - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - const content = this.content; - if (content == null) return nothing; - const target = content.target !== 'download' ? content.target : undefined; - - const template = html`

    - ${when(content.icon, () => html` - - `)} - ${content.headline} -

    -
    ${content.description}
    `; - - return when(content.href == null, - () => html`
    ${template}
    `, - () => html`${template}`, - ); - } -} diff --git a/ui/ui-kit/src/card/image-box.ts b/ui/ui-kit/src/card/image-box.ts deleted file mode 100644 index 710e7b618..000000000 --- a/ui/ui-kit/src/card/image-box.ts +++ /dev/null @@ -1,173 +0,0 @@ -import {css, customElement, html, property, nothing, ifDefined, type PropertyValues} from '@alwatr/element'; -import '@alwatr/icon'; - -import {AlwatrSurface} from './surface.js'; - -import type {StringifyableRecord} from '@alwatr/type'; - - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-image-box': AlwatrImageBox; - } -} - -export interface ImageBoxContent extends StringifyableRecord { - image: string; - headline: string; - description?: string; - href?: string; - target?: 'download' | '_blank'; - highlight?: boolean; - stated?: boolean; - preLine?: boolean; - elevated?: number; -} - -/** - * Alwatr image box element. - */ -@customElement('alwatr-image-box') -export class AlwatrImageBox extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - position: relative; - display: block; - padding: 0; - transition-property: color, background-color, opacity, height; - transition-duration: var(--sys-motion-duration-small), var(--sys-motion-duration-small), - var(--sys-motion-duration-small), var(--sys-motion-duration-medium); - transition-timing-function: var(--sys-motion-easing-normal); - font-family: var(--sys-typescale-body-small-font-family-name); - font-weight: var(--sys-typescale-body-small-font-weight); - font-size: var(--sys-typescale-body-small-font-size); - letter-spacing: var(--sys-typescale-body-small-letter-spacing); - line-height: var(--sys-typescale-body-small-line-height); - user-select: none; - -webkit-user-select: none; - cursor: pointer; - } - - :host([selected]) { - --_surface-color-on: var(--sys-color-on-primary-hsl); - --_surface-color-bg: var(--sys-color-primary-hsl); - } - - .container { - display: block; - border-radius: inherit; - color: inherit; - } - - .content-container { - padding: calc(2 * var(--sys-spacing-track)); - } - - .image { - width: 100%; - height: auto; - border-radius: inherit; - } - - .headline { - margin: 0; - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - } - - .checkmark-icon { - display: none; - color: var(--sys-color-primary); - position: absolute; - font-size: var(--sys-typescale-headline-small-font-size); - padding: var(--sys-spacing-track); - filter: drop-shadow(var(--sys-surface-elevation-1)); - } - - :host([selected]) .checkmark-icon { - display: inline; - } - - .description { - margin-top: calc(2 * var(--sys-spacing-track)); - } - :host([pre-line]) .description { - white-space: pre-line; - } - `, - ]; - - @property({type: Object}) - content?: ImageBoxContent; - - @property({type: Boolean}) - selected = false; - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('content') && this.content != null) { - this.toggleAttribute('highlight', Boolean(this.content.highlight)); - this.toggleAttribute('stated', Boolean(this.content.stated)); - this.toggleAttribute('pre-line', Boolean(this.content.preLine)); - if (this.content.elevated != null && this.content.elevated > 0) { - this.setAttribute('elevated', this.content.elevated + ''); - } - else { - this.removeAttribute('elevated'); - } - } - } - - override connectedCallback(): void { - super.connectedCallback(); - this.addEventListener('click', this._toggleSelect); - } - - override disconnectedCallback(): void { - super.disconnectedCallback(); - this.removeEventListener('click', this._toggleSelect); - } - - protected _toggleSelect(): void { - this.selected = !this.selected; - - if (this.selected) { - this.setAttribute('selected', ''); - navigator.vibrate(30); - } - else { - this.removeAttribute('selected'); - navigator.vibrate(10); - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - const content = this.content; - if (content == null) return nothing; - const target = content.target !== 'download' ? content.target : undefined; - - const template = html` - - -
    -

    ${content.headline}

    -
    ${content.description}
    -
    - `; - - return content.href == null - ? html`
    ${template}
    ` - : html`${template}`; - } -} diff --git a/ui/ui-kit/src/card/product-card.ts b/ui/ui-kit/src/card/product-card.ts deleted file mode 100644 index b4363c537..000000000 --- a/ui/ui-kit/src/card/product-card.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { - css, - customElement, - SignalMixin, - LocalizeMixin, - ToggleMixin, - nothing, - html, - property, - type PropertyValues, -} from '@alwatr/element'; -import {number} from '@alwatr/i18n'; -import '@alwatr/icon'; - -import {AlwatrSurface} from './surface.js'; -import '../button/icon-button.js'; - -import type {StringifyableRecord} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-product-card': AlwatrProductCard; - } -} - -export interface ProductCartContent extends StringifyableRecord { - id?: string; - title: string; - imagePath: string; - price?: number; - finalPrice?: number; -} - -/** - * Alwatr elevated card element. - */ -@customElement('alwatr-product-card') -export class AlwatrProductCard extends ToggleMixin(LocalizeMixin(SignalMixin(AlwatrSurface))) { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - display: block; - padding: 0; - cursor: pointer; - user-select: none; - -webkit-user-select: none; - --_surface-color-on: var(--sys-color-on-surface-hsl); - --_surface-color-bg: var(--sys-color-surface-hsl); - outline: 2px solid transparent; - } - - :host([selected]) { - --_surface-color-on: var(--sys-color-inverse-on-surface-hsl); - --_surface-color-bg: var(--sys-color-inverse-surface-hsl); - border-radius: var(--sys-radius-xlarge); - outline: 2px solid var(--sys-color-inverse-surface); - } - - img { - display: block; - box-sizing: border-box; - width: 100%; - min-height: 50px; - height: auto; - border-radius: 0 0 var(--sys-radius-medium) var(--sys-radius-medium); - filter: brightness(1); - transition: filter var(--sys-motion-duration-small) var(--sys-motion-easing-normal); - } - - :host([selected]) img { - filter: brightness(0.8); - } - - @media (prefers-color-scheme: dark) { - img { - filter: brightness(0.8); - } - :host([selected]) img { - filter: brightness(1); - } - } - - .content{ - padding: calc(2 * var(--sys-spacing-track)); - - } - .title { - margin: 0; - /* text-align: center; */ - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - margin-bottom: var(--sys-spacing-track); - } - - .price { - text-align: end; - color: var(--sys-color-on-surface-variant); - font-family: var(--sys-typescale-body-small-font-family-name); - font-weight: var(--sys-typescale-body-small-font-weight); - font-size: var(--sys-typescale-body-small-font-size); - letter-spacing: var(--sys-typescale-body-small-letter-spacing); - line-height: var(--sys-typescale-body-small-line-height); - } - :host([selected]) .price { - color: inherit; - } - - .price ins { - color: var(--sys-color-primary); - text-decoration: none; - font-weight: var(--ref-font-weight-medium); - vertical-align: middle; - } - - .price del { - display: block; - text-align: end; - padding-left: 1em; - } - - :host([selected]) .price ins { - color: var(--sys-color-inverse-primary); - } - - svg { - display: inline-block; - width: 1em; - height: 1em; - contain: strict; - vertical-align: middle; - } - `, - ]; - - @property({type: Object, attribute: false}) - content?: ProductCartContent; - - override connectedCallback(): void { - super.connectedCallback(); - this.setAttribute('stated', ''); - this.setAttribute('elevated', ''); - } - - protected override shouldUpdate(changedProperties: PropertyValues): boolean { - return super.shouldUpdate(changedProperties) && this.content != null; - } - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.content == null) return nothing; - - // const icon = this.selected ? 'radio-button-on-outline' : 'radio-button-off-outline'; - - return html` - ${this.content.title} -
    -

    ${this.content.title}

    -
    - ${number(this.content.price)} - ${number(this.content.finalPrice)} - -
    -
    - `; - } -} diff --git a/ui/ui-kit/src/card/surface.ts b/ui/ui-kit/src/card/surface.ts deleted file mode 100644 index 272801fd1..000000000 --- a/ui/ui-kit/src/card/surface.ts +++ /dev/null @@ -1,173 +0,0 @@ -import {AlwatrBaseElement, customElement, html, css, type CSSResultGroup} from '@alwatr/element'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-surface': AlwatrSurface; - } -} - -/** - * Alwatr Surface Element - * - * @extends AlwatrBaseElement - * - * @attr {Boolean} stated - * @attr {Number|Boolean} elevated - * @attr {Number|Boolean} tinted - * @attr {Boolean} filled - * @attr {Boolean} outlined - * @attr {Boolean} active-outline - outline on active and focus - * @attr {Boolean} disabled - * - * @cssprop {String} [--_surface-color-on=var(--sys-color-on-surface-hsl)] - * @cssprop {String} [--_surface-color-bg=var(--sys-color-surface-hsl)] - * @cssprop {String} [--_surface-elevation=var(--sys-surface-elevation-0)] - * @cssprop {String} [--_surface-tint-color=var(--sys-color-surface-tint-hsl)] - * @cssprop {String} [--_surface-state-color=var(--_surface-color-on)] - * @cssprop {Number} [--_surface-tint-opacity=0] - * @cssprop {Number} [--_surface-state-opacity=0] - */ -@customElement('alwatr-surface') -export class AlwatrSurface extends AlwatrBaseElement { - static override styles: CSSResultGroup = css` - :host { - --_surface-color-on: var(--sys-color-on-surface-hsl); - --_surface-color-bg: var(--sys-color-surface-hsl); - --_surface-elevation: var(--sys-surface-elevation-0); - --_surface-tint-color: var(--sys-color-surface-tint-hsl); - --_surface-state-color: var(--_surface-color-on); - --_surface-tint-opacity: 0; - --_surface-state-opacity: 0; - - display: block; - box-sizing: border-box; - padding: calc(2 * var(--sys-spacing-track)); - color: hsl(var(--_surface-color-on)); - background-color: hsl(var(--_surface-color-bg)); - box-shadow: var(--_surface-elevation); - background-image: linear-gradient( - hsla(var(--_surface-tint-color), var(--_surface-tint-opacity)), - hsla(var(--_surface-tint-color), var(--_surface-tint-opacity)) - ), - linear-gradient( - hsla(var(--_surface-state-color), var(--_surface-state-opacity)), - hsla(var(--_surface-state-color), var(--_surface-state-opacity)) - ); - background-repeat: no-repeat; - outline: 0; - border-radius: var(--sys-radius-medium); - overflow: hidden; - overflow: clip; - transition-property: opacity, background-color, color, border-radius, border-color, outline-color; - transition-duration: var(--sys-motion-duration-small); - transition-timing-function: var(--sys-motion-easing-normal); - -webkit-tap-highlight-color: transparent; - } - - :host([outlined]) { - border: 1px solid var(--sys-color-outline); - } - - :host([filled]) { - --_surface-color-bg: var(--sys-color-surface-variant-hsl); - } - - :host([elevated]) { - --_surface-elevation: var(--sys-surface-elevation-1); - } - :host([elevated='2']) { - --_surface-elevation: var(--sys-surface-elevation-2); - } - :host([elevated='3']) { - --_surface-elevation: var(--sys-surface-elevation-3); - } - :host([elevated='4']) { - --_surface-elevation: var(--sys-surface-elevation-4); - } - - :host([tinted]), - :host([elevated]) { - --_surface-tint-opacity: var(--sys-surface-tint-opacity-1); - } - :host([tinted='2']), - :host([elevated='2']) { - --_surface-tint-opacity: var(--sys-surface-tint-opacity-2); - } - :host([tinted='3']), - :host([elevated='3']) { - --_surface-tint-opacity: var(--sys-surface-tint-opacity-3); - } - :host([tinted='4']), - :host([elevated='4']) { - --_surface-tint-opacity: var(--sys-surface-tint-opacity-4); - } - :host([tinted='5']) { - --_surface-tint-opacity: var(--sys-surface-tint-opacity-5); - } - - :host([stated]:hover) { - --_surface-state-opacity: var(--sys-surface-state-opacity-hover); - } - :host([stated]:active) { - --_surface-state-opacity: var(--sys-surface-state-opacity-pressed); - } - :host([stated]:focus), - :host([stated]:focus-within) { - --_surface-state-opacity: var(--sys-surface-state-opacity-focus); - } - - :host([active-outline]:active), - :host([active-outline]:focus), - :host([active-outline]:focus-within) { - border-color: var(--sys-color-primary); - box-shadow: 0 0 0.4px 0.8px var(--sys-color-primary); - } - - :host([stated]:hover:not(:active)), - :host([stated]:focus), - :host([stated]:focus-within) { - --_surface-elevation: var(--sys-surface-elevation-1); - --_surface-tint-opacity: var(--sys-surface-tint-opacity-1); - } - :host([stated][elevated]:hover:not(:active)), - :host([stated][elevated]:focus), - :host([stated][elevated]:focus-within) { - --_surface-elevation: var(--sys-surface-elevation-2); - --_surface-tint-opacity: var(--sys-surface-tint-opacity-2); - } - :host([stated][elevated='2']:hover:not(:active)), - :host([stated][elevated='2']:focus), - :host([stated][elevated='2']:focus-within) { - --_surface-elevation: var(--sys-surface-elevation-3); - --_surface-tint-opacity: var(--sys-surface-tint-opacity-3); - } - :host([stated][elevated='3']:hover:not(:active)), - :host([stated][elevated='3']:focus), - :host([stated][elevated='3']:focus-within) { - --_surface-elevation: var(--sys-surface-elevation-4); - --_surface-tint-opacity: var(--sys-surface-tint-opacity-4); - } - :host([stated][elevated='4']:hover:not(:active)), - :host([stated][elevated='4']:focus), - :host([stated][elevated='4']:focus-within) { - --_surface-elevation: var(--sys-surface-elevation-5); - --_surface-tint-opacity: var(--sys-surface-tint-opacity-5); - } - - :host([disabled]) { - pointer-events: none; - box-shadow: var(--sys-surface-elevation-0) !important; - /* color: var(--sys-color-on-surface) !important; */ - opacity: var(--sys-surface-disabled-opacity); - } - - :host([outlined][disabled]) { - opacity: var(--sys-surface-disabled-outlined-opacity); - } - `; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html``; - } -} diff --git a/ui/ui-kit/src/chat/chat-avatar.ts b/ui/ui-kit/src/chat/chat-avatar.ts deleted file mode 100644 index 16e7342cb..000000000 --- a/ui/ui-kit/src/chat/chat-avatar.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {AlwatrBaseElement, css, customElement, html, property} from '@alwatr/element'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat-avatar': AlwatrChatAvatar; - } -} - -/** - * Alwatr chat message avatar element. - */ -@customElement('alwatr-chat-avatar') -export class AlwatrChatAvatar extends AlwatrBaseElement { - static override styles = css` - :host { - display: inline-block; - width: calc(5 * var(--sys-spacing-track)); - height: calc(5 * var(--sys-spacing-track)); - border-radius: 50%; - overflow: hidden; - overflow: clip; - overflow-clip-margin: content-box; - box-sizing: content-box; - flex-grow: 0; - flex-shrink: 0; - } - - img { - display: block; - width: inherit; - height: inherit; - } - `; - - @property() - user?: string; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html`User ${this.user} profile image`; - } -} diff --git a/ui/ui-kit/src/chat/chat-bubble.ts b/ui/ui-kit/src/chat/chat-bubble.ts deleted file mode 100644 index eb1d1cc4f..000000000 --- a/ui/ui-kit/src/chat/chat-bubble.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {AlwatrBaseElement, css, html, customElement, property, DirectionMixin, SignalMixin} from '@alwatr/element'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat-bubble': AlwatrChatBubble; - } -} - -/** - * Alwatr chat message bubble box element. - * - * @attr {start|end} side - * - */ -@customElement('alwatr-chat-bubble') -export class AlwatrChatBubble extends DirectionMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: inline-block; - padding: - var(--sys-spacing-track) - calc(2 * var(--sys-spacing-track)) - calc(1.5 * var(--sys-spacing-track)) - ; - color: var(--sys-color-on-surface); - background-color: var(--sys-color-surface); - white-space: pre-line; - /* max-width: var(--sys-spacing-column-3); */ - border-radius: var(--sys-radius-large); - } - - :host([side='start']), - :host([side='end'][dir='rtl']) { - border-bottom-left-radius: var(--sys-radius-xsmall); - border-bottom-right-radius: var(--sys-radius-large); - } - - :host([side='end']), - :host([side='start'][dir='rtl']) { - border-bottom-left-radius: var(--sys-radius-large); - border-bottom-right-radius: var(--sys-radius-xsmall); - } - `; - - @property() - text?: string; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html`${this.text ?? '...'}`; - } -} diff --git a/ui/ui-kit/src/chat/chat-footer.ts b/ui/ui-kit/src/chat/chat-footer.ts deleted file mode 100644 index dc8b5ec5f..000000000 --- a/ui/ui-kit/src/chat/chat-footer.ts +++ /dev/null @@ -1,46 +0,0 @@ -import {AlwatrBaseElement, css, customElement, html} from '@alwatr/element'; - -import './chat-text-input.js'; -import '../button/icon-button.js'; - -import type {IconButtonContent} from '../button/icon-button.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat-footer': AlwatrChatFooter; - } -} - -/** - * Alwatr chat footer element. - */ -@customElement('alwatr-chat-footer') -export class AlwatrChatFooter extends AlwatrBaseElement { - static override styles = css` - :host { - display: flex; - gap: var(--sys-spacing-track); - padding: calc(2 * var(--sys-spacing-track)); - padding-inline-start: var(--sys-spacing-track); - border-top-left-radius: var(--sys-radius-large); - border-top-right-radius: var(--sys-radius-large); - color: var(--sys-color-on-surface); - background-color: var(--sys-color-surface); - } - `; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` - - - `; - } - - protected _sendMessage(): void { - this._logger.logMethod?.('_sendMessage'); - } -} diff --git a/ui/ui-kit/src/chat/chat-list.ts b/ui/ui-kit/src/chat/chat-list.ts deleted file mode 100644 index 7725f56a8..000000000 --- a/ui/ui-kit/src/chat/chat-list.ts +++ /dev/null @@ -1,86 +0,0 @@ -import {AlwatrBaseElement, css, customElement, html, mapObject, nothing, property} from '@alwatr/element'; - -import './chat-message.js'; - -import type {ChatStorage} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat-list': AlwatrChatList; - } -} - -export function* map( - items: Record | undefined, - func: (value: T, index: string) => unknown, -): Generator { - if (items !== undefined) { - for (const key in items) { - if (!Object.prototype.hasOwnProperty.call(items, key)) continue; - yield func(items[key], key); - } - } -} - -/** - * Alwatr chat message box element. - * - * @attr end-side - */ -@customElement('alwatr-chat-list') -export class AlwatrChatList extends AlwatrBaseElement { - static override styles = css` - :host { - display: flex; - flex-direction: column; - gap: calc(2 * var(--sys-spacing-track)); - border-top-left-radius: var(--sys-radius-large); - border-top-right-radius: var(--sys-radius-large); - padding: calc(2 * var(--sys-spacing-track)); - flex-grow: 1; - overflow-y: auto; - box-sizing: border-box; - } - - :host::-webkit-scrollbar { - width: var(--sys-scrollbar-size); - height: var(--sys-scrollbar-size); - } - - :host::-webkit-scrollbar-corner, - :host::-webkit-scrollbar-track { - background-color: var(--sys-scrollbar-background); - } - - :host::-webkit-scrollbar-track { - margin: var(--sys-spacing-track); - } - - :host::-webkit-scrollbar-thumb { - background-color: var(--sys-scrollbar-color); - border-radius: var(--sys-scrollbar-radius); - } - - :host(:hover)::-webkit-scrollbar-thumb { - background-color: var(--sys-scrollbar-color-hover); - } - `; - - @property({type: Object, attribute: false}) - storage?: ChatStorage; - - @property({type: String, attribute: false}) - currentUser?: string; - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.storage == null) return nothing; - return html`${mapObject( - this, - this.storage.data, - (message) => html` - - `, - )}`; - } -} diff --git a/ui/ui-kit/src/chat/chat-message.ts b/ui/ui-kit/src/chat/chat-message.ts deleted file mode 100644 index 577eff1ea..000000000 --- a/ui/ui-kit/src/chat/chat-message.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { - AlwatrBaseElement, - css, - customElement, - html, - nothing, - property, - DirectionMixin, - SignalMixin, -} from '@alwatr/element'; - -import './chat-avatar.js'; -import './chat-bubble.js'; - -import type {ChatMessage} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat-message': AlwatrChatMessage; - } -} - -/** - * Alwatr chat message box element. - * - * @attr self - */ -@customElement('alwatr-chat-message') -export class AlwatrChatMessage extends DirectionMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: flex; - align-items: flex-end; - gap: var(--sys-spacing-track); - flex-direction: row; - justify-content: flex-start; - align-self: flex-start; - padding-left: 0; - padding-right: calc(6 * var(--sys-spacing-track)); - } - - :host([self]) { - justify-content: flex-end; - align-self: flex-end; - padding-right: 0; - padding-left: calc(9 * var(--sys-spacing-track)); - } - - :host([dir='rtl']) { - padding-right: 0; - padding-left: calc(6 * var(--sys-spacing-track)); - } - - :host([dir='rtl'][self]) { - padding-left: 0; - padding-right: calc(9 * var(--sys-spacing-track)); - } - - :host([self]) alwatr-chat-bubble { - color: var(--sys-color-on-secondary); - background-color: var(--sys-color-secondary); - } - - alwatr-chat-bubble { - max-width: var(--sys-spacing-column-3); - } - `; - - @property({type: Object, attribute: false}) - message?: ChatMessage; - - @property({type: Boolean, attribute: 'self', reflect: true}) - self = false; - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.message == null || this.message.type !== 'text') return nothing; - - const bubble = html``; - - // prettier-ignore - return this.self - ? bubble - : [html``, bubble]; - } -} diff --git a/ui/ui-kit/src/chat/chat-text-input.ts b/ui/ui-kit/src/chat/chat-text-input.ts deleted file mode 100644 index 417611787..000000000 --- a/ui/ui-kit/src/chat/chat-text-input.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { - type PropertyValues, - AlwatrBaseElement, - css, - customElement, - html, - LocalizeMixin, - SignalMixin, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; - -import '../button/icon-button.js'; - -import type {AlwatrStandardIconButton, IconButtonContent} from '../button/icon-button.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat-text-input': AlwatrChatTextInput; - } -} - -/** - * Alwatr chat text input element. - */ -@customElement('alwatr-chat-text-input') -export class AlwatrChatTextInput extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - --_height: calc(6 * var(--sys-spacing-track)); - display: flex; - user-select: none; - align-items: flex-end; - vertical-align: middle; - border-radius: calc(var(--_height) / 2); - color: var(--sys-color-on-surface-variant); - background-color: var(--sys-color-surface-variant); - flex-grow: 1; - } - - alwatr-icon-button { - --_surface-color-on: var(--sys-color-tertiary-hsl); - } - - textarea { - flex-grow: 1; - width: auto; - min-width: auto; - color: inherit; - resize: none; - border: none; - outline: 0; - background-color: transparent; - font-family: inherit; - word-wrap: break-word; - line-height: calc(2 * var(--sys-spacing-track)); - padding: var(--sys-spacing-track); - margin: var(--sys-spacing-track); - margin-inline-end: 0; - } - `; - - inputElement: HTMLTextAreaElement | null = null; - sendButtonElement: AlwatrStandardIconButton | null = null; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` - - - `; - } - - protected override firstUpdated(changedProperties: PropertyValues): void { - super.firstUpdated(changedProperties); - this.inputElement = this.renderRoot.querySelector('textarea'); - this.sendButtonElement = this.renderRoot.querySelector('alwatr-icon-button'); - } - - private __inputChange(event: InputEvent): void { - const textarea = event.target as HTMLTextAreaElement; - const value = textarea.value; - textarea.rows = Math.min(value.split('\n').length, 6); - this.sendButtonElement?.toggleAttribute('disabled', value.length === 0); - } -} diff --git a/ui/ui-kit/src/chat/chat.ts b/ui/ui-kit/src/chat/chat.ts deleted file mode 100644 index 0b716b0a4..000000000 --- a/ui/ui-kit/src/chat/chat.ts +++ /dev/null @@ -1,146 +0,0 @@ -import {customElement, css, html, AlwatrBaseElement, SignalMixin} from '@alwatr/element'; - -import './chat-footer.js'; -import './chat-list.js'; - -import type {ChatStorage} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-chat': AlwatrChat; - } -} - -const currentUser = 'user-1'; - -const chatStorage: ChatStorage = { - ok: true, - meta: { - id: `${currentUser}-chat`, - formatVersion: 4, - lastAutoId: 0, - lastUpdated: Date.now(), - reversion: 100, - }, - data: { - '1': { - id: '1', - from: 'user-1', - type: 'text', - text: 'به یاد اولتر...', - }, - '2': { - id: '2', - from: 'user-2', - type: 'text', - text: - 'با تمام جهل و مستی تصمیم گرفته‌ام دفترچه رزوگار را با پاک کنِ مهر و عطوفت پاک کنم\n' + - 'و از اول با نام تو روزگار را آغاز کنم.', - }, - '3': { - id: '3', - from: 'user-1', - type: 'text', - text: 'هنوز در نخستین صفحات آن مانده‌ام و مطلبی برای نوشتن ندارم.تا پایان نوشتن انتظارت می‌کشم.', - }, - '4': { - id: '4', - from: 'user-4', - type: 'text', - text: 'دیوانه مسلمانی که در روزهای انتظار هزار بار به دیوانگی‌اش ایمان می‌آورد….', - }, - '5': { - id: '5', - from: 'user-1', - type: 'text', - text: 'کودک که بودم پدرم جمعه ها صبح درب خانه را آب و جارو می کرد تا اگر مولا از آن حوالی عبور کند …', - }, - '6': { - id: '6', - from: 'user-2', - type: 'text', - text: 'و نو روز هر باره این حس را در من زنده می کند', - }, - '7': { - id: '7', - from: 'user-2', - type: 'text', - text: 'مردمی را می بینم که سراسر شوق و شورند ، خانه تکانی می کنند و لباس های نو برتن…', - }, - '8': { - id: '8', - from: 'user-2', - type: 'text', - text: 'اما برای چه ؟\nاینان منتظرند تا بهار شود ؟', - }, - '9': { - id: '1', - from: 'user-1', - type: 'text', - text: 'برای که ؟', - }, - '10': { - id: '4', - from: 'user-2', - type: 'text', - text: 'دیوانه مسلمانی که در روزهای انتظار هزار بار به دیوانگی‌اش ایمان می‌آورد….', - }, - '11': { - id: '9', - from: 'user-4', - type: 'text', - text: - 'سالهاست می اندیشم که هنگام بهار مگر چه می شود که اینگونه به هم می ریزیم' + - '،مهربان می شویم، به سراغ هم می رویم و از همه مهمتر منتظر می شویم…', - }, - '12': { - id: '10', - from: 'user-4', - type: 'text', - text: 'انتظار...', - }, - '13': { - id: '1', - from: 'user-1', - type: 'text', - text: 'زیبا بود مرسی', - }, - }, -}; - -/** - * Alwatr Demo Home Page - */ -@customElement('alwatr-chat') -export class AlwatrChat extends SignalMixin(AlwatrBaseElement) { - static override styles = css` - :host { - display: block; - padding-top: var(--sys-spacing-track); - box-sizing: border-box; - position: relative; - } - - alwatr-chat-list { - height: 100%; - color: var(--sys-color-on-surface-variant); - background-color: var(--sys-color-surface-variant); - padding-bottom: calc(12 * var(--sys-spacing-track)); - } - - alwatr-chat-footer { - position: absolute; - bottom: 0; - left: 0; - right: 0; - } - `; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` - - - `; - } -} diff --git a/ui/ui-kit/src/icon/icon.scss b/ui/ui-kit/src/icon/icon.scss deleted file mode 100644 index 9faa451fb..000000000 --- a/ui/ui-kit/src/icon/icon.scss +++ /dev/null @@ -1,21 +0,0 @@ -.alwatr-icon { - display: inline-block; - width: 1em; - height: 1em; - contain: size layout paint style; - box-sizing: content-box; - vertical-align: middle; - - svg { - display: block; - height: 100%; - width: 100%; - stroke: currentcolor; - fill: currentcolor; - } -} - -[dir='rtl'] .alwatr-icon.flip-icon-in-rtl svg, -[dir='rtl'] .flip-icon-in-rtl .alwatr-icon svg { - transform: scaleX(-1); -} diff --git a/ui/ui-kit/src/icon/icon.ts b/ui/ui-kit/src/icon/icon.ts deleted file mode 100644 index 9f1bb3b51..000000000 --- a/ui/ui-kit/src/icon/icon.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {AlwatrDynamicDirective, directive, html, unsafeSVG, type PartInfo} from '@alwatr/fract'; - -import './icon.scss'; - -import type {MaybePromise} from '@alwatr/type'; - -export class AlwatrIconDirective extends AlwatrDynamicDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(svg: MaybePromise, flipIconInRtl = false): unknown { - if (svg instanceof Promise) { - svg.then((_svg) => { - this.setValue(this._render_icon(_svg)); - }); - return this._render_icon(); - } - else { - return this._render_icon(svg, flipIconInRtl ? 'flip-icon-in-rtl' : ''); - } - } - - _render_icon(svg?: string, customClass = ''): unknown { - return html`
    ${svg ? unsafeSVG(svg) : ''}
    `; - } -} - -export const alwatrIcon = directive(AlwatrIconDirective); diff --git a/ui/ui-kit/src/navigation-bar/context.ts b/ui/ui-kit/src/navigation-bar/context.ts deleted file mode 100644 index a7da0c375..000000000 --- a/ui/ui-kit/src/navigation-bar/context.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {AlwatrContextSignal, AlwatrSignal} from '@alwatr/signal2'; - -import type {NavigationBarContent, NavigationBarItemContent} from './navigation-bar.js'; - -export const navigationBarContext = new AlwatrContextSignal({name: 'navigation-bar'}); -export const navigationBarEvent = new AlwatrSignal({name: 'navigation-bar'}); diff --git a/ui/ui-kit/src/navigation-bar/navigation-bar.ts b/ui/ui-kit/src/navigation-bar/navigation-bar.ts deleted file mode 100644 index 7696df811..000000000 --- a/ui/ui-kit/src/navigation-bar/navigation-bar.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { - customElement, - property, - html, - mapIterable, - css, - type PropertyValueMap, -} from '@alwatr/element'; -import {l10n} from '@alwatr/i18n2'; -import {router} from '@alwatr/router2'; -import {MaybePromise} from '@alwatr/type'; - -import {navigationBarContext, navigationBarEvent} from './context.js'; -import {AlwatrSurface} from '../card/surface.js'; -import {alwatrIcon} from '../icon/icon.js'; - -import type {RouteContextBase} from '@alwatr/router2/type.js'; - -export interface NavigationBarItemContent { - id: string; - icon: MaybePromise; - iconFlipRtl?: boolean; - link: RouteContextBase['sectionList']; - label?: string; - // badgeValue: string, -} -export interface NavigationBarContent { - itemList: NavigationBarItemContent[]; -} - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-navigation-bar': AlwatrNavigationBar; - } -} - -/** - * Alwatr Navigation Bar Element. - * - * @attr {String} context-signal - context signal name. - * @attr {String} active-item-id-signal - active item id signal name. - */ -@customElement('alwatr-navigation-bar') -export class AlwatrNavigationBar extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - gap: calc(var(--sys-spacing-track) / 2); - padding: calc(1.5 * var(--sys-spacing-track)) 0 calc(2 * var(--sys-spacing-track)) 0; - color: var(--sys-color-surface); - border-radius: 0; - user-select: none; - z-index: var(--sys-zindex-sticky); - cursor: pointer; - } - - :host > * { - height: 100%; - flex-grow: 1; - text-align: center; - text-decoration: none; - } - - .indicator { - display: inline-block; - } - .item[data-active] .indicator { - background-color: var(--sys-color-secondary-container); - color: var(--sys-color-secondary-container); - border-radius: var(--sys-radius-large); - } - - .alwatr-icon { - padding: calc(var(--sys-spacing-track) / 2) calc(2.5 * var(--sys-spacing-track)); - color: var(--sys-color-on-surface-variant); - font-size: calc(3 * var(--sys-spacing-track)); - } - .item[data-active] .alwatr-icon { - color: var(--sys-color-on-secondary-container); - } - - .label { - margin-top: calc(var(--sys-spacing-track)); - color: var(--sys-color-on-surface-variant); - font-family: var(--sys-typescale-label-medium-font-family-name); - font-weight: var(--sys-typescale-label-medium-font-weight); - font-size: var(--sys-typescale-label-medium-font-size); - letter-spacing: var(--sys-typescale-label-medium-letter-spacing); - line-height: var(--sys-typescale-label-medium-line-height); - } - .item[data-active] .label { - color: var(--sys-color-on-surface); - } - `, - ]; - - @property() - content?: NavigationBarContent; - - @property() - activeItemId?: string; - - protected override firstUpdated(_changedProperties: PropertyValueMap): void { - super.firstUpdated(_changedProperties); - this.setAttribute('elevated', '2'); - this.setAttribute('tinted', ''); - } - - override connectedCallback(): void { - super.connectedCallback(); - - navigationBarContext.subscribe((context) => { - this.content = context; - }); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return mapIterable(this, this.content?.itemList, this.navigationItem); - } - - protected navigationItem(content: NavigationBarItemContent): unknown { - return html` - -
    - ${alwatrIcon(content.icon)} -
    -
    ${l10n.message(content.label)}
    -
    - `; - } - - protected itemClickHandler(event: MouseEvent): void { - this._logger.logMethod?.('itemClickHandler'); - const target = event.currentTarget as HTMLDivElement; - const id = target.getAttribute('data-id'); - if (id == null) return; - - this.activeItemId = id; - navigationBarEvent.notify(this.content!.itemList.find((item) => item.id === id)!); - } -} diff --git a/ui/ui-kit/src/navigation-bar2/navigation-bar.scss b/ui/ui-kit/src/navigation-bar2/navigation-bar.scss deleted file mode 100644 index da73ca7e6..000000000 --- a/ui/ui-kit/src/navigation-bar2/navigation-bar.scss +++ /dev/null @@ -1,23 +0,0 @@ -.navigation-bar { - display: flex; - justify-content: space-between; - align-items: center; - gap: calc(var(--sys-spacing-track) / 2); - padding: calc(1.5 * var(--sys-spacing-track)) 0 calc(2 * var(--sys-spacing-track)) 0; - color: var(--sys-color-on-surface-variant); - user-select: none; - - a { - display: block; - height: 100%; - flex-grow: 1; - text-align: center; - text-decoration: none; - color: inherit; - } - - .alwatr-icon { - padding: calc(var(--sys-spacing-track) / 2) calc(2.5 * var(--sys-spacing-track)); - font-size: calc(3 * var(--sys-spacing-track)); - } -} diff --git a/ui/ui-kit/src/navigation-bar2/navigation-bar.ts b/ui/ui-kit/src/navigation-bar2/navigation-bar.ts deleted file mode 100644 index 72ba44760..000000000 --- a/ui/ui-kit/src/navigation-bar2/navigation-bar.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {AlwatrDirective, directive, html, noChange, map, ifDefined, type PartInfo, nothing} from '@alwatr/fract'; -import {l10n} from '@alwatr/i18n2'; - -import './navigation-bar.scss'; -import {alwatrIcon} from '../icon/icon.js'; - -import type {NavigationBarContent, NavigationBarItem} from './type.js'; - -export class AlwatrNavigationBarDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(content?: NavigationBarContent | null): unknown { - this._logger.logMethodArgs?.('render', content); - - if (content == null) { - this._logger.incident?.('render', 'invalid_content', 'content not defined'); - return noChange; - } - - return html``; - } - - protected _render_nav_item(item: NavigationBarItem): unknown { - return html` - ${alwatrIcon(item.icon, item.flipIconInRtl)} - ${this._render_label(item)} - `; - } - - protected _render_label(item: NavigationBarItem): unknown { - if (item.label === undefined && item.labelKey === undefined) return nothing; - const label = item.label || l10n.message(item.labelKey); - return html`
    ${label}
    `; - } -} - -export const alwatrNavigationBar = directive(AlwatrNavigationBarDirective); diff --git a/ui/ui-kit/src/navigation-bar2/type.ts b/ui/ui-kit/src/navigation-bar2/type.ts deleted file mode 100644 index 6459e8d64..000000000 --- a/ui/ui-kit/src/navigation-bar2/type.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type {MaybePromise} from '@alwatr/type'; - -export interface NavigationBarItem { - icon: MaybePromise; - - /** - * @default ```false``` - */ - flipIconInRtl?: boolean; - - label?: string; - - labelKey?: string; - - href?: string; -} - -export interface NavigationBarContent { - itemList: NavigationBarItem[]; -} diff --git a/ui/ui-kit/src/radio-group/radio-group.ts b/ui/ui-kit/src/radio-group/radio-group.ts deleted file mode 100644 index 0d0fdb9ba..000000000 --- a/ui/ui-kit/src/radio-group/radio-group.ts +++ /dev/null @@ -1,117 +0,0 @@ -import {customElement, css, html, map, AlwatrBaseElement, property, nothing, live} from '@alwatr/element'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-radio-group': AlwatrRadioGroup; - } -} - -export interface RadioOption {label: string; value: string} - -export interface RadioGroupOptions { - title: string; - radioGroup: RadioOption[]; -} - -/** - * Alwatr fieldset element - * - * @attr {String} name - */ -@customElement('alwatr-radio-group') -export class AlwatrRadioGroup extends AlwatrBaseElement { - static override styles = css` - :host { - display: block; - transition: opacity var(--sys-motion-duration-small) var(--sys-motion-easing-normal); - } - fieldset { - display: block; - padding: var(--sys-spacing-track) calc(2 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-body-large-font-family-name); - font-weight: var(--sys-typescale-body-large-font-weight); - font-size: var(--sys-typescale-body-large-font-size); - letter-spacing: var(--sys-typescale-body-large-letter-spacing); - line-height: var(--sys-typescale-body-large-line-height); - border: 1px solid var(--sys-color-outline); - border-radius: var(--sys-radius-small); - background-color: transparent; - margin: var(--sys-spacing-track) 0 0; - } - - fieldset:active, - fieldset:focus, - fieldset:focus-within { - border-color: var(--sys-color-primary); - } - - fieldset legend { - padding: 0 var(--sys-spacing-track); - } - - fieldset div { - margin-top: var(--sys-spacing-track); - } - fieldset div:first-of-type { - margin-top: 0; - } - - fieldset label, - input[type='radio'] { - display: inline-block; - vertical-align: middle; - margin: 0; - } - - input[type='radio'] { - width: 20px; - height: 20px; - accent-color: var(--sys-color-primary); - } - `; - - @property({type: Object}) - name = 'unknown'; - - @property({type: Object}) - options?: RadioGroupOptions; - - @property({type: String}) - value?: string; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` -
    - ${this.options?.title} - ${this._optionsTemplate()} -
    - `; - } - - protected _optionsTemplate(): unknown { - const options = this.options; - if (options == null) return nothing; - return map(options.radioGroup, (radioItem, index) => { - const id: string = 'radioInput_' + index; - return html`
    - - -
    `; - }); - } - - private _inputChanged(event: Event): void { - const target = event.target as HTMLInputElement; - if (target == null) return; - this.value = target.value; - this.dispatchEvent(new CustomEvent('input-change')); - } -} diff --git a/ui/ui-kit/src/snackbar/controller.ts b/ui/ui-kit/src/snackbar/controller.ts deleted file mode 100644 index 061fe7d2f..000000000 --- a/ui/ui-kit/src/snackbar/controller.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {message} from '@alwatr/i18n'; -import {createLogger} from '@alwatr/logger'; -import {clamp} from '@alwatr/math'; -import {commandHandler} from '@alwatr/signal'; - -import './element.js'; - -import type {SnackbarOptions, SnackbarResponse} from './type.js'; - -const logger = createLogger('alwatr-snackbar-controller'); -const paintDelay = 60; -let closeLastSnackbar: ((response: SnackbarResponse) => void) | null = null; - -commandHandler.define('show-snackbar-command', (options) => { - if (options.duration === -1 && !options.actionLabel) delete options.duration; - logger.logMethodArgs?.('showSnackbar', options); - return new Promise((resolve) => { - const element = document.body.appendChild(document.createElement('alwatr-snackbar')); - - let closed = false; - const _closeSnackbar = (response: SnackbarResponse): void => { - if (closed) return; - if (!response.actionButton && options.duration === -1) return; // keep it! - logger.logMethodArgs?.('closeSnackbar', response); - closed = true; - closeLastSnackbar = null; - element.open = false; - resolve(response); - setTimeout(() => { - element.remove(); - }, 500); - }; - - element.message = options.messageKey != null ? message(options.messageKey) : options.message; - if (options.actionLabel || options.actionLabelKey) { - element.actionLabel = options.actionLabelKey != null ? message(options.actionLabelKey) : options.actionLabel; - element.addEventListener('action-button-click', () => _closeSnackbar?.({actionButton: true}), {once: true}); - } - - setTimeout(() => { - element.open = true; - closeLastSnackbar?.({}); - closeLastSnackbar = _closeSnackbar; - if (options.duration !== -1) { - setTimeout(() => _closeSnackbar?.({}), clamp(options.duration ?? 5_000, 4_000, 10_000)); - } - }, paintDelay); - }); -}); diff --git a/ui/ui-kit/src/snackbar/element.ts b/ui/ui-kit/src/snackbar/element.ts deleted file mode 100644 index f9dd91fc4..000000000 --- a/ui/ui-kit/src/snackbar/element.ts +++ /dev/null @@ -1,135 +0,0 @@ -import {html, css, customElement, property, when} from '@alwatr/element'; -import {untilEvent} from '@alwatr/util'; - -import '../button/button.js'; -import {AlwatrSurface} from '../card/surface.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-snackbar': AlwatrSnackbar; - } - - interface HTMLElementEventMap { - 'action-button-click': CustomEvent; - } -} - -/** - * Alwatr snackbar (toast) ui element. - */ -@customElement('alwatr-snackbar') -export class AlwatrSnackbar extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - --_surface-color-on: var(--sys-color-inverse-on-surface-hsl); - --_surface-color-bg: var(--sys-color-inverse-surface-hsl); - - display: flex; - align-items: center; - padding: calc(0.5 * var(--sys-spacing-track)) var(--sys-spacing-track); - gap: var(--sys-spacing-track); - position: fixed; - bottom: calc(2 * var(--sys-spacing-track)); - left: var(--sys-spacing-track); - right: var(--sys-spacing-track); - z-index: var(--sys-zindex-snackbar); - border-radius: var(--sys-radius-xsmall); - - box-sizing: border-box; - min-height: calc(6 * var(--sys-spacing-track)); - max-width: calc(var(--sys-breakpoint-handset) - 8 * var(--sys-spacing-track)); - /* margin: 0 auto; */ - - font-family: var(--sys-typescale-body-medium-font-family-name); - font-weight: var(--sys-typescale-body-medium-font-weight); - font-size: var(--sys-typescale-body-medium-font-size); - letter-spacing: var(--sys-typescale-body-medium-letter-spacing); - line-height: var(--sys-typescale-body-medium-line-height); - user-select: none; - - /* close state */ - opacity: 0; - transform: translateY(200%) scale(1); - pointer-events: none; - transition-property: opacity, transform; - transition-duration: var(--sys-motion-duration-medium-out); - transition-timing-function: var(--sys-motion-easing-exiting); - /* will-change: opacity, transform; */ - } - - :host([opened]) { - opacity: 1; - transform: translateY(0px) scale(1); - pointer-events: auto; - transition-duration: var(--sys-motion-duration-medium); - transition-timing-function: var(--sys-motion-easing-incoming); - } - - :host([closing]) { - transform: translateY(0px) scale(0.94); - } - - .message { - padding: 0 var(--sys-spacing-track); - flex-grow: 1; - flex-shrink: 1; - white-space: pre-line; - } - - alwatr-button { - --_surface-color-on: var(--sys-color-inverse-primary-hsl); - flex-grow: 0; - flex-shrink: 0; - align-self: flex-end; - } - `, - ]; - - private _opened = false; - set open(open: boolean) { - this._logger.logProperty?.('open', open); - if (this._opened === open) return; - this._opened = open; - this.updateComplete.then(async () => { - if (this._opened !== open) return; - this.toggleAttribute('opened', open); - this.toggleAttribute('closing', !open); - if (!open) { - await untilEvent(this, 'transitionend'); - this.removeAttribute('closing'); - } - }); - } - get open(): boolean { - return this._opened; - } - - @property({type: String}) - message?: string; - - @property({type: String}) - actionLabel?: string; - - override connectedCallback(): void { - super.connectedCallback(); - this.setAttribute('elevated', '3'); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return html`${this.message}${when( - this.actionLabel, - () => - html``, - )}`; - } - - protected _actionButtonClick(): void { - this.dispatchEvent(new CustomEvent('action-button-click')); - } -} diff --git a/ui/ui-kit/src/snackbar/show-snackbar.ts b/ui/ui-kit/src/snackbar/show-snackbar.ts deleted file mode 100644 index d9b4e23a4..000000000 --- a/ui/ui-kit/src/snackbar/show-snackbar.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {commandTrigger} from '@alwatr/signal'; - -import type {SnackbarOptions, SnackbarResponse} from './type.js'; - -/** - * Show snackbar with optional action. - * - * Example: - * - * Simple toast: - * ```ts - * snackbarSignalTrigger.request({message: 'Form submitted successfully.'}); - * ``` - * - * With action label: - * ```ts - * const response = await snackbarSignalTrigger.requestWithResponse({ - * message: 'Email archived.', - * actionLabel: 'Undo', - * }); - * if (response.actionClicked) { - * // undo... - * } - * ``` - */ -export const snackbarSignalTrigger = commandTrigger.bind('show-snackbar-command'); diff --git a/ui/ui-kit/src/snackbar/type.ts b/ui/ui-kit/src/snackbar/type.ts deleted file mode 100644 index 801882282..000000000 --- a/ui/ui-kit/src/snackbar/type.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {StringifyableRecord} from '@alwatr/type'; - -export interface SnackbarOptions extends StringifyableRecord { - /** - * Snackbar message. - */ - message?: string; - - /** - * Snackbar L10n message. - */ - messageKey?: string; - - /** - * Snackbar action button label text. - */ - actionLabel?: string; - - /** - * Snackbar action button label L10n key. - */ - actionLabelKey?: string; - - /** - * Snackbar automatically disappear from the screen after a minimum of 4,000ms, and a maximum of 10,000ms. - * - * If duration is `-1` and `actionLabel` defined, snackbar remain until action button clicked. - * - * @default 5_000 - */ - duration?: number; -} - -export interface SnackbarResponse extends StringifyableRecord { - actionButton?: true; -} diff --git a/ui/ui-kit/src/text-field/text-field.ts b/ui/ui-kit/src/text-field/text-field.ts deleted file mode 100644 index f89647416..000000000 --- a/ui/ui-kit/src/text-field/text-field.ts +++ /dev/null @@ -1,191 +0,0 @@ -import {css, customElement, html, property, live, type PropertyValues} from '@alwatr/element'; -import '@alwatr/icon'; -import {UnicodeDigits} from '@alwatr/math'; - -import {AlwatrSurface} from '../card/surface.js'; - -const unicodeDigits = new UnicodeDigits('en'); - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-text-field': AlwatrTextField; - } -} - -export type InputType = - | 'text' - | 'textarea' - | 'search' - | 'tel' - | 'url' - | 'email' - | 'password' - | 'datetime' - | 'date' - | 'month' - | 'week' - | 'time' - | 'datetime-local' - | 'number'; - -/** - * Alwatr outlined text field. - * - * @attr {String} name - */ -@customElement('alwatr-text-field') -export class AlwatrTextField extends AlwatrSurface { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - --_surface-color-on: var(--sys-color-on-surface-variant-hsl); - display: inline-block; - box-sizing: border-box; - padding: var(--sys-spacing-track) calc(2 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-body-large-font-family-name); - font-weight: var(--sys-typescale-body-large-font-weight); - font-size: var(--sys-typescale-body-large-font-size); - letter-spacing: var(--sys-typescale-body-large-letter-spacing); - line-height: var(--sys-typescale-body-large-line-height); - border-radius: var(--sys-radius-xsmall); - background-color: transparent; - } - - :host([stated][outlined]:hover) { - --_surface-elevation: var(--sys-surface-elevation-0); - } - - input, - textarea { - display: block; - padding: 0; - font: inherit; - width: 100%; - box-sizing: border-box; - border-radius: inherit; - border: none; - outline: transparent; - resize: none; - text-align: inherit; - background-color: transparent; - color: var(--sys-color-on-surface); - caret-color: var(--sys-color-primary); - } - - input[type='number'] { - -moz-appearance: textfield; - } - - input::-webkit-outer-spin-button, - input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } - - /* So not group these selectors! */ - input::placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - input::-webkit-input-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - input::-moz-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - textarea::placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - textarea::-webkit-input-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - textarea::-moz-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - `, - ]; - - @property({type: Object}) - name = 'unknown'; - - @property({type: String}) - type: InputType = 'text'; - - @property({type: Boolean}) - readonly = false; - - @property({type: String}) - value = ''; - - @property({type: String}) - placeholder = ''; - - inputElement: HTMLInputElement | HTMLTextAreaElement | null = null; - - constructor() { - super(); - this._inputChanged = this._inputChanged.bind(this); - } - - override connectedCallback(): void { - super.connectedCallback(); - this.addEventListener('click', this._click); - } - - override disconnectedCallback(): void { - super.disconnectedCallback(); - this.removeEventListener('click', this._click); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - this.value ??= ''; - - if (this.type === 'textarea') { - return html``; - } - // else - return html``; - } - - protected override firstUpdated(changedProperties: PropertyValues): void { - super.firstUpdated(changedProperties); - this.inputElement = this.renderRoot.querySelector('input, textarea'); - } - - protected _click(): void { - this.inputElement?.focus(); - } - - private _inputChanged(event: Event): void { - this._logger.logMethod?.('_inputChanged'); - const target = event.target as HTMLInputElement | HTMLTextAreaElement; - if (target == null) return; - let inputValue = unicodeDigits.translate(target.value ?? ''); - if (this.type === 'number' || this.type === 'tel') { - inputValue = inputValue.replaceAll(' ', ''); - } - this.value = inputValue; - this.dispatchEvent(new CustomEvent('input-change')); - } -} diff --git a/ui/ui-kit/src/top-app-bar/top-app-bar.ts b/ui/ui-kit/src/top-app-bar/top-app-bar.ts deleted file mode 100644 index fe0421684..000000000 --- a/ui/ui-kit/src/top-app-bar/top-app-bar.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { - css, - html, - customElement, - property, - nothing, - map, - DirectionMixin, - SignalMixin, - LocalizeMixin, - type PropertyValues, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import {contextConsumer} from '@alwatr/signal'; - -import '../button/icon-button.js'; -import {AlwatrSurface} from '../card/surface.js'; - -import type {IconButtonContent} from '../button/icon-button.js'; -import type {StringifyableRecord} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-top-app-bar': AlwatrTopAppBar; - } -} - -export interface TopAppBarContent extends StringifyableRecord { - /** - * @default ```'small'``` - */ - type?: 'center' | 'small' | 'medium' | 'large'; - /** - * @default ```""``` - */ - headline?: string; - /** - * @default ```'loading'``` - */ - headlineKey?: string; - /** - * @default ```{icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back-click-event'}``` - */ - startIcon?: IconButtonContent; - /** - * @default ```[]``` - */ - endIconList?: IconButtonContent[]; - /** - * @default ```2``` - */ - tinted?: number; - /** - * @default ```0``` - */ - elevated?: number; -} - -/** - * Alwatr top app bar. - * - * @attr {center|small|medium|large} [type=small] - * @attr {String} context-signal - context signal name - */ -@customElement('alwatr-top-app-bar') -export class AlwatrTopAppBar extends LocalizeMixin(DirectionMixin(SignalMixin(AlwatrSurface))) { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - display: block; - flex-grow: 0; - flex-shrink: 0; - padding: var(--sys-spacing-track) calc(0.5 * var(--sys-spacing-track)); - z-index: var(--sys-zindex-sticky); - border-radius: 0; - user-select: none; - } - - .row { - display: flex; - } - - .leading-icon { - --comp-icon-button-color-hsl: var(--sys-color-on-surface-hsl); - } - - .trailing-icons { - --comp-icon-button-color-hsl: var(--sys-color-on-surface-variant-hsl); - } - - .title { - flex-grow: 1; - } - - :host([type=small]) .title, - :host([type=center]) .title { - padding: 0 calc(0.5 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-title-large-font-family-name); - font-weight: var(--sys-typescale-title-large-font-weight); - font-size: var(--sys-typescale-title-large-font-size); - letter-spacing: var(--sys-typescale-title-large-letter-spacing); - /* line-height: var(--sys-typescale-title-large-line-height); */ - line-height: calc(6 * var(--sys-spacing-track)); - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - overflow: clip; - } - - :host([dir=rtl][type=small]) .title, - :host([dir=rtl][type=center]) .title { - line-height: calc(6 * var(--sys-spacing-track) - 0.18em); /* 0.5 * track / title-line-height */ - } - - :host([type=center]) .title { - text-align: center; - } - - .headline { /* medium | large */ - display: none; - } - - :host([type=medium]) { - padding-bottom: calc(3 * var(--sys-spacing-track)); - } - :host([type=large]) { - padding-bottom: calc(3.5 * var(--sys-spacing-track)); - } - - :host([type=medium]) .headline, - :host([type=large]) .headline { - display: block; - padding: 0 calc(1.5 * var(--sys-spacing-track)); - } - - :host([type=medium]) .headline { - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - } - - :host([type=large]) .headline { - margin-top: calc(4 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-headline-medium-font-family-name); - font-weight: var(--sys-typescale-headline-medium-font-weight); - font-size: var(--sys-typescale-headline-medium-font-size); - letter-spacing: var(--sys-typescale-headline-medium-letter-spacing); - line-height: var(--sys-typescale-headline-medium-line-height); - } - `, - ]; - - @property({type: Object, attribute: false}) - content: Required = { - type: 'center', - headline: '', - headlineKey: 'loading', - startIcon: {icon: ''}, - endIconList: [], - tinted: 2, - elevated: 0, - }; - - override connectedCallback(): void { - super.connectedCallback(); - const contextSignal = this.getAttribute('context-signal'); - if (contextSignal) { - this._addSignalListeners( - contextConsumer.subscribe(contextSignal, (context) => { - this.content = { - type: 'small', - headline: '', - headlineKey: 'loading', - startIcon: {icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back-click-event'}, - endIconList: [], - tinted: 2, - elevated: 0, - ...context, - }; - this.requestUpdate(); // Ensure update on child properties changes. - }, - {receivePrevious: 'NextCycle'}), - ); - } - } - - protected override shouldUpdate(changedProperties: PropertyValues): boolean { - return super.shouldUpdate(changedProperties) && this.content != null; - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('content') && this.content != null) { - if (this.content.elevated != null && this.content.elevated > 0) { - this.setAttribute('elevated', this.content.elevated + ''); - } - else { - this.removeAttribute('elevated'); - } - if (this.content.tinted != null && this.content.tinted > 0) { - this.setAttribute('tinted', this.content.tinted + ''); - } - else { - this.removeAttribute('tinted'); - } - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.content == null) return nothing; - - this.setAttribute('type', this.content.type); - - const headline = this.content.headline || message(this.content.headlineKey); - const headlineTemplate = this.content.type === 'medium' || this.content.type === 'large' ? headline : nothing; - const titleTemplate = this.content.type === 'center' || this.content.type === 'small' ? headline : nothing; - - return html` -
    - -
    ${titleTemplate}
    - ${map(this.content.endIconList, (iconContent) => html` - - `)} -
    -
    ${headlineTemplate}
    - `; - } -} - -/* - TODO: - 1. - https://m3.material.io/components/top-app-bar/specs -*/ diff --git a/ui/ui-kit/src/top-app-bar2/top-app-bar.scss b/ui/ui-kit/src/top-app-bar2/top-app-bar.scss deleted file mode 100644 index 04f2bae8b..000000000 --- a/ui/ui-kit/src/top-app-bar2/top-app-bar.scss +++ /dev/null @@ -1,82 +0,0 @@ -.alwatr-top-app-bar { - flex-grow: 0; - flex-shrink: 0; - padding: var(--sys-spacing-track) calc(0.5 * var(--sys-spacing-track)); - z-index: var(--sys-zindex-sticky); - border-radius: 0; - user-select: none; - - .alwatr-row { - display: flex; - } - - .leading-icon { - --comp-icon-button-color-hsl: var(--sys-color-on-surface-hsl); - } - - .trailing-icons { - --comp-icon-button-color-hsl: var(--sys-color-on-surface-variant-hsl); - } - - .title { - flex-grow: 1; - } - - &[type=small] .title, - &[type=center] .title { - padding: 0 calc(0.5 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-title-large-font-family-name); - font-weight: var(--sys-typescale-title-large-font-weight); - font-size: var(--sys-typescale-title-large-font-size); - letter-spacing: var(--sys-typescale-title-large-letter-spacing); - /* line-height: var(--sys-typescale-title-large-line-height); */ - line-height: calc(6 * var(--sys-spacing-track)); - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - overflow: clip; - } - - &[dir=rtl][type=small] .title, - &[dir=rtl][type=center] .title { - line-height: calc(6 * var(--sys-spacing-track) - 0.18em); /* 0.5 * track / title-line-height */ - } - - &[type=center] .title { - text-align: center; - } - - .headline { /* medium | large */ - display: none; - } - - &[type=medium] { - padding-bottom: calc(3 * var(--sys-spacing-track)); - } - &[type=large] { - padding-bottom: calc(3.5 * var(--sys-spacing-track)); - } - - &[type=medium] .headline, - &[type=large] .headline { - display: block; - padding: 0 calc(1.5 * var(--sys-spacing-track)); - } - - &[type=medium] .headline { - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - } - - &[type=large] .headline { - margin-top: calc(4 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-headline-medium-font-family-name); - font-weight: var(--sys-typescale-headline-medium-font-weight); - font-size: var(--sys-typescale-headline-medium-font-size); - letter-spacing: var(--sys-typescale-headline-medium-letter-spacing); - line-height: var(--sys-typescale-headline-medium-line-height); - } -} diff --git a/ui/ui-kit/src/top-app-bar2/top-app-bar.ts b/ui/ui-kit/src/top-app-bar2/top-app-bar.ts deleted file mode 100644 index c0f75f71c..000000000 --- a/ui/ui-kit/src/top-app-bar2/top-app-bar.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {AlwatrDirective, directive, html, noChange, nothing, map, type PartInfo} from '@alwatr/fract'; -import {l10n} from '@alwatr/i18n2'; - -import './top-app-bar.scss'; -import '../button/icon-button.js'; - -import type {TopAppBarContent} from './type.js'; - -export class AlwatrTopAppBarDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(content?: TopAppBarContent | null): unknown { - this._logger.logMethodArgs?.('render', content); - - if (content == null) { - this._logger.incident?.('render', 'invalid_content', 'content not defined'); - return noChange; - } - content.type ??= 'small'; - const headline = content.headline || l10n.message(content.headlineKey); - const headlineTemplate = content.type === 'medium' || content.type === 'large' ? headline : nothing; - const titleTemplate = content.type === 'center' || content.type === 'small' ? headline : nothing; - - return html` -
    -
    - -
    ${titleTemplate}
    - ${map(content.endIconList, (iconContent) => html``)} -
    -
    ${headlineTemplate}
    -
    - `; - } -} - -export const alwatrTopAppBar = directive(AlwatrTopAppBarDirective); diff --git a/ui/ui-kit/src/top-app-bar2/type.ts b/ui/ui-kit/src/top-app-bar2/type.ts deleted file mode 100644 index 68c3f9fb2..000000000 --- a/ui/ui-kit/src/top-app-bar2/type.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type {IconButtonContent} from '../button/icon-button.js'; - -export interface TopAppBarContent { - /** - * @default ```'small'``` - */ - type?: 'center' | 'small' | 'medium' | 'large'; - - /** - * @default ```""``` - */ - headline?: string; - - /** - * @default ```'loading'``` - */ - headlineKey?: string; - - /** - * @default ```{icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back-click-event'}``` - */ - startIcon?: IconButtonContent; - - /** - * @default ```[]``` - */ - endIconList?: IconButtonContent[]; - - /** - * @default ```2``` - */ - tinted?: number; - - /** - * @default ```0``` - */ - elevated?: number; -} diff --git a/ui/ui-kit/style/helper/colors.css b/ui/ui-kit/style/helper/colors.css deleted file mode 100644 index 49df998a6..000000000 --- a/ui/ui-kit/style/helper/colors.css +++ /dev/null @@ -1,180 +0,0 @@ -.primary { - background-color: var(--sys-color-primary); -} -.primary-text { - color: var(--sys-color-primary); -} -.on-primary { - background-color: var(--sys-color-on-primary); -} -.on-primary-text { - color: var(--sys-color-on-primary); -} -.primary-container { - background-color: var(--sys-color-primary-container); -} -.primary-container-text { - color: var(--sys-color-primary-container); -} -.on-primary-container { - background-color: var(--sys-color-on-primary-container); -} -.on-primary-container-text { - color: var(--sys-color-on-primary-container); -} -.secondary { - background-color: var(--sys-color-secondary); -} -.secondary-text { - color: var(--sys-color-secondary); -} -.on-secondary { - background-color: var(--sys-color-on-secondary); -} -.on-secondary-text { - color: var(--sys-color-on-secondary); -} -.secondary-container { - background-color: var(--sys-color-secondary-container); -} -.secondary-container-text { - color: var(--sys-color-secondary-container); -} -.on-secondary-container { - background-color: var(--sys-color-on-secondary-container); -} -.on-secondary-container-text { - color: var(--sys-color-on-secondary-container); -} -.tertiary { - background-color: var(--sys-color-tertiary); -} -.tertiary-text { - color: var(--sys-color-tertiary); -} -.on-tertiary { - background-color: var(--sys-color-on-tertiary); -} -.on-tertiary-text { - color: var(--sys-color-on-tertiary); -} -.tertiary-container { - background-color: var(--sys-color-tertiary-container); -} -.tertiary-container-text { - color: var(--sys-color-tertiary-container); -} -.on-tertiary-container { - background-color: var(--sys-color-on-tertiary-container); -} -.on-tertiary-container-text { - color: var(--sys-color-on-tertiary-container); -} -.error { - background-color: var(--sys-color-error); -} -.error-text { - color: var(--sys-color-error); -} -.error-container { - background-color: var(--sys-color-error-container); -} -.error-container-text { - color: var(--sys-color-error-container); -} -.on-error { - background-color: var(--sys-color-on-error); -} -.on-error-text { - color: var(--sys-color-on-error); -} -.on-error-container { - background-color: var(--sys-color-on-error-container); -} -.on-error-container-text { - color: var(--sys-color-on-error-container); -} -.background { - background-color: var(--sys-color-background); -} -.background-text { - color: var(--sys-color-background); -} -.on-background { - background-color: var(--sys-color-on-background); -} -.on-background-text { - color: var(--sys-color-on-background); -} -.surface { - background-color: var(--sys-color-surface); -} -.surface-text { - color: var(--sys-color-surface); -} -.on-surface { - background-color: var(--sys-color-on-surface); -} -.on-surface-text { - color: var(--sys-color-on-surface); -} -.surface-variant { - background-color: var(--sys-color-surface-variant); -} -.surface-variant-text { - color: var(--sys-color-surface-variant); -} -.on-surface-variant { - background-color: var(--sys-color-on-surface-variant); -} -.on-surface-variant-text { - color: var(--sys-color-on-surface-variant); -} -.outline { - background-color: var(--sys-color-outline); -} -.outline-text { - color: var(--sys-color-outline); -} -.inverse-on-surface { - background-color: var(--sys-color-inverse-on-surface); -} -.inverse-on-surface-text { - color: var(--sys-color-inverse-on-surface); -} -.inverse-surface { - background-color: var(--sys-color-inverse-surface); -} -.inverse-surface-text { - color: var(--sys-color-inverse-surface); -} -.inverse-primary { - background-color: var(--sys-color-inverse-primary); -} -.inverse-primary-text { - color: var(--sys-color-inverse-primary); -} -.shadow { - background-color: var(--sys-color-shadow); -} -.shadow-text { - color: var(--sys-color-shadow); -} -.surface-tint { - background-color: var(--sys-color-surface-tint); -} -.surface-tint-text { - color: var(--sys-color-surface-tint); -} -.outline-variant { - background-color: var(--sys-color-outline-variant); -} -.outline-variant-text { - color: var(--sys-color-outline-variant); -} -.scrim { - background-color: var(--sys-color-scrim); -} -.scrim-text { - color: var(--sys-color-scrim); -} diff --git a/ui/ui-kit/style/helper/demo.css b/ui/ui-kit/style/helper/demo.css deleted file mode 100644 index 8e5c45236..000000000 --- a/ui/ui-kit/style/helper/demo.css +++ /dev/null @@ -1,273 +0,0 @@ -body { - padding: calc(2 * var(--sys-spacing-track)); -} - -.container { - display: flex; - gap: calc(2 * var(--sys-spacing-track)); - height: 100%; - overflow-y: auto; -} - -.row { - flex-grow: 1; -} - -.box { - height: calc(6 * var(--sys-spacing-track)); -} - -.row:nth-child(1) .box:nth-child(1) { - background-color: hsl(var(--ref-palette-primary0)); -} -.row:nth-child(1) .box:nth-child(2) { - background-color: hsl(var(--ref-palette-primary10)); -} -.row:nth-child(1) .box:nth-child(3) { - background-color: hsl(var(--ref-palette-primary20)); -} -.row:nth-child(1) .box:nth-child(4) { - background-color: hsl(var(--ref-palette-primary25)); - display: none; -} -.row:nth-child(1) .box:nth-child(5) { - background-color: hsl(var(--ref-palette-primary30)); -} -.row:nth-child(1) .box:nth-child(6) { - background-color: hsl(var(--ref-palette-primary35)); - display: none; -} -.row:nth-child(1) .box:nth-child(7) { - background-color: hsl(var(--ref-palette-primary40)); -} -.row:nth-child(1) .box:nth-child(8) { - background-color: hsl(var(--ref-palette-primary50)); -} -.row:nth-child(1) .box:nth-child(9) { - background-color: hsl(var(--ref-palette-primary60)); -} -.row:nth-child(1) .box:nth-child(10) { - background-color: hsl(var(--ref-palette-primary70)); -} -.row:nth-child(1) .box:nth-child(11) { - background-color: hsl(var(--ref-palette-primary80)); -} -.row:nth-child(1) .box:nth-child(12) { - background-color: hsl(var(--ref-palette-primary90)); -} -.row:nth-child(1) .box:nth-child(13) { - background-color: hsl(var(--ref-palette-primary95)); -} -.row:nth-child(1) .box:nth-child(14) { - background-color: hsl(var(--ref-palette-primary98)); -} -.row:nth-child(1) .box:nth-child(15) { - background-color: hsl(var(--ref-palette-primary99)); -} -.row:nth-child(1) .box:nth-child(16) { - background-color: hsl(var(--ref-palette-primary100)); -} - -.row:nth-child(2) .box:nth-child(1) { - background-color: hsl(var(--ref-palette-secondary0)); -} -.row:nth-child(2) .box:nth-child(2) { - background-color: hsl(var(--ref-palette-secondary10)); -} -.row:nth-child(2) .box:nth-child(3) { - background-color: hsl(var(--ref-palette-secondary20)); -} -.row:nth-child(2) .box:nth-child(4) { - background-color: hsl(var(--ref-palette-secondary25)); - display: none; -} -.row:nth-child(2) .box:nth-child(5) { - background-color: hsl(var(--ref-palette-secondary30)); -} -.row:nth-child(2) .box:nth-child(6) { - background-color: hsl(var(--ref-palette-secondary35)); - display: none; -} -.row:nth-child(2) .box:nth-child(7) { - background-color: hsl(var(--ref-palette-secondary40)); -} -.row:nth-child(2) .box:nth-child(8) { - background-color: hsl(var(--ref-palette-secondary50)); -} -.row:nth-child(2) .box:nth-child(9) { - background-color: hsl(var(--ref-palette-secondary60)); -} -.row:nth-child(2) .box:nth-child(10) { - background-color: hsl(var(--ref-palette-secondary70)); -} -.row:nth-child(2) .box:nth-child(11) { - background-color: hsl(var(--ref-palette-secondary80)); -} -.row:nth-child(2) .box:nth-child(12) { - background-color: hsl(var(--ref-palette-secondary90)); -} -.row:nth-child(2) .box:nth-child(13) { - background-color: hsl(var(--ref-palette-secondary95)); -} -.row:nth-child(2) .box:nth-child(14) { - background-color: hsl(var(--ref-palette-secondary98)); -} -.row:nth-child(2) .box:nth-child(15) { - background-color: hsl(var(--ref-palette-secondary99)); -} -.row:nth-child(2) .box:nth-child(16) { - background-color: hsl(var(--ref-palette-secondary100)); -} - -.row:nth-child(3) .box:nth-child(1) { - background-color: hsl(var(--ref-palette-tertiary0)); -} -.row:nth-child(3) .box:nth-child(2) { - background-color: hsl(var(--ref-palette-tertiary10)); -} -.row:nth-child(3) .box:nth-child(3) { - background-color: hsl(var(--ref-palette-tertiary20)); -} -.row:nth-child(3) .box:nth-child(4) { - background-color: hsl(var(--ref-palette-tertiary25)); - display: none; -} -.row:nth-child(3) .box:nth-child(5) { - background-color: hsl(var(--ref-palette-tertiary30)); -} -.row:nth-child(3) .box:nth-child(6) { - background-color: hsl(var(--ref-palette-tertiary35)); - display: none; -} -.row:nth-child(3) .box:nth-child(7) { - background-color: hsl(var(--ref-palette-tertiary40)); -} -.row:nth-child(3) .box:nth-child(8) { - background-color: hsl(var(--ref-palette-tertiary50)); -} -.row:nth-child(3) .box:nth-child(9) { - background-color: hsl(var(--ref-palette-tertiary60)); -} -.row:nth-child(3) .box:nth-child(10) { - background-color: hsl(var(--ref-palette-tertiary70)); -} -.row:nth-child(3) .box:nth-child(11) { - background-color: hsl(var(--ref-palette-tertiary80)); -} -.row:nth-child(3) .box:nth-child(12) { - background-color: hsl(var(--ref-palette-tertiary90)); -} -.row:nth-child(3) .box:nth-child(13) { - background-color: hsl(var(--ref-palette-tertiary95)); -} -.row:nth-child(3) .box:nth-child(14) { - background-color: hsl(var(--ref-palette-tertiary98)); -} -.row:nth-child(3) .box:nth-child(15) { - background-color: hsl(var(--ref-palette-tertiary99)); -} -.row:nth-child(3) .box:nth-child(16) { - background-color: hsl(var(--ref-palette-tertiary100)); -} - -.row:nth-child(4) .box:nth-child(1) { - background-color: hsl(var(--ref-palette-neutral0)); -} -.row:nth-child(4) .box:nth-child(2) { - background-color: hsl(var(--ref-palette-neutral10)); -} -.row:nth-child(4) .box:nth-child(3) { - background-color: hsl(var(--ref-palette-neutral20)); -} -.row:nth-child(4) .box:nth-child(4) { - background-color: hsl(var(--ref-palette-neutral25)); - display: none; -} -.row:nth-child(4) .box:nth-child(5) { - background-color: hsl(var(--ref-palette-neutral30)); -} -.row:nth-child(4) .box:nth-child(6) { - background-color: hsl(var(--ref-palette-neutral35)); - display: none; -} -.row:nth-child(4) .box:nth-child(7) { - background-color: hsl(var(--ref-palette-neutral40)); -} -.row:nth-child(4) .box:nth-child(8) { - background-color: hsl(var(--ref-palette-neutral50)); -} -.row:nth-child(4) .box:nth-child(9) { - background-color: hsl(var(--ref-palette-neutral60)); -} -.row:nth-child(4) .box:nth-child(10) { - background-color: hsl(var(--ref-palette-neutral70)); -} -.row:nth-child(4) .box:nth-child(11) { - background-color: hsl(var(--ref-palette-neutral80)); -} -.row:nth-child(4) .box:nth-child(12) { - background-color: hsl(var(--ref-palette-neutral90)); -} -.row:nth-child(4) .box:nth-child(13) { - background-color: hsl(var(--ref-palette-neutral95)); -} -.row:nth-child(4) .box:nth-child(14) { - background-color: hsl(var(--ref-palette-neutral98)); -} -.row:nth-child(4) .box:nth-child(15) { - background-color: hsl(var(--ref-palette-neutral99)); -} -.row:nth-child(4) .box:nth-child(16) { - background-color: hsl(var(--ref-palette-neutral100)); -} - -.row:nth-child(5) .box:nth-child(1) { - background-color: hsl(var(--ref-palette-neutral-variant0)); -} -.row:nth-child(5) .box:nth-child(2) { - background-color: hsl(var(--ref-palette-neutral-variant10)); -} -.row:nth-child(5) .box:nth-child(3) { - background-color: hsl(var(--ref-palette-neutral-variant20)); -} -.row:nth-child(5) .box:nth-child(4) { - background-color: hsl(var(--ref-palette-neutral-variant25)); - display: none; -} -.row:nth-child(5) .box:nth-child(5) { - background-color: hsl(var(--ref-palette-neutral-variant30)); -} -.row:nth-child(5) .box:nth-child(6) { - background-color: hsl(var(--ref-palette-neutral-variant35)); - display: none; -} -.row:nth-child(5) .box:nth-child(7) { - background-color: hsl(var(--ref-palette-neutral-variant40)); -} -.row:nth-child(5) .box:nth-child(8) { - background-color: hsl(var(--ref-palette-neutral-variant50)); -} -.row:nth-child(5) .box:nth-child(9) { - background-color: hsl(var(--ref-palette-neutral-variant60)); -} -.row:nth-child(5) .box:nth-child(10) { - background-color: hsl(var(--ref-palette-neutral-variant70)); -} -.row:nth-child(5) .box:nth-child(11) { - background-color: hsl(var(--ref-palette-neutral-variant80)); -} -.row:nth-child(5) .box:nth-child(12) { - background-color: hsl(var(--ref-palette-neutral-variant90)); -} -.row:nth-child(5) .box:nth-child(13) { - background-color: hsl(var(--ref-palette-neutral-variant95)); -} -.row:nth-child(5) .box:nth-child(14) { - background-color: hsl(var(--ref-palette-neutral-variant98)); -} -.row:nth-child(5) .box:nth-child(15) { - background-color: hsl(var(--ref-palette-neutral-variant99)); -} -.row:nth-child(5) .box:nth-child(16) { - background-color: hsl(var(--ref-palette-neutral-variant100)); -} diff --git a/ui/ui-kit/style/helper/elevation-extra.css b/ui/ui-kit/style/helper/elevation-extra.css deleted file mode 100644 index 121c40a38..000000000 --- a/ui/ui-kit/style/helper/elevation-extra.css +++ /dev/null @@ -1,97 +0,0 @@ -:root { - --sys-surface-elevation-6: - 0px 3px 5px -1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 6px 10px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 1px 18px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-7: - 0px 4px 5px -2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 7px 10px 1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 2px 16px 1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-8: - 0px 5px 5px -3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 8px 10px 1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 3px 14px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-9: - 0px 5px 6px -3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 9px 12px 1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 3px 16px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-10: - 0px 6px 6px -3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 10px 14px 1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 4px 18px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-11: - 0px 6px 7px -4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 11px 15px 1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 4px 20px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-12: - 0px 7px 8px -4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 12px 17px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 5px 22px 4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-13: - 0px 7px 8px -4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 13px 19px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 5px 24px 4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-14: - 0px 7px 9px -4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 14px 21px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 5px 26px 4px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-15: - 0px 8px 9px -5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 15px 22px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 6px 28px 5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-16: - 0px 8px 10px -5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 16px 24px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 6px 30px 5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-17: - 0px 8px 11px -5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 17px 26px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 6px 32px 5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-18: - 0px 9px 11px -5px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 18px 28px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 7px 34px 6px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-19: - 0px 9px 12px -6px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 19px 29px 2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 7px 36px 6px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-20: - 0px 10px 13px -6px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 20px 31px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 8px 38px 7px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-21: - 0px 10px 13px -6px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 21px 33px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 8px 40px 7px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-22: - 0px 10px 14px -6px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 22px 35px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 8px 42px 7px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-23: - 0px 11px 14px -7px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 23px 36px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 9px 44px 8px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-24: - 0px 11px 15px -7px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 24px 38px 3px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 9px 46px 8px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; -} diff --git a/ui/ui-kit/style/helper/mdc-grid-temp.css b/ui/ui-kit/style/helper/mdc-grid-temp.css deleted file mode 100644 index 13181ab40..000000000 --- a/ui/ui-kit/style/helper/mdc-grid-temp.css +++ /dev/null @@ -1,718 +0,0 @@ -/** - https://m2.material.io/develop/web/supporting/layout-grid -*/ -:root { - --mdc-layout-grid-margin-desktop: 24px; - --mdc-layout-grid-gutter-desktop: 24px; - --mdc-layout-grid-column-width-desktop: 72px; - --mdc-layout-grid-margin-tablet: 16px; - --mdc-layout-grid-gutter-tablet: 16px; - --mdc-layout-grid-column-width-tablet: 72px; - --mdc-layout-grid-margin-phone: 16px; - --mdc-layout-grid-gutter-phone: 16px; - --mdc-layout-grid-column-width-phone: 72px; -} - -@media (min-width: 840px) { - .mdc-layout-grid { - box-sizing: border-box; - margin: 0 auto; - padding: 24px; - padding: var(--mdc-layout-grid-margin-desktop, 24px); - } -} -@media (min-width: 600px) and (max-width: 839px) { - .mdc-layout-grid { - box-sizing: border-box; - margin: 0 auto; - padding: 16px; - padding: var(--mdc-layout-grid-margin-tablet, 16px); - } -} -@media (max-width: 599px) { - .mdc-layout-grid { - box-sizing: border-box; - margin: 0 auto; - padding: 16px; - padding: var(--mdc-layout-grid-margin-phone, 16px); - } -} - -@media (min-width: 840px) { - .mdc-layout-grid__inner { - display: flex; - flex-flow: row wrap; - align-items: stretch; - margin: -12px; - margin: calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2 * -1); - } - @supports (display: grid) { - .mdc-layout-grid__inner { - display: grid; - margin: 0; - grid-gap: 24px; - grid-gap: var(--mdc-layout-grid-gutter-desktop, 24px); - grid-template-columns: repeat(12, minmax(0, 1fr)); - } - } -} -@media (min-width: 600px) and (max-width: 839px) { - .mdc-layout-grid__inner { - display: flex; - flex-flow: row wrap; - align-items: stretch; - margin: -8px; - margin: calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2 * -1); - } - @supports (display: grid) { - .mdc-layout-grid__inner { - display: grid; - margin: 0; - grid-gap: 16px; - grid-gap: var(--mdc-layout-grid-gutter-tablet, 16px); - grid-template-columns: repeat(8, minmax(0, 1fr)); - } - } -} -@media (max-width: 599px) { - .mdc-layout-grid__inner { - display: flex; - flex-flow: row wrap; - align-items: stretch; - margin: -8px; - margin: calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2 * -1); - } - @supports (display: grid) { - .mdc-layout-grid__inner { - display: grid; - margin: 0; - grid-gap: 16px; - grid-gap: var(--mdc-layout-grid-gutter-phone, 16px); - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - } -} - -@media (min-width: 840px) { - .mdc-layout-grid__cell { - width: calc(33.3333333333% - 24px); - width: calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); - box-sizing: border-box; - margin: 12px; - margin: calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2); - } - @supports (display: grid) { - .mdc-layout-grid__cell { - width: auto; - grid-column-end: span 4; - } - } - @supports (display: grid) { - .mdc-layout-grid__cell { - margin: 0; - } - } - .mdc-layout-grid__cell--span-1, - .mdc-layout-grid__cell--span-1-desktop { - width: calc(8.3333333333% - 24px); - width: calc(8.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-1, - .mdc-layout-grid__cell--span-1-desktop { - width: auto; - grid-column-end: span 1; - } - } - - .mdc-layout-grid__cell--span-2, - .mdc-layout-grid__cell--span-2-desktop { - width: calc(16.6666666667% - 24px); - width: calc(16.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-2, - .mdc-layout-grid__cell--span-2-desktop { - width: auto; - grid-column-end: span 2; - } - } - - .mdc-layout-grid__cell--span-3, - .mdc-layout-grid__cell--span-3-desktop { - width: calc(25% - 24px); - width: calc(25% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-3, - .mdc-layout-grid__cell--span-3-desktop { - width: auto; - grid-column-end: span 3; - } - } - - .mdc-layout-grid__cell--span-4, - .mdc-layout-grid__cell--span-4-desktop { - width: calc(33.3333333333% - 24px); - width: calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-4, - .mdc-layout-grid__cell--span-4-desktop { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-5, - .mdc-layout-grid__cell--span-5-desktop { - width: calc(41.6666666667% - 24px); - width: calc(41.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-5, - .mdc-layout-grid__cell--span-5-desktop { - width: auto; - grid-column-end: span 5; - } - } - - .mdc-layout-grid__cell--span-6, - .mdc-layout-grid__cell--span-6-desktop { - width: calc(50% - 24px); - width: calc(50% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-6, - .mdc-layout-grid__cell--span-6-desktop { - width: auto; - grid-column-end: span 6; - } - } - - .mdc-layout-grid__cell--span-7, - .mdc-layout-grid__cell--span-7-desktop { - width: calc(58.3333333333% - 24px); - width: calc(58.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-7, - .mdc-layout-grid__cell--span-7-desktop { - width: auto; - grid-column-end: span 7; - } - } - - .mdc-layout-grid__cell--span-8, - .mdc-layout-grid__cell--span-8-desktop { - width: calc(66.6666666667% - 24px); - width: calc(66.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-8, - .mdc-layout-grid__cell--span-8-desktop { - width: auto; - grid-column-end: span 8; - } - } - - .mdc-layout-grid__cell--span-9, - .mdc-layout-grid__cell--span-9-desktop { - width: calc(75% - 24px); - width: calc(75% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-9, - .mdc-layout-grid__cell--span-9-desktop { - width: auto; - grid-column-end: span 9; - } - } - - .mdc-layout-grid__cell--span-10, - .mdc-layout-grid__cell--span-10-desktop { - width: calc(83.3333333333% - 24px); - width: calc(83.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-10, - .mdc-layout-grid__cell--span-10-desktop { - width: auto; - grid-column-end: span 10; - } - } - - .mdc-layout-grid__cell--span-11, - .mdc-layout-grid__cell--span-11-desktop { - width: calc(91.6666666667% - 24px); - width: calc(91.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-11, - .mdc-layout-grid__cell--span-11-desktop { - width: auto; - grid-column-end: span 11; - } - } - - .mdc-layout-grid__cell--span-12, - .mdc-layout-grid__cell--span-12-desktop { - width: calc(100% - 24px); - width: calc(100% - var(--mdc-layout-grid-gutter-desktop, 24px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-12, - .mdc-layout-grid__cell--span-12-desktop { - width: auto; - grid-column-end: span 12; - } - } -} -@media (min-width: 600px) and (max-width: 839px) { - .mdc-layout-grid__cell { - width: calc(50% - 16px); - width: calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px)); - box-sizing: border-box; - margin: 8px; - margin: calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2); - } - @supports (display: grid) { - .mdc-layout-grid__cell { - width: auto; - grid-column-end: span 4; - } - } - @supports (display: grid) { - .mdc-layout-grid__cell { - margin: 0; - } - } - .mdc-layout-grid__cell--span-1, - .mdc-layout-grid__cell--span-1-tablet { - width: calc(12.5% - 16px); - width: calc(12.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-1, - .mdc-layout-grid__cell--span-1-tablet { - width: auto; - grid-column-end: span 1; - } - } - - .mdc-layout-grid__cell--span-2, - .mdc-layout-grid__cell--span-2-tablet { - width: calc(25% - 16px); - width: calc(25% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-2, - .mdc-layout-grid__cell--span-2-tablet { - width: auto; - grid-column-end: span 2; - } - } - - .mdc-layout-grid__cell--span-3, - .mdc-layout-grid__cell--span-3-tablet { - width: calc(37.5% - 16px); - width: calc(37.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-3, - .mdc-layout-grid__cell--span-3-tablet { - width: auto; - grid-column-end: span 3; - } - } - - .mdc-layout-grid__cell--span-4, - .mdc-layout-grid__cell--span-4-tablet { - width: calc(50% - 16px); - width: calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-4, - .mdc-layout-grid__cell--span-4-tablet { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-5, - .mdc-layout-grid__cell--span-5-tablet { - width: calc(62.5% - 16px); - width: calc(62.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-5, - .mdc-layout-grid__cell--span-5-tablet { - width: auto; - grid-column-end: span 5; - } - } - - .mdc-layout-grid__cell--span-6, - .mdc-layout-grid__cell--span-6-tablet { - width: calc(75% - 16px); - width: calc(75% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-6, - .mdc-layout-grid__cell--span-6-tablet { - width: auto; - grid-column-end: span 6; - } - } - - .mdc-layout-grid__cell--span-7, - .mdc-layout-grid__cell--span-7-tablet { - width: calc(87.5% - 16px); - width: calc(87.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-7, - .mdc-layout-grid__cell--span-7-tablet { - width: auto; - grid-column-end: span 7; - } - } - - .mdc-layout-grid__cell--span-8, - .mdc-layout-grid__cell--span-8-tablet { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-8, - .mdc-layout-grid__cell--span-8-tablet { - width: auto; - grid-column-end: span 8; - } - } - - .mdc-layout-grid__cell--span-9, - .mdc-layout-grid__cell--span-9-tablet { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-9, - .mdc-layout-grid__cell--span-9-tablet { - width: auto; - grid-column-end: span 8; - } - } - - .mdc-layout-grid__cell--span-10, - .mdc-layout-grid__cell--span-10-tablet { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-10, - .mdc-layout-grid__cell--span-10-tablet { - width: auto; - grid-column-end: span 8; - } - } - - .mdc-layout-grid__cell--span-11, - .mdc-layout-grid__cell--span-11-tablet { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-11, - .mdc-layout-grid__cell--span-11-tablet { - width: auto; - grid-column-end: span 8; - } - } - - .mdc-layout-grid__cell--span-12, - .mdc-layout-grid__cell--span-12-tablet { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-12, - .mdc-layout-grid__cell--span-12-tablet { - width: auto; - grid-column-end: span 8; - } - } -} -@media (max-width: 599px) { - .mdc-layout-grid__cell { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - box-sizing: border-box; - margin: 8px; - margin: calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2); - } - @supports (display: grid) { - .mdc-layout-grid__cell { - width: auto; - grid-column-end: span 4; - } - } - @supports (display: grid) { - .mdc-layout-grid__cell { - margin: 0; - } - } - .mdc-layout-grid__cell--span-1, - .mdc-layout-grid__cell--span-1-phone { - width: calc(25% - 16px); - width: calc(25% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-1, - .mdc-layout-grid__cell--span-1-phone { - width: auto; - grid-column-end: span 1; - } - } - - .mdc-layout-grid__cell--span-2, - .mdc-layout-grid__cell--span-2-phone { - width: calc(50% - 16px); - width: calc(50% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-2, - .mdc-layout-grid__cell--span-2-phone { - width: auto; - grid-column-end: span 2; - } - } - - .mdc-layout-grid__cell--span-3, - .mdc-layout-grid__cell--span-3-phone { - width: calc(75% - 16px); - width: calc(75% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-3, - .mdc-layout-grid__cell--span-3-phone { - width: auto; - grid-column-end: span 3; - } - } - - .mdc-layout-grid__cell--span-4, - .mdc-layout-grid__cell--span-4-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-4, - .mdc-layout-grid__cell--span-4-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-5, - .mdc-layout-grid__cell--span-5-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-5, - .mdc-layout-grid__cell--span-5-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-6, - .mdc-layout-grid__cell--span-6-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-6, - .mdc-layout-grid__cell--span-6-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-7, - .mdc-layout-grid__cell--span-7-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-7, - .mdc-layout-grid__cell--span-7-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-8, - .mdc-layout-grid__cell--span-8-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-8, - .mdc-layout-grid__cell--span-8-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-9, - .mdc-layout-grid__cell--span-9-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-9, - .mdc-layout-grid__cell--span-9-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-10, - .mdc-layout-grid__cell--span-10-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-10, - .mdc-layout-grid__cell--span-10-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-11, - .mdc-layout-grid__cell--span-11-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-11, - .mdc-layout-grid__cell--span-11-phone { - width: auto; - grid-column-end: span 4; - } - } - - .mdc-layout-grid__cell--span-12, - .mdc-layout-grid__cell--span-12-phone { - width: calc(100% - 16px); - width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); - } - @supports (display: grid) { - .mdc-layout-grid__cell--span-12, - .mdc-layout-grid__cell--span-12-phone { - width: auto; - grid-column-end: span 4; - } - } -} -.mdc-layout-grid__cell--order-1 { - order: 1; -} -.mdc-layout-grid__cell--order-2 { - order: 2; -} -.mdc-layout-grid__cell--order-3 { - order: 3; -} -.mdc-layout-grid__cell--order-4 { - order: 4; -} -.mdc-layout-grid__cell--order-5 { - order: 5; -} -.mdc-layout-grid__cell--order-6 { - order: 6; -} -.mdc-layout-grid__cell--order-7 { - order: 7; -} -.mdc-layout-grid__cell--order-8 { - order: 8; -} -.mdc-layout-grid__cell--order-9 { - order: 9; -} -.mdc-layout-grid__cell--order-10 { - order: 10; -} -.mdc-layout-grid__cell--order-11 { - order: 11; -} -.mdc-layout-grid__cell--order-12 { - order: 12; -} -.mdc-layout-grid__cell--align-top { - align-self: flex-start; -} -@supports (display: grid) { - .mdc-layout-grid__cell--align-top { - align-self: start; - } -} -.mdc-layout-grid__cell--align-middle { - align-self: center; -} -.mdc-layout-grid__cell--align-bottom { - align-self: flex-end; -} -@supports (display: grid) { - .mdc-layout-grid__cell--align-bottom { - align-self: end; - } -} - -@media (min-width: 840px) { - .mdc-layout-grid--fixed-column-width { - width: 1176px; - width: calc( - var(--mdc-layout-grid-column-width-desktop, 72px) * 12 + - var(--mdc-layout-grid-gutter-desktop, 24px) * 11 + - var(--mdc-layout-grid-margin-desktop, 24px) * 2 - ); - } -} -@media (min-width: 600px) and (max-width: 839px) { - .mdc-layout-grid--fixed-column-width { - width: 720px; - width: calc( - var(--mdc-layout-grid-column-width-tablet, 72px) * 8 + - var(--mdc-layout-grid-gutter-tablet, 16px) * 7 + - var(--mdc-layout-grid-margin-tablet, 16px) * 2 - ); - } -} -@media (max-width: 599px) { - .mdc-layout-grid--fixed-column-width { - width: 368px; - width: calc( - var(--mdc-layout-grid-column-width-phone, 72px) * 4 + - var(--mdc-layout-grid-gutter-phone, 16px) * 3 + - var(--mdc-layout-grid-margin-phone, 16px) * 2 - ); - } -} - -.mdc-layout-grid--align-left { - margin-right: auto; - margin-left: 0; -} - -.mdc-layout-grid--align-right { - margin-right: 0; - margin-left: auto; -} - -/*# sourceMappingURL=mdc.layout-grid.css.map*/ diff --git a/ui/ui-kit/style/helper/typography.css b/ui/ui-kit/style/helper/typography.css deleted file mode 100644 index f6db49d97..000000000 --- a/ui/ui-kit/style/helper/typography.css +++ /dev/null @@ -1,105 +0,0 @@ -.display-large { - font-family: var(--sys-typescale-display-large-font-family-name); - font-weight: var(--sys-typescale-display-large-font-weight); - font-size: var(--sys-typescale-display-large-font-size); - letter-spacing: var(--sys-typescale-display-large-letter-spacing); - line-height: var(--sys-typescale-display-large-line-height); -} -.display-medium { - font-family: var(--sys-typescale-display-medium-font-family-name); - font-weight: var(--sys-typescale-display-medium-font-weight); - font-size: var(--sys-typescale-display-medium-font-size); - letter-spacing: var(--sys-typescale-display-medium-letter-spacing); - line-height: var(--sys-typescale-display-medium-line-height); -} -.display-small { - font-family: var(--sys-typescale-display-small-font-family-name); - font-weight: var(--sys-typescale-display-small-font-weight); - font-size: var(--sys-typescale-display-small-font-size); - letter-spacing: var(--sys-typescale-display-small-letter-spacing); - line-height: var(--sys-typescale-display-small-line-height); -} -.headline-large { - font-family: var(--sys-typescale-headline-large-font-family-name); - font-weight: var(--sys-typescale-headline-large-font-weight); - font-size: var(--sys-typescale-headline-large-font-size); - letter-spacing: var(--sys-typescale-headline-large-letter-spacing); - line-height: var(--sys-typescale-headline-large-line-height); -} -.headline-medium { - font-family: var(--sys-typescale-headline-medium-font-family-name); - font-weight: var(--sys-typescale-headline-medium-font-weight); - font-size: var(--sys-typescale-headline-medium-font-size); - letter-spacing: var(--sys-typescale-headline-medium-letter-spacing); - line-height: var(--sys-typescale-headline-medium-line-height); -} -.headline-small { - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); -} -.body-large { - font-family: var(--sys-typescale-body-large-font-family-name); - font-weight: var(--sys-typescale-body-large-font-weight); - font-size: var(--sys-typescale-body-large-font-size); - letter-spacing: var(--sys-typescale-body-large-letter-spacing); - line-height: var(--sys-typescale-body-large-line-height); -} -.body-medium { - font-family: var(--sys-typescale-body-medium-font-family-name); - font-weight: var(--sys-typescale-body-medium-font-weight); - font-size: var(--sys-typescale-body-medium-font-size); - letter-spacing: var(--sys-typescale-body-medium-letter-spacing); - line-height: var(--sys-typescale-body-medium-line-height); -} -.body-small { - font-family: var(--sys-typescale-body-small-font-family-name); - font-weight: var(--sys-typescale-body-small-font-weight); - font-size: var(--sys-typescale-body-small-font-size); - letter-spacing: var(--sys-typescale-body-small-letter-spacing); - line-height: var(--sys-typescale-body-small-line-height); -} -.label-large { - font-family: var(--sys-typescale-label-large-font-family-name); - font-weight: var(--sys-typescale-label-large-font-weight); - font-size: var(--sys-typescale-label-large-font-size); - letter-spacing: var(--sys-typescale-label-large-letter-spacing); - line-height: var(--sys-typescale-label-large-line-height); -} -.label-medium { - font-family: var(--sys-typescale-label-medium-font-family-name); - font-weight: var(--sys-typescale-label-medium-font-weight); - font-size: var(--sys-typescale-label-medium-font-size); - letter-spacing: var(--sys-typescale-label-medium-letter-spacing); - line-height: var(--sys-typescale-label-medium-line-height); -} -.label-small { - font-family: var(--sys-typescale-label-small-font-family-name); - font-weight: var(--sys-typescale-label-small-font-weight); - font-size: var(--sys-typescale-label-small-font-size); - letter-spacing: var(--sys-typescale-label-small-letter-spacing); - line-height: var(--sys-typescale-label-small-line-height); -} -.title-large { - font-family: var(--sys-typescale-title-large-font-family-name); - font-weight: var(--sys-typescale-title-large-font-weight); - font-size: var(--sys-typescale-title-large-font-size); - letter-spacing: var(--sys-typescale-title-large-letter-spacing); - line-height: var(--sys-typescale-title-large-line-height); -} -.title-medium { - font-family: var(--sys-typescale-title-medium-font-family-name); - font-weight: var(--sys-typescale-title-medium-font-weight); - font-size: var(--sys-typescale-title-medium-font-size); - letter-spacing: var(--sys-typescale-title-medium-letter-spacing); - line-height: var(--sys-typescale-title-medium-line-height); -} -.title-small { - font-family: var(--sys-typescale-title-small-font-family-name); - font-weight: var(--sys-typescale-title-small-font-weight); - font-size: var(--sys-typescale-title-small-font-size); - letter-spacing: var(--sys-typescale-title-small-letter-spacing); - line-height: var(--sys-typescale-title-small-line-height); -} diff --git a/ui/ui-kit/style/mobile-only.css b/ui/ui-kit/style/mobile-only.css deleted file mode 100644 index 397ae7de7..000000000 --- a/ui/ui-kit/style/mobile-only.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - max-width: var(--sys-breakpoint-handset); - margin: 0 auto; -} diff --git a/ui/ui-kit/style/pwa.css b/ui/ui-kit/style/pwa.css deleted file mode 100644 index 4c0c1d77e..000000000 --- a/ui/ui-kit/style/pwa.css +++ /dev/null @@ -1,77 +0,0 @@ -* { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; -} - -html, -body { - margin: 0; - padding: 0; - width: 100%; - height: 100%; - max-width: 100%; - max-height: 100%; - box-sizing: border-box; -} - -html { - font-size: 62.5%; /* 10px */ - -webkit-text-size-adjust: 100%; - -moz-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - text-size-adjust: 100%; -} - -body { - contain: size layout paint style; - text-rendering: optimizeLegibility; - font-smoothing: antialiased; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - word-wrap: break-word; - text-size-adjust: none; - -webkit-text-size-adjust: none; - -webkit-user-drag: none; - -ms-content-zooming: none; - -ms-touch-action: pan-x pan-y pinch-zoom; - touch-action: pan-x pan-y pinch-zoom; - transform: translateZ(0); - overflow: hidden; - overflow: clip; - overscroll-behavior: contain; - - /* Theme */ - color: var(--sys-color-on-background); - background-color: var(--sys-color-background); - font-family: var(--sys-typescale-body-medium-font-family-name); - font-weight: var(--sys-typescale-body-medium-font-weight); - font-size: var(--sys-typescale-body-medium-font-size); - letter-spacing: var(--sys-typescale-body-medium-letter-spacing); - line-height: var(--sys-typescale-body-medium-line-height); -} - -.noscript { - text-align: center; - font-size: 2rem; - padding: 4rem 2rem; -} - -.noscript p { - margin: 0.5em 0; -} - -body.no-scroll { - overflow: hidden; -} - -[unresolved] { - display: block; - padding: calc(2 * var(--sys-spacing-track)); - text-align: center; - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - /* TODO: skeleton */ -} diff --git a/ui/ui-kit/style/theme/color.css b/ui/ui-kit/style/theme/color.css deleted file mode 100644 index b417ecbab..000000000 --- a/ui/ui-kit/style/theme/color.css +++ /dev/null @@ -1,124 +0,0 @@ -:root { - /* theme light */ - --sys-color-primary-hsl: var(--ref-palette-primary40); - --sys-color-on-primary-hsl: var(--ref-palette-primary100); - --sys-color-primary-container-hsl: var(--ref-palette-primary90); - --sys-color-on-primary-container-hsl: var(--ref-palette-primary10); - - --sys-color-secondary-hsl: var(--ref-palette-secondary40); - --sys-color-on-secondary-hsl: var(--ref-palette-secondary100); - --sys-color-secondary-container-hsl: var(--ref-palette-secondary90); - --sys-color-on-secondary-container-hsl: var(--ref-palette-secondary10); - - --sys-color-tertiary-hsl: var(--ref-palette-tertiary40); - --sys-color-on-tertiary-hsl: var(--ref-palette-tertiary100); - --sys-color-tertiary-container-hsl: var(--ref-palette-tertiary90); - --sys-color-on-tertiary-container-hsl: var(--ref-palette-tertiary10); - - --sys-color-background-hsl: var(--ref-palette-neutral99); - --sys-color-on-background-hsl: var(--ref-palette-neutral10); - - --sys-color-surface-hsl: var(--ref-palette-neutral99); - --sys-color-on-surface-hsl: var(--ref-palette-neutral10); - - --sys-color-surface-variant-hsl: var(--ref-palette-neutral-variant90); - --sys-color-on-surface-variant-hsl: var(--ref-palette-neutral-variant30); - - --sys-color-outline-hsl: var(--ref-palette-neutral-variant50); - --sys-color-outline-variant-hsl: var(--ref-palette-neutral-variant80); - - --sys-color-error-hsl: var(--ref-palette-error40); - --sys-color-error-container-hsl: var(--ref-palette-error90); - --sys-color-on-error-hsl: var(--ref-palette-error100); - --sys-color-on-error-container-hsl: var(--ref-palette-error10); - - --sys-color-inverse-primary-hsl: var(--ref-palette-primary80); - --sys-color-inverse-surface-hsl: var(--ref-palette-neutral20); - --sys-color-inverse-on-surface-hsl: var(--ref-palette-neutral95); - - --sys-color-surface-tint-hsl: var(--sys-color-primary-hsl); - --sys-color-shadow-hsl: var(--ref-palette-neutral0); - --sys-color-scrim-hsl: var(--ref-palette-neutral0); - - /* make colors from hsl vars */ - --sys-color-primary: hsl(var(--sys-color-primary-hsl)); - --sys-color-on-primary: hsl(var(--sys-color-on-primary-hsl)); - --sys-color-primary-container: hsl(var(--sys-color-primary-container-hsl)); - --sys-color-on-primary-container: hsl(var(--sys-color-on-primary-container-hsl)); - - --sys-color-secondary: hsl(var(--sys-color-secondary-hsl)); - --sys-color-on-secondary: hsl(var(--sys-color-on-secondary-hsl)); - --sys-color-secondary-container: hsl(var(--sys-color-secondary-container-hsl)); - --sys-color-on-secondary-container: hsl(var(--sys-color-on-secondary-container-hsl)); - - --sys-color-tertiary: hsl(var(--sys-color-tertiary-hsl)); - --sys-color-on-tertiary: hsl(var(--sys-color-on-tertiary-hsl)); - --sys-color-tertiary-container: hsl(var(--sys-color-tertiary-container-hsl)); - --sys-color-on-tertiary-container: hsl(var(--sys-color-on-tertiary-container-hsl)); - - --sys-color-background: hsl(var(--sys-color-background-hsl)); - --sys-color-on-background: hsl(var(--sys-color-on-background-hsl)); - - --sys-color-surface: hsl(var(--sys-color-surface-hsl)); - --sys-color-on-surface: hsl(var(--sys-color-on-surface-hsl)); - - --sys-color-surface-variant: hsl(var(--sys-color-surface-variant-hsl)); - --sys-color-on-surface-variant: hsl(var(--sys-color-on-surface-variant-hsl)); - - --sys-color-outline: hsl(var(--sys-color-outline-hsl)); - --sys-color-outline-variant: hsl(var(--sys-color-outline-variant-hsl)); - - --sys-color-error: hsl(var(--sys-color-error-hsl)); - --sys-color-error-container: hsl(var(--sys-color-error-container-hsl)); - --sys-color-on-error: hsl(var(--sys-color-on-error-hsl)); - --sys-color-on-error-container: hsl(var(--sys-color-on-error-container-hsl)); - - --sys-color-inverse-primary: hsl(var(--sys-color-inverse-primary-hsl)); - --sys-color-inverse-surface: hsl(var(--sys-color-inverse-surface-hsl)); - --sys-color-inverse-on-surface: hsl(var(--sys-color-inverse-on-surface-hsl)); - - --sys-color-surface-tint: hsl(var(--sys-color-surface-tint-hsl)); - --sys-color-shadow: hsl(var(--sys-color-shadow-hsl)); - --sys-color-scrim: hsl(var(--sys-color-scrim-hsl)); -} - -@media (prefers-color-scheme: dark) { - :root { - /* theme dark */ - --sys-color-primary-hsl: var(--ref-palette-primary80); - --sys-color-on-primary-hsl: var(--ref-palette-primary20); - --sys-color-primary-container-hsl: var(--ref-palette-primary30); - --sys-color-on-primary-container-hsl: var(--ref-palette-primary90); - - --sys-color-secondary-hsl: var(--ref-palette-secondary80); - --sys-color-on-secondary-hsl: var(--ref-palette-secondary20); - --sys-color-secondary-container-hsl: var(--ref-palette-secondary30); - --sys-color-on-secondary-container-hsl: var(--ref-palette-secondary90); - - --sys-color-tertiary-hsl: var(--ref-palette-tertiary80); - --sys-color-on-tertiary-hsl: var(--ref-palette-tertiary20); - --sys-color-tertiary-container-hsl: var(--ref-palette-tertiary30); - --sys-color-on-tertiary-container-hsl: var(--ref-palette-tertiary90); - - --sys-color-background-hsl: var(--ref-palette-neutral10); - --sys-color-on-background-hsl: var(--ref-palette-neutral90); - - --sys-color-surface-hsl: var(--ref-palette-neutral10); - --sys-color-on-surface-hsl: var(--ref-palette-neutral90); - - --sys-color-surface-variant-hsl: var(--ref-palette-neutral-variant30); - --sys-color-on-surface-variant-hsl: var(--ref-palette-neutral-variant80); - - --sys-color-outline-hsl: var(--ref-palette-neutral-variant60); - --sys-color-outline-variant-hsl: var(--ref-palette-neutral-variant30); - - --sys-color-error-hsl: var(--ref-palette-error80); - --sys-color-error-container-hsl: var(--ref-palette-error30); - --sys-color-on-error-hsl: var(--ref-palette-error20); - --sys-color-on-error-container-hsl: var(--ref-palette-error90); - - --sys-color-inverse-primary-hsl: var(--ref-palette-primary40); - --sys-color-inverse-surface-hsl: var(--ref-palette-neutral90); - --sys-color-inverse-on-surface-hsl: var(--ref-palette-neutral20); - } -} diff --git a/ui/ui-kit/style/theme/palette-260.css b/ui/ui-kit/style/theme/palette-260.css deleted file mode 100644 index 3a683a8d2..000000000 --- a/ui/ui-kit/style/theme/palette-260.css +++ /dev/null @@ -1,111 +0,0 @@ -:root { - /* HCT 260 */ - - /* primary */ - --ref-palette-primary0: 0, 0%, 0%; - --ref-palette-primary10: 211.5, 100%, 11.6%; - --ref-palette-primary20: 209.7, 100%, 18.6%; - --ref-palette-primary25: 208.7, 100%, 22.5%; - --ref-palette-primary30: 208.4, 100%, 26.5%; - --ref-palette-primary35: 209.2, 88.9%, 31.8%; - --ref-palette-primary40: 212, 66.8%, 39%; - --ref-palette-primary50: 214.2, 50.8%, 50.6%; - --ref-palette-primary60: 215.2, 65.3%, 61.6%; - --ref-palette-primary70: 215.6, 91.4%, 72.5%; - --ref-palette-primary80: 217.1, 100%, 82.5%; - --ref-palette-primary90: 220, 100%, 91.8%; - --ref-palette-primary95: 222, 100%, 96.1%; - --ref-palette-primary98: 240, 100%, 98.8%; - --ref-palette-primary99: 270, 100%, 99.2%; - --ref-palette-primary100: 0, 0%, 100%; - - /* secondary */ - --ref-palette-secondary0: 0, 0%, 0%; - --ref-palette-secondary10: 216, 41%, 12%; - --ref-palette-secondary20: 216.9, 25%, 20.4%; - --ref-palette-secondary25: 216.9, 20.6%, 24.7%; - --ref-palette-secondary30: 217.8, 18.1%, 29.2%; - --ref-palette-secondary35: 217.8, 15.6%, 33.9%; - --ref-palette-secondary40: 218.6, 14.1%, 38.8%; - --ref-palette-secondary50: 219.3, 11.7%, 48.4%; - --ref-palette-secondary60: 220, 14.3%, 58.8%; - --ref-palette-secondary70: 218.7, 19.7%, 69.2%; - --ref-palette-secondary80: 220.6, 30.7%, 80.2%; - --ref-palette-secondary90: 220.6, 68.9%, 91.2%; - --ref-palette-secondary95: 222, 100%, 96.1%; - --ref-palette-secondary98: 240, 100%, 98.8%; - --ref-palette-secondary99: 270, 100%, 99.2%; - --ref-palette-secondary100: 0, 0%, 100%; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0%, 0%; - --ref-palette-tertiary10: 282.9, 42.4%, 12.9%; - --ref-palette-tertiary20: 282, 27.3%, 21.6%; - --ref-palette-tertiary25: 284, 22.7%, 25.9%; - --ref-palette-tertiary30: 284, 19.2%, 30.6%; - --ref-palette-tertiary35: 284.5, 17.3%, 35.1%; - --ref-palette-tertiary40: 285, 15.7%, 40%; - --ref-palette-tertiary50: 285.9, 13.4%, 49.8%; - --ref-palette-tertiary60: 287.6, 16.7%, 60%; - --ref-palette-tertiary70: 286.7, 24%, 70.6%; - --ref-palette-tertiary80: 287, 38.9%, 81.4%; - --ref-palette-tertiary90: 287.7, 100%, 92.4%; - --ref-palette-tertiary95: 297, 100%, 96.1%; - --ref-palette-tertiary98: 330, 100%, 98.4%; - --ref-palette-tertiary99: 300, 100%, 99.2%; - --ref-palette-tertiary100: 0, 0%, 100%; - - /* neutral */ - --ref-palette-neutral0: 0, 0%, 0%; - --ref-palette-neutral10: 210, 7.1%, 11%; - --ref-palette-neutral20: 225, 4.1%, 19.2%; - --ref-palette-neutral25: 225, 3.3%, 23.5%; - --ref-palette-neutral30: 225, 2.8%, 28.2%; - --ref-palette-neutral35: 228, 3%, 32.7%; - --ref-palette-neutral40: 240, 2.1%, 37.6%; - --ref-palette-neutral50: 225, 1.7%, 47.1%; - --ref-palette-neutral60: 240, 1.8%, 57.3%; - --ref-palette-neutral70: 240, 1.8%, 67.6%; - --ref-palette-neutral80: 255, 3.6%, 78.4%; - --ref-palette-neutral90: 255, 7.4%, 89.4%; - --ref-palette-neutral95: 255, 15.4%, 94.9%; - --ref-palette-neutral98: 255, 50%, 98.4%; - --ref-palette-neutral99: 270, 100%, 99.2%; - --ref-palette-neutral100: 0, 0%, 100%; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0%, 0%; - --ref-palette-neutral-variant10: 216, 17.2%, 11.4%; - --ref-palette-neutral-variant20: 223.6, 10.9%, 19.8%; - --ref-palette-neutral-variant25: 223.6, 8.9%, 24.1%; - --ref-palette-neutral-variant30: 218.2, 7.6%, 28.4%; - --ref-palette-neutral-variant35: 223.6, 6.5%, 33.1%; - --ref-palette-neutral-variant40: 223.6, 5.7%, 37.8%; - --ref-palette-neutral-variant50: 223.6, 4.5%, 47.6%; - --ref-palette-neutral-variant60: 220, 5.6%, 57.6%; - --ref-palette-neutral-variant70: 225, 7.4%, 68.2%; - --ref-palette-neutral-variant80: 229.1, 10.3%, 79%; - --ref-palette-neutral-variant90: 230, 24%, 90.2%; - --ref-palette-neutral-variant95: 230, 54.5%, 95.7%; - --ref-palette-neutral-variant98: 240, 100%, 98.8%; - --ref-palette-neutral-variant99: 270, 100%, 99.2%; - --ref-palette-neutral-variant100: 0, 0%, 100%; - - /* error */ - --ref-palette-error0: 0, 0%, 0%; - --ref-palette-error10: 358.2, 100%, 12.7%; - --ref-palette-error20: 357.1, 100%, 20.6%; - --ref-palette-error25: 356.7, 100%, 24.7%; - --ref-palette-error30: 355.9, 100%, 28.8%; - --ref-palette-error35: 356.6, 92%, 34.3%; - --ref-palette-error40: 0, 75.5%, 41.6%; - --ref-palette-error50: 2.4, 72.5%, 52.9%; - --ref-palette-error60: 3.6, 100%, 64.3%; - --ref-palette-error70: 5.5, 100%, 74.5%; - --ref-palette-error80: 6.4, 100%, 83.5%; - --ref-palette-error90: 5.9, 100%, 92%; - --ref-palette-error95: 8.6, 100%, 95.9%; - --ref-palette-error98: 7.5, 100%, 98.4%; - --ref-palette-error99: 300, 100%, 99.2%; - --ref-palette-error100: 0, 0%, 100%; -} diff --git a/ui/ui-kit/style/theme/palette-270.css b/ui/ui-kit/style/theme/palette-270.css deleted file mode 100644 index 0e3b9160a..000000000 --- a/ui/ui-kit/style/theme/palette-270.css +++ /dev/null @@ -1,111 +0,0 @@ -:root { - /* HCT 260 */ - - /* primary */ - --ref-palette-primary0: 0, 0%, 0%; - --ref-palette-primary10: 218.9, 100%, 13.9%; - --ref-palette-primary20: 216.6, 100%, 22.2%; - --ref-palette-primary25: 217.4, 87.1%, 27.5%; - --ref-palette-primary30: 219.7, 67.3%, 33.5%; - --ref-palette-primary35: 220.9, 56.8%, 39%; - --ref-palette-primary40: 221.8, 49.6%, 44.3%; - --ref-palette-primary50: 222.7, 48.1%, 54.7%; - --ref-palette-primary60: 223, 63.8%, 65.3%; - --ref-palette-primary70: 223.3, 95%, 76.3%; - --ref-palette-primary80: 224.6, 100%, 84.7%; - --ref-palette-primary90: 227, 100%, 92.7%; - --ref-palette-primary95: 232.9, 100%, 96.7%; - --ref-palette-primary98: 257.1, 100%, 98.6%; - --ref-palette-primary99: 285, 100%, 99.2%; - --ref-palette-primary100: 0, 0%, 100%; - - /* secondary */ - --ref-palette-secondary0: 0, 0%, 0%; - --ref-palette-secondary10: 224.3, 35.4%, 12.7%; - --ref-palette-secondary20: 225, 22.2%, 21.2%; - --ref-palette-secondary25: 225, 18.5%, 25.5%; - --ref-palette-secondary30: 225.6, 16.3%, 30%; - --ref-palette-secondary35: 225.6, 14.1%, 34.7%; - --ref-palette-secondary40: 225.6, 12.4%, 39.4%; - --ref-palette-secondary50: 224.4, 10.8%, 49.2%; - --ref-palette-secondary60: 226.7, 13%, 59.4%; - --ref-palette-secondary70: 227.1, 18.4%, 70.2%; - --ref-palette-secondary80: 227.1, 28.6%, 80.8%; - --ref-palette-secondary90: 227.6, 70.7%, 92%; - --ref-palette-secondary95: 232.9, 100%, 96.7%; - --ref-palette-secondary98: 257.1, 100%, 98.6%; - --ref-palette-secondary99: 285, 100%, 99.2%; - --ref-palette-secondary100: 0, 0%, 100%; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0%, 0%; - --ref-palette-tertiary10: 295.4, 41.9%, 12.2%; - --ref-palette-tertiary20: 297.8, 25.7%, 20.6%; - --ref-palette-tertiary25: 300, 21.3%, 24.9%; - --ref-palette-tertiary30: 300, 18.7%, 29.4%; - --ref-palette-tertiary35: 302.1, 16.6%, 34.3%; - --ref-palette-tertiary40: 302, 15%, 39.2%; - --ref-palette-tertiary50: 303.8, 12.8%, 49%; - --ref-palette-tertiary60: 303.5, 16.3%, 59.2%; - --ref-palette-tertiary70: 305, 23.4%, 69.8%; - --ref-palette-tertiary80: 304.9, 37.4%, 80.6%; - --ref-palette-tertiary90: 306.2, 95.1%, 92%; - --ref-palette-tertiary95: 315, 100%, 96.1%; - --ref-palette-tertiary98: 337.5, 100%, 98.4%; - --ref-palette-tertiary99: 300, 100%, 99.2%; - --ref-palette-tertiary100: 0, 0%, 100%; - - /* neutral */ - --ref-palette-neutral0: 0, 0%, 0%; - --ref-palette-neutral10: 240, 6.9%, 11.4%; - --ref-palette-neutral20: 240, 4%, 19.6%; - --ref-palette-neutral25: 240, 3.3%, 23.9%; - --ref-palette-neutral30: 240, 2.8%, 28.2%; - --ref-palette-neutral35: 240, 2.4%, 32.9%; - --ref-palette-neutral40: 240, 2.1%, 37.6%; - --ref-palette-neutral50: 240, 1.2%, 47.3%; - --ref-palette-neutral60: 255, 1.8%, 57.3%; - --ref-palette-neutral70: 264, 3%, 67.6%; - --ref-palette-neutral80: 255, 3.6%, 78.4%; - --ref-palette-neutral90: 270, 7.4%, 89.4%; - --ref-palette-neutral95: 270, 15.4%, 94.9%; - --ref-palette-neutral98: 276, 55.6%, 98.2%; - --ref-palette-neutral99: 285, 100%, 99.2%; - --ref-palette-neutral100: 0, 0%, 100%; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0%, 0%; - --ref-palette-neutral-variant10: 228, 16.7%, 11.8%; - --ref-palette-neutral-variant20: 228, 9.8%, 20%; - --ref-palette-neutral-variant25: 228, 8.1%, 24.3%; - --ref-palette-neutral-variant30: 229.1, 7.5%, 28.8%; - --ref-palette-neutral-variant35: 228, 5.9%, 33.3%; - --ref-palette-neutral-variant40: 229.1, 5.6%, 38.2%; - --ref-palette-neutral-variant50: 229.1, 4.5%, 48%; - --ref-palette-neutral-variant60: 234, 4.7%, 58%; - --ref-palette-neutral-variant70: 234, 6.3%, 68.6%; - --ref-palette-neutral-variant80: 234.5, 10.5%, 79.4%; - --ref-palette-neutral-variant90: 234.5, 22.4%, 90.4%; - --ref-palette-neutral-variant95: 240, 50%, 96.1%; - --ref-palette-neutral-variant98: 257.1, 100%, 98.6%; - --ref-palette-neutral-variant99: 285, 100%, 99.2%; - --ref-palette-neutral-variant100: 0, 0%, 100%; - - /* error */ - --ref-palette-error0: 0, 0%, 0%; - --ref-palette-error10: 358.2, 100%, 12.7%; - --ref-palette-error20: 357.1, 100%, 20.6%; - --ref-palette-error25: 356.7, 100%, 24.7%; - --ref-palette-error30: 355.9, 100%, 28.8%; - --ref-palette-error35: 356.6, 92%, 34.3%; - --ref-palette-error40: 0, 75.5%, 41.6%; - --ref-palette-error50: 2.4, 72.5%, 52.9%; - --ref-palette-error60: 3.6, 100%, 64.3%; - --ref-palette-error70: 5.5, 100%, 74.5%; - --ref-palette-error80: 6.4, 100%, 83.5%; - --ref-palette-error90: 5.9, 100%, 92%; - --ref-palette-error95: 8.6, 100%, 95.9%; - --ref-palette-error98: 7.5, 100%, 98.4%; - --ref-palette-error99: 300, 100%, 99.2%; - --ref-palette-error100: 0, 0%, 100%; -} diff --git a/ui/ui-kit/style/theme/palette-300.css b/ui/ui-kit/style/theme/palette-300.css deleted file mode 100644 index f642c51da..000000000 --- a/ui/ui-kit/style/theme/palette-300.css +++ /dev/null @@ -1,111 +0,0 @@ -:root { - /* HCT 300 */ - - /* primary */ - --ref-palette-primary0: 0, 0%, 0%; - --ref-palette-primary10: 262.8, 100%, 18%; - --ref-palette-primary20: 259.8, 59.4%, 28%; - --ref-palette-primary25: 258.6, 50%, 32.9%; - --ref-palette-primary30: 258.1, 43%, 37.8%; - --ref-palette-primary35: 257.9, 38.5%, 42.7%; - --ref-palette-primary40: 257.6, 35%, 47.6%; - --ref-palette-primary50: 257.9, 40.5%, 57.8%; - --ref-palette-primary60: 257.5, 55.3%, 68.4%; - --ref-palette-primary70: 257.6, 86.8%, 79.2%; - --ref-palette-primary80: 257.9, 100%, 86.9%; - --ref-palette-primary90: 261.2, 100%, 93.3%; - --ref-palette-primary95: 270, 100%, 96.5%; - --ref-palette-primary98: 292.5, 100%, 98.4%; - --ref-palette-primary99: 300, 100%, 99.2%; - --ref-palette-primary100: 0, 0%, 100%; - - /* secondary */ - --ref-palette-secondary0: 0, 0%, 0%; - --ref-palette-secondary10: 256.7, 26.5%, 13.3%; - --ref-palette-secondary20: 258, 18.2%, 21.6%; - --ref-palette-secondary25: 258, 15.2%, 25.9%; - --ref-palette-secondary30: 258, 12.8%, 30.6%; - --ref-palette-secondary35: 260, 11.7%, 35.1%; - --ref-palette-secondary40: 260, 10.3%, 39.8%; - --ref-palette-secondary50: 260.9, 9.1%, 49.6%; - --ref-palette-secondary60: 260.9, 11.2%, 59.8%; - --ref-palette-secondary70: 262.5, 15.8%, 70.2%; - --ref-palette-secondary80: 264, 25.8%, 81%; - --ref-palette-secondary90: 263.1, 65%, 92.2%; - --ref-palette-secondary95: 270, 100%, 96.5%; - --ref-palette-secondary98: 292.5, 100%, 98.4%; - --ref-palette-secondary99: 300, 100%, 99.2%; - --ref-palette-secondary100: 0, 0%, 100%; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0%, 0%; - --ref-palette-tertiary10: 338.2, 50.8%, 12.7%; - --ref-palette-tertiary20: 340.5, 33.3%, 21.8%; - --ref-palette-tertiary25: 341.1, 28.4%, 26.3%; - --ref-palette-tertiary30: 340.5, 25.3%, 31%; - --ref-palette-tertiary35: 341.4, 23.1%, 35.7%; - --ref-palette-tertiary40: 342.3, 21.2%, 40.8%; - --ref-palette-tertiary50: 342.1, 18.7%, 50.8%; - --ref-palette-tertiary60: 343.2, 25.3%, 61.2%; - --ref-palette-tertiary70: 343, 37.1%, 72%; - --ref-palette-tertiary80: 343.9, 65.1%, 83.1%; - --ref-palette-tertiary90: 345.8, 100%, 92.5%; - --ref-palette-tertiary95: 347.4, 100%, 96.3%; - --ref-palette-tertiary98: 0, 100%, 98.6%; - --ref-palette-tertiary99: 300, 100%, 99.2%; - --ref-palette-tertiary100: 0, 0%, 100%; - - /* neutral */ - --ref-palette-neutral0: 0, 0%, 0%; - --ref-palette-neutral10: 260, 5.3%, 11.2%; - --ref-palette-neutral20: 280, 3%, 19.4%; - --ref-palette-neutral25: 280, 2.5%, 23.7%; - --ref-palette-neutral30: 270, 2.8%, 28.2%; - --ref-palette-neutral35: 276, 3%, 32.7%; - --ref-palette-neutral40: 276, 2.6%, 37.5%; - --ref-palette-neutral50: 285, 1.7%, 47.1%; - --ref-palette-neutral60: 288, 2.3%, 57.1%; - --ref-palette-neutral70: 300, 2.4%, 67.5%; - --ref-palette-neutral80: 300, 4.5%, 78.2%; - --ref-palette-neutral90: 300, 9.1%, 89.2%; - --ref-palette-neutral95: 310, 23.1%, 94.9%; - --ref-palette-neutral98: 300, 55.6%, 98.2%; - --ref-palette-neutral99: 300, 100%, 99.2%; - --ref-palette-neutral100: 0, 0%, 100%; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0%, 0%; - --ref-palette-neutral-variant10: 262.5, 13.3%, 11.8%; - --ref-palette-neutral-variant20: 262.5, 7.8%, 20%; - --ref-palette-neutral-variant25: 260, 7.2%, 24.5%; - --ref-palette-neutral-variant30: 266.7, 6.1%, 28.8%; - --ref-palette-neutral-variant35: 266.7, 5.3%, 33.5%; - --ref-palette-neutral-variant40: 266.7, 4.6%, 38.2%; - --ref-palette-neutral-variant50: 270, 4.1%, 47.8%; - --ref-palette-neutral-variant60: 270, 4.7%, 58%; - --ref-palette-neutral-variant70: 272.7, 6.8%, 68.4%; - --ref-palette-neutral-variant80: 272.7, 10.3%, 79%; - --ref-palette-neutral-variant90: 278.2, 21.6%, 90%; - --ref-palette-neutral-variant95: 275, 54.5%, 95.7%; - --ref-palette-neutral-variant98: 292.5, 100%, 98.4%; - --ref-palette-neutral-variant99: 300, 100%, 99.2%; - --ref-palette-neutral-variant100: 0, 0%, 100%; - - /* error */ - --ref-palette-error0: 0, 0%, 0%; - --ref-palette-error10: 358.2, 100%, 12.7%; - --ref-palette-error20: 357.1, 100%, 20.6%; - --ref-palette-error25: 356.7, 100%, 24.7%; - --ref-palette-error30: 355.9, 100%, 28.8%; - --ref-palette-error35: 356.6, 92%, 34.3%; - --ref-palette-error40: 0, 75.5%, 41.6%; - --ref-palette-error50: 2.4, 72.5%, 52.9%; - --ref-palette-error60: 3.6, 100%, 64.3%; - --ref-palette-error70: 5.5, 100%, 74.5%; - --ref-palette-error80: 6.4, 100%, 83.5%; - --ref-palette-error90: 5.9, 100%, 92%; - --ref-palette-error95: 8.6, 100%, 95.9%; - --ref-palette-error98: 7.5, 100%, 98.4%; - --ref-palette-error99: 300, 100%, 99.2%; - --ref-palette-error100: 0, 0%, 100%; -} diff --git a/ui/ui-kit/style/theme/palette-40.css b/ui/ui-kit/style/theme/palette-40.css deleted file mode 100644 index 650abebc8..000000000 --- a/ui/ui-kit/style/theme/palette-40.css +++ /dev/null @@ -1,111 +0,0 @@ -:root { - /* HCT 40 (keep #f06627) */ - - /* primary */ - --ref-palette-primary0: 0, 0%, 0%; - --ref-palette-primary10: 15.3, 100%, 10.8%; - --ref-palette-primary20: 18.7, 100%, 17.6%; - --ref-palette-primary25: 19.4, 100%, 21.2%; - --ref-palette-primary30: 20.3, 100%, 24.9%; - --ref-palette-primary35: 20.8, 100%, 28.8%; - --ref-palette-primary40: 21.3, 100%, 32.5%; - --ref-palette-primary50: 20.4, 89.8%, 42.4%; - --ref-palette-primary60: 18.8, 87%, 54.7%; - --ref-palette-primary70: 17.4, 100%, 68.2%; - --ref-palette-primary80: 16.5, 100%, 80%; - --ref-palette-primary90: 15.9, 100%, 90.4%; - --ref-palette-primary95: 15, 100%, 95.3%; - --ref-palette-primary98: 13.3, 100%, 98.2%; - --ref-palette-primary99: 300, 100%, 99.2%; - --ref-palette-primary100: 0, 0%, 100%; - - /* secondary */ - --ref-palette-secondary0: 0, 0%, 0%; - --ref-palette-secondary10: 17.4, 54.4%, 11.2%; - --ref-palette-secondary20: 16.7, 36%, 19.6%; - --ref-palette-secondary25: 17.4, 31.1%, 23.9%; - --ref-palette-secondary30: 16.5, 27.4%, 28.6%; - --ref-palette-secondary35: 15.7, 24.7%, 33.3%; - --ref-palette-secondary40: 16.4, 22.7%, 38%; - --ref-palette-secondary50: 15.3, 19.2%, 48%; - --ref-palette-secondary60: 16.8, 23.4%, 58%; - --ref-palette-secondary70: 16.7, 33.7%, 68.6%; - --ref-palette-secondary80: 16.1, 53.8%, 79.6%; - --ref-palette-secondary90: 15.9, 100%, 90.4%; - --ref-palette-secondary95: 15, 100%, 95.3%; - --ref-palette-secondary98: 13.3, 100%, 98.2%; - --ref-palette-secondary99: 300, 100%, 99.2%; - --ref-palette-secondary100: 0, 0%, 100%; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0%, 0%; - --ref-palette-tertiary10: 49.1, 100%, 6.5%; - --ref-palette-tertiary20: 50.4, 80.6%, 12.2%; - --ref-palette-tertiary25: 49.6, 61.9%, 16.5%; - --ref-palette-tertiary30: 50.9, 50.5%, 20.6%; - --ref-palette-tertiary35: 49.1, 42.6%, 25.3%; - --ref-palette-tertiary40: 49.3, 36.8%, 29.8%; - --ref-palette-tertiary50: 49, 30%, 39.2%; - --ref-palette-tertiary60: 49.5, 25.3%, 48.8%; - --ref-palette-tertiary70: 48.4, 32.1%, 59%; - --ref-palette-tertiary80: 48.9, 44.9%, 69.4%; - --ref-palette-tertiary90: 48.5, 72.3%, 80.2%; - --ref-palette-tertiary95: 48.2, 100%, 86.1%; - --ref-palette-tertiary98: 41.1, 100%, 96.3%; - --ref-palette-tertiary99: 300, 100%, 99.2%; - --ref-palette-tertiary100: 0, 0%, 100%; - - /* neutral */ - --ref-palette-neutral0: 0, 0%, 0%; - --ref-palette-neutral10: 15, 14.3%, 11%; - --ref-palette-neutral20: 18, 10.2%, 19.2%; - --ref-palette-neutral25: 18, 8.3%, 23.5%; - --ref-palette-neutral30: 16.4, 7.7%, 28%; - --ref-palette-neutral35: 16.4, 6.6%, 32.7%; - --ref-palette-neutral40: 10.9, 5.8%, 37.5%; - --ref-palette-neutral50: 13.8, 5.4%, 47.3%; - --ref-palette-neutral60: 12.9, 6.4%, 57.3%; - --ref-palette-neutral70: 16, 9.1%, 67.6%; - --ref-palette-neutral80: 15, 14.5%, 78.4%; - --ref-palette-neutral90: 14.1, 32.1%, 89.6%; - --ref-palette-neutral95: 14.1, 68%, 95.1%; - --ref-palette-neutral98: 13.3, 100%, 98.2%; - --ref-palette-neutral99: 300, 100%, 99.2%; - --ref-palette-neutral100: 0, 0%, 100%; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0%, 0%; - --ref-palette-neutral-variant10: 17.6, 29.8%, 11.2%; - --ref-palette-neutral-variant20: 15.8, 19.2%, 19.4%; - --ref-palette-neutral-variant25: 15, 16.4%, 23.9%; - --ref-palette-neutral-variant30: 14.3, 14.5%, 28.4%; - --ref-palette-neutral-variant35: 16.4, 13.1%, 32.9%; - --ref-palette-neutral-variant40: 16.4, 11.5%, 37.6%; - --ref-palette-neutral-variant50: 15, 9.9%, 47.5%; - --ref-palette-neutral-variant60: 16.2, 12%, 57.6%; - --ref-palette-neutral-variant70: 15.6, 16.6%, 68%; - --ref-palette-neutral-variant80: 14.5, 27.1%, 79%; - --ref-palette-neutral-variant90: 15.5, 60.8%, 90%; - --ref-palette-neutral-variant95: 15, 100%, 95.3%; - --ref-palette-neutral-variant98: 13.3, 100%, 98.2%; - --ref-palette-neutral-variant99: 300, 100%, 99.2%; - --ref-palette-neutral-variant100: 0, 0%, 100%; - - /* error */ - --ref-palette-error0: 0, 0%, 0%; - --ref-palette-error10: 358.2, 100%, 12.7%; - --ref-palette-error20: 357.1, 100%, 20.6%; - --ref-palette-error25: 356.7, 100%, 24.7%; - --ref-palette-error30: 355.9, 100%, 28.8%; - --ref-palette-error35: 356.6, 92%, 34.3%; - --ref-palette-error40: 0, 75.5%, 41.6%; - --ref-palette-error50: 2.4, 72.5%, 52.9%; - --ref-palette-error60: 3.6, 100%, 64.3%; - --ref-palette-error70: 5.5, 100%, 74.5%; - --ref-palette-error80: 6.4, 100%, 83.5%; - --ref-palette-error90: 5.9, 100%, 92%; - --ref-palette-error95: 8.6, 100%, 95.9%; - --ref-palette-error98: 7.5, 100%, 98.4%; - --ref-palette-error99: 300, 100%, 99.2%; - --ref-palette-error100: 0, 0%, 100%; -} diff --git a/ui/ui-kit/style/theme/palette-85.css b/ui/ui-kit/style/theme/palette-85.css deleted file mode 100644 index 9bbe19241..000000000 --- a/ui/ui-kit/style/theme/palette-85.css +++ /dev/null @@ -1,111 +0,0 @@ -:root { - /* HCT 85 */ - - /* primary */ - --ref-palette-primary0: 0, 0%, 0%; - --ref-palette-primary10: 41.1, 100%, 7.5%; - --ref-palette-primary20: 42.2, 100%, 12.5%; - --ref-palette-primary25: 43.1, 100%, 15.3%; - --ref-palette-primary30: 43.7, 100%, 18%; - --ref-palette-primary35: 44.2, 100%, 20.8%; - --ref-palette-primary40: 44.1, 100%, 23.7%; - --ref-palette-primary50: 44.6, 100%, 29.8%; - --ref-palette-primary60: 43.7, 85.8%, 38.6%; - --ref-palette-primary70: 42.4, 66.5%, 50.8%; - --ref-palette-primary80: 41.8, 87.7%, 61.8%; - --ref-palette-primary90: 39.8, 100%, 81.4%; - --ref-palette-primary95: 37.1, 100%, 91.8%; - --ref-palette-primary98: 27.7, 100%, 97.5%; - --ref-palette-primary99: 300, 100%, 99.2%; - --ref-palette-primary100: 0, 0%, 100%; - - /* secondary */ - --ref-palette-secondary0: 0, 0%, 0%; - --ref-palette-secondary10: 41.3, 80%, 7.8%; - --ref-palette-secondary20: 41.1, 47.5%, 15.7%; - --ref-palette-secondary25: 40.5, 39.2%, 20%; - --ref-palette-secondary30: 39.5, 32.8%, 24.5%; - --ref-palette-secondary35: 40.5, 29.3%, 28.8%; - --ref-palette-secondary40: 39.5, 25.9%, 33.3%; - --ref-palette-secondary50: 39.6, 21.5%, 42.9%; - --ref-palette-secondary60: 39.6, 20.8%, 52.9%; - --ref-palette-secondary70: 38.5, 28.3%, 63.3%; - --ref-palette-secondary80: 38.6, 41.8%, 73.7%; - --ref-palette-secondary90: 38.3, 74.4%, 84.7%; - --ref-palette-secondary95: 37.1, 100%, 91.8%; - --ref-palette-secondary98: 27.7, 100%, 97.5%; - --ref-palette-secondary99: 300, 100%, 99.2%; - --ref-palette-secondary100: 0, 0%, 100%; - - /* tertiary */ - --ref-palette-tertiary0: 0, 0%, 0%; - --ref-palette-tertiary10: 120, 60%, 7.8%; - --ref-palette-tertiary20: 115.6, 33.3%, 15.9%; - --ref-palette-tertiary25: 115.6, 26.2%, 20.2%; - --ref-palette-tertiary30: 113.8, 23.2%, 24.5%; - --ref-palette-tertiary35: 112, 20.3%, 29%; - --ref-palette-tertiary40: 112.3, 18.1%, 33.5%; - --ref-palette-tertiary50: 109.1, 15.1%, 42.9%; - --ref-palette-tertiary60: 109.4, 14.2%, 52.9%; - --ref-palette-tertiary70: 108.3, 19.1%, 63.1%; - --ref-palette-tertiary80: 107.4, 28.4%, 73.7%; - --ref-palette-tertiary90: 107.7, 49.4%, 84.5%; - --ref-palette-tertiary95: 106.5, 76.9%, 89.8%; - --ref-palette-tertiary98: 102.2, 100%, 94.7%; - --ref-palette-tertiary99: 93.8, 100%, 96.9%; - --ref-palette-tertiary100: 0, 0%, 100%; - - /* neutral */ - --ref-palette-neutral0: 0, 0%, 0%; - --ref-palette-neutral10: 37.5, 15.4%, 10.2%; - --ref-palette-neutral20: 36, 10.6%, 18.4%; - --ref-palette-neutral25: 36, 8.6%, 22.7%; - --ref-palette-neutral30: 36, 7.2%, 27.1%; - --ref-palette-neutral35: 38.2, 6.8%, 31.6%; - --ref-palette-neutral40: 38.2, 5.9%, 36.3%; - --ref-palette-neutral50: 32.3, 5.5%, 46.1%; - --ref-palette-neutral60: 34.3, 6.3%, 56.1%; - --ref-palette-neutral70: 32, 8.8%, 66.5%; - --ref-palette-neutral80: 30, 13.8%, 77.3%; - --ref-palette-neutral90: 31.8, 27.9%, 88%; - --ref-palette-neutral95: 28.2, 54.8%, 93.9%; - --ref-palette-neutral98: 27.7, 100%, 97.5%; - --ref-palette-neutral99: 300, 100%, 99.2%; - --ref-palette-neutral100: 0, 0%, 100%; - - /* neutral-variant */ - --ref-palette-neutral-variant0: 0, 0%, 0%; - --ref-palette-neutral-variant10: 41.3, 33.3%, 9.4%; - --ref-palette-neutral-variant20: 40, 20%, 17.6%; - --ref-palette-neutral-variant25: 39, 17.9%, 22%; - --ref-palette-neutral-variant30: 39, 14.9%, 26.3%; - --ref-palette-neutral-variant35: 37.1, 13.4%, 30.8%; - --ref-palette-neutral-variant40: 36.5, 12.7%, 35.5%; - --ref-palette-neutral-variant50: 37.5, 10.4%, 45.1%; - --ref-palette-neutral-variant60: 36, 10.9%, 55.1%; - --ref-palette-neutral-variant70: 37.8, 15.3%, 65.3%; - --ref-palette-neutral-variant80: 36.4, 23%, 76.1%; - --ref-palette-neutral-variant90: 36, 45.5%, 87.1%; - --ref-palette-neutral-variant95: 34.8, 83.8%, 92.7%; - --ref-palette-neutral-variant98: 27.7, 100%, 97.5%; - --ref-palette-neutral-variant99: 300, 100%, 99.2%; - --ref-palette-neutral-variant100: 0, 0%, 100%; - - /* error */ - --ref-palette-error0: 0, 0%, 0%; - --ref-palette-error10: 358.2, 100%, 12.7%; - --ref-palette-error20: 357.1, 100%, 20.6%; - --ref-palette-error25: 356.7, 100%, 24.7%; - --ref-palette-error30: 355.9, 100%, 28.8%; - --ref-palette-error35: 356.6, 92%, 34.3%; - --ref-palette-error40: 0, 75.5%, 41.6%; - --ref-palette-error50: 2.4, 72.5%, 52.9%; - --ref-palette-error60: 3.6, 100%, 64.3%; - --ref-palette-error70: 5.5, 100%, 74.5%; - --ref-palette-error80: 6.4, 100%, 83.5%; - --ref-palette-error90: 5.9, 100%, 92%; - --ref-palette-error95: 8.6, 100%, 95.9%; - --ref-palette-error98: 7.5, 100%, 98.4%; - --ref-palette-error99: 300, 100%, 99.2%; - --ref-palette-error100: 0, 0%, 100%; -} diff --git a/ui/ui-kit/style/theme/palette-dynamic.css b/ui/ui-kit/style/theme/palette-dynamic.css deleted file mode 100644 index 19376ef0d..000000000 --- a/ui/ui-kit/style/theme/palette-dynamic.css +++ /dev/null @@ -1,123 +0,0 @@ -:root { - /* Dynamic HSL */ - --ref-palette-primary-hue: 260; - --ref-palette-primary-chroma: 48%; /* maximum 48 */ - --ref-palette-secondary-hue: var(--ref-palette-primary-hue); - --ref-palette-secondary-chroma: 16%; - --ref-palette-tertiary-hue: calc(var(--ref-palette-primary-hue) + 60); - --ref-palette-tertiary-chroma: 24%; - --ref-palette-neutral-hue: var(--ref-palette-primary-hue); - --ref-palette-neutral-chroma: 4%; - --ref-palette-neutral-variant-hue: var(--ref-palette-primary-hue); - --ref-palette-neutral-variant-chroma: 8%; - --ref-palette-error-hue: 25; - --ref-palette-error-chroma: 84%; - - /* primary */ - --ref-palette-primary0: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 0%; - --ref-palette-primary10: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 10%; - --ref-palette-primary20: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 20%; - --ref-palette-primary25: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 25%; - --ref-palette-primary30: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 30%; - --ref-palette-primary35: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 35%; - --ref-palette-primary40: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 40%; - --ref-palette-primary50: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 50%; - --ref-palette-primary60: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 60%; - --ref-palette-primary70: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 70%; - --ref-palette-primary80: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 80%; - --ref-palette-primary90: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 90%; - --ref-palette-primary95: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 95%; - --ref-palette-primary98: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 98%; - --ref-palette-primary99: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 99%; - --ref-palette-primary100: var(--ref-palette-primary-hue), var(--ref-palette-primary-chroma), 100%; - - /* secondary */ - --ref-palette-secondary0: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 0%; - --ref-palette-secondary10: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 10%; - --ref-palette-secondary20: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 20%; - --ref-palette-secondary25: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 25%; - --ref-palette-secondary30: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 30%; - --ref-palette-secondary35: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 35%; - --ref-palette-secondary40: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 40%; - --ref-palette-secondary50: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 50%; - --ref-palette-secondary60: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 60%; - --ref-palette-secondary70: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 70%; - --ref-palette-secondary80: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 80%; - --ref-palette-secondary90: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 90%; - --ref-palette-secondary95: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 95%; - --ref-palette-secondary98: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 98%; - --ref-palette-secondary99: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 99%; - --ref-palette-secondary100: var(--ref-palette-secondary-hue), var(--ref-palette-secondary-chroma), 100%; - - /* tertiary */ - --ref-palette-tertiary0: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 0%; - --ref-palette-tertiary10: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 10%; - --ref-palette-tertiary20: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 20%; - --ref-palette-tertiary25: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 25%; - --ref-palette-tertiary30: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 30%; - --ref-palette-tertiary35: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 35%; - --ref-palette-tertiary40: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 40%; - --ref-palette-tertiary50: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 50%; - --ref-palette-tertiary60: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 60%; - --ref-palette-tertiary70: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 70%; - --ref-palette-tertiary80: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 80%; - --ref-palette-tertiary90: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 90%; - --ref-palette-tertiary95: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 95%; - --ref-palette-tertiary98: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 98%; - --ref-palette-tertiary99: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 99%; - --ref-palette-tertiary100: var(--ref-palette-tertiary-hue), var(--ref-palette-tertiary-chroma), 100%; - - /* neutral */ - --ref-palette-neutral0: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 0%; - --ref-palette-neutral10: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 10%; - --ref-palette-neutral20: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 20%; - --ref-palette-neutral25: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 25%; - --ref-palette-neutral30: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 30%; - --ref-palette-neutral35: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 35%; - --ref-palette-neutral40: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 40%; - --ref-palette-neutral50: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 50%; - --ref-palette-neutral60: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 60%; - --ref-palette-neutral70: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 70%; - --ref-palette-neutral80: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 80%; - --ref-palette-neutral90: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 90%; - --ref-palette-neutral95: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 95%; - --ref-palette-neutral98: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 98%; - --ref-palette-neutral99: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 99%; - --ref-palette-neutral100: var(--ref-palette-neutral-hue), var(--ref-palette-neutral-chroma), 100%; - - /* neutral-variant */ - --ref-palette-neutral-variant0: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 0%; - --ref-palette-neutral-variant10: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 10%; - --ref-palette-neutral-variant20: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 20%; - --ref-palette-neutral-variant25: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 25%; - --ref-palette-neutral-variant30: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 30%; - --ref-palette-neutral-variant35: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 35%; - --ref-palette-neutral-variant40: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 40%; - --ref-palette-neutral-variant50: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 50%; - --ref-palette-neutral-variant60: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 60%; - --ref-palette-neutral-variant70: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 70%; - --ref-palette-neutral-variant80: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 80%; - --ref-palette-neutral-variant90: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 90%; - --ref-palette-neutral-variant95: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 95%; - --ref-palette-neutral-variant98: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 98%; - --ref-palette-neutral-variant99: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 99%; - --ref-palette-neutral-variant100: var(--ref-palette-neutral-variant-hue), var(--ref-palette-neutral-variant-chroma), 100%; - - /* error */ - --ref-palette-error0: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 0%; - --ref-palette-error10: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 10%; - --ref-palette-error20: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 20%; - --ref-palette-error25: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 25%; - --ref-palette-error30: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 30%; - --ref-palette-error35: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 35%; - --ref-palette-error40: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 40%; - --ref-palette-error50: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 50%; - --ref-palette-error60: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 60%; - --ref-palette-error70: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 70%; - --ref-palette-error80: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 80%; - --ref-palette-error90: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 90%; - --ref-palette-error95: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 95%; - --ref-palette-error98: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 98%; - --ref-palette-error99: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 99%; - --ref-palette-error100: var(--ref-palette-error-hue), var(--ref-palette-error-chroma), 100%; -} diff --git a/ui/ui-kit/style/token.css b/ui/ui-kit/style/token.css deleted file mode 100644 index 410e98ae9..000000000 --- a/ui/ui-kit/style/token.css +++ /dev/null @@ -1,8 +0,0 @@ -@import url('token/typography.css'); -@import url('token/radius.css'); -@import url('token/motion.css'); -@import url('token/surface.css'); -@import url('token/spacing.css'); -@import url('token/scrollbar.css'); -@import url('token/z-index.css'); -@import url('token/safe-area.css'); diff --git a/ui/ui-kit/style/token/motion.css b/ui/ui-kit/style/token/motion.css deleted file mode 100644 index b70ef85f6..000000000 --- a/ui/ui-kit/style/token/motion.css +++ /dev/null @@ -1,16 +0,0 @@ -:root { - --ref-motion-duration-frame: 16.66666666666666667ms; - - --sys-motion-duration-none: calc(2 * var(--ref-motion-duration-frame)); - --sys-motion-duration-small: calc(8 * var(--ref-motion-duration-frame)); - --sys-motion-duration-small-out: calc(6 * var(--ref-motion-duration-frame)); - --sys-motion-duration-medium: calc(16 * var(--ref-motion-duration-frame)); - --sys-motion-duration-medium-out: calc(12 * var(--ref-motion-duration-frame)); - --sys-motion-duration-large: calc(18 * var(--ref-motion-duration-frame)); - --sys-motion-duration-large-out: var(--sys-motion-duration-medium); - - --sys-motion-easing-normal: cubic-bezier(0.4, 0, 0.6, 1); - --sys-motion-easing-incoming: cubic-bezier(0, 0, 0.2, 1); - --sys-motion-easing-exiting: cubic-bezier(0.4, 0, 1, 1); - --sys-motion-easing-in-out: cubic-bezier(0.4, 0, 0.2, 1); -} diff --git a/ui/ui-kit/style/token/radius.css b/ui/ui-kit/style/token/radius.css deleted file mode 100644 index 40f4d0a3e..000000000 --- a/ui/ui-kit/style/token/radius.css +++ /dev/null @@ -1,9 +0,0 @@ -:root { - --sys-radius-none: 2px; - --sys-radius-xsmall: 4px; - --sys-radius-small: 8px; - --sys-radius-medium: 12px; - --sys-radius-large: 16px; - --sys-radius-xlarge: 20px; - --sys-radius-xxlarge: 28px; -} diff --git a/ui/ui-kit/style/token/safe-area.css b/ui/ui-kit/style/token/safe-area.css deleted file mode 100644 index e02c85692..000000000 --- a/ui/ui-kit/style/token/safe-area.css +++ /dev/null @@ -1,23 +0,0 @@ -@supports (padding-top: 20px) { - :root { - --ion-safe-area-top: var(--ion-statusbar-padding); - } -} - -@supports (padding-top: constant(safe-area-inset-top)) { - :root { - --ion-safe-area-top: constant(safe-area-inset-top); - --ion-safe-area-bottom: constant(safe-area-inset-bottom); - --ion-safe-area-left: constant(safe-area-inset-left); - --ion-safe-area-right: constant(safe-area-inset-right); - } -} - -@supports (padding-top: env(safe-area-inset-top)) { - :root { - --ion-safe-area-top: env(safe-area-inset-top); - --ion-safe-area-bottom: env(safe-area-inset-bottom); - --ion-safe-area-left: env(safe-area-inset-left); - --ion-safe-area-right: env(safe-area-inset-right); - } -} diff --git a/ui/ui-kit/style/token/scrollbar.css b/ui/ui-kit/style/token/scrollbar.css deleted file mode 100644 index 1b7a36488..000000000 --- a/ui/ui-kit/style/token/scrollbar.css +++ /dev/null @@ -1,14 +0,0 @@ -:root { - --sys-scrollbar-background: transparent; - --sys-scrollbar-color: rgba(0, 0, 0, var(--sys-surface-state-opacity-hover)); - --sys-scrollbar-color-hover: rgba(0, 0, 0, var(--sys-surface-state-opacity-pressed)); - --sys-scrollbar-size: var(--sys-spacing-track); - --sys-scrollbar-radius: calc(var(--sys-scrollbar-size) / 2); -} - -@media (prefers-color-scheme: dark) { - :root { - --sys-scrollbar-color: rgba(255, 255, 255, var(--sys-surface-state-opacity-hover)); - --sys-scrollbar-color-hover: rgba(255, 255, 255, var(--sys-surface-state-opacity-pressed)); - } -} diff --git a/ui/ui-kit/style/token/spacing.css b/ui/ui-kit/style/token/spacing.css deleted file mode 100644 index 94acb891a..000000000 --- a/ui/ui-kit/style/token/spacing.css +++ /dev/null @@ -1,58 +0,0 @@ -/* https://material.io/design/layout/spacing-methods.html */ -:root { - --sys-spacing-track: 0.8rem; - - --sys-breakpoint-handset: 600px; - --sys-breakpoint-tablet: 840px; - --sys-breakpoint-laptop: 1240px; - --sys-breakpoint-large-screen: 1440px; - - --sys-spacing-column-1: calc( - (100vw - var(--sys-spacing-side-padding) * 2 - var(--sys-spacing-gutter) * (var(--sys-column-count) - 1)) - / var(--sys-column-count) - ); - --sys-spacing-column-2: calc(var(--sys-spacing-column-1) * 2 + var(--sys-spacing-gutter)); - --sys-spacing-column-3: calc(var(--sys-spacing-column-1) * 3 + var(--sys-spacing-gutter) * 2); - --sys-spacing-column-4: calc(var(--sys-spacing-column-1) * 4 + var(--sys-spacing-gutter) * 3); - - /* < 600px */ - --sys-column-count: 4; - --sys-spacing-side-padding: var(--sys-spacing-track); - --sys-spacing-gutter: calc(2 * var(--sys-spacing-track)); -} - -/* >= 600 */ -@media only screen and (min-width: 600px) { - :root { - --sys-column-count: 8; - --sys-spacing-side-padding: calc(3 * var(--sys-spacing-track)); - --sys-spacing-gutter: calc(3 * var(--sys-spacing-track)); - } -} - -/* >= 840px */ -@media only screen and (min-width: 840px) { - :root { - --sys-column-count: 12; - /* --sys-spacing-side-padding: calc(3 * var(--sys-spacing-track)); - --sys-spacing-gutter: calc(3 * var(--sys-spacing-track)); */ - } -} - -/* >= 1200px */ -@media only screen and (min-width: 1200px) { - :root { - /* --sys-column-count: 12; */ - --sys-spacing-side-padding: calc(4 * var(--sys-spacing-track)); - --sys-spacing-gutter: calc(4 * var(--sys-spacing-track)); - } -} - -/* >= 1440px */ -/* @media only screen and (min-width: 1440px) { - :root { - --sys-column-count: 12; - --sys-spacing-side-padding: calc(4 * var(--sys-spacing-track)); - --sys-spacing-gutter: calc(4 * var(--sys-spacing-track)); - } -} */ diff --git a/ui/ui-kit/style/token/surface.css b/ui/ui-kit/style/token/surface.css deleted file mode 100644 index f341c98b6..000000000 --- a/ui/ui-kit/style/token/surface.css +++ /dev/null @@ -1,51 +0,0 @@ -:root { - --sys-surface-tint-opacity-1: 0.05; - --sys-surface-tint-opacity-2: 0.08; - --sys-surface-tint-opacity-3: 0.11; - --sys-surface-tint-opacity-4: 0.12; - --sys-surface-tint-opacity-5: 0.14; - - --sys-surface-state-opacity-dragged: 0.159; - --sys-surface-state-opacity-pressed: 0.119; - --sys-surface-state-opacity-focus: 0.119; - --sys-surface-state-opacity-hover: 0.079; - - --sys-surface-disabled-opacity: 0.38; - --sys-surface-disabled-outlined-opacity: 0.12; - --sys-surface-reloading-opacity: 0.6; - - --sys-surface-elevation-opacity-1: 0.2; - --sys-surface-elevation-opacity-2: 0.14; - --sys-surface-elevation-opacity-3: 0.12; - - --sys-surface-elevation-0: - 0px 0px 0px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 0px 0px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 0px 0px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-1: - 0px 2px 1px -1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 1px 1px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 1px 3px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-2: - 0px 3px 1px -2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 2px 2px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 1px 5px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-3: - 0px 3px 3px -2px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 3px 4px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 1px 8px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-4: - 0px 2px 4px -1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 4px 5px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 1px 10px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; - --sys-surface-elevation-5: - 0px 3px 5px -1px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-1)), - 0px 5px 8px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-2)), - 0px 1px 14px 0px hsla(var(--sys-color-shadow-hsl), var(--sys-surface-elevation-opacity-3)) - ; -} diff --git a/ui/ui-kit/style/token/typography.css b/ui/ui-kit/style/token/typography.css deleted file mode 100644 index ca8504ed1..000000000 --- a/ui/ui-kit/style/token/typography.css +++ /dev/null @@ -1,117 +0,0 @@ -:root { - /* references */ - --ref-font-weight-regular: 400; - --ref-font-weight-medium: 500; - --ref-font-weight-bold: 700; - - --ref-font-family-system: - system-ui, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - 'Roboto', - 'Oxygen', - 'Ubuntu', - 'Cantarell', - 'Open Sans', - 'Helvetica Neue', - 'Arial', - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji', - 'Segoe UI Symbol' - ; - --sys-font-family-plain: var(--ref-font-family-vazirmatn), var(--ref-font-family-system); - --sys-font-family-brand: var(--ref-font-family-vazirmatn), var(--ref-font-family-system); - - /* display - large */ - --sys-typescale-display-large-font-family-name: var(--sys-font-family-brand); - --sys-typescale-display-large-font-weight: var(--ref-font-weight-regular); - --sys-typescale-display-large-font-size: 5.7rem; - --sys-typescale-display-large-line-height: 6.4rem; - --sys-typescale-display-large-letter-spacing: -0.025rem; - /* display - medium */ - --sys-typescale-display-medium-font-family-name: var(--sys-font-family-brand); - --sys-typescale-display-medium-font-weight: var(--ref-font-weight-regular); - --sys-typescale-display-medium-font-size: 4.5rem; - --sys-typescale-display-medium-line-height: 5.2rem; - --sys-typescale-display-medium-letter-spacing: 0rem; - /* display - small */ - --sys-typescale-display-small-font-family-name: var(--sys-font-family-brand); - --sys-typescale-display-small-font-weight: var(--ref-font-weight-regular); - --sys-typescale-display-small-font-size: 3.6rem; - --sys-typescale-display-small-line-height: 4.4rem; - --sys-typescale-display-small-letter-spacing: 0rem; - /* headline - large */ - --sys-typescale-headline-large-font-family-name: var(--sys-font-family-brand); - --sys-typescale-headline-large-font-weight: var(--ref-font-weight-regular); - --sys-typescale-headline-large-font-size: 3.2rem; - --sys-typescale-headline-large-line-height: 4rem; - --sys-typescale-headline-large-letter-spacing: 0rem; - /* headline - medium */ - --sys-typescale-headline-medium-font-family-name: var(--sys-font-family-brand); - --sys-typescale-headline-medium-font-weight: var(--ref-font-weight-regular); - --sys-typescale-headline-medium-font-size: 2.8rem; - --sys-typescale-headline-medium-line-height: 3.6rem; - --sys-typescale-headline-medium-letter-spacing: 0rem; - /* headline - small */ - --sys-typescale-headline-small-font-family-name: var(--sys-font-family-brand); - --sys-typescale-headline-small-font-weight: var(--ref-font-weight-regular); - --sys-typescale-headline-small-font-size: 2.4rem; - --sys-typescale-headline-small-line-height: 3.2rem; - --sys-typescale-headline-small-letter-spacing: 0rem; - /* body - large */ - --sys-typescale-body-large-font-family-name: var(--sys-font-family-plain); - --sys-typescale-body-large-font-weight: var(--ref-font-weight-regular); - --sys-typescale-body-large-font-size: 1.6rem; - --sys-typescale-body-large-line-height: 2.4rem; - --sys-typescale-body-large-letter-spacing: 0.05rem; - /* body - medium */ - --sys-typescale-body-medium-font-family-name: var(--sys-font-family-plain); - --sys-typescale-body-medium-font-weight: var(--ref-font-weight-regular); - --sys-typescale-body-medium-font-size: 1.4rem; - --sys-typescale-body-medium-line-height: 2rem; - --sys-typescale-body-medium-letter-spacing: 0.025rem; - /* body - small */ - --sys-typescale-body-small-font-family-name: var(--sys-font-family-plain); - --sys-typescale-body-small-font-weight: var(--ref-font-weight-regular); - --sys-typescale-body-small-font-size: 1.2rem; - --sys-typescale-body-small-line-height: 1.6rem; - --sys-typescale-body-small-letter-spacing: 0.04rem; - /* label - large */ - --sys-typescale-label-large-font-family-name: var(--sys-font-family-plain); - --sys-typescale-label-large-font-weight: var(--ref-font-weight-medium); - --sys-typescale-label-large-font-size: 1.4rem; - --sys-typescale-label-large-line-height: 2rem; - --sys-typescale-label-large-letter-spacing: 0.01rem; - /* label - medium */ - --sys-typescale-label-medium-font-family-name: var(--sys-font-family-plain); - --sys-typescale-label-medium-font-weight: var(--ref-font-weight-medium); - --sys-typescale-label-medium-font-size: 1.2rem; - --sys-typescale-label-medium-line-height: 1.6rem; - --sys-typescale-label-medium-letter-spacing: 0.05rem; - /* label - small */ - --sys-typescale-label-small-font-family-name: var(--sys-font-family-plain); - --sys-typescale-label-small-font-weight: var(--ref-font-weight-medium); - --sys-typescale-label-small-font-size: 1.1rem; - --sys-typescale-label-small-line-height: 1.6rem; - --sys-typescale-label-small-letter-spacing: 0.05rem; - /* title - large */ - --sys-typescale-title-large-font-family-name: var(--sys-font-family-brand); - --sys-typescale-title-large-font-weight: var(--ref-font-weight-regular); - --sys-typescale-title-large-font-size: 2.2rem; - --sys-typescale-title-large-line-height: 2.8rem; - --sys-typescale-title-large-letter-spacing: 0rem; - /* title - medium */ - --sys-typescale-title-medium-font-family-name: var(--sys-font-family-plain); - --sys-typescale-title-medium-font-weight: var(--ref-font-weight-medium); - --sys-typescale-title-medium-font-size: 1.6rem; - --sys-typescale-title-medium-line-height: 2.4rem; - --sys-typescale-title-medium-letter-spacing: 0.015rem; - /* title - small */ - --sys-typescale-title-small-font-family-name: var(--sys-font-family-plain); - --sys-typescale-title-small-font-weight: var(--ref-font-weight-medium); - --sys-typescale-title-small-font-size: 1.4rem; - --sys-typescale-title-small-line-height: 2rem; - --sys-typescale-title-small-letter-spacing: 0.01rem; -} diff --git a/ui/ui-kit/style/token/z-index.css b/ui/ui-kit/style/token/z-index.css deleted file mode 100644 index 49f5ce042..000000000 --- a/ui/ui-kit/style/token/z-index.css +++ /dev/null @@ -1,15 +0,0 @@ -:root { - --sys-zindex-bottomness: -900; - --sys-zindex-below: -1; - --sys-zindex-default: 1; - --sys-zindex-above: 2; - --sys-zindex-dropdown: 100; - --sys-zindex-sticky: 200; - --sys-zindex-fixed: 300; - --sys-zindex-backdrop: 400; - --sys-zindex-modal: 500; - --sys-zindex-popover: 600; - --sys-zindex-snackbar: 700; - --sys-zindex-tooltip: 800; - --sys-zindex-topness: 900; -} diff --git a/ui/ui-kit/top-app-bar2/top-app-bar.scss b/ui/ui-kit/top-app-bar2/top-app-bar.scss deleted file mode 100644 index 04f2bae8b..000000000 --- a/ui/ui-kit/top-app-bar2/top-app-bar.scss +++ /dev/null @@ -1,82 +0,0 @@ -.alwatr-top-app-bar { - flex-grow: 0; - flex-shrink: 0; - padding: var(--sys-spacing-track) calc(0.5 * var(--sys-spacing-track)); - z-index: var(--sys-zindex-sticky); - border-radius: 0; - user-select: none; - - .alwatr-row { - display: flex; - } - - .leading-icon { - --comp-icon-button-color-hsl: var(--sys-color-on-surface-hsl); - } - - .trailing-icons { - --comp-icon-button-color-hsl: var(--sys-color-on-surface-variant-hsl); - } - - .title { - flex-grow: 1; - } - - &[type=small] .title, - &[type=center] .title { - padding: 0 calc(0.5 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-title-large-font-family-name); - font-weight: var(--sys-typescale-title-large-font-weight); - font-size: var(--sys-typescale-title-large-font-size); - letter-spacing: var(--sys-typescale-title-large-letter-spacing); - /* line-height: var(--sys-typescale-title-large-line-height); */ - line-height: calc(6 * var(--sys-spacing-track)); - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - overflow: clip; - } - - &[dir=rtl][type=small] .title, - &[dir=rtl][type=center] .title { - line-height: calc(6 * var(--sys-spacing-track) - 0.18em); /* 0.5 * track / title-line-height */ - } - - &[type=center] .title { - text-align: center; - } - - .headline { /* medium | large */ - display: none; - } - - &[type=medium] { - padding-bottom: calc(3 * var(--sys-spacing-track)); - } - &[type=large] { - padding-bottom: calc(3.5 * var(--sys-spacing-track)); - } - - &[type=medium] .headline, - &[type=large] .headline { - display: block; - padding: 0 calc(1.5 * var(--sys-spacing-track)); - } - - &[type=medium] .headline { - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - } - - &[type=large] .headline { - margin-top: calc(4 * var(--sys-spacing-track)); - font-family: var(--sys-typescale-headline-medium-font-family-name); - font-weight: var(--sys-typescale-headline-medium-font-weight); - font-size: var(--sys-typescale-headline-medium-font-size); - letter-spacing: var(--sys-typescale-headline-medium-letter-spacing); - line-height: var(--sys-typescale-headline-medium-line-height); - } -} diff --git a/ui/ui-kit/tsconfig.json b/ui/ui-kit/tsconfig.json deleted file mode 100644 index c0e87e27d..000000000 --- a/ui/ui-kit/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": ".", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - // files, include and exclude from the inheriting config are always overwritten. - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../element"}, - {"path": "../icon"}, - {"path": "../../core/fract"}, - {"path": "../../core/type"}, - {"path": "../../core/i18n"}, - {"path": "../../core/i18n2"}, - {"path": "../../core/signal"}, - {"path": "../../core/signal2"}, - {"path": "../../core/math"}, - {"path": "../../core/util"}, - ] -} diff --git a/ui/ui-kit2/CHANGELOG.md b/ui/ui-kit2/CHANGELOG.md deleted file mode 100644 index adba27769..000000000 --- a/ui/ui-kit2/CHANGELOG.md +++ /dev/null @@ -1,268 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **keep:** color palette ([3cc5566](https://github.com/AliMD/alwatr/commit/3cc5566ffdd849fe930eb85b5be05bf0e75771af)) - -### Features - -- **ui/theme:** 20 palette ([41a86a2](https://github.com/AliMD/alwatr/commit/41a86a24a77aa92799b88b3fec19e28b02b3d917)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/ui-kit - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **button:** disabled issue ([7f9b457](https://github.com/AliMD/alwatr/commit/7f9b457dabec82636b7fb158206c70f2e150fefd)) -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- **icon-button:** disable bug ([a92fee4](https://github.com/AliMD/alwatr/commit/a92fee48bfdf2cf92aa30e8b0fb506ac0fab5c64)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **surface:** disabled color issue ([01a8140](https://github.com/AliMD/alwatr/commit/01a8140ef1f2f86920483e4ee4936dda5a155b9b)) -- **ui/icon-button:** default content value ([4303620](https://github.com/AliMD/alwatr/commit/4303620c26a34999db2ad7098c417e1c8f00414b)) -- **ui/snackbar:** check `actionLabelKey` ([9788f53](https://github.com/AliMD/alwatr/commit/9788f53a469db7cc677f30a5c62a68478018a832)) -- **ui/snackbar:** use label for action button content ([68beefa](https://github.com/AliMD/alwatr/commit/68beefa82532159225dbf5468255dff3adaba43a)) -- **ui/surface:** box sizing ([6ef9a45](https://github.com/AliMD/alwatr/commit/6ef9a45301a699875477f659447001ed5e4ab1c3)) -- **ui/text-field:** fix default of `value` & handle its `click` event ([a685899](https://github.com/AliMD/alwatr/commit/a685899f60f83ed26f43ec7a8f2ca16ec37c1078)) -- **ui/text-field:** set empty string for undefined value ([3efad6b](https://github.com/AliMD/alwatr/commit/3efad6b639ffad06bccb25d48de3fbe6fe2f7abb)) - -### Features - -- **ui-kit/snackbar:** message/actionLabelMessage l10n key ([e09f3e1](https://github.com/AliMD/alwatr/commit/e09f3e170998902e218e1d23a0d3b5ceabc55dc9)) -- **ui-kit/style:** add --sys-surface-reloading-opacity ([2ba6367](https://github.com/AliMD/alwatr/commit/2ba6367058290f8bfdf1eabe1d0cd3a634a7d9db)) -- **ui/button:** label on content ([df010a8](https://github.com/AliMD/alwatr/commit/df010a8ccb49759e5638eb5992898549ce3f55b0)) -- **ui/text-field:** readonly prop ([02a785e](https://github.com/AliMD/alwatr/commit/02a785ef8f842cdb86aea259e8019f01d7ba9e4e)) -- use button content ([a3f3872](https://github.com/AliMD/alwatr/commit/a3f3872c16e2bf5ad99c90cd03563007271fc530)) - -### Performance Improvements - -- **pwa:** optimize first load and rendering ([343d757](https://github.com/AliMD/alwatr/commit/343d757eefab6572df54fb4f7624698e9a9f9e11)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **text-field:** make it inline ([72320b7](https://github.com/AliMD/alwatr/commit/72320b74608902c1ee9525b5b93e3774732d7492)) -- **top-app-bar:** style shrink ([a398821](https://github.com/AliMD/alwatr/commit/a398821690ae6d81814b5920a3d4496ccef5fe32)) -- **ui-kit/button:** elevated ([2865804](https://github.com/AliMD/alwatr/commit/2865804b6c5970492ef490deba9f867ed5eddad5)) -- **ui-kit/chat:** footer icon button height ([8353fbc](https://github.com/AliMD/alwatr/commit/8353fbcec9cd2f982468ebf2bd949a76cb8f5e1d)) -- **ui-kit:** rename signalId to clickSignalId ([d8addc7](https://github.com/AliMD/alwatr/commit/d8addc7776e2f002f81207d6bcdc1c28d1568400)) -- **ui/icon-button:** remove bind \_click ([b678434](https://github.com/AliMD/alwatr/commit/b6784340e8dc669fe8b572c3d8c4fdb604f2f42a)) -- **ui/product-card:** toman icon ([8a6ddae](https://github.com/AliMD/alwatr/commit/8a6ddae2000639223d505fc67cf2d5f3738fa80e)) -- **ui/text-field:** width problem ([baf53a2](https://github.com/AliMD/alwatr/commit/baf53a279e311dba91bfbf029744993c8f8754e4)) -- **ui:** surface tinted attrib ([56310b0](https://github.com/AliMD/alwatr/commit/56310b04734d51841863cd03eb37e3b5c51957fc)) - -### Features - -- **button:** add icon ([476a14f](https://github.com/AliMD/alwatr/commit/476a14fea2cbab4bef5b0fd764fa83e82784c358)) -- **button:** add signalId for click event ([fdde714](https://github.com/AliMD/alwatr/commit/fdde714b40ca24526d60f7c590dcce3861e4a97d)) -- **button:** click signal with detail ([03c2dc1](https://github.com/AliMD/alwatr/commit/03c2dc1e64562815505b468c761ac245554470ed)) -- **button:** icon style ([11b736d](https://github.com/AliMD/alwatr/commit/11b736d8c518ff773e2dcb4ab34e8a20641960ff)) -- **com-pwa:** set default value on shipping form ([bbcdfcb](https://github.com/AliMD/alwatr/commit/bbcdfcbed84384711e1d6d81e0173106704d502d)) -- **icon-box:** headline ellipsis overflow ([935b49b](https://github.com/AliMD/alwatr/commit/935b49b50b947af3cc5b1e39123d6c05de05eabf)) -- **icon-box:** tinted ([436f989](https://github.com/AliMD/alwatr/commit/436f98960a6ea89be6153e9122ce94c20220332d)) -- **icon-button:** IconButtonContent.disabled ([a6c1ee9](https://github.com/AliMD/alwatr/commit/a6c1ee985d9e20bfd6f2586dade27f394fac35e0)) -- **product-card:** optional price ([a554ee5](https://github.com/AliMD/alwatr/commit/a554ee510af66e336b2a66173536b0bbb197f4d2)) -- **surface:** tinted ([129031a](https://github.com/AliMD/alwatr/commit/129031a2e4da66a3f6ecd303f787a98f60db77fe)) -- **text-field:** refactor with value prop and input-change event ([7bc0414](https://github.com/AliMD/alwatr/commit/7bc041438c032e224f0c84e849e38b2bf411bf0c)) -- **top-app-bar:** connect to context ([e690f08](https://github.com/AliMD/alwatr/commit/e690f088717ca9225e4e7d8bedfe160b61029715)) -- **top-app-bar:** tinted ([c943915](https://github.com/AliMD/alwatr/commit/c9439154adc40588361fdc140ba0dd8fde65bce0)) -- **ui-kit/card:** enhance toggle animation ([9950353](https://github.com/AliMD/alwatr/commit/99503532938349f3d1df93d87e2c0156b880670d)) -- **ui-kit/chat:** update ([3c51a71](https://github.com/AliMD/alwatr/commit/3c51a71682511affc3bdb20ce7fa21523e77011e)) -- **ui-kit/text-area:** new component ([e5a3ffb](https://github.com/AliMD/alwatr/commit/e5a3ffb342dfdf96b48bbea08b95dbd0c76f6a6a)) -- **ui-kit/text-field:** hide arrow on number input ([ce69ecf](https://github.com/AliMD/alwatr/commit/ce69ecfd4a30bbd06ce690d0c045613314d16fad)) -- **ui-kit:** enhance root unresolved styles ([ee0b581](https://github.com/AliMD/alwatr/commit/ee0b5816e202570acf836743bdea631694162c87)) -- **ui-kit:** move radio group from soffit-pwa ([0d5786f](https://github.com/AliMD/alwatr/commit/0d5786f4f7cfc950e988e8f35c9c9e80f53cac23)) -- **ui-kit:** selectable product card ([1a8d219](https://github.com/AliMD/alwatr/commit/1a8d219695677d8841f1fbbfb7b10a5a67ad3c24)) -- **ui/field:** refactor with new prop and change event ([e78821d](https://github.com/AliMD/alwatr/commit/e78821de09f27c470e15e502be19c79e04153a65)) -- **ui/product-card:** add id ([3d7cc2f](https://github.com/AliMD/alwatr/commit/3d7cc2f416b5630c15fc140d9a01295b776e42ae)) -- **ui/style:** color theme hct 85deg ([9be16f4](https://github.com/AliMD/alwatr/commit/9be16f43fc4e7037604afcd09edb8d6e7857c11d)) -- **ui/surface:** color animation ([ade9229](https://github.com/AliMD/alwatr/commit/ade9229b1bd34c5c87910db17bcf2f55f8dc0a47)) -- **ui/top-app-bar:** headlineKey and default values ([327c04e](https://github.com/AliMD/alwatr/commit/327c04e1bef597a058396b171055d981523c14f3)) - -### Performance Improvements - -- **ui-kit/style:** body render ([ef4ed24](https://github.com/AliMD/alwatr/commit/ef4ed24f165e92d335e96d98cf3b5252fb9173b6)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- compatible with i18n ([89c4a90](https://github.com/AliMD/alwatr/commit/89c4a90444db12930b1d0211942c9b84185cbb32)) -- compatible with new element mixins ([d26e827](https://github.com/AliMD/alwatr/commit/d26e82731b2ae9c2483ba931c450c5a604633122)) -- compatible with new i18n api ([17a7c42](https://github.com/AliMD/alwatr/commit/17a7c42576f35888b16fee36209032c452183d1b)) -- demo-pwa and ui-kit surface element file name and imports ([9f9c382](https://github.com/AliMD/alwatr/commit/9f9c382cebd0d20d4b1bf9ae8490dfb960506ca1)) -- **icon-box:** IconBoxContent target type ([0e3afbc](https://github.com/AliMD/alwatr/commit/0e3afbcb639b45a2ff261a2be0222b2e8d3f079b)) -- **icon-button:** active margin state ([24d0b0f](https://github.com/AliMD/alwatr/commit/24d0b0ffd0303f92056bd84e8491e2cd7a4f2367)) -- **snackbar:** always keep permanent snackbar ([1932239](https://github.com/AliMD/alwatr/commit/193223966c33a778aba50bc20c5c3361a47cda04)) -- **snackbar:** padding ([6765f89](https://github.com/AliMD/alwatr/commit/6765f8900e798aea1f77e9e76be36e055411dd3e)) -- **snackbar:** position ([ad7cb96](https://github.com/AliMD/alwatr/commit/ad7cb9612e194f61464dc9bcab7667d1b8236c44)) -- **snackbar:** show snackbar bugs ([a26843e](https://github.com/AliMD/alwatr/commit/a26843ea2e88f5f8dcdbca8cd032da1b24bf939c)) -- **snackbar:** size and position ([5a2b46d](https://github.com/AliMD/alwatr/commit/5a2b46d1871c7bbdb9afd1ef70d9d1814b5a354b)) -- **snackbar:** z-index ([7212201](https://github.com/AliMD/alwatr/commit/7212201c195ade52838927a1f6de096bb6ce5f65)) -- **soffit-pwa:** build issue ([9294c58](https://github.com/AliMD/alwatr/commit/9294c58d970c7bd55cf93d4ed56d47c1510de358)) -- **soffit-pwa:** review ([8cdc94e](https://github.com/AliMD/alwatr/commit/8cdc94e015982a51e24381a7a3455212711b3c4a)) -- **style:** remove tap-highlight in webkit ([c44ce67](https://github.com/AliMD/alwatr/commit/c44ce6771724672e20675523ad71fa59f2a5d6b8)) -- **text-field:** elevation bug ([405a0e7](https://github.com/AliMD/alwatr/commit/405a0e7a822ada00bd58c53e7903164584ef05c2)) -- **toast:** use `signal` & complete its render(not completed) ([c5ff7af](https://github.com/AliMD/alwatr/commit/c5ff7af59246595a0db67cb6288eb8a534676d84)) -- **top-app-bar:** persian title alignment ([b19d7ed](https://github.com/AliMD/alwatr/commit/b19d7edacfd9fe3c0610d18fd5bea125c1fddba5)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) -- **ui-kit/chat:** compatibility with new icon-button ([449effc](https://github.com/AliMD/alwatr/commit/449effc0f2e0a3a8c0f7217a49054a1f9e6a7ad8)) -- **ui-kit/icon-box:** false on undefined toggleAttribute ([d277458](https://github.com/AliMD/alwatr/commit/d27745890100d1c3236cc270dd1a7225ced94b7a)) -- **ui-kit/style:** vazirmatn css var name ([889882b](https://github.com/AliMD/alwatr/commit/889882bb97956978e0c321f96581dd33d145d9b9)) -- **ui-kit/top-app-bar:** import ([9fe764e](https://github.com/AliMD/alwatr/commit/9fe764ee47081542e5fa0cc9f8f106ee2a5555bb)) -- **ui-kit:** remove old toast ([0900d71](https://github.com/AliMD/alwatr/commit/0900d7105161ae44811c7cb7ffc194cbdd39dab9)) -- **ui/button:** line-height and white-space ([782d6e3](https://github.com/AliMD/alwatr/commit/782d6e32a431734de25c1323b4a8d0520e84f392)) -- **ui/style/mobile-only:** use --sys-breakpoint-handset ([19bd07d](https://github.com/AliMD/alwatr/commit/19bd07dfc1b0b88f31e984d67d2c2940d08a987b)) -- **ui/surface:** prevent ro overwrite all transition ([aff63c2](https://github.com/AliMD/alwatr/commit/aff63c255c7ae9b6f39f5021168394df3692b049)) - -### Features - -- **`alwatr-top-app-bar`:** new components ([c370160](https://github.com/AliMD/alwatr/commit/c370160f41f5252dec2d2954906ea55be51ac21a)) -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **fields:** name property ([37d9803](https://github.com/AliMD/alwatr/commit/37d9803a7c20033e0b8f99ea5590c7f1ebdf083f)) -- **icon-box:** ass slot, highlight, pre-line, enhance typescale, enhance template ([77f4b30](https://github.com/AliMD/alwatr/commit/77f4b3094cd902a352b7c29232dc416c17b5932b)) -- **icon-box:** height transition ([8fd7526](https://github.com/AliMD/alwatr/commit/8fd7526a7d31955ce9aada0d5954f82937bd3af2)) -- **icon-box:** more dynamic options ([c5ec98e](https://github.com/AliMD/alwatr/commit/c5ec98e857ad16c4c0119290c686c8872dca1b0f)) -- **icon-box:** pointer cursor on highlighted ([11f1787](https://github.com/AliMD/alwatr/commit/11f1787d5830b75e7dba5d50427a612a1d827594)) -- **icon-button:** new content prop with click signal event ([bb5dae6](https://github.com/AliMD/alwatr/commit/bb5dae6048fcacb4a4e70aab514e4900fd5a96ea)) -- **icon-button:** new standard icon button ([b8e9836](https://github.com/AliMD/alwatr/commit/b8e98365fe3e8f1f6db1a21480257049c0294f03)) -- **image-box:** selected style ([c092e2d](https://github.com/AliMD/alwatr/commit/c092e2d0f8428c0ddd9596346d073275298d14ab)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) -- **snackbar:** command signal and controller ([6b81ed9](https://github.com/AliMD/alwatr/commit/6b81ed9f780b1fa7a34c03160259a2f36d272183)) -- **snackbar:** new ui-kit snackbar comp ([34857d9](https://github.com/AliMD/alwatr/commit/34857d93bafdcb3c902edf83d0c94e27a0210538)) -- **snackbar:** show-snackbar-command ([9916fdf](https://github.com/AliMD/alwatr/commit/9916fdff6701ab63914c483d59fa1ab5faecbfb5)) -- **soffit-pwa:** top app bar headline styles ([7f5f775](https://github.com/AliMD/alwatr/commit/7f5f7755ff98dd39913fc9d179c05085a0d5416f)) -- **soffit, snackbar:** enhance spacing ([4d421da](https://github.com/AliMD/alwatr/commit/4d421da25c691e2cd89a32d9ccf6c05fef787ba4)) -- **surface,icon-box:** disabled animation ([5723c6a](https://github.com/AliMD/alwatr/commit/5723c6aafec5bbb80f0a8613c31a081204c4754a)) -- **text-field:** sanitize number in values ([bb4a912](https://github.com/AliMD/alwatr/commit/bb4a9127b5566256a7ddae81d06801a4134290f4)) -- **toast:** action button ([4d46936](https://github.com/AliMD/alwatr/commit/4d4693600ca5b1decf8a57168a710e571e0008bd)) -- **toast:** add `toast` component ([9fa06d4](https://github.com/AliMD/alwatr/commit/9fa06d40e4ad5e91d46d8d8d77855d7bb7c384dc)) -- **toast:** close ([d9e5837](https://github.com/AliMD/alwatr/commit/d9e5837f3d61be92159e42797d0e083c6e8db7ca)) -- **toast:** improve ui ([7015c8a](https://github.com/AliMD/alwatr/commit/7015c8a49b9ef5d7c6a69532b48923d76422ff90)) -- **toast:** organaize styles ([0400c40](https://github.com/AliMD/alwatr/commit/0400c4076975882b292b160a3c32db64a1797b8e)) -- **top-app-bar:** new top app abr element ([753735f](https://github.com/AliMD/alwatr/commit/753735ff0c9cb0e17a4160a0293f1679a684b4c5)) -- **top-app-bar:** type center, small, medium, large ([4b6c696](https://github.com/AliMD/alwatr/commit/4b6c696cf4f69ae4c78004bf888ee6716767d68a)) -- **ui-kit/image-box:** checkmark on selected card ([397ef53](https://github.com/AliMD/alwatr/commit/397ef53d46e8ff535ae33c3b91aa3e8d3a294835)) -- **ui-kit/image-box:** new element ([1d73526](https://github.com/AliMD/alwatr/commit/1d73526f7d9ee9ad612a261686d3d49b83af5942)) -- **ui-kit/image-box:** selected style ([78d3976](https://github.com/AliMD/alwatr/commit/78d3976e012eaaccba9d85e1bb34520ffb5a6c19)) -- **ui-kit/image-box:** StringifyableRecord content type ([703bd90](https://github.com/AliMD/alwatr/commit/703bd90011ce61c12ba4f9075a8d4a9184dbb684)) -- **ui-kit/image-box:** update image box based on alwatr-con ([342fb5d](https://github.com/AliMD/alwatr/commit/342fb5d705c776e392077ea44d5796d1ae5d95b1)) -- **ui-kit/text-field:** value prop ([de06e45](https://github.com/AliMD/alwatr/commit/de06e45afd31b73c4f2e75011b82a9fba58a024b)) -- **ui-kit:** simple button element ([790236f](https://github.com/AliMD/alwatr/commit/790236f839e842a1ad2cd030a892797bacd68897)) -- **ui-kit:** text-field element ([f87862f](https://github.com/AliMD/alwatr/commit/f87862f9798baa6630dfdd7cc06ff6ddb9622d60)) -- **ui/style:** mobile only style ([2f6c339](https://github.com/AliMD/alwatr/commit/2f6c339926dd4f16bcdb7ad6bc569895683ab34d)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **card,focus-ring:** disable and active state ([50d3deb](https://github.com/AliMD/alwatr/commit/50d3deb2cf2020a4b6ec72c0c581fffb167a1b1a)) -- **card:** review styles ([481031c](https://github.com/AliMD/alwatr/commit/481031c93b0e49f7a541087da1fd283c5bfada36)) -- **chat:** --sys-radius vars ([b69b361](https://github.com/AliMD/alwatr/commit/b69b36162dd19446b75e9ac6c84e74581fce3d79)) -- **chat:** colors ([4cf93f6](https://github.com/AliMD/alwatr/commit/4cf93f6a5b2ee925e1b4a66f3535b4e6e7dfc1f0)) -- **icon-box:** optional description ([83ff766](https://github.com/AliMD/alwatr/commit/83ff76634d06775321ebd600de2ee630694d5ee0)) -- **icon-box:** style when desc is empty ([18fdde1](https://github.com/AliMD/alwatr/commit/18fdde1ce4e55869c491a90c603bb7059424bef5)) -- **icon-box:** target ([e108661](https://github.com/AliMD/alwatr/commit/e1086612704f8763daea1e1b0c58d21e580a4d66)) -- resolve conflict ([052314d](https://github.com/AliMD/alwatr/commit/052314d2adb3b9b0e44e54f9b8e6d60fc1827075)) -- **ui-kit/card:** filled `box-shadow` ([cf3a860](https://github.com/AliMD/alwatr/commit/cf3a86045d88bba39c6849b263e03af4bb5a247a)) -- **ui-kit/cards:** theming variables ([2ed156b](https://github.com/AliMD/alwatr/commit/2ed156b73540d2b6de42a79522729a84b44613cf)) -- **ui-kit/card:** styles ([738da92](https://github.com/AliMD/alwatr/commit/738da92a6ea6c99ab789a3af1f36beb15dbc2a04)) -- **ui-kit/focus-ring:** focus-within ([3d234bf](https://github.com/AliMD/alwatr/commit/3d234bf7055fd1e7db58877f7e8e9556e25f0e63)) -- **ui-kit/icon-box:** empty & linkable width ([e187b8a](https://github.com/AliMD/alwatr/commit/e187b8ac94dfe365145a0d1191654094d167c685)) -- **ui-kit/icon-box:** empty & linkable width ([533fccd](https://github.com/AliMD/alwatr/commit/533fccdbc867a44dd0f624d13287c16ccf825148)) -- **ui-kit/icon-button:** import path ([7770b9c](https://github.com/AliMD/alwatr/commit/7770b9c009d5362641d0da2d5cbf4f62a1b01f8c)) - -### Features - -- **cards:** update style variables ([ec2c0f2](https://github.com/AliMD/alwatr/commit/ec2c0f20e96ce6860ffc4a0c9c9ad5735c3913ab)) -- **chat-text-input:** use disabled surface for send btn ([80ae708](https://github.com/AliMD/alwatr/commit/80ae708702e5e44c9ba1978ba072f44028636066)) -- **chat-text:** filled icon color ([eb4e563](https://github.com/AliMD/alwatr/commit/eb4e5638e93ccb27e8307928a43ffbdb7483f5df)) -- **icon-box:** new style and layout ([2003e33](https://github.com/AliMD/alwatr/commit/2003e33e5095358e24fd4e07b3fc92a3b8a9d7d7)) -- **icon-box:** respect breaks in desc ([9c3aef8](https://github.com/AliMD/alwatr/commit/9c3aef811bea818bcbfd618d0c1b4f0c487f42bb)) -- **pwa:** unresolved state for show skeleton or loading ([8c4e834](https://github.com/AliMD/alwatr/commit/8c4e834b1415df14d6c76ef4d2040c60dc638b9e)) -- **standard-icon-button:** use new surface styles ([379c0f6](https://github.com/AliMD/alwatr/commit/379c0f6c1d11bd1c56f831ffc2477fac5d98e53f)) -- **type:** chat ([4b7ac95](https://github.com/AliMD/alwatr/commit/4b7ac95522dcb637ebab2eda0b8f3e0cd80d59b0)) -- **type:** define chat type ([e4a345a](https://github.com/AliMD/alwatr/commit/e4a345a7c932d88f0d13e2df1b3dd7d2ad745932)) -- **type:** define chat type ([174fb02](https://github.com/AliMD/alwatr/commit/174fb02fe287c6fee6e9783f91dfa1928dbaf2ce)) -- **type:** id in storage meta type ([146b9eb](https://github.com/AliMD/alwatr/commit/146b9eb4ebc748eda852988328b88abb75651945)) -- **ui-kit/card:** base card element ([4c88879](https://github.com/AliMD/alwatr/commit/4c888797e3cd28f4830760dc13c86a3047b55d89)) -- **ui-kit/card:** rewrite styles ([a50bc57](https://github.com/AliMD/alwatr/commit/a50bc57e76e9c7882ff04f37ddc61e1657ab5ca6)) -- **ui-kit/cards:** imporve styles & rename ([00c4b64](https://github.com/AliMD/alwatr/commit/00c4b643d70bf7c95d4e9dace5f19cf7710c8d0c)) -- **ui-kit/focus-ring:** new component ([12e19da](https://github.com/AliMD/alwatr/commit/12e19dab4b56c1b5fe30fe4c8d6f0df594822d37)) -- **ui-kit/icon-box:** inline if for target ([9ca6966](https://github.com/AliMD/alwatr/commit/9ca69663ddf924483a5ae41f1b2a0fbb062ebc1c)) -- **ui-kit/icon-box:** new component ([e13e319](https://github.com/AliMD/alwatr/commit/e13e3196f45d8f4566704e87f1c819bf3b418fd8)) -- **ui-kit/icon-box:** new component ([f381ab3](https://github.com/AliMD/alwatr/commit/f381ab343109e5a1c51df8842a77a83417c93f60)) -- **ui-kit/icon-button:** add css shadow part ([#667](https://github.com/AliMD/alwatr/issues/667)) ([c39b7a9](https://github.com/AliMD/alwatr/commit/c39b7a95874001724aa51e8f0786af41564a2c4b)) -- **ui-kit/icon-button:** use `focus-ring` ([9730f05](https://github.com/AliMD/alwatr/commit/9730f05df9a881ef14102006a67cc83848921f85)) -- **ui-kit/icon-button:** use focus ring ([cedd003](https://github.com/AliMD/alwatr/commit/cedd003eaaf3d331e7d5be6a11fe5e40e44703cd)) -- **ui-kit/style:** focus ring ([45232a9](https://github.com/AliMD/alwatr/commit/45232a9aa265ea97b4db42398468dc0ae1d5ebbe)) -- **ui-kit:** downloadable link on icon-box ([e249dba](https://github.com/AliMD/alwatr/commit/e249dba12c34665792ccd1c4215cb50e5e6a00e2)) -- **ui-kit:** elevated, filled, outlined card components ([1e9746e](https://github.com/AliMD/alwatr/commit/1e9746e7dcbfce6f7acfa828ad18418f1152ec24)) -- **ui:** add palette 260 and 270 ([a94ca31](https://github.com/AliMD/alwatr/commit/a94ca3105a4eaf38e467d57671e2b886e1f0bd66)) -- **ui:** new AlwatrSurfaceElement with elevation/tint/state simulation ([0877f4f](https://github.com/AliMD/alwatr/commit/0877f4f3dd780321f3c7498cffde66653a24de43)) - -# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **chat-avatar:** grow ([d935030](https://github.com/AliMD/alwatr/commit/d9350303d9345729ab83f410182afeb1b7823294)) -- **chat-avatar:** size with new root fs ([63c8f36](https://github.com/AliMD/alwatr/commit/63c8f3617856a2ee65ccf7b398d5635349afb019)) -- **chat-footer:** footer padding, demo \_changeLocale ([6454599](https://github.com/AliMD/alwatr/commit/6454599272bc0c1b01c223274f48b8de99655130)) -- **standard-icon-button:** style ([0cfe9ee](https://github.com/AliMD/alwatr/commit/0cfe9ee6ea3e782b95d8953686a25fdc6c7d2847)) -- **ui-kit/chat-footer:** styles ([38e3bbc](https://github.com/AliMD/alwatr/commit/38e3bbc5d35242466cd4e33bf4bcacd5c6a87368)) -- **ui-kit/chat-text-input:** direction mixin ([8f00eac](https://github.com/AliMD/alwatr/commit/8f00eac04fe64fe5aa933a37fddce93c24c1bc58)) -- **ui-kit/icon-button:** flip-rtl attr ([9607493](https://github.com/AliMD/alwatr/commit/9607493754ad454c27f26d0eba883ca4488fca67)) -- **ui-kit:** font sizes ([2569644](https://github.com/AliMD/alwatr/commit/25696442da35ba570682c31157489d5802153fbf)) -- **ui:** root sizes ([2bdf2d5](https://github.com/AliMD/alwatr/commit/2bdf2d5712905d75491f61a5d94322395987b6ab)) - -### Features - -- **chat-\*:** scrollbar and gaps ([c91e2d6](https://github.com/AliMD/alwatr/commit/c91e2d6ec5a4dcc80b2ae71f800dae46cdd8c1f8)) -- **chat-avatar:** new style ([ea11421](https://github.com/AliMD/alwatr/commit/ea114213ad811206897c57f885b2973182a62f94)) -- **chat-bubble:** rewrite with new styles ([f4c5f01](https://github.com/AliMD/alwatr/commit/f4c5f0154935a1df77493f309ac9ce9b072ce5a2)) -- **chat-bubble:** side attrib ([5c36f8d](https://github.com/AliMD/alwatr/commit/5c36f8d5093659b7d6b6a251822294530f235fd0)) -- **chat-list:** new element for list of chats ([3ddae05](https://github.com/AliMD/alwatr/commit/3ddae05cd0bcebb855327f0f449d3ee7c7e576cd)) -- **chat-list:** scrollbar style ([a02074d](https://github.com/AliMD/alwatr/commit/a02074d894d3d812bfe8fb63be37f0edde931c00)) -- **chat-list:** self property and gap and spaces ([9d9edca](https://github.com/AliMD/alwatr/commit/9d9edca5a9a1c4ae1cf9f085ca3da92dfad7acae)) -- **chat-message:** ChatTextMessage type ([227dda3](https://github.com/AliMD/alwatr/commit/227dda3611049f787bfaee2f4443420b005475e2)) -- **chat-message:** gap and spaces ([0b1043a](https://github.com/AliMD/alwatr/commit/0b1043a9a9ba2c67b664ca2edc7ad8610b05c210)) -- **chat-message:** new chat element ([12f9b72](https://github.com/AliMD/alwatr/commit/12f9b724ec35a55d5e7a1d8495dd11ba0f6a77a4)) -- **chat-text-input:** inputElement ([4abfdd6](https://github.com/AliMD/alwatr/commit/4abfdd6c4e73e5db588e6f099fc9d5e1b8cd06db)) -- **chat-text-input:** style ([8c302cc](https://github.com/AliMD/alwatr/commit/8c302ccd7045a91f596a6ddae601ae87a26a8fc5)) -- **chat:** use new color system ([045b188](https://github.com/AliMD/alwatr/commit/045b18891ca8b9ba0a556be6c621747cb8d0a639)) -- **chat:** use new spacing system ([4e0d44e](https://github.com/AliMD/alwatr/commit/4e0d44e419973e28d5584e609f8efbc68f07fcd2)) -- **chat:** use system shape var ([dcff276](https://github.com/AliMD/alwatr/commit/dcff276ec28e345306f1a278a69bd64c05c5e130)) -- **icon-button:** enhance styles and motion ([4b4a301](https://github.com/AliMD/alwatr/commit/4b4a301f53a059cc5faa4a75b22fc079f750bc38)) -- new ui design system ([8c9c8ba](https://github.com/AliMD/alwatr/commit/8c9c8ba29c477838f3e7034b902f4e0dafabd17c)) -- **page-chat:** new demo ([451d63f](https://github.com/AliMD/alwatr/commit/451d63fc0b904bb780c898c2909b1d7a116b353f)) -- **ui-kit/chat-footer:** build base ([30cf89a](https://github.com/AliMD/alwatr/commit/30cf89aac3a68e0fc028eb7a8a227efce85ba892)) -- **ui-kit/chat-footer:** component ([7041047](https://github.com/AliMD/alwatr/commit/70410476ff7846b14873dfdf6299d528e1de2f61)) -- **ui-kit/chat-footer:** new component ([5151d1c](https://github.com/AliMD/alwatr/commit/5151d1c50c1fd63e1bee479220a4363a9ab800e3)) -- **ui-kit/chat-text-input:** flex grow ([b8837ff](https://github.com/AliMD/alwatr/commit/b8837ff9772959a585e4862f48b9b5da390da561)) -- **ui-kit/chat-text-input:** improve ([28f08a9](https://github.com/AliMD/alwatr/commit/28f08a91ff49ac4567c86fea7d3bd4458d69cc4a)) -- **ui-kit/chat-text-input:** translations ([3d03d3d](https://github.com/AliMD/alwatr/commit/3d03d3d56d9fef34b35c76568fb9d7ec7069f1ee)) -- **ui-kit/chat-text-input:** typography ([e67113e](https://github.com/AliMD/alwatr/commit/e67113ec2e3c8e32a5e700162755995d852aec66)) -- **ui-kit/icon-button:** component ([7db86bf](https://github.com/AliMD/alwatr/commit/7db86bfa678d64237951a8c8002c38dd51d3d082)) -- **ui-kit/icon-button:** icon flip-rtl ([f6427b6](https://github.com/AliMD/alwatr/commit/f6427b62315389cea308f2a522e358af8b9838cd)) -- **ui-kit:** elevation sample ([ccd9e8a](https://github.com/AliMD/alwatr/commit/ccd9e8a9c7cc94a830a03bf11ddbf46891300f68)) -- **ui/chat:** new alwatr-chat element ([f711e12](https://github.com/AliMD/alwatr/commit/f711e12317a263d6e1d4bfc52dae54348cf64923)) -- **ui/ui-kit:** chat text input component ([586aefd](https://github.com/AliMD/alwatr/commit/586aefd7fcbfd520f36f035415dbb76d5ffa324f)) - -# [0.26.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/alwatr/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -### Features - -- **ui-kit:** index file ([5888dde](https://github.com/AliMD/alwatr/commit/5888ddedc38da7a8b6ae07e3826c9bc52c91680f)) -- **ui-kit:** new package ([418b3a6](https://github.com/AliMD/alwatr/commit/418b3a66157658be3b88635947d5121cdc9a757f)) diff --git a/ui/ui-kit2/README.md b/ui/ui-kit2/README.md deleted file mode 100644 index d67ab7edd..000000000 --- a/ui/ui-kit2/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Alwatr UI-Kit 2 - `@alwatr/ui-kit2` - -Alwatr UI Elements Kit. - - diff --git a/ui/ui-kit2/fab/extended-fab.ts b/ui/ui-kit2/fab/extended-fab.ts deleted file mode 100644 index 12c7afcd4..000000000 --- a/ui/ui-kit2/fab/extended-fab.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {AlwatrDirective, directive, html, nothing, type PartInfo} from '@alwatr/fract'; - -import {icon, IconContent} from '../icon/icon.js'; - -export interface ExtendedFabContent { - label: string; - icon?: IconContent; -} - -export class AlwatrFabExtendedDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - override render(content: ExtendedFabContent): unknown { - this._logger.logMethod?.('render'); - - return html` `; - } -} - -export const alwatrFabExtended = directive(AlwatrFabExtendedDirective); diff --git a/ui/ui-kit2/fab/fab.ts b/ui/ui-kit2/fab/fab.ts deleted file mode 100644 index 6ecbfca9b..000000000 --- a/ui/ui-kit2/fab/fab.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {AlwatrDirective, classMap, directive, html, type PartInfo} from '@alwatr/fract'; - -import {icon, IconContent} from '../icon/icon.js'; - -export interface FabContent { - icon: IconContent - - /** - * @defaultValue 'medium' - */ - type?: 'small' | 'medium' | 'large'; -} - -export class AlwatrFabDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - override render(content: FabContent): unknown { - this._logger.logMethod?.('render'); - content.type ??= 'medium'; - - return html` `; - } -} - -export const alwatrFab = directive(AlwatrFabDirective); diff --git a/ui/ui-kit2/icon-button/icon-button.ts b/ui/ui-kit2/icon-button/icon-button.ts deleted file mode 100644 index 4f680e373..000000000 --- a/ui/ui-kit2/icon-button/icon-button.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {html} from '@alwatr/fract'; - -import {icon, type IconContent} from '../icon/icon.js'; - -export interface IconButtonContent extends IconContent { - onClick(event: MouseEvent): void; - disabled?: boolean; -} - -export const iconButton = (content: IconButtonContent) => html``; diff --git a/ui/ui-kit2/icon/icon.ts b/ui/ui-kit2/icon/icon.ts deleted file mode 100644 index 7155c7e17..000000000 --- a/ui/ui-kit2/icon/icon.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {AlwatrDynamicDirective, directive, html, unsafeSVG, nothing, type PartInfo} from '@alwatr/fract'; - -import type {MaybePromise} from '@alwatr/type'; - -export type SvgContent = MaybePromise; - -export interface IconContent { - svg: SvgContent; - flipIconInRtl?: boolean; -} - -export class IconDirective extends AlwatrDynamicDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(content: IconContent): unknown { - this._logger.logMethodArgs?.('render', content); - - if (content.svg instanceof Promise) { - content.svg.then((_svg) => { - this.setValue(this._renderSvg(_svg)); - }); - return this._renderSvg(); - } - else { - return this._renderSvg(content.svg, content.flipIconInRtl ? 'rtl:-scale-x-100' : ''); - } - } - - protected _renderSvg(svg?: string, customClass = ''): unknown { - return html`
    ${svg ? unsafeSVG(svg) : nothing}
    `; - } -} - -export const icon = directive(IconDirective); diff --git a/ui/ui-kit2/navigation-bar/navigation-bar.ts b/ui/ui-kit2/navigation-bar/navigation-bar.ts deleted file mode 100644 index 957c8c3c8..000000000 --- a/ui/ui-kit2/navigation-bar/navigation-bar.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {AlwatrDirective, html, noChange, directive, mapObject, when, type PartInfo} from '@alwatr/fract'; -import {l10n} from '@alwatr/i18n2'; - -import {icon, type IconContent} from '../icon/icon.js'; - -export interface NavigationBarContent { - selected: string; - itemList: Record; -} - -export class AlwatrNavigationBarDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(content?: NavigationBarContent): unknown { - this._logger.logMethodArgs?.('render', content); - if (content === undefined) return noChange; - - return html` -
    `; - } - - protected _renderNavItems(content: NavigationBarContent): unknown { - const navItemList = mapObject(content.itemList, (item, key) => { - const _label = item.label ?? l10n.message(item.labelKey); - return html`
    ${icon(item.icon)}
    ${when(_label, () => html`
    - ${_label}
    `)}
    `; - }); - - return navItemList; - } -} - -export const alwatrNavigationBar = directive(AlwatrNavigationBarDirective); diff --git a/ui/ui-kit2/navigation-drawer/navigation-drawer.ts b/ui/ui-kit2/navigation-drawer/navigation-drawer.ts deleted file mode 100644 index 896a8279e..000000000 --- a/ui/ui-kit2/navigation-drawer/navigation-drawer.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {AlwatrDirective, directive, html, mapObject, when, type PartInfo, classMap, noChange} from '@alwatr/fract'; -import {l10n} from '@alwatr/i18n2'; - -import {icon, IconContent} from '../icon/icon.js'; - -export interface NavigationDrawerContent { - selected: string; - title: string; - itemList: Record; -} - -export class AlwatrNavigationDrawerDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(content?: NavigationDrawerContent): unknown { - this._logger.logMethod?.('render'); - - if (content === undefined) return noChange; - - return html` - - `; - } - - protected _renderNavItems(content: NavigationDrawerContent): unknown { - const navItemList = mapObject(content.itemList, (item, key) => { - const _label = item.label ?? l10n.message(item.labelKey); - return html`
  • ${icon(item.icon)}${when(_label, () => html`
    ${_label}
    `)} - ${when(item.badge != null, () => html`
    ${item.badge}
    `)}
  • `; - }); - - return html`
      ${navItemList}
    `; - } -} - -export const alwatrNavigationDrawer = directive(AlwatrNavigationDrawerDirective); diff --git a/ui/ui-kit2/navigation-rail/navigation-rail.ts b/ui/ui-kit2/navigation-rail/navigation-rail.ts deleted file mode 100644 index 3eba54404..000000000 --- a/ui/ui-kit2/navigation-rail/navigation-rail.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {AlwatrDirective, classMap, directive, html, mapObject, noChange, when, type PartInfo} from '@alwatr/fract'; -import {l10n} from '@alwatr/i18n2'; - -import {icon, type IconContent} from '../icon/icon.js'; - -export interface NavigationRailContent { - selected: string; - itemList: Record; -} - -export class AlwatrNavigationRailDirective extends AlwatrDirective { - constructor(partInfo: PartInfo) { - super(partInfo, ''); - } - - render(content?: NavigationRailContent): unknown { - this._logger.logMethodArgs?.('render', content); - if (content === undefined) return noChange; - - return html``; - } - - protected _renderNavItemList(content: NavigationRailContent): unknown { - const itemList = mapObject(content.itemList, (item, key) => { - const _label = item.label ?? l10n.message(item.labelKey); - return html`
  • -
    ${icon(item.icon)}
    - ${when(_label, () => html`
    ${_label}
    `)}
  • `; - }); - - return html`
      ${itemList}
    `; - } -} - -export const alwatrNavigationRail = directive(AlwatrNavigationRailDirective); diff --git a/ui/ui-kit2/package.json b/ui/ui-kit2/package.json deleted file mode 100644 index d86e6c0c8..000000000 --- a/ui/ui-kit2/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@alwatr/ui-kit2", - "version": "1.0.0", - "description": "Alwatr UI Elements Kit", - "keywords": [ - "element", - "ui-kit", - "ui", - "lit", - "lit-element", - "web-component", - "typescript", - "esm", - "alwatr" - ], - "main": "index.js", - "type": "module", - "types": "index.d.ts", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "license": "MIT", - "files": [ - "**/**/*.{d.ts.map,d.ts,js.map,js,md,css}" - ], - "private": true, - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/ui-kit2" - }, - "homepage": "https://github.com/AliMD/alwatr/tree/main/ui/ui-kit2#readme", - "bugs": { - "url": "https://github.com/AliMD/alwatr/issues" - }, - "dependencies": { - "@alwatr/i18n2": "^1.0.0", - "@alwatr/signal2": "^1.0.0", - "@alwatr/util": "^1.0.0", - "tslib": "^2.6.2" - } -} diff --git a/ui/ui-kit2/top-app-bar/center-top-app-bar.ts b/ui/ui-kit2/top-app-bar/center-top-app-bar.ts deleted file mode 100644 index c00f2c743..000000000 --- a/ui/ui-kit2/top-app-bar/center-top-app-bar.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {html, nothing} from '@alwatr/fract'; - -import {iconButton, type IconButtonContent} from '../icon-button/icon-button.js'; - -export interface CenterTopAppBarContent { - title: string; - - startIcon?: IconButtonContent; - endIconList?: IconButtonContent[]; - - tinted?: number; - elevated?: number; -} - -export const centerTopAppBar = (content: CenterTopAppBarContent) => html`
    - - ${content.startIcon ? iconButton(content.startIcon) : nothing} - -
    ${content.title}
    - - - ${endIconListTemplate(content.endIconList)} -
    -`; - -export const endIconListTemplate = (iconList?: IconButtonContent[]) => { - return iconList?.map((icon) => iconButton(icon)); -}; - diff --git a/ui/ui-kit2/top-app-bar/large-top-app-bar.ts b/ui/ui-kit2/top-app-bar/large-top-app-bar.ts deleted file mode 100644 index 1c410de08..000000000 --- a/ui/ui-kit2/top-app-bar/large-top-app-bar.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {html, nothing} from '@alwatr/fract'; - -import {endIconListTemplate, type CenterTopAppBarContent} from './center-top-app-bar.js'; -import {iconButton} from '../icon-button/icon-button.js'; - -export const centerTopAppBar = (content: CenterTopAppBarContent) => html`
    - - ${content.startIcon ? iconButton(content.startIcon) : nothing} -
    - - ${endIconListTemplate(content.endIconList)} -
    ${content.title}
    -
    -`; - diff --git a/ui/ui-kit2/top-app-bar/medium-top-app-bar.ts b/ui/ui-kit2/top-app-bar/medium-top-app-bar.ts deleted file mode 100644 index d7ac51a56..000000000 --- a/ui/ui-kit2/top-app-bar/medium-top-app-bar.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {html, nothing} from '@alwatr/fract'; - -import {endIconListTemplate, type CenterTopAppBarContent} from './center-top-app-bar.js'; -import {iconButton} from '../icon-button/icon-button.js'; - - -export const mediumTopAppBar = (content: CenterTopAppBarContent) => html`
    - - ${content.startIcon ? iconButton(content.startIcon) : nothing} -
    - - ${endIconListTemplate(content.endIconList)} -
    ${content.title}
    -
    -`; - diff --git a/ui/ui-kit2/tsconfig.json b/ui/ui-kit2/tsconfig.json deleted file mode 100644 index ea1a237ab..000000000 --- a/ui/ui-kit2/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": ".", - "outDir": ".", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - // files, include and exclude from the inheriting config are always overwritten. - "include": ["**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/fract"}, - {"path": "../../core/type"}, - {"path": "../../core/i18n2"}, - {"path": "../../core/signal2"}, - {"path": "../../core/util"}, - ] -} diff --git a/uniquely/com-api/CHANGELOG.md b/uniquely/com-api/CHANGELOG.md deleted file mode 100644 index a5d7a0c85..000000000 --- a/uniquely/com-api/CHANGELOG.md +++ /dev/null @@ -1,127 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/com-api - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **com-api:** default storage token in config ([67259e4](https://github.com/AliMD/alwatr/commit/67259e40d42a504bb72a0396dbf674ef2bafafdf)) -- **com-api:** user-list-inc-order permission ([91beb27](https://github.com/AliMD/alwatr/commit/91beb27cbe372e6b66c99928e26fa4679b751c23)) -- **storage-server:** rollback json extension as correct way ([47e6bc2](https://github.com/AliMD/alwatr/commit/47e6bc22076fd4835a1604370318792985472233)) - -### Features - -- **com-api:** admin user-list-inc-order route ([852d7cc](https://github.com/AliMD/alwatr/commit/852d7ccf4278adda574db211ed5ae0baa632e28a)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **com-api:** `patch-user`route ([d8523ec](https://github.com/AliMD/alwatr/commit/d8523ec469d69ea7eb487ff278a858f7329530a9)) -- **com-api:** build issue ([4e02a3b](https://github.com/AliMD/alwatr/commit/4e02a3beae16eebdada7c9a9b88b2fa1eeb1601b)) -- **com-api:** new `api` side effects ([877534e](https://github.com/AliMD/alwatr/commit/877534e2e685afaf4afa81e63b816b85caba67b9)) -- **com-api:** remove admin/access token ([f56e2c2](https://github.com/AliMD/alwatr/commit/f56e2c2a2c3eb2edefa61135e1bab4c181d1a27b)) -- **com-api:** remove allowAllOrigin ([9f478ad](https://github.com/AliMD/alwatr/commit/9f478adb00808cf213c2a486d6599ee71833c524)) -- **com-api:** use 'validateUserAuth' to check the user authentication & authorization ([49223f5](https://github.com/AliMD/alwatr/commit/49223f5c642448789b6d7bdc39ec59f9042acba2)) -- **com-api:** use `validateUserAuth` when getting the list of users ([297f71e](https://github.com/AliMD/alwatr/commit/297f71e74ebb4e2fa46221ddf999a0e4a9e0ed0a)) -- **com-api:** user list return data ([163a122](https://github.com/AliMD/alwatr/commit/163a122fe806383a3dc4dd86fd845a7f91c9ae5e)) -- **com-api:** user list return data ([490d7ea](https://github.com/AliMD/alwatr/commit/490d7ea1215120b929fe52919ad90304a985a5a8)) -- **com-api:** user new crypto pre configs and new env names ([244b418](https://github.com/AliMD/alwatr/commit/244b418edc01561f43860eb90aaf111a12dc8a7d)) -- **com-api:** user-list permission ([e622354](https://github.com/AliMD/alwatr/commit/e622354924dd7a8e8dc8ff69bab9bc827aec103d)) -- **com-api:** user-list route ([4cccd35](https://github.com/AliMD/alwatr/commit/4cccd3580f9ada0e4262072dddc483d5c204b170)) -- **type/com:** import issue ([2523ed4](https://github.com/AliMD/alwatr/commit/2523ed440a71cf9a2804e519785314cb78ff5b12)) - -### Features - -- **com-api:** `user-list` route ([c2481b7](https://github.com/AliMD/alwatr/commit/c2481b765544c3b3dbbbc4ff5314c35c63fd798d)) -- **com-api:** compatible with nginx-storage 1.6 ([3220f5d](https://github.com/AliMD/alwatr/commit/3220f5d6804119b6457c7aa9c6d9e110a893f138)) -- **com-api:** make root user in first time ([3e15c35](https://github.com/AliMD/alwatr/commit/3e15c3509b59152892d692cf0c8b5b37068460ad)) -- **com-api:** refactor new patch user and admin strategy ([e38c9ae](https://github.com/AliMD/alwatr/commit/e38c9aead8102d66557f3ec4a2960a0459646bab)) -- **com-api:** refactor storage path and auth ([a8e79c5](https://github.com/AliMD/alwatr/commit/a8e79c5b58a6a1f35b1e9f77933b59ef2327c54b)) -- **com-api:** review and refactor type and admin permission ([3689d2b](https://github.com/AliMD/alwatr/commit/3689d2b2cbd31bf39f24e3209c7101f148f9c527)) -- **com-pwa:** updateOrderCalculate ([4c17096](https://github.com/AliMD/alwatr/commit/4c17096f9fa5c429ccba4895fab29526409a8bc9)) -- **com-pwa:** validateUserAuth root support ([5f7d058](https://github.com/AliMD/alwatr/commit/5f7d05866e0b162d262b08363e33bca6bd6657b0)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **com-api:** build issue ([0fd8e35](https://github.com/AliMD/alwatr/commit/0fd8e35546ebb5f45155286fd89270d2dc07bcb7)) -- **com-api:** import route ([4f6f9e0](https://github.com/AliMD/alwatr/commit/4f6f9e01777ef89db2e0e7b623a17da00154f0fe)) -- **com-api:** remove require token ([08a741e](https://github.com/AliMD/alwatr/commit/08a741ef925cf3d13d788cca33143d3a212bb5d3)) -- **com-api:** set duration for token ([b26f0c4](https://github.com/AliMD/alwatr/commit/b26f0c404130b11f8871bf8b51347b4b3ababeeb)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -### Features - -- **com-api:** add some new functions & edit config ([09e887b](https://github.com/AliMD/alwatr/commit/09e887b608f5ffc97b2ac52d9196a8756125a9c8)) -- **com-api:** demo user ([64c3909](https://github.com/AliMD/alwatr/commit/64c3909f53fd6a363e5523560abc0250feb4c396)) -- **com-api:** make user by admin ([9fc8b98](https://github.com/AliMD/alwatr/commit/9fc8b987cc32a29e1b4de273694a592a8acec1ff)) -- **com-api:** set user info in user-list patch ([4530d98](https://github.com/AliMD/alwatr/commit/4530d982459a2ac10e51c73d5306ae8424fff07b)) -- **com-api:** update price ([4b8eb4e](https://github.com/AliMD/alwatr/commit/4b8eb4e17a2aa562c0ad856bfc957a2099583c2f)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **com-api:** add product method on demo.http ([2d67d67](https://github.com/AliMD/alwatr/commit/2d67d67faa806f1fb89dd5279757852f57d7114b)) -- **com-api:** demo.http ([a2eba5c](https://github.com/AliMD/alwatr/commit/a2eba5ce13e14eeb58e3efefbbda764c4166251d)) -- **com-api:** demo.http tokens ([f5c27ca](https://github.com/AliMD/alwatr/commit/f5c27ca7190baf2e0a05d33b3e4fbeca18ad804d)) -- **com-api:** imports path ([4120038](https://github.com/AliMD/alwatr/commit/4120038483e9f89fb23c00ea6042df65140beb8d)) -- **com-api:** improve demo-http data ([71debc0](https://github.com/AliMD/alwatr/commit/71debc0838595878fe11f6b42f423dd2c8abcf69)) -- **com-api:** name of product list on demo-data.http ([9340b3c](https://github.com/AliMD/alwatr/commit/9340b3c578a4340ec6b4a0a4ef1adb6bb67e16b1)) -- **com-api:** patch-product-list storage param ([20ef97e](https://github.com/AliMD/alwatr/commit/20ef97eb20840e91f12c80798bd26b227239518a)) -- **com-api:** put order storage path prefix ([63b4179](https://github.com/AliMD/alwatr/commit/63b41799d09a19d8b75474f9d3a1ce7b40a97f48)) -- **com-api:** remove image cdn path ([659485e](https://github.com/AliMD/alwatr/commit/659485ece4dcaa084474a6b80ed943cbb9ce090b)) -- **com-pwa:** request-redirect for shipping page ([4a421e5](https://github.com/AliMD/alwatr/commit/4a421e5e153fe1ca602e5e926d83654053754f56)) -- configs ([00f85f5](https://github.com/AliMD/alwatr/commit/00f85f525f07334544cc9e007c49f2343ba8cec3)) - -### Features - -- **com-api:** add product route ([487a2c0](https://github.com/AliMD/alwatr/commit/487a2c0fa46933ce8efa9325fbc6802e372ff236)) -- **com-api:** change api in demo.http ([b9d2602](https://github.com/AliMD/alwatr/commit/b9d2602fbf11fa5316276a990e6fc271ed8120f2)) -- **com-api:** enhance config with prefixes ([2cd9443](https://github.com/AliMD/alwatr/commit/2cd944345f2bfab09f8dddd4596442290adad960)) -- **com-api:** get price list route ([39d870b](https://github.com/AliMD/alwatr/commit/39d870b1bc7c30a6a9cd2e1f5f79db3860b6ac8b)) -- **com-api:** multi storage support for product route ([0979d42](https://github.com/AliMD/alwatr/commit/0979d42c6516781b645ded1c004f74b82ac4b82a)) -- **com-api:** patch price list route ([df60e91](https://github.com/AliMD/alwatr/commit/df60e91433b3457860b0a08bb62616372291dfeb)) -- **com-api:** review and update all routes ([957eca9](https://github.com/AliMD/alwatr/commit/957eca96a8c8a64cbd7775c460b587424d103b48)) -- **com-api:** seprate http file for add product ([fd9bb5e](https://github.com/AliMD/alwatr/commit/fd9bb5e6696621619df6bd8f96b051f811f13381)) -- **cop-api:** requireToken ([d1e3c61](https://github.com/AliMD/alwatr/commit/d1e3c617954eaa125afb20e1b22c9e3f7f69721b)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- build com-cpi ([6419e4f](https://github.com/AliMD/alwatr/commit/6419e4f543bdbfab3029d429d6ab30418498befa)) -- **com-api:** merge order and product storage client ([cd9ebbe](https://github.com/AliMD/alwatr/commit/cd9ebbebc45e5fa3c036264ed7b80cc919229bb0)) -- **com-api:** storage config ([c08d349](https://github.com/AliMD/alwatr/commit/c08d34982706996e6ff9d26a1290e1c3a813da56)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -### Features - -- **com-api:** htop auth on order routes ([4f399ec](https://github.com/AliMD/alwatr/commit/4f399ec6139416d1ff227199e882ccc516e6ccf6)) -- **com-api:** routes ([5900ac0](https://github.com/AliMD/alwatr/commit/5900ac01086075dc2c44e06f9c3e39302b94ce71)) -- **comp-api:** enhance and review ([38b680e](https://github.com/AliMD/alwatr/commit/38b680ed2192b7b53e4cb5002d80125607253b49)) -- update routes with new types ([76a2710](https://github.com/AliMD/alwatr/commit/76a271081ac0011ab0a7594127997806073b12d0)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **com-api:** update home route ([0497f37](https://github.com/AliMD/alwatr/commit/0497f37bb28f41ef2dfc4835324a3d8f42b1b687)) -- **services:** app name in home page ([6feab58](https://github.com/AliMD/alwatr/commit/6feab58b5655c7a09150ec83adf9f3bd8fe976b4)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/alwatr/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -### Features - -- **com-api:** update packages ([0bc7c0c](https://github.com/AliMD/alwatr/commit/0bc7c0c868ea8821465975bcc07fa0c644f241d1)) -- **uniquely/com-api:** improve types ([469c36a](https://github.com/AliMD/alwatr/commit/469c36aec2fd991b30c63753f6d6a13a8d063bfb)) -- **uniquely/com-api:** new uniquely service ([5e6de49](https://github.com/AliMD/alwatr/commit/5e6de49f2bb448042954bd86f12048c8f00f9755)) -- **uniquely/com-api:** types ([b6af7ef](https://github.com/AliMD/alwatr/commit/b6af7ef59b33accf901dda07c02f24399506e132)) diff --git a/uniquely/com-api/README.md b/uniquely/com-api/README.md deleted file mode 100644 index 860069f79..000000000 --- a/uniquely/com-api/README.md +++ /dev/null @@ -1 +0,0 @@ -# Customer Order Management API diff --git a/uniquely/com-api/demo.http b/uniquely/com-api/demo.http deleted file mode 100644 index 89e1a6ad1..000000000 --- a/uniquely/com-api/demo.http +++ /dev/null @@ -1,359 +0,0 @@ -U2FsdGVkX1+CowYZkxjHs9Jh7pa5SIwSvJiW19Nbkk7lE903peaCfefdGGc9A2K3 -ydQgXKjJxIfoheyMmsNQJ5nFhXDbww+mMO/WN6UKEO0gC/TkMvgifyRE+FluH8yL -8i6G9tLK2+98T4L699ay3Kf7dfWGhd5HIR/ikUKNbFtKJDqpY1pvfbunynomBcSy -FPEp06g/PD+8xlScGAzvR8h7pTxBgwAP5kcXZ9IrEuRHP/4fP1JQ4UxwpKFkoGgc -1rL7NiGcuRd9IOp5SzxazJpeXavNR5E6WIqiQeJF4q1rTOea6BrEiAisiZLbuU/I -sEBoX3QDHphBAR408tiXUukPqEJvx0Eadpf+GI8TVMi2zrRTa06CmBPOyntLtjjt -BJ+W2UohAXlifG6c1wyi7MJZQwwcje46CaFhegO0y5rMr3E63Mm1ue5FHdN1pclM -vN8DmJXTyIBcrM/f4GN/Xq07/+5rgV8VaKjfjkMFPqA07Tk+L8RRAorOhgWDZJMw -owbZaWlOq2bzH4t4gxHtm4BvFTluBZPFf4wZ1P8G6JEYAE63ez8xDvtcMlua13lj -FmmWcEeaFWfqjq4bYVkxa9FZ0JtPZ8OaAYjsBzlRJE9Fm8mKVYjJeetWWLEGGJBJ -YnmXs66hptoOZ9kOUQW4oGwuLZ4B+KiGEEYcV1gyHW3txhXnCuD1CbrKv65XCbAN -FZd6IM3aUe9y8jl15/0DwyvIj+03XXiZ3ZHVDfLKxbUw1L1mthJzMxKYsvv/uUbS -MWTgRB88fOSUlKL6UP1YIsL7FbEDtOq8gHRFVi6GImv8DGyCCWrwSdDc9g3p3x+P -CQqYBrdsKGfRxkrachbdtYw9OC8IysixxXkumQFwkJn/6VzoFXywkoT9N8ridi18 -G0NCRLidSaE2jrwmuWh8BABl5G70dg1sUNYXnQrL2WKrEAcQhMWeFO9oNbG82AzG -PI5iP5a+BJ9jMlUKlX7odqs8Eys3w9143hKAzQpfMqOlQK4BWc66+y0OiLL/IQmd -fVu9jBTEtfbZS49cYHzvf+sfBq0iCEnZMqcFfNl7fTVSoaO1aOVNaFw3YTuZOr9K -WGrNVp4XNAIqQ5bdK++qtlawk0hm+XkrEncvKFTBAAh4k35CsbvrAipZvR3X+6xl -C/tUKMBRfNNFBWEjwj+4CX44Y3isVE409S4QFVjO3JqkZbTyqoLRqkQwLjy6NFPQ -GnfOoPqNkK7YoKOfmZmVdst0jlnhtoCAOzV3xyQUjO5vUz4S48lpqboaiAXv0HrF -YJWDDBf2Tp1+NdR/tttcqsAxWa/9n+9EZHEkH3/lZ/wMkElngEf9sQ5Dgyd4SWX/ -9HGZQOTUmVCBWbUmhLGOF9wF4OL/qveEIrY8I9uuhhtjbxpNzS+6dR0jJqxaV1JL -H31GqHbw+GD2kJycP3r9uku3KtKDqNjIqqO2okdH1W5mF0T24VE16/oXo+taE5n3 -E1oXaBK8pQTA/IyPuBinhCDM3Ymlj1tmWOU7ExG/Yv9wVlXRVYIhpz2e4zTOvAQx -SwZSsOdnXrJTAaw/84C+FL2SKn5Jg5mE920n9DPad2uMDpOLi5MM8Tppv21TYPgv -fcI4l+ns3eIzmXa7LRMKl8M2bxICiQAIzlNJa98scQNdHRy2EIYS8kPkVCxMtihh -QKd/SdGmUOolp+W0S28WVylwD9l02jUEEg1Yy7L/QrlGYEDvROejl0dtfJAtjGgh -zape2GXBF5ovfChDgmWRDyyHT0IxByiTi4aiIr4ZbZmAfuvSGsZjmY2U8HnjOuJp -5H0sq1QLGqdxWhQXb5YUiEBYYTcV5omwDKVEiZ/yy2Wt0yH+9hwAE3A7EaGbt30+ -RKPt0v0HHRBzyiYdTzvzkwJE6YgOrRsAZ/zrQe7rk+hZShHovHM94XobA86CNAjN -R3MsFwXqALqFBXNePKD19TEVFDMGnMBll5WRd9RpzU4y8u6c5bddNhe9dYJApp3i -LuPHFpvLB1BcyQ64hKrk84d+ZiurXLZ/PTBXv+UHrUE+OdP0e5EiIzokoAUIYuo2 -51N9d/doUFhYDIxfsKu4oSfDYdnhMzL3nZQ7YWZ8jpG79KYqa1gmb13C7fEP1po/ -ixfw2bJkEScsOQ4V/othMfXrzTQuL6u3qBg+jz+hAogYQFNAA7HwxhOBtZanDLXy -HiSECnjG92jczezj42zwLB8jigrWUfMWTegRFuPMdXFvW1dXNxZTiJr4SMxo04JX -Ft4wa7NFxG+5UEtJ96bfYhir0d4wMxMHNXpr4gRP6q0pTCJ9hJzTfA4ByHgzktr9 -7m+3UeoETQxZ9UzUV/qi9d/GmZbzRgWEoVhiaoCO98TYs3wDONSmujbwXcWiKxaq -rr4Y4MB2y6xdMKIue8K7sLmRNm4kqjzE7dfEkMRVoLycLWKRwf3OQIbS1qLlzdBd -nRQWbfYcwIs74bLINXIytgNycanbyEXR9MihYRP4PsRVEb+4Bn2mLzpNpxofZguQ -D9wbaSaU9S38k1giI/lX6o4B4asJXU2kugGwmx3lwnr3iwI6eEhIDg3VzQKDT+qS -SQPZ6wlHSffIyDIkd6cMZsvzKPHhfd5HEvN17N6YqrcPFLUceC6R1mWAJWWt3mFM -ZjYVcXD8GQC4EqzPVVhgg2EzrBDeMtOVrU6/+MBC2I59/2whX1zbnOkWL0YWYRTc -iqpawzH4/4dOyu0JETCtZnvXJu2G5BppDWk8knDWsLWT9WUU5lxOlDagiMiRefan -xNfU4yU8GXnVjdhU7pIIHikX7fBlHAvLjYy/jQ5QfgtCfe1RMeboYIhIFqyaXOP1 -+SyUJ0lC2p115Efh9tRxAN9tX8ndq860jpGiGmbuTxs997IUzJ04jWRkae3+fBkn -qht1BVpsf3NPb3WBxxjiqi3e3CQDStpXhRUfkI54BSYQkXkvz8LjHeti0MJ+iINT -MmdIni8QkUbPK+bESCRSbXMqnpD5MmwTO5Cq5LeYVhoYJtfJ/iRKcjaZLw7xelaj -9+6bwcLR8Ph20hduiDBbs+l7VlLtK10yePVrMek31hrLC95Gadz0oBGlyWf45YYv -xPQhwA0poIGV8QLt+YtNf/ayXPStY4xE/4GW+gEFKYKHwgqh8BjpHBFEldkZh4mC -ffC/DY4lKknti0Xmm01vdgZOW32sOj6hUduQ0A0r2fjhGrlgtlH3At06M0Rprg8I -H0dwPTpDbeDiWjrBhK+3jruYCdveoNUapoUG5x7qi0/HJ5rhpYhsaeZLRlXmxUEH -Jfk8ZjpyY4EVl6jOoXqI/XPy1mtFe6yGM0wGXjvazPDOi8P/DfBeMbymDZFQ9lmQ -jmU2GD2IiOVL6DsTn3gAv7oNQF6vV0E0ecOjzUOaPKRb5reBCBKkeKxf4TbSgOj2 -qG0hU03ZWplPaTzPDKl+0FvQoTPY9Lkt1FWWuGvQubkw4gebVRqq6xl3M5YmPpWe -0vVSAXW8GfgrpWDeR9FDTUoA3ETvMgllJ3PbR3N/dLQc1jh2zurBB+uzOXTHb9Uf -5AR3i77eoI+8XwoxlPIycXxZPZL084IQHUa+MFpb5YlPXYNrPI8I22wpAa4JX6+Z -EMGEJLm/zbCRXneLwhgNTvf/WZsdSRe/XdjXm7YiiesUaXutf/bEHYCTzGQYseR5 -PoiPubfHuAtO9/Yd5qs8QRCNlZ6WQv8XC+S7mcmw43fpF5CSDMJP6aQ+cvvvdM6W -4HVZymhw5Zqf3kuD1zRJEwolPp6jMIP9l2ZA2P/ehb45Z0/kpR9gkl2/qwJfZgsG -xG54tM0Kys6x/lAtUYgIuLjnRjn45SCYT9H/EXtmxzycvTi0cxqWNvW9nt0LAqqt -Xbz0I5bRD6CJbxa8S7XbmWUhHw35cI6FJOivCPDrSOSBWrIGzz2I1MSYPwJ7cUpS -tUksFfaypUPzs9n62Ziaa518oEVNS1ro1dAjOlQ61Pn9VDo3x2UuxKaMcB9hvM6O -xG7SlTisJe5CipWtMd6x88eelH2tb3Mh6ydP/k0T4Rj7E6jrtsyTIKh9ACQnkHcY -qqK4G/OoK3xIv4VZ+m3mA3F9D5LkNGHYSpTgDKprnP4eZuyqdPAybmUKNC5UeCgY -rf7pgnKRMLeZniFJ6eG+o54CqiQlEw0BbP1zaYC8yHfGtBSXyrm54uvU2VLjq+iJ -Kf+JXqC+VP/Os71PsFR8+QQI5SXT/Ve9yqpRw2UHytqaUkF84uXNX34cncKDFiiZ -C3tZro7IJeIr3Q8WMm8h4YkToWK37TvSidmFTrjb3GVHOuEoJS+m0KzJ8gOCXJjJ -hPrMpa9NdQkqkFU/JLCRIyrJYQpAEgbp2qiWKmUgl2WD7DqCOIw2qizgSjYRTVuc -UgpYVCl1txXb/P8O6I9+yHa6m115Sq0O0PaF1IUp/ugbMW6zvoIQDAYpcELbMDUY -BplZgJPHqiW3yKZdyxi60Vmdbu8R/CRgdmcuXH/ntgPvfOS8cOT1ROfaMKtizooP -soVprPsJOq/rVDJcnpX1l/dWYU+DJH+WEl2Sgg0r4SUwoG9Bjq+G/bdgDMDk3q3o -I+aKcY8tm3J7YkLaDmG4Jhw9S3e8fXzvjsC5KNnnUYuu6dHOmz+w8vjbGXm0yv+/ -p3SWm5i+Jea/+SK7wxVyhbdzu+RHBfG7XJoRIR8VoSWc0gsP45ALpgm2pMY1sIJO -kBYlqVCkqAdxl2iywB08G7Vjk61tfv6+Aq4PJR8u/3KbKa3hNYi4Kip2JpyDnVTK -hzsbiXxZ3+IwJGLoyQGu4mCQI4+S6VSzvZJTtvYpRt0qyKQ1JSKGgqMGPw0fWzAs -w9dup0QhIlSBIr1xn7ePe+QRLfwz0Ihkn45Qk1yvN6lnBRBmbmbnqNUbESQYE2np -tg/spSaa2Vobw2RAtyLQfB2uP+cJ/6Zwi1Fm+eymqydmxXquS43JrPiJFPtaxZub -p7PIU8O2+D4RZgUqFE/p5+pDZ7LguEzn7QUxDZJK1aa0hRApbRDom0aQ61TexXjS -lhnav7gV5InNhybtjB+xqzpQdJpDhjAEqNzZASe9s60mernYKJTjniZw/BUqtH+K -aZAZ7JA4F2WXS33umVtlEm7fAANbLZkqHPzztpQaWGoSC/r6+yfwjoCTnHHNE8ia -P51sAenMyQwkMRLgvOjEhagOMJ+pU0HVgAy8v5h/tFZFr6iM0ZJB0OZqJUIfoi0r -/LcWcj73VPq5zx7uPSYvhJ95Qzc0MPWhdg0EKDWS2DrGz8ZmBNOOBZzlWXoR4q0C -C0Mh3Nb60pEzLDmF0Ystluyg4ButmlH2wlTREmpVcL3JGc6r/KvcwlDzNzThv16y -45akovRjHbWL5PjOw+nBrsdg+M7fxBoP4M3wtlu/qs4vePyws7Y0MlTApZM1wlZz -n18LxI3T+Y8FYpOy5eEK3dj+QTVgY2bfU+3kTTpreMx2OX86GrUmO19A5VG0LzLH -W5d67PWgdBDSbywXtIhPnKnOj70yHpRL2k1TAwqPVDhs/h8Xh9QRK4AEouRO4uxS -ogRtqwkMXEBWaAXyPgu6stJvV8+biI3/m8jRcKxquc1blU4YVrU8tA7hqoccW53X -QyTYZoF31tmx7eFpnEsuKZBtTc1gYSZFrA4idujTOJTP/kollmVqaefQpnuJsobW -2CSRrfzUEPmO93n2n/zhGGmnu6O8aVxvwonzF8XQIUAyRVc8vvAze0iKJoffr0fy -5tvH4IRSsSS9B+wOp4ACwqMBYnToomBgZ2KU1R6mN6thNRnrAIlwBgGjTJigARFG -kEpxGynUfsLGvR7yQV+j4pTsMkYb4lJyjqfkBMcXBfdFISLocr3nnfVL91YfGICQ -J5kC1dlTMKthacT7yq7kuzDoVNeyeAEk56XZUqG/4Q1VMsvAqxa2k3W5jg931pyb -noLNHv+2BbBP0f+yuD6uSVaNnbXQqAxzY+AMC6OKGtJ4TgrkcpIRDKW/xAWPQGri -xDZnZVFPrUzkhThLbnI/mSAJoylyhI8Nv+8NVdDMgnpWHLB/mwLUTZRuSdCUu0TZ -iva85xjHIynBpFIvolnpbVZokhMIf/qnFC7L2KjtGmiDnL6RVtyOjKqeCyYIW/DS -fA0Ay2FNW2Q/K4Mruvv+eAq2Zy2QJM6Ensz0d3yi7tUrTCKFMYPmUj/uOztBkx31 -LIm/H2t5Yo67N8PZ5VQIzC8w8JsljzXbqTYy0nLaAniiD0VQRB6vzr+yJimEbl0+ -Zv0smy/E8GV1CTIdjhc+UuQh0BXGo8voB/ev/CirND8zF3pfA69x7wtavk+4ZW7z -eQe/lYSIxG+2Qm2lPM6tRF2DFY37cxGpsQun+bIEnBXkhcYPFCKDqJbLf3NCtkNf -3Yhjb+k5pcjtYIyrPDTaX50XRBRDh9zKNxNZM/EtUJDAwfX8O1dbQ7t8RBbdn2rk -uXJUyP7GRwBCosMML/PzG1cM3HIpY/Y71bbc38ydIbLxUtAdWYC19QWP4k4Dwc63 -w3G5qHc1GOfymnplnLvzkJJP/ORx//tv9NJuHy+XxF0ml2PKsJx8NaVUOJXs6DXe -p5tqG4tf5185FK6tNK8XyjVDQEoMW30qg4FW4TzbvDj075PKg0eNmQMJvei0LIqe -tveqsRiZUEgfAKIl59kY7iSmMjXOFMFU71FYnBq6OWdqJJPS642zcLtLd0kZEPCn -nuFEO1mlDEz2EJHTyzdh5EMcJjhLLRayWSXT1cT4D+w2JskNCjKo0sY9qGOv7uET -PDUdprryhJbh1oJrWSHOs+hLEg6nsf70uzJbJHGhed5otoxIXhoTS5Ed3B+XN468 -4KqCio6HxmsrQ/TpBAPMD2fwlPUwZZ/w9NjFb/30FSKebIJ1Zk/WkIZtSzdgFB1e -Ae/wAciiN/3DFvB2IOx5pTjys0ZVDCP74wGtiWHp3ACtyK4W+RzDqsUp2ELcNQvv -BooLZ/bQDZ1q/hYdqacNkP+d5PpKAYEnGDXEApIQXEAHhuJfDiY1N9f0yzHhv08t -JaR5yFpG/MaypbpPvnpFGFaP9Dw4kUCycFij+UKLxgvLAWnEL1yAdUFTwMGd2DY2 -O7YYNgdkGZbWuAM6Hu4jQDEVjjLw2wrZv/vSs9a1e700j7fb68mZbtXPGveTEaGU -XA57xFAhM64xNRqplC8KbPtKg92QPm4lTMSuurcl6TPAVFm6vHa69Mtw9xCtsRen -zbp6ZdWeNoUSTXAsD441sI4bgT/Hf44Q9KCiD/4OwpSIVhDZ4td7dzHwjYCOsjOM -wHrpn36/IFonskQ/BCvjgsMr+yqYl4EBIFx6aQgag3kqmaT0Za95jWldzfaF+PSn -kLiQzVeQGEneNaCPn0G+M15Cc2QY4NGouIxk/GgfxJCwH0Jg2WJmNz8VQ7qmpY4f -5XjrGfY/Rx2STgOqZXUSdFVfRIRsrsN0x7u3OI2gYJtrc+gkM1BOKH2VJvyGdwtb -xYTQsYchFbiXuFxq/g96sIcql/rua+Fgv4fxbhh1s+XpAijD0FpCLQ2yNsXb3zdy -l1PXg6Y4aabgqWhz97gdtdjjpf0J6MxMHD+wyrUEeWPUq4Qq6oiLzlQyijGkT7a8 -ezj9Qn8t5qntndAbasUI+ylBHZHeQxGtwyCvkl+BQmTrTsCzVynPskw623xa1U+H -tHZFFxi1+lo4eb9HMM3vrfJTLZYMRXUUVGKl1yDFzNJF/oSr72zBzi0YCsOQmD/S -/BPXSl0zRQ2xOYWyXClFo/TZpfFe+Lx0WHpiTzdYXrMUUkkWMoUwWZqWWVNjleA1 -sgNZjkwSsgywE5IMyiXwmjVHFVheD2sIq0UY7SrOXiYyQGXUGGON0zI/Xlu1HzUz -toPyj3jz5UZxVSH+juqFAsJx2xGyRBOAjnQe2apoilHD2gy5X1lWKVNAGOTB0P7b -ev/NpAFaaQYF4uTnKS7qMoOOmv4lZx+FJadBuH23YHkSQVi5nbRGvUmP6DZ2FFdX -j6BcQS41bIB4S/V3fasNcIpR/muTeuouJwEY6mQYMTQV7NeYnAyr1S0xI2dvfUvi -q84moQj5RdGN4wTTNzkoO+z09iKrdV7QV+N7quGcJmPd2jaTczNtBdD99PoZAAgc -ww5l+HniTe6dPM5KODyB6AuB4kC/Osm4mplKbqMliaUCc1kzkgKNsw55VZKGkdOD -dd0if7OM96ZGKZfDFqtB7Uquj0xFcZ1P25L8TOsP3busIdwOOj8HQatNHLaIJaRB -6du2+U9707U0O1lmKeYmkittMVfuIBNEi/t26XWUU4yjydiN3/5wxbJW6LU1VN/Y -ZX/jmibZPnWa7Yb0Re/0T+TIFLNIknIvD85piBgWVHt9x7VO1Gmc/9KvRXd+naNU -pQJd7FUOF+CzwK9A1RLLBJXWkUKmb6nuUT0EPZobjRq/dnBOpuwUvr0SPlRDWxIG -+l/FRPUJ2SZ1DVARTEoLA7o7WEtyBXCyvshMtw6w4OXPjD9h2Zz0685PK2yW+oNQ -sB0qiUMHpbdDh867I5xsyIl/E9bRBiYW+KrECd/mcXRB2TGC6tBRlDLEhEIlpNS4 -n8rn76jG/w4/4XbiEbWIuL6RFoIoOQvMQWUAv44Azk7gVOYzCW9slJUZ/gI+gwd+ -vrqm0Ht/gfguhnp+MhrGi7dAtxkEOWHhkQ9a0xgaiWV4xqmX4T1x3NuRg/FOemGE -megwNzgxFLZgpMIEw6fOnkcryoPW71eo+lL0pGdRQJ9G0SAmxnuiXDOrhnZBSj3A -14je5gaZPToF0gTJgY/lZrPXODlmvrTjU3jYgnYdH/4q/y46y+tx9+GxC9UFuS7f -mzVIw/m915LresgtpsO3oR7PWjM7p3jP2y8CNxl1ToSjr07MmLJIcOYCR/w/E0qb -x8fFIG3OYTtHSas2O/OBfOTzdm38oVmUefrlYSpxt82ynVoinqoemHKz9w1zmNmA -sisgpB2MiE01m/1EhYMWy8JzNCGkceRH1uwrpLfj/stXGuzHtUGW2xl4lZZcCOSY -BzDMIZrtuQa2vp2YVQVo1ioRA56Gx7K5jtUCOPhdBKpJup6uujD9ATTMYu2G5Kms -ksl8WfRYOJLCYH8cSjonhTLuObS5koogosxekFj377ra8vX+G76rAEKrVeOIY6cO -QbLC50bHjLekoZSNluZtG9xn6rsdbLqYt42bMNEpJLygZcyHkRiRX41/uqZNS2mX -LOjw10QFGo5MiytvicYDy9qfOcDJO/jMzeUB4+7bWp4tAGSOmwjfU5pmqWisAi3O -bdir0K7c/tarzV8fmeM+ekRoJG9log6MblIS0ieaezLfr50AkIWTOUWvYf1HLJga -Xf080T3k3oQlkR0QW4jlgbydTLaXrQZKnW0K46Inee71TQadqQseIfLWvzlVJN0u -wCz4w9q/xUaL81Gek4kFeprhsETOs1uSuA0osj87PLHiVfQyQSKMLSOJVidzqG7R -6FcbG+gSz0mDi6teWG/+IvysdaW1zJnrtRZvTdJvrTMXD4yW27Bwk1dBEig8oy6q -fsw8fvDabqhu5V5f8LpdeaED9OtlCjGSpUXAvmsDDC8Kyn8NYeUNgrm/ForyGuMX -zDe3YJJZZxfp/4Q0TkViaWJl5paqfI9tnQgQtzMMAgLTtioafUENreFDHbNI92pZ -v7BvrvYLe51nERN1nbkDa//yTRjG/AMq2P09wSZLu5RXgP/4VeiEJ33bTPWwPpnn -koix3rlaDvuQIWKaHLlXx6ajpO5VcntIZZ9E+KnKcfNbuHtYtZ+G65JDbDfTNC7W -0qXAxIh3BTjy31VMbonYi18XydQPP0H85u4W7ddu/gVnlyC/4wDzMhfus43e1EE/ -nLa16a3Xnb281mgtsSBtI7Uav/WCOMR2VR2dQZb/SqFLP7cydDWALIfuuHhsXUH2 -IxEkUwihr50xMjVJV2LhjNWfd95Oe1AQxe7gQ0ZgO+2fbJp6ndP6VgMxEf4ewGQI -NjUT2tZZOOegAOywnAQ7bIAKViHzOS8C1ASYP69mDvafYC3l/70DlvOvBuhKCJmq -LRs0MB5ULQ7M5COasuR+GnwSdFVW6IZRrOfEbcT3ATJSoI4sTflyG4CWTTGcRz+t -AK+fSt8wdxl1aCWA84oX4Jq0lXc9oWBgzd5608L/Z/GQGJj/G4pBh8ikL7k7FCZ6 -9aOzCHhwZVyEkvqVTFb64jJGVXPzn0kjV9B685cF/wOHLxbaYbrH6TNDm1FoGu8q -ZZTnbgLpcM9EgmJOCTwRXIoYDYGJcGJW1OknhAiCJNxv2+5zHPSL7/PalfYQSvA+ -fl3gm3cM71RKIkeI6dBICr2m3xyfnu9+GSG2p6er4jR/cADVj+dx0LPOFVsqdGOS -7fhBkdOtGaJwivzAwMsieA8iqTtB1C/O4dGWsoxQ3LxEdLT8qJMlkKw4nYdT09I5 -5S93V89az762xtqsTHHgtAp4A6V++6RpvyKfNoQHFGjrFA+RlO3eixuIhFSlM2BR -aMESCX0aaEKuzELM02tNlnCmXXT3TZVtTBWpJKScCjbWB9yiIG2rY3lNP+q3T/Z1 -JeqX1loNpG4dNXHt/bhrTa0lAT173BtCpdTXsOJpnKmsfZQt2fjJAqxfrsCCNoHe -SKqgB1n9W5TgfMBGmCtb9zDPyFMBoLHLuj93RUmpwfEm+Ttu/HqQZFB1qqFF4WlM -LEPzIqJdWjyZKo5skAL3UzzbBcXixXqR8GyrWinHGjWcxgO2SBCP9+p/5/jKCAsf -YeMC2gvTkmWN/JMTYHIgyQyY2H01RUqyHuRfFRwwa8ZUn2GfA//OirurkwDKgsG7 -re+Ziledx/aatVpW4Bs6gFdSD9vc1FdVop/tQVt1Q1Tfb6GCuwY7qc979b8xkqll -niEJnotUmejRAvrCOsdD/lrK5YCkBq7UpK3+YrkVa9h8T/21lQ3aoN6zhb252CF7 -yS2bBviQkZKfOSqZkrFH3OYmdIJV1t824C74brQwRGopUr4JSWYphY03EWP7wfFe -xouXo6B0dSkFtnCGjJR2T3Zvi1q2eqsuu43pu7NN70Wg2dBI6KZSS//gKunmdp8s -GS0ac78+2xSAhwcGDE2zKx7a0c/MDv+FIr6is2Hii9CwxyUOyKW/xcDZ06/Rzvic -ye0jy5OoaZ+b3a9WObkLOe1OZn1bRHe5mQMlkPjZP4kCOxWNWX1XuY5tlUCFTG+t -IoxW14jH32dSv8cz1SbeEPCBbboi26weclkQ0bmY+BEyDp55wscKJQMRkCytbFGn -+aCx2VK42qhm4mGUO7E7ZuE7IKZocVJEfaX4R2vxskXyJak+Znt768Fcomy1GoTs -1G/0RGzyOV9Bau82xKiA2g0uhCqx17A3WTCADIAVW939FKKY9swkERul3pnphd/v -1OXx3N/qsM5//6lfnXlO8FX9NEuCnwEveYI9XYcrgSAHhRihLxjeOsnT2r9yFLfK -QbxaDTch61bC6HyQ7GbzXVtrgG3n5639vraORm/zXqW61d42X0S7s862ZDhpi7BQ -69kMe8JivcyhRiBBe1N7c2bh7woxwMr+RfUIPMC0ZuYgQj/3OAo+0FtCDG0VEZBH -EVu4iykFtLW8Q8R2THR/LNSXjJdPUfziJ3+JrtegGNpdbjGcbRWE2V2F6fZ0JchP -rm9IK7o0QYDWaUrvZfv1Vdcz8TcGW7SLZG1K2di+kAHDHIqkf/MGawoC8rq1ND4t -9Yoo0a0Q0BXktPyY6hX7pRr2QXbMnIxTKbG9UtJMgU8oqAG7HSzGdYwglP1kv4xY -v1X9yccU68+0rdBUvTOMv9ZfC22O4l8dOk51UEZZoRzuADE8ObQf7cOiltHl3i24 -q25WGl14K+daYIXmwPhjToZ3sx6+vat2B62FpTAPyzUyC4I7ag4vrL4J0S/3eGiH -qqF7fiU8lvY8X2LPoW082MOsAt2caNEdMBRfs2ae96dGKU8a4nZYyj8U2m0mB0sR -L5Cdh6rleqv8mvDM0SrCr3oO3W6xP53o928gCOPHY9u3TQkc+avFahNt3gasRWGU -g0ES0/lUKpnEqx4AZqSUGqNjMCF4G3dC2/itAA0H9wJ/n8xBV9BS07pBvxFbEed2 -+y3IL7ZWcWivjnz2bMDBY9uZ9UHN1jRg7uRw7lF0N4qe+GoA1Wd7mUf6u/7U75or -AC1UV6hK9zbblCa5+jW8Pb99AzCipmlaL8ftxEfyKP0a2ZH5nij3yGS80H1bzNBg -b7fbLsaIVZVMHQXZ4sOgzNGRJla9ksG6rGygLfE0YEoNGzgrstFY2Z1jCsNWgTDU -my4jxWl8jSbol7MFTkEHkKF59TseRdk0OlzM/chBrmyQyfDKknY9bNKmaksnE8Kh -W+Qn2F7hlJuQiZQBP4zAcWE5y/d1w8SqV4vNJANUBS49/YbOk2zvdTfsJIbUGVWV -2Y8YG5FVN/QOxNh2DEn4N/jhPUE3PY6obdxUggqb1M3xR34BXZIKLewDKrKKP/DU -KjO3GebE7PoeqGgPePYYifm6nYwlaxHLmf/35z9sM9x+BUNMfPmkkGK61wrZYbKJ -i3As8MdnD5Is2zCnRSsXqv1iKdLclCO4G6tNsLUT7xVpk48a20WnyMiB9haLL8My -e58J/PKc2Su3FiZLpr7g6DRgzxYAh0jQeknooEw3k2EUM4lw8FQHFavpXU7EDw0W -yUPfnTW7wCdUuobLVTogAJbb3TdRRIfeuObyqifaZ9JyeMArmZtuDjSC2EmOxnh6 -tiGZ0GcqbmnR8RepyQjt8ABNoSfb0dvRcQS19H1Qq9Ztb8FVKiQN0ID6uc9Mq5Om -r23EtHHcKFzX9JlJLeFpivQZ9pV2ypc5jyRXUk5uE8hedOeEGWKuAeJe0864OsWp -t2fY9gT8Jy0d6x6IxNAQT/L25NgyrQ43NBAIjXXn2RNyXDNurDYYCH4yaC241WRf -Y0y9oTACApFy+WTK2pTOIJ/Oo/d1Kplgh+aa5m+zxrONkdpmLuA+PmuxMlYge8Lh -kWclXoinOijnjmuqEadDWwORXQwADM4vcgsJPt/TBV7I9dTYVnvRo58fh+cphYfo -pLfO39rTQzSRLBG+9/VrzrrgBIPl2YDepH//y0FeU8d9drzKgQ8TMBpy8iQjrbDL -TH8VUatEKPsRQH2X4phbkg41i9tlX+9Fw9bSHTCj5zWHKNdksGOHN+KF9itcslOk -PbbV27jmfyldnMGlTIhxNCcc8T1WW7TRhlXyi91GkUaWSQIuldN/G2DM5L9+lUyt -8L002dpsJtOuoE5YxLamDZg3OFINDPIx6GfIoY+D7Fbr56/6hOyVfJ8DFeclUUF8 -vRBgPD8bl1x6q40s/a6zzt6CQsJ/qR37OAHqeTt2TBVkYjcA+OGTfb/x0J56LGpU -GMJzdDp0EwE7/MOz83+lp3kD2gcbclxDFWKrew5gJJOZlS+U1Ix1ThdtGE3T8+lZ -qS+u20UTXlaleK+8vVTJ9/GFCykp1ey2TXYMm/SnsIv5RnvxYVfhbJlJopoSkVSb -mlHdoMEuZ+WyENSZPMqNL5ALLVEiaJjWbOW+tcjludcFuD7X/n4e8ygI4fDojdNi -engDTJQUvyCeP0WIA/vqUFQIYpbxUMjY74EasrACyUSzuSzf7ope7A5fA+2CaSrQ -MtqcbIqrtru6sOSDZwwmZCcIY8mpGusX1jxwmO19Ihv4ZDq0qmOMmE1K1qNmObXi -NndVIpcs8RH2QxoKVLuFNpEuMmIBoDayMyOpYK0wX9B0wTi5r/ngeMqQlgBCK/4U -XpaHd9PiQDFHeDmWV8rUZ7Wei5IDXClgeQcag1Xq99tHaT2y16aMMGaUc7fKovGC -/OmKg/h987u8KtyjaL72FShyLlXAOQxO1JBmahiRT9DGRBQGhFbh8lecZmqoqonI -NikoDOWRvezMG8RnEq2UnB9dFyaCexmFuYNex9ZwoOXJnbQ37jMqGMnW73fxCWyj -GJJfAWPEv3oq1AEAArCiGlA+B0vBemChnxf3Y8YlU4HmW4bt9hydTlbbESNSgdI+ -/0MDNyXYglzK29j5BU0FrE2HVxcVOuX77h2MRkl3Z24UKUKYO7D1tPNFn4yfwMlp -Q3FpDQrx9wNKQemW1PeJGfNsdaDvTrjdB+f0ebSDA3Ps/+5u3BukeRKO1KGs6iuN -WxIJGvxkhd9cx/4J2smOksCT08UCwNWh/6BZh+ppPvbwSMalSSdGqgjJAvdBHVci -5klmHZn9+FMA4brWU878Ti9YtrivCu63IQ7KyuH10URZEW6SfIyY5NCHKZKUvlyy -BHCpVJLfY2O3U++4rMjUtscnLlIprZsdUL+Q9/AGXh4JXr7AziD5P/vdiCw+p9dz -zYBGLc2i3vxo1mFxrDOaccujrE5/UmWRWWZ2f6vDZRsFMN/AejhMr3+14c88fes9 -AwC0lpTA6SiVJOWTCJ3DrnCsW/Id61NUlRF0+m1mKaTWmntMQGx4zqCpZmdNiUYw -YLM7ViNyrG6Q6GAeQs6CET+mc+cSyXOy3qbKf/HfBqWjj53YSSABcObBG8yxNGW2 -ZZq/cIUKvvr/E/zDMRpQHb3bK+7R9h52kMpMTFpvGlkAjyVSldFBF70i1WKdRloq -YBp/LcQiANYQ7SkRIbw3udEAw2/nY3AT3os4CcobWYR92R2Ja1gm+6jva2rq9zdo -qdUg2Wo42z0PFGQHbfHwbbiNBsHWp/bEqddhw0p7Z00n2fQwCamQ7uHWWEBeYSs1 -rmEoGVfch5tY7qLkRtVQi/QBIq2i3wjPEntceb4Br+Dk3jdJoC9ooxrdRa6h6aiG -dpGuASpEAVKrB9zMr0Qst+/RNa/4WtUqkoYT3VdRzkirk2OeIhHqPo9jdSI0PI4U -ogu1pn4Aj0jm/Jk8DVVIcE+g540Q4J0wEyODMfTj9cJjshjev2GShLvc6S05/C5f -TlJXH/Huj2kPeM5UwxdrKk1yQguSnFIytDi1kfGFrQyFPtozqJ+wm2LB0eBJozV0 -SqZNPDJD/WYBXh4xjhuCdBNDlPi4zPyBRQzkUDS8U5MDCKnAdQsG50oJnaqnL4nw -PjyPBCf6yo8rwvAXRuLaYdJi0xSiXTLgX36V2qQWK24EdD2Hj/EoT1Jq5qCuHruM -QO+c/83AAe+X7iwHl16NCEt3zhSVWT2XSpNPgB7Ntt3nYOLnhEY8J1ZgORAOPk+h -ONqHBCutfmp6UyogwY2+X8QYImf5o/RSalcE1gRWUL/Zi4skZiPj7Qu3dzRwDypl -xzsRi+kmgTDnYp24BSWfYpPdYk+jxFoih7g21TJeXLPMowiqsoduBq5EMu9X7tHm -LN3L1RnQnJmXNryVk3cg7CxpixD6QNMlmzKbrd5ExdvpsJe+jnblUOgZJ3E+0sD5 -40HqwZWjhrF2Q3Bd3UXBJH8aPiBwJr5FKBaoFe482Z36zhLSpzXlW44nQgriogEu -NcZ1ISkcpL1EnlywEbHPflzl9fwmWRcqvVJjkSqqKCBpyX7XIHQppF4TwFi1TncX -ki6V/+Wgj86uGLZ1EtqlZIHQttUPyZNfL1wmF0ai6KZzcN5cvTKdTSjcGt1o+8MK -COAl7innTop7wNgFdYwrqNRPZn4TwV2FjfGNmvibmFtrP8xL74CQqoDHx9iAFvl5 -+/EBqWL3Ax23H8UBhvqtaje2msFyP7TdDwoGuomogz2cEmRPhi9a9mvd0TtekYhy -cUo6RzJALwlNt7sACi1qUQnqbfQMiFMZ30FXOOJ3KbpkoR1geEoNIoEKvDB4+q8W -m+W/a1upRb86Fb9Z+fByEneSra2fUsRhgwpsAgJ4Cw3j3y3+0Vugkvmghn6WR3S0 -7p/VtgjIRFc1ZVgDeUn/qyPvLxOZzu3/Q7qeha6Nmn2BKwTyllbGvh4EdLqscFSs -x+o1vun6/EM9oTIdm6e/4XylXEBt87sTm64dBYYSuUEmzXEYj79tBn8drfm7TCYk -dqt7vPD960AxGKDCAAdBo6gTRiiU36fhKuqvhpTVNAlH3VjYLceeveyr/VGTnoKf -mPx9L0AY6R5cv4CX7uztYYni3HwyI0cQURDaRJ+jO5STjXMOCyDRqGCboMkMZ7EE -QZPmLTlRRJ55Myc4Tz04p65He1U6A4duW2vaT9o5oPsvCXl3hsrYsradXA7Gfki6 -QPPaVnXhBvP6Ahz1Wi4QVL1Q9bfAKqkKLWTl8FTpNYzMSWsSG37m1fnBsViL8R4v -SSDmQzYjlk+zLeOnhFsM8mMCeabbu8425pwB6FZ8x/yR+nJxOj2DV2DgA9XwGVfe -A2h4KfGN1wG4T1rvuzH8k5IWfvgnHmg1Ak/fQPdFnN33ZAyJsTJsUM2RDp+bpyey -bc5r2b96x8EYWj3HZ808SGlUSCc/ORvg//z4TBv5QUB6w+SshcSUsr+qLj7Dr7RG -2zkciS5uDGDSCtr8EUdSLcUGjUuS2nRRXfstnq5WlcElFKBke6hKJ4RuZkvSIEt5 -UO5AXhvW0qCYrryMgrN+85PAWHNeKhje9yLnCl4AvRCUlagEBUsHQdFsPuQlbH82 -jJym2/GARGJH4OCQjOf2rfj8gJ1Aq42wevR4NvimHXFcG03JgieCNmmwF8AX36Cc -eWPemtAgsFM54RN4omEygP5kZmKg66YkxxdO8zBxDL47nFZDhgz2ATy9MAE9mB08 -+bYsZXy5dYChvyh0hyHPgi9BgdfxRouru5x9XtIjjMv42Sk9hxFHh9KfMnOpZhgz -1RY2EXCp1oQVqIZpi7vs4+22YwWv/TSvR50IPwAn7dMI/awFiqKm25VADXTkrj/+ -Rtoo55ajPI+1DsrZwk7SZGVw5w6S1ce0BH62xJ2jIlpgECw0Jotgkn4F9Ubnb3Aw -pqJAr4F5Fw9n+DT9zngzRwlpishwjyjWcAv7/OfvHAlICLar++i4HHmcvK76IECL -dYWlgrfqEmpbBa2GlwBqOx8Is/BAtfpNT5KkUGor98D8hkyoiUmeQp6kdJIDycnP -vCX04fFpJ9/Al3bu6lt1ZAiLy4tg4GZmfZH5nd+6aNZG/v1HZ+Z6K5cs3KVzJfoo -eq/lqU6VPDTMNqvc5pOHG5E/yS2PFlhc5Yp6g3y5d76lZhdbZuz14ErL+YdbGzZ8 -XtNB/cynK5yOnVET+OKlSDDq8Ck9JZKQpdQX0ylevUMk3arseaBrSmpFsmEsqlN7 -YL7w2gpyw5/HsvO6tleaSWykI7czAz2IRbBdp9lwt6qVAZOyxGM3lZA9bqFN8R54 -JQaJjcCi8eqKTh4JcjspOhoMH8I0oUkI1NQ8en7fFK/ooP3rGT7wK65HwDNRDYru -sOiv2C+FKaOqbkwd2+/CGEUpgcORgvjxC9ZTJQ6K/7/tXBSMhTbzEckHHFmuN6M3 -3Cd8RVmQ76DpHwYtkavSX1EpPAT+kam1r9SCRs2jjGmYs+8oJHg+/pDxLYiXEtI7 -fZaV7StoTqeAsPdl35t1HyK4KTGBOmRNy+vZmrqctY6v/U6pnuV735dJkBaK/FaG -00/+Npa/plfJ7F48ZEcxEa9Vf8wpyAIz4vf8o6/bjvt9XVrOTNt9b4vCXMhqAoQ4 -cSvdgY+Nl1mFR+kU3E4JjqxQBz23SnvJGvF0Jlt97bK7+y7HXuvnTDYEdQiAL8Lj -d6lwtuXbL3IUdW7W+APo0LU0RhdPuAMx1pqJJxgiCbzvn/2oaNHUQ/NmsL7TPSr7 -Wk0TN1oYKg9JDw/yk4mAjH7vphfRBeaGtDH2aDF7vCu4POX675cgQiSsrBL1GV6/ -LKNHiD915OPDTmCOHSR6gEwj64leJxw3sVEyW2wcLzr+o1m4y4S5J8v/hMtAYX9l -S4YpZtETI/YXrtZo4sCE8ieFB+dItANfK/VwCkdTqqHzpdjBvNeTS238DnS7vX7h -6kMy3NMggkspz+SXKuOl2OpV5G/GIlMN9qEDjAKsI5/nZ8nJa29CyZam3/+3ytEk -Oet6yXeHhKWba+akvl2MpgZq9W/u/7U8ft9Hrvz6R8Sn2TBBQsacseC10eYkEy0c -j0/r3dLWrhWxfvUk2AW3dA64U9E+qQJiB8GkDRDnWPAl9O1tOfso9ciGcqE5PJzQ -gUZm/6pLlQzJgmVjkN/QiG+Oip1XNqzDKMN95wi0Qt8IpAA6cMBRPf9iPPyG3TlO -6dQjReZDFI3bluIoz9kAD2omWujxZOJ3cFceuYOpkZMWD4toDgU+vhIttJ54U8QT -cHWNjJ+anHnGwBKL9lDDZxu1Snnbs8qFNzTkqRkowBxQV69/WdN9Jbl+qNbJF19X -BvrOwIX4unv7h/uitLYgsgqn//1RuhvjHBZnohf1da8vEU1SKBjMepQmISCWu2DA -FcUTeUt3t+ge+XVvAMqR5VeftORYb8HlF3GoMUNm3661+cwRPR2TFgSyTFpF5xrT -yutG6XrFEXfiZYmL5kH6RyAut4zuRf1aOXarmb3SfXv4/LEb53mtLPhNvDCHKdyd -ag41HEVdcJON1z//f3xLhK8hYbw+kIetfLRkVVtaY1r3KQi2naD2SKycfwpfo39S -dO6rT1r4q84K3izCKPsrFz0c+1NuQy2Ck+YCJsf4sDeBW2F6BrztcYRaalH00pok -BTwGvynLbAaFxo+Z4Hk4kKsqsILx+CquqGrQVny6kqYAQ5Q5/3sVMI/miMe0w2W4 -A60R8JotI1nYpntxh8NNzvGUSpimdBdE+7Xgk4PyjHFvyBAbpwf8xN9vH+LGGoMi -VRmEOPkkEy7tF/ZaUMUOoWZVXpyxyjD1s12Y7ykU/e7wYsLzY/yYuwIo6dKTW8mn -UCJxJTR1iQSU26uv1c1H8J3Dbv9BPLmUwYFEzwLG+YKMPbUGD6LsRDCIStRO7X5Z -OrZWqew7s8m8fmMaPAroBW8f07f/5QIApXg4RiFduSVDL0FkJqeJBq/BRNA0aWs+ -ct1wJFDSsMslbdOjY84kMEKO+0zUjKpMbl+XAmSPG66dNPo+ji6j3fe1eq66Q6lf -BflRXs2eSwhHK7NvEltTopObjpZRerocIZrjRoZODTtMG/zFf1yqSQryklcWjJuB -cNFt20MUlXRIEtCs1mq7Y3Gg5INJJxUmHUDKGlAlBZQwn08oTBn1GRKK518yG2P1 -NoH9arQw+oCi2kbQZm+soer0u8tkElv6B40nEqHht6DDJLVcGTTpfcjzb6b1xyMr -hNfaXsiXBFIlyiQ5N2Ab2d8Nd/m3C3ZsbR1CfHAjM+HnmxwJl7cgz6/BUdMsM2xj -mt+BZpSxe32xt8OG9+sQwcdfPsjEFthIDzd6FZaQGNhFz7q0nAU5aMLwwaaOLJoh -BkMs+sNNNdgGFw5efM+h/h9GNHVeLW3+B2Em3P+C1DkbLAQ9g07GVKx3BMvAky7e -Em7G/WLVuWX7TDa40QOH8zb3Q+5TzpcdKTymBJjRPzAzHopo6X9oATghMbyDbIJH -0EVs4/DEFYII51Fl13ma/ItuNMk7OvORi0BpBUQALRX4oM09N6yHWhk5ZNszILde -r85RSzUNr8ENjdFQQpDF/cFrcSI39sn5/QwBiKZtAGzImTtnncnQ/gOgmiwKpGFe -q1yOmAwAmy3PQ75JzQXM9mNWsGhOfZzu5Z2s4/W5BIQDn0XJ29D84RnZF/CmiMic -Jp8BDcZPMxBvKlD5MIRHAbK0SNJ+p/4XOZQnMZB7RMhRBpfVKUk6HWf+TOIsciqj -6iYyI4LroPRP5i5CypYVmqMaqTAfCR9kv901nwYrLXWr3qW8RUsIhQxAgUclycB/ -NxpYaIbE+72VOkTHxAlL2YegzlsBz9rrtc9AQMSIgM30aWaqmS/EtQccNOWCx/xW -UFQW/+1tWD3SHqHZBS6YvxlDKxSVPt+KTkgqmJGHkYJQuUpM6mRzzR5RNRJJwRaw -TPmKBX0Dd/qHnghpDin1RdpwXM+HTtmfNNLDYIX0lrYEQw1TySGOubP7ejdT5zxb -dfCniEAC2XOW6ubFgMSFunharZZKj/pBGMqeQlPXKzIPfe2kiRX1KvaCiAg8kG98 -JYSrnJBPQXBwcMgH/AMOYs98yG/UtGtGWBzvlHw6AtMp5G6W1fUEZGwP7RcPufOP -bNL1gxZnHOhAIwtXvEbdGOn0wOcjhHCA5o5ZQvcc9ACFe6+JjCrFIKTopweEweAj -l8wjyVeRL82Ath5NT0DpHG1pWsRrmK55qzCRpGDOmQAI7YMUyyLn+ouEKrNvJCLA -22ME14BqBJXtRBkzrrAvUcOr1b5dz5VUBdGD7ndSyL/8M2lcu7KYo5E+HTdKumUR -KXEhSWO/UdXikA6Cs9sxgv/XyxFrJNMgZewXJ7fZkc5uky4DvDxIM/nblhGHSr7/ -lXdrI8X4uuhOkBy7jbMWZa0d/628n0fSiEfAKQrq+e/EjtgxpNsQpHn6/MQZFUte -cRNp3Ua4bkNkeK685NUf1pIT6Pd115ztjfjCcW2ye+kmpv7yOuhQH7eVPyurTm9S -E4g1w2KhUjboNJunk08yEEUuBCaREUqN25cFQNcVbF0wV5ZGIwQKUuHs+szw1OnB -H7KYEZpFf7Z8PtopQ7NmrAFNZxGlnQXIDLn+Lh2isflicw2FQpuONr6HjU3QVI4O -3vp7zG0xqhx+VKOBvdhVDXAfiZoKfHK5PoJeiJQON2opwH/h4zKaypoRS0xYQYQi -wFzgQbPjzi/V5mFpCpjKanjPbAtH/TN9XXeFTQ0Jzcxnvh/iJZ3h9SB/d+d/Z1qd -tYzFfGfzlbyNkgqKo8zG9biVSUTqN9Nyvgw6tcRzsvXy+9G1yfgTnHQGhPFvMscE -eGx5DmPf6A4ALsc/tiZvlosInhJUo37qxivII9divyLxoS0Y6vl2vJ7XQ0w8pvba -yVgBXX6wshKm0dHIJuKcC4P8Ij4JXdZrq1CsaxiC3Am60DHZA7KFiiqDNYvtN9W/ -m0MgWpMWhMilvSXbUnrUOZKX0WSF2OoOSCyySsN91BzWrRvKWhMovLq76X15Uy6m -vO81vtIa8tuLShU8uah6E1XGmXrbGQGHipRg9gMI237FV8ov9bzy0G7ZO2uObVxC -xJLeePGapmm+VQZyOtYY25VF6KSWZi+kynThq/jDQtUp5lyI10KPg/ibH9cJSEbw -SABWNZGfvYzckuoeC7CnlsWJP6xB2l860ajCFad7KR30GjS2cRgFzrSPzkmHVlQv -jYuTk1jSiQKLPRnaCyYUhuUm8gEd5Y0AxL8hn+accZKeKOhhxi5XXnbAQxx0COQQ -C7QMlsoyXE8VGjbcHkp2Lya36SebSxCQgCivh18ytdOP2hQe2pLTIhssvt5ITwt6 -hVcCDYt0KaRynWc8ROTwnpQSffr27kHvEn9vMltloVE+rrQlS2hKIecNCb9Cd7+L -TXNvloiLD5eMAPYzvemlEgWvo8Tuc3+7tHiL/HiKxB5dMJ+25x8Y6O+7KwcUgREl -dCYjw94+dKA8Agxw3Zazo1uiQbPtcCUsbnMdyMuo4hSJpKmebBtjA6i6jLWJK7Wn -ZTMc01kzpifynODhqUQVCESD3wHqHOFQ2nudYtoNK9niWHHAUXoG00yK90uPKAjH -KXxRBqGgowikjgk/Nc/VQl8hWxamYUMupn13qNWMXw8S5pnOfM0F06MbybVHT6JZ -7hMPd4jMRVEJ757KwZ5wGnuYD/kR0F1KgsSWMMczDknrJTcfBtwT1dONr296w/6j -8hK//jtiDjgCvpd7B8+tON4iMkjLkUtGm4km9rur/i1Khtmqym/W38Oxm6/1TRBC -SyYlbBCRKAOB2LlgtHdTFXO/+eMW2MkjxVm8UJLCIJGklmPJJCTsrWqTdmUPsnji -RQTuKkbEL4S0odox1YZxtFYnmpJ98an8ktFzriU5Y5QDsL2gM1XH5uD/Crk8mhX3 -sCZ68VOFotyQJRGST8w6dSiBzM8d3KnobvQIkQmlSWTBINosUy/WuCAYVURKP3iB -6TT8nQGxJPURURdjKNLnrgQEBVAZhBaI+0aeFZ4bNAEo6etKxSZPmLw7oF64Y27Q -a/wAGkHSRB0WSq5C4ZvMSYp47yNtXC3SxxgikPrk1QJumZBmpJ+uqm7HplojQs7t -+bHFroG5sxY55wMexRM0p9VteEHLGWWyH/nUk8d8quz0icEk8HsvR5ORJk0DhRt/ -cFWLeY+HKk+FqiBrUqndgrF9yOYCRATdV8lkUX8lEkoTQFuC5Y7YZmix9fm3hXtQ -ZbOFb+cPjNPMGyN0wYL+OUd9CUUtbedX8bFZBZf56QDdqOwhcSOgqSyIaaMe3XVn -PzDHZZmI0BwZB+vYrXhyEa5kJSMZ92d3w4gwKw07kTU2BENSLAzIwtQEhxg+Pjv2 -byVOm5ywx//CoeKatsvD2OqbG79YwC7SNF8d3HHs0upTEaXTG2JJG5XJl9KtTNFM -9VNTuUT4uq6KOvOOGv/2HeJqkWuqCuQLzU1FyovJ2nrMr/gNBigQ3gXEz0363fwB -PsEncmYlO04JlddQRGytPjMgwMirVVZyJyhWv4Y+TEx3soBCuChOQkQcpqqGRJmE -SFbGEM0YSgvrTSvV7PNc47iNsyQ67iuPR+hydVVvWIi4W1ImO2/jhlKs7kMBZbfc -bn3oj2bmaGWp9sD2CqqRVJyrTKIeAJU4aJ6SxAtDjpZ/NF6t+ltfHWdbP37kipKC -CWmWa4PZOWiKSOXsdyAOg7Ge1rhACgCajA/T6uewFHCbZkOcZFgQWy648PqWQTuC -sCxxKNHS2MnYrYLZZ2hzpQ3wZVFaF2AtD95Yj/+NfENEi5UW5K07ALviOp7YkJ8m -8HdMYBU3AltS6Y0E880GL0fC/0Jw1+bvmS2Yeg1vDw8W/HuoZ7ejAtfE/lG8OgiP -pVO93SbBqXZF78ytcYllhsNwqXQcklO04XJbH2Gnqz3iajmsizd8veos5GJL72FC -VSuT4kgNVk5mgvKRB/xYcBSNym5MVKqOMQ6awUZBfW2UzHnyHUjgtSMTslmEj8xH -vm5DSOVi+pJHXFuzm6k6/T+YzrCGHXMYvM0prAva+HCbd9r4QvaK8YNKeBokNQYe -EAKGq3D6HLSn2p7meqWMvXRvn51Gx7OSXF0qJwdQHQVNMps6rM4KtlQFJO7ZwkKt diff --git a/uniquely/com-api/package.json b/uniquely/com-api/package.json deleted file mode 100644 index 9662d8a73..000000000 --- a/uniquely/com-api/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@alwatr/com-api", - "version": "1.0.0", - "description": "Alwatr Customer Order Management API", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "uniquely/com-api" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "yarn build:es --analyze=verbose", - "build:ts": "tsc --build", - "build:es": "esbuild src/index.ts --platform=node --target=node19 --bundle --format=esm --minify --sourcemap --outdir=dist --out-extension:.js=.mjs", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "node --enable-source-maps dist/index.mjs", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - } -} diff --git a/uniquely/com-api/src/index.ts b/uniquely/com-api/src/index.ts deleted file mode 100644 index 9dc01e60a..000000000 --- a/uniquely/com-api/src/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {logger} from './lib/config.js'; -import './root-user.js'; -import './route/admin/user-list-inc-order.js'; -import './route/home.js'; -import './route/patch-price-list.js'; -import './route/patch-product-list.js'; -import './route/patch-user.js'; -import './route/put-order.js'; - -logger.logOther?.('..:: Alwatr Customer Order Management API ::..'); diff --git a/uniquely/com-api/src/lib/config.ts b/uniquely/com-api/src/lib/config.ts deleted file mode 100644 index 71924d086..000000000 --- a/uniquely/com-api/src/lib/config.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('com-api'); - -if (process.env.NODE_ENV === 'production') { - if (process.env.STORAGE_TOKEN == null) { - throw new Error('STORAGE_TOKEN is required in production'); - } - - if (process.env.TOKEN_GENERATOR_SECRET == null) { - throw new Error('TOKEN_GENERATOR_SECRET is required in production'); - } -} - -const userDir = 'securage/auth/${userId}' as const; - -export const config = { - storageClient: { - host: process.env.STORAGE_HOST ?? '127.0.0.1', - port: process.env.STORAGE_PORT != null ? +process.env.STORAGE_PORT : 9000, - token: process.env.STORAGE_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - - token: { - secret: process.env.TOKEN_GENERATOR_SECRET ?? 'YOUR_SECRET', - duration: '6M', - }, - - nanoServer: { - host: process.env.HOST ?? '0.0.0.0', - port: process.env.PORT != null ? +process.env.PORT : 8000, - // allowAllOrigin: true, - }, - - secureStorage: { - userList: 'securage/vault/user-list', - userDir, - userOrderList: `${userDir}/order-list`, - userProfile: `${userDir}/profile`, - }, - - publicStorage: { - productList: 'publistore/hub/product-list/${name}', - priceList: 'publistore/vault/price-list/${name}', - userDir: 'publistore/auth/${userToken}', - }, -} as const; - -logger.logProperty?.('config', config); diff --git a/uniquely/com-api/src/lib/crypto.ts b/uniquely/com-api/src/lib/crypto.ts deleted file mode 100644 index a3f541130..000000000 --- a/uniquely/com-api/src/lib/crypto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {AlwatrUserFactory, userIdGeneratorPreConfig, userTokenGeneratorPreConfig} from '@alwatr/crypto'; - -import {config} from './config.js'; - -export const userFactory = new AlwatrUserFactory( - userIdGeneratorPreConfig, - { - ...userTokenGeneratorPreConfig, - ...config.token, - }, -); diff --git a/uniquely/com-api/src/lib/patch-user.ts b/uniquely/com-api/src/lib/patch-user.ts deleted file mode 100644 index acdb38c85..000000000 --- a/uniquely/com-api/src/lib/patch-user.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {config} from './config.js'; -import {userFactory} from './crypto.js'; -import {storageClient, userStorage} from './storage.js'; -import {touchUserOrder} from './user-order.js'; - -import type {ComUser} from '@alwatr/type/customer-order-management.js'; - -export const patchUser = async (user: ComUser): Promise => { - if (user.id === 'new') { - user.id = userFactory.generateId(); - } - - delete user.token; - - user = await userStorage.set(user); - - user.token = userFactory.generateToken([user.id, user.lpe]); - - await storageClient.cacheApiResponse(config.secureStorage.userProfile.replace('${userId}', user.id), user); - - await touchUserOrder(user.id); - - await storageClient.link( - config.secureStorage.userDir.replace('${userId}', user.id) + '/', // append '/' to detect as folder - config.publicStorage.userDir.replace('${userToken}', user.token), - ); - - return user; -}; diff --git a/uniquely/com-api/src/lib/server.ts b/uniquely/com-api/src/lib/server.ts deleted file mode 100644 index df789f689..000000000 --- a/uniquely/com-api/src/lib/server.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrNanoServer} from '@alwatr/nano-server'; - -import {config} from './config.js'; - -export const nanoServer = new AlwatrNanoServer(config.nanoServer); diff --git a/uniquely/com-api/src/lib/storage.ts b/uniquely/com-api/src/lib/storage.ts deleted file mode 100644 index b3c33e89f..000000000 --- a/uniquely/com-api/src/lib/storage.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import {config} from './config.js'; - -import type {ComUser} from '@alwatr/type/customer-order-management.js'; - -export const storageClient = new AlwatrStorageClient(config.storageClient); - -export const userStorage = new AlwatrStorageClient({ - ...config.storageClient, - name: config.secureStorage.userList, -}); diff --git a/uniquely/com-api/src/lib/user-order.ts b/uniquely/com-api/src/lib/user-order.ts deleted file mode 100644 index 8497ecbeb..000000000 --- a/uniquely/com-api/src/lib/user-order.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {config} from './config.js'; -import {storageClient} from './storage.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {ComUserIncOrder, Order} from '@alwatr/type/customer-order-management.js'; - -export const touchUserOrder = (userId: string): Promise => { - return storageClient.touch(config.secureStorage.userOrderList.replace('${userId}', userId)); -}; - -export const getUserOrder = (userId: string): Promise> => { - return storageClient.getStorage(config.secureStorage.userOrderList.replace('${userId}', userId)); -}; - -export const patchUserOrder = (userId: string, order: Order): Promise => { - return storageClient.set(order, config.secureStorage.userOrderList.replace('${userId}', userId)); -}; - -export const getUserListIncOrder = async (): Promise> => { - const userList = (await storageClient.getStorage(config.secureStorage.userList)).data; - - for (const user of Object.values(userList)) { - if (!Object.prototype.hasOwnProperty.call(userList, user.id)) continue; - user.orderList = (await getUserOrder(user.id)).data; - } - - return userList; -}; diff --git a/uniquely/com-api/src/lib/validate-user-auth.ts b/uniquely/com-api/src/lib/validate-user-auth.ts deleted file mode 100644 index eef10b509..000000000 --- a/uniquely/com-api/src/lib/validate-user-auth.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {userFactory} from './crypto.js'; -import {userStorage} from './storage.js'; - -import type {AlwatrServiceResponseFailed, UserAuth} from '@alwatr/type'; -import type {ComUser, UserPermission} from '@alwatr/type/customer-order-management.js'; - -const error403 = (): AlwatrServiceResponseFailed => ({ - ok: false, - statusCode: 403, - errorCode: 'access_denied', -}); - -export const validateUserAuth = async (userAuth: UserAuth | null, permission?: UserPermission): Promise => { - if (userAuth == null) { - throw { - ok: false, - statusCode: 401, - errorCode: 'authorization_required', - }; - } - - - const user = await userStorage.get(userAuth.id); - - if (user == null) throw error403(); - - if (!userFactory.verifyToken([user.id, user.lpe], userAuth.token)) throw error403(); - - if (permission && user.permissions !== 'root') { - if (!Array.isArray(user.permissions) || user.permissions.includes(permission) !== true) { - throw error403(); - } - } - - return user; -}; diff --git a/uniquely/com-api/src/root-user.ts b/uniquely/com-api/src/root-user.ts deleted file mode 100644 index 497c5a2ae..000000000 --- a/uniquely/com-api/src/root-user.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {logger} from './lib/config.js'; -import {patchUser} from './lib/patch-user.js'; -import {userStorage} from './lib/storage.js'; - -/** - * Create first root user when user storage is empty at the first time. - */ -const initRootUser = async (): Promise => { - if ((await userStorage.keys()).length === 0) { - logger.logMethod?.('init-root-user'); - - const rootUser = await patchUser({ - id: 'new', - lpe: 1, - fullName: 'Alwatr Admin', - country: 'ir', - phoneNumber: 989123456789, - gender: 'male', - permissions: 'root', - }); - - logger.logProperty?.('rootUser', rootUser); - } -}; - -initRootUser(); diff --git a/uniquely/com-api/src/route/admin/user-list-inc-order.ts b/uniquely/com-api/src/route/admin/user-list-inc-order.ts deleted file mode 100644 index 802acbe78..000000000 --- a/uniquely/com-api/src/route/admin/user-list-inc-order.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {logger} from '../../lib/config.js'; -import {nanoServer} from '../../lib/server.js'; -import {getUserListIncOrder} from '../../lib/user-order.js'; -import {validateUserAuth} from '../../lib/validate-user-auth.js'; - -import type {ComUser} from '@alwatr/type/customer-order-management.js'; - -nanoServer.route>('GET', '/admin/user-list-inc-order', async (connection) => { - logger.logMethod?.('get-admin-user-list-inc-order'); - - await validateUserAuth(connection.getUserAuth(), 'user-list-inc-order/read'); - - return { - ok: true, - data: await getUserListIncOrder(), - }; -}); diff --git a/uniquely/com-api/src/route/home.ts b/uniquely/com-api/src/route/home.ts deleted file mode 100644 index 1fb94ce61..000000000 --- a/uniquely/com-api/src/route/home.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {StringifyableRecord} from '@alwatr/type'; - -import {nanoServer} from '../lib/server.js'; - -nanoServer.route('GET', '/', () => ({ - ok: true, - data: { - app: '..:: Alwatr Customer Order Management API ::..', - message: 'Hello ;)', - }, -})); diff --git a/uniquely/com-api/src/route/patch-price-list.ts b/uniquely/com-api/src/route/patch-price-list.ts deleted file mode 100644 index d45c69690..000000000 --- a/uniquely/com-api/src/route/patch-price-list.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {config, logger} from '../lib/config.js'; -import {nanoServer} from '../lib/server.js'; -import {storageClient} from '../lib/storage.js'; -import {validateUserAuth} from '../lib/validate-user-auth.js'; - -import type {ProductPrice} from '@alwatr/type/customer-order-management.js'; - -nanoServer.route>('PATCH', '/price-list', async (connection) => { - logger.logMethod?.('patch-price-list'); - - await validateUserAuth(connection.getUserAuth(), 'price/patch'); - - const params = connection.requireQueryParams<{name: string}>({name: 'string'}); - const bodyJson = await connection.requireJsonBody<{data: ProductPrice[]}>(); - - const storage = config.publicStorage.priceList.replace('${name}', params.name); - for (const price of bodyJson.data) { - await storageClient.set(price, storage); - } - - return { - ok: true, - data: {}, - }; -}); diff --git a/uniquely/com-api/src/route/patch-product-list.ts b/uniquely/com-api/src/route/patch-product-list.ts deleted file mode 100644 index 8178b0710..000000000 --- a/uniquely/com-api/src/route/patch-product-list.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {config, logger} from '../lib/config.js'; -import {nanoServer} from '../lib/server.js'; -import {storageClient} from '../lib/storage.js'; -import {validateUserAuth} from '../lib/validate-user-auth.js'; - -import type {Product} from '@alwatr/type/customer-order-management.js'; - -nanoServer.route>('PATCH', '/product-list', async (connection) => { - logger.logMethod?.('patch-product-list'); - - await validateUserAuth(connection.getUserAuth(), 'product/patch'); - - const params = connection.requireQueryParams<{storage: string}>({storage: 'string'}); - const bodyJson = await connection.requireJsonBody<{data: Product[]}>(); - - const storage = config.publicStorage.productList.replace('${name}', params.storage); - for (const price of bodyJson.data) { - await storageClient.set(price, storage); - } - - return { - ok: true, - data: {}, - }; -}); diff --git a/uniquely/com-api/src/route/patch-user.ts b/uniquely/com-api/src/route/patch-user.ts deleted file mode 100644 index 9bc0a9e69..000000000 --- a/uniquely/com-api/src/route/patch-user.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {logger} from '../lib/config.js'; -import {userFactory} from '../lib/crypto.js'; -import {patchUser} from '../lib/patch-user.js'; -import {nanoServer} from '../lib/server.js'; -import {validateUserAuth} from '../lib/validate-user-auth.js'; - -import type {ComUser} from '@alwatr/type/customer-order-management.js'; - -nanoServer.route('PATCH', '/user', async (connection) => { - logger.logMethod?.('patch-user'); - - await validateUserAuth(connection.getUserAuth(), 'user/patch'); - - const userData = await connection.requireJsonBody(); - - if (userData.id != 'new') { - if (!userData.id || !userFactory.verifyId(userData.id)) { - // TODO: better validate user data. - return { - ok: false, - statusCode: 400, - errorCode: 'invalid_user_id', - }; - } - } - - const user = await patchUser(userData); - - return { - ok: true, - data: user, // include token - }; -}); diff --git a/uniquely/com-api/src/route/put-order.ts b/uniquely/com-api/src/route/put-order.ts deleted file mode 100644 index 5f9fa3386..000000000 --- a/uniquely/com-api/src/route/put-order.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {logger} from '../lib/config.js'; -import {nanoServer} from '../lib/server.js'; -import {patchUserOrder} from '../lib/user-order.js'; -import {validateUserAuth} from '../lib/validate-user-auth.js'; - -import type {Order} from '@alwatr/type/customer-order-management.js'; - -// Insert new order -nanoServer.route('PUT', '/order', async (connection) => { - logger.logMethod?.('put-order'); - - const userAuth = await validateUserAuth(connection.getUserAuth()); - const remoteAddress = connection.getRemoteAddress(); - const clientId = connection.requireClientId(); - - let order = await connection.requireJsonBody(); - - order.id = 'auto_increment'; - order.status = 'registered'; - order.clientId = clientId; - order.remoteAddress = remoteAddress; - - order = await patchUserOrder(userAuth.id, order); - - return { - ok: true, - data: order, - }; -}); diff --git a/uniquely/com-api/tsconfig.json b/uniquely/com-api/tsconfig.json deleted file mode 100644 index 3921558ee..000000000 --- a/uniquely/com-api/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build", - "noEmit": true, - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/nano-server"}, - {"path": "../../core/type"}, - {"path": "../../core/crypto"}, - {"path": "../../core/logger"}, - {"path": "../../core/math"}, - {"path": "../../core/storage-client"} - ] -} diff --git a/uniquely/com-pwa/CHANGELOG.md b/uniquely/com-pwa/CHANGELOG.md deleted file mode 100644 index 37644d502..000000000 --- a/uniquely/com-pwa/CHANGELOG.md +++ /dev/null @@ -1,371 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/com-pwa - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **com-pwa/admin-order-list:** show admin in user list ([343b7e8](https://github.com/AliMD/alwatr/commit/343b7e8c7aa4fa363537df34bb72ee69a5eca739)) -- **com-pwa/admin-order:** load userListIncOrderStorageContextConsumer ([002e6b5](https://github.com/AliMD/alwatr/commit/002e6b58f08f9aa69eece179499994a9c60c6569)) -- **com-pwa/admin-order:** use backToAdminOrderList page ([82e4c78](https://github.com/AliMD/alwatr/commit/82e4c787dd36913671f5e3cab578d3be3f2e6169)) -- **com-pwa:** 404 page text ([9bc2f23](https://github.com/AliMD/alwatr/commit/9bc2f23f40c0bd88a9d20e26a345df401c987f17)) -- **com-pwa:** add `a` link ([bd431bf](https://github.com/AliMD/alwatr/commit/bd431bff66ce51081bbbb41ac52e7f3948ea9a41)) -- **com-pwa:** admin sort ([f4050a3](https://github.com/AliMD/alwatr/commit/f4050a3c37480a9e78f3e332bc7f4d27956b653e)) -- **com-pwa:** back to `admin-order-list` & add the missing `this` param ([23bb08f](https://github.com/AliMD/alwatr/commit/23bb08f70c34657acd64b62a448bd9144ffe0606)) -- **com-pwa:** remove extra import ([c562cda](https://github.com/AliMD/alwatr/commit/c562cda67e664ffca1fb180ec69c68eff50198c3)) -- **com-pwa:** rename the page ([0b454fe](https://github.com/AliMD/alwatr/commit/0b454fe781f78d352b0e3aac4083634f8036cbd8)) -- **com-pwa:** set receivePrevious to no for button ([b046740](https://github.com/AliMD/alwatr/commit/b046740bd86ddba9a4d8fa3a9c7f3d67c885d6ca)) -- **com-pwa:** set receivePrevious: 'No' for button ([3398aae](https://github.com/AliMD/alwatr/commit/3398aaefcf7200deb46b0b7cb282998dd3fe1c44)) -- **com-pwa:** user-inc-order-box tag name ([0bbb9ba](https://github.com/AliMD/alwatr/commit/0bbb9ba7123bafb5f71f0fe45e6e91c51dbdd69b)) -- **pwa:** build clean flag ([ca324ef](https://github.com/AliMD/alwatr/commit/ca324ef4270e43b2dc4e51574e01aad77ae4abf8)) - -### Features - -- **com-pwa/admin-order-list:** reload button ([b967be3](https://github.com/AliMD/alwatr/commit/b967be3cd66b2cadad12307d574441d2a90f1072)) -- **com-pwa/admin-order:** retry button ([b4c06d7](https://github.com/AliMD/alwatr/commit/b4c06d7b880c57fb2fe2ffe9cbe76ab57fc6ac80)) -- **com-pwa/user-info-box:** improve style ([268803e](https://github.com/AliMD/alwatr/commit/268803ebaf36041c4d4dae1b5fac0ae03a0f8858)) -- **com-pwa:** add `admin-order` page ([ccd340f](https://github.com/AliMD/alwatr/commit/ccd340fdffc8675ed9995ba9391abf14ccbd84ea)) -- **com-pwa:** add `admin-order` route ([7bb5ade](https://github.com/AliMD/alwatr/commit/7bb5adea863fec4170877f096a1da4519b853c36)) -- **com-pwa:** admin sort ([9c5d8cd](https://github.com/AliMD/alwatr/commit/9c5d8cd67e9b0f79509a24e3339004d019f3d57d)) -- **com-pwa:** admin-order-list page ([f8d7249](https://github.com/AliMD/alwatr/commit/f8d72494e11276ed74296313c391bf925ab4c55b)) -- **com-pwa:** bold text for count ([3da1259](https://github.com/AliMD/alwatr/commit/3da12595307a1cad8d58e43fb3af3adf1602a9de)) -- **com-pwa:** improve admin-order-list page ([6633d36](https://github.com/AliMD/alwatr/commit/6633d36197d1d796a633860fc7a2d9f5fd8d1139)) -- **com-pwa:** set redirect on profile icon for admin ([6c668cc](https://github.com/AliMD/alwatr/commit/6c668cc5abd832cc9cdf91b5e5e3209986fd07ae)) -- **com-pwa:** user-info-box ([2805908](https://github.com/AliMD/alwatr/commit/28059087a5aa58699e9ac227f2db0b1f03c2077a)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -### Bug Fixes - -- **com-pwa/user0info-box:** import issues ([1390b6a](https://github.com/AliMD/alwatr/commit/1390b6a097270635e24975aa79cd9b48d8584297)) -- **com-pwa:** `productFinalPriceStorageContextConsumer` ([390ebfb](https://github.com/AliMD/alwatr/commit/390ebfb9890af75c1148264d2778628caa320bc4)) -- **com-pwa:** `url`s based on latest `api` ([a9d95cb](https://github.com/AliMD/alwatr/commit/a9d95cbec0e8fb3caae976de688618bca71d26dc)) -- **com-pwa:** a temporary solution to prevent compile error ([8135e21](https://github.com/AliMD/alwatr/commit/8135e21d20b25fb0385b84aa813404ee70eb7bde)) -- **com-pwa:** add `serverContextConsumer` to get `order`s(not completed) ([2cb5fb0](https://github.com/AliMD/alwatr/commit/2cb5fb0400aba4b8849bb34f06e14a38007a9712)) -- **com-pwa:** fix some issues based on latest `api` changes(not completed) ([1363794](https://github.com/AliMD/alwatr/commit/1363794b0b3e9f7b6db0b82d8d4a9713b63bf204)) -- **com-pwa:** import src ([641159b](https://github.com/AliMD/alwatr/commit/641159b55fbeafbc61923390edab036c4afd1aba)) -- **com-pwa:** order_item_qty_add round to 80 ([3a43034](https://github.com/AliMD/alwatr/commit/3a430340c1f81581f66ca34d263fa97e3e3a40c0)) -- **com-pwa:** pre-load images of products ([698305d](https://github.com/AliMD/alwatr/commit/698305dc28d64ec2b42dcd691ed1312076a3243e)) -- **com-pwa:** remove an incorrect `import` ([82f7bc7](https://github.com/AliMD/alwatr/commit/82f7bc7ac953054a70f1abc1a16e28d1ad8d0500)) -- **com-pwa:** remove extra `url` ([1876166](https://github.com/AliMD/alwatr/commit/1876166bb135dface2873d1ea22be97336ccf504)) -- **com-pwa:** update `config`s based on last `api` changes ([535c08b](https://github.com/AliMD/alwatr/commit/535c08b2945579346d2b740f87efc380ece44167)) -- **com-pwa:** use `userProfileContext` only & fix some `path`s based on latest `api` changes ([1443e83](https://github.com/AliMD/alwatr/commit/1443e83ca58e4a14cddfb9652ad0c14f979f4fad)) -- **com-pwa:** use `userProfileContextConsumer` to update options of some requests ([025507a](https://github.com/AliMD/alwatr/commit/025507a0a5499330067b8c4a72a848c6dc2fae4e)) -- **com-pwa:** use correct config for api ([ea5c463](https://github.com/AliMD/alwatr/commit/ea5c463348345290948b39639225a49d91744fec)) - -### Features - -- **com-pwa:** `user-list` page(not-completed) ([203d9bb](https://github.com/AliMD/alwatr/commit/203d9bb5a3b26e11e7cf50e1049f4a78c77e7248)) -- **com-pwa:** car count ([d2ea9c1](https://github.com/AliMD/alwatr/commit/d2ea9c12863d214afe5daa7d07997175c19ca859)) -- **com-pwa:** order config ([5de4545](https://github.com/AliMD/alwatr/commit/5de454521012419a7dae9599f4274b98469015aa)) -- **com-pwa:** review and fix issues ([b78d679](https://github.com/AliMD/alwatr/commit/b78d6790836853839e937aa26e71a43b24bb59e0)) -- **com-pwa:** updateOrderCalculate ([4c17096](https://github.com/AliMD/alwatr/commit/4c17096f9fa5c429ccba4895fab29526409a8bc9)) - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- **com-api:** remove require token ([08a741e](https://github.com/AliMD/alwatr/commit/08a741ef925cf3d13d788cca33143d3a212bb5d3)) -- **com-pwa:** \_addSignalListeners ([536e52e](https://github.com/AliMD/alwatr/commit/536e52edb2f10008ba7f10a2af6bce29c97be501)) -- **com-pwa/buttons:** detail label key ([8213869](https://github.com/AliMD/alwatr/commit/8213869b8446fd20f77a6b6264204fa079ff7ea5)) -- **com-pwa/chat-storage:** remove get_chat_storage signal ([2712438](https://github.com/AliMD/alwatr/commit/2712438d7dced33e2eed83164d59cd25d7c50c14)) -- **com-pwa/context-provider:** path ([bfa1086](https://github.com/AliMD/alwatr/commit/bfa1086d613363cb0f53ac7ce347c49c3ae1a6a7)) -- **com-pwa/new-order:** context state listener ([26b81fb](https://github.com/AliMD/alwatr/commit/26b81fb23fe9319d8f5b0dfcea3c222b1c81faf0)) -- **com-pwa/new-order:** debugging ([9027eb0](https://github.com/AliMD/alwatr/commit/9027eb013e6803b1f77dc7cbf4cc14704f49557d)) -- **com-pwa/new-order:** import icon box ([073b913](https://github.com/AliMD/alwatr/commit/073b91358a1fdca88dc635ce7bc9645d828d2f7d)) -- **com-pwa/new-order:** set empty shippingInfo ([d74bfa3](https://github.com/AliMD/alwatr/commit/d74bfa38adfaddbc3d5098b0065c25518c8b0a6b)) -- **com-pwa/new-order:** set gotState ([1c6be87](https://github.com/AliMD/alwatr/commit/1c6be87421ae304b227ec669fb6d87124e2ec451)) -- **com-pwa/new-order:** set select product context property ([4f7f5ac](https://github.com/AliMD/alwatr/commit/4f7f5ac30dab3419acfcb5d5552b93badd03c1f0)) -- **com-pwa/new-order:** set select product context property ([04e9809](https://github.com/AliMD/alwatr/commit/04e9809741ea970e79b71bba0e9403d5c27e65bb)) -- **com-pwa/new-order:** validate ([e76d7ac](https://github.com/AliMD/alwatr/commit/e76d7acd1d7e0119200a44eaaa8718985074829b)) -- **com-pwa/order-detail:** fetch product storage on request update ([28b07ac](https://github.com/AliMD/alwatr/commit/28b07acc0cc14562747da6a6cd6c97ed20ef404a)) -- **com-pwa/order-detail:** import issue ([99f2d01](https://github.com/AliMD/alwatr/commit/99f2d01dde7a8cb915cf910464e7527fdd2d8381)) -- **com-pwa/order-detail:** set order detail on fsm context ([aa68c39](https://github.com/AliMD/alwatr/commit/aa68c39d1ee0534c9e4ae372128c154cf98a7bde)) -- **com-pwa/order-list:** retry button ([831be0c](https://github.com/AliMD/alwatr/commit/831be0cb78b9b5cfed1358f700244c7de55deea9)) -- **com-pwa/order-list:** state machine id ([cc524b8](https://github.com/AliMD/alwatr/commit/cc524b8c6e25abd53ff436e342317d83c5dd7838)) -- **com-pwa/order:** reload button content ([44917d8](https://github.com/AliMD/alwatr/commit/44917d8e296e6096f54805cfba46941e691de22b)) -- **com-pwa/select-product:** zero qty ([9f60692](https://github.com/AliMD/alwatr/commit/9f6069223df5d3c34d9d2cd68ddeb68da02466eb)) -- **com-pwa/sign-in:** add /user to url ([e1ac5e1](https://github.com/AliMD/alwatr/commit/e1ac5e144e9cb84357907d1184cb38438d821dad)) -- **com-pwa/sign-in:** i18n key ([0fec07d](https://github.com/AliMD/alwatr/commit/0fec07d96313413e8f6c3f6ba5486ecb6c8a0822)) -- **com-pwa/sign-in:** loading failed render state ([ce7e862](https://github.com/AliMD/alwatr/commit/ce7e8620e5e4be8ef2fb83cd2ffbbbf0eec9d1ed)) -- **com-pwa/sign-in:** page height ([283df4f](https://github.com/AliMD/alwatr/commit/283df4f87a0585728dcfe77842d2112fea3e0157)) -- **com-pwa/sign-in:** redirect if signed before ([d0ad8b5](https://github.com/AliMD/alwatr/commit/d0ad8b55f580a7fa087c92f33737b304d34d79b1)) -- **com-pwa/sign-in:** styles ([0fc755e](https://github.com/AliMD/alwatr/commit/0fc755efe3b0a2d18767753178bc8d793ba6d38d)) -- **com-pwa/sign-in:** use user token for check login status ([c662f60](https://github.com/AliMD/alwatr/commit/c662f60f65042395dc167a95c28223418a7b8287)) -- **com-pwa/signIn:** import type ([7155847](https://github.com/AliMD/alwatr/commit/7155847bcddf0bd815a63593499e80e2f2cf9223)) -- **com-pwa/signIn:** rename sing to sign ([e00d193](https://github.com/AliMD/alwatr/commit/e00d193b12f83bcd4e994064ebdab8200832ae06)) -- **com-pwa/status-box:** order date ([a9bdb39](https://github.com/AliMD/alwatr/commit/a9bdb39b0a3cd2bcf8ab688acc8fb1b75a6a5c53)) -- **com-pwa/ui:** fix errors base on last changes in `FSM` ([f7f4301](https://github.com/AliMD/alwatr/commit/f7f43016480e7045ec316bef611f0bc01944b4d4)) -- **com-pwa:** `retry` button signal ([51d16bc](https://github.com/AliMD/alwatr/commit/51d16bc5f96d2019f17577320dd89fb3df2b5b08)) -- **com-pwa:** add `/` after `config.cdn` when use ([407739e](https://github.com/AliMD/alwatr/commit/407739e6b2e39df6c8204397327955a61eb922ca)) -- **com-pwa:** button width ([2f80fdb](https://github.com/AliMD/alwatr/commit/2f80fdb5c6da2a053783f071c48bc4ca36f02769)) -- **com-pwa:** cdn address ([0a0ce7d](https://github.com/AliMD/alwatr/commit/0a0ce7da11e24481cef6b8afac049e59f19871fb)) -- **com-pwa:** cleanup ([adabe19](https://github.com/AliMD/alwatr/commit/adabe196882540cbe2c5901a6ac7cc9e33af5ea7)) -- **com-pwa:** color theme ([0f62608](https://github.com/AliMD/alwatr/commit/0f626080b764f79af84c53f2508e6a988340e9f7)) -- **com-pwa:** description item in shippingInfo state ([2c23599](https://github.com/AliMD/alwatr/commit/2c23599e21bd740dc8f5ce565dad5627fcc6a94d)) -- **com-pwa:** display `reloadingFailed` with a correct condition ([c6cf963](https://github.com/AliMD/alwatr/commit/c6cf9637c4f2c0f079336d0d3989303f511b9333)) -- **com-pwa:** final price storage ([9356171](https://github.com/AliMD/alwatr/commit/93561714b726100d3f26dd33d30dac382c17d085)) -- **com-pwa:** fix a text format issue ([e34beff](https://github.com/AliMD/alwatr/commit/e34beff33fc00a1d0bc60136afdcbfe67c7f9d48)) -- **com-pwa:** fix some `lint` issues ([1e9cf7e](https://github.com/AliMD/alwatr/commit/1e9cf7e7b732a2ab580e555589235708ba18a6ab)) -- **com-pwa:** fix some bugs of `sign-in` process ([96890f3](https://github.com/AliMD/alwatr/commit/96890f3e4665da4b3bcf79b836a45ef106322586)) -- **com-pwa:** fix some issues ([c19754d](https://github.com/AliMD/alwatr/commit/c19754d9be66bf3a909a74668c415e997a9a2ab6)) -- **com-pwa:** fix some sections of login(not completed) ([7dd3d3e](https://github.com/AliMD/alwatr/commit/7dd3d3ed0411f0d874cbe7773a0e590b28089990)) -- **com-pwa:** fix the initial value of `qty` ([fe80b99](https://github.com/AliMD/alwatr/commit/fe80b99d23a09f6af3ba1f67d59d7059f4b65f19)) -- **com-pwa:** fix the rendering issue after registering a new order and then go to show its details ([f35593f](https://github.com/AliMD/alwatr/commit/f35593fe1bbdf51549d95407ebe78c92c5c119cf)) -- **com-pwa:** get local storage for token ([554a004](https://github.com/AliMD/alwatr/commit/554a0046ac28ca43ccf79f37f6d101f93b64f7dd)) -- **com-pwa:** handle null created ([118fef1](https://github.com/AliMD/alwatr/commit/118fef1277dc876247d9cc62f9a6a2512ebecd3e)) -- **com-pwa:** import issue ([3fdeaf1](https://github.com/AliMD/alwatr/commit/3fdeaf15d7402898b6733bcb44572b78000fb090)) -- **com-pwa:** import issue ([c733c9d](https://github.com/AliMD/alwatr/commit/c733c9d73d90cbec98c4eb0dc367e5f7229c9162)) -- **com-pwa:** import issue ([a86fc2c](https://github.com/AliMD/alwatr/commit/a86fc2c385a9e8ff113a2f991273e348e5c545c9)) -- **com-pwa:** import price storage context provider ([a8d80d1](https://github.com/AliMD/alwatr/commit/a8d80d1d7b3fb15d490eb7c3ddd1e021973678f6)) -- **com-pwa:** import type ([09abab2](https://github.com/AliMD/alwatr/commit/09abab28f890fb9da791aa29f377753e77dd9cec)) -- **com-pwa:** nullStr on empty string shipping form ([cf3554f](https://github.com/AliMD/alwatr/commit/cf3554fbd49c8d8cad9f0ae308ff195df893d4d8)) -- **com-pwa:** order status box date for new order ([8e5b698](https://github.com/AliMD/alwatr/commit/8e5b69847860af12f2bb6bb8a9fdd1e240918211)) -- **com-pwa:** order_shipping_info_empty_description ([87e99cc](https://github.com/AliMD/alwatr/commit/87e99ccad1647d117c78b634e811f064f0ebda50)) -- **com-pwa:** orderId property ([ea19700](https://github.com/AliMD/alwatr/commit/ea197001e4c653fe4f22d2dcbcaeaf0eabda5110)) -- **com-pwa:** reload button ([dc3fda0](https://github.com/AliMD/alwatr/commit/dc3fda042ec296a91e43e867a1893d3dad160c2f)) -- **com-pwa:** remove style ([85a28ac](https://github.com/AliMD/alwatr/commit/85a28ac5e90d5ab7205713d5b1f9fae1b1d9432f)) -- **com-pwa:** remove token from config ([52e37e7](https://github.com/AliMD/alwatr/commit/52e37e76c423cdd82715f620dcf699495c29c734)) -- **com-pwa:** rename `signInContextConsumer` to `signInServerContext` ([9a809f4](https://github.com/AliMD/alwatr/commit/9a809f4b5dfb499bbc8f9ff6bb7c6a039618a83b)) -- **com-pwa:** review and fix many errors ([98ed4fe](https://github.com/AliMD/alwatr/commit/98ed4feab2a05d4cca950651c7856a6115a56d0a)) -- **com-pwa:** routeId ([1d926e3](https://github.com/AliMD/alwatr/commit/1d926e3223f80869149df00e119f4119be5977b5)) -- **com-pwa:** routeId ([94d12f3](https://github.com/AliMD/alwatr/commit/94d12f3ad8c3b1271db8ff108e6ced4585a189ba)) -- **com-pwa:** set qty ([1714314](https://github.com/AliMD/alwatr/commit/17143143b4cccb0803050717dd67f0cd8baeab02)) -- **com-pwa:** set soffit.co href ([e136417](https://github.com/AliMD/alwatr/commit/e1364170fa4cf35df24c421788f9266c093da5f8)) -- **com-pwa:** show a propely message when there isn't any orders ([bd4245e](https://github.com/AliMD/alwatr/commit/bd4245ef051db37c0a09770f56b00b0c3ec03b62)) -- **com-pwa:** sign-in issue ([52ecf62](https://github.com/AliMD/alwatr/commit/52ecf62809c4a1ffbfa1d698c2972cf2b93bbe93)) -- **com-pwa:** submit validation ([96adccc](https://github.com/AliMD/alwatr/commit/96adccca49289f3248c2c979f21e62d4d50b6b28)) -- **com-pwa:** undefined route on check signed in ([828e788](https://github.com/AliMD/alwatr/commit/828e788d7e866e303bf5a73985690b7db41f0582)) -- **com-pwa:** use service response type for sign in context type ([c6b2ce1](https://github.com/AliMD/alwatr/commit/c6b2ce1baa297eb348f309d99310ed3a7615b6bf)) -- **com-wa:** sings ([85efb75](https://github.com/AliMD/alwatr/commit/85efb7531a62e784ede9a7aeda122614c10ee49f)) -- **com/manger:** fix `signalId` value ([ad83bcb](https://github.com/AliMD/alwatr/commit/ad83bcb2e3f637f4e961f29cc258e5669bef5b0e)) -- **com/select-product:** product path ([fbbd900](https://github.com/AliMD/alwatr/commit/fbbd9007945b1d2c997f621fa44a48fc0bf81c4e)) -- **com/ui:** fix `qtyInputChange` & some other issues ([26aed31](https://github.com/AliMD/alwatr/commit/26aed3152d7d1899aebbefeeedb9bb44ef16a8aa)) -- **com/user:** localStorageSuffixKey ([29eb0c3](https://github.com/AliMD/alwatr/commit/29eb0c3c5c5d672aabd0bcf561b030dafe9291e8)) -- **com:** clean order-list ols controller ([78c6211](https://github.com/AliMD/alwatr/commit/78c6211e57a00b8dd9396c85019f28168585494a)) -- **com:** global `fetchContextOptions` ([9901fa2](https://github.com/AliMD/alwatr/commit/9901fa28e37460202000f23522001324660ce071)) -- **com:** import issue ([589a6f2](https://github.com/AliMD/alwatr/commit/589a6f27b0b328cf0c3b0676c3ccebaf84d80db1)) -- **com:** imports ([3c13f4e](https://github.com/AliMD/alwatr/commit/3c13f4ea45c31ecf70cfc08d53c51790f5859aec)) -- **com:** order status box render ([8942f29](https://github.com/AliMD/alwatr/commit/8942f29aa3e061465453b3dc5d68c0f889f4363b)) -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- **com:** separate `complete` render content ([06a94f1](https://github.com/AliMD/alwatr/commit/06a94f1e0f20d16b95e7c3b6816e6adb070ce138)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- packages and refs ([eea2382](https://github.com/AliMD/alwatr/commit/eea2382e459ccaa3e7b4b329d9c196eda146a08e)) -- **type/com:** qty input border-radius ([0aaf019](https://github.com/AliMD/alwatr/commit/0aaf0194ba35051baece92c327c8a775dab59a37)) - -### Features - -- **com-pwa/buttons:** print button ([6237fc5](https://github.com/AliMD/alwatr/commit/6237fc544bbbd23f6305465e8a2fccf336e0355e)) -- **com-pwa/config:** absolute url path ([ac8f33c](https://github.com/AliMD/alwatr/commit/ac8f33cbcf17a5f4e82d2b69549eeaa69147de62)) -- **com-pwa/new-order:** edit button on review state ([abb1706](https://github.com/AliMD/alwatr/commit/abb17065fa15df97132d4ff27e34e93759c48e00)) -- **com-pwa/new-order:** get and set content ([fa27738](https://github.com/AliMD/alwatr/commit/fa2773861f7ecc61a2278397286cb85b66480650)) -- **com-pwa/new-order:** orderId context ([88afae3](https://github.com/AliMD/alwatr/commit/88afae3c61de0aa488331bce9e1c7748ca380d67)) -- **com-pwa/new-order:** upgrade to new fsm api ([e2a5f51](https://github.com/AliMD/alwatr/commit/e2a5f51c5a190316172ccaa9312fa77247ef3518)) -- **com-pwa/new-order:** use new fsm ([560dd34](https://github.com/AliMD/alwatr/commit/560dd343c688d6545f1d0a64a87fb829eb68252e)) -- **com-pwa/order-detail-base:** use alwatr-icon-box for render_part_message ([d793b31](https://github.com/AliMD/alwatr/commit/d793b31ecaa76d2e1ca7f73d25a39f851955c62d)) -- **com-pwa/order-detail:** lower opacity on reloading state ([ad3d145](https://github.com/AliMD/alwatr/commit/ad3d145a6a66c41c863c1e80dccec6451fa3ccbf)) -- **com-pwa/order-detail:** use new fsm ([1623a6e](https://github.com/AliMD/alwatr/commit/1623a6e58c6606c113c96fd34892e7dbc6dc3db7)) -- **com-pwa/order-list:** refactor with new fsm ([1005db3](https://github.com/AliMD/alwatr/commit/1005db318ebef14ae6caf28a18fb0d928f6c4788)) -- **com-pwa/order-list:** refactor woth new fsm ([3bf753b](https://github.com/AliMD/alwatr/commit/3bf753bdd4e56098633d67a63cf2c741a8ff0ccf)) -- **com-pwa/order-tracking:** upgrade to new fsm api ([8abb5de](https://github.com/AliMD/alwatr/commit/8abb5de0931778e382ba5bb568aca5ba88fc393c)) -- **com-pwa/order:** use print button in order detail top-app-bar ([9ea55f6](https://github.com/AliMD/alwatr/commit/9ea55f69ec6360769098d77c686da661d9703cd6)) -- **com-pwa/select-product:** upgrade to new fsm api ([c5f5f3c](https://github.com/AliMD/alwatr/commit/c5f5f3ccd7e53ea4633214b95f68def52470bddf)) -- **com-pwa/sign-in:** use simple hash for phoneNumber ([4b88494](https://github.com/AliMD/alwatr/commit/4b884940a536f02928692fbf8686c5ca04dea23a)) -- **com-pwa/sign-in:** auto set userInfo and userToken in local storage ([6b4c3b4](https://github.com/AliMD/alwatr/commit/6b4c3b49a15bfa91360d77191bbfa4b50a08e298)) -- **com-pwa/sign-in:** form login ([6ae0be2](https://github.com/AliMD/alwatr/commit/6ae0be2262583132979d6f7ab47bd0593c286f7c)) -- **com-pwa/sign-in:** handler invalid phone number ([49c88bf](https://github.com/AliMD/alwatr/commit/49c88bf17fdab517b7c42f947ac5f0f4b058f1b5)) -- **com-pwa/sign-in:** null link pass state ([4c03aa9](https://github.com/AliMD/alwatr/commit/4c03aa9cc7755e1600e0a8e759ede4d5c07cac18)) -- **com-pwa/sign-in:** onSignInClick handler ([b4d8aa2](https://github.com/AliMD/alwatr/commit/b4d8aa29d21c0f13f84a0cf983cb108ed3ea17cb)) -- **com-pwa/sign-in:** sanitized phone number ([25c77ae](https://github.com/AliMD/alwatr/commit/25c77aef89f5a891275a5265cac2354ac13d0217)) -- **com-pwa/sign-in:** top-app-bar ([b46f6df](https://github.com/AliMD/alwatr/commit/b46f6dfd3214e23ccd1767a809ddd95405222a27)) -- **com-pwa:** `sing-in` process ([407e9c6](https://github.com/AliMD/alwatr/commit/407e9c640899efdd2bc4633bb966665c6f9b00be)) -- **com-pwa:** change order_shipping_car i18n key ([b8f7daa](https://github.com/AliMD/alwatr/commit/b8f7daa2622506d45e85274db38dbe20a2518f1f)) -- **com-pwa:** chat storage context provider ([8015f1d](https://github.com/AliMD/alwatr/commit/8015f1d531ebb7cc43f25cc14dac403f2d5fe989)) -- **com-pwa:** check signed in ([1fa6db7](https://github.com/AliMD/alwatr/commit/1fa6db78f6fe91b1663d1e48f27ee778e06879ea)) -- **com-pwa:** editable qty text-field ([cc88f53](https://github.com/AliMD/alwatr/commit/cc88f5384a2201728a0ed489abfa77c091378085)) -- **com-pwa:** form validator ([55a06b2](https://github.com/AliMD/alwatr/commit/55a06b2cbcb4b796e14f720845f7809ca482d254)) -- **com-pwa:** link-pass context ([6a2f1b8](https://github.com/AliMD/alwatr/commit/6a2f1b8915e258989189491c9efbaae3e6336e19)) -- **com-pwa:** merge new-order with order detail! ([7546fe3](https://github.com/AliMD/alwatr/commit/7546fe3fca9b0611c6c71d2af9c103cda97cef79)) -- **com-pwa:** order created date in status box ([8945b97](https://github.com/AliMD/alwatr/commit/8945b97a36dd231cbd3bb31565afd5997876cd03)) -- **com-pwa:** order created date in status box ([77f85cd](https://github.com/AliMD/alwatr/commit/77f85cdb4301b2f09a0495acc593016c4277ddf4)) -- **com-pwa:** qty input ([62f33af](https://github.com/AliMD/alwatr/commit/62f33afc9565fd6ece0d8f32d408bb830974f74d)) -- **com-pwa:** reloading failed box ([3c7ba3c](https://github.com/AliMD/alwatr/commit/3c7ba3c14c97d5ad41f1c704bd398cdc9f5d6def)) -- **com-pwa:** show a message when successfully `sign-in` ([2bfa42d](https://github.com/AliMD/alwatr/commit/2bfa42d74132d82555c547e67346882cb32c93e8)) -- **com-pwa:** upgrade to new fsm api ([cc6cb4c](https://github.com/AliMD/alwatr/commit/cc6cb4c69e54a757ec57be5a5d6c51a2feb42640)) -- **com-pwa:** use alwatr-icon-box for render_part_message ([7ab5c15](https://github.com/AliMD/alwatr/commit/7ab5c15c08aebb63c50a0772743715cc23fd606d)) -- **com-pwa:** user context consumer ([a8e1f87](https://github.com/AliMD/alwatr/commit/a8e1f87b68f15ceb941baab96f722b7f1d067791)) -- **com-pwa:** userProfile and userToken context consumer ([2c83dc9](https://github.com/AliMD/alwatr/commit/2c83dc96d1239403e6961e10ecb9caf0f75bdeb2)) -- **com-pwa:** validate order ([f83d93c](https://github.com/AliMD/alwatr/commit/f83d93cc1689a065c0396955a2593e33f47d5bba)) -- **com-pwa:** validate shipping form and item list before enable submit ([9af59d7](https://github.com/AliMD/alwatr/commit/9af59d72a2678249776d738ea79e4f248a442c5c)) -- **com/order-list:** contextError state render ([8f286d2](https://github.com/AliMD/alwatr/commit/8f286d295abd01e70539fd5dcba46ff1691c72d8)) -- **com/order-list:** new state config ([c7c5423](https://github.com/AliMD/alwatr/commit/c7c542331ba2e1c86b372948a393d237f93293c8)) -- **com/order-list:** new topAppBar change model ([d84f2ad](https://github.com/AliMD/alwatr/commit/d84f2add50f3440b1802c66a8440e1373e0c3402)) -- **com/page:** handle `contextError` ([42f6a3d](https://github.com/AliMD/alwatr/commit/42f6a3d52ffe5e5cbdcf66163dfb854f08e076ab)) -- **com/provider/storage:** new provider base on new context state ([045afa8](https://github.com/AliMD/alwatr/commit/045afa8de341bd6b1389da1e03bd439c517f8383)) -- **com/sign-in:** enhance errors ([1fe2532](https://github.com/AliMD/alwatr/commit/1fe2532a4128f30f812d05b821fb167c3070d33d)) -- **com/sign-in:** enhance style ([e5a61ea](https://github.com/AliMD/alwatr/commit/e5a61eaef7d9042a13b1a4693fcb9731ed3374dd)) -- **com:** new order storage provider base on new context ([9129aad](https://github.com/AliMD/alwatr/commit/9129aad052f49afbca13a80e3e5b92127bfabc3e)) -- **com:** order storage provider refresh by user signal ([7138ae0](https://github.com/AliMD/alwatr/commit/7138ae06db7aa7a8058e9fb40f8d62fd79f1e221)) -- **com:** share buttons ([823a26a](https://github.com/AliMD/alwatr/commit/823a26aedf4fe7da57ef0ecd5bbd42de3a20fc24)) -- **com:** sign-in method ([db3a31b](https://github.com/AliMD/alwatr/commit/db3a31bbb2ac00398b3042f347bab4b7a5e4bc38)) -- **type/com:** qtyStep const ([3c928d4](https://github.com/AliMD/alwatr/commit/3c928d406859c85cf939827ece98db6fc39ff914)) -- **ui-kit/style:** add --sys-surface-reloading-opacity ([2ba6367](https://github.com/AliMD/alwatr/commit/2ba6367058290f8bfdf1eabe1d0cd3a634a7d9db)) -- use button content ([a3f3872](https://github.com/AliMD/alwatr/commit/a3f3872c16e2bf5ad99c90cd03563007271fc530)) - -### Performance Improvements - -- **com/order-list:** refactor repeat mode ([b88fb50](https://github.com/AliMD/alwatr/commit/b88fb5047b004539e1995cab02da8a938b70b26f)) -- make google lighthouse happy ([c025dea](https://github.com/AliMD/alwatr/commit/c025dea4a937ee07411b1605ced8d51cd3bc4ce0)) -- **pwa:** optimize downloading performance ([39ef8b4](https://github.com/AliMD/alwatr/commit/39ef8b45065cbfff45273441cca527a1195d9750)) -- **pwa:** optimize first load and rendering ([343d757](https://github.com/AliMD/alwatr/commit/343d757eefab6572df54fb4f7624698e9a9f9e11)) -- **pwa:** optimize index.html ([e9c2613](https://github.com/AliMD/alwatr/commit/e9c2613d1526f2bc0f2cf4fdd34d276286995197)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- build issue ([2f928d2](https://github.com/AliMD/alwatr/commit/2f928d28262f73843ce62c71ec0fd9ba3332ee05)) -- **com-pwa:** calculations ([483b79a](https://github.com/AliMD/alwatr/commit/483b79a1e337d2ea0fae62e469a7afddadf79910)) -- **com-pwa/new-order-controller:** orderId on redirect ([531b159](https://github.com/AliMD/alwatr/commit/531b159ff72d696873b6746f35b86b337e80bff6)) -- **com-pwa/order-item-box:** class name ([6d005fc](https://github.com/AliMD/alwatr/commit/6d005fc80baede12a70705a2db26abab20f73e5d)) -- **com-pwa/page-404:** back btn to home ([481627f](https://github.com/AliMD/alwatr/commit/481627f302f9369610f839099a624152016acf9d)) -- **com-pwa/page-detail:** replace number ([a158f05](https://github.com/AliMD/alwatr/commit/a158f0539233fd629fea77a7fe5ffb158619d8c7)) -- **com-pwa:** build issue ([3b51506](https://github.com/AliMD/alwatr/commit/3b51506fdbfd1d8e586e7cca60f39d2d17980cb5)) -- **com-pwa:** card for form ([accd4fb](https://github.com/AliMD/alwatr/commit/accd4fb3a9998115769f4c2c6e6559a2c5ecbe2b)) -- **com-pwa:** content order links ([e6fc81f](https://github.com/AliMD/alwatr/commit/e6fc81f30cb35773dd3c8e602fbf524edb61eb88)) -- **com-pwa:** context duplicate name ([a20603e](https://github.com/AliMD/alwatr/commit/a20603e1aca084647ba6ea88f606b7409b22646f)) -- **com-pwa:** director imports ([8523674](https://github.com/AliMD/alwatr/commit/852367438c746b726b79cfc744d4cb83555cc5e7)) -- **com-pwa:** extra UnresolvedMixin ([ae12d9b](https://github.com/AliMD/alwatr/commit/ae12d9bfdea9390549ab92a94d4d3e4ac9c962cd)) -- **com-pwa:** form ([6137da1](https://github.com/AliMD/alwatr/commit/6137da1243d574749af025cdafa23ecee2911fd1)) -- **com-pwa:** home top-app-bar icons ([66c726c](https://github.com/AliMD/alwatr/commit/66c726c88902621a69591d3bec1919661be39705)) -- **com-pwa:** home-page content ([031e1cb](https://github.com/AliMD/alwatr/commit/031e1cb483b53100857dabcea3205b810a3e2324)) -- **com-pwa:** imports path ([cff96f9](https://github.com/AliMD/alwatr/commit/cff96f9b0ab69fa8d3f7e4b65e6b2ecebe342afa)) -- **com-pwa:** order form page top-app-bar headline ([abf2bc1](https://github.com/AliMD/alwatr/commit/abf2bc1d79290c26626940344f6a4d325437f113)) -- **com-pwa:** order list and detail state issues ([00752a6](https://github.com/AliMD/alwatr/commit/00752a6b0adb95c285bc419dfded711a174aeed9)) -- **com-pwa:** order list state machine issues ([a9524b1](https://github.com/AliMD/alwatr/commit/a9524b130819327b10543eb67ba25330f8f37406)) -- **com-pwa:** order shipping key ([b6c75b0](https://github.com/AliMD/alwatr/commit/b6c75b0ed873750be97e6b67e070a70fc4ede3c3)) -- **com-pwa:** order shipping key ([c9cb4f7](https://github.com/AliMD/alwatr/commit/c9cb4f7ac24006ee7c041198e126e3d906d509f2)) -- **com-pwa:** order status key ([a4f8338](https://github.com/AliMD/alwatr/commit/a4f83382434622fb16bdf053bf6c6b79b0e82737)) -- **com-pwa:** page detail ([3b49c50](https://github.com/AliMD/alwatr/commit/3b49c503592633c0f3262451f78b68e8c29f38c1)) -- **com-pwa:** page order list layout ([3b8e836](https://github.com/AliMD/alwatr/commit/3b8e836b87535294ef4144541a007a5d58458131)) -- **com-pwa:** remove deselect product from itemList ([83e5ea6](https://github.com/AliMD/alwatr/commit/83e5ea6dce2f56f7ef678316d33467aebfd4c9d1)) -- **com-pwa:** remove disabled attribute on deselect ([dbb89b3](https://github.com/AliMD/alwatr/commit/dbb89b3b0256e66e23a596d369b8351f621a6d23)) -- **com-pwa:** remove item on deselect ([086e7c6](https://github.com/AliMD/alwatr/commit/086e7c6fd35e926648bd283a377ccbb401f9abd2)) -- **com-pwa:** remove order list page content! ([855c547](https://github.com/AliMD/alwatr/commit/855c5477b579bb8f22064ee9ed275113eea7f734)) -- **com-pwa:** remove reset form on submit ([f5cac63](https://github.com/AliMD/alwatr/commit/f5cac63135d9a43e574ca003b8690ddb2d2dcd8d)) -- **com-pwa:** remove tracking button on submit success state ([6021c0a](https://github.com/AliMD/alwatr/commit/6021c0ac6347e82c90990782bca649ff6fb2694e)) -- **com-pwa:** request-redirect for shipping page ([4a421e5](https://github.com/AliMD/alwatr/commit/4a421e5e153fe1ca602e5e926d83654053754f56)) -- **com-pwa:** review ([ba664de](https://github.com/AliMD/alwatr/commit/ba664deb284961ade2deb665d454adfa8d2b7090)) -- **com-pwa:** review ([b1fc421](https://github.com/AliMD/alwatr/commit/b1fc4218410d83792c0791b4f627f4e0dccef72f)) -- **com-pwa:** review ([8c1b2aa](https://github.com/AliMD/alwatr/commit/8c1b2aac3288eac5259aef4a4a79cb7bb5107d3e)) -- **com-pwa:** review ([c77a79e](https://github.com/AliMD/alwatr/commit/c77a79e26755cddb105cc7018e9c981af46aec7a)) -- **com-pwa:** send deliver property odf order in form ([9b1d142](https://github.com/AliMD/alwatr/commit/9b1d142753f0b9c2ef55e08eb938ea9ee4aac9ea)) -- **com-pwa:** set localStorage shippingInfo value in undefined shippingInfo ([a23dcfd](https://github.com/AliMD/alwatr/commit/a23dcfdc98412576380172504839fc020792381f)) -- **com-pwa:** set name prop ([8d18120](https://github.com/AliMD/alwatr/commit/8d1812059d1870e4c0d6fb196322ce6136e9e476)) -- **com-pwa:** sub routing issues ([a77eeb8](https://github.com/AliMD/alwatr/commit/a77eeb8d968bc382f0bd54ba267e36f8887840b4)) -- **com-pwa:** submit form director ([62df659](https://github.com/AliMD/alwatr/commit/62df65959b60ea30708ff60b5fd836e67e58522e)) -- **com-pwa:** submit-order-shipping command ([164ad7c](https://github.com/AliMD/alwatr/commit/164ad7c54101dea0ce412de97e996a09ad5e84a0)) -- **com-pwa:** update based other packages ([d0a96e9](https://github.com/AliMD/alwatr/commit/d0a96e93f542ce0c9f5863f60fefdd09c3d00e2f)) -- **com-pwa:** use state.to ([b72baea](https://github.com/AliMD/alwatr/commit/b72baea8a073e58621998acfe90fb701566cfed8)) -- **com-pwa:** validate form ([d0cb51a](https://github.com/AliMD/alwatr/commit/d0cb51a70ec33a68703e0bbc178eb925d2ed174c)) -- **new-order:** scrollToTop issue ([d4f108f](https://github.com/AliMD/alwatr/commit/d4f108f37c3ee575b5b0248a89c036bf695ae984)) -- **new-order:** transitions ([c2f51e9](https://github.com/AliMD/alwatr/commit/c2f51e9b2707c01b899f0e583c9979edc64eab22)) -- **soffit-pwa:** product-storage-context-provider snackbar message ([9f2fb60](https://github.com/AliMD/alwatr/commit/9f2fb60955f9825de5fc6e5bd7429db9abaaae61)) -- **soffit, com:** tint and elevate ([cb49f18](https://github.com/AliMD/alwatr/commit/cb49f18ecd9ea57918f54a513627e1cb9a58afa6)) - -### Features - -- **com-pwa/new-order-controller:** reset order on submit success ([824c652](https://github.com/AliMD/alwatr/commit/824c6522db09ff977fdc41c06eaa85ecaa89e695)) -- **com-pwa/new-order-controller:** retry state ([6c1712f](https://github.com/AliMD/alwatr/commit/6c1712fe35359671438f23bca1654b71cb8cd62a)) -- **com-pwa/new-order:** submit btn, editable qty, enhance template ([982586d](https://github.com/AliMD/alwatr/commit/982586de9ad8ae0ff6633dc26676988f73f897fd)) -- **com-pwa/order-list:** reloading ([95f2596](https://github.com/AliMD/alwatr/commit/95f25963217a0876d2df44817512d23dd979a890)) -- **com-pwa/order-list:** use order-list ([0dd425f](https://github.com/AliMD/alwatr/commit/0dd425f5f921f66b91034023862efcea7288be32)) -- **com-pwa:** add cdn to config ([fc60912](https://github.com/AliMD/alwatr/commit/fc6091293fbb74129a31a70c88acd7bf21347c51)) -- **com-pwa:** add chat to tracking page ([c191e09](https://github.com/AliMD/alwatr/commit/c191e09a91de9cdef25f4ea44c357b309613c661)) -- **com-pwa:** add order prop to all order pages ([feef5cf](https://github.com/AliMD/alwatr/commit/feef5cfa2bfa08cc09c3a7341b9a36ae446b0803)) -- **com-pwa:** add order tracking to route ([7ba7084](https://github.com/AliMD/alwatr/commit/7ba7084d169c4a5ec296777d2e60d2168b92eef4)) -- **com-pwa:** add product button ([42e618e](https://github.com/AliMD/alwatr/commit/42e618ecaa51d4c187c08f13196dfd612d1494af)) -- **com-pwa:** add shipping form element ([032dd9e](https://github.com/AliMD/alwatr/commit/032dd9e5f08796ae23b505347acf27c56abf5da1)) -- **com-pwa:** app-footer element ([8aabb78](https://github.com/AliMD/alwatr/commit/8aabb780e1890127d5340b01df95e132f1fae7c8)) -- **com-pwa:** carType/ladingType ([94a2e96](https://github.com/AliMD/alwatr/commit/94a2e969465c20f7b52b7f18050b9ae0d3fec62d)) -- **com-pwa:** central context.ts ([37e3c93](https://github.com/AliMD/alwatr/commit/37e3c93a54f0ef9d77482904df5262be4c2ed22e)) -- **com-pwa:** Customer Order Management PWA ([1757dd7](https://github.com/AliMD/alwatr/commit/1757dd761b1d275f56c0b93657470aad98dfbbe5)) -- **com-pwa:** dynamic product storage ([b8458b8](https://github.com/AliMD/alwatr/commit/b8458b8867f983ff3da5163176e936f0d11987a8)) -- **com-pwa:** enhance director context provider ([a5dd2ae](https://github.com/AliMD/alwatr/commit/a5dd2aefeff3cb42685f55a7374807d28432ee8b)) -- **com-pwa:** enhance order-storage-context-provider ([6f4a147](https://github.com/AliMD/alwatr/commit/6f4a147240398fa90a283cfc84b6e5caf0f4843a)) -- **com-pwa:** enhance page order ([8ff9467](https://github.com/AliMD/alwatr/commit/8ff946766ddb65c158ce3187a2047f2d1652a53e)) -- **com-pwa:** enhance page order ([1ee533d](https://github.com/AliMD/alwatr/commit/1ee533d2bcb9d408a96df6e0aa52e198ce9f005c)) -- **com-pwa:** enhance shipping form ([42c91c8](https://github.com/AliMD/alwatr/commit/42c91c825068e356219d314f753476c63df00681)) -- **com-pwa:** enhance styles and layout ([38dee69](https://github.com/AliMD/alwatr/commit/38dee6908229b3ffe3c67dd419a29aaeaf9bfc76)) -- **com-pwa:** fetchProductStorage ([b320ac7](https://github.com/AliMD/alwatr/commit/b320ac7f433607d13582436b08950630ba9eef44)) -- **com-pwa:** fun submit fake data ([73b2de7](https://github.com/AliMD/alwatr/commit/73b2de7c37b6246889cc32e2ae107f25cfbd50e7)) -- **com-pwa:** home 404 layout ([7102eb3](https://github.com/AliMD/alwatr/commit/7102eb3bf3062a00090e3edb33fd87f792d6f94d)) -- **com-pwa:** home page layout ([87ad473](https://github.com/AliMD/alwatr/commit/87ad473f8cb4081853c73e2b998151b43d2df112)) -- **com-pwa:** improve page-404 render ([258bd0f](https://github.com/AliMD/alwatr/commit/258bd0fc2d282b3e058c9386ce8efa53f05cc3bf)) -- **com-pwa:** improve page-home render ([ffbbf36](https://github.com/AliMD/alwatr/commit/ffbbf365486043b3f778acd18895510605b3e7ab)) -- **com-pwa:** item detail template ([93fbdc0](https://github.com/AliMD/alwatr/commit/93fbdc006a575464c09d85368587397178046eb5)) -- **com-pwa:** logging product and order storage ([34db8fe](https://github.com/AliMD/alwatr/commit/34db8fe8c1f724942968ebbea2d83fafbd58a2ca)) -- **com-pwa:** logs and debug ([37af34a](https://github.com/AliMD/alwatr/commit/37af34a1adcafcf18920e74665b583e9d3d36ba8)) -- **com-pwa:** make page-order-list state machine ([767bcfc](https://github.com/AliMD/alwatr/commit/767bcfce14e0f156b264db8457d2722e7627242e)) -- **com-pwa:** manifest screenshots ([a060fb5](https://github.com/AliMD/alwatr/commit/a060fb518a926890dba865f9e758fff0a20a98ef)) -- **com-pwa:** new order detail controller ([7d9d4a1](https://github.com/AliMD/alwatr/commit/7d9d4a1b8ca38f56ed6b81118f520bb22b0549c7)) -- **com-pwa:** new order detail page ([6ac0445](https://github.com/AliMD/alwatr/commit/6ac04452ddc45bf8ea9f1b47f1639c063102f0fd)) -- **com-pwa:** new order routing and sub pages ([4fb93fb](https://github.com/AliMD/alwatr/commit/4fb93fbd5e3258d30b82fa512a0c15d5961f3a68)) -- **com-pwa:** new order shipping form ([ae39f92](https://github.com/AliMD/alwatr/commit/ae39f92e7897874ba896e9904044a46dfc23509c)) -- **com-pwa:** new page order-list with state machine ([c1d8b2e](https://github.com/AliMD/alwatr/commit/c1d8b2e0d35af38ecca3c7fbc1b4a0331c35685e)) -- **com-pwa:** new page product list ([2a26f04](https://github.com/AliMD/alwatr/commit/2a26f04f48e5da97878a090ea5fbac0c721fa213)) -- **com-pwa:** new page-order-list template ([21fe891](https://github.com/AliMD/alwatr/commit/21fe891e60593cc41683d18d270e015efd716306)) -- **com-pwa:** new select product ([04d9a14](https://github.com/AliMD/alwatr/commit/04d9a140220cb45b39b31a8d78af6b3434b20fa1)) -- **com-pwa:** new shipping form data model ([43ab69f](https://github.com/AliMD/alwatr/commit/43ab69f68f5ac885ee1c313929f5fc9ae4c1795b)) -- **com-pwa:** new-order controller ([db453c0](https://github.com/AliMD/alwatr/commit/db453c0aaa4521a4c0864d1b2b5df32c11533196)) -- **com-pwa:** order detail contexts ([2d94ed3](https://github.com/AliMD/alwatr/commit/2d94ed32f646556c407841219d117a0b80e1df59)) -- **com-pwa:** order detail review and fix issues ([ceacba2](https://github.com/AliMD/alwatr/commit/ceacba2b898bbb7601757a9e81eb311d4285125f)) -- **com-pwa:** order form ([8cb6ec0](https://github.com/AliMD/alwatr/commit/8cb6ec02637f06aaa2c7bada671625e0e54bdae4)) -- **com-pwa:** order form page ([c8faad9](https://github.com/AliMD/alwatr/commit/c8faad99c77c336c2a16788938cd9bba74827c4e)) -- **com-pwa:** order list page ([0c7ba38](https://github.com/AliMD/alwatr/commit/0c7ba383f3a62b32118194c9f27f8349583061ba)) -- **com-pwa:** order list page content ([a7d4557](https://github.com/AliMD/alwatr/commit/a7d455716ac0262a22fe16a88a880eb12c9f7df7)) -- **com-pwa:** order list page content provider ([5ca3eb0](https://github.com/AliMD/alwatr/commit/5ca3eb0e86baaa4c189f6f5d5a22d315ff10a1f3)) -- **com-pwa:** order shipping command handler command ([0193b3e](https://github.com/AliMD/alwatr/commit/0193b3e1c7d6847a525e8d8e5a2785b85922f774)) -- **com-pwa:** order shipping form buttons ([10be96b](https://github.com/AliMD/alwatr/commit/10be96bc01d9c07eaa70fda01cd0939300272adf)) -- **com-pwa:** order storage context provider director ([cf363a2](https://github.com/AliMD/alwatr/commit/cf363a21e2008fa87a1c900443e12111bf525190)) -- **com-pwa:** order tracking state controller ([8967389](https://github.com/AliMD/alwatr/commit/8967389abf93b4e4c32d3e929737d747cf4dbe54)) -- **com-pwa:** order-item-box element ([20530de](https://github.com/AliMD/alwatr/commit/20530def22c9fff26614bbb58a63289fc3ed29bb)) -- **com-pwa:** order-list element ([333b1c7](https://github.com/AliMD/alwatr/commit/333b1c77c62fa4fbff0fc684a22df1fa5f48b15b)) -- **com-pwa:** page 404 ([b3411a3](https://github.com/AliMD/alwatr/commit/b3411a34248c4163da943c51cf9883987e97fce6)) -- **com-pwa:** page new-order element ([ae821e6](https://github.com/AliMD/alwatr/commit/ae821e6edc6f597c3ebd667d75b7dfea6d62eaec)) -- **com-pwa:** page order detail ([ccaa371](https://github.com/AliMD/alwatr/commit/ccaa371db389e69a2a75fbfe6ac633ccb4c64728)) -- **com-pwa:** page order product done btn ([f25e479](https://github.com/AliMD/alwatr/commit/f25e4798f2b82b0303cfe53bb958ba4498ec9b7a)) -- **com-pwa:** page order tracking ([02008b5](https://github.com/AliMD/alwatr/commit/02008b52f96da1db425ec96d4a20c98e0e03ac77)) -- **com-pwa:** price list ([38bb0b4](https://github.com/AliMD/alwatr/commit/38bb0b45621861dba6f97d0b2853ad5becab4bc1)) -- **com-pwa:** product detail ([601eef0](https://github.com/AliMD/alwatr/commit/601eef064e2a12eb0950ab84863a7322edc1f699)) -- **com-pwa:** product detail card ([9d4d680](https://github.com/AliMD/alwatr/commit/9d4d680577970a6e0bcf365f13fe9efd2522b338)) -- **com-pwa:** product-storage-context-provider ([4ae2c44](https://github.com/AliMD/alwatr/commit/4ae2c445cd380621f200f1595587e631677c43cf)) -- **com-pwa:** pwa structure with home page ([37831ee](https://github.com/AliMD/alwatr/commit/37831eeca00f8b256c1cf10f107ea51f4cb99d90)) -- **com-pwa:** remove order form card in home page ([a56dca2](https://github.com/AliMD/alwatr/commit/a56dca28daf62548084a56b892fcd02368a189c2)) -- **com-pwa:** review product-storage-context-provider ([7a70abd](https://github.com/AliMD/alwatr/commit/7a70abd55814350bfc3eefa87d09b7cef40b1e51)) -- **com-pwa:** save shipping info in localStorage ([7255b3f](https://github.com/AliMD/alwatr/commit/7255b3f913ce8fe6c567e4d09854b1b4e9402a16)) -- **com-pwa:** select product and add to order ([6c3e18b](https://github.com/AliMD/alwatr/commit/6c3e18b38de4124c86b72e918bef2796d0e20fe6)) -- **com-pwa:** separate fetchPriceStorage ([51085d6](https://github.com/AliMD/alwatr/commit/51085d62514123105797abeb0f78cc29963684ae)) -- **com-pwa:** set default value on shipping form ([bbcdfcb](https://github.com/AliMD/alwatr/commit/bbcdfcbed84384711e1d6d81e0173106704d502d)) -- **com-pwa:** set order provider ([279fc85](https://github.com/AliMD/alwatr/commit/279fc85da1a33752dd66ea85fb33cc030a4878da)) -- **com-pwa:** snackbar message on l18r ([8031682](https://github.com/AliMD/alwatr/commit/8031682017512875d1fc80259a09f8cec3c4b287)) -- **com-pwa:** static resources ([7f3bc32](https://github.com/AliMD/alwatr/commit/7f3bc32b42ec2f50b1055dde26a30c5c917dce50)) -- **com-pwa:** submit order command ([7fd4be0](https://github.com/AliMD/alwatr/commit/7fd4be05f7efa1c8827303892f5ef0cb01274913)) -- **com-pwa:** submit-order-command ([8aa6e8f](https://github.com/AliMD/alwatr/commit/8aa6e8fade82367830953010c56f50ef327c8cb5)) -- **com-pwa:** submitting, submitSuccess, submitFailed state ([3cdb30d](https://github.com/AliMD/alwatr/commit/3cdb30df6945fbe20f54866b558d1a777bce64c4)) -- **com-pwa:** update l18r ([088d37b](https://github.com/AliMD/alwatr/commit/088d37baf0f3a77aff636952a7e119e0e8ba0ccf)) -- **com-pwa:** use text-area ([2f7adac](https://github.com/AliMD/alwatr/commit/2f7adaca7b6f02cbbdc6b761264e7b3fe2fb76b3)) -- **com-pwa:** use unresolved mixin ([7ad34bc](https://github.com/AliMD/alwatr/commit/7ad34bc8309d2c79d756695824c7c1087b2bc57e)) -- **com-pwa:** user-context-provider ([8ee2f44](https://github.com/AliMD/alwatr/commit/8ee2f4444fd5d3664cd798c3e0358d742e794ec4)) -- **soffit-pwa:** refactor all pages layout ([476eed2](https://github.com/AliMD/alwatr/commit/476eed2f14304535082432836352eeb0761ba884)) -- **ui-kit/chat:** update ([3c51a71](https://github.com/AliMD/alwatr/commit/3c51a71682511affc3bdb20ce7fa21523e77011e)) - -### Performance Improvements - -- **com-pwa:** load order list on active page ([3e4a52b](https://github.com/AliMD/alwatr/commit/3e4a52baf119d8e4615bf056da265894eb381522)) diff --git a/uniquely/com-pwa/README.md b/uniquely/com-pwa/README.md deleted file mode 100644 index e576c8610..000000000 --- a/uniquely/com-pwa/README.md +++ /dev/null @@ -1 +0,0 @@ -# Customer Order Management PWA diff --git a/uniquely/com-pwa/esbuild.mjs b/uniquely/com-pwa/esbuild.mjs deleted file mode 100755 index 45cb0f24a..000000000 --- a/uniquely/com-pwa/esbuild.mjs +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -import '@alwatr/pwa-helper/esbuild.mjs'; diff --git a/uniquely/com-pwa/package.json b/uniquely/com-pwa/package.json deleted file mode 100644 index 73c5cd284..000000000 --- a/uniquely/com-pwa/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@alwatr/com-pwa", - "version": "1.0.0", - "description": "Alwatr Customer Order Management PWA.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "browserslist": "> 1.5%, not dead", - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/com-pwa" - }, - "scripts": { - "b": "yarn build-dev", - "cb": "run-s clean build-dev", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "clean": "rm -rf dist build .tsbuildinfo", - "build": "yarn build:es --clean", - "build-dev": "run-s build:root build:tsc \"build:es --clean --debug\"", - "build:es": "./esbuild.mjs", - "build:tsc": "tsc --build", - "build:root": "cd ../../ && yarn build:ts", - "serve": "wds", - "watch": "run-p watch:root watch:es serve", - "watch:es": "yarn build:es --clean --watch --debug", - "watch:root": "cd ../../ && yarn watch:ts" - } -} diff --git a/uniquely/com-pwa/res/config.js b/uniquely/com-pwa/res/config.js deleted file mode 100644 index 4f2b53858..000000000 --- a/uniquely/com-pwa/res/config.js +++ /dev/null @@ -1,7 +0,0 @@ -window.appConfig = { - // old version compatibility. - api: '/api/v0', - cdn: '/cdn', - token: 'old-version', - productStorageList: [], -}; diff --git a/uniquely/com-pwa/res/image b/uniquely/com-pwa/res/image deleted file mode 120000 index d491b5cb9..000000000 --- a/uniquely/com-pwa/res/image +++ /dev/null @@ -1 +0,0 @@ -../../soffit-pwa/res/image/ \ No newline at end of file diff --git a/uniquely/com-pwa/res/index.html b/uniquely/com-pwa/res/index.html deleted file mode 100644 index da590c365..000000000 --- a/uniquely/com-pwa/res/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - مدیریت سفارشات نمایندگی‌های سافیت - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - درحال بارگذاری... - - - - - - diff --git a/uniquely/com-pwa/res/manifest.webmanifest b/uniquely/com-pwa/res/manifest.webmanifest deleted file mode 100644 index 8c49d03b1..000000000 --- a/uniquely/com-pwa/res/manifest.webmanifest +++ /dev/null @@ -1,32 +0,0 @@ -{ - "short_name": "سفارشات سافیت", - "name": "سفارشات سافیت", - "description": "نرم‌افزار یکپارچه مدیریت سفارشات نمایندگی‌های سافیت", - "start_url": "/", - "display": "standalone", - "theme_color": "#2b4f9c", - "background_color": "#faf8ff", - "orientation": "portrait", - "default_locale": "fa", - "icons": [ - {"src": "/image/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable"}, - {"src": "/image/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable"}, - {"src": "/image/favicon.ico", "type": "image/x-icon", "sizes": "32x32"}, - {"src": "/image/icon-192.png", "type": "image/png", "sizes": "192x192"}, - {"src": "/image/icon-512.png", "type": "image/png", "sizes": "512x512"} - ], - "screenshots": [ - { - "src": "/image/screenshot-1.png", - "sizes": "393x786", - "type": "image/png", - "label": "مدیریت سفارشات سافیت، صفحه اصلی، طرح روشن" - }, - { - "src": "/image/screenshot-2.png", - "sizes": "393x786", - "type": "image/png", - "label": "مدیریت سفارشات سافیت، صفحه اصلی، طرح تیره" - } - ] -} diff --git a/uniquely/com-pwa/res/robots.txt b/uniquely/com-pwa/res/robots.txt deleted file mode 100644 index c2a49f4fb..000000000 --- a/uniquely/com-pwa/res/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/uniquely/com-pwa/res/service-worker.js b/uniquely/com-pwa/res/service-worker.js deleted file mode 100644 index 64a5d005d..000000000 --- a/uniquely/com-pwa/res/service-worker.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Service worker not build in development mode.') diff --git a/uniquely/com-pwa/src/alwatr-pwa.ts b/uniquely/com-pwa/src/alwatr-pwa.ts deleted file mode 100644 index 2fa476453..000000000 --- a/uniquely/com-pwa/src/alwatr-pwa.ts +++ /dev/null @@ -1,3 +0,0 @@ -// TODO: rename me to index -import './manager/index.js'; -import './ui/alwatr-pwa.js'; diff --git a/uniquely/com-pwa/src/config.ts b/uniquely/com-pwa/src/config.ts deleted file mode 100644 index be15ae671..000000000 --- a/uniquely/com-pwa/src/config.ts +++ /dev/null @@ -1,86 +0,0 @@ -import {FetchOptions} from '@alwatr/fetch'; -import {getLocalStorageItem} from '@alwatr/util'; - -import type {CarType} from '@alwatr/type/customer-order-management.js'; - -/** - * Debug API. - * - * ```ts - * localStorage.setItem('DEBUG_API', '"https://canary.order.soffit.co/"'); - * ``` - */ -const srvBaseUrl = getLocalStorageItem('DEBUG_API', '/'); -const apiBaseUrl = srvBaseUrl + 'api/v1/'; - -export const config = { - serverContext: { - base: srvBaseUrl, - cdn: srvBaseUrl + 'cdn', - api: apiBaseUrl, - - // public access - productList: apiBaseUrl + 'publistore/hub/product-list/${productStorageName}', - marketPriceList: apiBaseUrl + 'publistore/vault/price-list/${productStorageName}-market-ir', - agencyPriceList: apiBaseUrl + 'publistore/vault/price-list/${productStorageName}-${priceListName}-ir', - - // user access - userProfile: apiBaseUrl + 'publistore/auth/profile', - userOrderList: apiBaseUrl + 'publistore/auth/order-list', - newOrder: apiBaseUrl + 'order', - - // admin access - adminUserListIncOrder: apiBaseUrl + 'admin/user-list-inc-order', - }, - - fetchContextOptions: { - removeDuplicate: 'auto', - retry: 2, - retryDelay: 2_000, - } as Partial, - - order: { - factor: { - box2m2: 3.6, - box2tile: 10, - }, - pallet: { - boxSize: 80, - price: 190_000, - }, - lading: { - 'nissan': { - capacity: 90, - fee: 96_000, - }, - 'camion_solo': { - capacity: 460, - fee: 150_000, - }, - 'camion_dual': { - capacity: 680, - fee: 190_000, - }, - 'trailer_truck': { - capacity: 1120, - fee: 290_000, - }, - 'camion_911': { - capacity: 227, - fee: 110_000, - }, - 'camion_800': { - capacity: 180, - fee: 108_000, - }, - 'camion_600': { - capacity: 136, - fee: 101_000, - }, - 'camion_mini': { - capacity: 113, - fee: 100_000, - }, - } as Record, - }, -} as const; diff --git a/uniquely/com-pwa/src/content/home-page-fa.ts b/uniquely/com-pwa/src/content/home-page-fa.ts deleted file mode 100644 index fcea9814f..000000000 --- a/uniquely/com-pwa/src/content/home-page-fa.ts +++ /dev/null @@ -1,76 +0,0 @@ -/* eslint-disable max-len */ -import {replaceNumber} from '@alwatr/i18n'; - -import type {PageHomeContent} from '../type.js'; - -export const homePageContent: PageHomeContent = { - topAppBar: { - type: 'center', - headline: 'مدیریت سفارشات سافیت', - startIcon: {icon: 'menu-outline', clickSignalId: 'app-menu-click-event'}, - endIconList: [{icon: 'person-circle-outline', clickSignalId: 'user-avatar-click-event'}], - tinted: 1, - }, - - boxList: [ - { - wide: true, - elevated: 1, - stated: true, - icon: 'logo-microsoft', - headline: 'مجموعه سافیت', - href: 'https://soffit.co', - target: '_blank', - slot: ` - مجموعه تولیدی بازرگانی سافیت
    - تولید کننده عمده محصولات DRY WALL، سازه ۶۰ کلیک، تایل کچی 60*60 و روکش P.V.C
    - برند درجه یک صادراتی با فعالیت های بین المللی و ویژگی های ممتاز
    - این مجموعه با هدف بهینه سازی در ساخت وساز و همچنین کاهش هزینه ها تامین و نگه داری ساختمان در بلند مدت اقدام به تولید محصولات گچی نمود.
    - همچنین با توجه به گسترش بازار و نیاز مشتریان تنوع طرح و جنس محصولات خود را افزایش داده است.
    - از مزیت‌های سقف‌های سافیت می‌توان به سرعت بالا در اجرا، عایق صوت، رطوبت، حرارت و راحتی در دسترسی به تاسیسات اشاره کرد. - `, - }, - - { - elevated: 1, - stated: true, - icon: 'list-outline', - flipRtl: true, - headline: 'سفارشات جاری', - href: '/order-list', - description: 'مشاهده وضعیت و پیگیری سفارشات جاری.', - }, - { - elevated: 1, - stated: true, - icon: 'cart-outline', - flipRtl: true, - headline: 'سفارش جدید', - href: '/order/new', - description: 'فرآیند ثبت سفارش جدید.', - }, - - { - elevated: 1, - stated: true, - icon: 'cloud-download-outline', - flipRtl: true, - headline: 'دانلود کاتالوگ', - description: 'دانلود کاتالوگ معرفی محصولات بازرگانی سافیت', - href: 'https://www.dropbox.com/s/dl/6ywy23qql7iq31p/soffit-product-catalogue.pdf', - target: 'download', - }, - { - elevated: 1, - stated: true, - icon: 'call-outline', - flipRtl: true, - headline: 'تماس با ما', - slot: ` -
    تلفن ارتباط مستقیم
    -
    ${replaceNumber('0915 559 9674')}
    - `, - href: 'tel:+989155599674', - }, - ], -}; diff --git a/uniquely/com-pwa/src/content/l18e-fa.json b/uniquely/com-pwa/src/content/l18e-fa.json deleted file mode 100644 index 5710b74e8..000000000 --- a/uniquely/com-pwa/src/content/l18e-fa.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "ok": true, - "meta": { - "code": "fa-IR", - "rev": 0 - }, - "data": { - "fetch_failed": "خطا در دریافت اطلاعات از اینترنت!", - "retry": "تلاش مجدد", - "loading": "درحال بارگذاری...", - "cancel": "لغو", - "invalid_phone_number": "شماره تلفن صحیح نمی‌باشد.", - - "page_404_not_found_headline": "یافت نشد", - "page_404_not_found": "صفحه مورد نظر یافت نشد!", - "page_404_not_found_description": "می‌توانید از منوی صفحه اصلی مجدداً برای پیدا کردن صفحه مورد نظر اقدام کنید.", - - "fetch_failed_headline": "خطا!", - "fetch_failed_description": "خطا در اتصال به اینترنت! لطفا مجدد تلاش کنید.", - - "page_order_detail_not_found": "سفارش پیدا نشد!", - - "page_order_tracking_not_found": "سفارش پیدا نشد!", - - "page_order_list_headline": "لیست سفارشات جاری", - "page_order_list_reloading_failed": "بارگیری مجدد با خطا روبرو شد! دوباره امتحان کنید.", - - "order_list_is_empty": "سفارشی ثبت نشده است.", - - "page_order_headline": "سفارش جدید", - "page_order_edit_items": "ویرایش لیست محصولات", - "page_order_shipping_edit": "ویرایش اطلاعات بارگیری", - "page_order_submit": "بازبینی سفارش", - "page_order_edit": "بازبینی سفارش", - "page_order_submit_final": "ثبت نهایی سفارش", - "page_order_shipping_submit": "ثبت اطلاعات", - "page_order_submitting_message": "در حال ثبت سفارش...", - "page_order_submit_success_message": "سفارش با موفقیت ثبت شد.", - "page_order_detail_button": "مشاهده اطلاعات سفارش", - "page_order_tracking_button": "پیگیری سفارش", - "page_order_submit_failed_message": "خطا در اتصال به اینترنت! لطفا مجدد تلاش کنید.", - "page_order_retry_button": "تلاش مجدد", - "page_order_shipping_info_not_valid_message": "لطفا اطلاعات بارگیری را تکمیل کنید.", - "page_order_order_not_valid_message": "لطفا مقادیر سفارش رو بازبینی و اصلاح کنید.", - "order_summary_palette_price": "هزینه پالت (${paletteCount} عدد)", - - "page_admin_order_list_headline": "لیست سفارشات کاربران", - "page_admin_order_list_phone_number": "شماره تلفن", - "page_admin_order_list_province": "استان", - "page_admin_order_list_city": "شهر", - "page_admin_order_list_order_id": "کد سفارش", - "page_admin_order_list_order_list": "لیست سفارشات", - "page_admin_order_list_order_status": "وضعیت سفارش", - "page_admin_order_list_order_date": "تاریخ ثبت سفارش", - "page_admin_order_list_empty_order_list": "سفارشی ثبت نشده است.", - - "page_admin_order_list_reloading_failed": "بارگذاری با خطا روبرو شد، لطفا مجدد تلاش کنید.", - - "page_sign_in_headline": "مدیریت سفارشات سافیت", - "page_sign_sign_in_failed": "ورود با خطا روبرو شد! لطفا دوباره امتحان کنید.", - "page_sign_in_phone_number_placeholder": "شماره موبایل", - "page_sign_in_submit": "ورود", - "page_sign_in_login_with_link_pass": "لطفا با رمز آدرس ارسال شده وارد شوید.", - - "sign_in_error_user_not_found": "کاربری با این مشخصات یافت نشد!", - "sign_in_error_unknown": "خطا در اتصال به اینترنت، لطفا مجددا تلاش کنید.", - "sign_in_welcome_message": "${fullName} عزیز، خوش آمدید.", - - "order_status_box_headline": "سفارش ${orderId}", - "order_status_box_headline_new": "سفارش جدید", - "order_status_box_status": "وضعیت سفارش", - "order_status_box_created": "تاریخ ثبت سفارش", - - "select_product_submit_button": "سفارش محصولات", - - "order_status_draft": "پیش نویس", - "order_status_registered": "ثبت شده", - "order_status_processing": "در حال پردازش", - "order_status_payment_pending": "در انتظار پرداخت", - "order_status_preparing": "آماده‌سازی", - "order_status_shipping": "بسته‌بندی و ارسال", - "order_status_delayed": "همراه با تاخیر", - "order_status_on_hold": "متوقف شده", - "order_status_canceled": "لغو شده", - "order_status_refunded": "بازپرداخت", - - "order_shipping_address_title": "آدرس تحویل", - "order_shipping_recipient_name_title": "نام تحویل گیرنده", - "order_shipping_recipient_national_code_title": "کد ملی تحویل گیرنده", - "order_shipping_shipment_price_title": "هزینه ارسال (پس‌کرایه)", - "order_shipping_shipment_price_value": "هنوز مشخص نشده", - "order_shipping_description_title": "توضیحات", - "order_shipping_lading_type_title": "نحوه بارگیری", - "order_shipping_lading_type_key_hand": "دستی", - "order_shipping_lading_type_key_pallet": "پالتی (برای تریلی)", - "order_shipping_car_type_key_trailer_truck": "تریلی", - "order_shipping_car_type_key_camion_dual": "کامیون جفت", - "order_shipping_car_type_key_camion_solo": "کامیون تک", - "order_shipping_car_type_key_camion_911": "کامیون ۹۱۱", - "order_shipping_car_type_key_camion_800": "کامیون ۸۰۰", - "order_shipping_car_type_key_camion_600": "کامیون ۶۰۰", - "order_shipping_car_type_key_camion_mini": "کامیون مینی", - "order_shipping_car_type_key_nissan": "نیسان", - "order_shipping_car_type_title": "نوع ماشین", - "order_shipping_time_period_title": "بازه زمانی", - "order_shipping_time_period_key_auto": "مناسب‌ترین زمان", - "order_shipping_time_period_key_1_2w": "یک تا دو هفته", - "order_shipping_time_period_key_2_3w": "دو تا سه هفته", - "order_shipping_time_period_key_3_4w": "سه تا چهار هفته", - - "order_item_not_exist": "محصولی پیدا نشد!", - "order_item_qty_m2": "متراژ (m²)", - "order_item_qty_tile": "تعداد (تایل)", - "order_item_qty_box": "تعداد (بسته)", - "order_item_price": "قیمت فروش (m²)", - "order_item_final_price": "قیمت نمایندگی (m²)", - "order_item_total_price": "جمع قیمت فروش", - "order_item_final_total_price": "جمع قیمت نمایندگی", - "order_item_discount": "سود نمایندگی", - - "order_summary_total_price": "سرجمع فروش", - "order_summary_total_final_price": "سرجمع خرید نمایندگی", - "order_summary_discount": "سود نمایندگی", - "order_summary_lading_price": "هزینه بارگیری (${carCount} ماشین)", - "order_summary_discount_after_lading_price": "سود نهایی بعد ارسال", - "order_summary_final_total_price": "مبلغ قابل پرداخت", - - "chat_text_input_placeholder": "متن پیام", - - "submit_order_success_message": "سفارش شماره ${orderId} با موفقیت ثبت شد.", - "submit_order_failed_message": "خطا در ثبت سفارش! لطفا مجدد تلاش کنید.", - - "user_order_list_reloading_failed": "خطا در بارگذاری سفارشات کاربر، لطفا مجدد تلاش کنید" - } -} diff --git a/uniquely/com-pwa/src/manager/buttons.ts b/uniquely/com-pwa/src/manager/buttons.ts deleted file mode 100644 index 2f7f652c3..000000000 --- a/uniquely/com-pwa/src/manager/buttons.ts +++ /dev/null @@ -1,127 +0,0 @@ -import {redirect} from '@alwatr/router'; -import {eventListener} from '@alwatr/signal'; - -import type {ClickSignalType} from '@alwatr/type'; -import type {Order} from '@alwatr/type/customer-order-management.js'; - -export const buttons = { - backToHome: { - icon: 'arrow-back-outline', - flipRtl: true, - clickSignalId: 'back_to_home_click_event', - }, - browserBack: { - icon: 'arrow-back-outline', - flipRtl: true, - clickSignalId: 'browser_back_click_event', - }, - print: { - icon: 'print-outline', - clickSignalId: 'order_detail_print', - }, - - reload: { - icon: 'reload-outline', - }, - - reloadAdminOrderListStorage: { - icon: 'reload-outline', - flipRtl: true, - clickSignalId: 'reload_admin_order_list_storage', - }, - reloadOrderStorage: { - icon: 'reload-outline', - flipRtl: true, - clickSignalId: 'reload_order_storage', - }, - newOrder: { - icon: 'add-outline', - clickSignalId: 'new_order_click_event', - }, - showOrderDetail: { - labelKey: 'page_order_detail_button', - icon: 'information-outline', - clickSignalId: 'show_order_detail_click_event', - }, - backToOrderList: { - icon: 'arrow-back-outline', - flipRtl: true, - clickSignalId: 'back_to_order_list_event', - }, - backToAdminOrderList: { - icon: 'arrow-back-outline', - flipRtl: true, - clickSignalId: 'back_to_admin_order_list_event', - }, - - editItems: { - labelKey: 'page_order_edit_items', - icon: 'create-outline', - clickSignalId: 'edit_items_click_event', - }, - submit: { - labelKey: 'page_order_submit', - icon: 'checkmark-outline', - clickSignalId: 'submit_click_event', - }, - selectProductSubmit: { - labelKey: 'select_product_submit_button', - icon: 'checkmark-outline', - clickSignalId: 'select_product_submit_click_event', - }, - editOrder: { - labelKey: 'page_order_edit', - icon: 'create-outline', - clickSignalId: 'edit_order_click_event', - }, - submitFinal: { - labelKey: 'page_order_submit_final', - icon: 'checkmark-outline', - clickSignalId: 'submit_final_click_event', - }, - submitShippingForm: { - labelKey: 'page_order_shipping_submit', - icon: 'checkmark-outline', - clickSignalId: 'submit_shipping_form_click_event', - }, - editShippingForm: { - labelKey: 'page_order_shipping_edit', - icon: 'create-outline', - clickSignalId: 'edit_shipping_form_click_event', - }, - showRegisteredOrderDetail: { - labelKey: 'page_order_detail_button', - icon: 'information-outline', - clickSignalId: 'show_registered_order_detail_click_event', - }, - showRegisteredOrderTracking: { - icon: 'chatbox-outline', - clickSignalId: 'show_registered_order_tracking_click_event', - }, - retry: { - labelKey: 'page_order_retry_button', - icon: 'reload-outline', - clickSignalId: 'retry_click_event', - }, - signIn: { - labelKey: 'page_sign_in_submit', - icon: 'checkmark-outline', - clickSignalId: 'sign_in_submit_click_event', - }, -} as const; - -eventListener.subscribe(buttons.newOrder.clickSignalId, () => { - redirect({sectionList: ['order', 'new']}); -}); - -eventListener.subscribe(buttons.print.clickSignalId, () => { - window.print(); -}); - -eventListener.subscribe(buttons.showOrderDetail.clickSignalId, (event: ClickSignalType): void => { - redirect({sectionList: ['order', event.detail.id]}); -}); - -eventListener.subscribe(buttons.backToOrderList.clickSignalId, (): void => { - redirect({sectionList: ['order-list']}); -}); diff --git a/uniquely/com-pwa/src/manager/context-provider/chat-storage.ts b/uniquely/com-pwa/src/manager/context-provider/chat-storage.ts deleted file mode 100644 index 099a3c608..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/chat-storage.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {serverContextConsumer} from '@alwatr/context'; - -import {userProfileContextConsumer} from './user.js'; -import {config} from '../../config.js'; - -import type {AlwatrDocumentStorage, ChatMessage} from '@alwatr/type'; - -export const chatStorageContextConsumer = serverContextConsumer>( - 'chat_storage_context', - { - ...config.fetchContextOptions, - url: config.serverContext.api + '/chat/', - }, -); - -userProfileContextConsumer.subscribe((userProfile) => { - chatStorageContextConsumer.setOptions({ - queryParameters: { - userId: userProfile.id, - }, - }); -}, {receivePrevious: 'NextCycle'}); diff --git a/uniquely/com-pwa/src/manager/context-provider/home-page-content.ts b/uniquely/com-pwa/src/manager/context-provider/home-page-content.ts deleted file mode 100644 index f5e2172a5..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/home-page-content.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {localeContextConsumer} from '@alwatr/i18n'; - -import {homePageContent} from '../../content/home-page-fa.js'; // for perf -import {homePageContentContextProvider} from '../context.js'; -import {logger} from '../logger.js'; - -localeContextConsumer.subscribe(async () => { - const language = localeContextConsumer.getValue()?.language; - logger.logMethodArgs?.('contentProvider', {language}); - if (language == null) return; - homePageContentContextProvider.setValue( - homePageContent, - // (await import('../../content/home-page-fa.js')).homePageContent, - ); -}); diff --git a/uniquely/com-pwa/src/manager/context-provider/l18e.ts b/uniquely/com-pwa/src/manager/context-provider/l18e.ts deleted file mode 100644 index e7d8afa51..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/l18e.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {setL18eLoader} from '@alwatr/i18n'; - -import l18eFa from '../../content/l18e-fa.json' assert {type: 'json'}; // for perf -import {logger} from '../logger.js'; - -import type {L18eContext} from '@alwatr/type'; - -setL18eLoader((locale) => { - const language = locale.language; - logger.logMethodArgs?.('l18eLoader', {language}); - return l18eFa as unknown as Promise; - // return import('../../content/l18e-fa.json', {assert: {type: 'json'}}) as unknown as Promise; -}); diff --git a/uniquely/com-pwa/src/manager/context-provider/order-storage.ts b/uniquely/com-pwa/src/manager/context-provider/order-storage.ts deleted file mode 100644 index 4fc2f909c..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/order-storage.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {serverContextConsumer} from '@alwatr/context'; - -import {userProfileContextConsumer} from './user.js'; -import {config} from '../../config.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {ComUser, Order} from '@alwatr/type/customer-order-management.js'; - -export const orderStorageContextConsumer = serverContextConsumer>( - 'order_storage_context', - config.fetchContextOptions, -); - -orderStorageContextConsumer.fsm.defineSignals([ - { - signalId: userProfileContextConsumer.id, - callback: (user: ComUser): void => { - orderStorageContextConsumer.request({ - url: config.serverContext.userOrderList, - token: user.token!, - }); - }, - receivePrevious: 'NextCycle', - }, - { - signalId: 'reload_order_storage', - transition: 'REQUEST', - }, -]); diff --git a/uniquely/com-pwa/src/manager/context-provider/price-storage.ts b/uniquely/com-pwa/src/manager/context-provider/price-storage.ts deleted file mode 100644 index 820f608f9..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/price-storage.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {serverContextConsumer} from '@alwatr/context'; - -import {userProfileContextConsumer} from './user.js'; -import {config} from '../../config.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {ProductPrice} from '@alwatr/type/customer-order-management.js'; - - -/** - * Product Price. - */ -export const productPriceStorageContextConsumer = serverContextConsumer>( - 'product_price_storage_context', - { - ...config.fetchContextOptions, - url: config.serverContext.marketPriceList.replace('${productStorageName}', 'tile'), - }, -); - -productPriceStorageContextConsumer.fsm.defineSignals([ - { - signalId: 'reload_product_price_storage', - transition: 'REQUEST', - }, -]); - -/** - * Product Final Price. - */ -export const productFinalPriceStorageContextConsumer = serverContextConsumer>( - 'product_final_price_storage_context', - { - ...config.fetchContextOptions, - }, -); - -productFinalPriceStorageContextConsumer.fsm.defineSignals([ - { - signalId: 'reload_product_price_storage', - transition: 'REQUEST', - }, -]); - -userProfileContextConsumer.subscribe((user) => { - productPriceStorageContextConsumer.setOptions({ - token: user.token!, - }); - - productFinalPriceStorageContextConsumer.setOptions({ - url: config.serverContext.agencyPriceList - .replace('${productStorageName}', 'tile') - .replace('${priceListName}', user.priceListName ?? 'agency'), - token: user.token!, - }); -}); diff --git a/uniquely/com-pwa/src/manager/context-provider/product-storage.ts b/uniquely/com-pwa/src/manager/context-provider/product-storage.ts deleted file mode 100644 index 73e084ed6..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/product-storage.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {serverContextConsumer} from '@alwatr/context'; -import {requestIdleCallback} from '@alwatr/util'; - -import {config} from '../../config.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {Product} from '@alwatr/type/customer-order-management.js'; - -export const productStorageContextConsumer = serverContextConsumer>( - 'product_storage_context', - { - ...config.fetchContextOptions, - url: config.serverContext.productList.replace('${productStorageName}', 'tile'), - }, -); - -productStorageContextConsumer.fsm.defineSignals([ - { - signalId: 'reload_product_storage', - transition: 'REQUEST', - }, -]); - -requestIdleCallback(() => { - productStorageContextConsumer.subscribe(() => { - const productList = productStorageContextConsumer.getResponse(); - if (productList == null || productStorageContextConsumer.getState().target !== 'complete') return; - - for (const productId in productList.data) { - if (Object.prototype.hasOwnProperty.call(productList.data, productId)) { - const product = productList.data[productId]; - const img = new Image(); - img.src = config.serverContext.cdn + '/medium/' + product.image.id; - } - } - }); - - productStorageContextConsumer.require(); -}); diff --git a/uniquely/com-pwa/src/manager/context-provider/sign-in.ts b/uniquely/com-pwa/src/manager/context-provider/sign-in.ts deleted file mode 100644 index 83bd92ea1..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/sign-in.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {contextProvider, serverContextConsumer} from '@alwatr/context'; -import {message} from '@alwatr/i18n'; -import {redirect} from '@alwatr/router'; -import {snackbarSignalTrigger} from '@alwatr/ui-kit/snackbar/show-snackbar.js'; - -import {userProfileContextConsumer} from './user.js'; -import {config} from '../../config.js'; - -import type {AlwatrServiceResponseSuccessWithMeta} from '@alwatr/type'; -import type {ComUser} from '@alwatr/type/customer-order-management.js'; - -export const signInServerContext = serverContextConsumer>( - 'sign_in_storage_context', - config.fetchContextOptions, -); - -signInServerContext.subscribe(() => { - if (signInServerContext.getState().target !== 'complete') return; - const userProfile = signInServerContext.getResponse()!.data; - contextProvider.setValue(userProfileContextConsumer.id, userProfile); - redirect({}); - - snackbarSignalTrigger.request({ - message: message('sign_in_welcome_message').replace('${fullName}', userProfile.fullName), - }); -}); - -export const signIn = (token: string): void => { - signInServerContext.request({ - url: config.serverContext.userProfile, - token, - }); -}; diff --git a/uniquely/com-pwa/src/manager/context-provider/user-list-storage.ts b/uniquely/com-pwa/src/manager/context-provider/user-list-storage.ts deleted file mode 100644 index 48fb02188..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/user-list-storage.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {serverContextConsumer} from '@alwatr/context'; - -import {userProfileContextConsumer} from './user.js'; -import {config} from '../../config.js'; - -import type {AlwatrServiceResponseSuccessWithMeta} from '@alwatr/type'; -import type {ComUserIncOrder} from '@alwatr/type/customer-order-management.js'; - -export const userListIncOrderStorageContextConsumer = - serverContextConsumer>>( - 'admin_order_list_storage_context', - { - ...config.fetchContextOptions, - url: config.serverContext.adminUserListIncOrder, - }, - ); - -userProfileContextConsumer.subscribe((userProfile) => { - userListIncOrderStorageContextConsumer.request({ - userAuth: { - id: userProfile.id, - token: userProfile.token!, - }, - }); -}); diff --git a/uniquely/com-pwa/src/manager/context-provider/user.ts b/uniquely/com-pwa/src/manager/context-provider/user.ts deleted file mode 100644 index 41347ae08..000000000 --- a/uniquely/com-pwa/src/manager/context-provider/user.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {contextConsumer, contextProvider} from '@alwatr/context'; -import {getLocalStorageItem, setLocalStorageItem} from '@alwatr/util'; - -import type {ComUser} from '@alwatr/type/customer-order-management.js'; - -const localStorageSuffixKey = '_x2'; - -// user profile -export const userProfileContextConsumer = contextConsumer('user_profile'); - -const userProfile = getLocalStorageItem(userProfileContextConsumer.id + localStorageSuffixKey, null); -if (userProfile != null) { - contextProvider.setValue(userProfileContextConsumer.id, userProfile); -} -userProfileContextConsumer.subscribe((userProfile) => { - setLocalStorageItem(userProfileContextConsumer.id + localStorageSuffixKey, userProfile); -}); - -// link-pass token -export const linkPassTokenContextConsumer = contextConsumer('link_pass_token'); diff --git a/uniquely/com-pwa/src/manager/context.ts b/uniquely/com-pwa/src/manager/context.ts deleted file mode 100644 index 575583f92..000000000 --- a/uniquely/com-pwa/src/manager/context.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - contextConsumer, - contextProvider, - commandTrigger, -} from '@alwatr/signal'; - -import {PageHomeContent} from '../type.js'; - -import type {Order} from '@alwatr/type/customer-order-management.js'; - -export * from '@alwatr/pwa-helper/context.js'; - -export const homePageContentContextProvider = - contextProvider.bind('home-page-content-context'); -export const homePageContentContextConsumer = - contextConsumer.bind(homePageContentContextProvider.id); - -export const submitOrderCommandTrigger = commandTrigger.bind, Order | null>('submit-order-command'); diff --git a/uniquely/com-pwa/src/manager/controller/order.ts b/uniquely/com-pwa/src/manager/controller/order.ts deleted file mode 100644 index 24e036193..000000000 --- a/uniquely/com-pwa/src/manager/controller/order.ts +++ /dev/null @@ -1,409 +0,0 @@ -import {FsmTypeHelper, finiteStateMachineProvider} from '@alwatr/fsm'; -import {message} from '@alwatr/i18n'; -import {orderInfoSchema, orderShippingInfoSchema} from '@alwatr/type/customer-order-management.js'; -import {snackbarSignalTrigger} from '@alwatr/ui-kit/snackbar/show-snackbar.js'; -import {getLocalStorageItem, setLocalStorageItem} from '@alwatr/util'; -import {validator} from '@alwatr/validator'; - -import {config} from '../../config.js'; -import {orderStorageContextConsumer} from '../context-provider/order-storage.js'; -import { - productPriceStorageContextConsumer, - productFinalPriceStorageContextConsumer, -} from '../context-provider/price-storage.js'; -import {productStorageContextConsumer} from '../context-provider/product-storage.js'; -import {submitOrderCommandTrigger} from '../context.js'; -import {logger} from '../logger.js'; - -import type {ClickSignalType} from '@alwatr/type'; -import type {OrderDraft, OrderItem} from '@alwatr/type/customer-order-management.js'; - -const newOrderLocalStorageKey = 'draft_order_x5'; - -export const orderFsmConstructor = finiteStateMachineProvider.defineConstructor('order_fsm', { - initial: 'pending', - context: { - orderId: '', - newOrder: ( - getLocalStorageItem(newOrderLocalStorageKey, {id: 'new', status: 'draft', shippingInfo: {}, itemList: []}) - ) as OrderDraft, - orderStorage: orderStorageContextConsumer.getResponse(), - productStorage: productStorageContextConsumer.getResponse(), - priceStorage: productPriceStorageContextConsumer.getResponse(), - finalPriceStorage: productFinalPriceStorageContextConsumer.getResponse(), - }, - stateRecord: { - $all: { - entry: 'save_local_storage', - on: { - context_request_reloadingFailed: { - actions: 'notify_context_reloadingFailed', - }, - retry: { - actions: 'require_server_contexts', - }, - context_request_complete: {}, - request_update: {}, - change_order_id: { - target: 'routing', - }, - }, - }, - pending: { - entry: 'require_server_contexts', - on: { - change_order_id: { - // prevent to transition to routing. - }, - context_request_initial: {}, - context_request_offlineLoading: {}, - context_request_onlineLoading: {}, - context_request_loadingFailed: { - target: 'contextError', - }, - context_request_reloading: { - target: 'routing', - condition: 'is_all_context_ready', - }, - context_request_complete: { - target: 'routing', - condition: 'is_all_context_ready', - }, - }, - }, - contextError: { - on: { - retry: { - target: 'pending', - }, - }, - }, - routing: { - entry: 'routing', - on: { - new_order: { - target: 'newOrder', - }, - show_detail: { - target: 'orderDetail', - }, - not_found_in_loading: { - target: 'pending', - }, - not_found: { - target: 'notFound', - }, - }, - }, - orderDetail: { - on: {}, - }, - notFound: { - on: {}, - }, - newOrder: { - entry: 'check_item_list', - on: { - select_product: { - target: 'selectProduct', - }, - edit_shipping: { - target: 'shippingForm', - }, - submit: { - target: 'review', - condition: 'validate_order', - }, - }, - }, - selectProduct: { - on: { - submit: { - target: 'newOrder', - }, - }, - }, - shippingForm: { - on: { - submit: { - target: 'newOrder', - condition: 'validate_shipping_info', - }, - }, - }, - review: { - on: { - back: { - target: 'newOrder', - }, - final_submit: { - target: 'submitting', - }, - }, - }, - submitting: { - entry: 'submit_order', - on: { - submit_success: { - target: 'submitSuccess', - }, - submit_failed: { - target: 'submitFailed', - }, - }, - }, - submitSuccess: { - entry: 'reset_new_order', - on: { - new_order: { - target: 'newOrder', - }, - }, - }, - submitFailed: { - on: { - retry: { - target: 'submitting', - }, - }, - }, - }, -}); - -export type OrderFsm = FsmTypeHelper; - -const serverContextList = [ - productStorageContextConsumer, - productPriceStorageContextConsumer, - productFinalPriceStorageContextConsumer, - orderStorageContextConsumer, // FIXME: require need param -] as const; - -// entries actions -finiteStateMachineProvider.defineActions('order_fsm', { - require_server_contexts: () => { - serverContextList.forEach((contextConsumer) => contextConsumer.require()); - }, - - routing: (fsmInstance) => { - const orderId = fsmInstance.getContext().orderId; - const orderStorage = orderStorageContextConsumer.getResponse(); - if (orderId === 'new') { - fsmInstance.transition('new_order'); - } - else if (orderStorage?.data[orderId] != null) { - fsmInstance.transition('show_detail', {orderStorage}); - } - else if (orderStorageContextConsumer.getState().target !== 'complete') { - fsmInstance.transition('not_found_in_loading'); - } - else { - fsmInstance.transition('not_found'); - } - }, - - save_local_storage: (fsmInstance) => { - setLocalStorageItem(newOrderLocalStorageKey, fsmInstance.getContext().newOrder); - }, - - check_item_list: (fsmInstance) => { - if (!fsmInstance.getContext().newOrder.itemList?.length) { - fsmInstance.transition('select_product'); - } - }, - - submit_order: async (fsmInstance) => { - const order = await submitOrderCommandTrigger.requestWithResponse(fsmInstance.getContext().newOrder); - if (order == null) { - fsmInstance.transition('submit_failed'); - return; - } - // else - // TODO: update context directly - fsmInstance.transition('submit_success', {orderId: order.id}); - }, - - reset_new_order: (fsmInstance): void => { - localStorage.removeItem(newOrderLocalStorageKey); - fsmInstance.setContext({newOrder: {id: 'new', status: 'draft', shippingInfo: {}, itemList: []}}); - }, - - notify_context_reloadingFailed: async (fsmInstance) => { - const response = await snackbarSignalTrigger.requestWithResponse({ - message: 'خطا در به‌روزرسانی لیست قیمت‌ها!', - actionLabelKey: 'retry', - duration: 10_000, - }); - if (response.actionButton) { - fsmInstance.transition('retry'); - } - }, -}); - -// condition -finiteStateMachineProvider.defineActions('order_fsm', { - validate_order: (fsmInstance): boolean => { - try { - const order = fsmInstance.getContext().newOrder; - if (!order.itemList?.length) throw new Error('invalid_type'); - // else - fsmInstance.setContext({ - newOrder: validator(orderInfoSchema, order, true), - }); - return true; - } - catch (err) { - const _err = err as Error & {cause?: Record}; - logger.accident('validate_order', 'order_invalid', 'order is invalid', _err.cause); - if (_err.cause?.itemPath?.indexOf('shippingInfo') !== -1) { - snackbarSignalTrigger.request({ - message: message('page_order_shipping_info_not_valid_message'), - }); - fsmInstance.transition('edit_shipping'); - } - else { - snackbarSignalTrigger.request({ - message: message('page_order_order_not_valid_message'), - }); - } - return false; - } - }, - - validate_shipping_info: (fsmInstance): boolean => { - try { - validator(orderShippingInfoSchema, fsmInstance.getContext().newOrder.shippingInfo, true); - return true; - } - catch (err) { - const _err = err as Error & {cause?: Record}; - logger.accident('validate_shipping_info', 'order_invalid', 'order shipping onfo is invalid', _err.cause); - snackbarSignalTrigger.request({ - message: message('page_order_shipping_info_not_valid_message'), - }); - return false; - } - }, - - is_all_context_ready: (): boolean => { - return serverContextList.every((serverContext) => serverContext.getResponse() != null); - }, -}); - -finiteStateMachineProvider.defineSignals('order_fsm', [ - // { - // callback: (_, fsmInstance): void => { - // // calculateOrderPrice - // const order = fsmInstance.getContext().newOrder; - // let totalPrice = 0; - // let finalTotalPrice = 0; - // for (const item of order.itemList ?? []) { - // totalPrice += item.price * item.qty * tileQtyStep; - // finalTotalPrice += item.finalPrice * item.qty * tileQtyStep; - // } - // order.totalPrice = Math.round(totalPrice); - // order.finalTotalPrice = Math.round(finalTotalPrice); - // }, - // }, - { - signalId: 'order_item_qty_add', - callback: (event: ClickSignalType, fsmInstance): void => { - const orderItem = event.detail; - if (orderItem.qty === 1) { - orderItem.qty = config.order.pallet.boxSize; - } - else { - orderItem.qty += config.order.pallet.boxSize; - } - fsmInstance.transition('request_update'); - }, - }, - { - signalId: 'order_item_qty_remove', - callback: (event: ClickSignalType, fsmInstance): void => { - const orderItem = event.detail; - orderItem.qty -= config.order.pallet.boxSize; - if (orderItem.qty < 1) orderItem.qty = 1; - fsmInstance.transition('request_update'); - }, - }, - { - // fsm: productStorageContextConsumer.fsm, - // transitionPrefix: 'context_request_', - // mapContexts: { - // 'productStorage': 'response', - // }, - signalId: productStorageContextConsumer.id, - callback: (_, fsmInstance): void => { - const productStorage = productStorageContextConsumer.getResponse(); - fsmInstance.transition(`context_request_${productStorageContextConsumer.getState().target}`, { - productStorage, - }); - }, - receivePrevious: 'NextCycle', - }, - { - signalId: productPriceStorageContextConsumer.id, - callback: (_, fsmInstance): void => { - const priceStorage = productPriceStorageContextConsumer.getResponse(); - fsmInstance.transition(`context_request_${productPriceStorageContextConsumer.getState().target}`, { - priceStorage, - }); - }, - receivePrevious: 'NextCycle', - }, - { - signalId: productFinalPriceStorageContextConsumer.id, - callback: (_, fsmInstance): void => { - const finalPriceStorage = productFinalPriceStorageContextConsumer.getResponse(); - fsmInstance.transition(`context_request_${productFinalPriceStorageContextConsumer.getState().target}`, { - finalPriceStorage, - }); - }, - receivePrevious: 'NextCycle', - }, - { - signalId: orderStorageContextConsumer.id, - callback: (_, fsmInstance): void => { - const orderStorage = orderStorageContextConsumer.getResponse(); - fsmInstance.transition(`context_request_${orderStorageContextConsumer.getState().target}`, { - orderStorage, - }); - }, - receivePrevious: 'NextCycle', - }, -]); - -export function updateOrderCalculate(order: OrderDraft): void { - order.subTotalMarket = 0; - order.subTotalAgency = 0; - order.palletCost = 0; - order.shippingFee = 0; - order.ladingFee = 0; - order.itemList ??= []; - - let itemListCount = 0; - for (const item of order.itemList) { - if (!item.qty) item.qty = config.order.pallet.boxSize; - order.subTotalMarket += item.marketPrice * item.qty; - order.subTotalAgency += item.agencyPrice * item.qty; - itemListCount += item.qty; - } - order.subTotalMarket = Math.round(order.subTotalMarket * config.order.factor.box2m2); - order.subTotalAgency = Math.round(order.subTotalAgency * config.order.factor.box2m2); - - if ( - itemListCount > 0 && - order.shippingInfo?.ladingType === 'pallet' && - order.shippingInfo?.carType === 'trailer_truck' - ) { - order.palletCost = Math.ceil(itemListCount / config.order.pallet.boxSize) * config.order.pallet.price; - } - - if (itemListCount > 0 && order.shippingInfo?.carType) { - const ladingConfig = config.order.lading[order.shippingInfo.carType]; - order.ladingFee = Math.ceil(itemListCount / ladingConfig.capacity) * ladingConfig.fee; - } - - order.totalShippingFee = order.palletCost + order.ladingFee + order.shippingFee; -} diff --git a/uniquely/com-pwa/src/manager/index.ts b/uniquely/com-pwa/src/manager/index.ts deleted file mode 100644 index ffcf8d8ba..000000000 --- a/uniquely/com-pwa/src/manager/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import './context-provider/chat-storage.js'; -import './context-provider/home-page-content.js'; -import './context-provider/l18e.js'; -import './context-provider/order-storage.js'; -import './context-provider/price-storage.js'; -import './context-provider/product-storage.js'; -import './context-provider/sign-in.js'; -import './context-provider/user.js'; -import './controller/order.js'; -import './submit-order-command-handler.js'; diff --git a/uniquely/com-pwa/src/manager/logger.ts b/uniquely/com-pwa/src/manager/logger.ts deleted file mode 100644 index 738fa3e4d..000000000 --- a/uniquely/com-pwa/src/manager/logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('com-manager'); diff --git a/uniquely/com-pwa/src/manager/submit-order-command-handler.ts b/uniquely/com-pwa/src/manager/submit-order-command-handler.ts deleted file mode 100644 index 45dd17e37..000000000 --- a/uniquely/com-pwa/src/manager/submit-order-command-handler.ts +++ /dev/null @@ -1,47 +0,0 @@ -import {serviceRequest} from '@alwatr/fetch'; -import {commandHandler} from '@alwatr/signal'; - - -import {orderStorageContextConsumer} from './context-provider/order-storage.js'; -import {userProfileContextConsumer} from './context-provider/user.js'; -import {submitOrderCommandTrigger} from './context.js'; -import {logger} from './logger.js'; -import {config} from '../config.js'; - -import type {AlwatrServiceResponseSuccessWithMeta} from '@alwatr/type'; -import type {Order} from '@alwatr/type/customer-order-management.js'; - -commandHandler.define(submitOrderCommandTrigger.id, async (order) => { - const userContext = userProfileContextConsumer.getValue() ?? await userProfileContextConsumer.untilChange(); - - try { - const response = await serviceRequest>({ - ...config.fetchContextOptions, - method: 'PUT', - url: config.serverContext.newOrder, - userAuth: { - id: userContext.id, - token: userContext.token!, - }, - bodyJson: order, - retry: 3, - }); - - const newOrder = response.data; - - orderStorageContextConsumer.request(); - - // const orderStorage = orderStorageContextConsumer.getValue().content; - // if (orderStorage != null) { - // orderStorage.data[newOrder.id] = newOrder; - // orderStorage.meta.lastUpdated = Date.now(); - // contextProvider.setValue(orderStorageContextConsumer.id, orderStorage); - // } - - return newOrder; - } - catch (err) { - logger.error('submitOrderCommand', 'submit_failed', err, order); - return null; - } -}); diff --git a/uniquely/com-pwa/src/type.ts b/uniquely/com-pwa/src/type.ts deleted file mode 100644 index 9235b308e..000000000 --- a/uniquely/com-pwa/src/type.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type {StringifyableRecord} from '@alwatr/type'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; -import type {TopAppBarContent} from '@alwatr/ui-kit/top-app-bar/top-app-bar.js'; - -export interface BoxType extends IconBoxContent { - wide?: boolean; - slot?: string; -} - -export interface PageHomeContent extends StringifyableRecord { - topAppBar: TopAppBarContent; - boxList: BoxType[]; -} diff --git a/uniquely/com-pwa/src/ui/alwatr-pwa.ts b/uniquely/com-pwa/src/ui/alwatr-pwa.ts deleted file mode 100644 index 5487e40ce..000000000 --- a/uniquely/com-pwa/src/ui/alwatr-pwa.ts +++ /dev/null @@ -1,120 +0,0 @@ -import {contextProvider} from '@alwatr/context'; -import {html, customElement, nothing} from '@alwatr/element'; -import '@alwatr/font/vazirmatn.css'; -import {AlwatrPwaElement} from '@alwatr/pwa-helper/pwa-element.js'; -import {redirect, routeContextConsumer, type RouteContext, type RoutesConfig} from '@alwatr/router'; -import '@alwatr/ui-kit/style/mobile-only.css'; -import '@alwatr/ui-kit/style/theme/color.css'; -import '@alwatr/ui-kit/style/theme/palette-270.css'; - -import './stuff/app-footer.js'; -import {linkPassTokenContextConsumer, userProfileContextConsumer} from '../manager/context-provider/user.js'; -import {topAppBarContextProvider} from '../manager/context.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-pwa': AlwatrPwa; - } -} - -/** - * Alwatr PWA Root Element - */ -@customElement('alwatr-pwa') -class AlwatrPwa extends AlwatrPwaElement { - constructor() { - super(); - this._checkSignedIn = this._checkSignedIn.bind(this); - } - - protected override _routesConfig: RoutesConfig = { - routeId: (routeContext) => routeContext.sectionList[0]?.toString() ?? '', - templates: { - 'home': this._renderPageHome, - '_404': this._renderPage404, - 'order-list': this._renderPageOrderList, - 'admin-order-list': this._renderPageAdminOrderList, - 'admin-order': this._renderPageAdminOrder, - 'order': this._renderPageOrder, - 'sign-in': this._renderPageSignIn, - 's': this._saveLinkPass, - }, - }; - - override connectedCallback(): void { - super.connectedCallback(); - this._addSignalListeners(routeContextConsumer.subscribe(this._checkSignedIn)); - } - - protected _renderPageHome(): unknown { - import('./page/home.js'); - return html`...`; - } - - protected _renderPage404(): unknown { - import('./page/404.js'); - return html`...`; - } - - protected _renderPageOrderList(): unknown { - import('./page/order-list.js'); - topAppBarContextProvider.setValue({headlineKey: 'loading'}); - return html`...`; - } - - protected _renderPageAdminOrderList(): unknown { - import('./page/admin-order-list.js'); - topAppBarContextProvider.setValue({headlineKey: 'loading'}); - return html`...`; - } - - protected _renderPageAdminOrder(routeContext: RouteContext): unknown { - import('./page/admin-order.js'); - topAppBarContextProvider.setValue({headlineKey: 'loading'}); - return html`...`; - } - - protected _renderPageOrder(routeContext: RouteContext): unknown { - import('./page/order.js'); - topAppBarContextProvider.setValue({headlineKey: 'loading'}); - const orderId = routeContext.sectionList[1] ?? 'new'; - return html`...`; - } - - protected _renderPageSignIn(): unknown { - import('./page/sign-in.js'); - topAppBarContextProvider.setValue({headlineKey: 'loading'}); - return html``; - } - - protected _saveLinkPass(routeContext: RouteContext): unknown { - const linkPass = routeContext.sectionList[1]; - if (linkPass) { - contextProvider.setValue(linkPassTokenContextConsumer.id, linkPass + ''); - } - redirect({sectionList: ['sign-in']}, 'replace'); - return nothing; - } - - protected override _navigationBarTemplate(): unknown { - return html``; - } - - protected _checkSignedIn(routeContext: RouteContext): void { - const routeId = this._routesConfig.routeId(routeContext); - this._logger.logMethodArgs?.('_checkSignedIn', {routeId}); - if (userProfileContextConsumer.getValue()?.token) { - // user is signed-in and its ok - return; - } - // else - if (routeId !== 'sign-in' && routeId !== 's' && routeId !== '') { - redirect({sectionList: ['sign-in']}); - } - } -} diff --git a/uniquely/com-pwa/src/ui/page/404.ts b/uniquely/com-pwa/src/ui/page/404.ts deleted file mode 100644 index 27f3f80ed..000000000 --- a/uniquely/com-pwa/src/ui/page/404.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { - customElement, - css, - html, - LocalizeMixin, - SignalMixin, - AlwatrBaseElement, - UnresolvedMixin, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {topAppBarContextProvider} from '../../manager/context.js'; - -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-404': AlwatrPage404; - } -} - -/** - * Alwatr 404 page. - */ -@customElement('alwatr-page-404') -export class AlwatrPage404 extends UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))) { - static override styles = css` - :host { - display: block; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - } - `; - - override connectedCallback(): void { - super.connectedCallback(); - topAppBarContextProvider.setValue({ - type: 'small', - headlineKey: 'page_404_not_found_headline', - startIcon: {icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back_to_home_click_event'}, - tinted: 2, - }); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - - const box: IconBoxContent = { - stated: true, - elevated: 1, - icon: 'alert-circle-outline', - flipRtl: true, - headline: message('page_404_not_found'), - description: message('page_404_not_found_description'), - preLine: true, - }; - - return html``; - } -} diff --git a/uniquely/com-pwa/src/ui/page/admin-order-list.ts b/uniquely/com-pwa/src/ui/page/admin-order-list.ts deleted file mode 100644 index 0757c1cee..000000000 --- a/uniquely/com-pwa/src/ui/page/admin-order-list.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { - customElement, - css, - html, - LocalizeMixin, - SignalMixin, - AlwatrBaseElement, - UnresolvedMixin, - state, - ScheduleUpdateToFrameMixin, - when, - mapIterable, - type PropertyValues, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import {eventListener} from '@alwatr/signal'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/card/icon-box.js'; -import '@alwatr/ui-kit/card/surface.js'; - -import {buttons} from '../../manager/buttons.js'; -import {userListIncOrderStorageContextConsumer} from '../../manager/context-provider/user-list-storage.js'; -import {topAppBarContextProvider} from '../../manager/context.js'; -import '../stuff/user-inc-order-box.js'; - -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-admin-order-list': AlwatrPageAdminOrderList; - } -} - -/** - * List of all users. - */ -@customElement('alwatr-page-admin-order-list') -export class AlwatrPageAdminOrderList extends ScheduleUpdateToFrameMixin( - UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))), -) { - static override styles = css` - :host { - display: flex; - flex-direction: column; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - gap: var(--sys-spacing-track); - transform: opacity var(--sys-motion-duration-small); - } - - :host([state='reloading']) { - opacity: var(--sys-surface-reloading-opacity); - } - - .reloading-failed { - margin-bottom: var(--sys-spacing-track); - } - `; - - @state() - gotState = userListIncOrderStorageContextConsumer.getState().target; - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners(userListIncOrderStorageContextConsumer.subscribe(() => { - this.gotState = userListIncOrderStorageContextConsumer.getState().target; - }, {receivePrevious: 'NextCycle'})); - - this._addSignalListeners(eventListener.subscribe(buttons.retry.clickSignalId, () => { - userListIncOrderStorageContextConsumer.request(); - }, {receivePrevious: 'No'})); - - this._addSignalListeners(eventListener.subscribe(buttons.reloadAdminOrderListStorage.clickSignalId, () => { - userListIncOrderStorageContextConsumer.request(); - }, {receivePrevious: 'No'})); - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('gotState')) { - this.setAttribute('state', this.gotState); - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return userListIncOrderStorageContextConsumer.fsm.render({ - initial: 'onlineLoading', - offlineLoading: 'onlineLoading', - onlineLoading: this._renderStateLoading, - loadingFailed: this._renderStateLoadingFailed, - reloadingFailed: 'complete', - reloading: 'complete', - complete: this._renderStateComplete, - }, this); - } - - protected _renderStateLoading(): unknown { - this._logger.logMethod?.('_renderStateLoading'); - - topAppBarContextProvider.setValue({ - headlineKey: 'loading', - startIcon: buttons.backToHome, - }); - const content: IconBoxContent = { - tinted: 1, - icon: 'cloud-download-outline', - headline: message('loading'), - }; - return html``; - } - - protected _renderStateLoadingFailed(): unknown { - this._logger.logMethod?.('_renderStateLoadingFailed'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToHome, - endIconList: [buttons.reloadOrderStorage], - }); - const content: IconBoxContent = { - icon: 'cloud-offline-outline', - tinted: 1, - headline: message('fetch_failed_headline'), - description: message('fetch_failed_description'), - }; - return html` - -
    - -
    - `; - } - - protected _renderStateComplete(): unknown { - this._logger.logMethod?.('_renderStateComplete'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_admin_order_list_headline', - startIcon: buttons.backToHome, - endIconList: [ - buttons.newOrder, {...buttons.reloadAdminOrderListStorage, disabled: this.gotState === 'reloading'}, - ], - }); - return html` - ${when(this.gotState === 'reloadingFailed', this._render_reloadingFailed)} - ${this._render_usersList()} - `; - } - - private _render_usersList(): unknown { - const userStorage = userListIncOrderStorageContextConsumer.getResponse(); - this._logger.logMethodArgs?.('renderUsersList', {userStorage}); - if (userStorage == null) return; - - const orderStorageList = Object.values(userStorage.data).sort((u1, u2) => { - const lastU1Order = Object.values(u1.orderList).sort((o1, o2) => { - return (o2.meta?.updated || 0) - (o1.meta?.updated || 0); - })[0]; - - const lastU2Order = Object.values(u2.orderList).sort((o1, o2) => { - return (o2.meta?.updated || 0) - (o1.meta?.updated || 0); - })[0]; - - return (lastU2Order?.meta?.updated || 0) - (lastU1Order?.meta?.updated || 0); - }); - - return mapIterable( - this, - orderStorageList, - (userIncOrder) => { - return html``; - }, - ); - } - - private _render_reloadingFailed(): unknown { - return html` - ${message('page_admin_order_list_reloading_failed')} - `; - } -} diff --git a/uniquely/com-pwa/src/ui/page/admin-order.ts b/uniquely/com-pwa/src/ui/page/admin-order.ts deleted file mode 100644 index 4bae5987a..000000000 --- a/uniquely/com-pwa/src/ui/page/admin-order.ts +++ /dev/null @@ -1,526 +0,0 @@ -import { - AlwatrBaseElement, - css, - CSSResultGroup, - customElement, - html, - LocalizeMixin, - mapIterable, - nothing, - property, - SignalMixin, - state, - UnresolvedMixin, - type PropertyValues, -} from '@alwatr/element'; -import {message, number, replaceNumber} from '@alwatr/i18n'; -import '@alwatr/icon'; -import {calcDiscount} from '@alwatr/math'; -import {redirect} from '@alwatr/router'; -import {eventListener} from '@alwatr/signal'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/card/icon-box.js'; -import '@alwatr/ui-kit/card/surface.js'; - -import {config} from '../../config.js'; -import {buttons} from '../../manager/buttons.js'; -import {productStorageContextConsumer} from '../../manager/context-provider/product-storage.js'; -import {userListIncOrderStorageContextConsumer} from '../../manager/context-provider/user-list-storage.js'; -import {scrollToTopCommand, topAppBarContextProvider} from '../../manager/context.js'; -import '../stuff/order-status-box.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {Order, OrderDraft, OrderItem, OrderShippingInfo, Product} from '@alwatr/type/customer-order-management.js'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-admin-order': AlwatrPageAdminOrder; - } -} - -/** - * Alwatr Customer Order Management Order Form Page - */ -@customElement('alwatr-page-admin-order') -export class AlwatrPageAdminOrder extends UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))) { - static override styles: CSSResultGroup = css` - :host { - display: flex; - flex-direction: column; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - gap: var(--sys-spacing-track); - } - - :host([state='reloading']) > * { - opacity: var(--sys-surface-disabled-opacity); - } - - alwatr-surface { - --_surface-color-on: var(--sys-color-on-surface-variant-hsl); - } - - .product-item { - display: flex; - flex-direction: row; - gap: var(--sys-spacing-track); - } - - .product-item > img { - display: block; - width: calc(6 * var(--sys-spacing-track)); - border-radius: var(--sys-radius-small); - align-self: flex-start; - } - - .detail-container { - flex-grow: 1; - } - - .detail-container > * { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: var(--sys-spacing-track); - } - - .detail-container > *:last-child { - margin-bottom: 0; - } - - .submit-container { - text-align: end; - } - - /* ----- */ - .number-field { - --_surface-color-on: var(--sys-color-on-surface-variant-hsl); - /* --_surface-color-bg: var(--sys-color-surface-variant-hsl); */ - display: flex; - align-items: center; - padding: 0; - font-family: var(--sys-typescale-body-large-font-family-name); - font-weight: var(--sys-typescale-body-large-font-weight); - font-size: var(--sys-typescale-body-large-font-size); - letter-spacing: var(--sys-typescale-body-large-letter-spacing); - line-height: var(--sys-typescale-body-large-line-height); - border-radius: var(--sys-radius-xsmall); - text-align: center; - box-shadow: none; - border-bottom: 1px solid var(--sys-color-outline); - border-radius: var(--sys-radius-xsmall) var(--sys-radius-xsmall) 0 0; - width: calc(20 * var(--sys-spacing-track)); - margin-right: auto; - } - alwatr-text-field { - display: block; - padding: 0; - width: 100%; - flex-grow: 1; - border-radius: inherit; - } - - /* So not group these selectors! */ - input::placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - input::-webkit-input-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - input::-moz-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - - input[type='number'] { - -moz-appearance: textfield; - } - - input::-webkit-outer-spin-button, - input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } - - .bold-text { - font-weight: var(--ref-font-weight-bold); - } - - [hidden] { - display: none; - } - `; - - @state() - gotState = userListIncOrderStorageContextConsumer.getState().target; - - @property({type: String}) - orderId?: string; - - @property({type: String}) - userId?: string; - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners(userListIncOrderStorageContextConsumer.subscribe(() => { - this.gotState = userListIncOrderStorageContextConsumer.getState().target; - }, {receivePrevious: 'NextCycle'})); - - this._addSignalListeners(productStorageContextConsumer.subscribe(() => { - if (productStorageContextConsumer.getState().target === 'complete') { - this.requestUpdate(); - } - }, {receivePrevious: 'NextCycle'})); - - this._addSignalListeners(eventListener.subscribe(buttons.backToAdminOrderList.clickSignalId, () => { - redirect({sectionList: ['admin-order-list']}); - }, {receivePrevious: 'No'})); - - this._addSignalListeners(eventListener.subscribe(buttons.retry.clickSignalId, () => { - if (userListIncOrderStorageContextConsumer.getState().target !== 'complete') { - userListIncOrderStorageContextConsumer.request(); - } - if (productStorageContextConsumer.getState().target !== 'complete') { - productStorageContextConsumer.request(); - } - }, {receivePrevious: 'No'})); - - this._addSignalListeners(eventListener.subscribe(buttons.reloadAdminOrderListStorage.clickSignalId, () => { - userListIncOrderStorageContextConsumer.request(); - productStorageContextConsumer.request(); - }, {receivePrevious: 'No'})); - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('gotState')) { - this.setAttribute('state', this.gotState); - } - if (changedProperties.has('orderId')) { - scrollToTopCommand.request({smooth: true}); - } - } - - protected override render(): unknown { - this._logger.logMethod?.('render'); - return userListIncOrderStorageContextConsumer.fsm.render({ - initial: 'onlineLoading', - offlineLoading: 'onlineLoading', - onlineLoading: this._renderStateLoading, - loadingFailed: this._renderStateLoadingFailed, - reloadingFailed: 'complete', - reloading: 'complete', - complete: this._renderStateComplete, - }, this); - } - - protected _renderStateLoading(): unknown { - this._logger.logMethod?.('_renderStateLoading'); - - topAppBarContextProvider.setValue({ - headlineKey: 'loading', - startIcon: buttons.backToAdminOrderList, - endIconList: [buttons.reloadAdminOrderListStorage], - }); - const content: IconBoxContent = { - tinted: 1, - icon: 'cloud-download-outline', - headline: message('loading'), - }; - return html``; - } - - protected _renderStateLoadingFailed(): unknown { - this._logger.logMethod?.('_renderStateLoadingFailed'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToAdminOrderList, - endIconList: [buttons.reloadAdminOrderListStorage], - }); - const content: IconBoxContent = { - icon: 'cloud-offline-outline', - tinted: 1, - headline: message('fetch_failed_headline'), - description: message('fetch_failed_description'), - }; - - return html` - -
    - -
    - `; - } - - protected _render_notFound(): unknown { - this._logger.logMethod?.('_render_notFound'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToAdminOrderList, - endIconList: [buttons.reloadAdminOrderListStorage], - }); - const content: IconBoxContent = { - headline: message('page_order_detail_not_found'), - icon: 'close', - tinted: 1, - }; - return html``; - } - - protected _renderStateComplete(): unknown { - this._logger.logMethod?.('_renderStateComplete'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToAdminOrderList, - endIconList: [buttons.reloadAdminOrderListStorage], - }); - - if (this.userId == null || this.orderId == null) { - return this._render_notFound(); - } - const order = userListIncOrderStorageContextConsumer.getResponse()?.data[this.userId]?.orderList[this.orderId]; - if (order == null) { - return this._render_notFound(); - } - - const productStorageStateTarget = productStorageContextConsumer.getState().target; - if (productStorageStateTarget === 'reloadingFailed') { - return this._renderStateLoadingFailed(); - } - else if (productStorageStateTarget !== 'complete' && productStorageStateTarget !== 'reloading') { - return this._renderStateLoading(); - } - const productStorage = productStorageContextConsumer.getResponse(); - - return [ - this._render_status(order), - this._render_itemList(order.itemList, productStorage), - this._render_shippingInfo(order.shippingInfo), - this._render_summary(order), - ]; - } - - protected _render_status(order: Order | OrderDraft): unknown { - this._logger.logMethod?.('_render_status'); - return html``; - } - - protected _render_itemList( - itemList: OrderItem[], - productStorage: AlwatrDocumentStorage | null | undefined, - ): unknown { - this._logger.logMethod?.('_render_itemList'); - - return mapIterable(this, itemList, (item) => { - const product = productStorage?.data[item.productId]; - if (product == null) { - this._logger.error('itemDetailTemplate', 'product_not_found', {productId: item.productId}); - return html`${message('order_item_not_exist')}`; - } - - return html` - -
    -
    ${product.title.fa}
    -
    - ${message('order_item_price')}: - - ${number(item.marketPrice)} - - -
    -
    - ${message('order_item_final_price')}: - - ${number(item.agencyPrice)} - - -
    -
    - ${message('order_item_qty_m2')}: - ${number(item.qty * config.order.factor.box2m2)} -
    -
    - ${message('order_item_qty_tile')}: - - ${number(item.qty * config.order.factor.box2tile)} - - -
    -
    - ${message('order_item_qty_box')}: - - ${number(item.qty)} - - -
    -
    - ${message('order_item_final_total_price')}: - - ${number(item.qty * config.order.factor.box2m2 * item.agencyPrice)} - - -
    -
    - ${message('order_item_total_price')}: - - ${number(item.qty * config.order.factor.box2m2 * item.marketPrice)} - - -
    -
    - ${message('order_item_discount')}: - - - (٪${number(calcDiscount(item.marketPrice, item.agencyPrice))}) - ${number(item.qty * config.order.factor.box2m2 * (item.marketPrice - item.agencyPrice))} - - - -
    -
    -
    `; - }); - } - - protected _render_shippingInfo(shippingInfo?: Partial): unknown { - this._logger.logMethod?.('_render_shippingInfo'); - - const nullStr = '…' as const; - - // if (!shippingInfo) { - // return html`
    - // } - - return html` -
    -
    - ${message('order_shipping_recipient_name_title')}: - ${shippingInfo?.recipientName || nullStr} -
    -
    - ${message('order_shipping_recipient_national_code_title')}: - ${replaceNumber(shippingInfo?.recipientNationalCode || nullStr)} -
    -
    - ${message('order_shipping_address_title')}: - ${replaceNumber(shippingInfo?.address || nullStr)} -
    -
    - ${message('order_shipping_car_type_title')}: - - ${shippingInfo?.carType ? message('order_shipping_car_type_key_' + shippingInfo?.carType) : nullStr} - -
    -
    - ${message('order_shipping_lading_type_title')}: - - ${shippingInfo?.ladingType - ? message( - 'order_shipping_lading_type_key_' + - (shippingInfo?.carType != 'trailer_truck' ? 'hand' : shippingInfo?.ladingType), - ) - : nullStr} - -
    -
    - ${message('order_shipping_time_period_title')}: - - ${shippingInfo?.timePeriod ? message('order_shipping_time_period_key_' + shippingInfo.timePeriod) : nullStr} - -
    -
    - ${message('order_shipping_description_title')}: - ${shippingInfo?.description} -
    -
    -
    `; - } - - protected _render_summary(order: Order): unknown { - this._logger.logMethod?.('_render_summary'); - if (!order.itemList?.length) return nothing; - - return html` -
    -
    - ${message('order_summary_total_price')}: - - ${number(order.subTotalMarket)} - - -
    -
    - ${message('order_summary_total_final_price')}: - - ${number(order.subTotalAgency)} - - -
    -
    - ${message('order_summary_discount')}: - - - (٪${number(calcDiscount(order.subTotalMarket, order.subTotalAgency))}) - ${number(order.subTotalMarket - order.subTotalAgency)} - - - -
    -
    - ${message('order_summary_lading_price').replace( - '${carCount}', - number(order.ladingFee / (config.order.lading[order.shippingInfo.carType!]?.fee ?? order.ladingFee)), - )}: - - - ${number(order.ladingFee)} - - -
    -
    - - ${message('order_summary_palette_price').replace( - '${paletteCount}', - number(order.palletCost / config.order.pallet.price), - )}: - - - ${number(order.palletCost)} - - -
    -
    - ${message('order_shipping_shipment_price_title')}: - ${message('order_shipping_shipment_price_value')} -
    -
    - ${message('order_summary_discount_after_lading_price')}: - - - (٪${number(calcDiscount(order.subTotalMarket, order.subTotalAgency + order.totalShippingFee))}) - ${number(order.subTotalMarket - order.subTotalAgency - order.totalShippingFee)} - - - -
    -
    - ${message('order_summary_final_total_price')}: - - ${number(order.subTotalAgency + order.ladingFee + order.palletCost)} - - -
    -
    -
    `; - } -} diff --git a/uniquely/com-pwa/src/ui/page/home.ts b/uniquely/com-pwa/src/ui/page/home.ts deleted file mode 100644 index 288b02a28..000000000 --- a/uniquely/com-pwa/src/ui/page/home.ts +++ /dev/null @@ -1,83 +0,0 @@ - -import { - customElement, - css, - html, - unsafeHTML, - mapIterable, - state, - nothing, - SignalMixin, - AlwatrBaseElement, - UnresolvedMixin, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import {redirect} from '@alwatr/router'; -import {eventListener} from '@alwatr/signal'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {userProfileContextConsumer} from '../../manager/context-provider/user.js'; -import {homePageContentContextConsumer, topAppBarContextProvider} from '../../manager/context.js'; - -import type {BoxType, PageHomeContent} from '../../type.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-home': AlwatrPageHome; - } -} - -/** - * Alwatr Customer Order Management Home Page - */ -@customElement('alwatr-page-home') -export class AlwatrPageHome extends UnresolvedMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - box-sizing: border-box; - min-height: 100%; - display: flex; - flex-wrap: wrap; - padding: calc(2 * var(--sys-spacing-track)); - gap: var(--sys-spacing-track); - } - - :host > * { - width: 40%; - flex-grow: 1; - } - - :host > [wide] { - width: 100%; - } - `; - - @state() - content?: PageHomeContent; - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners(eventListener.subscribe('user-avatar-click-event', () => { - if (userProfileContextConsumer.getValue()?.permissions === 'root') { - redirect({sectionList: ['admin-order-list']}); - } - }, {receivePrevious: 'No'})); - - this._addSignalListeners(homePageContentContextConsumer.subscribe((content) => { - this.content = content; - topAppBarContextProvider.setValue(content.topAppBar); - })); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.content == null) return nothing; - return mapIterable(this, this.content.boxList, this._boxTemplate, message('loading')); - } - - protected _boxTemplate(box: BoxType): unknown { - const slot = box.slot == null ? nothing : unsafeHTML(box.slot); - return html`${slot}`; - } -} diff --git a/uniquely/com-pwa/src/ui/page/order-list.ts b/uniquely/com-pwa/src/ui/page/order-list.ts deleted file mode 100644 index 60f462ee7..000000000 --- a/uniquely/com-pwa/src/ui/page/order-list.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { - customElement, - css, - html, - LocalizeMixin, - SignalMixin, - AlwatrBaseElement, - UnresolvedMixin, - state, - ScheduleUpdateToFrameMixin, - guard, - repeat, - when, - type PropertyValues, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import {eventListener} from '@alwatr/signal'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/card/icon-box.js'; -import '@alwatr/ui-kit/card/surface.js'; - -import {buttons} from '../../manager/buttons.js'; -import {orderStorageContextConsumer} from '../../manager/context-provider/order-storage.js'; -import {topAppBarContextProvider} from '../../manager/context.js'; -import '../stuff/order-status-box.js'; - -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-order-list': AlwatrPageOrderList; - } -} - -/** - * List of all orders. - */ -@customElement('alwatr-page-order-list') -export class AlwatrPageOrderList extends ScheduleUpdateToFrameMixin( - UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))), -) { - static override styles = css` - :host { - display: flex; - flex-direction: column; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - gap: var(--sys-spacing-track); - transform: opacity var(--sys-motion-duration-small); - } - - :host([state='reloading']) { - opacity: var(--sys-surface-reloading-opacity); - } - - alwatr-order-status-box { - margin-bottom: var(--sys-spacing-track); - } - - .reloadingFailed { - margin-bottom: var(--sys-spacing-track); - } - `; - - @state() - gotState = orderStorageContextConsumer.getState().target; - - override connectedCallback(): void { - super.connectedCallback(); - - // prettier-ignore - this._addSignalListeners(orderStorageContextConsumer.subscribe(() => { - this.gotState = orderStorageContextConsumer.getState().target; - }, {receivePrevious: 'NextCycle'})); - - this._addSignalListeners(eventListener.subscribe(buttons.retry.clickSignalId, () => { - orderStorageContextConsumer.request(); - }, {receivePrevious: 'No'})); - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('gotState')) { - this.setAttribute('state', this.gotState); - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return orderStorageContextConsumer.fsm.render({ - initial: 'onlineLoading', - offlineLoading: 'onlineLoading', - onlineLoading: () => { - topAppBarContextProvider.setValue({ - headlineKey: 'loading', - startIcon: buttons.backToHome, - }); - const content: IconBoxContent = { - tinted: 1, - icon: 'cloud-download-outline', - headline: message('loading'), - }; - return html``; - }, - - loadingFailed: () => { - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToHome, - endIconList: [buttons.reloadOrderStorage], - }); - const content: IconBoxContent = { - icon: 'cloud-offline-outline', - tinted: 1, - headline: message('fetch_failed_headline'), - description: message('fetch_failed_description'), - }; - return html` - -
    - -
    - `; - }, - - reloadingFailed: 'complete', - reloading: 'complete', - complete: () => { - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToHome, - endIconList: [buttons.newOrder, {...buttons.reloadOrderStorage, disabled: this.gotState === 'reloading'}], - }); - return html` - ${when(this.gotState === 'reloadingFailed', this._renderReloadingFailed)} - ${guard(orderStorageContextConsumer.getResponse()?.meta.lastUpdated, () => this._renderOrderList())} - `; - }, - }); - } - - private _renderOrderList(): unknown { - const orderStorage = orderStorageContextConsumer.getResponse(); - this._logger.logMethodArgs?.('orderListTemplate', {orderStorage}); - if (orderStorage == null) return; - - const orderList = Object.values(orderStorage.data) - .sort((o1, o2) => (o2.meta?.updated || 0) - (o1.meta?.updated || 0)) - .slice(0, 15); - - if (orderList.length === 0) { - const content: IconBoxContent = { - icon: 'cart-outline', - headline: message('order_list_is_empty'), - tinted: 1, - }; - return html` `; - } - - return repeat( - orderList, - (order) => order.id, - (order) => html``, - ); - } - - private _renderReloadingFailed(): unknown { - return html` - ${message('page_order_list_reloading_failed')} - `; - } -} diff --git a/uniquely/com-pwa/src/ui/page/order.ts b/uniquely/com-pwa/src/ui/page/order.ts deleted file mode 100644 index 57492a28f..000000000 --- a/uniquely/com-pwa/src/ui/page/order.ts +++ /dev/null @@ -1,733 +0,0 @@ -import { - AlwatrBaseElement, - css, - CSSResultGroup, - customElement, - html, - LocalizeMixin, - mapIterable, - nothing, - property, - PropertyValues, - SignalMixin, - state, - UnresolvedMixin, -} from '@alwatr/element'; -import {finiteStateMachineConsumer} from '@alwatr/fsm'; -import {message, number, replaceNumber} from '@alwatr/i18n'; -import '@alwatr/icon'; -import {calcDiscount} from '@alwatr/math'; -import {redirect} from '@alwatr/router'; -import {AlwatrDocumentStorage} from '@alwatr/type'; -import '@alwatr/ui-kit/card/icon-box.js'; -import '@alwatr/ui-kit/card/surface.js'; - -import {config} from '../../config.js'; -import {buttons} from '../../manager/buttons.js'; -import {scrollToTopCommand, topAppBarContextProvider} from '../../manager/context.js'; -import {OrderFsm, updateOrderCalculate} from '../../manager/controller/order.js'; -import '../stuff/order-shipping-form.js'; -import '../stuff/order-status-box.js'; -import '../stuff/select-product.js'; - -import type {Order, OrderDraft, OrderItem, OrderShippingInfo, Product} from '@alwatr/type/customer-order-management.js'; -import type {IconButtonContent} from '@alwatr/ui-kit/button/icon-button.js'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; -import type {AlwatrTextField} from '@alwatr/ui-kit/text-field/text-field.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-order': AlwatrPageOrder; - } -} - -/** - * Alwatr Customer Order Management Order Form Page - */ -@customElement('alwatr-page-order') -export class AlwatrPageOrder extends UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))) { - static override styles: CSSResultGroup = css` - :host { - display: flex; - flex-direction: column; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - gap: var(--sys-spacing-track); - } - - :host([state='reloading']) > * { - opacity: var(--sys-surface-disabled-opacity); - } - - alwatr-surface { - --_surface-color-on: var(--sys-color-on-surface-variant-hsl); - } - - .product-item { - display: flex; - flex-direction: row; - gap: var(--sys-spacing-track); - } - - .product-item > img { - display: block; - width: calc(6 * var(--sys-spacing-track)); - border-radius: var(--sys-radius-small); - align-self: flex-start; - } - - .detail-container { - flex-grow: 1; - } - - .detail-container > * { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: var(--sys-spacing-track); - } - - .detail-container > *:last-child { - margin-bottom: 0; - } - - .submit-container { - text-align: end; - } - - /* ----- */ - .number-field { - --_surface-color-on: var(--sys-color-on-surface-variant-hsl); - /* --_surface-color-bg: var(--sys-color-surface-variant-hsl); */ - display: flex; - align-items: center; - padding: 0; - font-family: var(--sys-typescale-body-large-font-family-name); - font-weight: var(--sys-typescale-body-large-font-weight); - font-size: var(--sys-typescale-body-large-font-size); - letter-spacing: var(--sys-typescale-body-large-letter-spacing); - line-height: var(--sys-typescale-body-large-line-height); - border-radius: var(--sys-radius-xsmall); - text-align: center; - box-shadow: none; - border-bottom: 1px solid var(--sys-color-outline); - border-radius: var(--sys-radius-xsmall) var(--sys-radius-xsmall) 0 0; - width: calc(20 * var(--sys-spacing-track)); - margin-right: auto; - } - alwatr-text-field { - display: block; - padding: 0; - width: 100%; - flex-grow: 1; - border-radius: inherit; - } - - /* So not group these selectors! */ - input::placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - input::-webkit-input-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - input::-moz-placeholder { - font: inherit; - color: var(--sys-color-on-surface-variant); - } - - input[type='number'] { - -moz-appearance: textfield; - } - - input::-webkit-outer-spin-button, - input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } - - .bold-text { - font-weight: var(--ref-font-weight-bold); - } - - [hidden] { - display: none; - } - `; - - protected fsm = finiteStateMachineConsumer('order_fsm_' + this.ali, 'order_fsm'); - - @state() - gotState = this.fsm.getState().target; - - set orderId(orderId: string) { - this.fsm.transition('change_order_id', {orderId}); - } - - @property({type: String}) - get orderId(): string { - return this.fsm.getContext().orderId; - } - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners( - this.fsm.defineSignals([ - { - callback: (): void => { - const state = this.fsm.getState(); - this.gotState = state.target; - if (state.by === 'request_update') { - this.requestUpdate(); - } - }, - receivePrevious: 'NextCycle', - }, - { - signalId: buttons.submit.clickSignalId, - transition: 'submit', - }, - { - signalId: buttons.submitShippingForm.clickSignalId, - transition: 'submit', - }, - { - signalId: buttons.selectProductSubmit.clickSignalId, - transition: 'submit', - }, - { - signalId: buttons.editOrder.clickSignalId, - transition: 'back', - }, - { - signalId: buttons.submitFinal.clickSignalId, - transition: 'final_submit', - }, - { - signalId: buttons.editItems.clickSignalId, - transition: 'select_product', - }, - { - signalId: buttons.retry.clickSignalId, - transition: 'retry', - }, - { - signalId: buttons.editShippingForm.clickSignalId, - transition: 'edit_shipping', - }, - // FIXME: handle `reload` state - // { - // signalId: buttons.reload.clickSignalId, - // transition: '' - // }, - { - signalId: buttons.showRegisteredOrderDetail.clickSignalId, - callback: (): void => { - redirect({sectionList: ['order', this.fsm.getContext().orderId ?? '']}); - }, - }, - { - signalId: buttons.backToOrderList.clickSignalId, - callback: (): void => redirect({sectionList: ['order-list']}), - }, - { - signalId: buttons.newOrder.clickSignalId, - callback: (): void => { - this.fsm.transition('new_order'); - }, - }, - ]), - ); - } - - protected override update(changedProperties: PropertyValues): void { - super.update(changedProperties); - if (changedProperties.has('gotState')) { - scrollToTopCommand.request({smooth: true}); - } - } - - protected override render(): unknown { - this._logger.logMethod?.('render'); - return this.fsm.render( - { - routing: 'pending', - pending: this._renderStatePending, - notFound: this._renderStateNotFound, - orderDetail: this._renderStateOrderDetail, - newOrder: this._renderStateNewOrder, - contextError: this._renderStateContextError, - selectProduct: this._renderStateSelectProduct, - shippingForm: this._renderStateShippingForm, - review: this._renderStateReview, - submitting: this._renderStateSubmitting, - submitSuccess: this._renderStateSubmitSuccess, - submitFailed: this._renderStateSubmitFailed, - }, - this, - ); - } - - protected _renderStateNotFound(): unknown { - this._logger.logMethod?.('_render_notFound'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToOrderList, - }); - const content: IconBoxContent = { - headline: message('page_order_detail_not_found'), - icon: 'close', - tinted: 1, - }; - return html``; - } - - protected _renderStateOrderDetail(): unknown { - this._logger.logMethod?.('_render_orderDetail'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToOrderList, - endIconList: [buttons.print, buttons.reload], - }); - - const order = this.fsm.getContext().orderStorage!.data[this.fsm.getContext().orderId]; - return [ - this._render_status(order), - this._render_itemList(order.itemList, this.fsm.getContext().productStorage), - this._render_shippingInfo(order.shippingInfo), - this._render_summary(order), - ]; - } - - protected _renderStateNewOrder(): unknown { - this._logger.logMethod?.('_render_newOrder'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_headline', - startIcon: buttons.backToHome, - }); - let order: Order | OrderDraft = this.fsm.getContext().newOrder; - updateOrderCalculate(order); - order = order as Order; - - return html` - ${this._render_itemList(order.itemList, this.fsm.getContext().productStorage, true)} -
    - -
    - ${this._render_shippingInfo(order.shippingInfo)} -
    - -
    - ${this._render_summary(order)} -
    - -
    - `; - } - - protected _renderStateContextError(): unknown { - this._logger.logMethod?.('_render_contextError'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_list_headline', - startIcon: buttons.backToHome, - }); - const content: IconBoxContent = { - icon: 'cloud-offline-outline', - tinted: 1, - headline: message('fetch_failed_headline'), - description: message('fetch_failed_description'), - }; - - return html` - -
    - - ${message('retry')} - -
    - `; - } - - protected _renderStateSelectProduct(): unknown { - this._logger.logMethod?.('_render_selectProduct'); - - topAppBarContextProvider.setValue({ - headlineKey: 'page_order_headline', - startIcon: buttons.backToHome, - }); - - return html` - -
    - -
    - `; - } - - protected _renderStateShippingForm(): unknown { - this._logger.logMethod?.('_render_shippingForm'); - - const order = this.fsm.getContext().newOrder; - return html` - - - -
    - -
    - `; - } - - protected _renderStateReview(): unknown { - this._logger.logMethod?.('_render_review'); - - const order = this.fsm.getContext().newOrder as Order; - return [ - this._render_status(order), - this._render_itemList(order.itemList, this.fsm.getContext().productStorage), - this._render_shippingInfo(order.shippingInfo), - this._render_summary(order), - html` -
    - - -
    - `, - ]; - } - - protected _renderStateSubmitting(): unknown { - this._logger.logMethod?.('_render_submitting'); - - const content: IconBoxContent = { - headline: message('page_order_submitting_message'), - icon: 'cloud-upload-outline', - tinted: 1, - }; - return html``; - } - - protected _renderStateSubmitSuccess(): unknown { - const content: IconBoxContent = { - headline: message('page_order_submit_success_message'), - icon: 'cloud-done-outline', - tinted: 1, - }; - return html` - -
    - - ${message('page_order_headline')} -
    - `; - } - - protected _renderStateSubmitFailed(): unknown { - this._logger.logMethod?.('_render_submitFailed'); - - const content: IconBoxContent = { - headline: message('page_order_submit_failed_message'), - icon: 'cloud-offline-outline', - tinted: 1, - }; - return html` - -
    - -
    - `; - } - - protected _renderStatePending(): unknown { - this._logger.logMethod?.('_render_pending'); - - topAppBarContextProvider.setValue({ - headlineKey: 'loading', - startIcon: buttons.backToHome, - }); - - const content: IconBoxContent = { - tinted: 1, - icon: 'cloud-download-outline', - headline: message('loading'), - }; - - return html``; - } - - protected _render_message(key: string, icon: string): unknown { - this._logger.logMethod?.('_render_message'); - const content: IconBoxContent = { - headline: message(key), - icon: icon, - tinted: 1, - }; - - return html``; - } - - protected _render_status(order: Order | OrderDraft): unknown { - this._logger.logMethod?.('_render_status'); - return html``; - } - - protected _render_itemList( - itemList: OrderItem[], - productStorage: AlwatrDocumentStorage | null | undefined, - editable = false, - ): unknown { - this._logger.logMethod?.('_render_itemList'); - - return mapIterable(this, itemList, (item) => { - const product = productStorage?.data[item.productId]; - if (product == null) { - this._logger.error('itemDetailTemplate', 'product_not_found', {productId: item.productId}); - return html`${message('order_item_not_exist')}`; - } - - return html` - -
    -
    ${product.title.fa}
    -
    - ${message('order_item_price')}: - - ${number(item.marketPrice)} - - -
    -
    - ${message('order_item_final_price')}: - - ${number(item.agencyPrice)} - - -
    -
    - ${message('order_item_qty_m2')}: - ${number(item.qty * config.order.factor.box2m2)} -
    -
    - ${message('order_item_qty_tile')}: - - ${number(item.qty * config.order.factor.box2tile)} - - -
    -
    - ${message('order_item_qty_box')}: - - ${number(item.qty)} - - -
    -
    - ${message('order_item_final_total_price')}: - - ${number(item.qty * config.order.factor.box2m2 * item.agencyPrice)} - - -
    -
    - ${message('order_item_total_price')}: - - ${number(item.qty * config.order.factor.box2m2 * item.marketPrice)} - - -
    -
    - ${message('order_item_discount')}: - - - (٪${number(calcDiscount(item.marketPrice, item.agencyPrice))}) - ${number(item.qty * config.order.factor.box2m2 * (item.marketPrice - item.agencyPrice))} - - - -
    - ${this._render_itemQtyInput(item, editable)} -
    -
    `; - }); - } - - protected _render_itemQtyInput(orderItem: OrderItem, editable: boolean): unknown { - this._logger.logMethod?.('_render_itemQtyInput'); - - if (!editable) return nothing; - - // TODO: new element - const addBtn: IconButtonContent = { - icon: 'add-outline', - clickSignalId: 'order_item_qty_add', - clickDetail: orderItem, - }; - const removeBtn: IconButtonContent = { - icon: 'remove-outline', - clickSignalId: 'order_item_qty_remove', - clickDetail: orderItem, - }; - - return html` - - - this._onQtyInputChange(event, orderItem)} - > - - - `; - } - - protected _render_shippingInfo(shippingInfo?: Partial): unknown { - this._logger.logMethod?.('_render_shippingInfo'); - - const nullStr = '…' as const; - - // if (!shippingInfo) { - // return html`
    - // } - - return html` -
    -
    - ${message('order_shipping_recipient_name_title')}: - ${shippingInfo?.recipientName || nullStr} -
    -
    - ${message('order_shipping_recipient_national_code_title')}: - ${replaceNumber(shippingInfo?.recipientNationalCode || nullStr)} -
    -
    - ${message('order_shipping_address_title')}: - ${replaceNumber(shippingInfo?.address || nullStr)} -
    -
    - ${message('order_shipping_car_type_title')}: - - ${shippingInfo?.carType ? message('order_shipping_car_type_key_' + shippingInfo?.carType) : nullStr} - -
    -
    - ${message('order_shipping_lading_type_title')}: - - ${shippingInfo?.ladingType - ? message( - 'order_shipping_lading_type_key_' + - (shippingInfo?.carType != 'trailer_truck' ? 'hand' : shippingInfo?.ladingType), - ) - : nullStr} - -
    -
    - ${message('order_shipping_time_period_title')}: - - ${shippingInfo?.timePeriod - ? message('order_shipping_time_period_key_' + shippingInfo.timePeriod) - : nullStr} - -
    -
    - ${message('order_shipping_description_title')}: - ${shippingInfo?.description} -
    -
    -
    `; - } - - protected _render_summary(order: Order): unknown { - this._logger.logMethod?.('_render_summary'); - if (!order.itemList?.length) return nothing; - - return html` -
    -
    - ${message('order_summary_total_price')}: - - ${number(order.subTotalMarket)} - - -
    -
    - ${message('order_summary_total_final_price')}: - - ${number(order.subTotalAgency)} - - -
    -
    - ${message('order_summary_discount')}: - - - (٪${number(calcDiscount(order.subTotalMarket, order.subTotalAgency))}) - ${number(order.subTotalMarket - order.subTotalAgency)} - - - -
    -
    - ${message('order_summary_lading_price').replace('${carCount}', - number(order.ladingFee / (config.order.lading[order.shippingInfo.carType!]?.fee ?? order.ladingFee)))}: - - - ${number(order.ladingFee)} - - -
    -
    - - ${message('order_summary_palette_price') - .replace('${paletteCount}', number(order.palletCost / config.order.pallet.price))}: - - - ${number(order.palletCost)} - - -
    -
    - ${message('order_shipping_shipment_price_title')}: - ${message('order_shipping_shipment_price_value')} -
    -
    - ${message('order_summary_discount_after_lading_price')}: - - - (٪${number(calcDiscount(order.subTotalMarket, order.subTotalAgency + order.totalShippingFee))}) - ${number(order.subTotalMarket - order.subTotalAgency - order.totalShippingFee)} - - - -
    -
    - ${message('order_summary_final_total_price')}: - - ${number(order.subTotalAgency + order.ladingFee + order.palletCost)} - - -
    -
    -
    `; - } - - protected _onQtyInputChange(event: CustomEvent, orderItem: OrderItem): void { - const target = event.target as AlwatrTextField; - this._logger.logMethodArgs?.('_onQtyInputChange', target.value); - const qty = +target.value || 80; - orderItem.qty = qty; - this.requestUpdate(); - } -} diff --git a/uniquely/com-pwa/src/ui/page/sign-in.ts b/uniquely/com-pwa/src/ui/page/sign-in.ts deleted file mode 100644 index ff429ebd5..000000000 --- a/uniquely/com-pwa/src/ui/page/sign-in.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { - AlwatrBaseElement, - SignalMixin, - UnresolvedMixin, - css, - customElement, - html, - nothing, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/icon'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/card/surface.js'; -import '@alwatr/ui-kit/text-field/text-field.js'; - -import {buttons} from '../../manager/buttons.js'; -import {signIn, signInServerContext} from '../../manager/context-provider/sign-in.js'; -import {linkPassTokenContextConsumer} from '../../manager/context-provider/user.js'; -import {topAppBarContextProvider} from '../../manager/context.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-sign-in': AlwatrPageSignIn; - } -} - -/** - * Alwatr Sign In Page - */ -@customElement('alwatr-page-sign-in') -export class AlwatrPageSignIn extends UnresolvedMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: flex; - flex-direction: column; - justify-content: center; - padding: calc(2 * var(--sys-spacing-track)) calc(5 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - } - - alwatr-surface { - display: flex; - flex-direction: column; - padding: calc(3 * var(--sys-spacing-track)); - gap: calc(3 * var(--sys-spacing-track)); - } - - alwatr-icon { - display: block; - margin: 0 auto; - color: var(--sys-color-primary); - font-size: calc(4 * var(--sys-spacing-track)); - } - - .error-message { - text-align: center; - color: var(--sys-color-error); - font-family: var(--sys-typescale-body-small-font-family-name); - font-weight: var(--sys-typescale-body-small-font-weight); - font-size: var(--sys-typescale-body-small-font-size); - letter-spacing: var(--sys-typescale-body-small-letter-spacing); - line-height: var(--sys-typescale-body-small-line-height); - } - - alwatr-text-field { - display: block; - } - - alwatr-button { - display: block; - margin: 0 calc(3 * var(--sys-spacing-track)); - --_surface-color-on: var(--sys-color-on-primary-hsl); - background-color: var(--sys-color-primary); - } - `; - - private _linkPass: string | null = null; - // private _textInputRef: Ref = createRef(); - - override connectedCallback(): void { - super.connectedCallback(); - - this._linkPass = linkPassTokenContextConsumer.getValue() ?? null; - - topAppBarContextProvider.setValue({ - type: 'center', - headlineKey: 'page_sign_in_headline', - startIcon: {icon: 'menu-outline', clickSignalId: 'app-menu-click-event'}, - endIconList: [{icon: 'person-circle-outline', clickSignalId: 'user-avatar-click-event'}], - tinted: 1, - }); - - // prettier-ignore - this._addSignalListeners(signInServerContext.subscribe(() => { - this.requestUpdate(); - }, {receivePrevious: 'NextCycle'})); - } - - protected override render(): unknown { - this._logger.logMethod?.('render'); - - let content; - if (this._linkPass == null) { - content = [ - this._renderTextField(true), - this._renderAuthErrorMessage(), - this._renderSignInButton(true), - ]; - } - else { - content = signInServerContext.fsm.render({ - 'initial': () => [ - this._renderTextField(), - this._renderSignInButton(), - ], - 'offlineLoading': 'onlineLoading', - 'reloading': 'onlineLoading', - 'onlineLoading': () => [ - this._renderTextField(true), - this._renderSignInButton(true), - ], - 'reloadingFailed': 'loadingFailed', - 'loadingFailed': () => [ - this._renderTextField(), - this._renderErrorMessage(), - this._renderSignInButton(), - ], - 'complete': () => nothing, - }); - } - - return html` - - ${content} - `; - } - - protected _renderTextField(loading = false): unknown { - this._logger.logMethodArgs?.('_renderTextField', {loading}); - // - return html``; - } - - protected _renderSignInButton(loading = false): unknown { - this._logger.logMethodArgs?.('_renderSignInButton', {loading}); - return html``; - } - - protected _renderErrorMessage(): unknown { - this._logger.logMethodArgs?.('_renderErrorMessage', signInServerContext.getResponse()); - // const errorKey = signInContextConsumer.getResponse()?.statusCode === 404 - // ? 'sign_in_error_user_not_found' - // : 'sign_in_error_unknown'; - - return html`
    ${message('sign_in_error_user_not_found')}
    `; - } - - protected _renderAuthErrorMessage(): unknown { - this._logger.logMethod?.('_renderAuthErrorMessage'); - return html`
    ${message('page_sign_in_login_with_link_pass')}
    `; - } - - protected _onSignInClick(): void { - // const {value: textInput} = this._textInputRef; - // const phoneNumber = sanitizePhoneNumber(textInput?.value); - this._logger.logMethod?.('_onSignInClick'); - - // if (phoneNumber == null) { - // return snackbarSignalTrigger.request({ - // messageKey: 'invalid_phone_number', - // }); - // } - - if (this._linkPass == null) { - this._logger.accident('_onSignInClick', 'invalid_link_pass', 'invalid link pass', { - linkPass: this._linkPass, - }); - return; - } - - signIn(this._linkPass); - } -} diff --git a/uniquely/com-pwa/src/ui/stuff/app-footer.ts b/uniquely/com-pwa/src/ui/stuff/app-footer.ts deleted file mode 100644 index cb3ec3c9d..000000000 --- a/uniquely/com-pwa/src/ui/stuff/app-footer.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {customElement, AlwatrBaseElement, css, html} from '@alwatr/element'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-app-footer': AlwatrPageHome; - } -} - -/** - * Alwatr Customer Order Management Home Page - */ -@customElement('alwatr-app-footer') -export class AlwatrPageHome extends AlwatrBaseElement { - static override styles = css` - :host { - display: block; - flex-grow: 0; - flex-shrink: 0; - direction: ltr; - text-align: center; - color: var(--sys-color-on-secondary-container); - padding: calc(2 * var(--sys-spacing-track)) var(--sys-spacing-track) var(--sys-spacing-track); - background-color: var(--sys-color-secondary-container); - } - - .version { - font-size: var(--sys-typescale-label-small-font-size); - line-height: var(--sys-typescale-label-small-line-height); - letter-spacing: var(--sys-typescale-label-small-letter-spacing); - opacity: 0.6; - user-select: none; - -webkit-user-select: none; - } - `; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` -
    A good ceiling is vital.
    a SOFFIT ceiling can be an inspiration.
    -
    Soffit Order Management PWA v${_ALWATR_VERSION_}
    - `; - } -} diff --git a/uniquely/com-pwa/src/ui/stuff/order-shipping-form.ts b/uniquely/com-pwa/src/ui/stuff/order-shipping-form.ts deleted file mode 100644 index 6a97706c1..000000000 --- a/uniquely/com-pwa/src/ui/stuff/order-shipping-form.ts +++ /dev/null @@ -1,167 +0,0 @@ -import {customElement, css, html, LocalizeMixin, SignalMixin, UnresolvedMixin, property} from '@alwatr/element'; -import {message, number} from '@alwatr/i18n'; -import {ladingTypeCS, carTypeCS, timePeriodCS, type OrderShippingInfo} from '@alwatr/type/customer-order-management.js'; -import '@alwatr/ui-kit/button/button.js'; -import {AlwatrSurface} from '@alwatr/ui-kit/card/surface.js'; -import '@alwatr/ui-kit/radio-group/radio-group.js'; -import '@alwatr/ui-kit/text-field/text-field.js'; -import {getLocalStorageItem, setLocalStorageItem} from '@alwatr/util'; - -import {config} from '../../config.js'; - -import type {AlwatrRadioGroup, RadioGroupOptions} from '@alwatr/ui-kit/radio-group/radio-group.js'; -import type {AlwatrTextField} from '@alwatr/ui-kit/text-field/text-field.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-order-shipping-form': AlwatrOrderShoppingForm; - } -} - -const localStorageId = 'shipping_form_data_x4'; - -/** - * Alwatr Order Shipping Form. - */ -@customElement('alwatr-order-shipping-form') -export class AlwatrOrderShoppingForm extends LocalizeMixin(SignalMixin(UnresolvedMixin(AlwatrSurface))) { - static override styles = css` - :host { - display: block; - } - - alwatr-text-field, - alwatr-radio-group { - display: block; - margin-bottom: var(--sys-spacing-track); - } - `; - - @property() - formData: Partial = {}; - - override connectedCallback(): void { - super.connectedCallback(); - this._loadFormData(); - } - - private _saveFormData(): void { - this._logger.logMethod?.('_saveFormData'); - setLocalStorageItem(localStorageId, this.formData); - } - - private _loadFormData(): void { - if (Object.values(this.formData).length !== 0) return; - this._logger.logMethod?.('_loadFormData'); - const formData = getLocalStorageItem(localStorageId, this.formData); - for (const prop in formData) { - if (!Object.prototype.hasOwnProperty.call(formData, prop)) continue; - this.formData[prop] = formData[prop]; - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - - const radioGroupOptions = { - carType: { - title: message('order_shipping_car_type_title'), - radioGroup: carTypeCS.map((value) => { - return { - value, - label: `${message('order_shipping_car_type_key_' + value)} (${number(config.order.lading[value].fee)}+)`, - }; - }), - } as RadioGroupOptions, - ladingType: { - title: message('order_shipping_lading_type_title'), - radioGroup: ladingTypeCS.map((value) => { - return { - value, - label: `${message('order_shipping_lading_type_key_' + value)}`, - }; - }), - } as RadioGroupOptions, - timePeriod: { - title: message('order_shipping_time_period_title'), - radioGroup: timePeriodCS.map((value) => { - return { - value, - label: message('order_shipping_time_period_key_' + value), - }; - }), - } as RadioGroupOptions, - }; - - return html` - - - - - - - - - - `; - } - - private _inputChanged(event: CustomEvent): void { - this._logger.logMethod?.('_inputChanged'); - const target = event.target as AlwatrTextField | AlwatrRadioGroup; - if (target == null) return; - this.formData[target.name] = target.value; - this._saveFormData(); - } -} diff --git a/uniquely/com-pwa/src/ui/stuff/order-status-box.ts b/uniquely/com-pwa/src/ui/stuff/order-status-box.ts deleted file mode 100644 index 56606719e..000000000 --- a/uniquely/com-pwa/src/ui/stuff/order-status-box.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { - customElement, - AlwatrBaseElement, - html, - property, - css, - SignalMixin, - LocalizeMixin, - type PropertyValues, -} from '@alwatr/element'; -import {message, replaceNumber, date} from '@alwatr/i18n'; -import {eventTrigger} from '@alwatr/signal'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import type {ClickSignalType} from '@alwatr/type'; -import type {OrderDraft, Order} from '@alwatr/type/customer-order-management.js'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-order-status-box': AlwatrOrderStatusBox; - } -} - -/** - * Alwatr Order Item Box Element. - */ -@customElement('alwatr-order-status-box') -export class AlwatrOrderStatusBox extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: block; - } - `; - - @property({attribute: false}) - content?: Order | OrderDraft | null; - - @property({attribute: 'click-signal-id'}) - clickSignalId?: string; - - override connectedCallback(): void { - super.connectedCallback(); - this.addEventListener('click', this._onClickEvent); - } - - override disconnectedCallback(): void { - super.disconnectedCallback(); - this.removeEventListener('click', this._onClickEvent); - } - - private _onClickEvent(event: MouseEvent): void { - this._logger.logMethodArgs?.('click', {clickSignalId: this.clickSignalId}); - if (this.content && this.clickSignalId) { - eventTrigger.dispatch>(this.clickSignalId, { - x: event.clientX, - y: event.clientY, - altKey: event.altKey, - ctrlKey: event.ctrlKey, - metaKey: event.metaKey, - detail: this.content, - }); - } - } - - protected override shouldUpdate(changedProperties: PropertyValues): boolean { - return super.shouldUpdate(changedProperties) && this.content != null; - } - - override render(): unknown { - this._logger.logMethod?.('render'); - if (!this.content) return; - - const headline = - this.content.status === 'draft' - ? message('order_status_box_headline_new') - : message('order_status_box_headline') - .replace('${orderId}', replaceNumber(this.content.id.padStart(2, '0'))); - - const iconBoxContent: IconBoxContent = { - headline, - icon: 'receipt-outline', - flipRtl: true, - stated: Boolean(this.clickSignalId), - elevated: 1, - }; - - return html` - - ${message('order_status_box_status') + ': ' + message('order_status_' + this.content.status)}
    - ${message('order_status_box_created') + ': ' + date(this.content.meta?.created ?? Date.now())} -
    - `; - } -} diff --git a/uniquely/com-pwa/src/ui/stuff/select-product.ts b/uniquely/com-pwa/src/ui/stuff/select-product.ts deleted file mode 100644 index 6562fafe3..000000000 --- a/uniquely/com-pwa/src/ui/stuff/select-product.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { - customElement, - SignalMixin, - AlwatrBaseElement, - LocalizeMixin, - css, - html, - mapObject, - UnresolvedMixin, - property, - nothing, -} from '@alwatr/element'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/card/product-card.js'; - -import {config} from '../../config.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {OrderDraft, Product, ProductPrice} from '@alwatr/type/customer-order-management.js'; -import type {AlwatrProductCard, ProductCartContent} from '@alwatr/ui-kit/card/product-card.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-select-product': AlwatrSelectProduct; - } -} - -/** - * Alwatr Select Product Element. - */ -@customElement('alwatr-select-product') -export class AlwatrSelectProduct extends LocalizeMixin(SignalMixin(UnresolvedMixin(AlwatrBaseElement))) { - static override styles = css` - :host { - box-sizing: border-box; - display: flex; - flex-wrap: wrap; - /* padding: var(--sys-spacing-track) calc(2 * var(--sys-spacing-track)); */ - gap: var(--sys-spacing-track); - box-sizing: border-box; - justify-content: flex-end; - } - - alwatr-product-card { - width: 40%; - flex-grow: 1; - } - - .break { - width: 100%; - visibility: hidden; - } - `; - - @property() - protected order?: OrderDraft; - - @property() - protected productStorage?: AlwatrDocumentStorage; - - @property() - protected finalPriceStorage?: AlwatrDocumentStorage; - - @property() - protected priceStorage?: AlwatrDocumentStorage; - - selectedRecord: Record = {}; - - override connectedCallback(): void { - super.connectedCallback(); - this._updateSelectedRecord(); - } - - private _updateSelectedRecord(): void { - this._logger.logMethod?.('_updateSelectedRecord'); - this.selectedRecord = {}; - if (!this.order?.itemList?.length) return; - for (const item of this.order.itemList) { - this.selectedRecord[item.productId] = true; - } - } - - override render(): unknown { - this._logger.logMethod?.('render'); - - if (this.productStorage == null || this.priceStorage == null || this.finalPriceStorage == null) { - this._logger.accident('render_part_product_list', 'context_not_valid', 'Some context not valid', this.order); - return nothing; - } - - return mapObject(this, this.productStorage?.data, this.render_part_product_card); - } - - protected render_part_product_card(product: Product): unknown { - if (this.productStorage == null || this.priceStorage == null || this.finalPriceStorage == null) return; - const content: ProductCartContent = { - id: product.id, - title: product.title.fa, - imagePath: config.serverContext.cdn + '/medium/' + product.image.id, - price: this.priceStorage?.data[product.id]?.price ?? 0, - finalPrice: this.finalPriceStorage?.data[product.id]?.price ?? 0, - }; - return html``; - } - - private _selectedChanged(event: CustomEvent): void { - if (this.order == null || this.priceStorage == null || this.finalPriceStorage == null) return; - const target = event.target as AlwatrProductCard | null; - const productId = target?.content?.id; - - this._logger.logMethodArgs?.('_selectedChanged', {productId}); - - if (target == null || productId == null) return; - - this.order.itemList ??= []; - if (target.selected === true) { - this.order.itemList.push({ - productId, - qty: 0, - marketPrice: this.priceStorage.data[productId].price, - agencyPrice: this.finalPriceStorage.data[productId].price, - }); - } - else { - const itemIndex = this.order.itemList.findIndex((item) => item.productId === productId); - if (itemIndex !== -1) { - this.order.itemList.splice(itemIndex, 1); - } - } - - const submitButton = this.renderRoot.querySelector('alwatr-button'); - if (submitButton && this.order.itemList.length < 2) { - submitButton.toggleAttribute('disabled', !this.order.itemList.length); - } - } -} diff --git a/uniquely/com-pwa/src/ui/stuff/user-inc-order-box.ts b/uniquely/com-pwa/src/ui/stuff/user-inc-order-box.ts deleted file mode 100644 index f3802b825..000000000 --- a/uniquely/com-pwa/src/ui/stuff/user-inc-order-box.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { - AlwatrBaseElement, - LocalizeMixin, - SignalMixin, - css, - customElement, - html, - mapIterable, - property, -} from '@alwatr/element'; -import {date, message} from '@alwatr/i18n'; -import {url} from '@alwatr/router'; - -import type {ComUserIncOrder, Order} from '@alwatr/type/customer-order-management.js'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-user-inc-order-box': alwatrUserIncOrderBox; - } -} - -/** - * Alwatr User Include Order Box Element. - */ -@customElement('alwatr-user-inc-order-box') -export class alwatrUserIncOrderBox extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: block; - } - - .detail-container { - flex-grow: 1; - } - - .detail-container > * { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: var(--sys-spacing-track); - } - - .detail-container > *:last-child { - margin-bottom: 0; - } - - .order-container { - padding: 0; - } - - .order-info { - padding: calc(2 * var(--sys-spacing-track)); - cursor: pointer; - } - - .order-info:hover { - background-color: var(--sys-color-surface-variant); - color: var(--sys-color-on-surface-variant); - } - - .empty-order { - padding: calc(2 * var(--sys-spacing-track)); - } - - a { - display: block; - color: inherit; - text-decoration: none; - } - `; - - @property() - userIncOrder?: ComUserIncOrder; - - override render(): unknown { - this._logger.logMethod?.('render'); - const userProfileIconBox: IconBoxContent = { - tinted: 1, - headline: this.userIncOrder?.fullName ?? '', - icon: 'person-circle-outline', - }; - - return html` - -
    -
    - ${message('page_admin_order_list_phone_number')}: - +${this.userIncOrder?.phoneNumber} -
    -
    - ${message('page_admin_order_list_province')}: - ${this.userIncOrder?.province} -
    -
    - ${message('page_admin_order_list_city')}: - ${this.userIncOrder?.city} -
    -
    - ${this._renderOrderBox()} -
    - `; - } - - protected _renderOrderBox(): unknown { - let orderListTemplate; - const orderListValues = Object.values(this.userIncOrder?.orderList ?? {}); - if (orderListValues.length === 0) { - orderListTemplate = html` - - ${message('page_admin_order_list_empty_order_list')} - `; - } - else { - const orderList = orderListValues.sort((o1, o2) => { - return (o2.meta?.updated || 0) - (o1.meta?.updated || 0); - }); - - orderListTemplate = mapIterable(this, orderList, (order) => this._renderOrderInfo(order)); - } - - return html` -

    ${message('page_admin_order_list_order_list')}:

    - ${orderListTemplate} - `; - } - - protected _renderOrderInfo(order: Order): unknown { - return html` - -
    - ${message('page_admin_order_list_order_id')}: - ${order.id} -
    -
    - ${message('page_admin_order_list_order_date')}: - ${order.meta?.created ? date(order.meta?.created) : ''} -
    -
    - ${message('page_admin_order_list_order_status')}: - ${message('order_status_' + order.status)} -
    -
    - `; - } -} diff --git a/uniquely/com-pwa/tsconfig.json b/uniquely/com-pwa/tsconfig.json deleted file mode 100644 index e87607747..000000000 --- a/uniquely/com-pwa/tsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - // "moduleResolution": "bundler", - "rootDir": "src", - "outDir": "build", - "noEmit": true, - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - - "include": ["src/**/*.ts", "src/**/*.json"], - "exclude": [], - "references": [ - {"path": "../../core/router"}, - {"path": "../../core/fetch"}, - {"path": "../../core/i18n"}, - {"path": "../../core/type"}, - {"path": "../../core/validator"}, - {"path": "../../core/signal"}, - {"path": "../../core/util"}, - {"path": "../../core/fsm"}, - {"path": "../../core/context"}, - {"path": "../../ui/element"}, - {"path": "../../ui/ui-kit"}, - {"path": "../../ui/pwa-helper"}, - ] -} diff --git a/uniquely/com-pwa/web-dev-server.config.js b/uniquely/com-pwa/web-dev-server.config.js deleted file mode 100644 index 9c4e13e1e..000000000 --- a/uniquely/com-pwa/web-dev-server.config.js +++ /dev/null @@ -1,2 +0,0 @@ -import {config} from '@alwatr/pwa-helper/pwa-dev-server.config.js'; -export default config; diff --git a/uniquely/flight-finder-api/CHANGELOG.md b/uniquely/flight-finder-api/CHANGELOG.md deleted file mode 100644 index 6f1336d32..000000000 --- a/uniquely/flight-finder-api/CHANGELOG.md +++ /dev/null @@ -1,69 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/flight-finder-api - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/flight-finder-api - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/flight-finder-api - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **ff-api:** imports path ([cdb0a51](https://github.com/AliMD/alwatr/commit/cdb0a51726da71efa511928cb8e7549132184eda)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **services:** app name in home page ([6feab58](https://github.com/AliMD/alwatr/commit/6feab58b5655c7a09150ec83adf9f3bd8fe976b4)) -- **services:** name and desc ([453c1b6](https://github.com/AliMD/alwatr/commit/453c1b6ff334a23bea690b7ff9dd874471b25bb9)) -- **services:** service name in first log ([879f87f](https://github.com/AliMD/alwatr/commit/879f87fd4d4b47454d608a5b71d70e47601c7cd7)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -# [0.27.0](https://github.com/AliMD/flight-finder/compare/v0.26.0...v0.27.0) (2022-12-29) - -**Note:** Version bump only for package @alwatr/flight-finder-api - -# [0.26.0](https://github.com/AliMD/flight-finder/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- all import without .js ([fa739ab](https://github.com/AliMD/flight-finder/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -- **ff-api:** rename dest ([5589ef4](https://github.com/AliMD/flight-finder/commit/5589ef4968ea0b1d9f82cbceba5a15db1cb78ddd)) -- **ff:** types ([68b00e0](https://github.com/AliMD/flight-finder/commit/68b00e0e53e3fe7639d7eb0f4966d6192be453e4)) -- **flight-crawler:** min&max hour in demo.http ([b567992](https://github.com/AliMD/flight-finder/commit/b567992e19b6d95eddf6aca481ec157469c390bb)) -- inline home route ([94279c2](https://github.com/AliMD/flight-finder/commit/94279c21891fc710f48642b1c8debbf02b2436d3)) -- inline home route ([ce978f6](https://github.com/AliMD/flight-finder/commit/ce978f6e1e2890e853d0db351c08efca665e5fad)) -- services serve script ([3c62e06](https://github.com/AliMD/flight-finder/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- update reply nano-server ([5a2d0e5](https://github.com/AliMD/flight-finder/commit/5a2d0e5698b16cffcc5393ee4a44ffda66702425)) - -### Features - -- esbuild (: ([43c7269](https://github.com/AliMD/flight-finder/commit/43c7269333cf71b142e26da1456446d42fb3f8e0)) -- **ff:** min & max hour ([f7f5884](https://github.com/AliMD/flight-finder/commit/f7f58840ea4d7b0678107cebb3887523e2aa4c55)) -- improve error debugging ([1fba504](https://github.com/AliMD/flight-finder/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c)) -- move some depndencies to devDependencies ([4e9576e](https://github.com/AliMD/flight-finder/commit/4e9576e6fd55f361e08a54230931ad45832131d9)) -- new build process ([aa23ed2](https://github.com/AliMD/flight-finder/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) diff --git a/uniquely/flight-finder-api/README.md b/uniquely/flight-finder-api/README.md deleted file mode 100644 index 93db93935..000000000 --- a/uniquely/flight-finder-api/README.md +++ /dev/null @@ -1 +0,0 @@ -# Flight Finder Application API diff --git a/uniquely/flight-finder-api/demo.http b/uniquely/flight-finder-api/demo.http deleted file mode 100644 index 09ef41750..000000000 --- a/uniquely/flight-finder-api/demo.http +++ /dev/null @@ -1,17 +0,0 @@ -U2FsdGVkX1+EygaRw4ZZdZJ58/W+bZz2NHy+sIo9V1X3lNoQSkEbG/RVmUoDdibD -3fMDZ8U0BngOVsgQ11ys/wmapanRqVN8Gwl6r0vTz1knxQ9yag6y7fCBXV19/7Yi -JMEMsNK6bElCTNGX3MHYzyKuV75XB4BjriCIYjFujxiJYSkuA7E18lLDp1wVahWz -hW1BsEBjeeX1MrdWZ2blwL2KyN8HGkq3cGZg2PLqOIkLeifsvvg2tMzb8yHQg4Yr -RFdel3Iv7tWQKXlT/xQ5icDe4617liRVs0M8uMQsXo0E1UVpvAp6k5KZFw0AhJ8g -GLd516ad1Xw0RkIUtaMiEKTCVJfo5bvD6ncKIiu8RlY6tZk0z+PQN3Rhbl2ITjsp -V+TSHfcRIJuOE7+ivGuekbRl+itgC7JK/HAsYUOBKRNt5F+SSl4CUKWaE0+CKgt+ -WYhIPG6vYNuuh0bgp4ga9WpcyPK24FzKequp9kEvEG03SsXQl7mFluzyQCuDC5Hz -XF4JkQQkY5fqLr17rrRcVlaX+28g6oVrNjje7RJLtE4w7SMTw8FHE8Pu0bitFnJZ -t9Vap1pyjw/UVhqSKvKDCFtbepdstCd0TFq7DJZ/hhS+6DcNENgZbrznlQWeutgT -TyCNnPHPfX26Fe6T7+Rdaqazzr+G0iEupCz2S0BWMKyMEnIpVJb40I8v0vprVpwt -kAQMujt/+zcpP47FEg4M8Pnu7XgO5/UnQ8stA51xUyd+jCwkvJ1JHQLvTIlvVvOs -GwwZz0JcPfJFE1vgOTcJAgMD9r2lIDSDpRZdgSJpbfhlUV9eEENEMxDd++Mqssnb -sIySU7QcP5EeQVVyxGAKXzNMcYHHL/FlcT3DSXIHtPsEV9mruepDn9DnqXdx0NLm -zcxLx70KtwvDqacj1EpOz8tMYmK5TcB0+ySWhYLmJ1MA1rjoEQ7tS6QG/9PqDzZ/ -ldfWr3PARwh60SMHzMDLEX3cqvUCTCVnG4ZOZ8ijXToaGCeBsRUJliVU54vFhtJH -0OS8qIzU2+riEjOWzCiFSQ== diff --git a/uniquely/flight-finder-api/package.json b/uniquely/flight-finder-api/package.json deleted file mode 100644 index 8d48ed06b..000000000 --- a/uniquely/flight-finder-api/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@alwatr/flight-finder-api", - "version": "1.0.0", - "description": "Alwatr Flight Finder Application API.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "uniquely/flight-finder-api" - }, - "scripts": { - "b": "yarn build", - "c": "yarn clean", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "build": "yarn build:es --analyze=verbose", - "build:ts": "tsc --build", - "build:es": "esbuild src/index.ts --platform=node --target=node19 --bundle --format=esm --minify --sourcemap --outdir=dist --out-extension:.js=.mjs", - "clean": "rm -rf dist build .tsbuildinfo", - "serve": "node --enable-source-maps dist/index.mjs", - "serve:debug": "node --inspect --enable-source-maps dist/index.mjs", - "watch": "run-s clean build && run-p watch:es watch:node", - "watch:node": "nodemon -w dist/ --enable-source-maps dist/index.mjs", - "watch:debug-node": "nodemon -w dist/ --inspect --enable-source-maps dist/index.mjs", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput", - "watch:es": "yarn build:es --watch" - } -} diff --git a/uniquely/flight-finder-api/src/config.ts b/uniquely/flight-finder-api/src/config.ts deleted file mode 100644 index 2a7ad6de7..000000000 --- a/uniquely/flight-finder-api/src/config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('flight-finder-api'); - -export const config = { - storage: { - host: process.env.STORAGE_HOST ?? '127.0.0.1', - port: process.env.STORAGE_PORT != null ? +process.env.STORAGE_PORT : 9000, - name: process.env.STORAGE_NAME ?? 'job', - token: process.env.STORAGE_TOKEN ?? 'YOUR_SECRET_TOKEN', - }, - nanoServer: { - host: process.env.HOST ?? '0.0.0.0', - port: process.env.PORT != null ? +process.env.PORT : 8000, - accessToken: process.env.ACCESS_TOKEN ?? 'YOUR_SECRET_TOKEN', - allowAllOrigin: true, - }, -}; - -logger.logProperty?.('config', config); diff --git a/uniquely/flight-finder-api/src/index.ts b/uniquely/flight-finder-api/src/index.ts deleted file mode 100644 index 0e61575ae..000000000 --- a/uniquely/flight-finder-api/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {logger} from './config.js'; -import './route/home.js'; -import './route/job/delete.js'; -import './route/job/get.js'; -import './route/job/put.js'; - -logger.logOther?.('..:: Alwatr Flight Finder Application API ::..'); diff --git a/uniquely/flight-finder-api/src/lib/nano-server.ts b/uniquely/flight-finder-api/src/lib/nano-server.ts deleted file mode 100644 index 593467ef5..000000000 --- a/uniquely/flight-finder-api/src/lib/nano-server.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AlwatrNanoServer} from '@alwatr/nano-server'; - -import {config} from '../config.js'; - -export const nanoServer = new AlwatrNanoServer(config.nanoServer); diff --git a/uniquely/flight-finder-api/src/lib/storage.ts b/uniquely/flight-finder-api/src/lib/storage.ts deleted file mode 100644 index 9a3288c9c..000000000 --- a/uniquely/flight-finder-api/src/lib/storage.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {AlwatrStorageClient} from '@alwatr/storage-client'; - -import {config} from '../config.js'; - -import type {Job} from '@alwatr/type/flight-finder.js'; - -export const storageClient = new AlwatrStorageClient(config.storage); diff --git a/uniquely/flight-finder-api/src/route/home.ts b/uniquely/flight-finder-api/src/route/home.ts deleted file mode 100644 index 5b80f933f..000000000 --- a/uniquely/flight-finder-api/src/route/home.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {nanoServer} from '../lib/nano-server.js'; - -nanoServer.route('GET', '/', () => ({ - ok: true, - data: { - app: '..:: Alwatr Flight Finder Application API ::..', - message: 'Hello ;)', - }, -})); diff --git a/uniquely/flight-finder-api/src/route/job/delete.ts b/uniquely/flight-finder-api/src/route/job/delete.ts deleted file mode 100644 index 444f71fef..000000000 --- a/uniquely/flight-finder-api/src/route/job/delete.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {config, logger} from '../../config.js'; -import {nanoServer} from '../../lib/nano-server.js'; -import {storageClient} from '../../lib/storage.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; -import type {StringifyableRecord} from '@alwatr/type'; - -// Delete object -nanoServer.route('DELETE', '/job', deleteJob); - -async function deleteJob( - connection: AlwatrConnection, -): Promise, StringifyableRecord>> { - logger.logMethod?.('deleteJob'); - - connection.requireToken(config.nanoServer.accessToken) == null; - - const params = connection.requireQueryParams<{id: string}>({id: 'string'}); - - try { - await storageClient.delete(params.id); - return { - ok: true, - data: {}, - }; - } - catch (_err) { - const err = _err as Error; - if (err.message === 'document_not_found') { - return { - ok: false, - statusCode: 404, - errorCode: 'document_not_found', - }; - } - else { - return { - ok: false, - statusCode: 500, - errorCode: 'storage_error', - meta: { - name: err.name, - message: err.message, - cause: err.cause as StringifyableRecord, - }, - }; - } - } -} diff --git a/uniquely/flight-finder-api/src/route/job/get.ts b/uniquely/flight-finder-api/src/route/job/get.ts deleted file mode 100644 index a75e9ac2a..000000000 --- a/uniquely/flight-finder-api/src/route/job/get.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {config, logger} from '../../config.js'; -import {nanoServer} from '../../lib/nano-server.js'; -import {storageClient} from '../../lib/storage.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; -import type {StringifyableRecord} from '@alwatr/type'; -import type {Job} from '@alwatr/type/flight-finder.js'; - -// Get current job object -nanoServer.route('GET', '/job', getJob); - -async function getJob( - connection: AlwatrConnection, -): Promise, StringifyableRecord>> { - logger.logMethod?.('getJob'); - - connection.requireToken(config.nanoServer.accessToken); - - try { - return await storageClient.getStorage(); - } - catch (_err) { - const err = _err as Error; - logger.error('getJob', err.message || 'storage_error', err); - return { - ok: false, - statusCode: 500, - errorCode: 'storage_error', - meta: { - name: err.name, - message: err.message, - cause: err.cause as StringifyableRecord, - }, - }; - } -} diff --git a/uniquely/flight-finder-api/src/route/job/put.ts b/uniquely/flight-finder-api/src/route/job/put.ts deleted file mode 100644 index 1393abac6..000000000 --- a/uniquely/flight-finder-api/src/route/job/put.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {config, logger} from '../../config.js'; -import {nanoServer} from '../../lib/nano-server.js'; -import {storageClient} from '../../lib/storage.js'; - -import type {AlwatrConnection, AlwatrServiceResponse} from '@alwatr/nano-server'; -import type {StringifyableRecord} from '@alwatr/type'; -import type {Job} from '@alwatr/type/flight-finder.js'; - -// Add job -nanoServer.route('PUT', '/job', newJob); - -async function newJob(connection: AlwatrConnection): Promise> { - logger.logMethod?.('newJob'); - - connection.requireToken(config.nanoServer.accessToken); - - const job = await connection.requireJsonBody(); - - job.id ??= 'auto_increment'; - job.resultList = []; - - try { - if (job.id !== 'auto_increment' && (await storageClient.has(job.id))) { - return { - ok: false, - statusCode: 400, - errorCode: 'job_exist', - }; - } - // else - return { - ok: true, - data: await storageClient.set(job), - }; - } - catch (_err) { - const err = _err as Error; - logger.error('newJob', err.message || 'storage_error', err); - return { - ok: false, - statusCode: 500, - errorCode: 'storage_error', - meta: { - name: err.name, - message: err.message, - cause: err.cause as StringifyableRecord, - }, - }; - } -} diff --git a/uniquely/flight-finder-api/tsconfig.json b/uniquely/flight-finder-api/tsconfig.json deleted file mode 100644 index 1f3a43b59..000000000 --- a/uniquely/flight-finder-api/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "target": "ESNext", - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build" - // "noEmit": true - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../core/nano-server"}, - {"path": "../../core/logger"}, - {"path": "../../core/type"}, - {"path": "../../core/storage-client"} - ] -} diff --git a/uniquely/flight-finder-pwa/CHANGELOG.md b/uniquely/flight-finder-pwa/CHANGELOG.md deleted file mode 100644 index 927e1cc00..000000000 --- a/uniquely/flight-finder-pwa/CHANGELOG.md +++ /dev/null @@ -1,114 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/flight-finder-pwa - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -**Note:** Version bump only for package @alwatr/flight-finder-pwa - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/flight-finder-pwa - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -**Note:** Version bump only for package @alwatr/flight-finder-pwa - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **ff-pwa:** current year ([4f70ad2](https://github.com/AliMD/alwatr/commit/4f70ad25d21144cc38c21d81acf8b4e8d8f986c2)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- clean ff old packages ([54df4b7](https://github.com/AliMD/alwatr/commit/54df4b7354abd9547a83cc3b09923cce81210c2c)) -- compatible with i18n ([89c4a90](https://github.com/AliMD/alwatr/commit/89c4a90444db12930b1d0211942c9b84185cbb32)) -- compatible with new esbuild api ([e23638e](https://github.com/AliMD/alwatr/commit/e23638ed80a871fef12d5d75aa3eb3824c7cdabd)) -- lit-analyzer version ([199532d](https://github.com/AliMD/alwatr/commit/199532de48f0dc0e8470d11c6a6544da1c9ddf6c)) -- remove ff from build process ([54445b6](https://github.com/AliMD/alwatr/commit/54445b6622891261f36364114327706c0fd2e4fd)) -- **soffit-pwa:** compatible with new route ([fbf3c56](https://github.com/AliMD/alwatr/commit/fbf3c560efd17b62d42e61f35de425ca09e758bc)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) - -### Features - -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- review ([53726b7](https://github.com/AliMD/alwatr/commit/53726b77274be429c87b2fd322fe2d939b048c77)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **ff-pwa:** version ([aacfed2](https://github.com/AliMD/alwatr/commit/aacfed27711aad50039e5b532011cbfca10019ca)) -- review issue ([e5d192c](https://github.com/AliMD/alwatr/commit/e5d192cbee6917c2de01146cf8bd026895724ab8)) -- **services:** name and desc ([453c1b6](https://github.com/AliMD/alwatr/commit/453c1b6ff334a23bea690b7ff9dd874471b25bb9)) -- version in package.json ([403baa5](https://github.com/AliMD/alwatr/commit/403baa53159db2a0fff5b3651769b85e66b13191)) - -# [0.27.0](https://github.com/AliMD/flight-finder/compare/v0.26.0...v0.27.0) (2022-12-29) - -### Bug Fixes - -- **ff-pwa:** root html head tags & icon ([3d5b83a](https://github.com/AliMD/flight-finder/commit/3d5b83a569f2d001e31eee0b5782d60321aa453f)) -- **ff-pwa:** root html metas ([9ec0a01](https://github.com/AliMD/flight-finder/commit/9ec0a0168d19c716213acc9a5ab454404024a523)) -- **ff-pwa:** viewport ([dba2530](https://github.com/AliMD/flight-finder/commit/dba2530b0b040c48d213844ef4833e6ac90ed405)) - -### Features - -- **element:** export from lit ([21f15d8](https://github.com/AliMD/flight-finder/commit/21f15d86319a40fab02d86f24a1451c056f36a7c)) -- **ff-pwa:** add banner ([5e647f6](https://github.com/AliMD/flight-finder/commit/5e647f60c49bddae4ed8d78d67377264465b2adc)) -- **ff-pwa:** app name ([0fb42ae](https://github.com/AliMD/flight-finder/commit/0fb42ae3001efbee91d98058816296106373c9b1)) -- **ui/demo:** new pwa package ([#508](https://github.com/AliMD/flight-finder/issues/508)) ([93b9722](https://github.com/AliMD/flight-finder/commit/93b972254845756d339574f4eec909807e69b3c4)) - -# [0.26.0](https://github.com/AliMD/flight-finder/compare/v0.25.0...v0.26.0) (2022-12-22) - -### Bug Fixes - -- all import without .js ([fa739ab](https://github.com/AliMD/flight-finder/commit/fa739ab23f67bae1d10bfcc146920b71377a26fc)) -- **ff-pwa:** build ([565f6d1](https://github.com/AliMD/flight-finder/commit/565f6d1f68bb7268d7980893b15f33bf1dc85d0c)) -- **ff-pwa:** job-item title ([6f6633d](https://github.com/AliMD/flight-finder/commit/6f6633dd32f879329f5b208d38ad6a62b54ed6be)) -- **ff-pwa:** JobDetail destination ([ad983f7](https://github.com/AliMD/flight-finder/commit/ad983f7960da79c44e3c3b565e640be659c0fc43)) -- **ff-pwa:** JobResult type ([3923187](https://github.com/AliMD/flight-finder/commit/3923187a1de217b04fc28521488d6ff26e2749f5)) -- **ff-pwa:** render issues ([81d4c7e](https://github.com/AliMD/flight-finder/commit/81d4c7ea875e759a2b9a86f49a143617bffe9b2c)) -- **ff-pwa:** requestJobStorage ([35cbb0c](https://github.com/AliMD/flight-finder/commit/35cbb0c9429561028b77dcf578d67e9196fd77b3)) -- **ff-pwa:** safari issue ([78fb968](https://github.com/AliMD/flight-finder/commit/78fb9689af4e003268f1d8b62473f2ae6cf9e8f8)) -- **ff-pwa:** types ([f536092](https://github.com/AliMD/flight-finder/commit/f5360922d8f86f9e3753ab46b5717b0194545c0a)) -- **ff:** types ([68b00e0](https://github.com/AliMD/flight-finder/commit/68b00e0e53e3fe7639d7eb0f4966d6192be453e4)) -- **flight-finder-pwa:** image path in manifest.json ([c52d812](https://github.com/AliMD/flight-finder/commit/c52d81266bb1fb3ec9b81a574c16f89519825786)) -- fucking conflict ([37063fc](https://github.com/AliMD/flight-finder/commit/37063fc4c535d9b653905b94b2993f0a7aa62566)) -- job list ([83a0459](https://github.com/AliMD/flight-finder/commit/83a0459ff609a722f77a2c0cf57d9f83fa33cdcf)) -- **pwa/ff:** `ok-text` in `job-add-form` ([0c63574](https://github.com/AliMD/flight-finder/commit/0c63574f8d23c5efcdee2d0bb8a0670a7d034182)) -- **pwa/ff:** dbl click prevent default ([c8d113a](https://github.com/AliMD/flight-finder/commit/c8d113a76ef5cd1cf97f69792c08a16f88a6701c)) -- **pwa/ff:** timer ([f31b707](https://github.com/AliMD/flight-finder/commit/f31b707df599a390203579d8f77156fb6f2f3b19)) -- **pwa/ff:** timer selector ([201f3c4](https://github.com/AliMD/flight-finder/commit/201f3c48ecbe6a657bd3c7ac0d1a42e276b7d69d)) -- **pwa:** build ([957652d](https://github.com/AliMD/flight-finder/commit/957652de7df6bf816d4f40211aa37b5fd371b77d)) -- **pwa:** config ([e29699e](https://github.com/AliMD/flight-finder/commit/e29699e87589e1abc625b9cf5e24f1721525d126)) -- **pwa:** manifest icon ([c3e64be](https://github.com/AliMD/flight-finder/commit/c3e64bed745b683233d232c37662cd7add1a1ceb)) -- **pwa:** theme color ([26f8397](https://github.com/AliMD/flight-finder/commit/26f839703bf0d821ff8991632599da268d979c7a)) -- review issue ([dd10b72](https://github.com/AliMD/flight-finder/commit/dd10b722fcc7bb01ceb40ebcf54d9a7fbc94139b)) -- services serve script ([3c62e06](https://github.com/AliMD/flight-finder/commit/3c62e06ec594ec7da171fc39ec77787e3bd29a0c)) -- **storage-engine:** export type ([4dbd79f](https://github.com/AliMD/flight-finder/commit/4dbd79f746484c870f877b98d556930e9c35b3f9)) -- **ui/\*:** package path in refrences ([841d86d](https://github.com/AliMD/flight-finder/commit/841d86dc2555fdc86a950b490ea2eb9fffe4df2d)) - -### Features - -- **ff-pwa:** copy city list ([a37373b](https://github.com/AliMD/flight-finder/commit/a37373b7ec60bfdb340beb695bf8311f8b94d0ee)) -- **ff-pwa:** show version ([9a3b7a0](https://github.com/AliMD/flight-finder/commit/9a3b7a07b5d7218bee21bfcc875c7ad2564cd988)) -- **ff-pwa:** use city list ([7d70cb3](https://github.com/AliMD/flight-finder/commit/7d70cb35b97fab14b1e026ea93ab9654e4ee3f1e)) -- **flight-finder-pwa:** set config ([993bbbb](https://github.com/AliMD/flight-finder/commit/993bbbb4100553605665af427113c18fbfa1534c)) -- new build process ([aa23ed2](https://github.com/AliMD/flight-finder/commit/aa23ed256824b9b4409e51a3213d6e67f2aeb8a3)) -- **pwa/ff:** dbl click delete ([458f9cd](https://github.com/AliMD/flight-finder/commit/458f9cdc7b0633b1fba1764a0321f5e60bdeaf8c)) -- **pwa/ff:** define response meta type ([b2b2b7c](https://github.com/AliMD/flight-finder/commit/b2b2b7c0171191905b0e03f9d8d9f231c10c6a7d)) -- **pwa/ff:** filter hour i18n ([44e25d6](https://github.com/AliMD/flight-finder/commit/44e25d6a8e689822fe1686e82b34d1a61cf8830a)) -- **pwa/ff:** job add modal ([95fcad5](https://github.com/AliMD/flight-finder/commit/95fcad588257ab2d1a54c664b7b1f79cd5d4ea98)) -- **pwa/ff:** job delete ([aac3b61](https://github.com/AliMD/flight-finder/commit/aac3b619398fa6d15db9a10fc7cbe61dbffabe62)) -- **pwa/ff:** l10n ([04e3b82](https://github.com/AliMD/flight-finder/commit/04e3b82fec62de7c5dda155e9113792115d45d57)) -- **pwa/ff:** last updated jobs ([2597238](https://github.com/AliMD/flight-finder/commit/259723826e79f1183d0c05bebe3d25b9c9fcc60f)) -- **pwa/ff:** theming color ([d238c5a](https://github.com/AliMD/flight-finder/commit/d238c5af9e23e726b45c14a4379c780ff65c3125)) -- **pwa/ff:** time filter ui ([576c396](https://github.com/AliMD/flight-finder/commit/576c3966eb753fd5104e1d33be6c912f520f005e)) diff --git a/uniquely/flight-finder-pwa/README.md b/uniquely/flight-finder-pwa/README.md deleted file mode 100644 index 2f4421815..000000000 --- a/uniquely/flight-finder-pwa/README.md +++ /dev/null @@ -1 +0,0 @@ -# Flight Finder PWA diff --git a/uniquely/flight-finder-pwa/config.js b/uniquely/flight-finder-pwa/config.js deleted file mode 100644 index b37f4a12b..000000000 --- a/uniquely/flight-finder-pwa/config.js +++ /dev/null @@ -1,4 +0,0 @@ -window.appConfig = { - api: 'https://api.counterme.ir', - token: 'a35c40f1c73f8e7661a5d99c95e926d80241436a2eedaf5fbd3f16fa54551933', -}; diff --git a/uniquely/flight-finder-pwa/image/banner.jpg b/uniquely/flight-finder-pwa/image/banner.jpg deleted file mode 100644 index d16cbeb5f..000000000 Binary files a/uniquely/flight-finder-pwa/image/banner.jpg and /dev/null differ diff --git a/uniquely/flight-finder-pwa/image/favicon.ico b/uniquely/flight-finder-pwa/image/favicon.ico deleted file mode 100644 index aeb2e1a48..000000000 Binary files a/uniquely/flight-finder-pwa/image/favicon.ico and /dev/null differ diff --git a/uniquely/flight-finder-pwa/image/icon-180.png b/uniquely/flight-finder-pwa/image/icon-180.png deleted file mode 100644 index 28068557a..000000000 Binary files a/uniquely/flight-finder-pwa/image/icon-180.png and /dev/null differ diff --git a/uniquely/flight-finder-pwa/image/icon-192-maskable.png b/uniquely/flight-finder-pwa/image/icon-192-maskable.png deleted file mode 100644 index 7249c825c..000000000 Binary files a/uniquely/flight-finder-pwa/image/icon-192-maskable.png and /dev/null differ diff --git a/uniquely/flight-finder-pwa/image/icon-192.png b/uniquely/flight-finder-pwa/image/icon-192.png deleted file mode 100644 index 03a05a6fb..000000000 Binary files a/uniquely/flight-finder-pwa/image/icon-192.png and /dev/null differ diff --git a/uniquely/flight-finder-pwa/image/icon-512-maskable.png b/uniquely/flight-finder-pwa/image/icon-512-maskable.png deleted file mode 100644 index d663e0338..000000000 Binary files a/uniquely/flight-finder-pwa/image/icon-512-maskable.png and /dev/null differ diff --git a/uniquely/flight-finder-pwa/image/icon-512.png b/uniquely/flight-finder-pwa/image/icon-512.png deleted file mode 100644 index 061fce9ba..000000000 Binary files a/uniquely/flight-finder-pwa/image/icon-512.png and /dev/null differ diff --git a/uniquely/flight-finder-pwa/index.html b/uniquely/flight-finder-pwa/index.html deleted file mode 100644 index 4680aa4ac..000000000 --- a/uniquely/flight-finder-pwa/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - Flight Finder - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/uniquely/flight-finder-pwa/l10n/fa-IR.json b/uniquely/flight-finder-pwa/l10n/fa-IR.json deleted file mode 100644 index c3477ff09..000000000 --- a/uniquely/flight-finder-pwa/l10n/fa-IR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "_code": "fa-IR", - - "config_currency": "تومان", - - "flight_finder": "پرواز یاب", - "search_list": "لیست جستجو", - "minutes_ago": "دقیقه پیش", - "origin": "مبدا", - "destination": "مقصد", - "confirm": "تایید", - "cancel": "لغو", - "description": "توضیحات", - "day": "روز", - "month": "ماه", - "seat_count": "تعداد صندلی", - "day_part": "بخش روز", - "maximum_price": "حداکثر قیمت", - "send": "ارسال", - "not_found": "یافت نشد", - "flight": "پرواز", - "from_hour": "از ساعت", - "to_hour": "تا ساعت", - "nothing_found": "هیچ چیز یافت نشد" -} diff --git a/uniquely/flight-finder-pwa/manifest.json b/uniquely/flight-finder-pwa/manifest.json deleted file mode 100644 index 417559619..000000000 --- a/uniquely/flight-finder-pwa/manifest.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "short_name": "Flight Finder", - "name": "Flight Finder PWA", - "description": "A Flight Finder Progressive Web Application", - "start_url": "/?pwa", - "display": "standalone", - "theme_color": "#673ab7", - "background_color": "#ec407a", - "orientation": "portrait", - "default_locale": "fa", - "icons": [ - {"src": "/image/favicon.ico", "type": "image/x-icon", "sizes": "32x32"}, - {"src": "/image/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable"}, - {"src": "/image/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable"}, - {"src": "/image/icon-192.png", "type": "image/png", "sizes": "192x192"}, - {"src": "/image/icon-512.png", "type": "image/png", "sizes": "512x512"} - ] -} diff --git a/uniquely/flight-finder-pwa/package.json b/uniquely/flight-finder-pwa/package.json deleted file mode 100644 index 5e6c27094..000000000 --- a/uniquely/flight-finder-pwa/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@alwatr/flight-finder-pwa", - "version": "1.0.0", - "description": "Alwatr Flight Finder PWA.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "browserslist": "> 1.5%, not dead", - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "uniquely/flight-finder-pwa" - }, - "scripts": { - "b": "yarn build", - "cb": "run-s clean build", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "clean": "rm -rf dist build .tsbuildinfo", - "build_": "run-s build:ts build:es", - "build:ts": "tsc --build", - "build:es": "rm -rf dist && rollup -c", - "serve": "wds", - "watch": "run-s clean build:ts && run-p watch:ts serve", - "watch:ts": "yarn build:ts --watch --preserveWatchOutput" - } -} diff --git a/uniquely/flight-finder-pwa/robots.txt b/uniquely/flight-finder-pwa/robots.txt deleted file mode 100644 index 1f53798bb..000000000 --- a/uniquely/flight-finder-pwa/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / diff --git a/uniquely/flight-finder-pwa/rollup.config.js b/uniquely/flight-finder-pwa/rollup.config.js deleted file mode 100644 index d03adc17c..000000000 --- a/uniquely/flight-finder-pwa/rollup.config.js +++ /dev/null @@ -1,78 +0,0 @@ -import resolve from '@rollup/plugin-node-resolve'; -import terser from '@rollup/plugin-terser'; -import {copy} from '@web/rollup-plugin-copy'; -import {rollupPluginHTML} from '@web/rollup-plugin-html'; -import minifyHTML from 'rollup-plugin-minify-html-literals'; -import summary from 'rollup-plugin-summary'; -import {generateSW} from 'rollup-plugin-workbox'; - -import {workboxConfig} from './workbox.config.js'; - -function onwarn(warning) { - if (warning.code !== 'THIS_IS_UNDEFINED') { - console.error(`(!) ${warning.message}`); - } -} - -// Configure an instance of @web/rollup-plugin-html -const htmlPlugin = rollupPluginHTML({ - rootDir: './', - flattenOutput: false, - serviceWorkerPath: 'dist/sw.js', - injectServiceWorker: true, - extractAssets: true, -}); - -/** @type {import('rollup').RollupOptions} */ -const options = { - // Entry point for application build; can specify a glob to build multiple - // HTML files for non-SPA app - input: 'index.html', - onwarn, - treeshake: true, - plugins: [ - htmlPlugin, - // Resolve bare module specifiers to relative paths - resolve(), - // Minify HTML template literals - minifyHTML.default({ - failOnError: true, - }), - // Minify JS - terser({ - ecma: 2019, - module: true, - warnings: true, - format: { - comments: false, - }, - mangle: { - properties: { - regex: /^__/, - }, - }, - }), - // Print bundle summary - summary({ - showBrotliSize: true, - showGzippedSize: true, - }), - // Optional: copy any static assets to build directory - copy({ - patterns: ['image/**/*', 'l10n/**/*', 'robots.txt'], - }), - generateSW(workboxConfig, ({swDest, count, size}) => console.log('📦', swDest, '#️⃣ ', count, '🐘', size)), - ], - // Specifies two JS output configurations, modern and legacy, which the HTML plugin will - // automatically choose between; the legacy build is compiled to ES5 - // and SystemJS modules - output: { - format: 'esm', - chunkFileNames: '[name].js', - entryFileNames: '[name].js', - dir: 'dist', - }, - preserveEntrySignatures: false, -}; - -export default options; diff --git a/uniquely/flight-finder-pwa/src/alwatr-pwa.ts b/uniquely/flight-finder-pwa/src/alwatr-pwa.ts deleted file mode 100644 index a39e8f3cb..000000000 --- a/uniquely/flight-finder-pwa/src/alwatr-pwa.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {customElement, html} from '@alwatr/element'; -import {AlwatrPwaElement} from '@alwatr/pwa-helper/pwa-element.js'; - -import './component/ionic-components.js'; -import './component/page-flight-finder.js'; -import ionNormalize from './style/ionic.normalize.js'; -import ionTheming from './style/ionic.theming.js'; - -import type {RoutesConfig} from '@alwatr/router'; - - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-pwa': AlwatrPWA; - } -} - -/** - * alwatr-pwa PWA Root Element - */ -@customElement('alwatr-pwa') -export class AlwatrPWA extends AlwatrPwaElement { - static override styles = [ionNormalize, ionTheming]; - - protected _activePage = 'home'; - - protected override _routesConfig: RoutesConfig = { - routeId: super._routesConfig.routeId, - templates: { - home: () => html``, - _404: super._routesConfig.templates._404, - }, - }; -} diff --git a/uniquely/flight-finder-pwa/src/city-list.ts b/uniquely/flight-finder-pwa/src/city-list.ts deleted file mode 100644 index 0f34a9aec..000000000 --- a/uniquely/flight-finder-pwa/src/city-list.ts +++ /dev/null @@ -1,185 +0,0 @@ -export const cityList: Record = { - THR: 'تهران', - MHD: 'مشهد', - KIH: 'کیش', - IST: 'استانبول', - SYZ: 'شیراز', - SAW: 'استانبول صبیحا گوکچن', - AWZ: 'اهواز', - IFN: 'اصفهان', - NJF: 'نجف', - TEQ: 'استانبول چورلو', - BND: 'بندرعباس', - ABD: 'آبادان', - TBZ: 'تبریز', - PGU: 'عسلویه', - GSM: 'قشم', - TBS: 'تفلیس', - ZBR: 'چابهار', - SRY: 'ساری', - ZAH: 'زاهدان', - IAQ: 'بوشهر', - BGW: 'بغداد', - RAS: 'رشت', - KER: 'کرمان', - KSH: 'کرمانشاه', - AZD: 'یزد', - GZP: 'آنتالیا', - DNZ: 'آنتالیا دنیزلی', - DEF: 'دزفول', - DWC: 'دبی', - ISE: 'آنتالیا اسپارتا', - GBT: 'گرگان', - IIL: 'ایلام', - OMH: 'ارومیه', - ADU: 'اردبیل', - XBJ: 'بیرجند', - HDM: 'همدان', - GYD: 'باکو', - ADB: 'ازمیر', - ESB: 'آنکارا', - MCT: 'مسقط', - LHE: 'لاهور', - RZR: 'رامسر', - NSH: 'نوشهر', - LRR: 'لارستان', - EVN: 'ایروان', - KUL: 'کوالالامپور', - MRX: 'ماهشهر', - SDG: 'سنندج', - AFZ: 'سبزوار', - KHD: 'خرم آباد', - DMK: 'بانکوک', - PYK: 'پیام کرج تهران', - LFM: 'لامرد', - ACZ: 'زابل', - VAN: 'وان', - SHJ: 'شارجه', - SVO: 'مسکو', - PVG: 'شانگهای', - EBL: 'اربیل', - ISU: 'سلیمانیه', - GCH: 'گچساران', - LHR: 'لندن', - AKW: 'امیدیه', - SYJ: 'سیرجان', - BJB: 'بجنورد', - JWN: 'زنجان', - KBL: 'کابل', - LON: 'لندن لندن', - CQD: 'شهرکرد', - JAR: 'جهرم', - ATH: 'آتن', - KWI: 'کویت', - BXR: 'بم', - KKS: 'کاشان', - BEY: 'بیروت', - FRA: 'فرانکفورت', - IMQ: 'ماکو', - PAR: 'پاریس', - AJK: 'اراک', - CDG: 'پاریس شارل دوگول', - ORY: 'پاریس اورلی', - YES: 'یاسوج', - CAN: 'گوانگجو', - RUD: 'شاهرود', - MIL: 'میلان', - BDH: 'بندر لنگه', - ZIA: 'مسکو زوموویسکی', - DME: 'مسکو دومودیدوا', - XNH: 'ناصریه', - BOM: 'بمبئی', - DAM: 'دمشق', - DOH: 'دوحه', - BSR: 'بصره', - IHR: 'ایرانشهر', - MUC: 'مونیخ', - DEL: 'دهلی', - KHY: 'خوی', - PFQ: 'پارس آباد', - BCN: 'بارسلونا', - RJN: 'رفسنجان', - BER: 'برلین', - DUS: 'دوسلدورف', - BGY: 'میلان اوریو آل سیریو برگامو', - JYR: 'جیرفت', - ARN: 'استکهلم', - TCX: 'طبس', - AMS: 'آمستردام', - HAM: 'هامبورگ', - KHI: 'کراچی', - ECN: 'ارجان', - FCO: 'رم', - ASF: 'آستراخان', - PEK: 'پکن (بیجینگ)', - BRU: 'بروکسل', - BUS: 'باتومی', - DYU: 'دوشنبه', - ACP: 'مراغه', - GOT: 'گوتنبرگ', - ALA: 'آلماتی', - AUH: 'ابوظبی', - KLM: 'کلاله', - BEG: 'بلگراد', - ADA: 'آدنا', - HEA: 'هرات', - KYA: 'قونیه', - BJV: 'بدروم', - LED: 'سنت پترزبورگ', - AMM: 'امان', - SCO: 'اکتائو', - VAR: 'وارنا', - KZN: 'کازان', - HKT: 'پوکت', - IEV: 'کی یف ژولیانی', - VIE: 'وین', - DMM: 'دمام', - CGN: 'کلن', - MZR: 'مزار شریف', - LCA: 'لارناکا', - ISB: 'اسلام آباد', - TAS: 'تاشکند', - KDH: 'قندهار', - DLM: 'آنتالیا دالامان مارماریس', - BAH: 'بحرین', - MSQ: 'مینسک', - CPH: 'کپنهاگ', - NBO: 'نایروبی', - JSK: 'جاسک', - TXL: 'برلین تگل', - OSL: 'اسلو', - HKG: 'هنگ کنگ', - VKO: 'مسکو ونوکوا', - MXP: 'میلان مالپنسا', - JAI: 'جایپور', - KBP: 'کی یف', - TSE: 'آستانه', - SXI: 'سیری', - KHK: 'خارک', - LGW: 'لندن گتویک', - ASB: 'عشق آباد', - IKA: 'تهران امام خمینی', - DXB: 'دبی دبی', - BKK: 'بانکوک بانکوک', - AYT: 'آنتالیا آنتالیا', - BUZ: 'بوشهر بوشهر', - AEU: 'ابوموسی', - LVP: 'لاوان', - SZX: 'شنژن بن', - SIN: 'سنگاپور', - YYZ: 'تورنتو', - YMQ: 'مونترال', - BNX: 'بانیا لوکا', - SLL: 'صلاله', - YKO: 'حکاری یوکسک‌ اووا', - QMJ: 'مسجد سلیمان', - SNX: 'سمنان', - OHS: 'صحار', - TZX: 'ترابزون', - FRU: 'بیشکک', - CMB: 'کلمبو', - BHK: 'بخارا', - NAJ: 'نخجوان', - CKT: 'سرخس', - RMI: 'ریمینی', -} as const; diff --git a/uniquely/flight-finder-pwa/src/component/ionic-components.ts b/uniquely/flight-finder-pwa/src/component/ionic-components.ts deleted file mode 100644 index 6f5299d51..000000000 --- a/uniquely/flight-finder-pwa/src/component/ionic-components.ts +++ /dev/null @@ -1,97 +0,0 @@ -// import '@ionic/core/dist/types/components'; -import {initialize} from '@ionic/core/components'; -import {defineCustomElement as ionAlert} from '@ionic/core/components/ion-alert.js'; -import {defineCustomElement as ionApp} from '@ionic/core/components/ion-app.js'; -import {defineCustomElement as ionAvatar} from '@ionic/core/components/ion-avatar.js'; -import {defineCustomElement as ionBackdrop} from '@ionic/core/components/ion-backdrop.js'; -import {defineCustomElement as ionButton} from '@ionic/core/components/ion-button.js'; -import {defineCustomElement as ionButtons} from '@ionic/core/components/ion-buttons.js'; -import {defineCustomElement as ionCardContent} from '@ionic/core/components/ion-card-content.js'; -import {defineCustomElement as ionCardHeader} from '@ionic/core/components/ion-card-header.js'; -import {defineCustomElement as ionCardSubtitle} from '@ionic/core/components/ion-card-subtitle.js'; -import {defineCustomElement as ionCardTitle} from '@ionic/core/components/ion-card-title.js'; -import {defineCustomElement as ionCard} from '@ionic/core/components/ion-card.js'; -import {defineCustomElement as ionCol} from '@ionic/core/components/ion-col.js'; -import {defineCustomElement as ionContent} from '@ionic/core/components/ion-content.js'; -import {defineCustomElement as ionFabButton} from '@ionic/core/components/ion-fab-button.js'; -import {defineCustomElement as ionFab} from '@ionic/core/components/ion-fab.js'; -import {defineCustomElement as ionFooter} from '@ionic/core/components/ion-footer.js'; -import {defineCustomElement as ionGrid} from '@ionic/core/components/ion-grid.js'; -import {defineCustomElement as ionHeader} from '@ionic/core/components/ion-header.js'; -import {defineCustomElement as ionInput} from '@ionic/core/components/ion-input.js'; -import {defineCustomElement as ionItemOption} from '@ionic/core/components/ion-item-option.js'; -import {defineCustomElement as ionItemOptions} from '@ionic/core/components/ion-item-options.js'; -import {defineCustomElement as ionItemSliding} from '@ionic/core/components/ion-item-sliding.js'; -import {defineCustomElement as ionItem} from '@ionic/core/components/ion-item.js'; -import {defineCustomElement as ionLabel} from '@ionic/core/components/ion-label.js'; -import {defineCustomElement as ionListHeader} from '@ionic/core/components/ion-list-header.js'; -import {defineCustomElement as ionList} from '@ionic/core/components/ion-list.js'; -import {defineCustomElement as ionLoading} from '@ionic/core/components/ion-loading.js'; -import {defineCustomElement as ionModal} from '@ionic/core/components/ion-modal.js'; -import {defineCustomElement as ionNote} from '@ionic/core/components/ion-note.js'; -import {defineCustomElement as ionRadioGroup} from '@ionic/core/components/ion-radio-group.js'; -import {defineCustomElement as ionRadio} from '@ionic/core/components/ion-radio.js'; -import {defineCustomElement as ionRow} from '@ionic/core/components/ion-row.js'; -import {defineCustomElement as ionSearchbar} from '@ionic/core/components/ion-searchbar.js'; -import {defineCustomElement as ionSegmentButton} from '@ionic/core/components/ion-segment-button.js'; -import {defineCustomElement as ionSegment} from '@ionic/core/components/ion-segment.js'; -import {defineCustomElement as ionSelectOption} from '@ionic/core/components/ion-select-option.js'; -import {defineCustomElement as ionSelect} from '@ionic/core/components/ion-select.js'; -import {defineCustomElement as ionSkeletonText} from '@ionic/core/components/ion-skeleton-text.js'; -import {defineCustomElement as ionSpinner} from '@ionic/core/components/ion-spinner.js'; -import {defineCustomElement as ionTabBar} from '@ionic/core/components/ion-tab-bar.js'; -import {defineCustomElement as ionTabButton} from '@ionic/core/components/ion-tab-button.js'; -import {defineCustomElement as ionText} from '@ionic/core/components/ion-text.js'; -import {defineCustomElement as ionThumbnail} from '@ionic/core/components/ion-thumbnail.js'; -import {defineCustomElement as ionTitle} from '@ionic/core/components/ion-title.js'; -import {defineCustomElement as ionToast} from '@ionic/core/components/ion-toast.js'; -import {defineCustomElement as ionToolbar} from '@ionic/core/components/ion-toolbar.js'; - -initialize(); - -ionApp(); -ionAlert(); -ionAvatar(); -ionBackdrop(); -ionButton(); -ionButtons(); -ionCard(); -ionCardContent(); -ionCardHeader(); -ionCardSubtitle(); -ionCardTitle(); -ionCol(); -ionContent(); -ionFooter(); -ionFab(); -ionFabButton(); -ionGrid(); -ionHeader(); -ionInput(); -ionItem(); -ionItemSliding(); -ionItemOptions(); -ionItemOption(); -ionLabel(); -ionLoading(); -ionList(); -ionListHeader(); -ionModal(); -ionNote(); -ionRadio(); -ionRadioGroup(); -ionRow(); -ionSearchbar(); -ionSegment(); -ionSegmentButton(); -ionSkeletonText(); -ionSpinner(); -ionTabBar(); -ionTabButton(); -ionText(); -ionThumbnail(); -ionTitle(); -ionToolbar(); -ionToast(); -ionSelect(); -ionSelectOption(); diff --git a/uniquely/flight-finder-pwa/src/component/job-add-form.ts b/uniquely/flight-finder-pwa/src/component/job-add-form.ts deleted file mode 100644 index f9030c2d1..000000000 --- a/uniquely/flight-finder-pwa/src/component/job-add-form.ts +++ /dev/null @@ -1,244 +0,0 @@ -import {customElement, css, html} from '@alwatr/element'; -import {message, localeContextConsumer, number} from '@alwatr/i18n'; -import {eventTrigger} from '@alwatr/signal'; - -import './ionic-components'; -import {cityList} from '../city-list.js'; -import ionNormalize from '../style/ionic.normalize.js'; -import ionTheming from '../style/ionic.theming.js'; - -import type {NewJobDetail} from '../type.js'; -import type {InputCustomEvent, SelectCustomEvent} from '@ionic/core'; - -declare global { - interface HTMLElementTagNameMap { - 'job-add-form': JobAddForm; - } -} - -@customElement('job-add-form') -export class JobAddForm extends SignalMixin(AlwatrBaseElement) { - static override styles = [ - ionNormalize, - ionTheming, - css` - ion-card.form { - --ion-item-background: var(--ion-color-primary-contrast); - } - ion-card.form ion-item { - margin: 0 0.8em 0.6em; - } - ion-card.form ion-button.form-btn { - margin-left: 1em; - margin-right: 1em; - } - ion-card.form .form__input-row { - display: flex; - } - ion-card.form .form__input-row ion-item { - flex: 1 1 0; - } - ion-card.form .form__input-row ion-item::part(native) { - height: 100%; - } - ion-card.form .form__input-row ion-item:last-child { - margin-right: 0; - } - `, - ]; - - static jobAddEventTrigger = eventTrigger.bind('job-add'); - - static cityListTemplate = Object.keys(cityList).map( - (city) => html`${city} - ${cityList[city]}`, - ); - static seatListTemplate = Array.from(Array(9).keys()).map((seatNumber) => { - return html` - ${seatNumber.toLocaleString('fa-IR')} صندلی - `; - }); - static dayListTemplate = Array.from(Array(31).keys()).map((dayNumber) => { - return html` ${dayNumber.toLocaleString('fa-IR')} `; - }); - static monthListTemplate = Array.from(Array(12).keys()).map((monthNumber) => { - const month = new Date(0, monthNumber + 3).toLocaleDateString('fa-IR', {month: 'long'}); - - return html`${month}`; - }); - static hourListTemplate = Array.from(Array(24).keys()).map((hourNumber) => { - return html` ${hourNumber.toLocaleString('fa-IR')} `; - }); - private __newJob: Partial = { - seatCount: 1, - }; - - override render(): unknown { - this._logger.logMethod('render'); - return html` - - - افزودن درخواست - - - - - - - - - - - - درخواست جدید - - - -
    - - ${message('origin')} - - ${JobAddForm.cityListTemplate} - - - - ${message('destination')} - - ${JobAddForm.cityListTemplate} - - -
    - - ${message('description')} - - -
    - - ${message('day')} - - ${JobAddForm.dayListTemplate} - - - - ${message('month')} - - ${JobAddForm.monthListTemplate} - - -
    - - ${message('seat_count')} - - ${JobAddForm.seatListTemplate} - - -
    - - ${message('from_hour')} - - ${JobAddForm.hourListTemplate} - - - - ${message('to_hour')} - - ${JobAddForm.hourListTemplate} - - -
    - - ${message('maximum_price')} - - ${this.__maxPriceHelper} - - - ${message('send')} - -
    -
    -
    - `; - } - - private __submit(event: PointerEvent): void { - this._logger.logMethodArgs('__submit', { - newJob: this.__newJob, - event, - }); - - let currentYear = +new Date().toLocaleDateString(localeContextConsumer.getValue()?.code, { - numberingSystem: 'latn', - year: 'numeric', - }); - - const currentMonth = +new Date().toLocaleDateString(localeContextConsumer.getValue()?.code, { - numberingSystem: 'latn', - month: 'numeric', - }); - - if (this.__newJob.month as number < currentMonth) currentYear += 1; - - JobAddForm.jobAddEventTrigger.dispatch({ - detail: { - destination: this.__newJob.destination as string, - origin: this.__newJob.origin as string, - maxHour: this.__newJob.maxHour ?? null, - minHour: this.__newJob.minHour ?? null, - maxPrice: this.__newJob.maxPrice ?? null, - seatCount: this.__newJob.seatCount ?? 1, - description: this.__newJob.description ?? '', - date: `${currentYear}/${this.__newJob.month}/${this.__newJob.day}`, - }, - }); - - this.__close(); - } - private __inputChanged(event: InputCustomEvent | SelectCustomEvent): void { - const name = event.target.name as keyof NewJobDetail | undefined; - const value = event.detail.value; - - this._logger.logMethodArgs('__inputChanged', {name, value}); - - if (name == null) return; - - this.requestUpdate(); - - if (value == null || (typeof value === 'string' && value.trim() === '')) { - delete this.__newJob[name]; - return; - } - - if (name === 'origin' || name === 'destination' || name === 'description') { - this.__newJob[name] = value as string; - } - else { - this.__newJob[name] = +value; - } - } - private __close(): void { - this.parentElement?.dispatchEvent(new Event('close')); - } - - private get __maxPriceHelper(): string { - const maxPrice = number(this.__newJob.maxPrice ?? 0); - - return maxPrice + ' ' + message('config_currency'); - } - private get __formValidate(): boolean { - return Object.keys(this.__newJob).length >= 4; - } -} diff --git a/uniquely/flight-finder-pwa/src/component/job-item.ts b/uniquely/flight-finder-pwa/src/component/job-item.ts deleted file mode 100644 index cf8b6cf2b..000000000 --- a/uniquely/flight-finder-pwa/src/component/job-item.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { - customElement, - property, - query, - when, - css, - html, - nothing, - SignalMixin, - AlwatrBaseElement, - type TemplateResult, -} from '@alwatr/element'; -import {message, number} from '@alwatr/i18n'; -import '@alwatr/icon'; -import {eventTrigger} from '@alwatr/signal'; - -import './ionic-components.js'; -import {cityList} from '../city-list.js'; -import ionNormalize from '../style/ionic.normalize.js'; -import ionTheming from '../style/ionic.theming.js'; - -import type {Job, JobResult} from '@alwatr/type/flight-finder.js'; - -declare global { - interface HTMLElementTagNameMap { - 'job-item': JobItem; - } -} - -@customElement('job-item') -export class JobItem extends SignalMixin(AlwatrBaseElement) { - static override styles = [ - ionNormalize, - ionTheming, - css` - :host { - --ion-item-background: var(--ion-color-primary-contrast); - } - * { - user-select: none; - } - - .job::part(native) { - align-items: flex-end; - } - .job ion-label { - display: flex !important; - flex-direction: column; - justify-content: flex-end; - gap: 0.1em; - margin: 0; - padding: 0.8em 0; - } - .job ion-label[slot='start'] { - margin-inline-start: 0.5em; - } - .job ion-label[slot='end'] { - margin-inline-end: 0.5em; - height: 100%; - } - .job ion-label[slot='end'] * { - text-align: end; - justify-content: flex-end; - } - .job .job__title { - font-size: 1em; - display: flex; - align-items: center; - gap: 8px; - } - .job .job__title .job__title__arrow-icon { - font-size: 1.3em; - color: var(--ion-color-base); - } - .job .job__subtitle.job__subtitle-founded { - margin-bottom: auto; - } - .job .job__subtitle { - font-size: 0.9em; - display: flex; - align-items: center; - gap: 6px; - color: var(--ion-color-step-600); - } - .job .job__subtitle .job__subtitle-price { - color: var(--ion-color-base); - } - - ion-item-options { - -ms-flex-pack: start; - justify-content: flex-start; - } - `, - ]; - - @property({attribute: false, type: Object}) job?: Job; - @query('ion-item-sliding') private __ionItemSliding?: HTMLElement; - - static jobDeleteEventTrigger = eventTrigger.bind('job-delete'); - - override render(): unknown { - this._logger.logMethod('render'); - if (this.job == null || this.job.detail == null) return nothing; - - return html` - - - - ${this.__renderTitle(cityList[this.job.detail.origin], cityList[this.job.detail.destination])} - ${this.__renderSubtitle(this.job.detail.date, this.job.detail.minHour, this.job.detail.maxHour)} - ${this.__renderDescription(this.job.detail.description)} - - ${this.__renderFoundList(this.job.resultList)} - - - - - - - - - - `; - } - - private __renderTitle(origin: string, destination: string): TemplateResult { - return html` -
    - ${origin} - - ${destination} -
    - `; - } - private __renderSubtitle(date: string, minHour: number | null, maxHour: number | null): TemplateResult { - return html` -
    - ${date} -
    - ${when( - minHour != null && maxHour != null, - () => html` -
    - از ${minHour} تا ${maxHour} -
    - `, - )} - `; - } - private __renderFoundList(resultList: Array): TemplateResult { - if (resultList.length !== 0) { - const lowestPrice = Math.min(...resultList.map((result) => result.price)); - return html` -
    - ${number(resultList.length)} - ${message('flight')} -
    -
    - ${number(lowestPrice)} - ${message('config_currency')} -
    - `; - } - return html` ${message('not_found')} `; - } - private __renderDescription(description: string): TemplateResult | typeof nothing { - if (description.trim() == '') return nothing; - - return html` ${description} `; - } - - private __delete(): void { - if (this.job?.id == null) { - this._logger.incident('__delete', 'null_job_id', 'Job ID in null.'); - return; - } - - JobItem.jobDeleteEventTrigger.dispatch(this.job.id); - } - private async __openSliding(): Promise { - if (this.__ionItemSliding == null) return; - - const itemSliding = this.__ionItemSliding as HTMLIonItemSlidingElement; - - if ((await itemSliding.getSlidingRatio()) > 0) { - await itemSliding.closeOpened(); - } - else { - await itemSliding.open('start'); - } - } -} diff --git a/uniquely/flight-finder-pwa/src/component/page-flight-finder.ts b/uniquely/flight-finder-pwa/src/component/page-flight-finder.ts deleted file mode 100644 index 04bff72c3..000000000 --- a/uniquely/flight-finder-pwa/src/component/page-flight-finder.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { - map, - customElement, - query, - css, - html, - SignalMixin, - AlwatrBaseElement, - type TemplateResult, -} from '@alwatr/element'; -import {message, number} from '@alwatr/i18n'; -import {requestableContextConsumer} from '@alwatr/signal'; -import {modalController} from '@ionic/core'; - -import './job-add-form.js'; -import './job-item.js'; -import ionNormalize from '../style/ionic.normalize.js'; -import ionTheming from '../style/ionic.theming.js'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {Job} from '@alwatr/type/flight-finder.js'; - - -declare global { - interface HTMLElementTagNameMap { - 'page-flight-finder': PageFlightFinder; - } -} - -@customElement('page-flight-finder') -export class PageFlightFinder extends SignalMixin(AlwatrBaseElement) { - static override styles = [ - ionNormalize, - ionTheming, - css` - :host { - display: flex; - flex-direction: column; - } - ion-card { - margin: 0.8em 1em; - } - ion-card.job__list { - --ion-item-background: var(--ion-color-primary-contrast); - } - ion-card.job__list .nothing { - display: flex; - justify-content: center; - } - - #timer { - display: inline-block; - min-width: 23px; - } - - .version { - direction: ltr; - margin: 0 16px 8px; - font-size: 0.7em; - } - `, - ]; - - static jobDocumentStorageContextConsumer = - requestableContextConsumer.bind, null>('job-document-storage'); - - private __jobList?: Array; - private __lastUpdate = 0; - @query('#timer') protected _timer?: HTMLSpanElement; - - constructor() { - super(); - this.__updateTimer = this.__updateTimer.bind(this); - } - - private __updateTimer(): void { - const timer = this._timer; - if (timer == null || this.__lastUpdate === 0) return; - - const time = Math.floor((Date.now() - this.__lastUpdate) / 6_000) / 10; - - timer.innerText = number(time); - } - - override connectedCallback(): void { - super.connectedCallback(); - PageFlightFinder.jobDocumentStorageContextConsumer.subscribe((jobList) => { - this.__jobList = Object.values(jobList.data); - this.__lastUpdate = jobList.meta.lastUpdated; - this.requestUpdate(); - }); - - setInterval(this.__updateTimer, 3_000); - } - override render(): unknown { - this._logger.logMethod('render'); - return html` - - - ${message('flight_finder')} - - - - - ${this.__renderAirlineListCard()} - - - - - - - -
    v${_ALWATR_VERSION_}
    -
    - `; - } - - private __renderAirlineListCard(): TemplateResult { - return html` - - - ${message('search_list')} - - ${message('minutes_ago')} - - - - ${map(this.__jobList, (airline) => html``)} - - - `; - } - - private async __addJobModal(): Promise { - const modal = await modalController.create({ - component: 'job-add-form', - }); - - modal.addEventListener('close', () => { - modal.dismiss(); - }); - - await modal.present(); - } -} diff --git a/uniquely/flight-finder-pwa/src/director/index.ts b/uniquely/flight-finder-pwa/src/director/index.ts deleted file mode 100644 index aab96cb94..000000000 --- a/uniquely/flight-finder-pwa/src/director/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import './job-add.js'; -import './job-delete.js'; -import './job-document-storage.js'; -import './toast.js'; diff --git a/uniquely/flight-finder-pwa/src/director/job-add.ts b/uniquely/flight-finder-pwa/src/director/job-add.ts deleted file mode 100644 index 90dfbf079..000000000 --- a/uniquely/flight-finder-pwa/src/director/job-add.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {type AlwatrServiceResponse, fetch} from '@alwatr/fetch'; -import {commandTrigger, eventListener, requestableContextConsumer} from '@alwatr/signal'; - -import type {Job} from '@alwatr/type/flight-finder.js'; - -eventListener.subscribe('job-add', async (job) => { - try { - const response = await fetch({ - url: window.appConfig?.api ? window.appConfig.api + '/job' : '/job', - token: window.appConfig?.token, - method: 'PUT', - bodyJson: job, - }); - - if (response.ok !== true) { - throw new Error('fetch_failed'); - } - - const responseData = (await response.json()) as AlwatrServiceResponse; - - if (responseData.ok !== true) { - throw new Error('fetch_failed'); - } - } - catch (error) { - commandTrigger.request('toast', { - message: 'عملیات با خطا رو به رو شد', - }); - } - - requestableContextConsumer.request('job-document-storage', null); -}); diff --git a/uniquely/flight-finder-pwa/src/director/job-delete.ts b/uniquely/flight-finder-pwa/src/director/job-delete.ts deleted file mode 100644 index 4c67e918d..000000000 --- a/uniquely/flight-finder-pwa/src/director/job-delete.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {type AlwatrServiceResponse, fetch} from '@alwatr/fetch'; -import {commandTrigger, eventListener, requestableContextConsumer} from '@alwatr/signal'; - -eventListener.subscribe<{id: string}>('job-delete', async (detail) => { - try { - const response = await fetch({ - url: window.appConfig?.api ? window.appConfig.api + '/job' : '/job', - token: window.appConfig?.token, - method: 'DELETE', - queryParameters: {id: detail.id}, - }); - - if (response.ok !== true) { - throw new Error('fetch_failed'); - } - - const responseData = (await response.json()) as AlwatrServiceResponse; - - if (responseData.ok !== true) { - throw new Error('fetch_failed'); - } - } - catch (error) { - commandTrigger.request('toast', { - message: 'عملیات با خطا رو به رو شد', - }); - } - - requestableContextConsumer.request('job-delete', null); -}); diff --git a/uniquely/flight-finder-pwa/src/director/job-document-storage.ts b/uniquely/flight-finder-pwa/src/director/job-document-storage.ts deleted file mode 100644 index a3373d4ab..000000000 --- a/uniquely/flight-finder-pwa/src/director/job-document-storage.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {type CacheStrategy, serviceRequest} from '@alwatr/fetch'; -import {createLogger} from '@alwatr/logger'; -import {commandTrigger, requestableContextConsumer, requestableContextProvider} from '@alwatr/signal'; - -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {Job} from '@alwatr/type/flight-finder.js'; - -export const logger = createLogger('[director/job-document-storage]'); - -async function requestJobStorage(cacheStrategy: CacheStrategy): Promise | void> { - logger.logMethod('jobListProvider'); - - try { - return (> await serviceRequest({ - url: window.appConfig?.api ? window.appConfig.api + '/job' : '/job', - token: window.appConfig?.token, - cache: 'no-cache', - cacheStrategy, - })); - } - catch (error) { - if ((error as Error).message !== 'fetch_cache_not_found') { - logger.error('jobListProvider', 'fetch_failed', error); - commandTrigger.request('toast', { - message: 'عملیات با خطا رو به رو شد', - }); - return; - } - } -} - -requestableContextProvider.setProvider, null>('job-document-storage', () => { - return requestJobStorage('network_first'); -}); - -requestJobStorage('cache_only').then(() => requestJobStorage('network_first')); - -setInterval(() => requestableContextConsumer.request('job-document-storage', null), 60_000); diff --git a/uniquely/flight-finder-pwa/src/director/toast.ts b/uniquely/flight-finder-pwa/src/director/toast.ts deleted file mode 100644 index 1edc6be50..000000000 --- a/uniquely/flight-finder-pwa/src/director/toast.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {commandHandler} from '@alwatr/signal'; -import {toastController} from '@ionic/core'; - -commandHandler.define<{message: string}, Record>('toast', async (ToastOptions) => { - const toast = await toastController.create({ - animated: true, - position: 'bottom', - duration: 5_000, - ...ToastOptions, - }); - - await toast.present(); - - return {}; -}); diff --git a/uniquely/flight-finder-pwa/src/style/global.css b/uniquely/flight-finder-pwa/src/style/global.css deleted file mode 100644 index 0a388a9f3..000000000 --- a/uniquely/flight-finder-pwa/src/style/global.css +++ /dev/null @@ -1,195 +0,0 @@ -* { - box-sizing: border-box; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; -} - -:root { - --ion-background-color: #eceff1; - --ion-background-color-rgb: 236, 239, 241; - - --ion-text-color: #010a0e; - --ion-text-color-rgb: 1, 10, 14; - - --ion-color-step-50: #e0e4e6; - --ion-color-step-100: #d5d8da; - --ion-color-step-150: #c9cdcf; - --ion-color-step-200: #bdc1c4; - --ion-color-step-250: #b1b6b8; - --ion-color-step-300: #a6aaad; - --ion-color-step-350: #9a9fa2; - --ion-color-step-400: #8e9396; - --ion-color-step-450: #82888b; - --ion-color-step-500: #777d80; - --ion-color-step-550: #6b7174; - --ion-color-step-600: #5f6669; - --ion-color-step-650: #535a5d; - --ion-color-step-700: #484f52; - --ion-color-step-750: #3c4347; - --ion-color-step-800: #30383b; - --ion-color-step-850: #242c30; - --ion-color-step-900: #182125; - --ion-color-step-950: #0d1519; - - --ion-color-primary: #7e57c2; - --ion-color-primary-rgb: 126, 87, 194; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255, 255, 255; - --ion-color-primary-shade: #6f4dab; - --ion-color-primary-tint: #8b68c8; - - --ion-color-secondary: #1e88e5; - --ion-color-secondary-rgb: 30, 136, 229; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255, 255, 255; - --ion-color-secondary-shade: #1a78ca; - --ion-color-secondary-tint: #3594e8; - - --ion-color-tertiary: #c2185b; - --ion-color-tertiary-rgb: 194, 24, 91; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255, 255, 255; - --ion-color-tertiary-shade: #ab1550; - --ion-color-tertiary-tint: #c82f6b; - - --ion-color-success: #43a047; - --ion-color-success-rgb: 67, 160, 71; - --ion-color-success-contrast: #ffffff; - --ion-color-success-contrast-rgb: 255, 255, 255; - --ion-color-success-shade: #3b8d3e; - --ion-color-success-tint: #56aa59; - - --ion-color-warning: #ffa000; - --ion-color-warning-rgb: 255, 160, 0; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0, 0, 0; - --ion-color-warning-shade: #e08d00; - --ion-color-warning-tint: #ffaa1a; - - --ion-color-danger: #e53935; - --ion-color-danger-rgb: 229, 57, 53; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255, 255, 255; - --ion-color-danger-shade: #ca322f; - --ion-color-danger-tint: #e84d49; - - --ion-color-medium: #757575; - --ion-color-medium-rgb: 117, 117, 117; - --ion-color-medium-contrast: #ffffff; - --ion-color-medium-contrast-rgb: 255, 255, 255; - --ion-color-medium-shade: #676767; - --ion-color-medium-tint: #838383; - - --ion-color-light: #eeeeee; - --ion-color-light-rgb: 238, 238, 238; - --ion-color-light-contrast: #000000; - --ion-color-light-contrast-rgb: 0, 0, 0; - --ion-color-light-shade: #d1d1d1; - --ion-color-light-tint: #f0f0f0; - - --ion-card-background: var(--ion-color-primary-contrast); - --ion-card-background-rgb: var(--ion-color-primary-contrast-rgb); -} - -.noscript { - text-align: center; - font-size: 2rem; - padding: 2em 1em; -} - -.noscript p { - margin: 0.5em 0; -} - -body.backdrop-no-scroll { - overflow: hidden; -} - -body { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - position: fixed; - width: 100%; - max-width: 100%; - height: 100%; - max-height: 100%; - transform: translateZ(0); - text-rendering: optimizeLegibility; - overflow: hidden; - touch-action: manipulation; - -webkit-user-drag: none; - -ms-content-zooming: none; - word-wrap: break-word; - overscroll-behavior-y: none; - text-size-adjust: none; - background-color: var(--ion-background-color, #1111); - margin: 0; - padding: 0; -} - -html { - width: 100%; - height: 100%; - text-size-adjust: 100%; - font-family: var(--ion-font-family); -} - -html.ion-ce body { - display: block; -} - -html.plt-pwa { - height: 100vh; -} - -html.plt-ios.plt-hybrid, -html.plt-ios.plt-pwa { - --ion-statusbar-padding: 20px; -} - -.ion-page { - left: 0; - right: 0; - top: 0; - bottom: 0; - display: flex; - position: absolute; - flex-direction: column; - justify-content: space-between; - contain: layout size style; - overflow: hidden; - z-index: 0; -} - -@supports (padding-top: 20px) { - html { - --ion-safe-area-top: var(--ion-statusbar-padding); - } -} - -@supports (padding-top: constant(safe-area-inset-top)) { - html { - --ion-safe-area-top: constant(safe-area-inset-top); - --ion-safe-area-bottom: constant(safe-area-inset-bottom); - --ion-safe-area-left: constant(safe-area-inset-left); - --ion-safe-area-right: constant(safe-area-inset-right); - } -} - -@supports (padding-top: env(safe-area-inset-top)) { - html { - --ion-safe-area-top: env(safe-area-inset-top); - --ion-safe-area-bottom: env(safe-area-inset-bottom); - --ion-safe-area-left: env(safe-area-inset-left); - --ion-safe-area-right: env(safe-area-inset-right); - } -} - -ion-alert *, -ion-popover * { - font-family: var(--ion-font-family) !important; -} -ion-popover { - --max-height: 208px; - --backdrop-opacity: 1; -} diff --git a/uniquely/flight-finder-pwa/src/style/ionic.normalize.ts b/uniquely/flight-finder-pwa/src/style/ionic.normalize.ts deleted file mode 100644 index 4c12e4133..000000000 --- a/uniquely/flight-finder-pwa/src/style/ionic.normalize.ts +++ /dev/null @@ -1,97 +0,0 @@ -import {css} from '@alwatr/element'; - -const reset = css` - .ion-page { - left: 0; - right: 0; - top: 0; - bottom: 0; - display: flex; - position: absolute; - flex-direction: column; - justify-content: space-between; - contain: layout size style; - overflow: hidden; - z-index: 0; - } - - .ion-page-hidden, - [hidden], - ion-action-sheet-controller, - ion-alert-controller, - ion-loading-controller, - ion-menu-controller, - ion-modal-controller, - ion-nav-controller, - ion-picker-controller, - ion-popover-controller, - ion-route, - ion-route-redirect, - ion-router, - ion-select-option, - ion-toast-controller { - display: none !important; - } - - .ion-page-invisible { - opacity: 0; - } - - .can-go-back > ion-header ion-back-button { - display: block; - } - - ion-card-header.ion-color .ion-inherit-color, - ion-card.ion-color .ion-inherit-color { - color: inherit; - } - - ion-accordion-group.accordion-group-expand-inset > ion-accordion:first-of-type { - border-top-left-radius: 8px; - border-top-right-radius: 8px; - } - - ion-accordion-group.accordion-group-expand-inset > ion-accordion:last-of-type { - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - } - - ion-accordion-group > ion-accordion:last-of-type ion-item[slot='header'] { - --border-width: 0px; - } - - ion-accordion.accordion-animated > [slot='header'] .ion-accordion-toggle-icon { - transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); - } - - @media (prefers-reduced-motion: reduce) { - ion-accordion .ion-accordion-toggle-icon { - transition: none !important; - } - } - - ion-accordion.accordion-expanded > [slot='header'] .ion-accordion-toggle-icon, - ion-accordion.accordion-expanding > [slot='header'] .ion-accordion-toggle-icon { - transform: rotate(180deg); - } - - ion-accordion-group.accordion-group-expand-inset.md > ion-accordion.accordion-previous ion-item[slot='header'] { - --border-width: 0px; - --inner-border-width: 0px; - } - - ion-accordion-group.accordion-group-expand-inset.md > ion-accordion.accordion-expanded:first-of-type, - ion-accordion-group.accordion-group-expand-inset.md > ion-accordion.accordion-expanding:first-of-type { - margin-top: 0; - } - - ion-input input::-webkit-date-and-time-value { - text-align: start; - } - - alwatr-icon { - font-size: 24px; - } -`; - -export default reset; diff --git a/uniquely/flight-finder-pwa/src/style/ionic.theming.ts b/uniquely/flight-finder-pwa/src/style/ionic.theming.ts deleted file mode 100644 index fc5cf3998..000000000 --- a/uniquely/flight-finder-pwa/src/style/ionic.theming.ts +++ /dev/null @@ -1,86 +0,0 @@ -import {css} from '@alwatr/element'; - -const theming = css` - .ion-color-primary { - --ion-color-base: var(--ion-color-primary, #3880ff) !important; - --ion-color-base-rgb: var(--ion-color-primary-rgb, 56, 128, 255) !important; - --ion-color-contrast: var(--ion-color-primary-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-primary-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-primary-shade, #3171e0) !important; - --ion-color-tint: var(--ion-color-primary-tint, #4c8dff) !important; - } - - .ion-color-secondary { - --ion-color-base: var(--ion-color-secondary, #3dc2ff) !important; - --ion-color-base-rgb: var(--ion-color-secondary-rgb, 61, 194, 255) !important; - --ion-color-contrast: var(--ion-color-secondary-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-secondary-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-secondary-shade, #36abe0) !important; - --ion-color-tint: var(--ion-color-secondary-tint, #50c8ff) !important; - } - - .ion-color-tertiary { - --ion-color-base: var(--ion-color-tertiary, #5260ff) !important; - --ion-color-base-rgb: var(--ion-color-tertiary-rgb, 82, 96, 255) !important; - --ion-color-contrast: var(--ion-color-tertiary-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-tertiary-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-tertiary-shade, #4854e0) !important; - --ion-color-tint: var(--ion-color-tertiary-tint, #6370ff) !important; - } - - .ion-color-success { - --ion-color-base: var(--ion-color-success, #2dd36f) !important; - --ion-color-base-rgb: var(--ion-color-success-rgb, 45, 211, 111) !important; - --ion-color-contrast: var(--ion-color-success-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-success-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-success-shade, #28ba62) !important; - --ion-color-tint: var(--ion-color-success-tint, #42d77d) !important; - } - - .ion-color-warning { - --ion-color-base: var(--ion-color-warning, #ffc409) !important; - --ion-color-base-rgb: var(--ion-color-warning-rgb, 255, 196, 9) !important; - --ion-color-contrast: var(--ion-color-warning-contrast, #000) !important; - --ion-color-contrast-rgb: var(--ion-color-warning-contrast-rgb, 0, 0, 0) !important; - --ion-color-shade: var(--ion-color-warning-shade, #e0ac08) !important; - --ion-color-tint: var(--ion-color-warning-tint, #ffca22) !important; - } - - .ion-color-danger { - --ion-color-base: var(--ion-color-danger, #eb445a) !important; - --ion-color-base-rgb: var(--ion-color-danger-rgb, 235, 68, 90) !important; - --ion-color-contrast: var(--ion-color-danger-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-danger-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-danger-shade, #cf3c4f) !important; - --ion-color-tint: var(--ion-color-danger-tint, #ed576b) !important; - } - - .ion-color-light { - --ion-color-base: var(--ion-color-light, #f4f5f8) !important; - --ion-color-base-rgb: var(--ion-color-light-rgb, 244, 245, 248) !important; - --ion-color-contrast: var(--ion-color-light-contrast, #000) !important; - --ion-color-contrast-rgb: var(--ion-color-light-contrast-rgb, 0, 0, 0) !important; - --ion-color-shade: var(--ion-color-light-shade, #d7d8da) !important; - --ion-color-tint: var(--ion-color-light-tint, #f5f6f9) !important; - } - - .ion-color-medium { - --ion-color-base: var(--ion-color-medium, #92949c) !important; - --ion-color-base-rgb: var(--ion-color-medium-rgb, 146, 148, 156) !important; - --ion-color-contrast: var(--ion-color-medium-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-medium-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-medium-shade, #808289) !important; - --ion-color-tint: var(--ion-color-medium-tint, #9d9fa6) !important; - } - - .ion-color-dark { - --ion-color-base: var(--ion-color-dark, #222428) !important; - --ion-color-base-rgb: var(--ion-color-dark-rgb, 34, 36, 40) !important; - --ion-color-contrast: var(--ion-color-dark-contrast, #fff) !important; - --ion-color-contrast-rgb: var(--ion-color-dark-contrast-rgb, 255, 255, 255) !important; - --ion-color-shade: var(--ion-color-dark-shade, #1e2023) !important; - --ion-color-tint: var(--ion-color-dark-tint, #383a3e) !important; - } -`; - -export default theming; diff --git a/uniquely/flight-finder-pwa/src/type.ts b/uniquely/flight-finder-pwa/src/type.ts deleted file mode 100644 index 2e9cd6358..000000000 --- a/uniquely/flight-finder-pwa/src/type.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type {JobDetail} from '@alwatr/type/flight-finder.js'; - -declare global { - // eslint-disable-next-line no-var - var appConfig: Record | undefined; -} - -export type NewJobDetail = { - month: number; - day: number; -} & Omit; diff --git a/uniquely/flight-finder-pwa/tsconfig.json b/uniquely/flight-finder-pwa/tsconfig.json deleted file mode 100644 index 633875240..000000000 --- a/uniquely/flight-finder-pwa/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - "rootDir": "src", - "outDir": "build", - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ] - }, - - "include": ["src/**/*.ts"], - "exclude": [], - "references": [ - {"path": "../../ui/element"}, - {"path": "../../ui/icon"}, - {"path": "../../core/fetch"}, - {"path": "../../core/i18n"}, - {"path": "../../core/type"}, - {"path": "../../core/logger"}, - {"path": "../../core/router"}, - {"path": "../../core/signal"} - ] -} diff --git a/uniquely/flight-finder-pwa/web-dev-server.config.js b/uniquely/flight-finder-pwa/web-dev-server.config.js deleted file mode 100644 index 199e175a1..000000000 --- a/uniquely/flight-finder-pwa/web-dev-server.config.js +++ /dev/null @@ -1,19 +0,0 @@ -// https://modern-web.dev/docs/dev-server/cli-and-configuration/#configuration-file -/** @type {import('@web/dev-server').DevServerConfig} */ -export default { - hostname: '0.0.0.0', - port: 8080, - open: true, - watch: true, - // appIndex: 'index.html', - nodeResolve: { - exportConditions: ['development'], - }, - esbuildTarget: 'auto', - // in a monorepo you need to set set the root dir to resolve modules - rootDir: '.', - // debug: false, - preserveSymlinks: true, - plugins: [], - middleware: [], -}; diff --git a/uniquely/flight-finder-pwa/workbox.config.js b/uniquely/flight-finder-pwa/workbox.config.js deleted file mode 100644 index efbffe769..000000000 --- a/uniquely/flight-finder-pwa/workbox.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('workbox-build').GenerateSWOptions} */ -export const workboxConfig = { - swDest: 'dist/sw.js', - globDirectory: 'dist/', - clientsClaim: true, - skipWaiting: true, - globPatterns: ['**/*.{js,css,html,json,png,svg,ico,webp}'], -}; diff --git a/uniquely/keep-pwa/CHANGELOG.md b/uniquely/keep-pwa/CHANGELOG.md deleted file mode 100644 index 647940f21..000000000 --- a/uniquely/keep-pwa/CHANGELOG.md +++ /dev/null @@ -1,53 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/keep-pwa - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **keep-pwa:** add media print to style ([6b96004](https://github.com/AliMD/alwatr/commit/6b96004319c40e3473ead569dd2801494ec92f75)) -- **keep-pwa:** cdn url ([9e4f2e3](https://github.com/AliMD/alwatr/commit/9e4f2e34fa1041b276494ef928fc78aa5fa1f42d)) -- **keep-pwa:** color ([85c82c3](https://github.com/AliMD/alwatr/commit/85c82c3e83df29000645fcdfcb2a921b2ea525b5)) -- **keep-pwa:** home page content type ([817345f](https://github.com/AliMD/alwatr/commit/817345fd8e5317508083171db945900ff641fe47)) -- **keep-pwa:** i18n key ([22e5130](https://github.com/AliMD/alwatr/commit/22e5130a08e747592163c7ca1702e6d1cc49ae87)) -- **keep-pwa:** pwa name, description on html and manifest ([54686a2](https://github.com/AliMD/alwatr/commit/54686a270ae741db0654712453df885d2334bae9)) -- **keep-pwa:** review issue ([097125b](https://github.com/AliMD/alwatr/commit/097125b3cb25747b497dc69c9af59e5e7138d3c8)) -- **keep-pwa:** select product price ([8bdfea9](https://github.com/AliMD/alwatr/commit/8bdfea96e8279cdabd0f5f375ffa22222446e903)) -- **keep-pwa:** use LocalizeMixin for app-footer ([72a8afe](https://github.com/AliMD/alwatr/commit/72a8afe4df7bc8a3716953eba62fd9751dd1d3ca)) -- **keep:** color palette ([3cc5566](https://github.com/AliMD/alwatr/commit/3cc5566ffdd849fe930eb85b5be05bf0e75771af)) -- **keep:** config.js ([e8f8d7e](https://github.com/AliMD/alwatr/commit/e8f8d7edb0e7ffd1adb41d5ff8a6131ceb0e99a5)) -- **keep:** import issue ([9bc4984](https://github.com/AliMD/alwatr/commit/9bc4984e36827582b2785254478cc2f1aed8cca4)) -- **keep:** packages.json ([ac5bb5e](https://github.com/AliMD/alwatr/commit/ac5bb5e2ed3051e5fd0c12d725c0bee502f094a5)) -- **keep:** product image ([e437db0](https://github.com/AliMD/alwatr/commit/e437db0dcb9966d9975711c88dc572b0921dbf25)) -- **keep:** remove buttons file ([6c67558](https://github.com/AliMD/alwatr/commit/6c675583ebc3fabb3753a29e70486bf933d6393b)) - -### Features - -- **keep-pwa:** add product page link to home ([ad86633](https://github.com/AliMD/alwatr/commit/ad8663326f71c53544497ad1182b6e265b911ea1)) -- **keep-pwa:** add svg logo ([fb95f07](https://github.com/AliMD/alwatr/commit/fb95f076ff358f62733d9654c96862718d6c8b7c)) -- **keep-pwa:** change language ([d55ec91](https://github.com/AliMD/alwatr/commit/d55ec912aa6be5a3434998c1b14d4057222cf081)) -- **keep-pwa:** collaboration form ([7f941be](https://github.com/AliMD/alwatr/commit/7f941be801f2860b867e7207575bda03f68faea8)) -- **keep-pwa:** content ([e37cd99](https://github.com/AliMD/alwatr/commit/e37cd9945cac3e4376bcc3de41dc2ecea2a091ff)) -- **keep-pwa:** home page ([523b329](https://github.com/AliMD/alwatr/commit/523b32949ec0bbec3d824484056dcfdd5d03b608)) -- **keep-pwa:** l18e ([149591d](https://github.com/AliMD/alwatr/commit/149591ded37ef5976fd128e6db615fd12eeb816e)) -- **keep-pwa:** product card ([2c3c41f](https://github.com/AliMD/alwatr/commit/2c3c41f848e608a1d8ed23a07fa11fc21ee0d109)) -- **keep-pwa:** product pgae ([82fe29d](https://github.com/AliMD/alwatr/commit/82fe29de016ce5a1d5ffdff3dc4d4c655e2b71c2)) -- **keep-pwa:** select product ([884e28e](https://github.com/AliMD/alwatr/commit/884e28e5d7684a79f69b7170c10401a179d6ad69)) -- **keep-pwa:** submit-form-command-handler ([6c49126](https://github.com/AliMD/alwatr/commit/6c491265b6b3e0407c2796af9c7173cc6e13f090)) -- **keep-pwa:** token ([88dafd9](https://github.com/AliMD/alwatr/commit/88dafd91817bbf8953c270d495a5cc68e523c294)) -- **keep-pwa:** update config ([e9f78a5](https://github.com/AliMD/alwatr/commit/e9f78a5dd21ec31b70d6f213eb5b4f490f886f17)) -- **keep-pwa:** update config ([1141714](https://github.com/AliMD/alwatr/commit/1141714676fab0b3dd9675d178397c47883a8097)) -- **keep-pwa:** update social media link ([8371e95](https://github.com/AliMD/alwatr/commit/8371e95838c7f41857b502d359ee9b5bdfd6a07a)) -- **keep:** add cdn to config ([6cd497d](https://github.com/AliMD/alwatr/commit/6cd497d845b92d9ff285db8d4d032fee125eda66)) -- **keep:** app footer ([bff053d](https://github.com/AliMD/alwatr/commit/bff053dcbc00f2d5a1d46c9745987d06192e079b)) -- **keep:** base pwa ([4f7e23b](https://github.com/AliMD/alwatr/commit/4f7e23b67fef391b0a842e4b521ef90e0f2ea2cd)) -- **keep:** config ([3f83c78](https://github.com/AliMD/alwatr/commit/3f83c787a5564a7502ea39215ca88d797a49c092)) -- **keep:** manifest icon ([377cca6](https://github.com/AliMD/alwatr/commit/377cca6aa9a236a4fc64a69c8f92e8820c7069fe)) -- **keep:** theme ([7cf958a](https://github.com/AliMD/alwatr/commit/7cf958a9c17aefde8ba52fb24c5db0b7d0243434)) -- **keep:** update home content ([63c830c](https://github.com/AliMD/alwatr/commit/63c830c170f537274c9d3ef3873f6b743645c8f0)) diff --git a/uniquely/keep-pwa/README.md b/uniquely/keep-pwa/README.md deleted file mode 100644 index c77822be8..000000000 --- a/uniquely/keep-pwa/README.md +++ /dev/null @@ -1 +0,0 @@ -# Keep PWA diff --git a/uniquely/keep-pwa/esbuild.mjs b/uniquely/keep-pwa/esbuild.mjs deleted file mode 100755 index 45cb0f24a..000000000 --- a/uniquely/keep-pwa/esbuild.mjs +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -import '@alwatr/pwa-helper/esbuild.mjs'; diff --git a/uniquely/keep-pwa/package.json b/uniquely/keep-pwa/package.json deleted file mode 100644 index 39d76ad4b..000000000 --- a/uniquely/keep-pwa/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@alwatr/keep-pwa", - "version": "1.0.0", - "description": "Alwatr Keep PWA.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "contributors": [ - "S. Amir Mohammad Najafi (https://njfamirm.ir)" - ], - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "browserslist": "> 1.5%, not dead", - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "uniquely/keep-pwa" - }, - "scripts": { - "b": "yarn build-dev", - "cb": "run-s clean build-dev", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "clean": "rm -rf dist build .tsbuildinfo", - "build": "yarn build:es", - "build-dev": "run-s build:root build:tsc \"build:es --debug\"", - "build:es": "./esbuild.mjs", - "build:tsc": "tsc --build", - "build:root": "cd ../../ && yarn build:ts", - "serve": "wds", - "watch": "run-p watch:root watch:es serve", - "watch:es": "yarn build:es --clean --watch --debug", - "watch:root": "cd ../../ && yarn watch:ts" - } -} diff --git a/uniquely/keep-pwa/res/config.js b/uniquely/keep-pwa/res/config.js deleted file mode 100644 index 63a20519d..000000000 --- a/uniquely/keep-pwa/res/config.js +++ /dev/null @@ -1,3 +0,0 @@ -window.appConfig = { - token: '$API_ACCESS_TOKEN', -} diff --git a/uniquely/keep-pwa/res/image/favicon.ico b/uniquely/keep-pwa/res/image/favicon.ico deleted file mode 100644 index f7974d955..000000000 Binary files a/uniquely/keep-pwa/res/image/favicon.ico and /dev/null differ diff --git a/uniquely/keep-pwa/res/image/icon-192-maskable.png b/uniquely/keep-pwa/res/image/icon-192-maskable.png deleted file mode 100644 index 1c8ed01d9..000000000 Binary files a/uniquely/keep-pwa/res/image/icon-192-maskable.png and /dev/null differ diff --git a/uniquely/keep-pwa/res/image/icon-192.png b/uniquely/keep-pwa/res/image/icon-192.png deleted file mode 100644 index a0e5990e2..000000000 Binary files a/uniquely/keep-pwa/res/image/icon-192.png and /dev/null differ diff --git a/uniquely/keep-pwa/res/image/icon-512-maskable.png b/uniquely/keep-pwa/res/image/icon-512-maskable.png deleted file mode 100644 index f28c0035b..000000000 Binary files a/uniquely/keep-pwa/res/image/icon-512-maskable.png and /dev/null differ diff --git a/uniquely/keep-pwa/res/image/icon-512.png b/uniquely/keep-pwa/res/image/icon-512.png deleted file mode 100644 index d01867d0f..000000000 Binary files a/uniquely/keep-pwa/res/image/icon-512.png and /dev/null differ diff --git a/uniquely/keep-pwa/res/image/keep.svg b/uniquely/keep-pwa/res/image/keep.svg deleted file mode 100644 index dab29e1c0..000000000 --- a/uniquely/keep-pwa/res/image/keep.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/uniquely/keep-pwa/res/index.html b/uniquely/keep-pwa/res/index.html deleted file mode 100644 index cc9af3e37..000000000 --- a/uniquely/keep-pwa/res/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - Keep Collection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - درحال بارگذاری... - - - - - - diff --git a/uniquely/keep-pwa/res/manifest.webmanifest b/uniquely/keep-pwa/res/manifest.webmanifest deleted file mode 100644 index 0b1707e8a..000000000 --- a/uniquely/keep-pwa/res/manifest.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "short_name": "Keep", - "name": "Keep Collection", - "description": "Keep Collection Official PWA", - "start_url": "/", - "display": "standalone", - "theme_color": "#c24000", - "background_color": "#fffcfa", - "orientation": "portrait", - "default_locale": "fa", - "icons": [ - {"src": "/image/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable"}, - {"src": "/image/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable"}, - {"src": "/image/favicon.ico", "type": "image/x-icon", "sizes": "32x32"}, - {"src": "/image/icon-192.png", "type": "image/png", "sizes": "192x192"}, - {"src": "/image/icon-512.png", "type": "image/png", "sizes": "512x512"} - ], - "screenshots": [] -} diff --git a/uniquely/keep-pwa/res/robots.txt b/uniquely/keep-pwa/res/robots.txt deleted file mode 100644 index c2a49f4fb..000000000 --- a/uniquely/keep-pwa/res/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/uniquely/keep-pwa/res/service-worker.js b/uniquely/keep-pwa/res/service-worker.js deleted file mode 100644 index 64a5d005d..000000000 --- a/uniquely/keep-pwa/res/service-worker.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Service worker not build in development mode.') diff --git a/uniquely/keep-pwa/src/alwatr-pwa.ts b/uniquely/keep-pwa/src/alwatr-pwa.ts deleted file mode 100644 index 2fa476453..000000000 --- a/uniquely/keep-pwa/src/alwatr-pwa.ts +++ /dev/null @@ -1,3 +0,0 @@ -// TODO: rename me to index -import './manager/index.js'; -import './ui/alwatr-pwa.js'; diff --git a/uniquely/keep-pwa/src/config.ts b/uniquely/keep-pwa/src/config.ts deleted file mode 100644 index 818aeb207..000000000 --- a/uniquely/keep-pwa/src/config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {FetchOptions} from '@alwatr/fetch'; -import {getConfKey} from '@alwatr/pwa-helper/config.js'; -import {getLocalStorageItem} from '@alwatr/util'; - -/** - * Debug API. - * - * ```ts - * localStorage.setItem('DEBUG_API', '"https://canary.keeperco.ir/"'); - * localStorage.setItem('DEBUG_CONFIG', JSON.stringify({token: 'secret_token'})); - * ``` - */ -const srvBaseUrl = getLocalStorageItem('DEBUG_API', '/'); -const apiBaseUrl = srvBaseUrl + 'api/v0/'; - -export const config = { - serverContext: { - base: srvBaseUrl, - api: apiBaseUrl, - cdn: srvBaseUrl + 'cdn', - token: getConfKey('token'), - }, - - fetchContextOptions: { - removeDuplicate: 'auto', - retry: 2, - retryDelay: 2_000, - } as Partial, -} as const; diff --git a/uniquely/keep-pwa/src/content/home-page-en.ts b/uniquely/keep-pwa/src/content/home-page-en.ts deleted file mode 100644 index f9016f5a8..000000000 --- a/uniquely/keep-pwa/src/content/home-page-en.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* eslint-disable max-len */ -import {languageButtonClickEventListener} from '../manager/context.js'; - -import type {PageHomeContent} from '../type.js'; - -export const homePageContent: PageHomeContent = { - topAppBar: { - type: 'center', - headline: 'Keep Collection', - startIcon: {icon: 'menu-outline', flipRtl: true}, - endIconList: [{icon: 'globe-outline', clickSignalId: languageButtonClickEventListener.id}], - }, - about: { - elevated: 1, - stated: true, - wide: true, - headline: 'About Us', - slot: ` - Keep is an Iranian holding company in the field of building materials and stone veneer manufacturing. It is engaged in the production and distribution of construction services.
    - The factory operates with the aim of distributing construction products in Iranian and international markets.
    - The products produced by this collection are of high quality and are accompanied by experienced staff committed to customer satisfaction. - `, - }, - product: { - elevated: 1, - highlight: true, - stated: true, - wide: true, - icon: 'cart-outline', - headline: 'View Products', - }, - catalogue: { - elevated: 1, - highlight: true, - stated: true, - icon: 'cloud-download-outline', - flipRtl: true, - headline: 'Download Catalogue', - description: 'Download the catalogue introducing Keep products', - href: 'https://www.dropbox.com/s/dl/k1jct7jc7netmsq/keep-product-brochure.pdf', - target: 'download', - }, - socialList: [ - { - elevated: 1, - highlight: true, - stated: true, - icon: 'call-outline', - flipRtl: true, - headline: 'Contact Us', - slot: '
    Direct Contact Number
    0915 101 1507
    ', - href: 'tel:+989151011507', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'send-outline', - headline: 'Telegram', - description: 'Keep Telegram Channel', - href: 'https://t.me/keeperco', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-instagram', - headline: 'Instagram', - description: 'Keep Instagram Page', - href: 'https://instagram.com/keeperco', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-youtube', - headline: 'Youtube', - description: 'Keep Youtube channel', - href: 'https://www.youtube.com/keeperco', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'videocam-outline', - headline: 'Aparat', - description: 'Keep Aparat Channel', - href: 'https://www.aparat.com/keeperco', - target: '_blank', - }, - ], -}; diff --git a/uniquely/keep-pwa/src/content/home-page-fa.ts b/uniquely/keep-pwa/src/content/home-page-fa.ts deleted file mode 100644 index 5eefc61f8..000000000 --- a/uniquely/keep-pwa/src/content/home-page-fa.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* eslint-disable max-len */ - -import {replaceNumber} from '@alwatr/i18n'; - -import {languageButtonClickEventListener} from '../manager/context.js'; - -import type {PageHomeContent} from '../type.js'; - -export const homePageContent: PageHomeContent = { - topAppBar: { - type: 'center', - headline: 'مجموعه کیپ', - startIcon: {icon: 'menu-outline', flipRtl: true}, - endIconList: [{icon: 'globe-outline', clickSignalId: languageButtonClickEventListener.id}], - }, - about: { - elevated: 1, - stated: true, - wide: true, - headline: 'درباره ما', - slot: ` - شرکت تولیدی کیپ مصالح ساختمانی و اسکوپ سنگ‌نما هلدینگی ایرانی است که در زمینه تولید و توزیع خدمات ساختمانی فعالیت دارد.
    - این کارخانه با هدف توزیع محصولات ساختمانی در بازارهای ایرانی و خارجی مشغول به فعالیت می‌باشد.
    - محصولات تولیدی این مجموعه با کیفیت بالا و کادری مجرب و تعهد به اصول جلب رضایت مشتری می‌باشد. - `, - }, - product: { - elevated: 1, - highlight: true, - stated: true, - wide: true, - icon: 'cart-outline', - headline: 'مشاهده محصولات', - href: '/product', - }, - catalogue: { - elevated: 1, - highlight: true, - stated: true, - icon: 'cloud-download-outline', - flipRtl: true, - headline: 'دانلود کاتالوگ', - description: 'دانلود کاتالوگ معرفی محصولات کیپ', - href: 'https://www.dropbox.com/s/dl/k1jct7jc7netmsq/keep-product-brochure.pdf', - target: 'download', - }, - socialList: [ - { - elevated: 1, - highlight: true, - stated: true, - icon: 'call-outline', - flipRtl: true, - headline: 'تماس با ما', - slot: ` -
    تلفن ارتباط مستقیم
    -
    ${replaceNumber('0915 101 1507')}
    - `, - href: 'tel:+989151011507', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'send-outline', - headline: 'تلگرام', - description: 'کانال تلگرام کیپ', - href: 'https://t.me/keeperco', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-instagram', - headline: 'اینستاگرام', - description: 'صفحه‌ی اینستاگرام کیپ', - href: 'https://instagram.com/keep_scope/', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-youtube', - headline: 'یوتیوب', - description: 'کانال یوتیوب کیپ', - href: 'https://www.youtube.com/keeperco', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'videocam-outline', - headline: 'آپارات', - description: 'کانال آپارات کیپ', - href: 'https://www.aparat.com/keeperco', - target: '_blank', - }, - ], -}; diff --git a/uniquely/keep-pwa/src/content/l18e-en.json b/uniquely/keep-pwa/src/content/l18e-en.json deleted file mode 100644 index 217b64ecb..000000000 --- a/uniquely/keep-pwa/src/content/l18e-en.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ok": true, - "meta": { - "code": "en-US", - "rev": 0 - }, - "data": { - "loading": "Loading...", - "app_footer_description": "The largest stone scope manufacturer in the eastern part of the country", - "page_404_not_found": "Not Found!", - "page_404_not_found_description": "Sorry, the requested page was not found!", - "full_name": "Full Name", - "phone_number": "Phone Number", - "city": "City", - "activity_field": "Activity Field", - "tool_distribution": "Tool Distributor", - "sales_tools": "Sales Tools", - "stonemason": "Stonemason", - "contractor": "Contractor", - "submit_form": "Submit Form", - "cancel": "Cancel", - "collaboration_form_title": "Collaboration Request", - "form_submitted": "Your request has been submitted.", - "collaboration_form_description": "Collaboration request form with Keep", - "invalid_form_data": "The form information is not correct.", - "check_network_connection": "Please check internet, and send again.", - "page_product_headline": "Products" - } -} diff --git a/uniquely/keep-pwa/src/content/l18e-fa.json b/uniquely/keep-pwa/src/content/l18e-fa.json deleted file mode 100644 index 54df3f804..000000000 --- a/uniquely/keep-pwa/src/content/l18e-fa.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "ok": true, - "meta": { - "code": "fa-IR", - "rev": 0 - }, - "data": { - "loading": "در حال بارگذاری ...", - - "app_footer_description": "بزرگترین تولید کننده اسکوپ سنگ در شرق کشور", - - "page_404_not_found": "یافت نشد!", - "page_404_not_found_description": "متاسفانه صفحه مورد نظر یافت نشد!", - - "full_name": "نام و نام‌خانوادگی", - "phone_number": "شماره تلفن", - "city": "شهر", - "activity_field": "حوزه فعالیت", - "tool_distribution": "توزیع‌کننده ابزار", - "sales_tools": "فروشنده ابزار", - "stonemason": "سنگ‌کار", - "contractor": "پیمانکار", - "submit_form": "ارسال فرم", - "cancel": "لغو", - "collaboration_form_title": "درخواست همکاری", - "form_submitted": "درخواست شما ثبت شد.", - "collaboration_form_description": "فرم درخواست همکاری با کیپ", - "invalid_form_data": "اطلاعات فرم صحیح نمی‌باشد.", - "check_network_connection": "لطفا از اتصال خود به اینترنت اطمینان حاصل فرمایید و دوباره ارسال کنید.", - "page_product_headline": "محصولات" - } -} diff --git a/uniquely/keep-pwa/src/manager/change-language.ts b/uniquely/keep-pwa/src/manager/change-language.ts deleted file mode 100644 index a539b6fd6..000000000 --- a/uniquely/keep-pwa/src/manager/change-language.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {localeContextConsumer, setLocale} from '@alwatr/i18n'; - -import {languageButtonClickEventListener} from './context.js'; -import {logger} from './logger.js'; - -languageButtonClickEventListener.subscribe(() => { - logger.logMethod?.('changeLanguage'); - localeContextConsumer.getValue()?.language === 'en' - ? setLocale({ - code: 'fa-IR', - language: 'fa', - direction: 'rtl', - }) - : setLocale({ - code: 'en-US', - language: 'en', - direction: 'ltr', - }); -}); diff --git a/uniquely/keep-pwa/src/manager/context-provider/home-page-content.ts b/uniquely/keep-pwa/src/manager/context-provider/home-page-content.ts deleted file mode 100644 index 074e7a5ef..000000000 --- a/uniquely/keep-pwa/src/manager/context-provider/home-page-content.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {localeContextConsumer} from '@alwatr/i18n'; - -import {homePageContent} from '../../content/home-page-fa.js'; // for perf -import {homePageContentContextProvider} from '../context.js'; -import {logger} from '../logger.js'; - -localeContextConsumer.subscribe(async () => { - const language = localeContextConsumer.getValue()?.language; - logger.logMethodArgs?.('contentProvider', {language}); - if (language == null) return; - - const content = language === 'en' ? (await import('../../content/home-page-en.js')).homePageContent : homePageContent; - homePageContentContextProvider.setValue(content); -}); diff --git a/uniquely/keep-pwa/src/manager/context-provider/l18e.ts b/uniquely/keep-pwa/src/manager/context-provider/l18e.ts deleted file mode 100644 index f832c58e0..000000000 --- a/uniquely/keep-pwa/src/manager/context-provider/l18e.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {setL18eLoader} from '@alwatr/i18n'; - -import l18eFa from '../../content/l18e-fa.json' assert {type: 'json'}; // for perf -import {logger} from '../logger.js'; - -import type {L18eContext} from '@alwatr/type'; - -setL18eLoader((locale) => { - const language = locale.language; - logger.logMethodArgs?.('l18eLoader', {language}); - if (language === 'en') { - return import('../../content/l18e-en.json', {assert: {type: 'json'}}) as unknown as Promise; - } - else { - return l18eFa as unknown as Promise; - } -}); diff --git a/uniquely/keep-pwa/src/manager/context.ts b/uniquely/keep-pwa/src/manager/context.ts deleted file mode 100644 index 629e6cccb..000000000 --- a/uniquely/keep-pwa/src/manager/context.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {commandTrigger, contextConsumer, contextProvider, eventListener} from '@alwatr/signal'; - -import type {PageHomeContent, FormData} from '../type.js'; -import type {ClickSignalType} from '@alwatr/type'; - -export * from '@alwatr/pwa-helper/context.js'; - -export const homePageContentContextProvider = - contextProvider.bind('home_page_content_context'); -export const homePageContentContextConsumer = - contextConsumer.bind(homePageContentContextProvider.id); - -export const languageButtonClickEventListener = eventListener.bind('language_button_click_event'); - -export const submitFormCommandTrigger = commandTrigger.bind('submit_form_command'); diff --git a/uniquely/keep-pwa/src/manager/index.ts b/uniquely/keep-pwa/src/manager/index.ts deleted file mode 100644 index da75263c6..000000000 --- a/uniquely/keep-pwa/src/manager/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import './change-language.js'; -import './context-provider/home-page-content.js'; -import './context-provider/l18e.js'; -import './submit-form-command-handler.js'; diff --git a/uniquely/keep-pwa/src/manager/logger.ts b/uniquely/keep-pwa/src/manager/logger.ts deleted file mode 100644 index e15c6c8ce..000000000 --- a/uniquely/keep-pwa/src/manager/logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('keep-manager'); diff --git a/uniquely/keep-pwa/src/manager/submit-form-command-handler.ts b/uniquely/keep-pwa/src/manager/submit-form-command-handler.ts deleted file mode 100644 index d7eab6b85..000000000 --- a/uniquely/keep-pwa/src/manager/submit-form-command-handler.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {serviceRequest} from '@alwatr/fetch'; -import {commandHandler} from '@alwatr/signal'; -import {snackbarSignalTrigger} from '@alwatr/ui-kit/snackbar/show-snackbar.js'; -import {validator, type JsonSchema} from '@alwatr/validator'; - -import {submitFormCommandTrigger} from './context.js'; -import {logger} from './logger.js'; -import {config} from '../config.js'; - -import type {FormData} from '../type.js'; - -const validSchema: Record = { - 'collaboration': {name: String, phone: Number, city: String, activity: String}, -}; - -commandHandler.define(submitFormCommandTrigger.id, async (form: FormData): Promise => { - logger.logMethodArgs?.('formSubmit', {form}); - - let bodyJson; - try { - const schema = validSchema[form.formId]; - - if (schema == null) { - logger.accident( - 'formSubmit', - 'invalid_form_id', - 'Please define form id in validSchema before use it', - {formId: form.formId, validSchema: Object.keys(validSchema)}, - ); - return false; - } - - bodyJson = validator(schema, form.data); - } - catch (err) { - logger.accident('formSubmit', 'invalid_form_data', 'validator failed on form data', (err as Error).cause); - snackbarSignalTrigger.request({messageKey: 'invalid_form_data'}); - return false; - } - - try { - await serviceRequest({ - method: 'PUT', - url: config.serverContext.api + 'form/', - queryParameters: { - formId: form.formId, - }, - token: config.serverContext.token, - bodyJson, - }); - } - catch (err) { - logger.error('formSubmit', 'request_failed', (err as Error).cause); - snackbarSignalTrigger.request({messageKey: 'check_network_connection'}); - return false; - } - - return true; -}); diff --git a/uniquely/keep-pwa/src/type.ts b/uniquely/keep-pwa/src/type.ts deleted file mode 100644 index 7b81396f8..000000000 --- a/uniquely/keep-pwa/src/type.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type {StringifyableRecord} from '@alwatr/type'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; -import type {TopAppBarContent} from '@alwatr/ui-kit/top-app-bar/top-app-bar.js'; - -export interface FormData extends StringifyableRecord { - formId: string; - data: Record; -} - -export interface BoxType extends IconBoxContent { - wide?: boolean; - slot?: string; -} - -export interface PageHomeContent extends StringifyableRecord { - topAppBar: TopAppBarContent; - about: BoxType; - catalogue: BoxType; - product: BoxType; - socialList: BoxType[]; -} diff --git a/uniquely/keep-pwa/src/ui/alwatr-pwa.ts b/uniquely/keep-pwa/src/ui/alwatr-pwa.ts deleted file mode 100644 index 2b4572088..000000000 --- a/uniquely/keep-pwa/src/ui/alwatr-pwa.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {html, customElement} from '@alwatr/element'; -import '@alwatr/font/vazirmatn.css'; -import {AlwatrPwaElement} from '@alwatr/pwa-helper/pwa-element.js'; -import '@alwatr/ui-kit/style/mobile-only.css'; -import '@alwatr/ui-kit/style/theme/color.css'; -import '@alwatr/ui-kit/style/theme/palette-40.css'; - -import './page/home.js'; // for perf -import './stuff/app-footer.js'; - -import type {RoutesConfig} from '@alwatr/router'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-pwa': AlwatrPwa; - } -} - -/** - * Alwatr PWA Root Element - */ -@customElement('alwatr-pwa') -class AlwatrPwa extends AlwatrPwaElement { - protected override _routesConfig: RoutesConfig = { - routeId: (routeContext) => routeContext.sectionList[0]?.toString(), - templates: { - 'home': () => { - return html`...`; - }, - 'product': () => { - import('./page/product.js'); - return html`...`; - }, - '_404': () => { - import('./page/404.js'); - return html`...`; - }, - }, - }; - - protected override _navigationBarTemplate(): unknown { - return html``; - } -} diff --git a/uniquely/keep-pwa/src/ui/page/404.ts b/uniquely/keep-pwa/src/ui/page/404.ts deleted file mode 100644 index 6d767a892..000000000 --- a/uniquely/keep-pwa/src/ui/page/404.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - customElement, - css, - html, - LocalizeMixin, - SignalMixin, - AlwatrBaseElement, - UnresolvedMixin, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {languageButtonClickEventListener, topAppBarContextProvider} from '../../manager/context.js'; - -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-404': AlwatrPage404; - } -} - -/** - * Alwatr 404 Page - */ -@customElement('alwatr-page-404') -export class AlwatrPage404 extends UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))) { - static override styles = css` - :host { - display: block; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - } - `; - - override connectedCallback(): void { - super.connectedCallback(); - topAppBarContextProvider.setValue({ - type: 'small', - headlineKey: 'page_404_not_found', - startIcon: {icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back_to_home_click_event'}, - endIconList: [{icon: 'globe-outline', clickSignalId: languageButtonClickEventListener.id}], - tinted: 2, - }); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - - const box: IconBoxContent = { - stated: true, - elevated: 1, - icon: 'construct-outline', - flipRtl: true, - headline: message('page_404_not_found'), - description: message('page_404_not_found_description'), - preLine: true, - }; - - return html``; - } -} diff --git a/uniquely/keep-pwa/src/ui/page/home.ts b/uniquely/keep-pwa/src/ui/page/home.ts deleted file mode 100644 index 266cc16f3..000000000 --- a/uniquely/keep-pwa/src/ui/page/home.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { - customElement, - css, - html, - unsafeHTML, - state, - nothing, - SignalMixin, - AlwatrBaseElement, - mapIterable, - UnresolvedMixin, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {homePageContentContextConsumer, topAppBarContextProvider} from '../../manager/context.js'; -import '../stuff/collaboration-box.js'; - -import type {BoxType, PageHomeContent} from '../../type.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-home': AlwatrPageHome; - } -} - -/** - * Alwatr Keep Home Page - */ -@customElement('alwatr-page-home') -export class AlwatrPageHome extends UnresolvedMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: flex; - flex-wrap: wrap; - padding: calc(2 * var(--sys-spacing-track)); - justify-content: center; - gap: var(--sys-spacing-track); - overflow-y: auto; - } - - alwatr-icon-box { - width: 40%; - flex-grow: 1; - } - - .logo { - width: 90%; - margin-bottom: var(--sys-spacing-track); - } - - alwatr-icon-box[wide], - alwatr-collaboration-box { - width: 100%; - } - `; - - @state() content?: PageHomeContent; - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners( - homePageContentContextConsumer.subscribe((content) => { - this.content = content; - topAppBarContextProvider.setValue(content.topAppBar); - }), - ); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return this._menuTemplate(); - } - - protected* _menuTemplate(): unknown { - yield html``; - yield this._boxTemplate(this?.content?.about); - yield this._boxTemplate(this?.content?.product); - yield html``; - yield this._boxTemplate(this?.content?.catalogue); - yield mapIterable(this, this?.content?.socialList, this._boxTemplate, message('loading')); - } - - protected _boxTemplate(box?: BoxType): unknown { - const slot = box?.slot == null ? nothing : unsafeHTML(box.slot); - return html`${slot}`; - } -} diff --git a/uniquely/keep-pwa/src/ui/page/product.ts b/uniquely/keep-pwa/src/ui/page/product.ts deleted file mode 100644 index 2711a75c3..000000000 --- a/uniquely/keep-pwa/src/ui/page/product.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - customElement, - css, - html, - LocalizeMixin, - SignalMixin, - AlwatrBaseElement, - UnresolvedMixin, -} from '@alwatr/element'; - -import {languageButtonClickEventListener, topAppBarContextProvider} from '../../manager/context.js'; -import '../stuff/select-product.js'; - - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-product': AlwatrPageProduct; - } -} - -/** - * Alwatr Select Product Page - */ -@customElement('alwatr-page-product') -export class AlwatrPageProduct extends UnresolvedMixin(LocalizeMixin(SignalMixin(AlwatrBaseElement))) { - static override styles = css` - :host { - display: block; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - } - `; - - override connectedCallback(): void { - super.connectedCallback(); - topAppBarContextProvider.setValue({ - type: 'small', - headlineKey: 'page_product_headline', - startIcon: {icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back_to_home_click_event'}, - endIconList: [{icon: 'globe-outline', clickSignalId: languageButtonClickEventListener.id}], - tinted: 2, - }); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - - return html``; - } -} diff --git a/uniquely/keep-pwa/src/ui/stuff/app-footer.ts b/uniquely/keep-pwa/src/ui/stuff/app-footer.ts deleted file mode 100644 index 65108e473..000000000 --- a/uniquely/keep-pwa/src/ui/stuff/app-footer.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {customElement, AlwatrBaseElement, css, html, SignalMixin, LocalizeMixin} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-app-footer': AlwatrPageHome; - } -} - -/** - * Alwatr Keep App Footer - */ -@customElement('alwatr-app-footer') -export class AlwatrPageHome extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: block; - flex-grow: 0; - flex-shrink: 0; - direction: ltr; - text-align: center; - color: var(--sys-color-on-secondary-container); - padding: calc(2 * var(--sys-spacing-track)) var(--sys-spacing-track) var(--sys-spacing-track); - background-color: var(--sys-color-secondary-container); - } - - .version { - font-size: var(--sys-typescale-label-small-font-size); - line-height: var(--sys-typescale-label-small-line-height); - letter-spacing: var(--sys-typescale-label-small-letter-spacing); - opacity: 0.6; - user-select: none; - -webkit-user-select: none; - } - `; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` -
    ${message('app_footer_description')}
    -
    Keep v${_ALWATR_VERSION_}
    - `; - } -} diff --git a/uniquely/keep-pwa/src/ui/stuff/collaboration-box.ts b/uniquely/keep-pwa/src/ui/stuff/collaboration-box.ts deleted file mode 100644 index 6e2e1bb1a..000000000 --- a/uniquely/keep-pwa/src/ui/stuff/collaboration-box.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { - customElement, - css, - html, - state, - LocalizeMixin, - SignalMixin, - AlwatrBaseElement, - type PropertyValues, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; -import {untilNextFrame, untilEvent, delay} from '@alwatr/util'; - -import './collaboration-form.js'; - -import type {AlwatrCollaborationForm} from './collaboration-form.js'; -import type {AlwatrIconBox, IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-collaboration-box': AlwatrCollaborationBox; - } -} - -/** - * Keep collaboration box element - */ -@customElement('alwatr-collaboration-box') -export class AlwatrCollaborationBox extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: block; - padding: 0; - } - - .success { - color: var(--sys-color-primary); - font-family: var(--sys-typescale-label-large-font-family-name); - font-weight: var(--sys-typescale-label-large-font-weight); - font-size: var(--sys-typescale-label-large-font-size); - letter-spacing: var(--sys-typescale-label-large-letter-spacing); - line-height: var(--sys-typescale-label-large-line-height); - } - `; - - @state() - expanded = false; - - @state() - submitted = false; - - protected _box: AlwatrIconBox | null = null; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` - ${this._boxContentTemplate()} - `; - } - - protected get _iconBoxContent(): IconBoxContent { - return { - icon: 'people-outline', - headline: message('collaboration_form_title'), - elevated: 1, - stated: !this.expanded, - highlight: !this.expanded && !this.submitted, - }; - } - - protected override firstUpdated(changedProperties: PropertyValues): void { - super.firstUpdated(changedProperties); - this._box = this.renderRoot.querySelector('alwatr-icon-box'); - } - - protected _boxContentTemplate(): unknown { - if (this.expanded) { - return html``; - } - else if (this.submitted) { - return html`${message('form_submitted')}`; - } - else { - return html`${message('collaboration_form_description')}`; - } - } - - protected async _click(): Promise { - this._logger.logMethod?.('_click'); - if (!this.expanded && !this.submitted) { - await this._currentAnimate; - this._currentAnimate = this._animateExpand(); - } - } - - protected async _formSubmitted(): Promise { - this._logger.logMethod?.('_formSubmitted'); - await this._currentAnimate; - this._currentAnimate = this._animateCollapse(true); - } - - protected async _formCanceled(): Promise { - this._logger.logMethod?.('_formCanceled'); - await this._currentAnimate; - this._currentAnimate = this._animateCollapse(false); - } - - protected _currentAnimate?: Promise; - - protected _collapseHeight = 0; - async _animateExpand(): Promise { - if (this.expanded || this._box == null) return; - this._logger.logMethod?.('_animateExpand'); - const box = this._box; - await untilNextFrame(); - - this._collapseHeight = box.scrollHeight; - box.style.height = this._collapseHeight + 'px'; - this.expanded = true; - await this.updateComplete; - await untilNextFrame(); - - box.style.height = box.scrollHeight + 'px'; - - const form = this.renderRoot.querySelector('#form'); - if (!form) { - this._logger.error('_animateExpand', 'form_not_found'); - this.style.height = 'auto'; - return; - } - form.animateExpand(); - - await untilEvent(box, 'transitionend'); - box.style.height = 'auto'; - } - - async _animateCollapse(submitted: boolean): Promise { - if (!this.expanded || this._box == null) return; - this._logger.logMethod?.('_animateCollapse'); - const box = this._box; - box.style.height = 'auto'; - await untilNextFrame(); - - box.style.height = box.scrollHeight + 'px'; - await untilNextFrame(); - - const form = this.renderRoot.querySelector('#form'); - if (form != null) { - form.animateCollapse(); - await delay(250); - } - - box.style.height = this._collapseHeight + 'px'; - await untilEvent(box, 'transitionend'); - - this.expanded = false; - this.submitted = submitted; - await this.updateComplete; - await box.updateComplete; - await untilNextFrame(); - - if (this._collapseHeight !== box.scrollHeight) { - box.style.height = box.scrollHeight + 'px'; - await untilEvent(box, 'transitionend'); - } - - box.style.height = 'auto'; - } -} diff --git a/uniquely/keep-pwa/src/ui/stuff/collaboration-form.ts b/uniquely/keep-pwa/src/ui/stuff/collaboration-form.ts deleted file mode 100644 index fcd4f48d7..000000000 --- a/uniquely/keep-pwa/src/ui/stuff/collaboration-form.ts +++ /dev/null @@ -1,171 +0,0 @@ -import {customElement, css, html, property, LocalizeMixin, SignalMixin, AlwatrBaseElement} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/radio-group/radio-group.js'; -import '@alwatr/ui-kit/text-field/text-field.js'; - -import {submitFormCommandTrigger} from '../../manager/context.js'; - -import type {RadioGroupOptions} from '@alwatr/ui-kit/radio-group/radio-group.js'; -import type {AlwatrTextField} from '@alwatr/ui-kit/text-field/text-field.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-collaboration-form': AlwatrCollaborationForm; - } -} - -/** - * Soffit collaboration form element - * - * @attr {Boolean} invisible - */ -@customElement('alwatr-collaboration-form') -export class AlwatrCollaborationForm extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static formId = 'collaboration'; - - get _radioGroupOptions(): RadioGroupOptions { - return { - title: message('activity_field'), - radioGroup: [ - {label: message('tool_distribution'), value: 'tool_distribution'}, - {label: message('sales_tools'), value: 'sales_tools'}, - {label: message('stonemason'), value: 'stonemason'}, - {label: message('contractor'), value: 'contractor'}, - ], - }; - } - - static override styles = css` - :host { - display: block; - transition: opacity var(--sys-motion-duration-medium) var(--sys-motion-easing-normal); - } - - :host([disabled]) { - pointer-events: none; - opacity: var(--sys-surface-disabled-opacity); - } - - alwatr-text-field { - display: block; - margin-top: var(--sys-spacing-track); - } - alwatr-text-field:first-of-type { - margin-top: 0; - } - - :host([invisible]) * { - opacity: 0; - } - - .button-container { - display: flex; - flex-direction: row-reverse; - gap: var(--sys-spacing-track); - margin-top: var(--sys-spacing-track); - } - `; - - @property({type: Boolean, reflect: true}) - disabled = false; - - protected async submit(): Promise { - const bodyJson = this.getFormData(); - this._logger.logMethodArgs?.('submit', bodyJson); - - this.disabled = true; - - const response = await submitFormCommandTrigger.requestWithResponse({ - formId: (this.constructor as typeof AlwatrCollaborationForm).formId, - data: bodyJson, - }); - - if (response) { - this.dispatchEvent(new CustomEvent('form-submitted')); - } - else { - this.disabled = false; - } - } - - protected async cancel(): Promise { - this.dispatchEvent(new CustomEvent('form-canceled')); - } - - protected getFormData(): Record { - this._logger.logMethod?.('getFormData'); - const data: Record = {}; - for (const inputElement of this.renderRoot.querySelectorAll( - 'alwatr-text-field,alwatr-radio-group', - )) { - data[inputElement.name] = inputElement.value as string; - } - return data; - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return [ - this.inputTemplate(), - this.partButtonTemplate(), - ]; - } - - protected inputTemplate(): unknown { - this._logger.logMethod?.('render'); - return html` - - - - - `; - } - - protected partButtonTemplate(): unknown { - return html` -
    - - -
    - `; - } - - async animateExpand(): Promise { - for (const element of this.renderRoot.querySelectorAll('*')) { - element.style.opacity = '1'; - await new Promise((resolve) => setTimeout(resolve, 100)); - } - } - - async animateCollapse(): Promise { - for (const element of [...this.renderRoot.querySelectorAll('*')].reverse()) { - element.style.opacity = '0'; - await new Promise((resolve) => setTimeout(resolve, 40)); - } - } -} diff --git a/uniquely/keep-pwa/src/ui/stuff/product-card.ts b/uniquely/keep-pwa/src/ui/stuff/product-card.ts deleted file mode 100644 index 6bb8f76db..000000000 --- a/uniquely/keep-pwa/src/ui/stuff/product-card.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { - css, - customElement, - SignalMixin, - LocalizeMixin, - nothing, - html, - property, - type PropertyValues, -} from '@alwatr/element'; -import {number} from '@alwatr/i18n'; -import '@alwatr/icon'; -import '@alwatr/ui-kit/button/icon-button.js'; -import {AlwatrSurface} from '@alwatr/ui-kit/card/surface.js'; - - -import type {StringifyableRecord} from '@alwatr/type'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-product-card2': AlwatrProductCard; - } -} - -export interface ProductCartContent extends StringifyableRecord { - id?: string; - title: string; - imagePath: string; - price?: number; -} - -/** - * Alwatr not selectable elevated card element. - */ -@customElement('alwatr-product-card2') -export class AlwatrProductCard extends LocalizeMixin(SignalMixin(AlwatrSurface)) { - static override styles = [ - AlwatrSurface.styles, - css` - :host { - display: block; - padding: 0; - user-select: none; - -webkit-user-select: none; - --_surface-color-on: var(--sys-color-on-surface-hsl); - --_surface-color-bg: var(--sys-color-surface-hsl); - outline: 2px solid transparent; - } - - img { - display: block; - box-sizing: border-box; - width: 100%; - min-height: 50px; - height: auto; - border-radius: 0 0 var(--sys-radius-medium) var(--sys-radius-medium); - filter: brightness(1); - transition: filter var(--sys-motion-duration-small) var(--sys-motion-easing-normal); - } - - @media (prefers-color-scheme: dark) { - img { - filter: brightness(0.8); - } - } - - .content{ - padding: calc(2 * var(--sys-spacing-track)); - - } - .title { - margin: 0; - /* text-align: center; */ - font-family: var(--sys-typescale-headline-small-font-family-name); - font-weight: var(--sys-typescale-headline-small-font-weight); - font-size: var(--sys-typescale-headline-small-font-size); - letter-spacing: var(--sys-typescale-headline-small-letter-spacing); - line-height: var(--sys-typescale-headline-small-line-height); - margin-bottom: var(--sys-spacing-track); - } - - .price { - text-align: end; - color: var(--sys-color-on-surface-variant); - font-family: var(--sys-typescale-body-small-font-family-name); - font-weight: var(--sys-typescale-body-small-font-weight); - font-size: var(--sys-typescale-body-small-font-size); - letter-spacing: var(--sys-typescale-body-small-letter-spacing); - line-height: var(--sys-typescale-body-small-line-height); - } - - .price ins { - color: var(--sys-color-primary); - text-decoration: none; - font-weight: var(--ref-font-weight-medium); - vertical-align: middle; - } - - svg { - display: inline-block; - width: 1em; - height: 1em; - contain: strict; - vertical-align: middle; - } - `, - ]; - - @property({type: Object, attribute: false}) - content?: ProductCartContent; - - override connectedCallback(): void { - super.connectedCallback(); - this.setAttribute('stated', ''); - this.setAttribute('elevated', ''); - } - - protected override shouldUpdate(changedProperties: PropertyValues): boolean { - return super.shouldUpdate(changedProperties) && this.content != null; - } - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.content == null) return nothing; - - return html` - ${this.content.title} -
    -

    ${this.content.title}

    -
    - ${number(this.content.price)} - -
    -
    - `; - } -} diff --git a/uniquely/keep-pwa/src/ui/stuff/select-product.ts b/uniquely/keep-pwa/src/ui/stuff/select-product.ts deleted file mode 100644 index 4504edda8..000000000 --- a/uniquely/keep-pwa/src/ui/stuff/select-product.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { - AlwatrBaseElement, - LocalizeMixin, - SignalMixin, - UnresolvedMixin, - css, - customElement, - html, - mapObject, - property, -} from '@alwatr/element'; -import {localeContextConsumer} from '@alwatr/i18n'; -import '@alwatr/ui-kit/button/button.js'; - -import {config} from '../../config.js'; -import '../stuff/product-card.js'; - -import type {ProductCartContent} from '../stuff/product-card.js'; -import type {AlwatrDocumentStorage} from '@alwatr/type'; -import type {Product} from '@alwatr/type/customer-order-management.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-select-product': AlwatrSelectProduct; - } -} - -/** - * Alwatr Select Product Element. - */ -@customElement('alwatr-select-product') -export class AlwatrSelectProduct extends LocalizeMixin(SignalMixin(UnresolvedMixin(AlwatrBaseElement))) { - static override styles = css` - :host { - box-sizing: border-box; - display: flex; - flex-wrap: wrap; - /* padding: var(--sys-spacing-track) calc(2 * var(--sys-spacing-track)); */ - gap: var(--sys-spacing-track); - box-sizing: border-box; - justify-content: flex-end; - } - - alwatr-product-card2 { - width: 100%; - flex-grow: 1; - } - `; - - @property() - protected productStorage?: AlwatrDocumentStorage = { - ok: true, - meta: { - id: 'publistore/hub/product-list/scope', - formatVersion: 5, - reversion: 1, - lastUpdated: 1684866396314, - lastAutoId: -1, - }, - data: { - '1': { - id: '1', - title: {fa: 'اسکوپ دوشیار زاویه', en: 'Double-Angle Scoop'}, - image: {id: 'keep-scope-3-0.jpg'}, - price: 1590, - }, - '2': { - id: '2', - title: {fa: 'اسکوپ پروانه', en: 'Helical Scoop'}, - image: {id: 'keep-scope-1-0.jpg'}, - price: 1400, - }, - '3': { - id: '3', - title: {fa: 'اسکوپ دوشیار صاف', en: 'Double-Sided Flat Scoop'}, - image: {id: 'keep-scope-2-0.jpg'}, - price: 1590, - }, - }, - }; - - override render(): unknown { - this._logger.logMethod?.('render'); - - return mapObject(this, this.productStorage?.data, this.render_part_product_card); - } - - protected render_part_product_card(product: Product & {price: number}): unknown { - const langCode = (localeContextConsumer.getValue()?.language ?? 'fa') as Lowercase; - const content: ProductCartContent = { - id: product.id, - title: product.title[langCode] ?? product.title.fa, - imagePath: config.serverContext.cdn + '/large/' + product.image.id, - price: product.price, - }; - return html``; - } -} diff --git a/uniquely/keep-pwa/tsconfig.json b/uniquely/keep-pwa/tsconfig.json deleted file mode 100644 index e87607747..000000000 --- a/uniquely/keep-pwa/tsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - // "moduleResolution": "bundler", - "rootDir": "src", - "outDir": "build", - "noEmit": true, - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - - "include": ["src/**/*.ts", "src/**/*.json"], - "exclude": [], - "references": [ - {"path": "../../core/router"}, - {"path": "../../core/fetch"}, - {"path": "../../core/i18n"}, - {"path": "../../core/type"}, - {"path": "../../core/validator"}, - {"path": "../../core/signal"}, - {"path": "../../core/util"}, - {"path": "../../core/fsm"}, - {"path": "../../core/context"}, - {"path": "../../ui/element"}, - {"path": "../../ui/ui-kit"}, - {"path": "../../ui/pwa-helper"}, - ] -} diff --git a/uniquely/keep-pwa/web-dev-server.config.js b/uniquely/keep-pwa/web-dev-server.config.js deleted file mode 100644 index 9c4e13e1e..000000000 --- a/uniquely/keep-pwa/web-dev-server.config.js +++ /dev/null @@ -1,2 +0,0 @@ -import {config} from '@alwatr/pwa-helper/pwa-dev-server.config.js'; -export default config; diff --git a/uniquely/soffit-pwa/CHANGELOG.md b/uniquely/soffit-pwa/CHANGELOG.md deleted file mode 100644 index 383faa1e2..000000000 --- a/uniquely/soffit-pwa/CHANGELOG.md +++ /dev/null @@ -1,243 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.0.1](https://github.com/AliMD/alwatr/compare/v1.0.0...v1.0.1) (2023-06-21) - -**Note:** Version bump only for package @alwatr/soffit-pwa - -# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14) - -### Bug Fixes - -- **pwa:** build clean flag ([ca324ef](https://github.com/AliMD/alwatr/commit/ca324ef4270e43b2dc4e51574e01aad77ae4abf8)) - -# [0.32.0](https://github.com/AliMD/alwatr/compare/v0.31.0...v0.32.0) (2023-05-27) - -**Note:** Version bump only for package @alwatr/soffit-pwa - -# [0.31.0](https://github.com/AliMD/alwatr/compare/v0.30.0...v0.31.0) (2023-05-08) - -### Bug Fixes - -- build issues ([d3708e3](https://github.com/AliMD/alwatr/commit/d3708e34330871daea85851b54f37462c6773fc4)) -- compatible with new \_addSignalListener signal mixin ([e2be863](https://github.com/AliMD/alwatr/commit/e2be863acd9b99c4fc8f0a81c4efe2ac6db50c39)) -- new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300)) -- **soffit-pwa:** text-field width ([ca3d03b](https://github.com/AliMD/alwatr/commit/ca3d03babe4f2428414819cde884e696ecbed3b1)) - -### Features - -- **soffit-pwa:** add agency card in homePage ([423c71a](https://github.com/AliMD/alwatr/commit/423c71afce1ea66c567a49c960c7199e0f981bd9)) -- **soffit-pwa:** page agency list ([8a4c18f](https://github.com/AliMD/alwatr/commit/8a4c18f7f5163b7c6699b23b09193deca7295d2b)) -- use button content ([a3f3872](https://github.com/AliMD/alwatr/commit/a3f3872c16e2bf5ad99c90cd03563007271fc530)) - -### Performance Improvements - -- make google lighthouse happy ([c025dea](https://github.com/AliMD/alwatr/commit/c025dea4a937ee07411b1605ced8d51cd3bc4ce0)) -- **pwa:** optimize index.html ([e9c2613](https://github.com/AliMD/alwatr/commit/e9c2613d1526f2bc0f2cf4fdd34d276286995197)) -- **soffit-pwa:** import home page without lazy ([f1b37a2](https://github.com/AliMD/alwatr/commit/f1b37a2107eff7a93a6eff4398c08b88159fb84b)) - -# [0.30.0](https://github.com/AliMD/alwatr/compare/v0.29.0...v0.30.0) (2023-03-06) - -### Bug Fixes - -- **com-pwa:** web-dev-server config ([67963a1](https://github.com/AliMD/alwatr/commit/67963a1f84f50a08b98dbd284a0d26c670d6ab96)) -- configs ([00f85f5](https://github.com/AliMD/alwatr/commit/00f85f525f07334544cc9e007c49f2343ba8cec3)) -- **soffit-pwa:** dependencies ([8bc3eee](https://github.com/AliMD/alwatr/commit/8bc3eeebb7e04ca9041239d545db3804268f2282)) -- **soffit-pwa:** import path ([ed03cf9](https://github.com/AliMD/alwatr/commit/ed03cf99e413e6060fad1215bafd86f97e127caa)) -- **soffit-pwa:** issues ([09f0b8a](https://github.com/AliMD/alwatr/commit/09f0b8a0fcfff37ee1e163fd679a3fc4830e90a8)) -- **soffit-pwa:** remove some import ([efb1af9](https://github.com/AliMD/alwatr/commit/efb1af99ba760aba723d11cc9e5c9b5a8df9a792)) -- **soffit-pwa:** set name prop ([2ddb008](https://github.com/AliMD/alwatr/commit/2ddb008510438f9e80642ae72eb28df796629fb6)) -- **soffit-pwa:** set value on radio group option ([17a691a](https://github.com/AliMD/alwatr/commit/17a691ae702400982f56e0167483066e4b34c251)) -- **soffit, com:** tint and elevate ([cb49f18](https://github.com/AliMD/alwatr/commit/cb49f18ecd9ea57918f54a513627e1cb9a58afa6)) -- **soffit:** home page logo ([95868da](https://github.com/AliMD/alwatr/commit/95868da89b55df0f8a46e2dd28ce743542a72d22)) - -### Features - -- **com-pwa:** manifest screenshots ([a060fb5](https://github.com/AliMD/alwatr/commit/a060fb518a926890dba865f9e758fff0a20a98ef)) -- **pwa-helper:** central pwa-dev-server.config.js ([147c7e7](https://github.com/AliMD/alwatr/commit/147c7e7bac17179619cfca153463db74f134ba7b)) -- **soffit-pwa:** about page content ([94a1aea](https://github.com/AliMD/alwatr/commit/94a1aeaab15b4986569416e499d39338234717a7)) -- **soffit-pwa:** context ([d7b9a04](https://github.com/AliMD/alwatr/commit/d7b9a04b3af2fd0e4390f26d89d17dceb8cb5adf)) -- **soffit-pwa:** navigation bar ([7cfa16c](https://github.com/AliMD/alwatr/commit/7cfa16cb366a6386abc61c7e2596d7891fee6fa9)) -- **soffit-pwa:** page 404 ([ec6eb42](https://github.com/AliMD/alwatr/commit/ec6eb42e483dc6d0d0493cdbb7f73d285cd613bd)) -- **soffit:** add sample images ([3b9c146](https://github.com/AliMD/alwatr/commit/3b9c14669054b52ae7adacfe1b0b878b493d0727)) -- **ui-kit:** move radio group from soffit-pwa ([0d5786f](https://github.com/AliMD/alwatr/commit/0d5786f4f7cfc950e988e8f35c9c9e80f53cac23)) - -# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10) - -### Bug Fixes - -- compatible with new esbuild api ([e23638e](https://github.com/AliMD/alwatr/commit/e23638ed80a871fef12d5d75aa3eb3824c7cdabd)) -- lit-analyzer version ([199532d](https://github.com/AliMD/alwatr/commit/199532de48f0dc0e8470d11c6a6544da1c9ddf6c)) -- **pwa-helper:** version and old workbox config ([3646f14](https://github.com/AliMD/alwatr/commit/3646f144669b8b46266833b19fd1aff064b13ad8)) -- **pwa-helper:** version and old workbox config ([080e260](https://github.com/AliMD/alwatr/commit/080e260fe86ba4f134f115b391504504c7dff871)) -- **pwa:** add blank service-worker.js for debug ([4894547](https://github.com/AliMD/alwatr/commit/4894547d9db9ccb548fd8f39add2c9777ebc23af)) -- **pwa:** clean old l10n resources ([7a48136](https://github.com/AliMD/alwatr/commit/7a4813665de64110baf4b4bc183b1a8a84012824)) -- **radio-group:** render issue ([a61cdb5](https://github.com/AliMD/alwatr/commit/a61cdb58349e3ca34de189bf8fc46079ac21b4d8)) -- **soffit-pwa:** access constructor in child class ([2d080d6](https://github.com/AliMD/alwatr/commit/2d080d6b9101ba18f8d08013ed10b96e8a940637)) -- **soffit-pwa:** alwatr-pwa clean form page and fix mobile style ([13c9731](https://github.com/AliMD/alwatr/commit/13c9731e3e1f1a79719e38b052649f65e803d5ef)) -- **soffit-pwa:** api config ([4b40129](https://github.com/AliMD/alwatr/commit/4b40129c3491627a053f2c7e31e2bb4063989dd8)) -- **soffit-pwa:** api token config ([02c69c8](https://github.com/AliMD/alwatr/commit/02c69c893d90bc1188e0aaa2a9edc1ab964c0c5d)) -- **soffit-pwa:** app config and temp service worker ([f0d61f8](https://github.com/AliMD/alwatr/commit/f0d61f8827bf707c5e2fc4523f62f8fd601acb6f)) -- **soffit-pwa:** build issue ([9294c58](https://github.com/AliMD/alwatr/commit/9294c58d970c7bd55cf93d4ed56d47c1510de358)) -- **soffit-pwa:** cleanup form ([e85b8c9](https://github.com/AliMD/alwatr/commit/e85b8c964a02f1058cd0e2eab8ce10af58d3eb41)) -- **soffit-pwa:** compatible with new route ([fbf3c56](https://github.com/AliMD/alwatr/commit/fbf3c560efd17b62d42e61f35de425ca09e758bc)) -- **soffit-pwa:** def lang issue ([d0a1242](https://github.com/AliMD/alwatr/commit/d0a12421e21c751c2613c7fdb5ad6e9bbf3d17fe)) -- **soffit-pwa:** DirectionMixin for all classes user i18n ([c5cedeb](https://github.com/AliMD/alwatr/commit/c5cedeb7a022a114c1e71e3427e702fa667d01a9)) -- **soffit-pwa:** DirectionMixin for all classes user i18n ([cd00ee9](https://github.com/AliMD/alwatr/commit/cd00ee9e47ebbef35e88ec861feb58fc7bacccaa)) -- **soffit-pwa:** director logging ([01a5b6e](https://github.com/AliMD/alwatr/commit/01a5b6e9bb3a92f3e3093c52b56a5875fdb44ab6)) -- **soffit-pwa:** director logging ([76f6de5](https://github.com/AliMD/alwatr/commit/76f6de5ac58103a17b930a0d61b7e3d0b3265d6d)) -- **soffit-pwa:** director logging ([5a1f49f](https://github.com/AliMD/alwatr/commit/5a1f49f9ab7ff4c761681097d6019b8bfd3e23d0)) -- **soffit-pwa:** director logging ([67d67a9](https://github.com/AliMD/alwatr/commit/67d67a909b9d3b740428b095c9fb6afb65fd7538)) -- **soffit-pwa:** form animation ([d3b340d](https://github.com/AliMD/alwatr/commit/d3b340df7c5cae7aef8c44e9ef9afa4168fb4664)) -- **soffit-pwa:** import ([3ba4c5c](https://github.com/AliMD/alwatr/commit/3ba4c5cfdcb14a4632c658716c12b45130d76dbd)) -- **soffit-pwa:** LocalizeMixin for all classes user i18n ([3864fa2](https://github.com/AliMD/alwatr/commit/3864fa25cc8cfb7ed9d9c8e10c7731989d4aeeaf)) -- **soffit-pwa:** LocalizeMixin for all classes user i18n ([36389fb](https://github.com/AliMD/alwatr/commit/36389fb2d70964fb30a1a7e5c714cb40d6d1d352)) -- **soffit-pwa:** logo ([78d8024](https://github.com/AliMD/alwatr/commit/78d80248497b496b6af016eb3064cc225d77c1db)) -- **soffit-pwa:** page form styles ([4bc52af](https://github.com/AliMD/alwatr/commit/4bc52af5c0d95ba431d099a513ef913474678c56)) -- **soffit-pwa:** page form styles ([3f6f47c](https://github.com/AliMD/alwatr/commit/3f6f47cca25a6ba776242666b84eb47c87c7ea94)) -- **soffit-pwa:** querySelector type ([4d28e60](https://github.com/AliMD/alwatr/commit/4d28e6076b501d1148fffa3fc8a60af2a59175a2)) -- **soffit-pwa:** radio group options ([b860d61](https://github.com/AliMD/alwatr/commit/b860d612323e6622f19229b804d235b2ee704c78)) -- **soffit-pwa:** radio group options ([984f2d3](https://github.com/AliMD/alwatr/commit/984f2d33c5c4ddf6d4d9017971fa51dd30417b6f)) -- **soffit-pwa:** remove additional mixing ([e3cf679](https://github.com/AliMD/alwatr/commit/e3cf67968523c48e691f52a534393d278e6e526d)) -- **soffit-pwa:** remove additional mixing ([2ad80c0](https://github.com/AliMD/alwatr/commit/2ad80c05aa0a2579a1eecf538f100d841332c3f6)) -- **soffit-pwa:** remove direction mixing from page home ([295e782](https://github.com/AliMD/alwatr/commit/295e7826d5e3dab66aa3156188ae2b83dbe3a80d)) -- **soffit-pwa:** remove direction mixing from page home ([a8d755d](https://github.com/AliMD/alwatr/commit/a8d755dc1ae460c8fae1c2a7118e591d91e4b7a0)) -- **soffit-pwa:** remove submit at firstUpdated ([60413d1](https://github.com/AliMD/alwatr/commit/60413d1a4aef2a6ff013caf50d56d3d63d46e201)) -- **soffit-pwa:** review ([8cdc94e](https://github.com/AliMD/alwatr/commit/8cdc94e015982a51e24381a7a3455212711b3c4a)) -- **soffit-pwa:** set name on radio-group ([fd90c4d](https://github.com/AliMD/alwatr/commit/fd90c4daf74d50269ed93f84303d3586888fd991)) -- **soffit-pwa:** set name on radio-group ([9dfb6f4](https://github.com/AliMD/alwatr/commit/9dfb6f40e057e5846452dbe7bc8454bb2fea019d)) -- **soffit-pwa:** set name on radio-group ([7037667](https://github.com/AliMD/alwatr/commit/703766711c99e332948b038895bba1afdbd3c94f)) -- **soffit-pwa:** submit form director ([5f564aa](https://github.com/AliMD/alwatr/commit/5f564aa421d9d0891cd0756404e323a8718878ae)) -- **soffit-pwa:** submit form director ([e2cd673](https://github.com/AliMD/alwatr/commit/e2cd67388cc7877064c29369328449f09736852c)) -- **soffit-pwa:** submit form response check ([9b17ff0](https://github.com/AliMD/alwatr/commit/9b17ff0772a0473a451aab3640c074da7e25e7aa)) -- **soffit-pwa:** submit form response check ([59edcc4](https://github.com/AliMD/alwatr/commit/59edcc495beebd3149234184a5f44801e717f92e)) -- **soffit/form:** close animation lag ([a0b3f20](https://github.com/AliMD/alwatr/commit/a0b3f203df88cae121d39c356042dd7cc2c6d1a0)) -- **soffit:** build issue ([cdf43f8](https://github.com/AliMD/alwatr/commit/cdf43f89250cbb760f144649e0b8c743dac5e4f8)) -- **soffit:** build issue ([0973181](https://github.com/AliMD/alwatr/commit/0973181b19417ebd7b8994ba15d020c6890e8629)) -- **soffit:** clean old snackbar demo ([8086ac5](https://github.com/AliMD/alwatr/commit/8086ac54515e43815188632d6bd8964e609f8136)) -- **soffit:** content fa ([ad8a18a](https://github.com/AliMD/alwatr/commit/ad8a18a817c6a4b996fbb4dc02bf5e6559809e08)) -- **soffit:** content fa ([eee38dd](https://github.com/AliMD/alwatr/commit/eee38ddcc2835c642894641e4678954936e14a7e)) -- **soffit:** import config ([f56de8a](https://github.com/AliMD/alwatr/commit/f56de8af516014dfbe6376e1b8440113f9ccbe35)) -- **soffit:** import json issue ([a155448](https://github.com/AliMD/alwatr/commit/a1554487e867362bcb097b51bb3345c08c07bfa1)) -- **soffit:** localization bug ([c3abc90](https://github.com/AliMD/alwatr/commit/c3abc90a513a77aed9b451dff643b7199d47d8f7)) -- **soffit:** localization bug ([b7f9215](https://github.com/AliMD/alwatr/commit/b7f9215901584d8e50433ae7b7a7dfdbc9149d2f)) -- **soffit:** localization bug ([2134efb](https://github.com/AliMD/alwatr/commit/2134efbe04ed373cb85b49afab7c9ca837224307)) -- **soffit:** localization bug ([fd9d485](https://github.com/AliMD/alwatr/commit/fd9d4855a1f60e035cdd8e09826dc43b5aa72c8a)) -- **soffit:** localize keys ([bebfa9f](https://github.com/AliMD/alwatr/commit/bebfa9fc2d56e5ebad1e4c139950b3cdb8036af1)) -- **soffit:** localize keys ([c9c5d2b](https://github.com/AliMD/alwatr/commit/c9c5d2be0f0283abf0b939eb84c7ed6b9386e9bf)) -- **soffit:** localize keys ([a90a90a](https://github.com/AliMD/alwatr/commit/a90a90a451c375ff6d306db92f11a59d0b906245)) -- **soffit:** localize keys ([6c81476](https://github.com/AliMD/alwatr/commit/6c814762def3f91415f9a0216ee7fe4e86cdd9f1)) -- **soffit:** localize keys ([b811152](https://github.com/AliMD/alwatr/commit/b811152e56b40d73d46cfbd92fc0e1fb1ecfd7fa)) -- **soffit:** localize keys ([d934369](https://github.com/AliMD/alwatr/commit/d934369552cfb52997b7c115603a2fb0b3437b0e)) -- **soffit:** remove form prop ([e7099da](https://github.com/AliMD/alwatr/commit/e7099da4c440d19a54be801328dd9761fd2af8f9)) -- **soffit:** remove junk ([f13fc2a](https://github.com/AliMD/alwatr/commit/f13fc2a230e2199cb5dcef04b2d73f532d7ba7ae)) -- **soffit:** wrong import ([4fc0123](https://github.com/AliMD/alwatr/commit/4fc0123c781d5e14a06b18080e453cdca771aaf9)) -- **typescript:** rollback to 4.9.5 ([cc30f85](https://github.com/AliMD/alwatr/commit/cc30f8502bf95868ff41ba986120b2842acba36b)) -- versions ([f7549ac](https://github.com/AliMD/alwatr/commit/f7549acca75c249e435aaf8597655850eed43961)) - -### Features - -- debug all renders ([47e1b38](https://github.com/AliMD/alwatr/commit/47e1b387df7fcf59e61e8720aef2d4c88a3ded2c)) -- debug all renders ([73a0d34](https://github.com/AliMD/alwatr/commit/73a0d3483b7c42ab0a6247721073b81a01f7b258)) -- **fetch:** clientId on service request ([9575a1d](https://github.com/AliMD/alwatr/commit/9575a1d595a0a4757581a29a66837cbe4be46ed3)) -- **fields:** name property ([37d9803](https://github.com/AliMD/alwatr/commit/37d9803a7c20033e0b8f99ea5590c7f1ebdf083f)) -- **icon-button:** new content prop with click signal event ([bb5dae6](https://github.com/AliMD/alwatr/commit/bb5dae6048fcacb4a4e70aab514e4900fd5a96ea)) -- **image-box:** selected style ([c092e2d](https://github.com/AliMD/alwatr/commit/c092e2d0f8428c0ddd9596346d073275298d14ab)) -- **pwa-helper:** new package ([a77c049](https://github.com/AliMD/alwatr/commit/a77c0491a6337cb48b42a667a0ee67c7f9f150fa)) -- **pwa:** demo snackbar ([bf031e1](https://github.com/AliMD/alwatr/commit/bf031e197406284d657c3e2abc0d8f6cbe1fe2a8)) -- **soffit-form:** load api server info from config file ([aa3b294](https://github.com/AliMD/alwatr/commit/aa3b294c870b8000eaf34fde61feada46b4b4af5)) -- **soffit-form:** submit form ([dc20082](https://github.com/AliMD/alwatr/commit/dc20082df9346333876d45153f36f70785a20032)) -- **soffit-pwa:** activityType on page form ([6ca313b](https://github.com/AliMD/alwatr/commit/6ca313bb336ca24bfcf2be6ddd06771e5fc73587)) -- **soffit-pwa:** activityType on page form ([ed738d0](https://github.com/AliMD/alwatr/commit/ed738d07d31fc8c3dfe98c99c86e7971446b6152)) -- **soffit-pwa:** agency cards ([99d421d](https://github.com/AliMD/alwatr/commit/99d421df511c5fdd6436e7e8232546772ad68af8)) -- **soffit-pwa:** bigger font for success message in form ([6de609e](https://github.com/AliMD/alwatr/commit/6de609e06e22a2b828d57d37effa77b5e1e1ac6a)) -- **soffit-pwa:** button style ([767bda7](https://github.com/AliMD/alwatr/commit/767bda7b7be6e3720b6f5ed205ecf4758bc5cfed)) -- **soffit-pwa:** button style ([a668b67](https://github.com/AliMD/alwatr/commit/a668b675fc9988801d765f202039337340564594)) -- **soffit-pwa:** compatible with new form api ([29bd85a](https://github.com/AliMD/alwatr/commit/29bd85a31e47e3c730c3c01730e0d5bc511c3c68)) -- **soffit-pwa:** componentize fieldset ([3d0f8d5](https://github.com/AliMD/alwatr/commit/3d0f8d591807199f0d6fb2cde3d1a9eec40af9c7)) -- **soffit-pwa:** content loader ([f97c6b8](https://github.com/AliMD/alwatr/commit/f97c6b8ca2ff95fc8ac31025a3d9a664555aeb1d)) -- **soffit-pwa:** content loader ([a53235e](https://github.com/AliMD/alwatr/commit/a53235e9f7c88ddc9de5046a86cd44c552764ca6)) -- **soffit-pwa:** enhance home page and use new lottery box ([042095f](https://github.com/AliMD/alwatr/commit/042095f0a887e2dd5980dd6f6bbad22c4cff199d)) -- **soffit-pwa:** form close animation ([ec6fbe4](https://github.com/AliMD/alwatr/commit/ec6fbe4995c006cf8785a289e4917fab8c520f8b)) -- **soffit-pwa:** form data gathering and submit process ([1a81dcc](https://github.com/AliMD/alwatr/commit/1a81dcc5dfc2e7fe57c57850b974c0204ffa6bdd)) -- **soffit-pwa:** i18n loader ([1fcac98](https://github.com/AliMD/alwatr/commit/1fcac986182d510407e2b792743c15928b80c3ff)) -- **soffit-pwa:** improve form styles ([f278802](https://github.com/AliMD/alwatr/commit/f278802a29e3dc49d420e67cf409509cb4b8266b)) -- **soffit-pwa:** improve form styles ([e553a00](https://github.com/AliMD/alwatr/commit/e553a0023e44b6c9d7d132ef51f09720e940fdb6)) -- **soffit-pwa:** json i18n resource ([2e98a93](https://github.com/AliMD/alwatr/commit/2e98a93c1f8fc84a9301123c41cf030887cb8eda)) -- **soffit-pwa:** l18e director ([1190e7c](https://github.com/AliMD/alwatr/commit/1190e7cb00a65a6eed0d770d6f08aae53c63fd82)) -- **soffit-pwa:** l18e director ([58d5dea](https://github.com/AliMD/alwatr/commit/58d5dea2e8434b8f8a3be0f05eb9fe2bb687e6d2)) -- **soffit-pwa:** load config ([e78fc58](https://github.com/AliMD/alwatr/commit/e78fc58762a84bfddb6e7a0b10c67900d9d7a887)) -- **soffit-pwa:** load content on radio group ([ae54953](https://github.com/AliMD/alwatr/commit/ae54953917a0afcd146fa7a3d11532b2d598eb9c)) -- **soffit-pwa:** load content on radio group ([2cbb93d](https://github.com/AliMD/alwatr/commit/2cbb93d88041aa7570091bf7c7064a6b502c6ebd)) -- **soffit-pwa:** localize messages ([6f780fd](https://github.com/AliMD/alwatr/commit/6f780fd51ab4423fd8cde0a12a8626adb8043db8)) -- **soffit-pwa:** localize messages ([5f18c7c](https://github.com/AliMD/alwatr/commit/5f18c7c33e0cd4223ecde2fb91f05dba557326d6)) -- **soffit-pwa:** lottery box element ([91fc844](https://github.com/AliMD/alwatr/commit/91fc844e6bf1222bddbb0f72be73697467304700)) -- **soffit-pwa:** lottery code registration form ([71e788c](https://github.com/AliMD/alwatr/commit/71e788ce8be18f38e50188e1b3ffd752cb9e5b1d)) -- **soffit-pwa:** lottery code registration form ([b3a9f3a](https://github.com/AliMD/alwatr/commit/b3a9f3a5771bd2206a7b884532e113fefd5359ac)) -- **soffit-pwa:** lottery form element ([8a2a346](https://github.com/AliMD/alwatr/commit/8a2a3462886addbc14b3a1d62f2f0f4e4871f172)) -- **soffit-pwa:** new card in home page ([08300fb](https://github.com/AliMD/alwatr/commit/08300fb30a0e04aee15642ad1739982998f98f5a)) -- **soffit-pwa:** new home content structure ([6127042](https://github.com/AliMD/alwatr/commit/612704240136b7b7aa519067810afc0b8f2a928a)) -- **soffit-pwa:** page form ([00e51eb](https://github.com/AliMD/alwatr/commit/00e51eb9f974342c7d8463043ea70745255c2e6d)) -- **soffit-pwa:** page form ([b856f49](https://github.com/AliMD/alwatr/commit/b856f49cd9cc015e04c190340e043828c5122400)) -- **soffit-pwa:** product description ([6f1b160](https://github.com/AliMD/alwatr/commit/6f1b1605df20627ae8f06df57aed618283d439d2)) -- **soffit-pwa:** product description ([5aa6aaa](https://github.com/AliMD/alwatr/commit/5aa6aaa6c95d8693f8ec67335e3186308b93eb08)) -- **soffit-pwa:** product page ([090a615](https://github.com/AliMD/alwatr/commit/090a615196eb145b4c877fc8cb59e2fe06801403)) -- **soffit-pwa:** product page content provider ([084883d](https://github.com/AliMD/alwatr/commit/084883da9b18890f1ec227ad2a78e4b13c00500d)) -- **soffit-pwa:** product page photos ([584f160](https://github.com/AliMD/alwatr/commit/584f160725cb80f0fd7fa0cdea162d8d6f4035b5)) -- **soffit-pwa:** ProductType ([875a4de](https://github.com/AliMD/alwatr/commit/875a4de63c53e58709421d17f1d8f9945ae5acb4)) -- **soffit-pwa:** radio group i18n ([65e8e96](https://github.com/AliMD/alwatr/commit/65e8e9634b49f28c94d3bef9429347dfb0cc125b)) -- **soffit-pwa:** radio group i18n ([633352b](https://github.com/AliMD/alwatr/commit/633352beede872a97ab8f636b725b91eede753d8)) -- **soffit-pwa:** radio-group value ([fdbc609](https://github.com/AliMD/alwatr/commit/fdbc6097484049d040133fb9d1e38c42db564e29)) -- **soffit-pwa:** remove agency cards on en locale ([4b99377](https://github.com/AliMD/alwatr/commit/4b99377dd677265c5f0faa8b16b2f277b801170f)) -- **soffit-pwa:** remove agency cards on en locale ([35ab8a1](https://github.com/AliMD/alwatr/commit/35ab8a1160e06ab21c05b4d3540c6ba4b8cb0959)) -- **soffit-pwa:** sample product content ([23f475e](https://github.com/AliMD/alwatr/commit/23f475e2518c6b1f74a6046ac11e71431d4ebb73)) -- **soffit-pwa:** send deviceId in request ([4b3c52b](https://github.com/AliMD/alwatr/commit/4b3c52b5b50a26f4fd65b55d695ca25503f9b918)) -- **soffit-pwa:** send deviceId in request ([714dd3b](https://github.com/AliMD/alwatr/commit/714dd3b4f43acb53f4215e8c268aec5571802ac7)) -- **soffit-pwa:** send lottry form data to server ([42398cf](https://github.com/AliMD/alwatr/commit/42398cfb5f44ede5121c2b413858efab609ac9b4)) -- **soffit-pwa:** separate content file ([58ed218](https://github.com/AliMD/alwatr/commit/58ed218fd50c5e609d13cb8b0a4f492d8b28c559)) -- **soffit-pwa:** set correct storage on form ([6b25370](https://github.com/AliMD/alwatr/commit/6b25370f84baab48d9db74e065804348f0ab8f2f)) -- **soffit-pwa:** supply-chain form ([a4752d0](https://github.com/AliMD/alwatr/commit/a4752d0ea3c3417eb1a50a2fed54b43ef5389b58)) -- **soffit-pwa:** use alwar util ([936a589](https://github.com/AliMD/alwatr/commit/936a5894f464f927f819209fc85cc4d4c5d97f2d)) -- **soffit-pwa:** use snackbar for form ([545403b](https://github.com/AliMD/alwatr/commit/545403badf2b5722ac0dcc942fd24637628a1207)) -- **soffit-pwa:** wide card for main branch ([7f5bfd3](https://github.com/AliMD/alwatr/commit/7f5bfd3727230a0cb9e33a1f3e0418d41552f22f)) -- **soffit-pwa:** youtube & contact us card ([92d9419](https://github.com/AliMD/alwatr/commit/92d9419ba5a08eae35deaf99878a61c3406534e6)) -- **soffit-pwa:** youtube & contact us card ([faa6de0](https://github.com/AliMD/alwatr/commit/faa6de03c906fd16c8f2ddc206482729dea3f4f2)) -- **soffit, snackbar:** enhance spacing ([4d421da](https://github.com/AliMD/alwatr/commit/4d421da25c691e2cd89a32d9ccf6c05fef787ba4)) -- **soffit/form:** expand/collapse animation ([0b3cf10](https://github.com/AliMD/alwatr/commit/0b3cf10350901de5973b54a7b6fdbc83d4243e9b)) -- **soffit/form:** improve animation and clear extra styles ([b107c54](https://github.com/AliMD/alwatr/commit/b107c542242e6e63ab8f52bb3dc6f0ca33062405)) -- **soffit/form:** validator ([8b9431f](https://github.com/AliMD/alwatr/commit/8b9431fdcc678fd57adbf2332d29508a7d0e21e4)) -- **soffit/lottery-box:** success color ([f050d6d](https://github.com/AliMD/alwatr/commit/f050d6de7d39f29bec487d750b5f1e7b71702c21)) -- **soffit/page-home:** footer styles ([00fd0b3](https://github.com/AliMD/alwatr/commit/00fd0b327537fbc5cb367cdc860fc9cc71d1d6d8)) -- **soffit/page-home:** footer styles ([60f4e0a](https://github.com/AliMD/alwatr/commit/60f4e0ae33a46a76a2316c90ff3b37adb901d165)) -- **soffit:** enhance content and styles ([55b8d2f](https://github.com/AliMD/alwatr/commit/55b8d2f2bde83123f26a90f5fcccc2c54a252b3f)) -- **soffit:** enhance develope scripts ([d4b5f5b](https://github.com/AliMD/alwatr/commit/d4b5f5b233f2da196192ad03ef755abda0dcb3cf)) -- **soffit:** enhance develope scripts ([b6f09c4](https://github.com/AliMD/alwatr/commit/b6f09c49ef4b8dc65656b14d5a3e4dd64e38972e)) -- **soffit:** form direction ([4db9d9a](https://github.com/AliMD/alwatr/commit/4db9d9abbb84431cd2815f5f7fe5909213beb39d)) -- **soffit:** form submit style ([3a86b71](https://github.com/AliMD/alwatr/commit/3a86b71d1912e19d9b0ef37c16a5fda64ac1bf7a)) -- **soffit:** home page top app bar ([4beedab](https://github.com/AliMD/alwatr/commit/4beedab5f925654a59f9561e1820465fb7d976ca)) -- **soffit:** lazy page loading ([c1a1d5f](https://github.com/AliMD/alwatr/commit/c1a1d5fc950d8773ff94a348aadf2ba390bc77a6)) -- **soffit:** localize phone number ([29c2abb](https://github.com/AliMD/alwatr/commit/29c2abb7fd29df92521829f02121247eb85fa3d7)) -- **soffit:** localize phone number ([2c7dfbb](https://github.com/AliMD/alwatr/commit/2c7dfbb7cd0b35257ec3257463ed40798c6329a5)) -- **top-app-bar:** new top app abr element ([753735f](https://github.com/AliMD/alwatr/commit/753735ff0c9cb0e17a4160a0293f1679a684b4c5)) - -# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20) - -### Bug Fixes - -- **icon-box:** target ([e108661](https://github.com/AliMD/alwatr/commit/e1086612704f8763daea1e1b0c58d21e580a4d66)) -- **soffit-pwa:** description ([ab7602b](https://github.com/AliMD/alwatr/commit/ab7602b90d8a6fa62e0e34109dd42f01e248cfc2)) -- **soffit-pwa:** manifest start_url, default_locale, screenshots ([7aad1fb](https://github.com/AliMD/alwatr/commit/7aad1fb7f2dc8eb290ddbd51f05335f9c3d8fc77)) -- **soffit-pwa:** screenshot path ([e9c335a](https://github.com/AliMD/alwatr/commit/e9c335a5088e8f8fc14d8b0f208caa5190e02021)) -- **soffit-pwa:** scrollbar gap ([188e9ef](https://github.com/AliMD/alwatr/commit/188e9ef27ffda13b37a881997e74ee80a55b1f38)) - -### Features - -- **soffit-pwa:** catalogue link ([93ad66c](https://github.com/AliMD/alwatr/commit/93ad66c9728a2809dcb044b164dc505177ad9f68)) -- **soffit-pwa:** formafzar link ([b94e4bf](https://github.com/AliMD/alwatr/commit/b94e4bf87338448021534d27262638fe24cacfd9)) -- **soffit-pwa:** manifest.webmanifest name and new screenshots ([9f1c556](https://github.com/AliMD/alwatr/commit/9f1c55638c0ce40357056b0a5df1eafa0d80799f)) -- **soffit-pwa:** page home link ([1625fd7](https://github.com/AliMD/alwatr/commit/1625fd7991dfe5b91078d9fb475ef9f39e2aaaf2)) -- **soffit-pwa:** theme color ([a4fc69c](https://github.com/AliMD/alwatr/commit/a4fc69cd382843ea1adbf4eb4ff7aabd5eb269a1)) -- **soffit/page-home:** app version ([3316766](https://github.com/AliMD/alwatr/commit/3316766f7470b1648d9ec7e4c8feb52996113713)) -- **ui-kit:** downloadable link on icon-box ([e249dba](https://github.com/AliMD/alwatr/commit/e249dba12c34665792ccd1c4215cb50e5e6a00e2)) diff --git a/uniquely/soffit-pwa/README.md b/uniquely/soffit-pwa/README.md deleted file mode 100644 index 75b03389c..000000000 --- a/uniquely/soffit-pwa/README.md +++ /dev/null @@ -1 +0,0 @@ -# SOFFIT Company Site diff --git a/uniquely/soffit-pwa/esbuild.mjs b/uniquely/soffit-pwa/esbuild.mjs deleted file mode 100755 index d28587566..000000000 --- a/uniquely/soffit-pwa/esbuild.mjs +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -import '../../ui/pwa-helper/esbuild.mjs'; diff --git a/uniquely/soffit-pwa/package.json b/uniquely/soffit-pwa/package.json deleted file mode 100644 index 527bc06f1..000000000 --- a/uniquely/soffit-pwa/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@alwatr/soffit-pwa", - "version": "1.0.0", - "description": "A good ceiling is vital. But a SOFFIT ceiling can be an inspiration.", - "type": "module", - "author": "S. Ali Mihandoost (https://ali.mihandoost.com)", - "private": true, - "engines": { - "node": ">=18.13.0", - "npm": ">=8.0.0", - "yarn": ">=1.22.0" - }, - "browserslist": "> 1.5%, not dead", - "repository": { - "type": "git", - "url": "https://github.com/AliMD/alwatr", - "directory": "ui/soffit-pwa" - }, - "scripts": { - "b": "yarn build-dev", - "cb": "run-s clean build-dev", - "s": "yarn start", - "w": "yarn watch", - "start": "NODE_OPTIONS=--enable-source-maps run-s clean build serve", - "clean": "rm -rf dist build .tsbuildinfo", - "build": "yarn build:es --clean", - "build-dev": "run-s build:root build:tsc \"build:es --clean --debug\"", - "build:es": "./esbuild.mjs", - "build:tsc": "tsc --build", - "build:root": "cd ../../ && yarn build:ts", - "serve": "wds", - "watch": "run-p watch:root watch:es serve", - "watch:es": "yarn build:es --clean --watch --debug", - "watch:root": "cd ../../ && yarn watch:ts" - } -} diff --git a/uniquely/soffit-pwa/res/config.js b/uniquely/soffit-pwa/res/config.js deleted file mode 100644 index 9119543a7..000000000 --- a/uniquely/soffit-pwa/res/config.js +++ /dev/null @@ -1,4 +0,0 @@ -window.appConfig = { - api: '/api/v0', - token: '8aa2d2321e0969f0c4865fac2bd48c56fcbbe4e3fb9d491cf13dcdf497ee4499', -}; diff --git a/uniquely/soffit-pwa/res/image/favicon.ico b/uniquely/soffit-pwa/res/image/favicon.ico deleted file mode 100644 index 9da7cf637..000000000 Binary files a/uniquely/soffit-pwa/res/image/favicon.ico and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/icon-180.png b/uniquely/soffit-pwa/res/image/icon-180.png deleted file mode 100644 index 59db93f16..000000000 Binary files a/uniquely/soffit-pwa/res/image/icon-180.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/icon-192-maskable.png b/uniquely/soffit-pwa/res/image/icon-192-maskable.png deleted file mode 100644 index dfe9b0cc7..000000000 Binary files a/uniquely/soffit-pwa/res/image/icon-192-maskable.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/icon-192.png b/uniquely/soffit-pwa/res/image/icon-192.png deleted file mode 100644 index 0fce9f136..000000000 Binary files a/uniquely/soffit-pwa/res/image/icon-192.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/icon-512-maskable.png b/uniquely/soffit-pwa/res/image/icon-512-maskable.png deleted file mode 100644 index d34372521..000000000 Binary files a/uniquely/soffit-pwa/res/image/icon-512-maskable.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/icon-512.png b/uniquely/soffit-pwa/res/image/icon-512.png deleted file mode 100644 index 3b628c6dd..000000000 Binary files a/uniquely/soffit-pwa/res/image/icon-512.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/screenshot-1.jpg b/uniquely/soffit-pwa/res/image/screenshot-1.jpg deleted file mode 100644 index ef68a9001..000000000 Binary files a/uniquely/soffit-pwa/res/image/screenshot-1.jpg and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/screenshot-1.png b/uniquely/soffit-pwa/res/image/screenshot-1.png deleted file mode 100644 index 0729da523..000000000 Binary files a/uniquely/soffit-pwa/res/image/screenshot-1.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/screenshot-2.jpg b/uniquely/soffit-pwa/res/image/screenshot-2.jpg deleted file mode 100644 index 3baf92c27..000000000 Binary files a/uniquely/soffit-pwa/res/image/screenshot-2.jpg and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/screenshot-2.png b/uniquely/soffit-pwa/res/image/screenshot-2.png deleted file mode 100644 index 0a370233e..000000000 Binary files a/uniquely/soffit-pwa/res/image/screenshot-2.png and /dev/null differ diff --git a/uniquely/soffit-pwa/res/image/soffit.svg b/uniquely/soffit-pwa/res/image/soffit.svg deleted file mode 100644 index 516f72464..000000000 --- a/uniquely/soffit-pwa/res/image/soffit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/uniquely/soffit-pwa/res/index.html b/uniquely/soffit-pwa/res/index.html deleted file mode 100644 index 580a4031f..000000000 --- a/uniquely/soffit-pwa/res/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - بازرگانی سافیت - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - درحال بارگذاری... - - - - - - - diff --git a/uniquely/soffit-pwa/res/manifest.webmanifest b/uniquely/soffit-pwa/res/manifest.webmanifest deleted file mode 100644 index df7086102..000000000 --- a/uniquely/soffit-pwa/res/manifest.webmanifest +++ /dev/null @@ -1,32 +0,0 @@ -{ - "short_name": "بازرگانی سافیت", - "name": "بازرگانی سافیت", - "description": "مجموعه تولیدی بازرگانی سافیت, تولید کننده عمده محصولات DRY WALL ، سازه ۶۰ کلیک، تایل کچی 60*60 و روکش P.V.C", - "start_url": "/", - "display": "standalone", - "theme_color": "#2b4f9c", - "background_color": "#faf8ff", - "orientation": "portrait", - "default_locale": "fa", - "icons": [ - {"src": "/image/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable"}, - {"src": "/image/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable"}, - {"src": "/image/favicon.ico", "type": "image/x-icon", "sizes": "32x32"}, - {"src": "/image/icon-192.png", "type": "image/png", "sizes": "192x192"}, - {"src": "/image/icon-512.png", "type": "image/png", "sizes": "512x512"} - ], - "screenshots": [ - { - "src": "/image/screenshot-1.jpg", - "sizes": "414x896", - "type": "image/jpg", - "label": "Soffit PWA (Dark Theme)" - }, - { - "src": "/image/screenshot-2.jpg", - "sizes": "414x896", - "type": "image/jpg", - "label": "Soffit PWA (Light Theme)" - } - ] -} diff --git a/uniquely/soffit-pwa/res/robots.txt b/uniquely/soffit-pwa/res/robots.txt deleted file mode 100644 index c2a49f4fb..000000000 --- a/uniquely/soffit-pwa/res/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/uniquely/soffit-pwa/res/service-worker.js b/uniquely/soffit-pwa/res/service-worker.js deleted file mode 100644 index 64a5d005d..000000000 --- a/uniquely/soffit-pwa/res/service-worker.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Service worker not build in development mode.') diff --git a/uniquely/soffit-pwa/src/alwatr-pwa.ts b/uniquely/soffit-pwa/src/alwatr-pwa.ts deleted file mode 100644 index 2fa476453..000000000 --- a/uniquely/soffit-pwa/src/alwatr-pwa.ts +++ /dev/null @@ -1,3 +0,0 @@ -// TODO: rename me to index -import './manager/index.js'; -import './ui/alwatr-pwa.js'; diff --git a/uniquely/soffit-pwa/src/config.ts b/uniquely/soffit-pwa/src/config.ts deleted file mode 100644 index f5a517ff2..000000000 --- a/uniquely/soffit-pwa/src/config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {getConfKey} from '@alwatr/pwa-helper/config.js'; - -export const config = { - api: getConfKey('api'), - token: getConfKey('token'), -}; diff --git a/uniquely/soffit-pwa/src/content/agency-page-en.ts b/uniquely/soffit-pwa/src/content/agency-page-en.ts deleted file mode 100644 index b99b8b14d..000000000 --- a/uniquely/soffit-pwa/src/content/agency-page-en.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable max-len */ -import type {PageAgencyContent} from '../type.js'; - -export const agencyPageContent: PageAgencyContent = { - topAppBar: { - type: 'center', - headline: 'Soffit Agency List', - startIcon: {icon: 'menu-outline', flipRtl: true}, - }, - - agencyList: [], -}; diff --git a/uniquely/soffit-pwa/src/content/agency-page-fa.ts b/uniquely/soffit-pwa/src/content/agency-page-fa.ts deleted file mode 100644 index ec42fb1ee..000000000 --- a/uniquely/soffit-pwa/src/content/agency-page-fa.ts +++ /dev/null @@ -1,254 +0,0 @@ -/* eslint-disable max-len */ -import {replaceNumber} from '@alwatr/i18n'; - -import type {PageAgencyContent} from '../type.js'; - -export const agencyPageContent: PageAgencyContent = { - topAppBar: { - type: 'center', - headline: 'لیست نمایندگی‌های سافیت', - startIcon: {icon: 'menu-outline', flipRtl: true}, - }, - - agencyList: [ - { - elevated: 1, - stated: true, - icon: 'ribbon-outline', - headline: 'نمایندگی‌ها', - description: 'لیست نمایندگی‌ها سافیت در سراسر کشور', - wide: true, - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'شعبه مرکزی', - slot: ` -
    دفتر مرکزی
    -
    ${replaceNumber('0915 301 4404')}
    - `, - href: 'tel:+989153014404', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'کردستان', - slot: ` -
    آقای صفایی
    -
    ${replaceNumber('0914 381 3925')}
    - `, - href: 'tel:+989143813925', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'گلستان', - slot: ` -
    آقای اقلچی
    -
    ${replaceNumber('0911 750 5027')}
    - `, - href: 'tel:+989117505027', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'ایلام', - slot: ` -
    آقای صیدی
    -
    ${replaceNumber('0918 342 8903')}
    - `, - href: 'tel:+989183428903', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'آذربایجان غربی', - slot: ` -
    آقای صفایی
    -
    ${replaceNumber('0914 381 3925')}
    - `, - href: 'tel:+989143813925', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'خراسان جنوبی', - slot: ` -
    آقای محبی
    -
    ${replaceNumber('0915 506 9208')}
    - `, - href: 'tel:+989155069208', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'سیستان بلوچستان', - slot: ` -
    آقای قاسمی
    -
    ${replaceNumber('0915 540 9620')}
    - `, - href: 'tel:+989155409620', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'کرمانشاه', - slot: ` -
    آقای حاجتی
    -
    ${replaceNumber('0918 559 0431')}
    - `, - href: 'tel:+989185590431', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'کرمان', - slot: ` -
    آقای رضایی
    -
    ${replaceNumber('0913 563 1711')}
    - `, - href: 'tel:+989135631711', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'همدان', - slot: ` -
    آقای طهماسبی
    -
    ${replaceNumber('0918 554 0527')}
    - `, - href: 'tel:+989185540527', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'خراسان رضوی', - slot: ` -
    آقای محبی
    -
    ${replaceNumber('0915 506 9208')}
    - `, - href: 'tel:+989155069208', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'خراسان شمالی', - slot: ` -
    آقای محبی
    -
    ${replaceNumber('0915 506 9208')}
    - `, - href: 'tel:+989155069208', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'اصفهان', - slot: ` -
    آقای بهنام‌پور
    -
    ${replaceNumber('0913 339 1828')}
    - `, - href: 'tel:+989133391828', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'سمنان', - slot: ` -
    آقای حافظی
    -
    ${replaceNumber('0919 276 0806')}
    - `, - href: 'tel:+989192760806', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'کیش', - slot: ` -
    آقای سالاری
    -
    ${replaceNumber('0990 349 8425')}
    - `, - href: 'tel:+989903498425', - }, - // { - // elevated: 1, - // highlight: true, - // stated: true, - // headline: 'زنجان', - // slot: ` - //
    آقای نقی‌لو
    - //
    ${replaceNumber('0912 067 6503')}
    - // `, - // href: 'tel:+989120676503', - // }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'اردبیل', - slot: ` -
    آقای پاسبانی
    -
    ${replaceNumber('0914 150 4203')}
    - `, - href: 'tel:+989141504203', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'چهارمحال و بختیاری', - slot: ` -
    آقای فروزنده
    -
    ${replaceNumber('0913 283 9193')}
    - `, - href: 'tel:+989132839193', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'کهگیلویه و بویراحمد', - slot: ` -
    آقای عظیمی فر
    -
    ${replaceNumber('0917 432 6132')}
    - `, - href: 'tel:+989174326132', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'آذربایجان شرقی', - slot: ` -
    آقای سلیمانی
    -
    ${replaceNumber('0935 707 1904')}
    - `, - href: 'tel:+989357071904', - }, - { - elevated: 1, - highlight: true, - stated: true, - headline: 'خوزستان', - slot: ` -
    آقای شمس
    -
    ${replaceNumber('0916 603 3612')}
    - `, - href: 'tel:+989166033612', - }, - ], -}; diff --git a/uniquely/soffit-pwa/src/content/home-page-en.ts b/uniquely/soffit-pwa/src/content/home-page-en.ts deleted file mode 100644 index f0412149c..000000000 --- a/uniquely/soffit-pwa/src/content/home-page-en.ts +++ /dev/null @@ -1,129 +0,0 @@ -/* eslint-disable max-len */ -import type {PageHomeContent} from '../type.js'; - -export const homePageContent: PageHomeContent = { - topAppBar: { - type: 'center', - headline: 'Soffit Trading', - startIcon: {icon: 'menu-outline', flipRtl: true}, - endIconList: [{icon: 'globe-outline', clickSignalId: 'language-button-click-event'}], - }, - - about: { - wide: true, - elevated: 1, - stated: true, - // icon: 'logo-microsoft', - headline: 'Soffit Trading', - slot: ` - Soffit started producing plaster products with the aim of optimizing the construction and also reducing the cost of supply and maintenance of the building in the long term.
    - Also, according to the expansion of the market and the needs of customers, it has increased the variety of designs and materials of its products. - Among the advantages of Soffit roofs, we can mention high speed of implementation, insulation of sound, humidity and heat. It can also be mentioned the ease of access to the facilities.
    - Soffit intends to increase its share in the use of renewable raw materials in production to preserve the environment for future generations. - `, - }, - - catalogue: { - elevated: 1, - highlight: true, - stated: true, - icon: 'cloud-download-outline', - headline: 'Download Catalogue', - description: 'Download the introduction catalog of Soffit commercial products', - href: 'https://www.dropbox.com/s/dl/6ywy23qql7iq31p/soffit-product-catalogue.pdf', - target: 'download', - }, - - productList: [ - { - icon: 'logo-microsoft', - // icon: 'grid-outline', - elevated: 1, - highlight: true, - stated: true, - headline: 'Ceiling Tile', - description: 'All kinds of tiles to make your roofs more beautiful.', - wide: true, - }, - { - icon: 'bulb-outline', - elevated: 1, - highlight: true, - stated: true, - headline: 'Lighting', - }, - { - icon: 'git-commit-outline', - elevated: 1, - highlight: true, - stated: true, - headline: 'Structure & connections', - }, - ], - - socialList: [ - { - elevated: 1, - highlight: true, - stated: true, - icon: 'call-outline', - flipRtl: true, - headline: 'Contact Us', - slot: ` -
    Main branch
    -
    +98 915 559 9674
    - `, - href: 'tel:+989155599674', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-instagram', - headline: 'Instagram', - description: 'Instagram page of Soffit Trading.', - href: 'https://instagram.com/soffit.co', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'send-outline', - headline: 'Telegram', - description: 'Telegram Channel of Soffit Trading.', - href: 'https://t.me/soffitcompany', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-linkedin', - headline: 'Linkedin', - description: 'Linkedin page of Soffit Trading', - href: 'https://www.linkedin.com/company/soffit-co', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-youtube', - headline: 'Youtube', - description: 'Youtube channel of Soffit Trading', - href: 'https://youtube.com/@SOFFITCO', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'videocam-outline', - headline: 'Aparat', - description: 'Aparat channel of Soffit Trading', - href: 'https://www.aparat.com/soffit', - target: '_blank', - }, - ], -}; diff --git a/uniquely/soffit-pwa/src/content/home-page-fa.ts b/uniquely/soffit-pwa/src/content/home-page-fa.ts deleted file mode 100644 index 9d64bf833..000000000 --- a/uniquely/soffit-pwa/src/content/home-page-fa.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* eslint-disable max-len */ -import {replaceNumber} from '@alwatr/i18n'; - -import type {PageHomeContent} from '../type.js'; - -export const homePageContent: PageHomeContent = { - topAppBar: { - type: 'center', - headline: 'مجموعه سافیت', - startIcon: {icon: 'menu-outline', flipRtl: true}, - endIconList: [{icon: 'globe-outline', clickSignalId: 'language-button-click-event'}], - }, - - about: { - wide: true, - elevated: 1, - stated: true, - // icon: 'logo-microsoft', - headline: 'درباره سافیت', - slot: ` - مجموعه تولیدی بازرگانی سافیت
    - تولید کننده عمده محصولات DRY WALL، سازه ۶۰ کلیک، تایل کچی 60*60 و روکش P.V.C
    - برند درجه یک صادراتی با فعالیت های بین المللی و ویژگی های ممتاز
    - این مجموعه با هدف بهینه سازی در ساخت وساز و همچنین کاهش هزینه ها تامین و نگه داری ساختمان در بلند مدت اقدام به تولید محصولات گچی نمود.
    - همچنین با توجه به گسترش بازار و نیاز مشتریان تنوع طرح و جنس محصولات خود را افزایش داده است.
    - از مزیت‌های سقف‌های سافیت می‌توان به سرعت بالا در اجرا، عایق صوت، رطوبت، حرارت و راحتی در دسترسی به تاسیسات اشاره کرد. - `, - }, - - catalogue: { - elevated: 1, - highlight: true, - stated: true, - icon: 'cloud-download-outline', - flipRtl: true, - headline: 'دانلود کاتالوگ', - description: 'دانلود کاتالوگ معرفی محصولات سافیت', - href: 'https://www.dropbox.com/s/dl/6ywy23qql7iq31p/soffit-product-catalogue.pdf', - target: 'download', - }, - - productList: [ - { - icon: 'logo-microsoft', - // icon: 'grid-outline', - elevated: 1, - highlight: true, - stated: true, - headline: 'سقف کاذب', - description: 'انواع تایل برای زیباتر شدن سقف‌های شما.', - wide: true, - }, - { - icon: 'bulb-outline', - elevated: 1, - highlight: true, - stated: true, - headline: 'روشنایی', - }, - { - icon: 'git-commit-outline', - elevated: 1, - highlight: true, - stated: true, - headline: 'سازه و اتصالات', - }, - ], - - socialList: [ - { - elevated: 1, - highlight: true, - stated: true, - icon: 'call-outline', - flipRtl: true, - headline: 'تماس با ما', - slot: ` -
    تلفن ارتباط مستقیم
    -
    ${replaceNumber('0915 559 9674')}
    - `, - href: 'tel:+989155599674', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'send-outline', - headline: 'تلگرام', - description: 'کانال تلگرام سافیت', - href: 'https://t.me/soffitcompany', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-instagram', - headline: 'اینستاگرام', - description: 'صفحه‌ی اینستاگرام سافیت', - href: 'https://instagram.com/soffit.co', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'videocam-outline', - flipRtl: true, - headline: 'آپارات', - description: 'کانال آپارات سافیت', - href: 'https://www.aparat.com/soffit', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-linkedin', - headline: 'لینکدین', - description: 'صفحه‌ی لینکدین سافیت', - href: 'https://www.linkedin.com/company/soffit-co', - target: '_blank', - }, - { - elevated: 1, - highlight: true, - stated: true, - icon: 'logo-youtube', - headline: 'یوتیوب', - description: 'کانال یوتیوب سافیت', - href: 'https://youtube.com/@SOFFITCO', - target: '_blank', - }, - ], - agency: { - elevated: 1, - stated: true, - icon: 'ribbon-outline', - headline: 'نمایندگی‌ها', - description: 'لیست نمایندگی‌ها سافیت در سراسر کشور', - href: '/agency', - wide: true, - }, -}; diff --git a/uniquely/soffit-pwa/src/content/l18e-en.json b/uniquely/soffit-pwa/src/content/l18e-en.json deleted file mode 100644 index e0838e243..000000000 --- a/uniquely/soffit-pwa/src/content/l18e-en.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "ok": true, - "meta": { - "code": "en-US", - "rev": 0 - }, - "data": { - "loading": "Loading...", - "invalid_form_data": "The form information is not correct.", - "check_network_connection": "Please check internet, and send again.", - - "lottery_code": "Lottery number", - "full_name": "First/Last Name", - "phone_number": "Phone number", - "submit_form": "Submit", - "cancel": "Cancel", - "lottery_form_title": "Lottery", - "lottery_form_description": "Soffit monthly lottery registration form.", - "supply_chain_form_title": "Supply Chain", - "supply_chain_form_description": "Supply chain of construction products registration form.", - "form_submitted": "Your information has been successfully saved.", - "activity_area": "Activity area", - "activity_type": "Activity type", - "tile_player": "Tile player", - "tile_installer": "Tile installer", - "seller_shopkeeper": "Seller and shopkeeper", - "contractor": "Contractor", - "manufacturer": "Manufacturer", - "other": "Other" - } -} diff --git a/uniquely/soffit-pwa/src/content/l18e-fa.json b/uniquely/soffit-pwa/src/content/l18e-fa.json deleted file mode 100644 index fd91f7d1c..000000000 --- a/uniquely/soffit-pwa/src/content/l18e-fa.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "ok": true, - "meta": { - "code": "fa-IR", - "rev": 0 - }, - "data": { - "loading": "در حال بارگذاری...", - "invalid_form_data": "اطلاعات فرم صحیح نمی‌باشد.", - "check_network_connection": "لطفا از اتصال خود به اینترنت اطمینان حاصل فرمایید و دوباره ارسال کنید.", - "lottery_code": "کد قرعه‌کشی", - "full_name": "نام و نام‌خانوادگی", - "phone_number": "شماره تلفن", - "submit_form": "ارسال فرم", - "cancel": "انصراف", - "lottery_form_title": "قرعه‌کشی", - "lottery_form_description": "فرم شرکت در قرعه‌کشی ماهانه سافیت", - "supply_chain_form_title": "زنجیره تامین", - "supply_chain_form_description": "فرم ثبت نام در زنجیره تامین محصولات ساختمانی", - "form_submitted": "اطلاعات شما با موفقیت ذخیره شد.", - "activity_area": "حوزه فعالیت", - "activity_type": "نوع فعالیت", - "tile_player": "پخش کننده تایل", - "tile_installer": "نصاب تایل", - "seller_shopkeeper": "فروشنده و مغازه‌دار", - "contractor": "پیمانکار", - "manufacturer": "سازنده", - "other": "سایر" - } -} diff --git a/uniquely/soffit-pwa/src/content/product-page-en.ts b/uniquely/soffit-pwa/src/content/product-page-en.ts deleted file mode 100644 index 7ebef8501..000000000 --- a/uniquely/soffit-pwa/src/content/product-page-en.ts +++ /dev/null @@ -1,66 +0,0 @@ -/* eslint-disable max-len */ -import type {ProductPageContent} from '../type.js'; - -export const productPageContent: ProductPageContent = { - topAppBar: { - type: 'large', - headline: 'Ceiling tile product', - startIcon: {icon: 'arrow-back-outline', clickSignalId: 'back-click-event'}, - endIconList: [ - {icon: 'globe-outline', clickSignalId: 'language-button-click-event'}, - {icon: 'menu-outline', flipRtl: true}, - ], - }, - - product: [ - { - headline: 'Product one', - image: 'https://fastly.picsum.photos/id/613/512/512.jpg?hmac=yKvmC3Ve1L2xmNgH_NWheg4DNQXism0Z-YsnmB8AZ44', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - { - headline: 'Product two', - image: 'https://fastly.picsum.photos/id/620/512/512.jpg?hmac=ekpaYlTuleE5YkU1OnrIUyF4-yoKGm0kLAQfp0oY_sk', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - { - headline: 'Product three', - image: 'https://fastly.picsum.photos/id/618/512/512.jpg?hmac=lthx2JjBF4AqPZbgi0PuOU2v_eHo7ALt799GafmnYiA', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - { - headline: 'Product four', - image: 'https://fastly.picsum.photos/id/43/512/512.jpg?hmac=moVeP1k_ZavV4XjR4Ru_eVMqxEuLn73WQ2CTt0in6Kg', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - { - headline: 'Product five', - image: 'https://fastly.picsum.photos/id/223/512/512.jpg?hmac=N-KoUSx0MTedR6SUj6JmSKo_0bdqcSlbEGD4uFJYoBI', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - { - headline: 'Product six', - image: 'https://fastly.picsum.photos/id/234/512/512.jpg?hmac=pCHWOiGeJGGls9rJpS8unQo9pVMFT_d3yUWOd6ztM3A', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - { - headline: 'Product seven', - image: 'https://fastly.picsum.photos/id/249/512/512.jpg?hmac=XIOoZNY2gpWkJlc6jRalcCms4CKAr6fPVSveeFttxaY', - description: 'The description text of a product from the Soffit brand', - elevated: 1, - stated: true, - }, - ], -}; diff --git a/uniquely/soffit-pwa/src/content/product-page-fa.ts b/uniquely/soffit-pwa/src/content/product-page-fa.ts deleted file mode 100644 index cf58351d4..000000000 --- a/uniquely/soffit-pwa/src/content/product-page-fa.ts +++ /dev/null @@ -1,66 +0,0 @@ -/* eslint-disable max-len */ -import type {ProductPageContent} from '../type.js'; - -export const productPageContent: ProductPageContent = { - topAppBar: { - type: 'large', - headline: 'محصولات تایل سقفی', - startIcon: {icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back-click-event'}, - endIconList: [ - {icon: 'globe-outline', clickSignalId: 'language-button-click-event'}, - {icon: 'menu-outline', flipRtl: true}, - ], - }, - - product: [ - { - headline: 'محصول شماره یک', - image: 'https://fastly.picsum.photos/id/613/512/512.jpg?hmac=yKvmC3Ve1L2xmNgH_NWheg4DNQXism0Z-YsnmB8AZ44', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - { - headline: 'محصول شماره دو', - image: 'https://fastly.picsum.photos/id/620/512/512.jpg?hmac=ekpaYlTuleE5YkU1OnrIUyF4-yoKGm0kLAQfp0oY_sk', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - { - headline: 'محصول شماره سه', - image: 'https://fastly.picsum.photos/id/618/512/512.jpg?hmac=lthx2JjBF4AqPZbgi0PuOU2v_eHo7ALt799GafmnYiA', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - { - headline: 'محصول شماره چهار', - image: 'https://fastly.picsum.photos/id/43/512/512.jpg?hmac=moVeP1k_ZavV4XjR4Ru_eVMqxEuLn73WQ2CTt0in6Kg', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - { - headline: 'محصول شماره پنج', - image: 'https://fastly.picsum.photos/id/223/512/512.jpg?hmac=N-KoUSx0MTedR6SUj6JmSKo_0bdqcSlbEGD4uFJYoBI', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - { - headline: 'محصول شماره شش', - image: 'https://fastly.picsum.photos/id/234/512/512.jpg?hmac=pCHWOiGeJGGls9rJpS8unQo9pVMFT_d3yUWOd6ztM3A', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - { - headline: 'محصول شماره هفت', - image: 'https://fastly.picsum.photos/id/249/512/512.jpg?hmac=XIOoZNY2gpWkJlc6jRalcCms4CKAr6fPVSveeFttxaY', - description: 'متن توضیحات یک محصول از برند سافیت', - elevated: 1, - stated: true, - }, - ], -}; diff --git a/uniquely/soffit-pwa/src/manager/change-language.ts b/uniquely/soffit-pwa/src/manager/change-language.ts deleted file mode 100644 index 6d567c06b..000000000 --- a/uniquely/soffit-pwa/src/manager/change-language.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {localeContextConsumer, setLocale, l18eContextConsumer} from '@alwatr/i18n'; -import {snackbarSignalTrigger} from '@alwatr/ui-kit/snackbar/show-snackbar.js'; - -import {languageButtonClickEventListener} from './context.js'; -import {logger} from './logger.js'; - -languageButtonClickEventListener.subscribe(() => { - logger.logMethod?.('changeLanguage'); - localeContextConsumer.getValue()?.language === 'en' - ? setLocale({ - code: 'fa-IR', - language: 'fa', - direction: 'rtl', - }) - : setLocale({ - code: 'en-US', - language: 'en', - direction: 'ltr', - }); -}); - -let rapidClickCount = 0; -let lastClick = 0; -l18eContextConsumer.subscribe(() => { - const now = Date.now(); - if (now - lastClick < 1_000) { - rapidClickCount++; - } - lastClick = now; - - if (rapidClickCount > 5 && localeContextConsumer.getValue()?.language === 'fa') { - rapidClickCount = 0; - - snackbarSignalTrigger.request({ - message: 'داداش چی از جون ما می‌خوای؟!\nولی جون ما با سرعت برنامه حال می‌کنی؟!', - duration: -1, - actionLabel: 'ایول', - }); - } -}); diff --git a/uniquely/soffit-pwa/src/manager/context-provider/agency-page-content.ts b/uniquely/soffit-pwa/src/manager/context-provider/agency-page-content.ts deleted file mode 100644 index 1d2b587fe..000000000 --- a/uniquely/soffit-pwa/src/manager/context-provider/agency-page-content.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {localeContextConsumer} from '@alwatr/i18n'; - -import {agencyPageContentContextProvider} from '../context.js'; -import {logger} from '../logger.js'; - -localeContextConsumer.subscribe(async () => { - const language = localeContextConsumer.getValue()?.language; - logger.logMethodArgs?.('agencyPageContentProvider', {language}); - if (language == null) return; - - const agencyPageContent = - language === 'en' - ? (await import('../../content/agency-page-en.js')).agencyPageContent - : (await import('../../content/agency-page-fa.js')).agencyPageContent; - agencyPageContentContextProvider.setValue(agencyPageContent); -}); diff --git a/uniquely/soffit-pwa/src/manager/context-provider/home-page-content.ts b/uniquely/soffit-pwa/src/manager/context-provider/home-page-content.ts deleted file mode 100644 index a5f0f899c..000000000 --- a/uniquely/soffit-pwa/src/manager/context-provider/home-page-content.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {localeContextConsumer} from '@alwatr/i18n'; - -import {homePageContentContextProvider} from '../context.js'; -import {logger} from '../logger.js'; - -localeContextConsumer.subscribe(async () => { - const language = localeContextConsumer.getValue()?.language; - logger.logMethodArgs?.('homePageContentProvider', {language}); - if (language == null) return; - - const homePageContent = - language === 'en' - ? (await import('../../content/home-page-en.js')).homePageContent - : (await import('../../content/home-page-fa.js')).homePageContent; - homePageContentContextProvider.setValue(homePageContent); -}); diff --git a/uniquely/soffit-pwa/src/manager/context-provider/product-page-content.ts b/uniquely/soffit-pwa/src/manager/context-provider/product-page-content.ts deleted file mode 100644 index 87c8ffcaa..000000000 --- a/uniquely/soffit-pwa/src/manager/context-provider/product-page-content.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {localeContextConsumer} from '@alwatr/i18n'; - -import {productPageContentContextProvider} from '../context.js'; -import {logger} from '../logger.js'; - -localeContextConsumer.subscribe(async () => { - const language = localeContextConsumer.getValue()?.language; - logger.logMethodArgs?.('productPageContentProvider', {language}); - if (language == null) return; - - const content = - language === 'en' - ? (await import('../../content/product-page-en.js')).productPageContent - : (await import('../../content/product-page-fa.js')).productPageContent; - productPageContentContextProvider.setValue(content); -}); diff --git a/uniquely/soffit-pwa/src/manager/context.ts b/uniquely/soffit-pwa/src/manager/context.ts deleted file mode 100644 index 5f9f82479..000000000 --- a/uniquely/soffit-pwa/src/manager/context.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {commandTrigger, contextConsumer, contextProvider, eventListener} from '@alwatr/signal'; - -import type {FormData, PageAgencyContent, PageHomeContent, ProductPageContent} from '../type.js'; -import type {ClickSignalType} from '@alwatr/type'; - -export * from '@alwatr/pwa-helper/context.js'; - -export const submitFormCommandTrigger = commandTrigger.bind('submit-form-command'); - -export const homePageContentContextProvider = - contextProvider.bind('home-page-content'); -export const homePageContentContextConsumer = - contextConsumer.bind(homePageContentContextProvider.id); - -export const agencyPageContentContextProvider = - contextProvider.bind('agency-page-content'); -export const agencyPageContentContextConsumer = - contextConsumer.bind(agencyPageContentContextProvider.id); - -export const productPageContentContextProvider = - contextProvider.bind('product-page-content'); -export const productPageContentContextConsumer = - contextConsumer.bind(productPageContentContextProvider.id); - -export const languageButtonClickEventListener = eventListener.bind('language-button-click-event'); diff --git a/uniquely/soffit-pwa/src/manager/index.ts b/uniquely/soffit-pwa/src/manager/index.ts deleted file mode 100644 index 5d8e9f858..000000000 --- a/uniquely/soffit-pwa/src/manager/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import './change-language.js'; -import './context-provider/agency-page-content.js'; -import './context-provider/home-page-content.js'; -import './context-provider/product-page-content.js'; -import './l18e.js'; -import './submit-form-command-handler.js'; diff --git a/uniquely/soffit-pwa/src/manager/l18e.ts b/uniquely/soffit-pwa/src/manager/l18e.ts deleted file mode 100644 index bf3e4f927..000000000 --- a/uniquely/soffit-pwa/src/manager/l18e.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {setL18eLoader} from '@alwatr/i18n'; - -import {logger} from './logger.js'; -import l18eFa from '../content/l18e-fa.json' assert {type: 'json'}; // for perf - -import type {L18eContext} from '@alwatr/type'; - -setL18eLoader((locale) => { - const language = locale.language; - logger.logMethodArgs?.('l18eLoader', {language}); - return language === 'en' - ? import('../content/l18e-en.json', {assert: {type: 'json'}}) as unknown as Promise - : l18eFa as unknown as Promise; -}); diff --git a/uniquely/soffit-pwa/src/manager/logger.ts b/uniquely/soffit-pwa/src/manager/logger.ts deleted file mode 100644 index 544edd7a9..000000000 --- a/uniquely/soffit-pwa/src/manager/logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {createLogger} from '@alwatr/logger'; - -export const logger = createLogger('soffit-manager'); diff --git a/uniquely/soffit-pwa/src/manager/submit-form-command-handler.ts b/uniquely/soffit-pwa/src/manager/submit-form-command-handler.ts deleted file mode 100644 index 8f57cdfa4..000000000 --- a/uniquely/soffit-pwa/src/manager/submit-form-command-handler.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {serviceRequest} from '@alwatr/fetch'; -import {commandHandler} from '@alwatr/signal'; -import {snackbarSignalTrigger} from '@alwatr/ui-kit/snackbar/show-snackbar.js'; -import {validator, type JsonSchema} from '@alwatr/validator'; - -import {submitFormCommandTrigger} from './context.js'; -import {logger} from './logger.js'; -import {config} from '../config.js'; - -import type {FormData} from '../type.js'; - -const validSchema: Record = { - 'lottery': {code: String, name: String, phone: Number, activity: String}, - 'supply-chain': {name: String, phone: Number, activity: String}, -}; - -commandHandler.define(submitFormCommandTrigger.id, async (form: FormData): Promise => { - logger.logMethodArgs?.('formSubmit', {form}); - - let bodyJson; - try { - const schema = validSchema[form.formId]; - - if (schema == null) { - logger.accident( - 'formSubmit', - 'invalid_form_id', - 'Please define form id in validSchema before use it', - {formId: form.formId, validSchema: Object.keys(validSchema)}, - ); - return false; - } - - bodyJson = validator(schema, form.data); - } - catch (err) { - logger.accident('formSubmit', 'invalid_form_data', 'validator failed on form data', (err as Error).cause); - snackbarSignalTrigger.request({messageKey: 'invalid_form_data'}); - return false; - } - - try { - await serviceRequest({ - method: 'PUT', - url: config.api + '/form/', - queryParameters: { - formId: form.formId, - }, - token: config.token, - bodyJson, - }); - } - catch (err) { - logger.error('formSubmit', 'request_failed', (err as Error).cause); - snackbarSignalTrigger.request({messageKey: 'check_network_connection'}); - return false; - } - - return true; -}); diff --git a/uniquely/soffit-pwa/src/type.ts b/uniquely/soffit-pwa/src/type.ts deleted file mode 100644 index f02c3be71..000000000 --- a/uniquely/soffit-pwa/src/type.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type {StringifyableRecord} from '@alwatr/type'; -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; -import type {ImageBoxContent} from '@alwatr/ui-kit/card/image-box.js'; -import type {TopAppBarContent} from '@alwatr/ui-kit/top-app-bar/top-app-bar.js'; - -export interface BoxType extends IconBoxContent { - wide?: boolean; - slot?: string; - small?: boolean; -} - -export interface ProductType extends ImageBoxContent { - wide?: boolean; - slot?: string; -} - -export interface PageHomeContent extends StringifyableRecord { - topAppBar: TopAppBarContent; - about: BoxType; - catalogue: BoxType; - productList: BoxType[]; - socialList: BoxType[]; - agency?: BoxType; // just available in fa. -} - -export interface PageAgencyContent extends StringifyableRecord { - topAppBar: TopAppBarContent; - agencyList: BoxType[]; -} - -export interface ProductPageContent extends StringifyableRecord { - topAppBar: TopAppBarContent; - product: ProductType[]; -} - -export interface FormData extends StringifyableRecord { - formId: string; - data: Record; -} diff --git a/uniquely/soffit-pwa/src/ui/alwatr-pwa.ts b/uniquely/soffit-pwa/src/ui/alwatr-pwa.ts deleted file mode 100644 index b98f42b92..000000000 --- a/uniquely/soffit-pwa/src/ui/alwatr-pwa.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {html, customElement} from '@alwatr/element'; -import '@alwatr/font/vazirmatn.css'; -import {AlwatrPwaElement} from '@alwatr/pwa-helper/pwa-element.js'; -import '@alwatr/ui-kit/style/mobile-only.css'; -import '@alwatr/ui-kit/style/theme/color.css'; -import '@alwatr/ui-kit/style/theme/palette-270.css'; - -import './page/home.js'; // for perf -import './stuff/app-footer.js'; - -import type {RoutesConfig} from '@alwatr/router'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-pwa': AlwatrPwa; - } -} - -/** - * Alwatr PWA Root Element - */ -@customElement('alwatr-pwa') -class AlwatrPwa extends AlwatrPwaElement { - protected override _routesConfig: RoutesConfig = { - routeId: this._routesConfig.routeId, - templates: { - home: () => { - return html`...`; - }, - _404: () => { - import('./page/404.js'); - return html`...`; - }, - product: () => { - import('./page/product.js'); - return html`...`; - }, - agency: () => { - import('./page/agency.js'); - return html`...`; - }, - }, - }; - - - protected override _navigationBarTemplate(): unknown { - return html``; - } -} diff --git a/uniquely/soffit-pwa/src/ui/page/404.ts b/uniquely/soffit-pwa/src/ui/page/404.ts deleted file mode 100644 index f2740fbd4..000000000 --- a/uniquely/soffit-pwa/src/ui/page/404.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {customElement, css, html, LocalizeMixin, SignalMixin, AlwatrBaseElement} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {topAppBarContextProvider} from '../../manager/context.js'; - -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-404': AlwatrPage404; - } -} - -/** - * Alwatr 404 Page. - */ -@customElement('alwatr-page-404') -export class AlwatrPage404 extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: block; - padding: calc(2 * var(--sys-spacing-track)); - box-sizing: border-box; - min-height: 100%; - } - `; - - override connectedCallback(): void { - super.connectedCallback(); - topAppBarContextProvider.setValue({ - type: 'small', - headline: message('not_found'), - startIcon: {icon: 'arrow-back-outline', flipRtl: true, clickSignalId: 'back-click-event'}, - tinted: 2, - }); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - - const box: IconBoxContent = { - stated: true, - elevated: 1, - icon: 'construct-outline', - flipRtl: true, - headline: message('under_develope'), - description: message('under_develope_description'), - preLine: true, - }; - - return html``; - } -} diff --git a/uniquely/soffit-pwa/src/ui/page/agency.ts b/uniquely/soffit-pwa/src/ui/page/agency.ts deleted file mode 100644 index 2f26c63a3..000000000 --- a/uniquely/soffit-pwa/src/ui/page/agency.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { - customElement, - css, - html, - unsafeHTML, - state, - nothing, - SignalMixin, - AlwatrBaseElement, - mapIterable, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {agencyPageContentContextConsumer, topAppBarContextProvider} from '../../manager/context.js'; - -import type {BoxType, PageAgencyContent} from '../../type.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-agency': AlwatrPageAgency; - } -} - -/** - * Alwatr Demo Home Page - */ -@customElement('alwatr-page-agency') -export class AlwatrPageAgency extends SignalMixin(AlwatrBaseElement) { - static override styles = css` - :host { - display: flex; - flex-wrap: wrap; - padding: calc(2 * var(--sys-spacing-track)); - gap: var(--sys-spacing-track); - overflow-y: auto; - } - - alwatr-icon-box { - width: 40%; - flex-grow: 1; - } - - alwatr-icon-box[wide] { - width: 100%; - } - `; - - @state() content?: PageAgencyContent; - - override connectedCallback(): void { - super.connectedCallback(); - - - this._addSignalListeners( - agencyPageContentContextConsumer.subscribe((content) => { - this.content = content; - topAppBarContextProvider.setValue(content.topAppBar); - }), - ); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - if (this.content == null) return; - - return [ - mapIterable(this, this.content.agencyList, this._boxTemplate, message('loading')), - ]; - } - - protected _boxTemplate(box: BoxType): unknown { - const slot = box.slot == null ? nothing : unsafeHTML(box.slot); - return html`${slot}`; - } -} diff --git a/uniquely/soffit-pwa/src/ui/page/home.ts b/uniquely/soffit-pwa/src/ui/page/home.ts deleted file mode 100644 index 2228a54a3..000000000 --- a/uniquely/soffit-pwa/src/ui/page/home.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { - customElement, - css, - html, - unsafeHTML, - state, - nothing, - SignalMixin, - AlwatrBaseElement, - mapIterable, -} from '@alwatr/element'; -import {localeContextConsumer, message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; - -import {homePageContentContextConsumer, topAppBarContextProvider} from '../../manager/context.js'; -import '../stuff/lottery-box.js'; -import '../stuff/supply-chain-box.js'; - -import type {BoxType, PageHomeContent} from '../../type.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-home': AlwatrPageHome; - } -} - -/** - * Alwatr Demo Home Page - */ -@customElement('alwatr-page-home') -export class AlwatrPageHome extends SignalMixin(AlwatrBaseElement) { - static override styles = css` - :host { - display: flex; - flex-wrap: wrap; - padding: calc(2 * var(--sys-spacing-track)); - gap: var(--sys-spacing-track); - overflow-y: auto; - } - - alwatr-icon-box { - width: 40%; - flex-grow: 1; - } - - .logo, - alwatr-icon-box[wide], - alwatr-lottery-box, - alwatr-supply-chain-box { - width: 100%; - } - - alwatr-icon-box[small] { - width: 26%; - } - - alwatr-supply-chain-form, - alwatr-lottery-form { - padding: 0 var(--sys-spacing-track); - } - `; - - @state() content?: PageHomeContent; - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners( - homePageContentContextConsumer.subscribe((content) => { - this.content = content; - topAppBarContextProvider.setValue(content.topAppBar); - }), - ); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return this._menuTemplate(); - } - - protected* _menuTemplate(): unknown { - yield html``; - if (this.content == null) return nothing; - yield this._boxTemplate(this.content.about); - yield mapIterable(this, this.content.productList, this._boxTemplate, message('loading')); - yield this._boxTemplate(this.content.catalogue); - yield html``; - yield mapIterable(this, this.content.socialList, this._boxTemplate, message('loading')); - yield html``; - if (localeContextConsumer.getValue()?.language === 'fa') { - yield this._boxTemplate(this.content.agency as BoxType); - } - } - - protected _boxTemplate(box: BoxType): unknown { - const slot = box.slot == null ? nothing : unsafeHTML(box.slot); - return html`${slot}`; - } -} diff --git a/uniquely/soffit-pwa/src/ui/page/product.ts b/uniquely/soffit-pwa/src/ui/page/product.ts deleted file mode 100644 index a5d3bce44..000000000 --- a/uniquely/soffit-pwa/src/ui/page/product.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - customElement, - css, - html, - state, - nothing, - unsafeHTML, - SignalMixin, - AlwatrBaseElement, - mapIterable, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/button/icon-button.js'; -import '@alwatr/ui-kit/card/image-box.js'; - -import {productPageContentContextConsumer, topAppBarContextProvider} from '../../manager/context.js'; - -import type {ProductType, ProductPageContent} from '../../type.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-page-product': AlwatrPageHome; - } -} - -/** - * Soffit Product Page - */ -@customElement('alwatr-page-product') -export class AlwatrPageHome extends SignalMixin(AlwatrBaseElement) { - static override styles = css` - :host { - box-sizing: border-box; - display: flex; - flex-wrap: wrap; - padding: var(--sys-spacing-track) calc(2 * var(--sys-spacing-track)); - gap: var(--sys-spacing-track); - overflow-y: scroll; - } - - alwatr-image-box { - width: 40%; - flex-grow: 1; - } - `; - - @state() content?: ProductPageContent; - - override connectedCallback(): void { - super.connectedCallback(); - - this._addSignalListeners( - productPageContentContextConsumer.subscribe((content) => { - this.content = content; - topAppBarContextProvider.setValue(content.topAppBar); - }), - ); - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return mapIterable(this, this.content?.product, this._productBoxTemplate, message('loading')); - } - - protected _productBoxTemplate(box: ProductType): unknown { - const slot = box.slot == null ? nothing : unsafeHTML(box.slot); - return html`${slot}`; - } -} diff --git a/uniquely/soffit-pwa/src/ui/stuff/app-footer.ts b/uniquely/soffit-pwa/src/ui/stuff/app-footer.ts deleted file mode 100644 index 0b9f82f43..000000000 --- a/uniquely/soffit-pwa/src/ui/stuff/app-footer.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {customElement, AlwatrBaseElement, css, html} from '@alwatr/element'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-app-footer': AlwatrPageHome; - } -} - -/** - * Alwatr Customer Order Management Home Page - */ -@customElement('alwatr-app-footer') -export class AlwatrPageHome extends AlwatrBaseElement { - static override styles = css` - :host { - display: block; - flex-grow: 0; - flex-shrink: 0; - direction: ltr; - text-align: center; - color: var(--sys-color-on-secondary-container); - padding: calc(2 * var(--sys-spacing-track)) var(--sys-spacing-track) var(--sys-spacing-track); - background-color: var(--sys-color-secondary-container); - } - - .version { - font-size: var(--sys-typescale-label-small-font-size); - line-height: var(--sys-typescale-label-small-line-height); - letter-spacing: var(--sys-typescale-label-small-letter-spacing); - opacity: 0.6; - user-select: none; - -webkit-user-select: none; - } - `; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` -
    A good ceiling is vital.
    a SOFFIT ceiling can be an inspiration.
    -
    Soffit PWA v${_ALWATR_VERSION_}
    - `; - } -} diff --git a/uniquely/soffit-pwa/src/ui/stuff/lottery-box.ts b/uniquely/soffit-pwa/src/ui/stuff/lottery-box.ts deleted file mode 100644 index e72abeb16..000000000 --- a/uniquely/soffit-pwa/src/ui/stuff/lottery-box.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { - customElement, - css, - html, - state, - LocalizeMixin, - type PropertyValues, - SignalMixin, - AlwatrBaseElement, -} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/card/icon-box.js'; -import {untilNextFrame, untilEvent, delay} from '@alwatr/util'; - -import './lottery-form.js'; - -import type {AlwatrLotteryForm} from './lottery-form.js'; -import type {AlwatrIconBox, IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-lottery-box': AlwatrLotteryBox; - } -} - -/** - * Soffit lottery box element - */ -@customElement('alwatr-lottery-box') -export class AlwatrLotteryBox extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static override styles = css` - :host { - display: block; - padding: 0; - } - - .success { - color: var(--sys-color-primary); - font-family: var(--sys-typescale-label-large-font-family-name); - font-weight: var(--sys-typescale-label-large-font-weight); - font-size: var(--sys-typescale-label-large-font-size); - letter-spacing: var(--sys-typescale-label-large-letter-spacing); - line-height: var(--sys-typescale-label-large-line-height); - } - `; - - @state() - expanded = false; - - @state() - submitted = false; - - protected _box: AlwatrIconBox | null = null; - - override render(): unknown { - this._logger.logMethod?.('render'); - return html` - ${this._boxContentTemplate()} - `; - } - - protected get _iconBoxContent(): IconBoxContent { - return { - icon: 'gift-outline', - headline: message('lottery_form_title'), - elevated: 1, - stated: !this.expanded, - highlight: !this.expanded && !this.submitted, - }; - } - - protected override firstUpdated(changedProperties: PropertyValues): void { - super.firstUpdated(changedProperties); - this._box = this.renderRoot.querySelector('alwatr-icon-box'); - } - - protected _boxContentTemplate(): unknown { - if (this.expanded) { - return html``; - } - else if (this.submitted) { - return html`${message('form_submitted')}`; - } - else { - return html`${message('lottery_form_description')}`; - } - } - - protected async _click(): Promise { - this._logger.logMethod?.('_click'); - if (!this.expanded && !this.submitted) { - await this._currentAnimate; - this._currentAnimate = this._animateExpand(); - } - } - - protected async _formSubmitted(): Promise { - this._logger.logMethod?.('_formSubmitted'); - await this._currentAnimate; - this._currentAnimate = this._animateCollapse(true); - } - - protected async _formCanceled(): Promise { - this._logger.logMethod?.('_formCanceled'); - await this._currentAnimate; - this._currentAnimate = this._animateCollapse(false); - } - - protected _currentAnimate?: Promise; - - protected _collapseHeight = 0; - async _animateExpand(): Promise { - if (this.expanded || this._box == null) return; - this._logger.logMethod?.('_animateExpand'); - const box = this._box; - await untilNextFrame(); - - this._collapseHeight = box.scrollHeight; - box.style.height = this._collapseHeight + 'px'; - this.expanded = true; - await this.updateComplete; - await untilNextFrame(); - - box.style.height = box.scrollHeight + 'px'; - - const form = this.renderRoot.querySelector('#form'); - if (!form) { - this._logger.error('_animateExpand', 'form_not_found'); - this.style.height = 'auto'; - return; - } - form.animateExpand(); - - await untilEvent(box, 'transitionend'); - box.style.height = 'auto'; - } - - async _animateCollapse(submitted: boolean): Promise { - if (!this.expanded || this._box == null) return; - this._logger.logMethod?.('_animateCollapse'); - const box = this._box; - box.style.height = 'auto'; - await untilNextFrame(); - - box.style.height = box.scrollHeight + 'px'; - await untilNextFrame(); - - const form = this.renderRoot.querySelector('#form'); - if (form != null) { - form.animateCollapse(); - await delay(250); - } - - box.style.height = this._collapseHeight + 'px'; - await untilEvent(box, 'transitionend'); - - this.expanded = false; - this.submitted = submitted; - await this.updateComplete; - await box.updateComplete; - await untilNextFrame(); - - if (this._collapseHeight !== box.scrollHeight) { - box.style.height = box.scrollHeight + 'px'; - await untilEvent(box, 'transitionend'); - } - - box.style.height = 'auto'; - } -} diff --git a/uniquely/soffit-pwa/src/ui/stuff/lottery-form.ts b/uniquely/soffit-pwa/src/ui/stuff/lottery-form.ts deleted file mode 100644 index bfaf544a0..000000000 --- a/uniquely/soffit-pwa/src/ui/stuff/lottery-form.ts +++ /dev/null @@ -1,173 +0,0 @@ -import {customElement, css, html, property, LocalizeMixin, SignalMixin, AlwatrBaseElement} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/radio-group/radio-group.js'; -import '@alwatr/ui-kit/text-field/text-field.js'; - -import {submitFormCommandTrigger} from '../../manager/context.js'; - -import type {RadioGroupOptions} from '@alwatr/ui-kit/radio-group/radio-group.js'; -import type {AlwatrTextField} from '@alwatr/ui-kit/text-field/text-field.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-lottery-form': AlwatrLotteryForm; - } -} - -/** - * Soffit lottery form element - * - * @attr {Boolean} invisible - */ -@customElement('alwatr-lottery-form') -export class AlwatrLotteryForm extends LocalizeMixin(SignalMixin(AlwatrBaseElement)) { - static formId = 'lottery'; - - get _radioGroupOptions(): RadioGroupOptions { - return { - title: message('activity_type'), - radioGroup: [ - {label: message('tile_player'), value: 'tile_player'}, - {label: message('tile_installer'), value: 'tile_installer'}, - {label: message('seller_shopkeeper'), value: 'seller_shopkeeper'}, - {label: message('contractor'), value: 'contractor'}, - {label: message('manufacturer'), value: 'manufacturer'}, - {label: message('other'), value: 'other'}, - ], - }; - } - - static override styles = css` - :host { - display: block; - transition: opacity var(--sys-motion-duration-medium) var(--sys-motion-easing-normal); - } - - :host([disabled]) { - pointer-events: none; - opacity: var(--sys-surface-disabled-opacity); - } - - alwatr-text-field { - display: block; - margin-top: var(--sys-spacing-track); - } - alwatr-text-field:first-of-type { - margin-top: 0; - } - - :host([invisible]) * { - opacity: 0; - } - - .button-container { - display: flex; - flex-direction: row-reverse; - gap: var(--sys-spacing-track); - margin-top: var(--sys-spacing-track); - } - `; - - @property({type: Boolean, reflect: true}) - disabled = false; - - protected async submit(): Promise { - const bodyJson = this.getFormData(); - this._logger.logMethodArgs?.('submit', bodyJson); - - this.disabled = true; - - const response = await submitFormCommandTrigger.requestWithResponse({ - formId: (this.constructor as typeof AlwatrLotteryForm).formId, - data: bodyJson, - }); - - if (response) { - this.dispatchEvent(new CustomEvent('form-submitted')); - } - else { - this.disabled = false; - } - } - - protected async cancel(): Promise { - this.dispatchEvent(new CustomEvent('form-canceled')); - } - - protected getFormData(): Record { - this._logger.logMethod?.('getFormData'); - const data: Record = {}; - for (const inputElement of this.renderRoot.querySelectorAll( - 'alwatr-text-field,alwatr-radio-group', - )) { - data[inputElement.name] = inputElement.value as string; - } - return data; - } - - override render(): unknown { - this._logger.logMethod?.('render'); - return [ - this.inputTemplate(), - this.partButtonTemplate(), - ]; - } - - protected inputTemplate(): unknown { - this._logger.logMethod?.('render'); - return html` - - - - - `; - } - - protected partButtonTemplate(): unknown { - return html` -
    - - -
    - `; - } - - async animateExpand(): Promise { - for (const element of this.renderRoot.querySelectorAll('*')) { - element.style.opacity = '1'; - await new Promise((resolve) => setTimeout(resolve, 100)); - } - } - - async animateCollapse(): Promise { - for (const element of [...this.renderRoot.querySelectorAll('*')].reverse()) { - element.style.opacity = '0'; - await new Promise((resolve) => setTimeout(resolve, 40)); - } - } -} diff --git a/uniquely/soffit-pwa/src/ui/stuff/supply-chain-box.ts b/uniquely/soffit-pwa/src/ui/stuff/supply-chain-box.ts deleted file mode 100644 index 02b51dac4..000000000 --- a/uniquely/soffit-pwa/src/ui/stuff/supply-chain-box.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {customElement, html} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; - -import {AlwatrLotteryBox} from './lottery-box.js'; -import './supply-chain-form.js'; - -import type {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-supply-chain-box': AlwatrSupplyChainBox; - } -} - -/** - * Soffit supply chain box element - */ -@customElement('alwatr-supply-chain-box') -export class AlwatrSupplyChainBox extends AlwatrLotteryBox { - protected override get _iconBoxContent(): IconBoxContent { - return { - icon: 'gift-outline', - headline: message('supply_chain_form_title'), - elevated: 1, - stated: !this.expanded, - highlight: !this.expanded && !this.submitted, - }; - } - - protected override _boxContentTemplate(): unknown { - if (this.expanded) { - return html``; - } - - else if (this.submitted) { - return html`${message('form_submitted')}`; - } - - else { - return html`${message('supply_chain_form_description')}`; - } - } -} diff --git a/uniquely/soffit-pwa/src/ui/stuff/supply-chain-form.ts b/uniquely/soffit-pwa/src/ui/stuff/supply-chain-form.ts deleted file mode 100644 index b7d8ba2eb..000000000 --- a/uniquely/soffit-pwa/src/ui/stuff/supply-chain-form.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {customElement, html} from '@alwatr/element'; -import {message} from '@alwatr/i18n'; -import '@alwatr/ui-kit/button/button.js'; -import '@alwatr/ui-kit/text-field/text-field.js'; - -import {AlwatrLotteryForm} from './lottery-form.js'; - -declare global { - interface HTMLElementTagNameMap { - 'alwatr-supply-chain-form': AlwatrSupplyChainForm; - } -} - -/** - * Soffit lottery form element - * - * @attr {Boolean} invisible - */ -@customElement('alwatr-supply-chain-form') -export class AlwatrSupplyChainForm extends AlwatrLotteryForm { - static override formId = 'supply-chain'; - - override inputTemplate(): unknown { - this._logger.logMethod?.('render'); - return html` - - - - `; - } -} diff --git a/uniquely/soffit-pwa/tsconfig.json b/uniquely/soffit-pwa/tsconfig.json deleted file mode 100644 index 043911327..000000000 --- a/uniquely/soffit-pwa/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": ".tsbuildinfo", - // "moduleResolution": "bundler", - "rootDir": "src", - "outDir": "build", - "noEmit": true, - "plugins": [ - { - "name": "ts-lit-plugin", - "strict": true - } - ], - }, - - "include": ["src/**/*.ts", "src/**/*.json"], - "exclude": [], - "references": [ - {"path": "../../core/router"}, - {"path": "../../core/fetch"}, - {"path": "../../core/i18n"}, - {"path": "../../core/type"}, - {"path": "../../core/validator"}, - {"path": "../../core/signal"}, - {"path": "../../core/util"}, - {"path": "../../ui/element"}, - {"path": "../../ui/ui-kit"}, - {"path": "../../ui/pwa-helper"}, - ] -} diff --git a/uniquely/soffit-pwa/web-dev-server.config.js b/uniquely/soffit-pwa/web-dev-server.config.js deleted file mode 100644 index 9c4e13e1e..000000000 --- a/uniquely/soffit-pwa/web-dev-server.config.js +++ /dev/null @@ -1,2 +0,0 @@ -import {config} from '@alwatr/pwa-helper/pwa-dev-server.config.js'; -export default config; diff --git a/web-dev-server.config.js b/web-dev-server.config.js deleted file mode 100644 index f414451de..000000000 --- a/web-dev-server.config.js +++ /dev/null @@ -1,19 +0,0 @@ -// https://modern-web.dev/docs/dev-server/cli-and-configuration/#configuration-file -/** @type {import('@web/dev-server').DevServerConfig} */ -export default { - hostname: '0.0.0.0', - port: 8070, - open: true, - watch: true, - // appIndex: 'index.html', - nodeResolve: { - exportConditions: ['development'], - }, - // esbuildTarget: 'auto', - // in a monorepo you need to set set the root dir to resolve modules - rootDir: '.', - // debug: false, - plugins: [], - middleware: [], - debug: true, -}; diff --git a/yarn.lock b/yarn.lock index 900367709..753f98e48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,8954 +1,6307 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@75lb/deep-merge@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@75lb/deep-merge/-/deep-merge-1.1.1.tgz#3b06155b90d34f5f8cc2107d796f1853ba02fd6d" - integrity sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw== - dependencies: - lodash.assignwith "^4.2.0" - typical "^7.1.1" - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.11.1": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.19.tgz#b38162460a6f3baf2a424bda720b24a8aafea241" - integrity sha512-Q8Yj5X4LHVYTbLCKVz0//2D2aDmHF4xzCdEttYvKOnWvErGsa6geHXD6w46x64n5tP69VfeH+IfSrdyH3MLhwA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.19" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.16" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.19" - "@babel/types" "^7.22.19" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== - dependencies: - "@babel/types" "^7.22.15" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" - integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.19", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.19.tgz#94b1f281caa6518f02ec0f5ea2b5348e298ce266" - integrity sha512-m6h1cJvn+OJ+R3jOHp30faq5xKJ7VbjwDj5RGgHuRlU9hrMeKsGC+JpihkR5w1g7IfseCPPtZ0r7/hB4UKaYlA== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.19" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz#dabaa50622b3b4670bd6546fc8db23eb12d89da0" - integrity sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.17" - -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz#2f34ab1e445f5b95e2e6edfe50ea2449e610583a" - integrity sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-wrap-function@^7.22.17": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz#222ac3ff9cc8f9b617cc1e5db75c0b538e722801" - integrity sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.17" - -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/highlight@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" - integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.22.15", "@babel/parser@^7.22.16": - version "7.22.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" - integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" - integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" - integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" - integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== - dependencies: - "@babel/helper-module-transforms" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" - integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" - integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.11.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.15.tgz#142716f8e00bc030dae5b2ac6a46fbd8b3e18ff8" - integrity sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@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-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.15" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.19": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.19.tgz#bb2b12b7de9d7fec9e812ed89eea097b941954f8" - integrity sha512-ZCcpVPK64krfdScRbpxF6xA5fz7IOsfMwx1tcACvCzt6JY+0aHkBk7eIU8FRDSZRU5Zei6Z4JfgAxN1bqXGECg== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.16" - "@babel/types" "^7.22.19" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" - integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.19" - to-fast-properties "^2.0.0" - -"@csstools/cascade-layer-name-parser@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz#c4d276e32787651df0007af22c9fa70d9c9ca3c2" - integrity sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg== - -"@csstools/color-helpers@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-3.0.2.tgz#6571d289af8bfcc3a8d75357b35e6d17a8ba6848" - integrity sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q== - -"@csstools/css-calc@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.4.tgz#70bf4c5b379cdc256d3936bf4a21e3a3454a3d68" - integrity sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg== - -"@csstools/css-color-parser@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz#c8517457dcb6ad080848b1583aa029ab61221ce8" - integrity sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA== - dependencies: - "@csstools/color-helpers" "^3.0.2" - "@csstools/css-calc" "^1.1.4" - -"@csstools/css-parser-algorithms@2.3.2", "@csstools/css-parser-algorithms@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz#1e0d581dbf4518cb3e939c3b863cb7180c8cedad" - integrity sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA== - -"@csstools/css-tokenizer@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz#9dc431c9a5f61087af626e41ac2a79cce7bb253d" - integrity sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg== - -"@csstools/media-query-list-parser@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz#94bc8b3c3fd7112a40b7bf0b483e91eba0654a0f" - integrity sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ== - -"@csstools/postcss-cascade-layers@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.1.tgz#43d12cb0ffe9ab461bc41143dc554c6e1cb633e6" - integrity sha512-UYFuFL9GgVnftg9v7tBvVEBRLaBeAD66euD+yYy5fYCUld9ZIWTJNCE30hm6STMEdt6FL5xzeVw1lAZ1tpvUEg== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-color-function@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz#646b0c3e3805e4bb9c1e240bce807f1cc6ccdfea" - integrity sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - -"@csstools/postcss-color-mix-function@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz#0fc9b638bd6b9578a52a50e3af66109ae52dc2b6" - integrity sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - -"@csstools/postcss-exponential-functions@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz#0d938f58ba5ac5c362e09ad22b5768b04ee82650" - integrity sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg== - dependencies: - "@csstools/css-calc" "^1.1.4" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - -"@csstools/postcss-font-format-keywords@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz#9ca3a3ca67122862addf8a1c0c61a6db02dea1cc" - integrity sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gamut-mapping@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz#a23d2c4bd2bd89b2ed3c5d2e062c069ad18745e0" - integrity sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - -"@csstools/postcss-gradients-interpolation-method@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz#e5c2628157fb9dea9aa8cd9c84fdcc2a842af91b" - integrity sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - -"@csstools/postcss-hwb-function@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz#7d56583c6c8607352718a802f87e51edf4f9365e" - integrity sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - -"@csstools/postcss-ic-unit@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz#08b62de51a3636ba40ba8e77cef4619a6e636aac" - integrity sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-initial@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz#e35ec12143a654b384fb81623970deeacedb0769" - integrity sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA== - -"@csstools/postcss-is-pseudo-class@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz#d8b04ff5eefb1a9bc8f1ab99b8f3b6b04b704480" - integrity sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-logical-float-and-clear@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz#15e1b5d16dce01ad1e676167d0909e3958234eb5" - integrity sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg== - -"@csstools/postcss-logical-overflow@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.0.tgz#dbc18226f6cc6a83981184564ed9229a860f6033" - integrity sha512-cIrZ8f7bGGvr+W53nEuMspcwaeaI2YTmz6LZ4yiAO5z14/PQgOOv+Pn+qjvPOPoadeY2BmpaoTzZKvdAQuM17w== - -"@csstools/postcss-logical-overscroll-behavior@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.0.tgz#93f60a71f75dab89b471166e6c3d44c8ef1b76b8" - integrity sha512-e89S2LWjnxf0SB2wNUAbqDyFb/Fow/tlOe1XqOLbNx4rf3LrQokM9qldVx7sarnddml3ORE5LDUmlKpPOOeJTA== - -"@csstools/postcss-logical-resize@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz#751bd5aab335c9973e346e3edacb2a0a16fa8296" - integrity sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz#95e7195660bb8b05cd46f13d0495fe427e2db988" - integrity sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA== - dependencies: - "@csstools/css-tokenizer" "^2.2.1" - -"@csstools/postcss-media-minmax@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz#8d46317b6686cd49e05870ae3c8993e49a54149c" - integrity sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA== - dependencies: - "@csstools/css-calc" "^1.1.4" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/media-query-list-parser" "^2.1.5" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz#a74355c828a13ede8e8390bcf2701a34a60696b3" - integrity sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw== - dependencies: - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/media-query-list-parser" "^2.1.5" - -"@csstools/postcss-nested-calc@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz#b9069f5e1c2ea08de3840a5922e39af4e0ecf4b1" - integrity sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz#8bacd4fa20434de67a7b1f4f64f6e4476922a98d" - integrity sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz#4daff9e85b7f68ea744f2898f73e81d6fe47c0d7" - integrity sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - -"@csstools/postcss-progressive-custom-properties@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz#0c18152160a425950cb69a12a9add55af4f688e7" - integrity sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-relative-color-syntax@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz#1d017aa25e3cda513cf00401a91899e9d3b83659" - integrity sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - -"@csstools/postcss-scope-pseudo-class@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz#23f32181b7de9a33e7c7c71f7620b78284955b82" - integrity sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg== - dependencies: - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-stepped-value-functions@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz#a902395efbf9c5c30a6d902a7c65549fb3f49309" - integrity sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ== - dependencies: - "@csstools/css-calc" "^1.1.4" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - -"@csstools/postcss-text-decoration-shorthand@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz#e0708cf41f94013837edca1c6db23d5d6dd3c10e" - integrity sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ== - dependencies: - "@csstools/color-helpers" "^3.0.2" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz#b03d045015fc6e16d81e36e5783c545b5590a2f2" - integrity sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg== - dependencies: - "@csstools/css-calc" "^1.1.4" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - -"@csstools/postcss-unset-value@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz#6d2f08140b41d3e70d805ccd2baaf64a6f59fdac" - integrity sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA== - -"@csstools/selector-specificity@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247" - integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g== - -"@deanc/esbuild-plugin-postcss@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@deanc/esbuild-plugin-postcss/-/esbuild-plugin-postcss-1.0.2.tgz#4c49b7389291d4f67e71e927e20561b00cc54a2d" - integrity sha512-+WAlrGxipNmcnr9lWlrmzC0mevQ7QqL31bMJu38AyOV44APSoqtzXh103sAkbolKxMcVhuw78m4xjdTKNjvpYA== - dependencies: - autoprefixer "^10.2.4" - css-tree "^1.1.2" - fs-extra "^9.0.1" - postcss "^8.2.4" - tmp "^0.2.1" - -"@esbuild/android-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz#276c5f99604054d3dbb733577e09adae944baa90" - integrity sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ== - -"@esbuild/android-arm@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.5.tgz#4a3cbf14758166abaae8ba9c01a80e68342a4eec" - integrity sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA== - -"@esbuild/android-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.5.tgz#21a3d11cd4613d2d3c5ccb9e746c254eb9265b0a" - integrity sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA== - -"@esbuild/darwin-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz#714cb839f467d6a67b151ee8255886498e2b9bf6" - integrity sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw== - -"@esbuild/darwin-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz#2c553e97a6d2b4ae76a884e35e6cbab85a990bbf" - integrity sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA== - -"@esbuild/freebsd-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz#d554f556718adb31917a0da24277bf84b6ee87f3" - integrity sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ== - -"@esbuild/freebsd-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz#288f7358a3bb15d99e73c65c9adaa3dabb497432" - integrity sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ== - -"@esbuild/linux-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz#95933ae86325c93cb6b5e8333d22120ecfdc901b" - integrity sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA== - -"@esbuild/linux-arm@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz#0acef93aa3e0579e46d33b666627bddb06636664" - integrity sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ== - -"@esbuild/linux-ia32@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz#b6e5c9e80b42131cbd6b1ddaa48c92835f1ed67f" - integrity sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ== - -"@esbuild/linux-loong64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz#e5f0cf95a180158b01ff5f417da796a1c09dfbea" - integrity sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw== - -"@esbuild/linux-mips64el@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz#ae36fb86c7d5f641f3a0c8472e83dcb6ea36a408" - integrity sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg== - -"@esbuild/linux-ppc64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz#7960cb1666f0340ddd9eef7b26dcea3835d472d0" - integrity sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q== - -"@esbuild/linux-riscv64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz#32207df26af60a3a9feea1783fc21b9817bade19" - integrity sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag== - -"@esbuild/linux-s390x@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz#b38d5681db89a3723862dfa792812397b1510a7d" - integrity sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw== - -"@esbuild/linux-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz#46feba2ad041a241379d150f415b472fe3885075" - integrity sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A== - -"@esbuild/netbsd-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz#3b5c1fb068f26bfc681d31f682adf1bea4ef0702" - integrity sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g== - -"@esbuild/openbsd-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz#ca6830316ca68056c5c88a875f103ad3235e00db" - integrity sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA== - -"@esbuild/sunos-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz#9efc4eb9539a7be7d5a05ada52ee43cda0d8e2dd" - integrity sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg== - -"@esbuild/win32-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz#29f8184afa7a02a956ebda4ed638099f4b8ff198" - integrity sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg== - -"@esbuild/win32-ia32@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz#f3de07afb292ecad651ae4bb8727789de2d95b05" - integrity sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw== - -"@esbuild/win32-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz#faad84c41ba12e3a0acb52571df9bff37bee75f6" - integrity sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" - integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.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" - -"@eslint/js@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" - integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== - -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@lerna-lite/changed@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/changed/-/changed-2.6.0.tgz#167e2c96ba693843d1ebe844ef72f99e43c82ff7" - integrity sha512-fimJ6Xx2w6ol7b4x+IEBQOnmxKApsdFcStWlPaOQJ2F017zDGeC5kIy4sK5KO+B3zzND+cVpa4SaRJkTFNBr4g== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - "@lerna-lite/list" "2.6.0" - "@lerna-lite/listable" "2.6.0" - -"@lerna-lite/cli@2.6.0", "@lerna-lite/cli@^2.5.1": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/cli/-/cli-2.6.0.tgz#f9e7ed74cb67925e909add56fa5718eff54e15dc" - integrity sha512-sxJmgGt/zQ4rYfdl5OSp5/TToLB16RVxsoVsUsg/qTl5F5C+P35evYBuXRuFNWr50+MdfHqLisbf0qEJgGAk9g== - dependencies: - "@lerna-lite/core" "2.6.0" - "@lerna-lite/init" "2.6.0" - dedent "^1.5.1" - dotenv "^16.3.1" - import-local "^3.1.0" - load-json-file "^7.0.1" - npmlog "^7.0.1" - yargs "^17.7.2" - -"@lerna-lite/core@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/core/-/core-2.6.0.tgz#224f0e7a7bc261368c239a384e44f2befb182e7e" - integrity sha512-WFyDgjuHHj5dC8WYA4w1hoMyUL8pnb7eFNMVYgPYzXi1L8yoQPpvJr02wOWl464XJbhhfr8Q8tMdMHI7YUSbMQ== - dependencies: - "@npmcli/run-script" "^7.0.1" - chalk "^5.3.0" - clone-deep "^4.0.1" - config-chain "^1.1.13" - cosmiconfig "^8.3.6" - dedent "^1.5.1" - execa "^8.0.1" - fs-extra "^11.1.1" - glob-parent "^6.0.2" - globby "^13.2.2" - inquirer "^9.2.11" - is-ci "^3.0.1" - json5 "^2.2.3" - load-json-file "^7.0.1" - minimatch "^9.0.3" - npm-package-arg "^11.0.1" - npmlog "^7.0.1" - p-map "^6.0.0" - p-queue "^7.4.1" - resolve-from "^5.0.0" - semver "^7.5.4" - slash "^5.1.0" - strong-log-transformer "^2.1.0" - write-file-atomic "^5.0.1" - write-json-file "^5.0.0" - write-pkg "^6.0.0" - -"@lerna-lite/diff@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/diff/-/diff-2.6.0.tgz#5d67b7ffb9ddc8d1ac02f1480f522d508df68fd5" - integrity sha512-vd/JMVLH4xNefXx5W1DTCBw7nT1MIuQsoV+9dUcgickzGJTN3cNmJ33zaS4PDcy0I3n60VKR3awjlE4jofgxXw== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - -"@lerna-lite/exec@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/exec/-/exec-2.6.0.tgz#dc9ed20dae1937b3ccaa3f82f79dedc753147fa0" - integrity sha512-4uqwAzfltAKfVPxgT78cS4Pb79ORT0TJtIbshXxbxwjHwd06JsuVQYRnkHxzwizNe24uZJbpRxsnNn4zEsRN7w== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - "@lerna-lite/filter-packages" "2.6.0" - "@lerna-lite/profiler" "2.6.0" - chalk "^5.3.0" - dotenv "^16.3.1" - npmlog "^7.0.1" - p-map "^6.0.0" - -"@lerna-lite/filter-packages@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/filter-packages/-/filter-packages-2.6.0.tgz#f8b8e3bf2779b9d235915561c2992afbc054b831" - integrity sha512-K+KQ3yzzbGJ5Hhr7ij5SiFnWjs7Ns+dpaRjPlVbEnJZnkR2CTOG18fboQs241O5yPMO2EZYBVRL8EA2a9AUi8g== - dependencies: - "@lerna-lite/core" "2.6.0" - multimatch "^6.0.0" - npmlog "^7.0.1" - -"@lerna-lite/init@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/init/-/init-2.6.0.tgz#16d18d8bbde0ecfec44a753f4116bd7cdccd8e44" - integrity sha512-K8lxcQXgGrTfl3YyvKSl+uiAT287vd1awouvme7m+3j32H6DTI31u35t7mR6mBY7GhkDLX/iJzjaHpv2qBb3NQ== - dependencies: - "@lerna-lite/core" "2.6.0" - fs-extra "^11.1.1" - p-map "^6.0.0" - write-json-file "^5.0.0" - -"@lerna-lite/list@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/list/-/list-2.6.0.tgz#2a8efd38be6d279b9794f2e07561cffec3883b1c" - integrity sha512-5NGjg+sPrNqF9lCvEK3w8eJ5TIJst8Drn5maNuel5g1PrWmaRrXYLnuWL3qCWeXQbHeFIMFrJ2JJ+qIAwTwq2A== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - "@lerna-lite/filter-packages" "2.6.0" - "@lerna-lite/listable" "2.6.0" - -"@lerna-lite/listable@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/listable/-/listable-2.6.0.tgz#63b7de81e7a3c99770943c5d0a8c0c3534c2b4b3" - integrity sha512-Pcfu2oSBLJomvIisWoJ1BVe9aR/2kVeg/z3R4oCSKdR3m5jsApTmd/K258O+Z4xj+gbRzZbn02F4WRCkPJlJlA== - dependencies: - "@lerna-lite/core" "2.6.0" - chalk "^5.3.0" - columnify "^1.6.0" - -"@lerna-lite/profiler@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/profiler/-/profiler-2.6.0.tgz#9efa04588a8912fb81107dba84a7f778591c2dbe" - integrity sha512-9uHJ6NefsFMlGwWQyXAuepz/1vkCeGPO/xTs5H3gtCwOR9NLNwlPwy827WjX4wNRMNdjZNzxW2ogPky5z/evkQ== - dependencies: - "@lerna-lite/core" "2.6.0" - fs-extra "^11.1.1" - npmlog "^7.0.1" - upath "^2.0.1" - -"@lerna-lite/publish@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/publish/-/publish-2.6.0.tgz#a434a841ad46f44260908e5a2adc8854800c8b93" - integrity sha512-Xa7MT1nZ8Q6vY0vwLMZgdoX8Lz2PHZ6tEMWx54qgWiK0HYOfZjW+NNXGV9hKu6PpaRBq+N5PIKOptJSjQCjEew== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - "@lerna-lite/version" "2.6.0" - "@npmcli/arborist" "^7.2.0" - byte-size "^8.1.1" - chalk "^5.3.0" - columnify "^1.6.0" - fs-extra "^11.1.1" - glob "^10.3.10" - has-unicode "^2.0.1" - libnpmaccess "^8.0.1" - libnpmpublish "^9.0.1" - normalize-path "^3.0.0" - npm-package-arg "^11.0.1" - npm-packlist "^8.0.0" - npm-registry-fetch "^16.1.0" - npmlog "^7.0.1" - p-map "^6.0.0" - p-pipe "^4.0.0" - pacote "^17.0.4" - pify "^6.1.0" - read-package-json "^7.0.0" - semver "^7.5.4" - ssri "^10.0.5" - tar "^6.2.0" - temp-dir "^3.0.0" - -"@lerna-lite/run@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/run/-/run-2.6.0.tgz#6d5d26f0905bd6070fdd5206b2758c4febe56b7c" - integrity sha512-480KjBhInw14qVsINuQO6Qg5woei1vPAcOWMITKoPoYHAiWfEHtLQK9oCCltyGFlyGQalLhoJs7a+m0GchO1XQ== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - "@lerna-lite/filter-packages" "2.6.0" - "@lerna-lite/profiler" "2.6.0" - chalk "^5.3.0" - fs-extra "^11.1.1" - npmlog "^7.0.1" - p-map "^6.0.0" - -"@lerna-lite/version@2.6.0", "@lerna-lite/version@^2.5.1": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@lerna-lite/version/-/version-2.6.0.tgz#a19edb76db6a7fd69922e260f189666436e6ac3f" - integrity sha512-OEdSV6SwYqspXls2Nthd6itw7XJaWGAr65rDVrgcQajQ0dAngateYtsq/zmRMaJnSYNX6u5gUV5y+6WISQaGMA== - dependencies: - "@lerna-lite/cli" "2.6.0" - "@lerna-lite/core" "2.6.0" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^19.0.13" - chalk "^5.3.0" - conventional-changelog-angular "^6.0.0" - conventional-changelog-core "^5.0.2" - conventional-changelog-writer "^6.0.1" - conventional-commits-parser "^5.0.0" - conventional-recommended-bump "^7.0.1" - dedent "^1.5.1" - fs-extra "^11.1.1" - get-stream "^8.0.1" - git-url-parse "^13.1.0" - graceful-fs "^4.2.11" - is-stream "^3.0.0" - load-json-file "^7.0.1" - make-dir "^4.0.0" - minimatch "^9.0.3" - new-github-release-url "^2.0.0" - node-fetch "^3.3.2" - npm-package-arg "^11.0.1" - npmlog "^7.0.1" - p-map "^6.0.0" - p-pipe "^4.0.0" - p-reduce "^3.0.0" - pify "^6.1.0" - semver "^7.5.4" - slash "^5.1.0" - temp-dir "^3.0.0" - uuid "^9.0.1" - write-json-file "^5.0.0" - -"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz#64df34e2f12e68e78ac57e571d25ec07fa460ca9" - integrity sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ== - -"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" - integrity sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.0.0" - -"@ljharb/through@^2.3.11": - version "2.3.11" - resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.11.tgz#783600ff12c06f21a76cc26e33abd0b1595092f9" - integrity sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w== - dependencies: - call-bind "^1.0.2" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/agent@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.1.1.tgz#31095663b8feef27ec3eccd5254a35b8fc70353a" - integrity sha512-6RlbiOAi6L6uUYF4/CDEkDZQnKw0XDsFJVrEpnib8rAx2WRMOsUyAdgnvDpX/fdkDWxtqE+NHwF465llI2wR0g== - dependencies: - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.1" - -"@npmcli/arborist@^7.2.0": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.2.1.tgz#fcd7254a613b92a3174a57c896c249e30142bff1" - integrity sha512-o1QIAX56FC8HEPF+Hf4V4/hck9j0a3UiLnMX4aDHPbtU4Po1tUOUSmc2GAx947VWT+acrdMYTDkqUt2CaSXt7A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.0" - "@npmcli/installed-package-contents" "^2.0.2" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^7.0.0" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.0.0" - "@npmcli/query" "^3.0.1" - "@npmcli/run-script" "^7.0.2" - bin-links "^4.0.1" - cacache "^18.0.0" - common-ancestor-path "^1.0.1" - hosted-git-info "^7.0.1" - json-parse-even-better-errors "^3.0.0" - json-stringify-nice "^1.1.4" - minimatch "^9.0.0" - nopt "^7.0.0" - npm-install-checks "^6.2.0" - npm-package-arg "^11.0.1" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^16.0.0" - npmlog "^7.0.1" - pacote "^17.0.4" - parse-conflict-json "^3.0.0" - proc-log "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.2" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.5" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.3.tgz#ad3ede0994bcf716ddb63d361f3ea16cb72d878c" - integrity sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw== - dependencies: - "@npmcli/promise-spawn" "^7.0.0" - lru-cache "^10.0.1" - npm-pick-manifest "^9.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^4.0.0" - -"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/map-workspaces@^3.0.2": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" - integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.0.0.tgz#fb59245926d7f677db904177f9aca15ac883d6cb" - integrity sha512-Pw0tyX02VkpqlIQlG2TeiJNsdrecYeUU0ubZZa9pi3N37GCsxI+en43u4hYFdq+eSx1A9a9vwFAUyqEtKFsbHQ== - dependencies: - cacache "^18.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^17.0.0" - semver "^7.3.5" - -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.0.0.tgz#77d0f8b17096763ccbd8af03b7117ba6e34d6e91" - integrity sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^3.0.0" - semver "^7.5.3" - -"@npmcli/promise-spawn@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz#fd1c64ed4ff2341e503e1f390c62640a6540df09" - integrity sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ== - dependencies: - which "^4.0.0" - -"@npmcli/query@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.1.tgz#77d63ceb7d27ed748da3cc8b50d45fc341448ed6" - integrity sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/run-script@^7.0.0", "@npmcli/run-script@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.1.tgz#18eebaed96214357f618a82510411319181417bd" - integrity sha512-Od/JMrgkjZ8alyBE0IzeqZDiF1jgMez9Gkc/OYrCkHHiXNwM0wc6s7+h+xM7kYDZkS0tAoOLr9VvygyE5+2F7g== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^7.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^3.0.0" - which "^4.0.0" - -"@npmcli/run-script@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.2.tgz#497e7f058799497889df65900c711312252276d3" - integrity sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^7.0.0" - node-gyp "^10.0.0" - read-package-json-fast "^3.0.0" - which "^4.0.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^18.0.0": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" - integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== - -"@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" - integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== - dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^7.1.2": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" - integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== - dependencies: - "@octokit/types" "^10.0.0" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.13": - version "19.0.13" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.13.tgz#e799393264edc6d3c67eeda9e5bd7832dcf974e4" - integrity sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA== - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.1.2" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-node-resolve@^15.0.1": - version "15.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz#a15b14fb7969229e26a30feff2816d39eff503f0" - integrity sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w== - dependencies: - "@rollup/pluginutils" "^5.0.1" - "@types/resolve" "1.20.2" - deepmerge "^4.2.2" - is-builtin-module "^3.2.1" - is-module "^1.0.0" - resolve "^1.22.1" - -"@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" - integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@sigstore/bundle@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.1.0.tgz#c6140ca97b68815edf7c4fb7bdbf58d656525c39" - integrity sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng== - dependencies: - "@sigstore/protobuf-specs" "^0.2.1" - -"@sigstore/protobuf-specs@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" - integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== - -"@sigstore/sign@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.1.0.tgz#801f4b5f60e13ecd1925117a7d084ab7b2199f01" - integrity sha512-4VRpfJxs+8eLqzLVrZngVNExVA/zAhVbi4UT4zmtLi4xRd7vz5qie834OgkrGsLlLB1B2nz/3wUxT1XAUBe8gw== - dependencies: - "@sigstore/bundle" "^2.1.0" - "@sigstore/protobuf-specs" "^0.2.1" - make-fetch-happen "^13.0.0" - -"@sigstore/tuf@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.2.0.tgz#ef636239687e41af3f2ce10667ab88f5ca6165b3" - integrity sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA== - dependencies: - "@sigstore/protobuf-specs" "^0.2.1" - tuf-js "^2.1.0" - -"@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - -"@telegraf/types@^6.8.1": - version "6.8.1" - resolved "https://registry.yarnpkg.com/@telegraf/types/-/types-6.8.1.tgz#c9c567e8ba4fb3c656494f3901a7dfb22cb7d676" - integrity sha512-JCRQuPPDCreYQaAeOwnqIlWrs8pJVvaNEUWBVNvdK3oJoTUKyBV+3TsPrIcnGqLeapptznuTk5s4udTlZPvGTA== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.0.tgz#c7ab241cf11dd29deb213d6817dabb8c99ce0863" - integrity sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.3" - -"@types/accepts@*": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" - integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== - dependencies: - "@types/node" "*" - -"@types/body-parser@*": - version "1.19.3" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" - integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/command-line-args@^5.0.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.1.tgz#233bd1ba687e84ecbec0388e09f9ec9ebf63c55b" - integrity sha512-U2OcmS2tj36Yceu+mRuPyUV0ILfau/h5onStcSCzqTENsq0sBiAp2TmaXu1k8fY4McLcPKSYl9FRzn2hx5bI+w== - -"@types/connect@*": - version "3.4.36" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== - dependencies: - "@types/node" "*" - -"@types/content-disposition@*": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.6.tgz#0f5fa03609f308a7a1a57e0b0afe4b95f1d19740" - integrity sha512-GmShTb4qA9+HMPPaV2+Up8tJafgi38geFi7vL4qAM7k8BwjoelgHZqEUKJZLvughUw22h6vD/wvwN4IUCaWpDA== - -"@types/cookies@*": - version "0.7.8" - resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.8.tgz#16fccd6d58513a9833c527701a90cc96d216bc18" - integrity sha512-y6KhF1GtsLERUpqOV+qZJrjUGzc0GE6UTa0b5Z/LZ7Nm2mKSdCXmS6Kdnl7fctPNnMSouHjxqEWI12/YqQfk5w== - dependencies: - "@types/connect" "*" - "@types/express" "*" - "@types/keygrip" "*" - "@types/node" "*" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/express-serve-static-core@^4.17.33": - version "4.17.36" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" - integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/fs-extra@^11.0.1": - version "11.0.2" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-11.0.2.tgz#23dc1ed7b2eba8ccd75568ac34e7a4e48aa2d087" - integrity sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ== - dependencies: - "@types/jsonfile" "*" - "@types/node" "*" - -"@types/http-assert@*": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661" - integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA== - -"@types/http-errors@*": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" - integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== - -"@types/json-schema@^7.0.12": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/jsonfile@*": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@types/jsonfile/-/jsonfile-6.1.2.tgz#d3b8a3536c5bb272ebee0f784180e456b7691c8f" - integrity sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w== - dependencies: - "@types/node" "*" - -"@types/keygrip@*": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.3.tgz#2286b16ef71d8dea74dab00902ef419a54341bfe" - integrity sha512-tfzBBb7OV2PbUfKbG6zRE5UbmtdLVCKT/XT364Z9ny6pXNbd9GnIB6aFYpq2A5lZ6mq9bhXgK6h5MFGNwhMmuQ== - -"@types/koa-compose@*": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.6.tgz#17a077786d0ac5eee04c37a7d6c207b3252f6de9" - integrity sha512-PHiciWxH3NRyAaxUdEDE1NIZNfvhgtPlsdkjRPazHC6weqt90Jr0uLhIQs+SDwC8HQ/jnA7UQP6xOqGFB7ugWw== - dependencies: - "@types/koa" "*" - -"@types/koa@*", "@types/koa@^2.11.6": - version "2.13.9" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.9.tgz#8d989ac17d7f033475fbe34c4f906c9287c2041a" - integrity sha512-tPX3cN1dGrMn+sjCDEiQqXH2AqlPoPd594S/8zxwUm/ZbPsQXKqHPUypr2gjCPhHUc+nDJLduhh5lXI/1olnGQ== - dependencies: - "@types/accepts" "*" - "@types/content-disposition" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/http-errors" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/minimatch@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0", "@types/minimist@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*", "@types/node@^20.9.0": - version "20.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" - integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== - dependencies: - undici-types "~5.26.4" - -"@types/node@^18.16.3": - version "18.17.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.17.tgz#53cc07ce582c9d7c5850702a3c2cb0af0d7b0ca1" - integrity sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw== - -"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse5@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" - integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== - -"@types/ps-tree@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/ps-tree/-/ps-tree-1.1.2.tgz#5c60773a38ffb1402e049902a7b7a8d3c67cd59a" - integrity sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw== - -"@types/qs@*": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/resolve@1.20.2": - version "1.20.2" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" - integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== - -"@types/semver@^7.5.0": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" - integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/trusted-types@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.4.tgz#2b38784cd16957d3782e8e2b31c03bc1d13b4d65" - integrity sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ== - -"@types/which@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/which/-/which-3.0.0.tgz#849afdd9fdcb0b67339b9cfc80fa6ea4e0253fc5" - integrity sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ== - -"@types/ws@^7.4.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz#ed2a38867190f8a688af85ad7c8a74670b8b3675" - integrity sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.0" - "@typescript-eslint/type-utils" "6.7.0" - "@typescript-eslint/utils" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.0.tgz#332fe9c7ecf6783d3250b4c8a960bd4af0995807" - integrity sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng== - dependencies: - "@typescript-eslint/scope-manager" "6.7.0" - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/typescript-estree" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz#6b3c22187976e2bf5ed0dc0d9095f1f2cbd1d106" - integrity sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA== - dependencies: - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - -"@typescript-eslint/type-utils@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.0.tgz#21a013d4c7f96255f5e64ac59fb41301d1e052ba" - integrity sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg== - dependencies: - "@typescript-eslint/typescript-estree" "6.7.0" - "@typescript-eslint/utils" "6.7.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.0.tgz#8de8ba9cafadc38e89003fe303e219c9250089ae" - integrity sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q== - -"@typescript-eslint/typescript-estree@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz#20ce2801733bd46f02cc0f141f5b63fbbf2afb63" - integrity sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ== - dependencies: - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.0.tgz#61b6f1f1b82ad529abfcee074d21764e880886fb" - integrity sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.0" - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/typescript-estree" "6.7.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz#34140ac76dfb6316d17012e4469acf3366ad3f44" - integrity sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ== - dependencies: - "@typescript-eslint/types" "6.7.0" - eslint-visitor-keys "^3.4.1" - -"@vscode/web-custom-data@^0.4.2": - version "0.4.8" - resolved "https://registry.yarnpkg.com/@vscode/web-custom-data/-/web-custom-data-0.4.8.tgz#d1b7c18752361cf5b6b09a2e1cc14f34daba1a74" - integrity sha512-rRiEeEX49wipCeGZo65mQJUEuCY3IXd6bet90eY6cMMQ9jBe2g3Njw/2ctbaxuACPnEKXTdW0dB7umxDln3Rzg== - -"@web/config-loader@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@web/config-loader/-/config-loader-0.3.0.tgz#9c465b0ff5ec12e0f7c68326df8e99431c1b5c7f" - integrity sha512-OOhltaFpMzt1dG66yPoXgGvjwaUxy2SrOXd+o6CjOEFfjeKBI9QoHlagUvYiLAcMZrGGGL+Rl+mdqH+GUji0vQ== - dependencies: - semver "^7.3.4" - -"@web/dev-server-core@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@web/dev-server-core/-/dev-server-core-0.7.0.tgz#ffe71dd272ecb73a2b0c1ee23f3fad812780b998" - integrity sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g== - dependencies: - "@types/koa" "^2.11.6" - "@types/ws" "^7.4.0" - "@web/parse5-utils" "^2.1.0" - chokidar "^3.4.3" - clone "^2.1.2" - es-module-lexer "^1.0.0" - get-stream "^6.0.0" - is-stream "^2.0.0" - isbinaryfile "^5.0.0" - koa "^2.13.0" - koa-etag "^4.0.0" - koa-send "^5.0.1" - koa-static "^5.0.0" - lru-cache "^8.0.4" - mime-types "^2.1.27" - parse5 "^6.0.1" - picomatch "^2.2.2" - ws "^7.4.2" - -"@web/dev-server-rollup@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@web/dev-server-rollup/-/dev-server-rollup-0.6.0.tgz#eeb61f6d32c091b6af249f7ef5c39607e137d169" - integrity sha512-3cSLo/H8AGrJH7BRY/s7W3g38gzaBj3jcLiT1iUXPNFVn4hQJDO8mZEHqe02/XcO5p6wE65w6GrH0NAjOu1gUg== - dependencies: - "@rollup/plugin-node-resolve" "^15.0.1" - "@web/dev-server-core" "^0.7.0" - nanocolors "^0.2.1" - parse5 "^6.0.1" - rollup "^3.15.0" - whatwg-url "^11.0.0" - -"@web/dev-server@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@web/dev-server/-/dev-server-0.4.0.tgz#aaeacec8c859fe481e1816af34b8d7a8a1715978" - integrity sha512-xBV+mYLZnmIu47l0VWG4wSIl9FVF1c1+R0r3P4zWPkqh0qCoWPKv/ZwdEiKozmZib1QAHMB+7yYZr8ygYi/meA== - dependencies: - "@babel/code-frame" "^7.12.11" - "@types/command-line-args" "^5.0.0" - "@web/config-loader" "^0.3.0" - "@web/dev-server-core" "^0.7.0" - "@web/dev-server-rollup" "^0.6.0" - camelcase "^6.2.0" - command-line-args "^5.1.1" - command-line-usage "^7.0.1" - debounce "^1.2.0" - deepmerge "^4.2.2" - ip "^1.1.5" - nanocolors "^0.2.1" - open "^8.0.2" - portfinder "^1.0.32" - -"@web/parse5-utils@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@web/parse5-utils/-/parse5-utils-2.1.0.tgz#3d33aca62c66773492f2fba89d23a45f8b57ba4a" - integrity sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA== - dependencies: - "@types/parse5" "^6.0.1" - parse5 "^6.0.1" - -"@webcomponents/webcomponentsjs@^2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.8.0.tgz#ab21f027594fa827c1889e8b646da7be27c7908a" - integrity sha512-loGD63sacRzOzSJgQnB9ZAhaQGkN7wl2Zuw7tsphI5Isa0irijrRo6EnJii/GgjGefIFO8AIO7UivzRhFaEk9w== - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1, abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.6.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz#05a6fc0e5f70771b673e82b0f915616e0ace8fd3" - integrity sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA== - dependencies: - delegates "^1.0.0" - readable-stream "^4.1.0" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-6.2.2.tgz#f567d99e9af88a6d3d2f9dfcc21db6f9ba9fd157" - integrity sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-differ@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-4.0.0.tgz#aa3c891c653523290c880022f45b06a42051b026" - integrity sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-union@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" - integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== - -array.prototype.findlastindex@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.2.4, autoprefixer@^10.4.16: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" - -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bin-links@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.2.tgz#13321472ea157e9530caded2b7281496d698665b" - integrity sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.10, browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -builtin-modules@^3.1.0, builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" - integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== - -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cacache@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.0.tgz#17a9ecd6e1be2564ebe6cdca5f7cfed2bfeb6ddc" - integrity sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001561" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" - integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== - -chalk-template@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b" - integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg== - dependencies: - chalk "^4.1.2" - -chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.2.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^3.3.0, chokidar@^3.4.3, chokidar@^3.5.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^3.2.0, ci-info@^3.6.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== - -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -cmd-shim@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" - integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -command-line-args@^5.1.1, command-line-args@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^7.0.0, command-line-usage@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-7.0.1.tgz#e540afef4a4f3bc501b124ffde33956309100655" - integrity sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ== - dependencies: - array-back "^6.2.2" - chalk-template "^0.4.0" - table-layout "^3.0.0" - typical "^7.1.1" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -content-disposition@~0.5.2: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -conventional-changelog-angular@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" - integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-core@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.2.tgz#78dbe6c346162be4132b7890668d3e860cad2d08" - integrity sha512-RhQOcDweXNWvlRwUDCpaqXzbZemKPKncCWZG50Alth72WITVd6nhVk9MJ6w1k9PFNBcZ3YwkdkChE+8+ZwtUug== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^6.0.0" - conventional-commits-parser "^4.0.0" - dateformat "^3.0.3" - get-pkg-repo "^4.2.1" - git-raw-commits "^3.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^5.0.0" - normalize-package-data "^3.0.3" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - -conventional-changelog-preset-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" - integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== - -conventional-changelog-writer@^6.0.0, conventional-changelog-writer@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" - integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== - dependencies: - conventional-commits-filter "^3.0.0" - dateformat "^3.0.3" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - meow "^8.1.2" - semver "^7.0.0" - split "^1.0.1" - -conventional-commits-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" - integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.1" - -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== - dependencies: - JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" - -conventional-commits-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" - integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== - dependencies: - JSONStream "^1.3.5" - is-text-path "^2.0.0" - meow "^12.0.1" - split2 "^4.0.0" - -conventional-recommended-bump@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" - integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^3.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" - git-raw-commits "^3.0.0" - git-semver-tags "^5.0.0" - meow "^8.1.2" - -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookies@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" - integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== - dependencies: - depd "~2.0.0" - keygrip "~1.1.0" - -core-js-compat@^3.31.0: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== - dependencies: - browserslist "^4.21.10" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^8.3.6: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-blank-pseudo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz#2bc6f812a5f60296c04c55b1696bad4300dcdbcc" - integrity sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw== - dependencies: - postcss-selector-parser "^6.0.13" - -css-has-pseudo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz#b8c8f39a19bc83c5be59fd251510a7e443c47968" - integrity sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - postcss-value-parser "^4.2.0" - -css-prefers-color-scheme@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz#7e9b74062655ea15490e359cb456a3b9f4c93327" - integrity sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g== - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -cssdb@^7.9.0: - version "7.9.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.9.0.tgz#d42d8269ff3d3e1c366280ab1f9f6207057b262c" - integrity sha512-WPMT9seTQq6fPAa1yN4zjgZZeoTriSN2LqW9C+otjar12DQIWA4LuSfFrvFJiKp4oD0xIk1vumDLw8K9ur4NBw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debounce@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -dedent@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge-ts@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz#c55206cc4c7be2ded89b9c816cf3608884525d7a" - integrity sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@^2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -destroy@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-7.0.1.tgz#cbb060a12842b9c4d333f1cac4aa4da1bb66bc25" - integrity sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g== - -didyoumean2@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/didyoumean2/-/didyoumean2-4.1.0.tgz#f813cb7c82c249443e599be077f76e88f24b85e4" - integrity sha512-qTBmfQoXvhKO75D/05C8m+fteQmn4U46FWYiLhXtZQInzitXLWY0EQ/2oKnpAz9g2lQWW8jYcLcT+hPJGT+kig== - dependencies: - "@babel/runtime" "^7.10.2" - leven "^3.1.0" - lodash.deburr "^4.1.0" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -duplexer@^0.1.1, duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.535: - version "1.4.578" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.578.tgz#7a3510f333bcd55e87882799ebeb7518d6ab4d95" - integrity sha512-V0ZhSu1BQZKfG0yNEL6Dadzik8E1vAzfpVOapdSiT9F6yapEJ3Bk+4tZ4SMPdWiUchCgnM/ByYtBzp5ntzDMIA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -enhanced-resolve@^5.12.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1, error-ex@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" - -es-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -esbuild@^0.19.5: - version "0.19.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.5.tgz#53a0e19dfbf61ba6c827d51a80813cf071239a8c" - integrity sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ== - optionalDependencies: - "@esbuild/android-arm" "0.19.5" - "@esbuild/android-arm64" "0.19.5" - "@esbuild/android-x64" "0.19.5" - "@esbuild/darwin-arm64" "0.19.5" - "@esbuild/darwin-x64" "0.19.5" - "@esbuild/freebsd-arm64" "0.19.5" - "@esbuild/freebsd-x64" "0.19.5" - "@esbuild/linux-arm" "0.19.5" - "@esbuild/linux-arm64" "0.19.5" - "@esbuild/linux-ia32" "0.19.5" - "@esbuild/linux-loong64" "0.19.5" - "@esbuild/linux-mips64el" "0.19.5" - "@esbuild/linux-ppc64" "0.19.5" - "@esbuild/linux-riscv64" "0.19.5" - "@esbuild/linux-s390x" "0.19.5" - "@esbuild/linux-x64" "0.19.5" - "@esbuild/netbsd-x64" "0.19.5" - "@esbuild/openbsd-x64" "0.19.5" - "@esbuild/sunos-x64" "0.19.5" - "@esbuild/win32-arm64" "0.19.5" - "@esbuild/win32-ia32" "0.19.5" - "@esbuild/win32-x64" "0.19.5" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -eslint-config-google@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" - integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== - -eslint-import-resolver-node@^0.3.7: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" - integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" - is-glob "^4.0.3" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.28.1: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-lit@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-lit/-/eslint-plugin-lit-1.9.1.tgz#40cdd1f8d1b565eb5e913eab159c88f6f947bb19" - integrity sha512-XFFVufVxYJwqRB9sLkDXB7SvV1xi9hrC4HRFEdX1h9+iZ3dm4x9uS7EuT9uaXs6zR3DEgcojia1F7pmvWbc4Gg== - dependencies: - parse5 "^6.0.1" - parse5-htmlparser2-tree-adapter "^6.0.1" - requireindex "^1.2.0" - -eslint-plugin-wc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-wc/-/eslint-plugin-wc-2.0.0.tgz#63c7c509125a33291dda2420d4f9a512b6aa0e9b" - integrity sha512-7fS5IF/2mZZnyEhO6NKblLKTLzlRuC/hl+HxjwhG9dHYsY1BmFRG+J1+GqDynV7Fkb4Hsjbvqll/vvEs2J+hgw== - dependencies: - is-valid-element-name "^1.0.0" - js-levenshtein-esm "^1.2.0" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.49.0: - version "8.49.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" - integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.49.0" - "@humanwhocodes/config-array" "^0.11.11" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" - -exit-hook@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-4.0.0.tgz#c1e16ebd03d3166f837b1502dac755bb5c460d58" - integrity sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ== - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.11: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - 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.4" - -fast-glob@^3.2.2, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - 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.4" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -figures@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" - integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatstr@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" - integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== - -flatted@^3.2.7: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fraction.js@^4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== - -fs-extra@^11.0.0, fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -fx@*: - version "28.0.1" - resolved "https://registry.yarnpkg.com/fx/-/fx-28.0.1.tgz#c00aafb3b2cebcfc57e6db91753a74c8a02388d6" - integrity sha512-U/ELI6liBxdquKMe7oA6sOYgutVjSmaQTpZ3MDhJs/9l4lK6ewATv1SQCR8LRDz+n2sKTjcNEnj1djtuZ9OgoA== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gauge@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" - integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^4.0.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-pkg-repo@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.5.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^1.0.0" - -git-raw-commits@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" - integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== - dependencies: - dargs "^7.0.0" - meow "^8.1.2" - split2 "^3.2.2" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" - integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== - dependencies: - meow "^8.1.2" - semver "^7.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.2.2, glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.0.0, globby@^13.1.4, globby@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^7.0.0, hosted-git-info@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" - integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== - dependencies: - lru-cache "^10.0.1" - -http-assert@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" - integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== - dependencies: - deep-equal "~1.0.1" - http-errors "~1.8.0" - -http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" - integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idb@^7.0.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -ignore-walk@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" - integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== - dependencies: - minimatch "^9.0.0" - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@^1.3.2, ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^9.2.11: - version "9.2.12" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.12.tgz#0348e9311765b7c93fce143bb1c0ef1ae879b1d7" - integrity sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q== - dependencies: - "@ljharb/through" "^2.3.11" - ansi-escapes "^4.3.2" - chalk "^5.3.0" - cli-cursor "^3.1.0" - cli-width "^4.1.0" - external-editor "^3.1.0" - figures "^5.0.0" - lodash "^4.17.21" - mute-stream "1.0.0" - ora "^5.4.1" - run-async "^3.0.0" - rxjs "^7.8.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -ip@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== - dependencies: - text-extensions "^2.0.0" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-unicode-supported@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -is-valid-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz#26ef3fd76cdf1f122d105406e32d35b0de005981" - integrity sha512-GZITEJY2LkSjQfaIPBha7eyZv+ge0PhBR7KITeCCWvy7VBQrCUdFkvpI+HrAPQjVtVjy1LvlEkqQTHckoszruw== - dependencies: - is-potential-custom-element-name "^1.0.0" - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isbinaryfile@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" - integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jiti@^1.19.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - -js-levenshtein-esm@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz#96532c34e0c90df198c9419963c64ca3cf43ae92" - integrity sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" - integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.0, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== - dependencies: - tsscmp "1.0.6" - -keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== - -koa-convert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" - integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== - dependencies: - co "^4.6.0" - koa-compose "^4.1.0" - -koa-etag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/koa-etag/-/koa-etag-4.0.0.tgz#2c2bb7ae69ca1ac6ced09ba28dcb78523c810414" - integrity sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg== - dependencies: - etag "^1.8.1" - -koa-send@^5.0.0, koa-send@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" - integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== - dependencies: - debug "^4.1.1" - http-errors "^1.7.3" - resolve-path "^1.4.0" - -koa-static@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" - integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== - dependencies: - debug "^3.1.0" - koa-send "^5.0.0" - -koa@^2.13.0: - version "2.14.2" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.14.2.tgz#a57f925c03931c2b4d94b19d2ebf76d3244863fc" - integrity sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "^4.3.2" - delegates "^1.0.0" - depd "^2.0.0" - destroy "^1.0.4" - encodeurl "^1.0.2" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^2.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.1.tgz#46bc5e3b76072dbb8d77803882d434508219f312" - integrity sha512-MWbnWIfxLKol+BgC1NR1as1JwM5ufZASd6CaENJjNe4JpJ0gx71xhpYY5SvNMZnVBahocYZWP6+SPQdyD0abEQ== - dependencies: - npm-package-arg "^11.0.1" - npm-registry-fetch "^16.0.0" - -libnpmpublish@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.1.tgz#2afff1c6d271a21d15e71744e18619f38bb26846" - integrity sha512-w5Ev46SnPaEpjfa0a5+p2vYSB19nONF/mRX8RcIRp2gpPxMWldFVZy/fXei/uflMLQq33mjKMqiVoNcz6ZJCYg== - dependencies: - ci-info "^3.6.1" - normalize-package-data "^6.0.0" - npm-package-arg "^11.0.1" - npm-registry-fetch "^16.0.0" - proc-log "^3.0.0" - semver "^7.3.7" - sigstore "^2.1.0" - ssri "^10.0.5" - -lilconfig@^2.0.5, lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== - -lit-analyzer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lit-analyzer/-/lit-analyzer-2.0.1.tgz#db9d67866daf3c85ea6a5a624e1987c11d06fb86" - integrity sha512-4bHJLCbxywMHd9bnVkLDkCSHXs/KrlwUks75EhYtJNdzH07O5BSVdZdadbw4T2AvuYxb0xRO4ZjqgQJCkp8Kjg== - dependencies: - "@vscode/web-custom-data" "^0.4.2" - chalk "^2.4.2" - didyoumean2 "4.1.0" - fast-glob "^3.2.11" - parse5 "5.1.0" - ts-simple-type "~2.0.0-next.0" - vscode-css-languageservice "4.3.0" - vscode-html-languageservice "3.1.0" - web-component-analyzer "^2.0.0" - -lit-element@^3.3.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.3.tgz#10bc19702b96ef5416cf7a70177255bfb17b3209" - integrity sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.1.0" - "@lit/reactive-element" "^1.3.0" - lit-html "^2.8.0" - -lit-html@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" - integrity sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== - dependencies: - "@types/trusted-types" "^2.0.2" - -lit@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" - integrity sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA== - dependencies: - "@lit/reactive-element" "^1.6.0" - lit-element "^3.3.0" - lit-html "^2.8.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00" - integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.assignwith@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" - integrity sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g== - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.deburr@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" - integrity sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -lru-cache@^8.0.4: - version "8.0.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" - integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== - -magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-fetch-happen@^11.0.3: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -make-fetch-happen@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" - integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - ssri "^10.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^12.0.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" - integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== - -meow@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" - integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -modify-values@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -mri@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-6.0.0.tgz#c72a9bddbc94baa4727efd613b5d22a1fe4d6ee3" - integrity sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ== - dependencies: - "@types/minimatch" "^3.0.5" - array-differ "^4.0.0" - array-union "^3.0.1" - minimatch "^3.0.4" - -mute-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanocolors@^0.2.1: - version "0.2.13" - resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.2.13.tgz#dfd1ed0bfab05e9fe540eb6874525f0a1684099b" - integrity sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -new-github-release-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/new-github-release-url/-/new-github-release-url-2.0.0.tgz#335189b91f52bbb9569042a7485900a205a0500b" - integrity sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ== - dependencies: - type-fest "^2.5.1" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" - integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-fetch@^2.6.7, node-fetch@^2.6.8: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" - integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - tar "^6.1.2" - which "^4.0.0" - -node-gyp@^9.0.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -nodemon@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.1.tgz#affe822a2c5f21354466b2fc8ae83277d27dadc7" - integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -nopt@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" - integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== - dependencies: - abbrev "^2.0.0" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" - integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== - dependencies: - hosted-git-info "^7.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.2.0.tgz#fae55b9967b03ac309695ec96629492d5cedf371" - integrity sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@^11.0.0, npm-package-arg@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" - integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.0.tgz#4e7f51fe1d5e69b19508ed8dc6cd3ae2e7b38c17" - integrity sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw== - dependencies: - ignore-walk "^6.0.0" - -npm-pick-manifest@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz#f87a4c134504a2c7931f2bb8733126e3c3bb7e8f" - integrity sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" - semver "^7.3.5" - -npm-registry-fetch@^16.0.0, npm-registry-fetch@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz#10227b7b36c97bc1cf2902a24e4f710cfe62803c" - integrity sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw== - dependencies: - make-fetch-happen "^13.0.0" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^11.0.0" - proc-log "^3.0.0" - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - 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" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== - dependencies: - are-we-there-yet "^4.0.0" - console-control-strings "^1.1.0" - gauge "^5.0.0" - set-blocking "^2.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.fromentries@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.values@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -on-finished@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -only@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== - -open@^8.0.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-6.0.0.tgz#4d9c40d3171632f86c47601b709f4b4acd70fed4" - integrity sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw== - -p-pipe@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-4.0.0.tgz#7e5424569351b2ab452a47826acb93ce09ad6a2c" - integrity sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w== - -p-queue@^7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-7.4.1.tgz#7f86f853048beca8272abdbb7cec1ed2afc0f265" - integrity sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA== - dependencies: - eventemitter3 "^5.0.1" - p-timeout "^5.0.2" - -p-reduce@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-3.0.0.tgz#f11773794792974bd1f7a14c72934248abff4160" - integrity sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q== - -p-timeout@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-4.1.0.tgz#788253c0452ab0ffecf18a62dff94ff1bd09ca0a" - integrity sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw== - -p-timeout@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" - integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pacote@^17.0.0, pacote@^17.0.4: - version "17.0.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-17.0.4.tgz#4bac6c0745967bde96985ec12fbbfc8dea7140e8" - integrity sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg== - dependencies: - "@npmcli/git" "^5.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^7.0.0" - "@npmcli/run-script" "^7.0.0" - cacache "^18.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^11.0.0" - npm-packlist "^8.0.0" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^16.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^7.0.0" - read-package-json-fast "^3.0.0" - sigstore "^2.0.0" - ssri "^10.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-conflict-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parse-json@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.0.tgz#4cffd0ee00ffa597b995fd70a9811993c4f95023" - integrity sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg== - dependencies: - "@babel/code-frame" "^7.21.4" - error-ex "^1.3.2" - json-parse-even-better-errors "^3.0.0" - lines-and-columns "^2.0.3" - type-fest "^3.8.0" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parse5-htmlparser2-tree-adapter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@1.0.1, path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== - dependencies: - through "~2.3" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-6.1.0.tgz#db9f2ebfba65f0bc144db65ae84d1a486ab72909" - integrity sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -portfinder@^1.0.32: - version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -postcss-attribute-case-insensitive@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" - integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-cli@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.1.0.tgz#f6658c4998a1c35bd66cd71009132b2d12e04f80" - integrity sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA== - dependencies: - chokidar "^3.3.0" - dependency-graph "^0.11.0" - fs-extra "^11.0.0" - get-stdin "^9.0.0" - globby "^13.0.0" - picocolors "^1.0.0" - postcss-load-config "^4.0.0" - postcss-reporter "^7.0.0" - pretty-hrtime "^1.0.3" - read-cache "^1.0.0" - slash "^5.0.0" - yargs "^17.0.0" - -postcss-color-functional-notation@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz#5fa38d36cd0e2ea9db7fd6f2f2a1ffb2c0796a8d" - integrity sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79" - integrity sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz#d1266b9a9571ca478c8ce7ad97a15727eac3c6b2" - integrity sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-media@^10.0.2: - version "10.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz#70a244bbc59fc953ab6573e4e2c9624639aef08a" - integrity sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.5" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/media-query-list-parser" "^2.1.5" - -postcss-custom-properties@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz#88952f883003d897ade5c836e1e005b09a12f02b" - integrity sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.5" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz#6d28812998dcd48f61a6a538141fc16cf2c42123" - integrity sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.5" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - postcss-selector-parser "^6.0.13" - -postcss-dir-pseudo-class@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz#9e4e37d170f672520d3f38fd8376db0ca04d4e9c" - integrity sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-double-position-gradients@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz#a55ed4d6a395f324aa5535ea8c42c74e8ace2651" - integrity sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz#a81227428d6f1e524099c6581f7c7132f987e382" - integrity sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-focus-within@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz#8304380dd2dadc1c2dcfa52816ff86be7736fc16" - integrity sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz#3bd77f3d51facb1da404b4edd72b8203929385a5" - integrity sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA== - -postcss-image-set-function@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz#e2bba0a0536a0c70f63933f7c5df68742e9615ca" - integrity sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-lab-function@^6.0.7: - version "6.0.7" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz#b1dd0ad5a4c993b7695614239754b9be48f3b24b" - integrity sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw== - dependencies: - "@csstools/css-color-parser" "^1.4.0" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - -postcss-load-config@^4.0.0, postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== - dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" - -postcss-logical@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.0.tgz#9a83426e716e3c8f957dda3fd874edbcf22c754e" - integrity sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - -postcss-nesting@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.1.tgz#abb76d15dfd59a9f7d03b4464f53b60a4d3795c4" - integrity sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -postcss-opacity-percentage@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" - integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== - -postcss-overflow-shorthand@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz#1ed6d6c532cdf52b5dabec06662dc63f9207855c" - integrity sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.0.tgz#7e47851bf40d16ce06f6013453b706100ca6c102" - integrity sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz#58f296087cf3dc18cb75af11954c6c5822220327" - integrity sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.1" - "@csstools/postcss-color-function" "^3.0.7" - "@csstools/postcss-color-mix-function" "^2.0.7" - "@csstools/postcss-exponential-functions" "^1.0.1" - "@csstools/postcss-font-format-keywords" "^3.0.0" - "@csstools/postcss-gamut-mapping" "^1.0.0" - "@csstools/postcss-gradients-interpolation-method" "^4.0.7" - "@csstools/postcss-hwb-function" "^3.0.6" - "@csstools/postcss-ic-unit" "^3.0.2" - "@csstools/postcss-initial" "^1.0.0" - "@csstools/postcss-is-pseudo-class" "^4.0.3" - "@csstools/postcss-logical-float-and-clear" "^2.0.0" - "@csstools/postcss-logical-overflow" "^1.0.0" - "@csstools/postcss-logical-overscroll-behavior" "^1.0.0" - "@csstools/postcss-logical-resize" "^2.0.0" - "@csstools/postcss-logical-viewport-units" "^2.0.3" - "@csstools/postcss-media-minmax" "^1.1.0" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.3" - "@csstools/postcss-nested-calc" "^3.0.0" - "@csstools/postcss-normalize-display-values" "^3.0.1" - "@csstools/postcss-oklab-function" "^3.0.7" - "@csstools/postcss-progressive-custom-properties" "^3.0.2" - "@csstools/postcss-relative-color-syntax" "^2.0.7" - "@csstools/postcss-scope-pseudo-class" "^3.0.0" - "@csstools/postcss-stepped-value-functions" "^3.0.2" - "@csstools/postcss-text-decoration-shorthand" "^3.0.3" - "@csstools/postcss-trigonometric-functions" "^3.0.2" - "@csstools/postcss-unset-value" "^3.0.0" - autoprefixer "^10.4.16" - browserslist "^4.22.1" - css-blank-pseudo "^6.0.0" - css-has-pseudo "^6.0.0" - css-prefers-color-scheme "^9.0.0" - cssdb "^7.9.0" - postcss-attribute-case-insensitive "^6.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.2" - postcss-color-hex-alpha "^9.0.2" - postcss-color-rebeccapurple "^9.0.1" - postcss-custom-media "^10.0.2" - postcss-custom-properties "^13.3.2" - postcss-custom-selectors "^7.1.6" - postcss-dir-pseudo-class "^8.0.0" - postcss-double-position-gradients "^5.0.2" - postcss-focus-visible "^9.0.0" - postcss-focus-within "^8.0.0" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^5.0.0" - postcss-image-set-function "^6.0.1" - postcss-lab-function "^6.0.7" - postcss-logical "^7.0.0" - postcss-nesting "^12.0.1" - postcss-opacity-percentage "^2.0.0" - postcss-overflow-shorthand "^5.0.0" - postcss-page-break "^3.0.4" - postcss-place "^9.0.0" - postcss-pseudo-class-any-link "^9.0.0" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^7.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz#5fb5b700e0ecdc845a94eb433b8ccff756cbf660" - integrity sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-reporter@^7.0.0: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb" - integrity sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA== - dependencies: - picocolors "^1.0.0" - thenby "^1.3.4" - -postcss-selector-not@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" - integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.4, postcss@^8.4.23, postcss@^8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-plugin-tailwindcss@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.6.tgz#8e511857a49bf127f078985f52b04a70e8e92285" - integrity sha512-2Xgb+GQlkPAUCFi3sV+NOYcSI5XgduvDBL2Zt/hwJudeKXkyvRS65c38SB0yb9UB40+1rL83I6m0RtlOQ8eHdg== - -prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== - -pretty-bytes@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== - -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" - integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -ps-tree@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" - integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== - dependencies: - event-stream "=3.3.4" - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -read-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" - integrity sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg== - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read-pkg@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.1.0.tgz#6cf560b91d90df68bce658527e7e3eee75f7c4c7" - integrity sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ== - dependencies: - "@types/normalize-package-data" "^2.4.1" - normalize-package-data "^6.0.0" - parse-json "^7.0.0" - type-fest "^4.2.0" - -readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.1.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requireindex@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" - integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-path@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" - integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w== - dependencies: - http-errors "~1.6.2" - path-is-absolute "1.0.1" - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-terser@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@^2.43.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -rollup@^3.15.0: - version "3.29.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" - integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== - optionalDependencies: - fsevents "~2.3.2" - -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-compare@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/safe-compare/-/safe-compare-1.1.4.tgz#5e0128538a82820e2e9250cd78e45da6786ba593" - integrity sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ== - dependencies: - buffer-alloc "^1.2.0" - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sandwich-stream@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sandwich-stream/-/sandwich-stream-2.0.2.tgz#6d1feb6cf7e9fe9fadb41513459a72c2e84000fa" - integrity sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sigstore@^2.0.0, sigstore@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.1.0.tgz#c577b596642b3f360dc4135d476466e6edeb2364" - integrity sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw== - dependencies: - "@sigstore/bundle" "^2.1.0" - "@sigstore/protobuf-specs" "^0.2.1" - "@sigstore/sign" "^2.1.0" - "@sigstore/tuf" "^2.1.0" - -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slash@^5.0.0, slash@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" - integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" - integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== - dependencies: - agent-base "^7.0.2" - debug "^4.3.4" - socks "^2.7.1" - -socks@^2.6.2, socks@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sort-keys@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-5.0.0.tgz#5d775f8ae93ecc29bc7312bbf3acac4e36e3c446" - integrity sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw== - dependencies: - is-plain-obj "^4.0.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - -split2@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== - dependencies: - through "2" - -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -ssri@^10.0.0, ssri@^10.0.5: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== - dependencies: - duplexer "~0.1.1" - -stream-read-all@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/stream-read-all/-/stream-read-all-3.0.1.tgz#60762ae45e61d93ba0978cda7f3913790052ad96" - integrity sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A== - -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.6: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.padend@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz#311ef3a4e3c557dd999cdf88fbdde223f2ac0f95" - integrity sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -table-layout@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-3.0.2.tgz#69c2be44388a5139b48c59cf21e73b488021769a" - integrity sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw== - dependencies: - "@75lb/deep-merge" "^1.1.1" - array-back "^6.2.2" - command-line-args "^5.2.1" - command-line-usage "^7.0.0" - stream-read-all "^3.0.1" - typical "^7.1.1" - wordwrapjs "^5.1.0" - -tailwindcss@^3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.5.tgz#22a59e2fbe0ecb6660809d9cc5f3976b077be3b8" - integrity sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.0" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.19.1" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar@^6.1.11, tar@^6.1.2, tar@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -telegraf@^4.13.1: - version "4.13.1" - resolved "https://registry.yarnpkg.com/telegraf/-/telegraf-4.13.1.tgz#ad0b6df452aa133bf6561b4a182bdedb558046b6" - integrity sha512-WXITwqE3ivqDqjHFxj94xaQhHddldBZdE2g/hRJXyCMTkwZYw69q9I7La7nsDpsHLn5ADSQlGv0KAbwFkFpmlA== - dependencies: - "@telegraf/types" "^6.8.1" - abort-controller "^3.0.0" - debug "^4.3.4" - mri "^1.2.0" - node-fetch "^2.6.8" - p-timeout "^4.1.0" - safe-compare "^1.1.4" - sandwich-stream "^2.0.2" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" - integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== - -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terser@^5.0.0: - version "5.19.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" - integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-extensions@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" - integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenby@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" - integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -ts-lit-plugin@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ts-lit-plugin/-/ts-lit-plugin-2.0.1.tgz#ef923baa5c8a62db932db3819ddbe403d35ee8c2" - integrity sha512-Y5G03aDiMYHMLzoZ50kdeVkzgVig2mBw6PVY2oI9PcWl3ONTcDyYq6rJ0QzhlACYWP8sT0dmaPMsHMObgNNvvg== - dependencies: - lit-analyzer "^2.0.1" - web-component-analyzer "^2.0.0" - -ts-simple-type@2.0.0-next.0, ts-simple-type@~2.0.0-next.0: - version "2.0.0-next.0" - resolved "https://registry.yarnpkg.com/ts-simple-type/-/ts-simple-type-2.0.0-next.0.tgz#262a321ba2a17aa57f88ef31e30453beff5be246" - integrity sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg== - -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.1.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -tuf-js@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.1.0.tgz#87aa36d5a166e7522f1e2050eb502a3a9b0bde72" - integrity sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA== - dependencies: - "@tufjs/models" "2.0.0" - debug "^4.3.4" - make-fetch-happen "^13.0.0" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^2.5.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^3.13.0, type-fest@^3.8.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - -type-fest@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.3.1.tgz#5cb58cdab5120f7ab0b40cfdc35073fb9adb651d" - integrity sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw== - -type-is@^1.6.16: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^5.2.2, typescript@~5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/typical/-/typical-7.1.1.tgz#ba177ab7ab103b78534463ffa4c0c9754523ac1f" - integrity sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vscode-css-languageservice@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.3.0.tgz#40c797d664ab6188cace33cfbb19b037580a9318" - integrity sha512-BkQAMz4oVHjr0oOAz5PdeE72txlLQK7NIwzmclfr+b6fj6I8POwB+VoXvrZLTbWt9hWRgfvgiQRkh5JwrjPJ5A== - dependencies: - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "3.16.0-next.2" - vscode-nls "^4.1.2" - vscode-uri "^2.1.2" - -vscode-html-languageservice@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-3.1.0.tgz#265b53bda595e6947b16b0fb8c604e1e58685393" - integrity sha512-QAyRHI98bbEIBCqTzZVA0VblGU40na0txggongw5ZgTj9UVsVk5XbLT16O9OTcbqBGSqn0oWmFDNjK/XGIDcqg== - dependencies: - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "3.16.0-next.2" - vscode-nls "^4.1.2" - vscode-uri "^2.1.2" - -vscode-languageserver-textdocument@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" - integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== - -vscode-languageserver-types@3.16.0-next.2: - version "3.16.0-next.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz#940bd15c992295a65eae8ab6b8568a1e8daa3083" - integrity sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q== - -vscode-nls@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.2.tgz#ca8bf8bb82a0987b32801f9fddfdd2fb9fd3c167" - integrity sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw== - -vscode-uri@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" - integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== - -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -web-component-analyzer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/web-component-analyzer/-/web-component-analyzer-2.0.0.tgz#38a66055ae2340fceaea84f19f9ee3f15233ba28" - integrity sha512-UEvwfpD+XQw99sLKiH5B1T4QwpwNyWJxp59cnlRwFfhUW6JsQpw5jMeMwi7580sNou8YL3kYoS7BWLm+yJ/jVQ== - dependencies: - fast-glob "^3.2.2" - ts-simple-type "2.0.0-next.0" - typescript "~5.2.0" - yargs "^17.7.2" - -web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -webpod@^0: - version "0.0.2" - resolved "https://registry.yarnpkg.com/webpod/-/webpod-0.0.2.tgz#b577c93604fd23596488735887168b3236e3adae" - integrity sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" - integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrapjs@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-5.1.0.tgz#4c4d20446dcc670b14fa115ef4f8fd9947af2b3a" - integrity sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg== - -workbox-background-sync@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz#2b84b96ca35fec976e3bd2794b70e4acec46b3a5" - integrity sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA== - dependencies: - idb "^7.0.1" - workbox-core "7.0.0" - -workbox-broadcast-update@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz#7f611ca1a94ba8ac0aa40fa171c9713e0f937d22" - integrity sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ== - dependencies: - workbox-core "7.0.0" - -workbox-build@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-7.0.0.tgz#02ab5ef2991b3369b8b9395703f08912212769b4" - integrity sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "7.0.0" - workbox-broadcast-update "7.0.0" - workbox-cacheable-response "7.0.0" - workbox-core "7.0.0" - workbox-expiration "7.0.0" - workbox-google-analytics "7.0.0" - workbox-navigation-preload "7.0.0" - workbox-precaching "7.0.0" - workbox-range-requests "7.0.0" - workbox-recipes "7.0.0" - workbox-routing "7.0.0" - workbox-strategies "7.0.0" - workbox-streams "7.0.0" - workbox-sw "7.0.0" - workbox-window "7.0.0" - -workbox-cacheable-response@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz#ee27c036728189eed69d25a135013053277482d2" - integrity sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g== - dependencies: - workbox-core "7.0.0" - -workbox-core@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-7.0.0.tgz#dec114ec923cc2adc967dd9be1b8a0bed50a3545" - integrity sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ== - -workbox-expiration@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-7.0.0.tgz#3d90bcf2a7577241de950f89784f6546b66c2baa" - integrity sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ== - dependencies: - idb "^7.0.1" - workbox-core "7.0.0" - -workbox-google-analytics@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz#603b2c4244af1e85de0fb26287d4e17d3293452a" - integrity sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg== - dependencies: - workbox-background-sync "7.0.0" - workbox-core "7.0.0" - workbox-routing "7.0.0" - workbox-strategies "7.0.0" - -workbox-navigation-preload@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz#4913878dbbd97057181d57baa18d2bbdde085c6c" - integrity sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA== - dependencies: - workbox-core "7.0.0" - -workbox-precaching@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-7.0.0.tgz#3979ba8033aadf3144b70e9fe631d870d5fbaa03" - integrity sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA== - dependencies: - workbox-core "7.0.0" - workbox-routing "7.0.0" - workbox-strategies "7.0.0" - -workbox-range-requests@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz#97511901e043df27c1aa422adcc999a7751f52ed" - integrity sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ== - dependencies: - workbox-core "7.0.0" - -workbox-recipes@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-7.0.0.tgz#1a6a01c8c2dfe5a41eef0fed3fe517e8a45c6514" - integrity sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww== - dependencies: - workbox-cacheable-response "7.0.0" - workbox-core "7.0.0" - workbox-expiration "7.0.0" - workbox-precaching "7.0.0" - workbox-routing "7.0.0" - workbox-strategies "7.0.0" - -workbox-routing@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-7.0.0.tgz#6668438a06554f60645aedc77244a4fe3a91e302" - integrity sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA== - dependencies: - workbox-core "7.0.0" - -workbox-strategies@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-7.0.0.tgz#dcba32b3f3074476019049cc490fe1a60ea73382" - integrity sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA== - dependencies: - workbox-core "7.0.0" - -workbox-streams@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-7.0.0.tgz#36722aecd04785f88b6f709e541c094fc658c0f9" - integrity sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ== - dependencies: - workbox-core "7.0.0" - workbox-routing "7.0.0" - -workbox-sw@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-7.0.0.tgz#7350126411e3de1409f7ec243df8d06bb5b08b86" - integrity sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA== - -workbox-window@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-7.0.0.tgz#a683ab33c896e4f16786794eac7978fc98a25d08" - integrity sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "7.0.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -write-json-file@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-5.0.0.tgz#11c329a8ea9e8e23fb92a87cc27412a15f87708b" - integrity sha512-ddSsCLa4aQ3kI21BthINo4q905/wfhvQ3JL3774AcRjBaiQmfn5v4rw77jQ7T6CmAit9VOQO+FsLyPkwxoB1fw== - dependencies: - detect-indent "^7.0.0" - is-plain-obj "^4.0.0" - sort-keys "^5.0.0" - write-file-atomic "^3.0.3" - -write-pkg@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-6.0.0.tgz#2a3f89b8c5f8ad2bb1987aafef4d4354d39b0a40" - integrity sha512-lGAH18qfqlukADIiFz1khQQO+AfPcNKf+oJIktIADWISarSSG9MPoWmveT+GhTGh9nQLpw0iPZyucgbqDngHeQ== - dependencies: - deepmerge-ts "^5.1.0" - read-pkg "^8.0.0" - sort-keys "^5.0.0" - type-fest "^3.13.0" - write-json-file "^5.0.0" - -ws@^7.4.2: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.1.1, yaml@^2.2.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.0.0, yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - 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" - -ylru@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.3.2.tgz#0de48017473275a4cbdfc83a1eaf67c01af8a785" - integrity sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zx@^7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/zx/-/zx-7.2.3.tgz#d9fef6bd084f7e21994080de09fb20e441074c39" - integrity sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA== - dependencies: - "@types/fs-extra" "^11.0.1" - "@types/minimist" "^1.2.2" - "@types/node" "^18.16.3" - "@types/ps-tree" "^1.1.2" - "@types/which" "^3.0.0" - chalk "^5.2.0" - fs-extra "^11.1.1" - fx "*" - globby "^13.1.4" - minimist "^1.2.8" - node-fetch "3.3.1" - ps-tree "^1.2.0" - webpod "^0" - which "^3.0.0" - yaml "^2.2.2" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@alwatr/async-queue@npm:^1.3.6": + version: 1.3.6 + resolution: "@alwatr/async-queue@npm:1.3.6" + dependencies: + "@alwatr/flatomise": "npm:^1.2.6" + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/2f0171d4689e6636d1ee2c864cb16ce0bd1316fad8bb72245abebb88561fdba112601d4eed22e138e54f10718c20de9e4cffd7a05824b59b1d05e65c9d84822e + languageName: node + linkType: hard + +"@alwatr/context@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/context@npm:3.2.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/observable": "npm:^3.2.0" + checksum: 10c0/0d42ee07b73c63ce505c7f8be924fbc38b58a9ff08ed2f9ce7cf5e5264f9f84e5ab65a448e23f03d543e0e8cfef1fd756835c070b69d17596c75266424845278 + languageName: node + linkType: hard + +"@alwatr/crypto@npm:^4.3.0": + version: 4.3.0 + resolution: "@alwatr/crypto@npm:4.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + checksum: 10c0/e3695dcc4897ca67b069b5ea40e2257a456a6bbfbe353f77bd4474f029cf42a985843bb72e01e36268c036954fde14fd3042970c30c88ed9f6ae0d2987991631 + languageName: node + linkType: hard + +"@alwatr/dedupe@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/dedupe@npm:1.1.6" + dependencies: + "@alwatr/global-this": "npm:^1.0.1" + "@alwatr/package-tracer": "npm:^1.0.6" + "@alwatr/polyfill-has-own": "npm:^1.1.6" + checksum: 10c0/31480ffd75d8e4a2ab66238c08ce8c958e894702dc1e39d5bba6c14f6ad5cd1477571369f750f3505d1b39f9df26af65b5c72ec7e8a8fd406ad0d2791e7fb164 + languageName: node + linkType: hard + +"@alwatr/deep-clone@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/deep-clone@npm:1.1.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/6fc21fd7b0d0284a681204939623979645abe50d587534c01ac33f905b0f83e22f4ab35e6043e0bbc92dc3619d3ced30a02984d152f579fb1704449a0d9e1a00 + languageName: node + linkType: hard + +"@alwatr/delay@npm:^1.0.6": + version: 1.0.6 + resolution: "@alwatr/delay@npm:1.0.6" + dependencies: + "@alwatr/global-this": "npm:^1.0.1" + "@alwatr/package-tracer": "npm:^1.0.6" + "@alwatr/parse-duration": "npm:^1.1.6" + checksum: 10c0/be31ba34c6d55102657121a976e5a863976f5248c8d61541a6e732ecd7df56cda9306ea0d2f31fff2cec6ba3194da05c78faeb1e129d80d82855ccf336e903b8 + languageName: node + linkType: hard + +"@alwatr/eslint-config@npm:^1.2.11": + version: 1.2.11 + resolution: "@alwatr/eslint-config@npm:1.2.11" + dependencies: + esbuild: "npm:^0.24.0" + peerDependencies: + "@typescript-eslint/eslint-plugin": ">7.0.0 <8.0.0" + "@typescript-eslint/parser": ">7.0.0 <8.0.0" + eslint: ">8.0.0 <9.0.0" + eslint-import-resolver-typescript: ">3.0.0" + eslint-plugin-import: ">2.0.0" + eslint-plugin-require-extensions: ">0.1.0" + checksum: 10c0/2b6374bc0b653c08ccdcf825924400d4794fc487840adbced2c829196b739063ffc2de9f64ba2edb1f6001fcd70aaac8c55473b916b75179c44fc0140cdb5511 + languageName: node + linkType: hard + +"@alwatr/exit-hook@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/exit-hook@npm:1.1.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/4f78ecbb8c9960049d1c2eb31748f691fd289db65ffd3b7c7a9b0bd96deadc913125593bc0f4d76518105acaa40a3e8e79f86222a7a3c9032b4319a082299093 + languageName: node + linkType: hard + +"@alwatr/fetch-state-machine@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/fetch-state-machine@npm:3.2.0" + dependencies: + "@alwatr/fsm": "npm:^3.2.0" + "@alwatr/nanolib": "npm:^1.2.0" + checksum: 10c0/1a35128acd0b84182432c32c62cdb4d3589904b7ed680779c216eda2680b7d7e8b2707e6f0e6bc839abddcf7195779b187e9368ca5229ece940471646719ef0c + languageName: node + linkType: hard + +"@alwatr/fetch@npm:^4.1.6": + version: 4.1.6 + resolution: "@alwatr/fetch@npm:4.1.6" + dependencies: + "@alwatr/delay": "npm:^1.0.6" + "@alwatr/global-this": "npm:^1.0.1" + "@alwatr/logger": "npm:^4.0.6" + "@alwatr/package-tracer": "npm:^1.0.6" + "@alwatr/parse-duration": "npm:^1.1.6" + checksum: 10c0/673c98debe07c5e5105a63c7ba6ec7b7022de92b635d1177445a7b25b4188857eb029fb8f25c8697be0f7a13d4b1375798b5789deea0843d52b80b77706da4cb + languageName: node + linkType: hard + +"@alwatr/flat-string@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/flat-string@npm:1.1.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/727f33697b91a0180561a408e01f9734d27777824f77fa3963ea118e7251a504b81b99cac1653c0d695641922b0338e5010a58ea4b5668b10c914f03883f3af3 + languageName: node + linkType: hard + +"@alwatr/flatomise@npm:^1.2.6": + version: 1.2.6 + resolution: "@alwatr/flatomise@npm:1.2.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/85fe7d31c75bfad993395966b60cd605afec2a5e230bf35e57e08c2333656ba6ce1c59074746aad05237ed212dc406591ab365a9fd9139fbc81261bde2ba1d8a + languageName: node + linkType: hard + +"@alwatr/flux@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/flux@npm:3.2.0" + dependencies: + "@alwatr/context": "npm:^3.2.0" + "@alwatr/fetch-state-machine": "npm:^3.2.0" + "@alwatr/fsm": "npm:^3.2.0" + "@alwatr/observable": "npm:^3.2.0" + "@alwatr/remote-context": "npm:^3.2.0" + "@alwatr/signal": "npm:^3.2.0" + checksum: 10c0/8a1184c938685f472d61515bc8a47ede4d54073efe2868bf6ecca61172efd1de1e587a774aaa777cfba49e7fe668d9a3fe13f46af89c1dd5085d1ca66a679eb3 + languageName: node + linkType: hard + +"@alwatr/fsm@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/fsm@npm:3.2.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/observable": "npm:^3.2.0" + checksum: 10c0/60a2ae3a46091c1d7ee2eae794d699e0ae8a71c0ced27869cf4c3aef89e17b62358f21b33b402fa333862abc088440b45ee7cd6fe551ea85b70faeb6da690f81 + languageName: node + linkType: hard + +"@alwatr/global-this@npm:^1.0.1": + version: 1.0.1 + resolution: "@alwatr/global-this@npm:1.0.1" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/4ea58394f498162482a97ef72fb7d44be33ccb45e3f3c5e17375e9a93a114aacaa0af49aeadae247225ce9bd4e8d8026ef4062dd8deac2ef1af460a187f740d7 + languageName: node + linkType: hard + +"@alwatr/is-number@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/is-number@npm:1.1.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/24278b63193740cbe2fc21f7c809ea540c853150c1aa34e73c3e539ea5481cfb8ef15a84ede0eb7cdd1d679a9bbf17382ed57b800c83af8b6d79a6a7f60d99f7 + languageName: node + linkType: hard + +"@alwatr/local-storage@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/local-storage@npm:1.1.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/f70d22d1260399959d6ea109bb4e649491abd4cf880a8923ed651f93514ed6488f5945e228441561444a876b23db7e96a73b2311f5b0af700de278945ed0d511 + languageName: node + linkType: hard + +"@alwatr/logger@npm:^4.0.6": + version: 4.0.6 + resolution: "@alwatr/logger@npm:4.0.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + "@alwatr/platform-info": "npm:^1.2.6" + checksum: 10c0/2f2e4557dcfe7df80886582ac8ba2365dd7a21a20ef78750f1cfb21cfc678b47964be6e21d783fe31109699f8e94e135f7a577cf162101d4a9e0627dc4f088c6 + languageName: node + linkType: hard + +"@alwatr/nano-build@npm:^2.0.2": + version: 2.0.2 + resolution: "@alwatr/nano-build@npm:2.0.2" + dependencies: + esbuild: "npm:^0.24.0" + bin: + nano-build: ./nano-build.cjs + checksum: 10c0/e36b8e0807a2096a883f9b534543fce7b46bebe2e062b5ab2ec5d1b83ab534205b55146aa7393ecf3237552f5ab2fa22f2889003039417da089bacc1af8d61df + languageName: node + linkType: hard + +"@alwatr/nanolib@npm:^1.2.0, @alwatr/nanolib@npm:^1.2.1": + version: 1.2.1 + resolution: "@alwatr/nanolib@npm:1.2.1" + dependencies: + "@alwatr/async-queue": "npm:^1.3.6" + "@alwatr/dedupe": "npm:^1.1.6" + "@alwatr/deep-clone": "npm:^1.1.6" + "@alwatr/delay": "npm:^1.0.6" + "@alwatr/exit-hook": "npm:^1.1.6" + "@alwatr/fetch": "npm:^4.1.6" + "@alwatr/flat-string": "npm:^1.1.6" + "@alwatr/flatomise": "npm:^1.2.6" + "@alwatr/is-number": "npm:^1.1.6" + "@alwatr/local-storage": "npm:^1.1.6" + "@alwatr/logger": "npm:^4.0.6" + "@alwatr/node-fs": "npm:^1.1.6" + "@alwatr/package-tracer": "npm:^1.0.6" + "@alwatr/parse-duration": "npm:^1.1.6" + "@alwatr/platform-info": "npm:^1.2.6" + "@alwatr/render-state": "npm:^1.0.6" + "@alwatr/unicode-digits": "npm:^1.1.1" + checksum: 10c0/b37469ed2d69fa915c61b8ccfbe25a35f7de1452841af3a5e4da7709e2234143ecc2dab8af3f068696bb236dc4885dfe657687ae2c30ef348b36235d91a27f47 + languageName: node + linkType: hard + +"@alwatr/nanotron-api-server@npm:^4.3.0": + version: 4.3.0 + resolution: "@alwatr/nanotron-api-server@npm:4.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + checksum: 10c0/c9fe1f0ef4456e720b482a4ceed2b2c53d5a603ccc939a8e860d617f5c22d3619998f27798a939ce7bc119c2ab6e71b02b86af46b116e81b77ad85c9751a8084 + languageName: node + linkType: hard + +"@alwatr/nanotron@npm:^4.3.0": + version: 4.3.0 + resolution: "@alwatr/nanotron@npm:4.3.0" + dependencies: + "@alwatr/crypto": "npm:^4.3.0" + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/nanotron-api-server": "npm:^4.3.0" + checksum: 10c0/67e3540916afc76e052a30c52f8c30478e3a4fc03be5d5ad5724ffcdd9ca47ae05b19074de774b4cd851091894b261cfb21c400257538fda180feecc11b4b356 + languageName: node + linkType: hard + +"@alwatr/nitrobase-engine@npm:^7.3.0": + version: 7.3.0 + resolution: "@alwatr/nitrobase-engine@npm:7.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/nitrobase-helper": "npm:^7.3.0" + "@alwatr/nitrobase-reference": "npm:^7.3.0" + "@alwatr/nitrobase-types": "npm:^7.3.0" + checksum: 10c0/0009ee814457e6fc758e9f32d0184890bd26eccd613f75ba0098eca71e8e58b1c1636c355b365d55686ce69ac87a3eca93f28b26d62d4f7717d8baa24fb01059 + languageName: node + linkType: hard + +"@alwatr/nitrobase-helper@npm:^7.3.0": + version: 7.3.0 + resolution: "@alwatr/nitrobase-helper@npm:7.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/nitrobase-types": "npm:^7.3.0" + checksum: 10c0/c871e9a60ce48d12f670c1caf145fe26d64b718d127d1b36f6e0352fab5573b354b2a9a1a8936ebb23fbb50c701bd33ad34a48f02df962e6e30e8af9d90f0a57 + languageName: node + linkType: hard + +"@alwatr/nitrobase-reference@npm:^7.3.0": + version: 7.3.0 + resolution: "@alwatr/nitrobase-reference@npm:7.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/nitrobase-helper": "npm:^7.3.0" + "@alwatr/nitrobase-types": "npm:^7.3.0" + checksum: 10c0/ca0278fd0106e147b70608dd622bb1c96f28b0a84edbfadfab45f094c46d24a20286a480b372ef3b803ee004de9484dadc1675edaa7a6267c2646a4112aaa230 + languageName: node + linkType: hard + +"@alwatr/nitrobase-types@npm:^7.3.0": + version: 7.3.0 + resolution: "@alwatr/nitrobase-types@npm:7.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + checksum: 10c0/371a867195fdb1ccb31b15f85c5a9f03094e5dafc0b5cb881b54d52a36eb4218fcf5bda39e68fb7a1d0b4cbc39c82ed88360db5f0e1b00f627026e5a07d049a2 + languageName: node + linkType: hard + +"@alwatr/nitrobase@npm:^7.3.0": + version: 7.3.0 + resolution: "@alwatr/nitrobase@npm:7.3.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/nitrobase-engine": "npm:^7.3.0" + "@alwatr/nitrobase-helper": "npm:^7.3.0" + "@alwatr/nitrobase-reference": "npm:^7.3.0" + "@alwatr/nitrobase-types": "npm:^7.3.0" + checksum: 10c0/314727eb4275fb972e239ab829a041c7b98b8bd905698b83f1e9003516a29d3bff270437d695e2cce9645dcef9466966de74e8f3dcde9cf4269b7a42a0bfa0ce + languageName: node + linkType: hard + +"@alwatr/node-fs@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/node-fs@npm:1.1.6" + dependencies: + "@alwatr/async-queue": "npm:^1.3.6" + "@alwatr/flat-string": "npm:^1.1.6" + "@alwatr/logger": "npm:^4.0.6" + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/0a43dda71004f32cb008c3a4faaa38139ed8e0257600f86817fc1054be11470980d0d35c5897f714d0fe1383ae08d7a6974cd2eb1f0e8e4cb8af97058fef884e + languageName: node + linkType: hard + +"@alwatr/observable@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/observable@npm:3.2.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + checksum: 10c0/2466603cabfac76b6941b7ae3eb19af784255abef393810dc8b950398a8d4b48747ffe2c19fb9a3b058cb17765c3d983d8e65cb2a17631bc82d6bc9049672bdb + languageName: node + linkType: hard + +"@alwatr/package-tracer@npm:^1.0.6": + version: 1.0.6 + resolution: "@alwatr/package-tracer@npm:1.0.6" + checksum: 10c0/5483c61d4099bc7d0af5b4ffe8e043335cea31c581cd55b60f4e0e1b47d8005cc57c8209d8e0ca34b8b310777e9d14bfde04242745cadabb60f8c80bf89fe7c5 + languageName: node + linkType: hard + +"@alwatr/parse-duration@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/parse-duration@npm:1.1.6" + dependencies: + "@alwatr/is-number": "npm:^1.1.6" + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/a12c6043b11e2155ba4b0157431b66b6a7af5f5a1d11e6e0b50be66ff8aff26c63cfc54cc32825e4b9cdce2cbea9684083b9554f2762adec3f63589dee974f50 + languageName: node + linkType: hard + +"@alwatr/platform-info@npm:^1.2.6": + version: 1.2.6 + resolution: "@alwatr/platform-info@npm:1.2.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/b644a830561ee4a5df445e1474f27892d782e5ae42b166d3dfc4320bc12083a3f3b68017d5390c93e6fac0015f83d95ebceb7eef28ef53e1a7d44f82cd36268e + languageName: node + linkType: hard + +"@alwatr/polyfill-has-own@npm:^1.1.6": + version: 1.1.6 + resolution: "@alwatr/polyfill-has-own@npm:1.1.6" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/899d74182b53deafb78c1e80aaf5325c599bb153217df4b363b152ece995965be8bf351bb50625b2b82edc26be9e7dc6f0b4561de472f3e668a0a5d2e6cef267 + languageName: node + linkType: hard + +"@alwatr/prettier-config@npm:^1.0.6": + version: 1.0.6 + resolution: "@alwatr/prettier-config@npm:1.0.6" + checksum: 10c0/f1e04e2414dafe8c6dc3576c5f709d81eca57a4fe7b35518da08376dfe5e045061bc4e5cfeba16f6063ace45f177b23fb3063a337c8e263b1e79da682d49aa87 + languageName: node + linkType: hard + +"@alwatr/remote-context@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/remote-context@npm:3.2.0" + dependencies: + "@alwatr/fetch-state-machine": "npm:^3.2.0" + "@alwatr/nanolib": "npm:^1.2.0" + checksum: 10c0/494d89357736889ec43f753848c0ba867dd1921fdd01c635506896068254438591c1ebeef26c21a30e3bead3fdeb2ead1868145a851e9c68638fa042f49b8af2 + languageName: node + linkType: hard + +"@alwatr/render-state@npm:^1.0.6": + version: 1.0.6 + resolution: "@alwatr/render-state@npm:1.0.6" + dependencies: + "@alwatr/logger": "npm:^4.0.6" + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/5f6935289681340f978b09f4d067f2181cb436581eeefb9ed114a584817437cf58768350ba7c6409526f4f370f0750b5e7885ce5d001358cc3053b175aad15ed + languageName: node + linkType: hard + +"@alwatr/signal@npm:^3.2.0": + version: 3.2.0 + resolution: "@alwatr/signal@npm:3.2.0" + dependencies: + "@alwatr/nanolib": "npm:^1.2.0" + "@alwatr/observable": "npm:^3.2.0" + checksum: 10c0/7eb3536cf57052699a5e57db1551162980c024706421939d681bd94aeee14b0cf0bb2da36b615298a343fc0d05d5a7a3fe45a16d709ced01544fe045a4c3a4c8 + languageName: node + linkType: hard + +"@alwatr/tsconfig-base@npm:^1.3.2": + version: 1.3.2 + resolution: "@alwatr/tsconfig-base@npm:1.3.2" + checksum: 10c0/d92d80881d380502249a4febfd78dc8051f0b77ce92069f7f31e091cfbb504e58dce1c456ce2a3b069d5773238dcfe1ee912623a954c48a6d6df0385d4048cd2 + languageName: node + linkType: hard + +"@alwatr/type-helper@npm:^2.0.2": + version: 2.0.2 + resolution: "@alwatr/type-helper@npm:2.0.2" + checksum: 10c0/0ea8ac7b531737d3e832c447dc62e2ff74f79e856f8d98790ee34a57fcd88db81a05eb1306a54a9a4f805eee9059a7721a3b543ea10fc27f7ee29b5c732ec207 + languageName: node + linkType: hard + +"@alwatr/unicode-digits@npm:^1.1.1": + version: 1.1.1 + resolution: "@alwatr/unicode-digits@npm:1.1.1" + dependencies: + "@alwatr/package-tracer": "npm:^1.0.6" + checksum: 10c0/011b6e66dfc5fc74e4c51bd6326a5bcb091d3d0a785656b38b7e05169789148c264a8bf18a27991bbdd34c27ec6e6dc1e624c639c28552b99a93416e99fa9ba4 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.13": + version: 7.25.7 + resolution: "@babel/code-frame@npm:7.25.7" + dependencies: + "@babel/highlight": "npm:^7.25.7" + picocolors: "npm:^1.0.0" + checksum: 10c0/14825c298bdec914caf3d24d1383b6d4cd6b030714686004992f4fc251831ecf432236652896f99d5d341f17170ae9a07b58d8d7b15aa0df8cfa1c5a7d5474bc + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-identifier@npm:7.25.7" + checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/highlight@npm:7.25.7" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.7" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/1f5894fdb0a0af6101fb2822369b2eeeae32cbeae2ef73ff73fc6a0a4a20471565cd9cfa589f54ed69df66adeca7c57266031ca9134b7bd244d023a488d419aa + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/aix-ppc64@npm:0.24.0" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm64@npm:0.24.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm@npm:0.24.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-x64@npm:0.24.0" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-arm64@npm:0.24.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-x64@npm:0.24.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-arm64@npm:0.24.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-x64@npm:0.24.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm64@npm:0.24.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm@npm:0.24.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ia32@npm:0.24.0" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-loong64@npm:0.24.0" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-mips64el@npm:0.24.0" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ppc64@npm:0.24.0" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-riscv64@npm:0.24.0" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-s390x@npm:0.24.0" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-x64@npm:0.24.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/netbsd-x64@npm:0.24.0" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-arm64@npm:0.24.0" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-x64@npm:0.24.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/sunos-x64@npm:0.24.0" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-arm64@npm:0.24.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-ia32@npm:0.24.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-x64@npm:0.24.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: "npm:^3.3.0" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10c0/fbcc1cb65ef5ed5b92faa8dc542e035269065e7ebcc0b39c81a4fe98ad35cfff20b3c8df048641de15a7757e07d69f85e2579c1a5055f993413ba18c055654f8 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^5.0.0": + version: 5.0.0 + resolution: "@hutson/parse-repository-url@npm:5.0.0" + checksum: 10c0/068c5c9e38fecc10e3aa6f6eee5818db6f3f29a70d01fec64e9ec0ee985e8995a0cf79ec5f7c80530f1fb27d99668ee2f38d8929b712b82d5100ebd2c9153e85 + languageName: node + linkType: hard + +"@inquirer/core@npm:^10.0.0": + version: 10.0.0 + resolution: "@inquirer/core@npm:10.0.0" + dependencies: + "@inquirer/figures": "npm:^1.0.7" + "@inquirer/type": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^2.0.0" + signal-exit: "npm:^4.1.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/628dc3c7e21c7fbc1238f4a3b6de0c99885a53c16e829bd8c7fb820e54f1406612e6c7d008bd0dc0f649aed9f4ce5589876aabd5404144c0761f3967d3f98702 + languageName: node + linkType: hard + +"@inquirer/expand@npm:^4.0.0": + version: 4.0.0 + resolution: "@inquirer/expand@npm:4.0.0" + dependencies: + "@inquirer/core": "npm:^10.0.0" + "@inquirer/type": "npm:^3.0.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/8d3a469286c3927262437ac42aa2f3b0c838bbe574f1cbcb9298fa9054afc165a1ea9b6a5bca8460d0110f23704f3ada64dab46b287d690594348c0dec9890ad + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.7": + version: 1.0.7 + resolution: "@inquirer/figures@npm:1.0.7" + checksum: 10c0/d7b4cfcd38dd43d1ac79da52c4478aa89145207004a471aa2083856f1d9b99adef45563f09d66c09d6457b09200fcf784527804b70ad3bd517cbc5e11142c2df + languageName: node + linkType: hard + +"@inquirer/input@npm:^4.0.0": + version: 4.0.0 + resolution: "@inquirer/input@npm:4.0.0" + dependencies: + "@inquirer/core": "npm:^10.0.0" + "@inquirer/type": "npm:^3.0.0" + checksum: 10c0/25d3d1031fae17764896ae5a13ea4ed70226d28f633852e4f0b9e584972cb1d6fe2dc599fedea29653369143177de0cc207ed2d118bae2df9c1e20f83a910180 + languageName: node + linkType: hard + +"@inquirer/select@npm:^4.0.0": + version: 4.0.0 + resolution: "@inquirer/select@npm:4.0.0" + dependencies: + "@inquirer/core": "npm:^10.0.0" + "@inquirer/figures": "npm:^1.0.7" + "@inquirer/type": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/fca9e4e725e74a9c8f2c9860f210b55acb9cec644f8e471459674bb396690a3ae1c250675370b855c331ad2dd519a19ff03d9ead17acc985acc409769dc68079 + languageName: node + linkType: hard + +"@inquirer/type@npm:^3.0.0": + version: 3.0.0 + resolution: "@inquirer/type@npm:3.0.0" + peerDependencies: + "@types/node": ">=18" + checksum: 10c0/4c26595749782e3dfbfea0c7a19b1db603485e0fce4a9d4fe52be1c9c05fcb2cc3afbc849d03bddbde47896786df93d6f02657eeeae5dbc8cdc78cd8a4f80123 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf + languageName: node + linkType: hard + +"@lerna-lite/changed@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/changed@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/list": "npm:3.9.3" + "@lerna-lite/listable": "npm:3.9.3" + checksum: 10c0/1e52c81a27f3269ce5d9c010bdd6dfb2743c21e1df118ef8c2930078131f3281a42cfd1dc81ad2b4e189fcae08c386ab3771b8f5434d8f165a3b728e368698be + languageName: node + linkType: hard + +"@lerna-lite/cli@npm:3.9.3, @lerna-lite/cli@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/cli@npm:3.9.3" + dependencies: + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/init": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:3.9.3" + dedent: "npm:^1.5.3" + dotenv: "npm:^16.4.5" + import-local: "npm:^3.2.0" + load-json-file: "npm:^7.0.1" + yargs: "npm:^17.7.2" + peerDependenciesMeta: + "@lerna-lite/exec": + optional: true + "@lerna-lite/list": + optional: true + "@lerna-lite/publish": + optional: true + "@lerna-lite/run": + optional: true + "@lerna-lite/version": + optional: true + "@lerna-lite/watch": + optional: true + bin: + lerna: dist/cli.js + checksum: 10c0/cb78ea7a322b39a1e011321c40976975a4673c32617c0f1c9a86554807a4e67a8c4ee31f27ba9aadedc9ed197bf74d58165d6e1f092bb46115b007786cfda2e5 + languageName: node + linkType: hard + +"@lerna-lite/core@npm:3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/core@npm:3.9.3" + dependencies: + "@inquirer/expand": "npm:^4.0.0" + "@inquirer/input": "npm:^4.0.0" + "@inquirer/select": "npm:^4.0.0" + "@lerna-lite/npmlog": "npm:3.9.3" + "@npmcli/run-script": "npm:^8.1.0" + clone-deep: "npm:^4.0.1" + config-chain: "npm:^1.1.13" + cosmiconfig: "npm:^9.0.0" + dedent: "npm:^1.5.3" + execa: "npm:^8.0.1" + fs-extra: "npm:^11.2.0" + glob-parent: "npm:^6.0.2" + is-ci: "npm:^3.0.1" + json5: "npm:^2.2.3" + load-json-file: "npm:^7.0.1" + minimatch: "npm:^9.0.5" + npm-package-arg: "npm:^11.0.3" + p-map: "npm:^7.0.2" + p-queue: "npm:^8.0.1" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.3" + slash: "npm:^5.1.0" + strong-log-transformer: "npm:^2.1.0" + tinyglobby: "npm:^0.2.9" + tinyrainbow: "npm:^1.2.0" + write-file-atomic: "npm:^5.0.1" + write-json-file: "npm:^6.0.0" + write-package: "npm:^7.1.0" + checksum: 10c0/9f510db01d302848c168f503f20e79304762d43ac3d395876a316219948d1eec4b19835da4ed1a503543622e6ffa5fbbee54dbb5aaf14696127a754e3f4e414e + languageName: node + linkType: hard + +"@lerna-lite/diff@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/diff@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:^3.9.3" + checksum: 10c0/026660ac789a3cf7ff5916fa6460114d17e4bc173c0e556042708b79f45cc981b56f940c9f482f6b861a877b682dc2d24a5336dfbfe792bb08b9e26057d872b5 + languageName: node + linkType: hard + +"@lerna-lite/exec@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/exec@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/filter-packages": "npm:3.9.3" + "@lerna-lite/profiler": "npm:3.9.3" + dotenv: "npm:^16.4.5" + p-map: "npm:^7.0.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/aa67d5d30fdd739c51ad4e126e967c2f0d0d72765ce01a4aca8517fc35a0c451c4cc57db0c8a1bb14459ceec70a5d17f2c18193edce060e7440604e03f35a671 + languageName: node + linkType: hard + +"@lerna-lite/filter-packages@npm:3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/filter-packages@npm:3.9.3" + dependencies: + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:3.9.3" + multimatch: "npm:^7.0.0" + checksum: 10c0/da7690ae2febfb8991d7ab614defa17ec26a5a603c2d0fc5378a679db958b2a4836f25b86b166883c878fda95ee8406063762e557c0eb2460c0e7914a5d4c6aa + languageName: node + linkType: hard + +"@lerna-lite/init@npm:3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/init@npm:3.9.3" + dependencies: + "@lerna-lite/core": "npm:3.9.3" + fs-extra: "npm:^11.2.0" + p-map: "npm:^7.0.2" + write-json-file: "npm:^6.0.0" + checksum: 10c0/47cd1ddc785bfa3f4235456630fa405f97040fd3f950840053476c23048441d531fa0badea3b53c2dd1e4393195eb07c79ff0ef55842e9e1191e99dd6c151b51 + languageName: node + linkType: hard + +"@lerna-lite/list@npm:3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/list@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/filter-packages": "npm:3.9.3" + "@lerna-lite/listable": "npm:3.9.3" + checksum: 10c0/ee7571a7e997c2c852f1aa135f768d10ffe8df73fa51cc020bd3a0a7f475c941e6e416a20550364d537403de54a21467919411a331e4b489861e56e6e0f41b42 + languageName: node + linkType: hard + +"@lerna-lite/listable@npm:3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/listable@npm:3.9.3" + dependencies: + "@lerna-lite/core": "npm:3.9.3" + columnify: "npm:^1.6.0" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/4e813ac5446305255be670262883500212862cd29ae88ab0009ca1a5863ccc4086b29e7c1a609cb821c46622416900a2b2c0eb55021595ffa67ae6d5f90d85af + languageName: node + linkType: hard + +"@lerna-lite/npmlog@npm:3.9.3, @lerna-lite/npmlog@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/npmlog@npm:3.9.3" + dependencies: + aproba: "npm:^2.0.0" + color-support: "npm:^1.1.3" + console-control-strings: "npm:^1.1.0" + has-unicode: "npm:^2.0.1" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:^4.1.0" + string-width: "npm:^7.2.0" + strip-ansi: "npm:^7.1.0" + wide-align: "npm:^1.1.5" + checksum: 10c0/d8912f5c2cd51fd935c7bc4d5f4176918761b2c0579f02f33e9a78bee13341c55a77f269cee12b7b13f0e00e5b418a3fb613ddd6d212c7de356b5ee00c53ba47 + languageName: node + linkType: hard + +"@lerna-lite/profiler@npm:3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/profiler@npm:3.9.3" + dependencies: + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:3.9.3" + fs-extra: "npm:^11.2.0" + upath: "npm:^2.0.1" + checksum: 10c0/925bdafbbc795f504c286ec46db34659c9d7670e945bcf6c378f8e8a0acc4713ac434a7429f39d39a4d38e374207cf3b7983d320074797b2582dc27e0d74a722 + languageName: node + linkType: hard + +"@lerna-lite/publish@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/publish@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:3.9.3" + "@lerna-lite/version": "npm:3.9.3" + "@npmcli/arborist": "npm:^7.5.4" + "@npmcli/package-json": "npm:^5.2.1" + byte-size: "npm:^9.0.0" + columnify: "npm:^1.6.0" + fs-extra: "npm:^11.2.0" + has-unicode: "npm:^2.0.1" + libnpmaccess: "npm:^8.0.6" + libnpmpublish: "npm:^9.0.9" + normalize-path: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.3" + npm-packlist: "npm:^8.0.2" + npm-registry-fetch: "npm:^17.1.0" + p-map: "npm:^7.0.2" + p-pipe: "npm:^4.0.0" + pacote: "npm:^18.0.6" + semver: "npm:^7.6.3" + ssri: "npm:^11.0.0" + tar: "npm:^6.2.1" + temp-dir: "npm:^3.0.0" + tinyglobby: "npm:^0.2.7" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/6faa87dfd150e36fe473aaf4ca5602956f70ebda1932aa6766ac704ab4e9f36ac959e4f343a092bef9724afe50ab97bf70c171a9eab4ff447e4236dd3ab98cb9 + languageName: node + linkType: hard + +"@lerna-lite/run@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/run@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/filter-packages": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:3.9.3" + "@lerna-lite/profiler": "npm:3.9.3" + fs-extra: "npm:^11.2.0" + p-map: "npm:^7.0.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/602a0fbd1120774b56e9dbbbb4873ec05679c8583fd2052ff80bdc53b6e093f685aeaf93810ebd985347482adbb9ab677bea57594518b1ab7534f4f451aa4fdb + languageName: node + linkType: hard + +"@lerna-lite/version@npm:3.9.3, @lerna-lite/version@npm:^3.9.3": + version: 3.9.3 + resolution: "@lerna-lite/version@npm:3.9.3" + dependencies: + "@lerna-lite/cli": "npm:3.9.3" + "@lerna-lite/core": "npm:3.9.3" + "@lerna-lite/npmlog": "npm:3.9.3" + "@octokit/plugin-enterprise-rest": "npm:^6.0.1" + "@octokit/rest": "npm:^21.0.2" + conventional-changelog-angular: "npm:^7.0.0" + conventional-changelog-core: "npm:^7.0.0" + conventional-changelog-writer: "npm:^7.0.1" + conventional-commits-parser: "npm:^5.0.0" + conventional-recommended-bump: "npm:^9.0.0" + dedent: "npm:^1.5.3" + fs-extra: "npm:^11.2.0" + get-stream: "npm:^9.0.1" + git-url-parse: "npm:^15.0.0" + graceful-fs: "npm:^4.2.11" + is-stream: "npm:^4.0.1" + load-json-file: "npm:^7.0.1" + make-dir: "npm:^5.0.0" + minimatch: "npm:^9.0.5" + new-github-release-url: "npm:^2.0.0" + node-fetch: "npm:^3.3.2" + npm-package-arg: "npm:^11.0.3" + p-limit: "npm:^6.1.0" + p-map: "npm:^7.0.2" + p-pipe: "npm:^4.0.0" + p-reduce: "npm:^3.0.0" + pify: "npm:^6.1.0" + semver: "npm:^7.6.3" + slash: "npm:^5.1.0" + temp-dir: "npm:^3.0.0" + tinyrainbow: "npm:^1.2.0" + uuid: "npm:^10.0.0" + write-json-file: "npm:^6.0.0" + checksum: 10c0/cc38d91ae9b596169187fb6e6b65d83d63c9c3ab2664f77c0f2e73ba1772d20203288f6fad2ae07722250fe1baf262262942c2aec7127685a8d37b0a121b2b2f + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@nolyfill/is-core-module@npm:1.0.39": + version: 1.0.39 + resolution: "@nolyfill/is-core-module@npm:1.0.39" + checksum: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/arborist@npm:^7.5.4": + version: 7.5.4 + resolution: "@npmcli/arborist@npm:7.5.4" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/fs": "npm:^3.1.1" + "@npmcli/installed-package-contents": "npm:^2.1.0" + "@npmcli/map-workspaces": "npm:^3.0.2" + "@npmcli/metavuln-calculator": "npm:^7.1.1" + "@npmcli/name-from-folder": "npm:^2.0.0" + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/query": "npm:^3.1.0" + "@npmcli/redact": "npm:^2.0.0" + "@npmcli/run-script": "npm:^8.1.0" + bin-links: "npm:^4.0.4" + cacache: "npm:^18.0.3" + common-ancestor-path: "npm:^1.0.1" + hosted-git-info: "npm:^7.0.2" + json-parse-even-better-errors: "npm:^3.0.2" + json-stringify-nice: "npm:^1.1.4" + lru-cache: "npm:^10.2.2" + minimatch: "npm:^9.0.4" + nopt: "npm:^7.2.1" + npm-install-checks: "npm:^6.2.0" + npm-package-arg: "npm:^11.0.2" + npm-pick-manifest: "npm:^9.0.1" + npm-registry-fetch: "npm:^17.0.1" + pacote: "npm:^18.0.6" + parse-conflict-json: "npm:^3.0.0" + proc-log: "npm:^4.2.0" + proggy: "npm:^2.0.0" + promise-all-reject-late: "npm:^1.0.0" + promise-call-limit: "npm:^3.0.1" + read-package-json-fast: "npm:^3.0.2" + semver: "npm:^7.3.7" + ssri: "npm:^10.0.6" + treeverse: "npm:^3.0.0" + walk-up-path: "npm:^3.0.1" + bin: + arborist: bin/index.js + checksum: 10c0/22417b804872e68b6486187bb769eabef7245c5d3fa055d5473f84a7088580543235f34af3047a0e9b357e70fccd768e8ef5c6c8664ed6909f659d07607ad955 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@npmcli/git@npm:^5.0.0": + version: 5.0.8 + resolution: "@npmcli/git@npm:5.0.8" + dependencies: + "@npmcli/promise-spawn": "npm:^7.0.0" + ini: "npm:^4.1.3" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^9.0.0" + proc-log: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^4.0.0" + checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": + version: 2.1.0 + resolution: "@npmcli/installed-package-contents@npm:2.1.0" + dependencies: + npm-bundled: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10c0/f5ecba0d45fc762f3e0d5def29fbfabd5d55e8147b01ae0a101769245c2e0038bc82a167836513a98aaed0a15c3d81fcdb232056bb8a962972a432533e518fce + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.6 + resolution: "@npmcli/map-workspaces@npm:3.0.6" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^7.1.1": + version: 7.1.1 + resolution: "@npmcli/metavuln-calculator@npm:7.1.1" + dependencies: + cacache: "npm:^18.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + pacote: "npm:^18.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + checksum: 10c0/27402cab124bb1fca56af7549f730c38c0ab40de60cbef6264a4193c26c2d28cefb2adac29ed27f368031795704f9f8fe0c547c4c8cb0c0fa94d72330d56ac80 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: 10c0/5d0ac17dacf2dd6e45312af2c1ae2749bb0730fcc82da101c37d3a4fd963a5e1c5d39781e5e1e5e5828df4ab1ad4e3fdbab1d69b7cd0abebad9983efb87df985 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0, @npmcli/package-json@npm:^5.2.1": + version: 5.2.1 + resolution: "@npmcli/package-json@npm:5.2.1" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/promise-spawn@npm:7.0.2" + dependencies: + which: "npm:^4.0.0" + checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 + languageName: node + linkType: hard + +"@npmcli/query@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/query@npm:3.1.0" + dependencies: + postcss-selector-parser: "npm:^6.0.10" + checksum: 10c0/9a099677dd188a2d9eb7a49e32c69d315b09faea59e851b7c2013b5bda915a38434efa7295565c40a1098916c06ebfa1840f68d831180e36842f48c24f4c5186 + languageName: node + linkType: hard + +"@npmcli/redact@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/redact@npm:2.0.1" + checksum: 10c0/5f346f7ef224b44c90009939f93c446a865a3d9e5a7ebe0246cdb0ebd03219de3962ee6c6e9197298d8c6127ea33535e8c44814276e4941394dc1cdf1f30f6bc + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": + version: 8.1.0 + resolution: "@npmcli/run-script@npm:8.1.0" + dependencies: + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.0.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + node-gyp: "npm:^10.0.0" + proc-log: "npm:^4.0.0" + which: "npm:^4.0.0" + checksum: 10c0/f9f40ecff0406a9ce1b77c9f714fc7c71b561289361efc6e2e0e48ca2d630aa98d277cbbf269750f9467a40eaaac79e78766d67c458046aa9507c8c354650fee + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^5.0.0": + version: 5.1.1 + resolution: "@octokit/auth-token@npm:5.1.1" + checksum: 10c0/1e6117c5170de9a5532ffb85e0bda153f4dffdd66871c42de952828eddd9029fe5161a2a8bf20b57f0d45c80f8fb9ddc69aa639e0fa6b776829efb1b0881b154 + languageName: node + linkType: hard + +"@octokit/core@npm:^6.1.2": + version: 6.1.2 + resolution: "@octokit/core@npm:6.1.2" + dependencies: + "@octokit/auth-token": "npm:^5.0.0" + "@octokit/graphql": "npm:^8.0.0" + "@octokit/request": "npm:^9.0.0" + "@octokit/request-error": "npm:^6.0.1" + "@octokit/types": "npm:^13.0.0" + before-after-hook: "npm:^3.0.2" + universal-user-agent: "npm:^7.0.0" + checksum: 10c0/f73be16a8013f69197b7744de75537d869f3a2061dda25dcde746d23b87f305bbdc7adbfe044ab0755eec32e6d54d61c73f4ca788d214eba8e88648a3133733e + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^10.0.0": + version: 10.1.1 + resolution: "@octokit/endpoint@npm:10.1.1" + dependencies: + "@octokit/types": "npm:^13.0.0" + universal-user-agent: "npm:^7.0.2" + checksum: 10c0/946517241b33db075e7b3fd8abc6952b9e32be312197d07d415dbefb35b93d26afd508f64315111de7cabc2638d4790a9b0b366cf6cc201de5ec6997c7944c8b + languageName: node + linkType: hard + +"@octokit/graphql@npm:^8.0.0": + version: 8.1.1 + resolution: "@octokit/graphql@npm:8.1.1" + dependencies: + "@octokit/request": "npm:^9.0.0" + "@octokit/types": "npm:^13.0.0" + universal-user-agent: "npm:^7.0.0" + checksum: 10c0/fe68b89b21416f56bc9c0d19bba96a9a8ee567312b6fb764b05ea0649a5e44bec71665a0013e7c34304eb77c20ad7e7a7cf43b87ea27c280350229d71034c131 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^22.2.0": + version: 22.2.0 + resolution: "@octokit/openapi-types@npm:22.2.0" + checksum: 10c0/a45bfc735611e836df0729f5922bbd5811d401052b972d1e3bc1278a2d2403e00f4552ce9d1f2793f77f167d212da559c5cb9f1b02c935114ad6d898779546ee + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:^6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 10c0/26bd0a30582954efcd29b41e16698db79e9d20e3f88c4069b43b183223cee69862621f18b6a7a1c9257b1cd07c24477e403b75c74688660ecf31d467b9d8fd9e + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^11.0.0": + version: 11.3.5 + resolution: "@octokit/plugin-paginate-rest@npm:11.3.5" + dependencies: + "@octokit/types": "npm:^13.6.0" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10c0/c3a1f4a3ce95d9035e58aa9984ba51fd72aaed0505fef0656feb236c91a4de15b00752b9eabbdfced53826857a26c8e96d2db8d629ba0a476057935f2b318e50 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^5.3.1": + version: 5.3.1 + resolution: "@octokit/plugin-request-log@npm:5.3.1" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10c0/2f959934b8285cf39a1d1d0b92ec881b3ae171ae74738225f87b89381afd72a32bc7ea9c04d2dcee74f74ad24c22cce0c5f3e5b4333d531ea67b985e4ee90cb0 + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^13.0.0": + version: 13.2.6 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:13.2.6" + dependencies: + "@octokit/types": "npm:^13.6.1" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10c0/9b38187c8fb72cb43c77808d737580e5d71c8cf2133b1975badff36663754485bc999987e173201f6485f514287f22b36535dc1ec7e55575932e4494d780e366 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^6.0.1": + version: 6.1.5 + resolution: "@octokit/request-error@npm:6.1.5" + dependencies: + "@octokit/types": "npm:^13.0.0" + checksum: 10c0/37afef6c072d987ddf50b3438bcc974741a22ee7f788172876f92b5228ed43f5c4c1556a1d73153508d6c8d3a3d2344c7fefb6cde8678c7f63c2115b8629c49b + languageName: node + linkType: hard + +"@octokit/request@npm:^9.0.0": + version: 9.1.3 + resolution: "@octokit/request@npm:9.1.3" + dependencies: + "@octokit/endpoint": "npm:^10.0.0" + "@octokit/request-error": "npm:^6.0.1" + "@octokit/types": "npm:^13.1.0" + universal-user-agent: "npm:^7.0.2" + checksum: 10c0/41c26387ca9b5b3081a17eebea0c7d6b0122f6b2cb21c2fd7ef63ca587a828448e40b33973416f615fed139c659598f2ae7a1370cc103738f0f6f3297b5fc4ab + languageName: node + linkType: hard + +"@octokit/rest@npm:^21.0.2": + version: 21.0.2 + resolution: "@octokit/rest@npm:21.0.2" + dependencies: + "@octokit/core": "npm:^6.1.2" + "@octokit/plugin-paginate-rest": "npm:^11.0.0" + "@octokit/plugin-request-log": "npm:^5.3.1" + "@octokit/plugin-rest-endpoint-methods": "npm:^13.0.0" + checksum: 10c0/4c7f0cf2797a7da5a6e3d8d7a7cfcc47b36de20a8d3e23289cc5dff2a32228254a6db459b0196f71efe229ef59fa6696591182c6c3bee7a4d658f2a0ef4c26bc + languageName: node + linkType: hard + +"@octokit/types@npm:^13.0.0, @octokit/types@npm:^13.1.0, @octokit/types@npm:^13.6.0, @octokit/types@npm:^13.6.1": + version: 13.6.1 + resolution: "@octokit/types@npm:13.6.1" + dependencies: + "@octokit/openapi-types": "npm:^22.2.0" + checksum: 10c0/891334b5786ba6aef953384cec05d53e05132dd577c0c22db124d55eaa69609362d1e3147853b46e91bf226e046ba24d615c55214c8f8f4e7c3a5c38429b38e9 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b + languageName: node + linkType: hard + +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + +"@sigstore/bundle@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/bundle@npm:2.3.2" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/872a95928236bd9950a2ecc66af1c60a82f6b482a62a20d0f817392d568a60739a2432cad70449ac01e44e9eaf85822d6d9ebc6ade6cb3e79a7d62226622eb5d + languageName: node + linkType: hard + +"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@sigstore/core@npm:1.1.0" + checksum: 10c0/3b3420c1bd17de0371e1ac7c8f07a2cbcd24d6b49ace5bbf2b63f559ee08c4a80622a4d1c0ae42f2c9872166e9cb111f33f78bff763d47e5ef1efc62b8e457ea + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.3.2": + version: 0.3.2 + resolution: "@sigstore/protobuf-specs@npm:0.3.2" + checksum: 10c0/108eed419181ff599763f2d28ff5087e7bce9d045919de548677520179fe77fb2e2b7290216c93c7a01bdb2972b604bf44599273c991bbdf628fbe1b9b70aacb + languageName: node + linkType: hard + +"@sigstore/sign@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/sign@npm:2.3.2" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + make-fetch-happen: "npm:^13.0.1" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + checksum: 10c0/a1e7908f3e4898f04db4d713fa10ddb3ae4f851592c9b554f1269073211e1417528b5088ecee60f27039fde5a5426ae573481d77cfd7e4395d2a0ddfcf5f365f + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^2.3.4": + version: 2.3.4 + resolution: "@sigstore/tuf@npm:2.3.4" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + tuf-js: "npm:^2.2.1" + checksum: 10c0/97839882d787196517933df5505fae4634975807cc7adcd1783c7840c2a9729efb83ada47556ec326d544b9cb0d1851af990dc46eebb5fe7ea17bf7ce1fc0b8c + languageName: node + linkType: hard + +"@sigstore/verify@npm:^1.2.1": + version: 1.2.1 + resolution: "@sigstore/verify@npm:1.2.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/af06580a8d5357c31259da1ac7323137054e0ac41e933278d95a4bc409a4463620125cb4c00b502f6bc32fdd68c2293019391b0d31ed921ee3852a9e84358628 + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 + languageName: node + linkType: hard + +"@tufjs/models@npm:2.0.1": + version: 2.0.1 + resolution: "@tufjs/models@npm:2.0.1" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.4" + checksum: 10c0/ad9e82fd921954501fd90ed34ae062254637595577ad13fdc1e076405c0ea5ee7d8aebad09e63032972fd92b07f1786c15b24a195a171fc8ac470ca8e2ffbcc4 + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.1, @types/normalize-package-data@npm:^2.4.3": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^7.17.0": + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^7.17.0": + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + peerDependencies: + eslint: ^8.56.0 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: "npm:^1.2.0" + through: "npm:>=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.9.0": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"alwatr-monorepo@workspace:.": + version: 0.0.0-use.local + resolution: "alwatr-monorepo@workspace:." + dependencies: + "@alwatr/eslint-config": "npm:^1.2.11" + "@alwatr/prettier-config": "npm:^1.0.6" + "@alwatr/tsconfig-base": "npm:^1.3.2" + "@lerna-lite/changed": "npm:^3.9.3" + "@lerna-lite/cli": "npm:^3.9.3" + "@lerna-lite/diff": "npm:^3.9.3" + "@lerna-lite/exec": "npm:^3.9.3" + "@lerna-lite/publish": "npm:^3.9.3" + "@lerna-lite/run": "npm:^3.9.3" + "@lerna-lite/version": "npm:^3.9.3" + "@typescript-eslint/eslint-plugin": "npm:^7.17.0" + "@typescript-eslint/parser": "npm:^7.17.0" + conventional-changelog-conventionalcommits: "npm:^7.0.2" + eslint: "npm:^8.57.0" + eslint-import-resolver-typescript: "npm:^3.6.3" + eslint-plugin-import: "npm:^2.31.0" + eslint-plugin-require-extensions: "npm:^0.1.3" + prettier: "npm:^3.3.3" + typescript: "npm:^5.6.3" + languageName: unknown + linkType: soft + +"alwatr@workspace:packages/alwatr": + version: 0.0.0-use.local + resolution: "alwatr@workspace:packages/alwatr" + dependencies: + "@alwatr/flux": "npm:^3.2.0" + "@alwatr/nano-build": "npm:^2.0.2" + "@alwatr/nanolib": "npm:^1.2.1" + "@alwatr/nanotron": "npm:^4.3.0" + "@alwatr/nitrobase": "npm:^7.3.0" + "@alwatr/prettier-config": "npm:^1.0.6" + "@alwatr/tsconfig-base": "npm:^1.3.2" + "@alwatr/type-helper": "npm:^2.0.2" + typescript: "npm:^5.6.3" + languageName: unknown + linkType: soft + +"ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"aproba@npm:^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + languageName: node + linkType: hard + +"array-differ@npm:^4.0.0": + version: 4.0.0 + resolution: "array-differ@npm:4.0.0" + checksum: 10c0/72c035c505a7629d2983827a16654d73db6a9a2d6340ba9d0803aed516f46a202f3b7042c5a4a57534952f7477ca5394f3b65ecb9be5192e5d269f445f066d75 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c + languageName: node + linkType: hard + +"array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + is-string: "npm:^1.0.7" + checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array-union@npm:^3.0.1": + version: 3.0.1 + resolution: "array-union@npm:3.0.1" + checksum: 10c0/b5271d7e5688d2d1932928b271796dbbddc422448557ab05ef6f34a9f84fb645eb855384feec6234bf59c226053a0e21b8a00b0e6cd588874b90a5c13dbeb64e + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/a578ed836a786efbb6c2db0899ae80781b476200617f65a44846cb1ed8bd8b24c8821b83703375d8af639c689497b7b07277060024b9919db94ac3e10dc8a49b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/67b3f1d602bb73713265145853128b1ad77cc0f9b833c7e1e056b323fbeac41a4ff1c9c99c7b9445903caea924d9ca2450578d9011913191aa88cc3c3a4b54f4 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" + is-shared-array-buffer: "npm:^1.0.2" + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"before-after-hook@npm:^3.0.2": + version: 3.0.2 + resolution: "before-after-hook@npm:3.0.2" + checksum: 10c0/dea640f9e88a1085372c9bcc974b7bf379267490693da92ec102a7d8b515dd1e95f00ef575a146b83ca638104c57406c3427d37bdf082f602dde4b56d05bba14 + languageName: node + linkType: hard + +"bin-links@npm:^4.0.4": + version: 4.0.4 + resolution: "bin-links@npm:4.0.4" + dependencies: + cmd-shim: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + read-cmd-shim: "npm:^4.0.0" + write-file-atomic: "npm:^5.0.0" + checksum: 10c0/feb664e786429289d189c19c193b28d855c2898bc53b8391306cbad2273b59ccecb91fd31a433020019552c3bad3a1e0eeecca1c12e739a12ce2ca94f7553a17 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"byte-size@npm:^9.0.0": + version: 9.0.0 + resolution: "byte-size@npm:9.0.0" + checksum: 10c0/1ae27afb966981e8e8347657a5b81b407c03386026b502237bfc0c0c253f26def6795b0f3bf44788286c6c49d1cf562398f5646e4f3ceba48b964b4852d83b33 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0, cacache@npm:^18.0.3": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"ci-info@npm:^4.0.0": + version: 4.0.0 + resolution: "ci-info@npm:4.0.0" + checksum: 10c0/ecc003e5b60580bd081d83dd61d398ddb8607537f916313e40af4667f9c92a1243bd8e8a591a5aa78e418afec245dbe8e90a0e26e39ca0825129a99b978dd3f9 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + +"cmd-shim@npm:^6.0.0": + version: 6.0.3 + resolution: "cmd-shim@npm:6.0.3" + checksum: 10c0/dc09fe0bf39e86250529456d9a87dd6d5208d053e449101a600e96dc956c100e0bc312cdb413a91266201f3bd8057d4abf63875cafb99039553a1937d8f3da36 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 + languageName: node + linkType: hard + +"columnify@npm:^1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: "npm:^6.0.1" + wcwidth: "npm:^1.0.0" + checksum: 10c0/25b90b59129331bbb8b0c838f8df69924349b83e8eab9549f431062a20a39094b8d744bb83265be38fd5d03140ce4bfbd85837c293f618925e83157ae9535f1d + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: "npm:^1.0.0" + dot-prop: "npm:^5.1.0" + checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"config-chain@npm:^1.1.13": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 10c0/39d1df18739d7088736cc75695e98d7087aea43646351b028dfabd5508d79cf6ef4c5bcd90471f52cd87ae470d1c5490c0a8c1a292fbe6ee9ff688061ea0963e + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:^7.0.0": + version: 7.0.0 + resolution: "conventional-changelog-angular@npm:7.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e + languageName: node + linkType: hard + +"conventional-changelog-conventionalcommits@npm:^7.0.2": + version: 7.0.2 + resolution: "conventional-changelog-conventionalcommits@npm:7.0.2" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/3cb1eab35e37fc973cfb3aed0e159f54414e49b222988da1c2aa86cc8a87fe7531491bbb7657fe5fc4dc0e25f5b50e2065ba8ac71cc4c08eed9189102a2b81bd + languageName: node + linkType: hard + +"conventional-changelog-core@npm:^7.0.0": + version: 7.0.0 + resolution: "conventional-changelog-core@npm:7.0.0" + dependencies: + "@hutson/parse-repository-url": "npm:^5.0.0" + add-stream: "npm:^1.0.0" + conventional-changelog-writer: "npm:^7.0.0" + conventional-commits-parser: "npm:^5.0.0" + git-raw-commits: "npm:^4.0.0" + git-semver-tags: "npm:^7.0.0" + hosted-git-info: "npm:^7.0.0" + normalize-package-data: "npm:^6.0.0" + read-pkg: "npm:^8.0.0" + read-pkg-up: "npm:^10.0.0" + checksum: 10c0/3d5119faf3c154e57e2574b87320892637f4a26cf047827ec8917c227b7e1b3a6ee0ea00247e548f65100db013174d355744ff5b4b90c7c45855db109c24aa2a + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^4.1.0": + version: 4.1.0 + resolution: "conventional-changelog-preset-loader@npm:4.1.0" + checksum: 10c0/7854ddeca740d2e478f0e8aa6591dd224c7e094863cbefada2f219459d8e267580ab73d0a0f566a7f37382896ec0f502e9908123af866fd6d7fbc560edd1ee68 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^7.0.0, conventional-changelog-writer@npm:^7.0.1": + version: 7.0.1 + resolution: "conventional-changelog-writer@npm:7.0.1" + dependencies: + conventional-commits-filter: "npm:^4.0.0" + handlebars: "npm:^4.7.7" + json-stringify-safe: "npm:^5.0.1" + meow: "npm:^12.0.1" + semver: "npm:^7.5.2" + split2: "npm:^4.0.0" + bin: + conventional-changelog-writer: cli.mjs + checksum: 10c0/ec51708c33860777f2b85f1df588aed918cab08919146cdfac8f271e31c0caee22c5c50df78e4ce358022e58f65c8de77fd6a5fb529f4bb5ba27c2d1e072750f + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^4.0.0": + version: 4.0.0 + resolution: "conventional-commits-filter@npm:4.0.0" + checksum: 10c0/b26ea11ebb38218cb3cbbaf7d68b0f7c3b0eb7ad69afe9c9431d91e784acbebaeda7a095127ae5a7f8b75087d62b44e8e69d63426ff02b49f7dd504755934247 + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^5.0.0": + version: 5.0.0 + resolution: "conventional-commits-parser@npm:5.0.0" + dependencies: + JSONStream: "npm:^1.3.5" + is-text-path: "npm:^2.0.0" + meow: "npm:^12.0.1" + split2: "npm:^4.0.0" + bin: + conventional-commits-parser: cli.mjs + checksum: 10c0/c9e542f4884119a96a6bf3311ff62cdee55762d8547f4c745ae3ebdc50afe4ba7691e165e34827d5cf63283cbd93ab69917afd7922423075b123d5d9a7a82ed2 + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:^9.0.0": + version: 9.0.0 + resolution: "conventional-recommended-bump@npm:9.0.0" + dependencies: + conventional-changelog-preset-loader: "npm:^4.1.0" + conventional-commits-filter: "npm:^4.0.0" + conventional-commits-parser: "npm:^5.0.0" + git-raw-commits: "npm:^4.0.0" + git-semver-tags: "npm:^7.0.0" + meow: "npm:^12.0.1" + bin: + conventional-recommended-bump: cli.mjs + checksum: 10c0/ceec7dcfddfc6508d0ba3debef471b47d4db3a2112e269d5d736202b226651b31fcbd4790c9403b5b14e6501365527b8c2c4ce8836c6a09faf07cb7d03c1fe07 + languageName: node + linkType: hard + +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"dargs@npm:^8.0.0": + version: 8.1.0 + resolution: "dargs@npm:8.1.0" + checksum: 10c0/08cbd1ee4ac1a16fb7700e761af2e3e22d1bdc04ac4f851926f552dde8f9e57714c0d04013c2cca1cda0cba8fb637e0f93ad15d5285547a939dd1989ee06a82d + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"dedent@npm:^1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepmerge-ts@npm:^7.1.0": + version: 7.1.3 + resolution: "deepmerge-ts@npm:7.1.3" + checksum: 10c0/c9cfe7742a2c8f785302378b004381e1b831e3307ffe0c17be4b98fd87f347cb52a550aa9ff9ee0608b97f25400972ab79484f3836d77ec733828b10c8dcc522 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"detect-indent@npm:^7.0.1": + version: 7.0.1 + resolution: "detect-indent@npm:7.0.1" + checksum: 10c0/47b6e3e3dda603c386e73b129f3e84844ae59bc2615f5072becf3cc02eab400bed5a4e6379c49d0b18cf630e80c2b07e87e0038b777addbc6ef793ad77dd05bc + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5": + version: 16.4.5 + resolution: "dotenv@npm:16.4.5" + checksum: 10c0/48d92870076832af0418b13acd6e5a5a3e83bb00df690d9812e94b24aff62b88ade955ac99a05501305b8dc8f1b0ee7638b18493deb6fe93d680e5220936292f + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10c0/a3fcedfc58bfcce21a05a5f36a529d81e88d602100145fcca3dc6f795e3c8acc4fc18fe773fbf9b6d6e9371205edb3afa2668ec3473fa2aa7fd47d2a9d46482d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.15.0": + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1, error-ex@npm:^1.3.2": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.3" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.1" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.2" + safe-array-concat: "npm:^1.1.2" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10c0/d27e9afafb225c6924bee9971a7f25f20c314f2d6cb93a63cada4ac11dcf42040896a6c22e5fb8f2a10767055ed4ddf400be3b1eb12297d281726de470b75666 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: "npm:^1.1.4" + is-date-object: "npm:^1.0.1" + is-symbol: "npm:^1.0.2" + checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 + languageName: node + linkType: hard + +"esbuild@npm:^0.24.0": + version: 0.24.0 + resolution: "esbuild@npm:0.24.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.0" + "@esbuild/android-arm": "npm:0.24.0" + "@esbuild/android-arm64": "npm:0.24.0" + "@esbuild/android-x64": "npm:0.24.0" + "@esbuild/darwin-arm64": "npm:0.24.0" + "@esbuild/darwin-x64": "npm:0.24.0" + "@esbuild/freebsd-arm64": "npm:0.24.0" + "@esbuild/freebsd-x64": "npm:0.24.0" + "@esbuild/linux-arm": "npm:0.24.0" + "@esbuild/linux-arm64": "npm:0.24.0" + "@esbuild/linux-ia32": "npm:0.24.0" + "@esbuild/linux-loong64": "npm:0.24.0" + "@esbuild/linux-mips64el": "npm:0.24.0" + "@esbuild/linux-ppc64": "npm:0.24.0" + "@esbuild/linux-riscv64": "npm:0.24.0" + "@esbuild/linux-s390x": "npm:0.24.0" + "@esbuild/linux-x64": "npm:0.24.0" + "@esbuild/netbsd-x64": "npm:0.24.0" + "@esbuild/openbsd-arm64": "npm:0.24.0" + "@esbuild/openbsd-x64": "npm:0.24.0" + "@esbuild/sunos-x64": "npm:0.24.0" + "@esbuild/win32-arm64": "npm:0.24.0" + "@esbuild/win32-ia32": "npm:0.24.0" + "@esbuild/win32-x64": "npm:0.24.0" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/9f1aadd8d64f3bff422ae78387e66e51a5e09de6935a6f987b6e4e189ed00fdc2d1bc03d2e33633b094008529c8b6e06c7ad1a9782fb09fec223bf95998c0683 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.13.0" + resolve: "npm:^1.22.4" + checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 + languageName: node + linkType: hard + +"eslint-import-resolver-typescript@npm:^3.6.3": + version: 3.6.3 + resolution: "eslint-import-resolver-typescript@npm:3.6.3" + dependencies: + "@nolyfill/is-core-module": "npm:1.0.39" + debug: "npm:^4.3.5" + enhanced-resolve: "npm:^5.15.0" + eslint-module-utils: "npm:^2.8.1" + fast-glob: "npm:^3.3.2" + get-tsconfig: "npm:^4.7.5" + is-bun-module: "npm:^1.0.2" + is-glob: "npm:^4.0.3" + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + checksum: 10c0/5933b00791b7b077725b9ba9a85327d2e2dc7c8944c18a868feb317a0bf0e1e77aed2254c9c5e24dcc49360d119331d2c15281837f4269592965ace380a75111 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.12.0, eslint-module-utils@npm:^2.8.1": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.31.0": + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.8" + array.prototype.findlastindex: "npm:^1.2.5" + array.prototype.flat: "npm:^1.3.2" + array.prototype.flatmap: "npm:^1.3.2" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.0" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.15.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.0" + semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.8" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a + languageName: node + linkType: hard + +"eslint-plugin-require-extensions@npm:^0.1.3": + version: 0.1.3 + resolution: "eslint-plugin-require-extensions@npm:0.1.3" + peerDependencies: + eslint: "*" + checksum: 10c0/79aec6ac25139edd7e085c40dae0e7699b66a0f253333a80e5a2857762f258d8cf8c89fc873b9ada7c9d8d7722c0386164783eb979361c5bc02c5e7fc1175403 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.57.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10c0/4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + languageName: node + linkType: hard + +"fdir@npm:^6.4.0": + version: 6.4.0 + resolution: "fdir@npm:6.4.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/9a03efa1335d78ea386b701799b08ad9e7e8da85d88567dc162cd28dd8e9486e8c269b3e95bfeb21dd6a5b14ebf69d230eb6e18f49d33fbda3cd97432f648c48 + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 10c0/07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + +"fs-extra@npm:^11.2.0": + version: 11.2.0 + resolution: "fs-extra@npm:11.2.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/d77a9a9efe60532d2e790e938c81a02c1b24904ef7a3efb3990b835514465ba720e99a6ea56fd5e2db53b4695319b644d76d5a0e9988a2beef80aa7b1da63398 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + functions-have-names: "npm:^1.2.3" + checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0": + version: 1.3.0 + resolution: "get-east-asian-width@npm:1.3.0" + checksum: 10c0/1a049ba697e0f9a4d5514c4623781c5246982bdb61082da6b5ae6c33d838e52ce6726407df285cdbb27ec1908b333cf2820989bd3e986e37bb20979437fdf34b + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + languageName: node + linkType: hard + +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10c0/5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + +"get-stream@npm:^9.0.1": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.5": + version: 4.8.1 + resolution: "get-tsconfig@npm:4.8.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/536ee85d202f604f4b5fb6be81bcd6e6d9a96846811e83e9acc6de4a04fb49506edea0e1b8cf1d5ee7af33e469916ec2809d4c5445ab8ae015a7a51fbd1572f9 + languageName: node + linkType: hard + +"git-raw-commits@npm:^4.0.0": + version: 4.0.0 + resolution: "git-raw-commits@npm:4.0.0" + dependencies: + dargs: "npm:^8.0.0" + meow: "npm:^12.0.1" + split2: "npm:^4.0.0" + bin: + git-raw-commits: cli.mjs + checksum: 10c0/ab51335d9e55692fce8e42788013dba7a7e7bf9f5bf0622c8cd7ddc9206489e66bb939563fca4edb3aa87477e2118f052702aad1933b13c6fa738af7f29884f0 + languageName: node + linkType: hard + +"git-semver-tags@npm:^7.0.0": + version: 7.0.1 + resolution: "git-semver-tags@npm:7.0.1" + dependencies: + meow: "npm:^12.0.1" + semver: "npm:^7.5.2" + bin: + git-semver-tags: cli.mjs + checksum: 10c0/6eec918f6324248faad98d8846cc8c73a73d735a182af3b2073e58a75c828487da0bbb6ae33d5b0302f006eed1af93b4a3ed732fcfc53152623ba5ee21504205 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: "npm:^1.4.0" + parse-url: "npm:^8.1.0" + checksum: 10c0/a3fa02e1a63c7c824b5ebbf23f4a9a6b34dd80031114c5dd8adb7ef53493642e39d3d80dfef4025a452128400c35c2c138d20a0f6ae5d7d7ef70d9ba13083d34 + languageName: node + linkType: hard + +"git-url-parse@npm:^15.0.0": + version: 15.0.0 + resolution: "git-url-parse@npm:15.0.0" + dependencies: + git-up: "npm:^7.0.0" + checksum: 10c0/1813a3ac8e97d348e46471db4710d776cc7b24a56a432339ab0c0f4f2323525a8627a1891aa80a53fd9be973191fe2902c0af8e17fb9b04f29445a83fbef3a4e + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10c0/5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ignore-walk@npm:^6.0.4": + version: 6.0.5 + resolution: "ignore-walk@npm:6.0.5" + dependencies: + minimatch: "npm:^9.0.0" + checksum: 10c0/8bd6d37c82400016c7b6538b03422dde8c9d7d3e99051c8357dd205d499d42828522fb4fbce219c9c21b4b069079445bacdc42bbd3e2e073b52856c2646d8a39 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.3.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-local@npm:^3.2.0": + version: 3.2.0 + resolution: "import-local@npm:3.2.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"index-to-position@npm:^0.1.2": + version: 0.1.2 + resolution: "index-to-position@npm:0.1.2" + checksum: 10c0/7c91bde8bafc22684b74a7a24915bee4691cba48352ddb4ebe3b20a3a87bc0fa7a05f586137245ca8f92222a11f341f7631ff7f38cd78a523505d2d02dbfa257 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:^1.3.4": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" + side-channel: "npm:^1.0.4" + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: "npm:^1.0.1" + checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 + languageName: node + linkType: hard + +"is-bun-module@npm:^1.0.2": + version: 1.2.1 + resolution: "is-bun-module@npm:1.2.1" + dependencies: + semver: "npm:^7.6.3" + checksum: 10c0/819e63cd4468265a3e89cdc241554e37aeb85e40375a56dd559c022f4395491273267a0f843274fda6cad1eac3b0f8dc6d9e06cc349e33e2bf45098761184736 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-ci@npm:^3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.0.0, is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: "npm:^2.0.1" + checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 10c0/eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: "npm:^1.0.2" + checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 + languageName: node + linkType: hard + +"is-text-path@npm:^2.0.0": + version: 2.0.0 + resolution: "is-text-path@npm:2.0.0" + dependencies: + text-extensions: "npm:^2.0.0" + checksum: 10c0/e3c470e1262a3a54aa0fca1c0300b2659a7aed155714be6b643f88822c03bcfa6659b491f7a05c5acd3c1a3d6d42bab47e1bdd35bcc3a25973c4f26b2928bc1a + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libnpmaccess@npm:^8.0.6": + version: 8.0.6 + resolution: "libnpmaccess@npm:8.0.6" + dependencies: + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + checksum: 10c0/0b63c7cb44e024b0225dae8ebfe5166a0be8a9420c1b5fb6a4f1c795e9eabbed0fff5984ab57167c5634145de018008cbeeb27fe6f808f611ba5ba1b849ec3d6 + languageName: node + linkType: hard + +"libnpmpublish@npm:^9.0.9": + version: 9.0.9 + resolution: "libnpmpublish@npm:9.0.9" + dependencies: + ci-info: "npm:^4.0.0" + normalize-package-data: "npm:^6.0.1" + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + proc-log: "npm:^4.2.0" + semver: "npm:^7.3.7" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.6" + checksum: 10c0/5e4bae455d33fb7402b8b8fcc505d89a1d60ff4b7dc47dd9ba318426c00400e1892fd0435d8db6baab808f64d7f226cbf8d53792244ffad1df7fc2f94f3237fc + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"lines-and-columns@npm:^2.0.3": + version: 2.0.4 + resolution: "lines-and-columns@npm:2.0.4" + checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 + languageName: node + linkType: hard + +"load-json-file@npm:^7.0.1": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: 10c0/7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"make-dir@npm:^5.0.0": + version: 5.0.0 + resolution: "make-dir@npm:5.0.0" + checksum: 10c0/3485deb28f07d6ae5858e011deac74f1333a74f9ac3a5580b8bf86c7d3234615611f237d9287e30cebb05f74dd92572fd4f78eabf7f47ed69ec233c599e8a50a + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"meow@npm:^12.0.1": + version: 12.1.1 + resolution: "meow@npm:12.1.1" + checksum: 10c0/a125ca99a32e2306e2f4cbe651a0d27f6eb67918d43a075f6e80b35e9bf372ebf0fc3a9fbc201cbbc9516444b6265fb3c9f80c5b7ebd32f548aa93eb7c28e088 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.3, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"multimatch@npm:^7.0.0": + version: 7.0.0 + resolution: "multimatch@npm:7.0.0" + dependencies: + array-differ: "npm:^4.0.0" + array-union: "npm:^3.0.1" + minimatch: "npm:^9.0.3" + checksum: 10c0/ce5b6e8a8d114830dd621b128a4a5364792bab281d861e68c7d719d2c04e8f9a4a0a566b37cbbc0a3cbaa0a62eb50e869c9d43ab439a314186b113a34c91a9c7 + languageName: node + linkType: hard + +"mute-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "mute-stream@npm:2.0.0" + checksum: 10c0/2cf48a2087175c60c8dcdbc619908b49c07f7adcfc37d29236b0c5c612d6204f789104c98cc44d38acab7b3c96f4a3ec2cfdc4934d0738d876dbefa2a12c69f4 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"new-github-release-url@npm:^2.0.0": + version: 2.0.0 + resolution: "new-github-release-url@npm:2.0.0" + dependencies: + type-fest: "npm:^2.5.1" + checksum: 10c0/9faec009b8b403efbc407f45306d07de5cc58e09df5b00bdd55b01384cd18b0fd29a97aef6915428ba3b5abb0a5c132c3507468c0c3c101e8d737c1337386786 + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 + languageName: node + linkType: hard + +"node-gyp@npm:^10.0.0": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + languageName: node + linkType: hard + +"nopt@npm:^7.0.0, nopt@npm:^7.2.1": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": + version: 6.0.2 + resolution: "normalize-package-data@npm:6.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npm-bundled@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-bundled@npm:3.0.1" + dependencies: + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/7975590a50b7ce80dd9f3eddc87f7e990c758f2f2c4d9313dd67a9aca38f1a5ac0abe20d514b850902c441e89d2346adfc3c6f1e9cbab3ea28ebb653c4442440 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2, npm-package-arg@npm:^11.0.3": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a + languageName: node + linkType: hard + +"npm-packlist@npm:^8.0.0, npm-packlist@npm:^8.0.2": + version: 8.0.2 + resolution: "npm-packlist@npm:8.0.2" + dependencies: + ignore-walk: "npm:^6.0.4" + checksum: 10c0/ac3140980b1475c2e9acd3d0ca1acd0f8660c357aed357f1a4ebff2270975e0280a3b1c4938e2f16bd68217853ceb5725cf8779ec3752dfcc546582751ceedff + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": + version: 9.1.0 + resolution: "npm-pick-manifest@npm:9.1.0" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": + version: 17.1.0 + resolution: "npm-registry-fetch@npm:17.1.0" + dependencies: + "@npmcli/redact": "npm:^2.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^13.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minizlib: "npm:^2.1.2" + npm-package-arg: "npm:^11.0.0" + proc-log: "npm:^4.0.0" + checksum: 10c0/3f66214e106609fd2e92704e62ac929cba1424d4013fec50f783afbb81168b0dc14457d35c1716a77e30fc482c3576bdc4e4bc5c84a714cac59cf98f96a17f47 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.1": + version: 1.13.2 + resolution: "object-inspect@npm:1.13.2" + checksum: 10c0/b97835b4c91ec37b5fd71add84f21c3f1047d1d155d00c0fcd6699516c256d4fcc6ff17a1aced873197fe447f91a3964178fd2a67a1ee2120cdaf60e81a050b4 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.3": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c + languageName: node + linkType: hard + +"object.values@npm:^1.2.0": + version: 1.2.0 + resolution: "object.values@npm:1.2.0" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/15809dc40fd6c5529501324fec5ff08570b7d70fb5ebbe8e2b3901afec35cf2b3dc484d1210c6c642cd3e7e0a5e18dd1d6850115337fef46bdae14ab0cb18ac3 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 10c0/4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-limit@npm:^6.1.0": + version: 6.1.0 + resolution: "p-limit@npm:6.1.0" + dependencies: + yocto-queue: "npm:^1.1.1" + checksum: 10c0/40af29461206185a81bdc971ed499d97ceb344114fd21420db95debd9c979b6c02d66a41c321246d09245a51e68410e13df92622cc8c0130f87c6bd81a15d777 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.2 + resolution: "p-map@npm:7.0.2" + checksum: 10c0/e10548036648d1c043153f9997112fe5a7de54a319210238628f8ea22ee36587fd6ee740811f88b60bbf29d932e23ae35df7fced40df477116c84c18e797047e + languageName: node + linkType: hard + +"p-pipe@npm:^4.0.0": + version: 4.0.0 + resolution: "p-pipe@npm:4.0.0" + checksum: 10c0/90c109a57cc8e4fb457bee88fe26cedc7b7b85350a0ea218f0654e6431ed6ca84c84726671696a32b867a4f3dff0c4ef92e4222d34a5998425335a66617ff5cb + languageName: node + linkType: hard + +"p-queue@npm:^8.0.1": + version: 8.0.1 + resolution: "p-queue@npm:8.0.1" + dependencies: + eventemitter3: "npm:^5.0.1" + p-timeout: "npm:^6.1.2" + checksum: 10c0/fe185bc8bbd32d17a5f6dba090077b1bb326b008b4ec9b0646c57a32a6984035aa8ece909a6d0de7f6c4640296dc288197f430e7394cdc76a26d862339494616 + languageName: node + linkType: hard + +"p-reduce@npm:^3.0.0": + version: 3.0.0 + resolution: "p-reduce@npm:3.0.0" + checksum: 10c0/794cd6c98ad246f6f41fa4b925e56c7d8759b92f67712f5f735418dc7b47cd9aadaecbbbedaea2df879fd9c5d7622ed0b22a2c090d2ec349cf0578485a660196 + languageName: node + linkType: hard + +"p-timeout@npm:^6.1.2": + version: 6.1.2 + resolution: "p-timeout@npm:6.1.2" + checksum: 10c0/d46b90a9a5fb7c650a5c56dd5cf7102ea9ab6ce998defa2b3d4672789aaec4e2f45b3b0b5a4a3e17a0fb94301ad5dd26da7d8728402e48db2022ad1847594d19 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pacote@npm:^18.0.0, pacote@npm:^18.0.6": + version: 18.0.6 + resolution: "pacote@npm:18.0.6" + dependencies: + "@npmcli/git": "npm:^5.0.0" + "@npmcli/installed-package-contents": "npm:^2.0.1" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + "@npmcli/run-script": "npm:^8.0.0" + cacache: "npm:^18.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^11.0.0" + npm-packlist: "npm:^8.0.0" + npm-pick-manifest: "npm:^9.0.0" + npm-registry-fetch: "npm:^17.0.0" + proc-log: "npm:^4.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10c0/d80907375dd52a521255e0debca1ba9089ad8fd7acdf16c5a5db2ea2a5bb23045e2bcf08d1648b1ebc40fcc889657db86ff6187ff5f8d2fc312cd6ad1ec4c6ac + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-conflict-json@npm:^3.0.0": + version: 3.0.1 + resolution: "parse-conflict-json@npm:3.0.1" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + just-diff: "npm:^6.0.0" + just-diff-apply: "npm:^5.2.0" + checksum: 10c0/610b37181229ce3e945125c3a9548ec24d1de2d697a7ea3ef0f2660cccc6613715c2ba4bdbaf37c565133d6b61758703618a2c63d1ee29f97fd33c70a8aae323 + languageName: node + linkType: hard + +"parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"parse-json@npm:^7.0.0": + version: 7.1.1 + resolution: "parse-json@npm:7.1.1" + dependencies: + "@babel/code-frame": "npm:^7.21.4" + error-ex: "npm:^1.3.2" + json-parse-even-better-errors: "npm:^3.0.0" + lines-and-columns: "npm:^2.0.3" + type-fest: "npm:^3.8.0" + checksum: 10c0/a85ebc7430af7763fa52eb456d7efd35c35be5b06f04d8d80c37d0d33312ac6cdff12647acb9c95448dcc8b907dfafa81fb126e094aa132b0abc2a71b9df51d5 + languageName: node + linkType: hard + +"parse-json@npm:^8.0.0": + version: 8.1.0 + resolution: "parse-json@npm:8.1.0" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + index-to-position: "npm:^0.1.2" + type-fest: "npm:^4.7.1" + checksum: 10c0/39a49acafc1c41a763df2599a826eb77873a44b098a5f2ba548843229b334a16ff9d613d0381328e58031b0afaabc18ed2a01337a6522911ac7a81828df58bcb + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" + dependencies: + protocols: "npm:^2.0.0" + checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: "npm:^7.0.0" + checksum: 10c0/68b95afdf4bbf72e57c7ab66f8757c935fff888f7e2b0f1e06098b4faa19e06b6b743bddaed5bc8df4f0c2de6fc475355d787373b2fdd40092be9e4e4b996648 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pify@npm:^6.1.0": + version: 6.1.0 + resolution: "pify@npm:6.1.0" + checksum: 10c0/5744905e271d821ce1c96a615aecc857bfc0154a2f55cfd773e0a27478c1e1457dd69c932f2196cfa0d298cc4a2847edaf42b1ba600b95022ba5225c079443a6 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.10": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier@npm:^3.3.3": + version: 3.3.3 + resolution: "prettier@npm:3.3.3" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"proggy@npm:^2.0.0": + version: 2.0.0 + resolution: "proggy@npm:2.0.0" + checksum: 10c0/1bfc14fa95769e6dd7e91f9d3cae8feb61e6d833ed7210d87ee5413bfa068f4ee7468483da96b2f138c40a7e91a2307f5d5d2eb6de9761c21e266a34602e6a5f + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 + languageName: node + linkType: hard + +"promise-call-limit@npm:^3.0.1": + version: 3.0.2 + resolution: "promise-call-limit@npm:3.0.2" + checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 10c0/b9179f99394ec8a68b8afc817690185f3b03933f7b46ce2e22c1930dc84b60d09f5ad222beab4e59e58c6c039c7f7fcf620397235ef441a356f31f9744010e12 + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"read-cmd-shim@npm:^4.0.0": + version: 4.0.0 + resolution: "read-cmd-shim@npm:4.0.0" + checksum: 10c0/e62db17ec9708f1e7c6a31f0a46d43df2069d85cf0df3b9d1d99e5ed36e29b1e8b2f8a427fd8bbb9bc40829788df1471794f9b01057e4b95ed062806e4df5ba9 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 + languageName: node + linkType: hard + +"read-pkg-up@npm:^10.0.0": + version: 10.1.0 + resolution: "read-pkg-up@npm:10.1.0" + dependencies: + find-up: "npm:^6.3.0" + read-pkg: "npm:^8.1.0" + type-fest: "npm:^4.2.0" + checksum: 10c0/16a96ad664ff1a983e30aea2bd9490b65e4c6f29fa54c6b2a89c9f1474847b3a181c902c50c724678d5146043fd731d98aa2d8f9d6857e0ce84a30cbfc8a6b21 + languageName: node + linkType: hard + +"read-pkg@npm:^8.0.0, read-pkg@npm:^8.1.0": + version: 8.1.0 + resolution: "read-pkg@npm:8.1.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.1" + normalize-package-data: "npm:^6.0.0" + parse-json: "npm:^7.0.0" + type-fest: "npm:^4.2.0" + checksum: 10c0/e50846bbfbe73f4b8fd8c23c523b2e9f1d78467297a870ff94a9e6db7eb65445a4a392bf2896b7566c1715d36492d92d368f1c4b38996dd3942fd1865eb22936 + languageName: node + linkType: hard + +"read-pkg@npm:^9.0.1": + version: 9.0.1 + resolution: "read-pkg@npm:9.0.1" + dependencies: + "@types/normalize-package-data": "npm:^2.4.3" + normalize-package-data: "npm:^6.0.0" + parse-json: "npm:^8.0.0" + type-fest: "npm:^4.6.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/f3e27549dcdb18335597f4125a3d093a40ab0a18c16a6929a1575360ed5d8679b709b4a672730d9abf6aa8537a7f02bae0b4b38626f99409255acbd8f72f9964 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve@npm:^1.22.4": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" + has-symbols: "npm:^1.0.3" + isarray: "npm:^2.0.5" + checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.1.4" + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.6.0, semver@npm:^7.6.3": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + object-inspect: "npm:^1.13.1" + checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"sigstore@npm:^2.2.0": + version: 2.3.1 + resolution: "sigstore@npm:2.3.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + "@sigstore/sign": "npm:^2.3.2" + "@sigstore/tuf": "npm:^2.3.4" + "@sigstore/verify": "npm:^1.2.1" + checksum: 10c0/8906b1074130d430d707e46f15c66eb6996891dc0d068705f1884fb1251a4a367f437267d44102cdebcee34f1768b3f30131a2ec8fb7aac74ba250903a459aa7 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slash@npm:^5.1.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"sort-keys@npm:^5.0.0": + version: 5.1.0 + resolution: "sort-keys@npm:5.1.0" + dependencies: + is-plain-obj: "npm:^4.0.0" + checksum: 10c0/fdb7aeb02368ad91b2ea947b59f3c95d80f8c71bbcb5741ebd55852994f54a129af3b3663b280951566fe5897de056428810dbb58c61db831e588c0ac110f2b0 + languageName: node + linkType: hard + +"source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 10c0/bdff7534fad6ef59be49becda1edc3fb7f5b3d6f296a715516ab9d972b8ad59af2c34b2003e01db8970d4c673d185ff696ba74c6b61d3bf327e2b3eac22c297c + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 10c0/b292beb8ce9215f8c642bb68be6249c5a4c7f332fc8ecadae7be5cbdf1ea95addc95f0459ef2e7ad9d45fd1064698a097e4eb211c83e772b49bc0ee423e91534 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^10.0.0, ssri@npm:^10.0.6": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"ssri@npm:^11.0.0": + version: 11.0.0 + resolution: "ssri@npm:11.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/7cc695c3f9cb0db534d2b84ff2b02463e852c75c929f0db6be4ce2cec6ea0477c3cb38e8e85d1fa0e4fa121a8c367022e7e664f324052c3537287465b43c761e + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string-width@npm:^7.2.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 10c0/a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strong-log-transformer@npm:^2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: "npm:^0.1.1" + minimist: "npm:^1.2.0" + through: "npm:^2.3.4" + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"temp-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "temp-dir@npm:3.0.0" + checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 + languageName: node + linkType: hard + +"text-extensions@npm:^2.0.0": + version: 2.4.0 + resolution: "text-extensions@npm:2.4.0" + checksum: 10c0/6790e7ee72ad4d54f2e96c50a13e158bb57ce840dddc770e80960ed1550115c57bdc2cee45d5354d7b4f269636f5ca06aab4d6e0281556c841389aa837b23fcb + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"through@npm:>=2.2.7 <3, through@npm:^2.3.4": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.7, tinyglobby@npm:^0.2.9": + version: 0.2.9 + resolution: "tinyglobby@npm:0.2.9" + dependencies: + fdir: "npm:^6.4.0" + picomatch: "npm:^4.0.2" + checksum: 10c0/f65f847afe70f56de069d4f1f9c3b0c1a76aaf2b0297656754734a83b9bac8e105b5534dfbea8599560476b88f7b747d0855370a957a07246d18b976addb87ec + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: 10c0/7f78a4b997e5ba0f5ecb75e7ed786f30bab9063716e7dff24dd84013fb338802e43d176cb21ed12480561f5649a82184cf31efb296601a29d38145b1cdb4c192 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.3.0": + version: 1.3.0 + resolution: "ts-api-utils@npm:1.3.0" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"tuf-js@npm:^2.2.1": + version: 2.2.1 + resolution: "tuf-js@npm:2.2.1" + dependencies: + "@tufjs/models": "npm:2.0.1" + debug: "npm:^4.3.4" + make-fetch-happen: "npm:^13.0.1" + checksum: 10c0/7c17b097571f001730d7be0aeaec6bec46ed2f25bf73990b1133c383d511a1ce65f831e5d6d78770940a85b67664576ff0e4c98e5421bab6d33ff36e4be500c8 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^2.5.1": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 10c0/a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + +"type-fest@npm:^3.8.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: 10c0/547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629 + languageName: node + linkType: hard + +"type-fest@npm:^4.2.0, type-fest@npm:^4.23.0, type-fest@npm:^4.6.0, type-fest@npm:^4.7.1": + version: 4.26.1 + resolution: "type-fest@npm:4.26.1" + checksum: 10c0/d2719ff8d380befe8a3c61068f37f28d6fa2849fd140c5d2f0f143099e371da6856aad7c97e56b83329d45bfe504afe9fd936a7cff600cc0d46aa9ffb008d6c6 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 + languageName: node + linkType: hard + +"typescript@npm:^5.6.3": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.0.3" + which-boxed-primitive: "npm:^1.0.2" + checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"universal-user-agent@npm:^7.0.0, universal-user-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "universal-user-agent@npm:7.0.2" + checksum: 10c0/e60517ee929813e6b3ac0ceb3c66deccafadc71341edca160279ff046319c684fd7090a60d63aa61cd34a06c2d2acebeb8c2f8d364244ae7bf8ab788e20cd8c8 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"upath@npm:^2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.2": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 + languageName: node + linkType: hard + +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: "npm:^1.0.1" + is-boolean-object: "npm:^1.1.0" + is-number-object: "npm:^1.0.4" + is-string: "npm:^1.0.5" + is-symbol: "npm:^1.0.3" + checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d + languageName: node + linkType: hard + +"write-json-file@npm:^6.0.0": + version: 6.0.0 + resolution: "write-json-file@npm:6.0.0" + dependencies: + detect-indent: "npm:^7.0.1" + is-plain-obj: "npm:^4.1.0" + sort-keys: "npm:^5.0.0" + write-file-atomic: "npm:^5.0.1" + checksum: 10c0/3f8f0caec7948d696b1e898512547bba7b63e99eb5b67ddb74cd9ea02aa0b88d48f5b710be3b26ac3ffa8c3e58c779bd610fb349d3cec6e8fb621596a8f85069 + languageName: node + linkType: hard + +"write-package@npm:^7.1.0": + version: 7.1.0 + resolution: "write-package@npm:7.1.0" + dependencies: + deepmerge-ts: "npm:^7.1.0" + read-pkg: "npm:^9.0.1" + sort-keys: "npm:^5.0.0" + type-fest: "npm:^4.23.0" + write-json-file: "npm:^6.0.0" + checksum: 10c0/0db9ca588fc00c753409633ce7777eae4147c6b60993643399f4af0e0ce672b5943587ff5269c3adda36090065d0ef1cf2c6936a62e0d1a548dc81c6507f4f2a + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0, yocto-queue@npm:^1.1.1": + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92 + languageName: node + linkType: hard + +"yoctocolors-cjs@npm:^2.1.2": + version: 2.1.2 + resolution: "yoctocolors-cjs@npm:2.1.2" + checksum: 10c0/a0e36eb88fea2c7981eab22d1ba45e15d8d268626e6c4143305e2c1628fa17ebfaa40cd306161a8ce04c0a60ee0262058eab12567493d5eb1409780853454c6f + languageName: node + linkType: hard